]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/OpenImageDialog.cxx
OpenImageDialog free the loaded library, viewers create marimagedata in viewer_widget
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / OpenImageDialog.cxx
1
2 #include "OpenImageDialog.h"
3 #include "creaWx.h"
4
5 #if defined(__GNUC__)
6 // GCC compiler
7 // dlopen, dlsym, etc.
8   #include <dlfcn.h>
9 #endif
10
11 typedef vtkImageData* (*GETIMAGEDATADIALOG)();
12
13 namespace creaMaracasVisuKernel{
14         OpenImageDialog::OpenImageDialog(bool usegimmick)
15         {
16                 img = NULL;             
17                 
18                 bool gimmickfound = false;
19
20                 if(usegimmick){
21                 #ifdef WIN32
22                         HINSTANCE gimmickhandle;
23                         gimmickhandle = LoadLibrary(TEXT("creaImageIO2.dll"));
24                         std::cout<<"imagehandle "<<gimmickhandle<<std::endl;
25                         if(gimmickhandle!=NULL){
26
27                                 GETIMAGEDATADIALOG getImageDataDialog;
28
29                                 getImageDataDialog = (GETIMAGEDATADIALOG)GetProcAddress(gimmickhandle, "getImageDataDialog");
30
31                                 std::cout<<"imagedatadialog "<<getImageDataDialog<<std::endl;
32
33                                 if(getImageDataDialog!=NULL){
34                                         img = getImageDataDialog();
35                                         gimmickfound = true;
36                                 }
37                                 if(!FreeLibrary(gimmickhandle)){
38                                         std::cout<<"Error while releasing the handle creaImageIO2.dll"<<std::endl;
39                                 }
40                         }
41                 #else
42                         void * gimmickhandle;   
43                         GETIMAGEDATADIALOG getImageDataDialog;
44                         char * erreur;
45                         int closingerror;
46                         gimmickhandle = dlopen ("libcreaImageIO2.so", RTLD_LAZY);                       
47                         if (! gimmickhandle) {
48                                 erreur = dlerror ();
49                                 std::cout<<erreur<<"imagehandle "<<gimmickhandle<<std::endl;                
50                         }else{
51                                 getImageDataDialog = (GETIMAGEDATADIALOG) dlsym (gimmickhandle, "getImageDataDialog");
52                                 if(!getImageDataDialog){
53                                 erreur = dlerror ();
54                                 std::cout<<erreur<<"getImageDataDialog "<<getImageDataDialog<<std::endl;                        
55                                 }else{
56                                         img = (*getImageDataDialog)();
57                                         gimmickfound = true;
58                                         
59                                 }
60                                 /*dlclose returns 0 on success, non-zero on error*/
61                                 closingerror = dlclose(gimmickhandle);
62                                 if(closingerror!=0){
63                                         std::cout<<closingerror<<"error closing handle  "<<gimmickhandle<<std::endl;  
64                                 }else{
65                                         std::cout<<"handle released..."<<std::endl;  
66                                 }
67                         }
68
69                 #endif
70                 }
71                 
72                 if(!gimmickfound || !usegimmick){
73                         //int i, j, k, *extint;
74                         //unsigned short* ptr1, *ptr2;
75                         wxFileDialog* FD =
76                           new wxFileDialog( 0, _T("Read Image"),wxEmptyString,wxEmptyString, _T("*.mhd"));
77
78                         if (FD->ShowModal()==wxID_OK)
79                         {
80                                 std::string  path= crea::wx2std(FD->GetPath());
81                                 vtkMetaImageReader* reader =  vtkMetaImageReader::New();
82                                 reader->SetFileName(path.c_str());
83                                 reader->Update();
84                                 img = vtkImageData::New();
85                                 img->DeepCopy(reader->GetOutput());
86                                 reader->Delete();
87                                 /*img->SetSpacing(reader->GetOutput()->GetSpacing());
88                                 extint = reader->GetOutput()->GetExtent();
89                                 img->SetExtent(extint);
90                                 img->SetScalarType(reader->GetOutput()->GetScalarType());
91                                 img->SetDimensions(reader->GetOutput()->GetDimensions());
92                                 img->AllocateScalars();
93                                 for (i=extint[0];i <= extint[1];i++){
94                                         for (j=extint[2];j<=extint[3];j++){
95                                                 for (k=extint[4];k<=extint[5];k++){
96                                                         
97                                                                 ptr1=(unsigned short*) reader->GetOutput()->GetScalarPointer(i,j,k); 
98                                                                 ptr2=(unsigned short*)img->GetScalarPointer(i,j,k);
99                                                                 *ptr2 = *ptr1;
100                                                 }
101                                         }
102                                 }*/                             
103                         }
104                         //delete FD;
105                 }
106         }
107
108         //-------------------------------------------------------------------
109         OpenImageDialog::~OpenImageDialog()
110         {
111                 img = NULL;             
112         }
113
114         vtkImageData* OpenImageDialog::getImageData(){          
115                 return img;
116         }
117 }