X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fvtk%2Fsrc%2FbbvtkCleanExternalPlane.cxx;h=618f2b0eace65dc9d16e913cdda2f6ecde7c0f1c;hb=eaeb70d041d2e5fa77547f37f231ee398a44768a;hp=c7306d06451dfd0727445ada6899869c7cabf409;hpb=cfad95b6e08e6e53846ffcda7fbc5932065f2c47;p=bbtk.git diff --git a/packages/vtk/src/bbvtkCleanExternalPlane.cxx b/packages/vtk/src/bbvtkCleanExternalPlane.cxx index c7306d0..618f2b0 100644 --- a/packages/vtk/src/bbvtkCleanExternalPlane.cxx +++ b/packages/vtk/src/bbvtkCleanExternalPlane.cxx @@ -35,30 +35,16 @@ namespace bbvtk BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,CleanExternalPlane) BBTK_BLACK_BOX_IMPLEMENTATION(CleanExternalPlane,bbtk::AtomicBlackBox); -//===== -// 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) -//===== -void CleanExternalPlane::Process() -{ - -// THE MAIN PROCESSING METHOD BODY -// Here we simply set the input 'In' value to the output 'Out' -// And print out the output value -// INPUT/OUTPUT ACCESSORS ARE OF THE FORM : -// void bbSet{Input|Output}NAME(const TYPE&) -// const TYPE& bbGet{Input|Output}NAME() const -// Where : -// * NAME is the name of the input/output -// (the one provided in the attribute 'name' of the tag 'input') -// * TYPE is the C++ type of the input/output -// (the one provided in the attribute 'type' of the tag 'input') +//---------------------------------------------------------------------- +void CleanExternalPlane::CleanTypeA(vtkImageData* image) +{ if ( bbGetInputIn()!=NULL ) { int i,j; int ext[6]; int dim[3]; - bbGetInputIn()->GetWholeExtent(ext); + image->GetWholeExtent(ext); dim[0]=ext[1]-ext[0]+1; dim[1]=ext[3]-ext[2]+1; @@ -69,36 +55,112 @@ void CleanExternalPlane::Process() { for (j=0 ; jSetScalarComponentFromDouble (i, j, 0 , 0, 0.0); - bbGetInputIn()->SetScalarComponentFromDouble (i, j, dim[2]-1, 0, 0.0); - } - } + image->SetScalarComponentFromDouble (ext[0]+i, ext[2]+j, ext[4]+0 , 0, 0.0); + image->SetScalarComponentFromDouble (ext[0]+i, ext[2]+j, ext[4]+dim[2]-1, 0, 0.0); + } // for j + }// for i // YZ plane for (i=0 ; iSetScalarComponentFromDouble (0 , i, j, 0, 0.0); - bbGetInputIn()->SetScalarComponentFromDouble (dim[0]-1 , i, j, 0, 0.0); - } - } + image->SetScalarComponentFromDouble (ext[0]+0 , ext[2]+i, ext[4]+j, 0, 0.0); + image->SetScalarComponentFromDouble (ext[0]+dim[0]-1 , ext[2]+i, ext[4]+j, 0, 0.0); + } // for j + } // for i // YZ plane for (i=0 ; iSetScalarComponentFromDouble (i, 0 , j, 0, 0.0); - bbGetInputIn()->SetScalarComponentFromDouble (i, dim[1]-1 , j, 0, 0.0); - } - } + image->SetScalarComponentFromDouble (ext[0]+i, ext[2]+0 , ext[4]+j, 0, 0.0); + image->SetScalarComponentFromDouble (ext[0]+i, ext[2]+dim[1]-1 , ext[4]+j, 0, 0.0); + } // for j + }// for i + } // if In +} + +//---------------------------------------------------------------------- +void CleanExternalPlane::CleanTypeB() +{ + + int ext[6]; + int dimA[3]; + int dimB[3]; + bbGetInputIn()->GetWholeExtent(ext); + + dimA[0] = ext[1]-ext[0]+1; + dimA[1] = ext[3]-ext[2]+1; + dimA[2] = ext[5]-ext[4]+1; + + dimB[0] = dimA[0] + 2; + dimB[1] = dimA[1] + 2; + dimB[2] = dimA[2] + 2; + - - } - + imageoutput->Initialize(); + imageoutput->SetScalarType( bbGetInputIn()->GetScalarType() ); + imageoutput->SetSpacing( bbGetInputIn()->GetSpacing() ); + imageoutput->SetDimensions( dimB[0], dimB[1], dimB[2] ); + imageoutput->AllocateScalars(); - bbSetOutputOut( bbGetInputIn() ); + + int j,k; + long sizeBlock= dimA[0] * bbGetInputIn()->GetScalarSize(); + + for (j=0;jGetScalarPointer(1,j+1,k+1) , bbGetInputIn()->GetScalarPointer(0,j,k) , sizeBlock ); + } + } + imageoutput->Update(); + imageoutput->Modified(); +} + + +//===== +// 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) +//===== +void CleanExternalPlane::Process() +{ + +// THE MAIN PROCESSING METHOD BODY +// Here we simply set the input 'In' value to the output 'Out' +// And print out the output value +// INPUT/OUTPUT ACCESSORS ARE OF THE FORM : +// void bbSet{Input|Output}NAME(const TYPE&) +// const TYPE& bbGet{Input|Output}NAME() const +// Where : +// * NAME is the name of the input/output +// (the one provided in the attribute 'name' of the tag 'input') +// * TYPE is the C++ type of the input/output +// (the one provided in the attribute 'type' of the tag 'input') + +// Nothing to do + if (bbGetInputType()==-1) + { + bbSetOutputOut( bbGetInputIn() ); + } + +// Clean external planes + if (bbGetInputType()==0) + { + CleanTypeA( bbGetInputIn() ); + bbSetOutputOut( bbGetInputIn() ); + } + +// Add new faces and clean the external planes + if (bbGetInputType()==1) + { + CleanTypeB(); + CleanTypeA(imageoutput); + bbSetOutputOut( imageoutput ); + } + @@ -111,7 +173,8 @@ void CleanExternalPlane::bbUserSetDefaultValues() // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX // Here we initialize the input 'In' to 0 - bbSetInputIn(0); + bbSetInputIn(NULL); + bbSetInputType(0); } //===== @@ -125,6 +188,7 @@ void CleanExternalPlane::bbUserInitializeProcessing() // but this is where you should allocate the internal/output pointers // if any + imageoutput = vtkImageData::New(); } //===== @@ -137,9 +201,9 @@ void CleanExternalPlane::bbUserFinalizeProcessing() // Here does nothing // but this is where you should desallocate the internal/output pointers // if any - + imageoutput->Delete(); } -} -// EO namespace bbvtk + +} // EO namespace bbvtk