]> Creatis software - creaImageIO.git/blob - src/creaImageIOWxAnySimpleDlg.h
Add Analyze Reader to creaImageIO
[creaImageIO.git] / src / creaImageIOWxAnySimpleDlg.h
1 #include "creaImageIOSimpleView.h"
2 #include <creaWx.h>
3 #include <itkImageFileReader.h>
4 #include <boost/any.hpp>
5 namespace creaImageIO
6 {
7  /**
8    * \ingroup View
9    */
10
11         /// Simple Wxwidgets interface to select file(s) or directory or from creaImageIO database to display
12         class  __declspec(dllexport) WxAnySimpleDlg : public wxDialog
13         {
14         public:
15                  /// Ctor
16                   WxAnySimpleDlg( wxWindow *parent,  
17                           wxString i_title =_T(""),
18                           const std::string i_namedescp = "localdatabase_Descriptor.dscp",   
19                           const std::string i_namedb   = "Local Database"     
20                           );
21
22                   ~WxAnySimpleDlg(){};
23
24                   void setExts(std::vector<std::string>);
25                   /// Callback to read file(s)
26                   void OnReadFile(wxCommandEvent& event);
27
28                   /// Callback to read directory, no recursive
29                    void OnReadDirectory(wxCommandEvent &event);
30               
31                   /// Callback to select from creaImageIO database
32                    void OnReadGimmick(wxCommandEvent &event);
33
34                    /// return a vtkImageData vector of selected images, if available
35                    std::vector<vtkImageData*> getVtkImagesSelected() {return m_Vresults;}
36
37                    wxString getInfoImage();
38
39            
40                    void set(bool i_dicom){m_dicom= i_dicom;}
41                    std::vector <boost::any>& getImagesSelected(){ return m_AnyImages;}
42                 
43                    // return the size of readed images
44                    std::vector<const size_t> getDims(){ return m_AnyDims;}
45
46                    // return the type of readed images
47                    std::vector<const std::type_info *> getTypes(){ return m_AnyType;}
48
49                    // get an Image on wanted type
50                    template <typename TImage> 
51                typename TImage::Pointer getImage(boost::any i_AnyImage)
52               {
53                       typedef itk::Image<TImage> ImageOut;
54                      ImageOut::Pointer img = ImageOut::New();
55                      img = boost::any_cast< ImageOut::Pointer>(i_AnyImage);
56                      return img;
57              }
58
59                  // get the images on itk type defined by user
60                   template <typename TImage> 
61                   std::vector<typename TImage::Pointer>  getTemplatedImagesSelected()
62                   {
63                          std::vector<typename TImage::Pointer> imgs;
64                          std::vector<boost::any>::iterator it = m_AnyImages.begin();
65                      for(; it != m_AnyImages.end(); it++)
66                      {
67                                  imgs.push_back(boost::any_cast<TImage*> (*it));
68                      }
69                          return imgs;
70               }
71                   bool AllSameType();
72         private:
73
74                 
75                 std::vector<const size_t> m_AnyDims;
76                 std::vector<const std::type_info *> m_AnyType;
77                 std::vector<boost::any> m_AnyImages;
78                 std::vector<std::string> m_exts;
79                 std::string namedescp; 
80                 std::string namedb;
81                 wxString infoimage;
82                 std::string m_dir;
83                 template <class TImage> 
84                   void split3Din3Dvtk(TImage* i_Img);
85
86                 template <typename TImage> 
87                   void split4Din3Dvtk(TImage* i_Img);
88
89                 bool m_dicom;
90                 /// interface to read data
91                 SimpleView m_view;
92                  void readImg(const std::string &i_name);
93                  void readDicomImg(const std::vector<std::string> &i_names);
94                  std::vector <vtkImageData*> m_Vresults;
95                  
96           const size_t getNumberOfDimensions(const std::string &i_name);
97           const std::type_info & getType(const std::string &i_name);
98         };
99
100
101 }