#include #include "bbTransform3DdicomCreateComplementImage.h" #include "bbTransform3DdicomPackage.h" namespace bbTransform3Ddicom { BBTK_ADD_BLACK_BOX_TO_PACKAGE(Transform3Ddicom,CreateComplementImage) BBTK_BLACK_BOX_IMPLEMENTATION(CreateComplementImage,bbtk::AtomicBlackBox); void CreateComplementImage::Process() { if (( bbGetInputImage1()!=NULL ) && ( bbGetInputImage2()!=NULL )) { creaimage1->SetvtkImageData( bbGetInputImage1() ); creaimage1->SetImagePositionPatient( bbGetInputPosition1()[0] , bbGetInputPosition1()[1] , bbGetInputPosition1()[2] ); creaimage1->SetImageSpacing( bbGetInputSpacing1()[0] , bbGetInputSpacing1()[1] , bbGetInputSpacing1()[2] ); creaimage1->SetImageOrientation( bbGetInputOrientation1Vec1()[0] , bbGetInputOrientation1Vec1()[1] , bbGetInputOrientation1Vec1()[2] , bbGetInputOrientation1Vec2()[0] , bbGetInputOrientation1Vec2()[1] , bbGetInputOrientation1Vec2()[2] ); creaimage2->SetvtkImageData( bbGetInputImage2() ); creaimage2->SetImagePositionPatient( bbGetInputPosition2()[0] , bbGetInputPosition2()[1] , bbGetInputPosition2()[2] ); creaimage2->SetImageSpacing( bbGetInputSpacing2()[0] , bbGetInputSpacing2()[1] , bbGetInputSpacing2()[2] ); creaimage2->SetImageOrientation( bbGetInputOrientation2Vec1()[0] , bbGetInputOrientation2Vec1()[1] , bbGetInputOrientation2Vec1()[2] , bbGetInputOrientation2Vec2()[0] , bbGetInputOrientation2Vec2()[1] , bbGetInputOrientation2Vec2()[2] ); creaimagecomplement->SetBaseCreaImage( creaimage1 ); creaimagecomplement->SetComplementCreaImage( creaimage2 ); creaimagecomplement->Update(); double dimx,dimy,dimz; dimx= ((bbGetInputExtOut()[1] - bbGetInputExtOut()[0]) / bbGetInputSpcOut()[0])+1; dimy= ((bbGetInputExtOut()[3] - bbGetInputExtOut()[2]) / bbGetInputSpcOut()[1])+1; dimz= ((bbGetInputExtOut()[5] - bbGetInputExtOut()[4]) / bbGetInputSpcOut()[2])+1; //---- imageresult -------- imageresult->SetSpacing(1,1,1); imageresult->SetDimensions(dimx,dimy,dimz); imageresult->SetExtent(0,dimx-1,0,dimy-1,0,dimz-1); #if (VTK_MAJOR_VERSION <= 5) imageresult->SetWholeExtent(0,dimx-1,0,dimy,0,dimz-1); imageresult->SetScalarTypeToUnsignedShort(); imageresult->AllocateScalars(); imageresult->Update(); #endif #if (VTK_MAJOR_VERSION >= 6) imageresult->AllocateScalars( VTK_UNSIGNED_SHORT ,1 ); #endif //---- imageresult2 -------- imageresult2->SetSpacing(1,1,1); imageresult2->SetDimensions(dimx,dimy,dimz); imageresult2->SetExtent(0,dimx-1,0,dimy-1,0,dimz-1); #if (VTK_MAJOR_VERSION <= 5) imageresult2->SetWholeExtent(0,dimx-1,0,dimy,0,dimz-1); imageresult2->SetScalarTypeToUnsignedShort(); imageresult2->AllocateScalars(); imageresult2->Update(); #endif #if (VTK_MAJOR_VERSION >= 6) imageresult2->AllocateScalars( VTK_UNSIGNED_SHORT ,1 ); #endif unsigned short *p; double value; int x,y,z; double xx,yy,zz; for (x=0;xGetVoxelFromComplementImage_In_BaseCreaImage_Universe(xx,yy,zz); p = (unsigned short *)imageresult->GetScalarPointer( x,y,z ); *p = (unsigned short)value; // -- imageresult2 value = creaimage1->GetVoxelInImageUniverse(xx,yy,zz); p = (unsigned short *)imageresult2->GetScalarPointer( x,y,z ); *p = (unsigned short)value; }// for z } // for y }// for x bbSetOutputOut(imageresult); bbSetOutputOut2(imageresult2); } else { bbSetOutputOut(NULL); } } /* void CreateComplementImage::bbUserConstructor() { creaimage1 = new CreaImage(); creaimage2 = new CreaImage(); creaimagecomplement = new CreaImageComplement(); imageresult = vtkImageData::New(); imageresult2 = vtkImageData::New(); } void CreateComplementImage::bbUserCopyConstructor(bbtk::BlackBox::Pointer) { } void CreateComplementImage::bbUserDestructor() { delete creaimage1; delete creaimage2; } */ //===== // 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 CreateComplementImage::bbUserSetDefaultValues() { creaimage1 = new CreaImage(); creaimage2 = new CreaImage(); creaimagecomplement = new CreaImageComplement(); imageresult = vtkImageData::New(); imageresult2 = vtkImageData::New(); } //===== // 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 CreateComplementImage::bbUserInitializeProcessing() { // THE INITIALIZATION METHOD BODY : // Here does nothing // but this is where you should allocate the internal/output pointers // if any } //===== // 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 CreateComplementImage::bbUserFinalizeProcessing() { // THE FINALIZATION METHOD BODY : // Here does nothing // but this is where you should desallocate the internal/output pointers // if any delete creaimage1; delete creaimage2; } } // EO namespace bbTransform3Ddicom