]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOWxAnySimpleDlg.h
Add Analyze Reader to creaImageIO
[creaImageIO.git] / src / creaImageIOWxAnySimpleDlg.h
diff --git a/src/creaImageIOWxAnySimpleDlg.h b/src/creaImageIOWxAnySimpleDlg.h
new file mode 100644 (file)
index 0000000..08ae0b0
--- /dev/null
@@ -0,0 +1,101 @@
+#include "creaImageIOSimpleView.h"
+#include <creaWx.h>
+#include <itkImageFileReader.h>
+#include <boost/any.hpp>
+namespace creaImageIO
+{
+ /**
+   * \ingroup View
+   */
+
+       /// Simple Wxwidgets interface to select file(s) or directory or from creaImageIO database to display
+       class  __declspec(dllexport) WxAnySimpleDlg : public wxDialog
+       {
+       public:
+                /// Ctor
+                 WxAnySimpleDlg( wxWindow *parent,  
+                         wxString i_title =_T(""),
+                         const std::string i_namedescp = "localdatabase_Descriptor.dscp",   
+                         const std::string i_namedb   = "Local Database"     
+                         );
+
+                 ~WxAnySimpleDlg(){};
+
+                 void setExts(std::vector<std::string>);
+                 /// Callback to read file(s)
+                 void OnReadFile(wxCommandEvent& event);
+
+                 /// Callback to read directory, no recursive
+                  void OnReadDirectory(wxCommandEvent &event);
+             
+                 /// Callback to select from creaImageIO database
+                  void OnReadGimmick(wxCommandEvent &event);
+
+                  /// return a vtkImageData vector of selected images, if available
+                  std::vector<vtkImageData*> getVtkImagesSelected() {return m_Vresults;}
+
+                  wxString getInfoImage();
+
+          
+                  void set(bool i_dicom){m_dicom= i_dicom;}
+                  std::vector <boost::any>& getImagesSelected(){ return m_AnyImages;}
+               
+                  // return the size of readed images
+                  std::vector<const size_t> getDims(){ return m_AnyDims;}
+
+                  // return the type of readed images
+                  std::vector<const std::type_info *> getTypes(){ return m_AnyType;}
+
+                  // get an Image on wanted type
+                  template <typename TImage> 
+              typename TImage::Pointer getImage(boost::any i_AnyImage)
+             {
+                     typedef itk::Image<TImage> ImageOut;
+                    ImageOut::Pointer img = ImageOut::New();
+                    img = boost::any_cast< ImageOut::Pointer>(i_AnyImage);
+                    return img;
+            }
+
+                // get the images on itk type defined by user
+                 template <typename TImage> 
+                 std::vector<typename TImage::Pointer>  getTemplatedImagesSelected()
+                 {
+                        std::vector<typename TImage::Pointer> imgs;
+                        std::vector<boost::any>::iterator it = m_AnyImages.begin();
+                    for(; it != m_AnyImages.end(); it++)
+                    {
+                                imgs.push_back(boost::any_cast<TImage*> (*it));
+                    }
+                        return imgs;
+             }
+                 bool AllSameType();
+       private:
+
+               
+               std::vector<const size_t> m_AnyDims;
+               std::vector<const std::type_info *> m_AnyType;
+               std::vector<boost::any> m_AnyImages;
+               std::vector<std::string> m_exts;
+               std::string namedescp; 
+               std::string namedb;
+               wxString infoimage;
+               std::string m_dir;
+               template <class TImage> 
+                 void split3Din3Dvtk(TImage* i_Img);
+
+               template <typename TImage> 
+                 void split4Din3Dvtk(TImage* i_Img);
+
+               bool m_dicom;
+               /// interface to read data
+               SimpleView m_view;
+                void readImg(const std::string &i_name);
+                void readDicomImg(const std::vector<std::string> &i_names);
+                std::vector <vtkImageData*> m_Vresults;
+                
+         const size_t getNumberOfDimensions(const std::string &i_name);
+         const std::type_info & getType(const std::string &i_name);
+       };
+
+
+}