X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk%2Fsrc%2FbbmaracasvisuAxeVolume.cxx;h=1a72bb5e4a55e8daf80b77784cd5c8f716081092;hb=2a1cde86bf45b8f9b11514a9b04d5834b10af209;hp=17f2381755c03eb295309bc1374dbebf793a6c03;hpb=edfb09c02aa9dfb052b77b3e5a8e717900d3aab4;p=creaMaracasVisu.git diff --git a/bbtk/src/bbmaracasvisuAxeVolume.cxx b/bbtk/src/bbmaracasvisuAxeVolume.cxx index 17f2381..1a72bb5 100644 --- a/bbtk/src/bbmaracasvisuAxeVolume.cxx +++ b/bbtk/src/bbmaracasvisuAxeVolume.cxx @@ -1,15 +1,71 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "bbmaracasvisuAxeVolume.h" #include "bbcreaMaracasVisuPackage.h" + namespace bbcreaMaracasVisu { + BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,AxeVolume) BBTK_BLACK_BOX_IMPLEMENTATION(AxeVolume,bbtk::AtomicBlackBox); -void AxeVolume::Process() + +int AxeVolume::GetTypeFormat( std::string formatStr , vtkImageData* image ) { + int outputformat = VTK_UNSIGNED_CHAR; + if (formatStr=="SAME") + { + if (image!=NULL) outputformat = image->GetScalarType(); + } + else if (formatStr=="VTK_BIT") outputformat = VTK_BIT; // 1 + else if (formatStr=="VTK_CHAR") outputformat = VTK_CHAR; // 2 + else if (formatStr=="VTK_SIGNED_CHAR") outputformat = VTK_SIGNED_CHAR; // 15 + else if (formatStr=="VTK_UNSIGNED_CHAR") outputformat = VTK_UNSIGNED_CHAR; // 3 + else if (formatStr=="VTK_SHORT") outputformat = VTK_SHORT; // 4 + else if (formatStr=="VTK_UNSIGNED_SHORT") outputformat = VTK_UNSIGNED_SHORT; // 5 + else if (formatStr=="VTK_INT") outputformat = VTK_INT; // 6 + else if (formatStr=="VTK_UNSIGNED_INT") outputformat = VTK_UNSIGNED_INT; // 7 + else if (formatStr=="VTK_LONG") outputformat = VTK_LONG; // 8 + else if (formatStr=="VTK_UNSIGNED_LONG") outputformat = VTK_UNSIGNED_LONG; // 9 + else if (formatStr=="VTK_FLOAT") outputformat = VTK_FLOAT; // 10 + else if (formatStr=="VTK_DOUBLE") outputformat = VTK_DOUBLE; // 11 + else if (formatStr=="MET_CHAR") outputformat = VTK_CHAR; // 2 + else if (formatStr=="MET_UCHAR") outputformat = VTK_UNSIGNED_CHAR; // 3 + else if (formatStr=="MET_SHORT") outputformat = VTK_SHORT; // 4 + else if (formatStr=="MET_USHORT") outputformat = VTK_UNSIGNED_SHORT; // 5 + else if (formatStr=="MET_SHORT") outputformat = VTK_SHORT; // 4 + else if (formatStr=="MET_FLOAT") outputformat = VTK_FLOAT; // 10 + else if (formatStr=="MET_DOUBLE") outputformat = VTK_DOUBLE; // 11 + + return outputformat; +} - printf("EED AxeVolume::Process start \n"); +void AxeVolume::Process() +{ if ( mimage!=NULL ) { mimage->Delete(); @@ -17,9 +73,9 @@ void AxeVolume::Process() int ext[6]; bbGetInputIn()->GetExtent(ext); - int sizeX=ext[1]-ext[0]; - int sizeY=ext[3]-ext[2]; - int sizeZ=ext[5]-ext[4]; + int sizeX=ext[1]-ext[0]+1; + int sizeY=ext[3]-ext[2]+1; + int sizeZ=ext[5]-ext[4]+1; double spc[3]; bbGetInputIn()->GetSpacing(spc); @@ -28,52 +84,60 @@ void AxeVolume::Process() invSpc[1] = 1/spc[1]; invSpc[2] = 1/spc[2]; -printf("EED AxeVolume::Process invSpc %f %f %f\n",invSpc[0],invSpc[1],invSpc[2] ); + int outputformat = GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() ); mimage = vtkImageData::New(); - mimage->SetDimensions(sizeX,sizeY,sizeZ); - mimage->SetOrigin(0,0,0); - mimage->SetExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 ); - mimage->SetWholeExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 ); - mimage->SetScalarTypeToUnsignedShort(); - mimage->SetSpacing(spc); + mimage->SetSpacing(bbGetInputIn()->GetSpacing()); + mimage->SetDimensions(bbGetInputIn()->GetDimensions()); + mimage->SetExtent(bbGetInputIn()->GetExtent()); + mimage->SetOrigin(bbGetInputIn()->GetOrigin()); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + mimage->SetScalarType( outputformat ); mimage->AllocateScalars(); - - - int i,j,k; - int sizeLstPointR = bbGetInputlstPointR().size(); - int iAxe,sizeAxe=bbGetInputlstPointX().size(); - double rx,ry,rz; - double r,rr; +#else + mimage->AllocateScalars( outputformat , 1); +#endif + + int sizeLstPointR = bbGetInputlstPointR().size(); + int iAxe,sizeAxe = bbGetInputlstPointX().size(); + int ii; + int sizeImage = sizeX*sizeY*sizeZ; unsigned short *p; - int sizeImage = sizeX*sizeY*sizeZ; - double px,py,pz,px1,py1,pz1,px2,py2,pz2; // Clean image p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0); - for ( i=0 ; i=1) { r = bbGetInputlstPointR()[ bbGetInputlstPointR().size()-1 ] * invSpc[0]; } else { r = 1; } - } else { - r = bbGetInputlstPointR()[ iAxe ]* invSpc[0]; } px = bbGetInputlstPointX()[iAxe] * invSpc[0]; py = bbGetInputlstPointY()[iAxe] * invSpc[1]; pz = bbGetInputlstPointZ()[iAxe] * invSpc[2]; - printf("AxeVolume::Process %d -> %f, %f, %f,%f\n",iAxe, px,py,pz,r); px1 = px - r; py1 = py - r; pz1 = pz - r; @@ -92,26 +156,26 @@ printf("EED AxeVolume::Process invSpc %f %f %f\n",invSpc[0],invSpc[1],invSpc[2] ry = ry*ry; for ( k=pz1 ; k=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); - if (*p==0) + if ( (i>=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); +// if (*p==0) + if ( mimage->GetScalarComponentAsDouble(i,j,k,0)==0 ) { rz = k - pz; rz = rz*rz; if ( rx + ry + rz <= rr ) { - *p=255; +// *p=255; + mimage->SetScalarComponentFromDouble (i,j,k,0, bbGetInputValue() ); } } // *p==0 - } // inside point + } // if inside point } //for k } //for j } //for i } // for iAxe bbSetOutputOut( mimage ); - - printf("EED AxeVolume::Process end \n"); - } @@ -119,6 +183,8 @@ printf("EED AxeVolume::Process invSpc %f %f %f\n",invSpc[0],invSpc[1],invSpc[2] void AxeVolume::bbUserSetDefaultValues() { mimage=NULL; + bbSetInputOutputFormat("SAME"); + bbSetInputValue(255); } //-----------------------------------------------------------------