]> Creatis software - creaImageIO.git/blob - bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx
434b71972c177a65d4b494bac8ad207febb88de3
[creaImageIO.git] / bbtk / src / bbcreaImageIOItkImagesChooserDialogBox.cxx
1 /*
2   # ---------------------------------------------------------------------
3   #
4   # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
5   #                        pour la Santé)
6   # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7   # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8   # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9   #
10   #  This software is governed by the CeCILL-B license under French law and 
11   #  abiding by the rules of distribution of free software. You can  use, 
12   #  modify and/ or redistribute the software under the terms of the CeCILL-B 
13   #  license as circulated by CEA, CNRS and INRIA at the following URL 
14   #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
15   #  or in the file LICENSE.txt.
16   #
17   #  As a counterpart to the access to the source code and  rights to copy,
18   #  modify and redistribute granted by the license, users are provided only
19   #  with a limited warranty  and the software's author,  the holder of the
20   #  economic rights,  and the successive licensors  have only  limited
21   #  liability. 
22   #
23   #  The fact that you are presently reading this means that you have had
24   #  knowledge of the CeCILL-B license and that you accept its terms.
25   # ------------------------------------------------------------------------
26 */
27 //===== 
28 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
29 //===== 
30
31 #include "bbcreaImageIOItkImagesChooserDialogBox.h"
32 #include "bbcreaImageIOPackage.h"
33
34 #include "itkImage.h"
35 #include "itkImportImageFilter.h"
36
37 /*
38 // -------------------------------------------------------------------------
39 // LFV: avoid itk::Concept check on 4d or superior images
40 #define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di )            \
41   if( t == typeid( itk::Image< ty, di >* ) )                       \
42   {                                                               \
43     this->Export< itk::Image< ty, di > >( );                      \
44     this->ExportVTK< itk::Image< ty, di > >( );                   \
45   }
46 */
47
48 // -------------------------------------------------------------------------
49 // LFV: avoid itk::Concept check on 4d or superior images
50 #define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di )            \
51   if( t == typeid( itk::Image< ty, di >* ) )                      \
52   {                                                               \
53     this->Export< ty , di  >( );                      \
54     this->ExportVTK< itk::Image< ty, di > >( );                   \
55   }
56
57
58 // -------------------------------------------------------------------------
59
60 namespace bbcreaImageIO
61 {
62
63 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaImageIO,ItkImagesChooserDialogBox)
64 BBTK_BLACK_BOX_IMPLEMENTATION(ItkImagesChooserDialogBox,bbtk::AtomicBlackBox);
65 //===== 
66 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
67 //===== 
68 void ItkImagesChooserDialogBox::Process()
69 {
70  
71     dlg = new creaImageIO::WxAnySimpleDlg(0,crea::std2wx(bbGetInputTitle()),"localdatabase_Descriptor.dscp","Local Database"); 
72     dlg->ShowModal(); 
73
74     bbtk::TypeInfo typ = bbitk::GetITKImagePtrTypeInfoFromPixelTypeInfoAndDimension(*dlg->getTypes().front(), dlg->getDims().front());
75
76     BBCREAIMAGEIO_ChooserDlg_Template( typ, char, 1 )
77     else BBCREAIMAGEIO_ChooserDlg_Template( typ, short, 1 )
78     else BBCREAIMAGEIO_ChooserDlg_Template( typ, int, 1 )
79     else BBCREAIMAGEIO_ChooserDlg_Template( typ, long, 1 )
80     else BBCREAIMAGEIO_ChooserDlg_Template( typ, float, 1 )
81     else BBCREAIMAGEIO_ChooserDlg_Template( typ, double, 1 )
82     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned char, 1 )
83     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned short, 1 )
84     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned int, 1 )
85     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned long, 1 )
86     else BBCREAIMAGEIO_ChooserDlg_Template( typ, char, 2 )
87     else BBCREAIMAGEIO_ChooserDlg_Template( typ, short, 2 )
88     else BBCREAIMAGEIO_ChooserDlg_Template( typ, int, 2 )
89     else BBCREAIMAGEIO_ChooserDlg_Template( typ, long, 2 )
90     else BBCREAIMAGEIO_ChooserDlg_Template( typ, float, 2 )
91     else BBCREAIMAGEIO_ChooserDlg_Template( typ, double, 2 )
92     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned char, 2 )
93     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned short, 2 )
94     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned int, 2 )
95     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned long, 2 )
96     else BBCREAIMAGEIO_ChooserDlg_Template( typ, char, 3 )
97     else BBCREAIMAGEIO_ChooserDlg_Template( typ, short, 3 )
98     else BBCREAIMAGEIO_ChooserDlg_Template( typ, int, 3 )
99     else BBCREAIMAGEIO_ChooserDlg_Template( typ, long, 3 )
100     else BBCREAIMAGEIO_ChooserDlg_Template( typ, float, 3 )
101     else BBCREAIMAGEIO_ChooserDlg_Template( typ, double, 3 )
102     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned char, 3 )
103     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned short, 3 )
104     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned int, 3 )
105     else BBCREAIMAGEIO_ChooserDlg_Template( typ, unsigned long, 3 );
106
107
108     /* Deprecated
109        BBTK_TEMPLATE_ITK_IMAGE_SWITCH(typ, Export);
110        BBTK_TEMPLATE_ITK_IMAGE_SWITCH(typ, ExportVTK);
111     */
112
113     delete dlg;
114 }
115
116
117 //template <class TImage>
118 template <typename  ty, size_t di>
119 void ItkImagesChooserDialogBox::Export()
120 {
121         typedef itk::Image<ty,di> TImage;
122
123 printf("EED ItkImagesChooserDialogBox::Export Start \n");
124         if (dlg->getImagesSelected().size() == 1)
125         { 
126 printf("EED ItkImagesChooserDialogBox::Export 1\n");
127                 bbSetOutputOut( dlg->getTemplatedImagesSelected<TImage>().front().GetPointer() ); 
128         } else if (dlg->getImagesSelected().size() > 1){ 
129 printf("EED ItkImagesChooserDialogBox::Export 2\n");
130                 OutputImagesITKType outVect;
131                 typename  std::vector<typename TImage::Pointer> tempImgs= dlg->getTemplatedImagesSelected<TImage>();
132                 typename std::vector<typename TImage::Pointer>::iterator it = tempImgs.begin();
133                 for(;it != tempImgs.end(); ++it)
134                 {
135                         outVect.push_back( (*it).GetPointer() );
136                 } // for
137                 bbSetOutputOutIImages( outVect); 
138
139 //EED creater one 3D image from 2D list
140 //              const unsigned int Dimension = 3;
141 //              typedef itk::RGBPixel< unsigned char > RGBPixelType;
142 //              typedef itk::Image< RGBPixelType, Dimension > RGBImageType;
143 //              typedef itk::ImportImageFilter< RGBPixelType, Dimension > ImportFilterType;
144
145 //              typedef itk::RGBPixel< ty > RGBPixelType;
146                 typedef  ty RGBPixelType;
147                 typedef itk::ImportImageFilter< ty , di > ImportFilterType;
148      typename ImportFilterType::Pointer importFilter = ImportFilterType::New();
149
150
151                 typename TImage::SizeType imsize;
152 //              imsize[0] = img.width();
153 //              imsize[1] = img.height();
154                 imsize[0] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[0];
155                 imsize[1] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[1];
156                 imsize[2] = tempImgs.size();
157 printf("EED ItkImagesChooserDialogBox::Export 2.10\n");
158
159                 typename ImportFilterType::IndexType start;
160                 start.Fill( 0 );
161                 typename ImportFilterType::RegionType region;
162                 region.SetIndex( start );
163                 region.SetSize( imsize );
164                 importFilter->SetRegion( region );
165
166 //              const itk::SpacePrecisionType origin[ di ] = { 0.0, 0.0, 0.0 };
167                 const itk::SpacePrecisionType origin[ 3 ] = { 0.0, 0.0, 0.0 };
168                 importFilter->SetOrigin( origin );
169
170 //              const itk::SpacePrecisionType spacing[ di ] = { 1.0, 1.0, 1.0 };
171                 const itk::SpacePrecisionType spacing[ 3 ] = { 1.0, 1.0, 1.0 };
172                 importFilter->SetSpacing( spacing );
173                 const unsigned long int numberOfPixels2D = imsize[0]*imsize[1];
174                 const unsigned long int numberOfPixels3D = imsize[0]*imsize[1]*imsize[2];
175
176                 RGBPixelType * localBuffer      = new RGBPixelType[ numberOfPixels3D ];
177                 RGBPixelType * tmpLocalBuffer   = localBuffer;
178 printf("EED ItkImagesChooserDialogBox::Export 2.20\n");
179
180                 it = tempImgs.begin();
181                 for(;it != tempImgs.end(); ++it)
182                 {               
183 printf("EED ItkImagesChooserDialogBox::Export 2.30\n");
184                         memcpy(tmpLocalBuffer, (*it).GetPointer()->GetBufferPointer(), numberOfPixels2D);
185                         tmpLocalBuffer = tmpLocalBuffer + numberOfPixels2D;
186                 } // for
187
188                 const bool importImageFilterWillOwnTheBuffer = true;
189                 importFilter->SetImportPointer( localBuffer , numberOfPixels3D , importImageFilterWillOwnTheBuffer );
190 importFilter->Update();
191 importFilter->Register();
192 printf("EED ItkImagesChooserDialogBox::Export 2.40\n");
193
194 //          bbSetOutputOut( (*tempImgs.begin()).GetPointer() ); 
195 //          bbSetOutputOut( importFilter->GetOutput().unsafe_get<TImage*>() ); 
196             bbSetOutputOut( importFilter->GetOutput() ); 
197 printf("EED ItkImagesChooserDialogBox::Export 2.50\n");
198
199    } else {
200 printf("EED ItkImagesChooserDialogBox::Export 3\n");
201       // warning: passing NULL to non-pointer 
202       //bbSetOutputOut( NULL);
203       bbSetOutputOut(0); // JPR
204    }
205          // FCY To test the Output
206           //typedef itk::Image <short, 3> ImageType;
207          //typedef itk::ImageFileReader< ImageType > itkReaderType;
208      //  typename itkReaderType::Pointer reader = itkReaderType::New();
209      //
210      //  reader->SetFileName("d:\test.hdr");
211      //   reader->Update(); 
212          //reader->GetOutput()->Register();
213      //  this->bbSetOutputOut(reader->GetOutput());
214
215 printf("EED ItkImagesChooserDialogBox::Export End \n");
216
217 }
218
219
220 template <class TImage>
221 void ItkImagesChooserDialogBox::ExportVTK()
222 {
223 printf("EED ItkImagesChooserDialogBox::ExportVTK Start \n");
224
225         // BBTK can support only a vector with same dimensions image.
226          if (dlg->getDims().front() < 4)
227          { 
228                   typename std::vector<typename TImage::Pointer> tempImgs= dlg->getTemplatedImagesSelected<TImage>();
229                   typename std::vector<typename TImage::Pointer>::iterator it = tempImgs.begin();
230                   for(;it != tempImgs.end(); ++it)
231                   {
232                         dlg->split3Din3Dvtk<TImage>( (*it) );
233                   }
234                   bbSetOutputOutVImages( dlg->getVtkImagesSelected() ); 
235          } else if (dlg->getDims().front() == 4) { 
236                 // To Test
237                  //  dlg->split4Din3Dvtk("d:/temp2");
238                  // bbSetOutputOutVImages( dlg->getVtkImagesSelected()); 
239          } else {
240                   // NOT IMPLEMENTED YET FOR DIMENSIONS > 4     
241          } // if dlg
242 printf("EED ItkImagesChooserDialogBox::ExportVTK End \n");
243 }
244
245 //===== 
246 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
247 //===== 
248 void ItkImagesChooserDialogBox::bbUserSetDefaultValues()
249
250 }
251
252 //===== 
253 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
254 //===== 
255 void ItkImagesChooserDialogBox::bbUserInitializeProcessing()
256 {
257 }
258
259 //===== 
260 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
261 //===== 
262 void ItkImagesChooserDialogBox::bbUserFinalizeProcessing()
263 {
264 }
265
266 } // EO namespace bbcreaImageIO