X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcreaVtk%2FcreaVtkUnMosaicVectorVtkImageData.cpp;h=93faba51325d36df492f786bc2c5283684e52ddc;hb=bb126c70f9387c6476ed615ce6dc484946266df5;hp=2392af91642cb4eb33135818c02851048b63b8e6;hpb=c5da7c2dc598a5d8ab3e1945630113a0d3de0968;p=creaVtk.git diff --git a/lib/creaVtk/creaVtkUnMosaicVectorVtkImageData.cpp b/lib/creaVtk/creaVtkUnMosaicVectorVtkImageData.cpp index 2392af9..93faba5 100644 --- a/lib/creaVtk/creaVtkUnMosaicVectorVtkImageData.cpp +++ b/lib/creaVtk/creaVtkUnMosaicVectorVtkImageData.cpp @@ -27,6 +27,9 @@ #include "creaVtkUnMosaicVectorVtkImageData.h" +#define _USE_MATH_DEFINES // for C +#include + creaVtkUnMosaicVectorVtkImageData::creaVtkUnMosaicVectorVtkImageData() { } @@ -35,76 +38,92 @@ creaVtkUnMosaicVectorVtkImageData::~creaVtkUnMosaicVectorVtkImageData() { } -std::vector creaVtkUnMosaicVectorVtkImageData::unMosaicVectorVtkImageData (int NbImagesPerRow, int NbImagesInMosaic, std::vector bbGetInputIn) +std::vector creaVtkUnMosaicVectorVtkImageData::unMosaicVectorVtkImageData (std::vector imageInput, std::vector NbImagesInMosaicVector) { - int nbImagesPerRow = NbImagesPerRow; - int nbImagesInMosaic = NbImagesInMosaic; - - if (nbImagesPerRow == 0 || nbImagesInMosaic == 0) { - std::cout << "Not possible" << std::endl; - } - - std::vector imageIn = bbGetInputIn; - + std::vector nbImagesPerRow; + std::vector nbImagesInMosaic; + double imagesInMosaic; + for(int i = 0; i < NbImagesInMosaicVector.size(); i++) + { + imagesInMosaic = NbImagesInMosaicVector[i]; + nbImagesPerRow.push_back( ceil(sqrt(imagesInMosaic)) ); + nbImagesInMosaic.push_back(NbImagesInMosaicVector[i]); + } // for i + if(imageInput.size() != NbImagesInMosaicVector.size()) + { + for(int j = NbImagesInMosaicVector.size(); j < imageInput.size(); j++) + { + imagesInMosaic = NbImagesInMosaicVector[NbImagesInMosaicVector.size()-1]; + nbImagesPerRow.push_back( ceil(sqrt(imagesInMosaic)) ); + nbImagesInMosaic.push_back( NbImagesInMosaicVector[NbImagesInMosaicVector.size()-1] ); + } // for j + } // for imageInput size + if (nbImagesPerRow.size() == 0 || nbImagesInMosaic.size() == 0) + { + std::cout << "VtkUnMosaicVectorVtkImageData ERROR: The number of Images by mosaic is not set " << std::endl; + } // if nbImagesPerRow size + std::vector imageIn = imageInput; std::vector mImageOut; - for (int i = 0 ; i < (unsigned int)imageIn.size() ; i++) { - mImageOut.push_back( unMosaic(imageIn[i], NbImagesPerRow, NbImagesInMosaic) ); - } - + for (int i = 0 ; i < (unsigned int)imageIn.size() ; i++) + { + mImageOut.push_back( unMosaic(imageIn[i], nbImagesPerRow[i], nbImagesInMosaic[i]) ); + } // for i return mImageOut; } +//------------------------------------------------------------------------------ vtkImageData * creaVtkUnMosaicVectorVtkImageData::unMosaic(vtkImageData *imageIn, int nbImagesPerRow, int numberOfImagesInMosaic) { - int inputdims[3]; - int outputdims[3]; - imageIn->GetDimensions (inputdims); - unsigned short *input = (unsigned short *)(imageIn->GetScalarPointer()); - imageIn->Update(); - - unsigned int div = (unsigned int)ceil(sqrt( (double)numberOfImagesInMosaic ) ); - outputdims[0] = inputdims[0] / div; - outputdims[1] = inputdims[1] / div; - outputdims[2] = numberOfImagesInMosaic; + int inputdims[3]; + int outputdims[3]; + imageIn->GetDimensions (inputdims); + unsigned short *input = (unsigned short *)(imageIn->GetScalarPointer()); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + imageIn->Update(); +#else + // .. +#endif + unsigned int div = (unsigned int)ceil(sqrt( (double)numberOfImagesInMosaic ) ); + outputdims[0] = inputdims[0] / div; + outputdims[1] = inputdims[1] / div; + outputdims[2] = numberOfImagesInMosaic; vtkImageData *vtkImageOut; vtkImageOut = vtkImageData::New(); vtkImageOut->SetDimensions( outputdims ); vtkImageOut->SetExtent(0,outputdims[0]-1,0,outputdims[1]-1,0,outputdims[2]-1); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 vtkImageOut->SetWholeExtent(0,outputdims[0]-1,0,outputdims[1]-1,0,outputdims[2]-1); vtkImageOut->SetNumberOfScalarComponents(1); //vtkImageOut->SetSpacing( blabla ); vtkImageOut->SetScalarType( VTK_UNSIGNED_SHORT ); vtkImageOut->AllocateScalars(); vtkImageOut->Update(); - +#else + vtkImageOut->AllocateScalars(VTK_UNSIGNED_SHORT,1); +#endif unsigned short *output =(unsigned short *)(vtkImageOut->GetScalarPointer()); - unsigned short *dest = output; int dimXImageElem = outputdims[0]; int dimYImageElem = outputdims[1]; int lgrImage = dimXImageElem*dimYImageElem; int debImage; - for (int i=0; i=0; i--) { debImage=(i/nbImagesPerRow) * lgrImage*nbImagesPerRow + (i%nbImagesPerRow)*dimXImageElem; - for(int j=0; j=0; j--) { memcpy(dest, input+debImage, dimXImageElem*sizeof(unsigned short)); debImage += dimXImageElem*nbImagesPerRow; dest += dimXImageElem; - } - } + } // for j + } // for i return vtkImageOut; } -//--------------------------------------------- -//Method template -//--------------------------------------------- -/* -void creaVtkUnMosaicVectorVtkImageData::FunctionName(int& parameterA) -{ - parameterA = 2 * parameterA; - return; -} -*/