#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() { printf("EED AxeVolume::Process start \n"); if ( mimage!=NULL ) { mimage->Delete(); } int ext[6]; bbGetInputIn()->GetExtent(ext); int sizeX=ext[1]-ext[0]; int sizeY=ext[3]-ext[2]; int sizeZ=ext[5]-ext[4]; double spc[3]; bbGetInputIn()->GetSpacing(spc); double invSpc[3]; invSpc[0] = 1/spc[0]; 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] ); 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->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,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; px2 = px + r; py2 = py + r; pz2 = pz + r; rr=r*r; for ( i=px1 ; i<=px2 ; i++ ) { rx = i - px; rx = rx*rx; for ( j=py1 ; j=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); if (*p==0) { rz = k - pz; rz = rz*rz; if ( rx + ry + rz <= rr ) { *p=255; } } // *p==0 } // inside point } //for k } //for j } //for i } // for iAxe bbSetOutputOut( mimage ); printf("EED AxeVolume::Process end \n"); } //----------------------------------------------------------------- void AxeVolume::bbUserSetDefaultValues() { mimage=NULL; } //----------------------------------------------------------------- void AxeVolume::bbUserInitializeProcessing() { } //----------------------------------------------------------------- void AxeVolume::bbUserFinalizeProcessing() { } //----------------------------------------------------------------- } // EO namespace bbcreaMaracasVisu