X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk%2Fsrc%2FbbmaracasvisuAxeVolume.cxx;h=b660b691d8f7b518960be41833eace21570a4d47;hb=d79fc05657cfa43ed1cd6937a5acaeaf70e09b45;hp=79e5ac0cf0fbfb4ccbed8ce1268a661ec33599f3;hpb=c207afb3b26146b6286e2492ba23a744e3a2e1d2;p=creaMaracasVisu.git diff --git a/bbtk/src/bbmaracasvisuAxeVolume.cxx b/bbtk/src/bbmaracasvisuAxeVolume.cxx index 79e5ac0..b660b69 100644 --- a/bbtk/src/bbmaracasvisuAxeVolume.cxx +++ b/bbtk/src/bbmaracasvisuAxeVolume.cxx @@ -25,122 +25,189 @@ #include "bbmaracasvisuAxeVolume.h" #include "bbcreaMaracasVisuPackage.h" + +#include "creaVtk_MACROS.h" + namespace bbcreaMaracasVisu { + BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,AxeVolume) BBTK_BLACK_BOX_IMPLEMENTATION(AxeVolume,bbtk::AtomicBlackBox); -void AxeVolume::Process() -{ - printf("EED AxeVolume::Process start \n"); - - if ( mimage!=NULL ) - { - mimage->Delete(); +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; +} - int ext[6]; - bbGetInputIn()->GetExtent(ext); - 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); - double invSpc[3]; - invSpc[0] = 1/spc[0]; - invSpc[1] = 1/spc[1]; - invSpc[2] = 1/spc[2]; - - mimage = vtkImageData::New(); - mimage->SetSpacing(bbGetInputIn()->GetSpacing()); - mimage->SetDimensions(bbGetInputIn()->GetDimensions()); - mimage->SetExtent(bbGetInputIn()->GetExtent()); - mimage->SetOrigin(bbGetInputIn()->GetOrigin()); - //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->AllocateScalars(); - - - - int i,j,k; - int sizeLstPointR = bbGetInputlstPointR().size(); - int iAxe,sizeAxe = bbGetInputlstPointX().size(); - double rx,ry,rz; - double r,rr; - unsigned short *p; - int sizeImage = sizeX*sizeY*sizeZ; - double px,py,pz; - double px1,py1,pz1; - double px2,py2,pz2; - - // Clean image - p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0); - for ( i=0 ; i=1) + mimage->Delete(); + } + + int ext[6]; + bbGetInputIn()->GetExtent(ext); + 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); + double invSpc[3]; + invSpc[0] = 1/spc[0]; + invSpc[1] = 1/spc[1]; + invSpc[2] = 1/spc[2]; + + int outputformat = GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() ); + + mimage = vtkImageData::New(); + 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(); + #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; + + // Clean image + memset( (char*)mimage->GetScalarPointer(0,0,0) , 0, sizeImage*(mimage->GetScalarSize()) ); + + // p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0); + // for ( ii=0 ; ii=1) + { + r = bbGetInputlstPointR()[ bbGetInputlstPointR().size()-1 ] * invSpc[0]; + } else { + r = 1; + } + } // if iAxe sizeLstPointR + px = bbGetInputlstPointX()[iAxe] * invSpc[0]; + py = bbGetInputlstPointY()[iAxe] * invSpc[1]; + pz = bbGetInputlstPointZ()[iAxe] * invSpc[2]; + px1 = px - r; + py1 = py - r; + pz1 = pz - r; + px2 = px + r; + py2 = py + r; + pz2 = pz + r; + rr=r*r; + + long int index; + for ( i=px1 ; i<=px2 ; i++ ) { - ry = j - py; - ry = ry*ry; - for ( k=pz1 ; k=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); - if (*p==0) + ry = j - py; + ry = ry*ry; + for ( k=pz1 ; k=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); + // if (*p==0) + index=i+j*sizeX+k*sizeX*sizeY; + GETVALUE2_VTK_CREA(vItmpOMP,pI,stI,index) + // EED2020-04-25 if ( mimage->GetScalarComponentAsDouble(i,j,k,0)==0 ) + if ( vI==0 ) { - *p=255; - } - } // *p==0 - } // inside point - } //for k - } //for j - } //for i - } // for iAxe - bbSetOutputOut( mimage ); - - printf("EED AxeVolume::Process end \n"); - + rz = k - pz; + rz = rz*rz; + if ( rx + ry + rz <= rr ) + { + // *p=255; + vItmpOMP=bbGetInputValue(); + SETVALUE2_VTK_CREA(vItmpOMP,pI,stI,index) + // EED2020-04-25 mimage->SetScalarComponentFromDouble (i,j,k,0, bbGetInputValue() ); + } + } // *p==0 + } // if inside point + } //for k + } //for j + } //for i + } // for iAxe + bbSetOutputOut( mimage ); + } else { + printf("\n"); + printf("EED Warnning!! AxeVolume::Process The Input In is not set.\n"); + printf("\n"); + }// if bbGetInputIn() } @@ -148,6 +215,8 @@ void AxeVolume::Process() void AxeVolume::bbUserSetDefaultValues() { mimage=NULL; + bbSetInputOutputFormat("SAME"); + bbSetInputValue(255); } //-----------------------------------------------------------------