]> Creatis software - creaImageIO.git/blob - bbtk/src/bbcreaImageIOImagesChooserDialogBox.xml
to resolve Lisa-Eduardo issue
[creaImageIO.git] / bbtk / src / bbcreaImageIOImagesChooserDialogBox.xml
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!--==========================================================================
3    STARTS THE DESCRIPTION OF THE BLACK BOX -->
4 <blackbox name="ImagesChooserDialogBox">
5   <!--========================================================================
6     THE BOX DOCUMENTATION -->
7   <author>cervenansky.frederic@creatis.insa-lyon.fr</author>
8   <description>
9     ImagesChooserDialogBox is a simple application to select file(s) or directory or data from Gimmick database and display them. It handles DICOM, jpg, tif, png, bmp and mhd.
10   </description>
11   <category>image;reader;dicom;</category>
12
13   <!--========================================================================
14     #include directives to be put in the .h generated
15     There must be one tag per file to include -->
16   <include>creaImageIOWxSimpleDlg.h</include>
17   <!--========================================================================
18     INPUTS/OUTPUTS DECLARATION -->
19
20   <input name="Title" type="std::string" description="Title of the dialog"/>
21   <typedef>
22     <PRE>
23       typedef std::vector<vtkImageData*> OutputImagesType;</PRE>
24   </typedef>
25
26   <output name="Out" type="vtkImageData*" description="The selected image"/>
27   <output name="OutImages" type="OutputImagesType" description="Vector of selected images"/>
28   
29   <!--========================================================================
30     PROCESS section -->
31
32   <process>
33     <PRE>
34         creaImageIO::WxSimpleDlg dlg(0,crea::std2wx(bbGetInputTitle()),"localdatabase_Descriptor.dscp","Local Database"); 
35                 dlg.ShowModal(); 
36                 if (dlg.getImagesSelected().size()!=0){ 
37                   if(dlg.getImagesSelected().size() ==1)
38                   {
39                         bbSetOutputOut( dlg.getImagesSelected()[0] );  
40                   }
41                   else
42                   {
43                           // FCY: it will be a big problem if we have several kind of data in the same folder.
44                           vtkImageData *out;
45                           // creation of a huge vtkImageData!!!!
46                           vtkImageData* first = dlg.getImagesSelected()[0];
47                           out  = vtkImageData::New();
48                           out->SetScalarType(first->GetScalarType());
49                           out->SetNumberOfScalarComponents(first->GetNumberOfScalarComponents());
50                           int ext[6];
51                           first->GetWholeExtent(ext); 
52                           if(ext[5] == 0)
53                           {
54                             ext[5] = dlg.getImagesSelected().size()-1;
55                           }
56                           else
57                           {
58                                 ext[5] = ext[5] * dlg.getImagesSelected().size()-1; // to deal with multiframes 
59                           }
60                           out->SetExtent(ext);
61                           int dim[3];
62                           double spac[3];
63                           first->GetDimensions(dim);
64                           first->GetSpacing(spac);
65                       out->SetSpacing(spac);
66                           out->SetDimensions(dim[0], dim[1], dlg.getImagesSelected().size() );
67                           out->AllocateScalars();
68                           out->Update();
69                           unsigned long imsize = dim[0] * dim[1];
70                           imsize = imsize * dim[2] ;  // deal with multiframes here
71                           // differents formats char , short, etc...
72                           // differents components 1..3  ex. jpg ->RGB 3
73                           imsize = imsize * first->GetScalarSize() * first->GetNumberOfScalarComponents();
74                           int slice = 0;
75                       std::vector<vtkImageData*>::iterator it;
76                       for (it=dlg.getImagesSelected().begin(); it!=dlg.getImagesSelected().end(); ++it) 
77                           {
78                                   memcpy(out->GetScalarPointer(0,0,slice), (*it)->GetScalarPointer(0,0,0), imsize);
79                                   slice++;
80                           }     
81                           //for (it=dlg.getImagesSelected().begin(); it!=dlg.getImagesSelected().end(); ++it) 
82                           //{
83                                  // (*it)->Delete();
84                           //}
85                           bbSetOutputOut(out);
86                   }
87                 } else { 
88               bbSetOutputOut( NULL );  
89                 } 
90         bbSetOutputOutImages( dlg.getImagesSelected());  
91     </PRE>
92   </process>
93
94   <!--======================================================================
95    CONSTRUCTORS / DESTRUCTORS (OPTIONAL) -->
96
97    
98   <defaultValues>
99   <PRE>
100
101   </PRE>
102   </defaultValues>
103
104    
105
106 </blackbox>
107