#include "math.h" #include "CreaImage.h" #include "CreaImageComplement.h" //------------------------------------------------------------------------------------------- CreaImageComplement::CreaImageComplement() { basecreaimage = NULL; complementcreaimage = NULL; transformToComplementCreaImage = vtkTransform::New(); transformToComplementCreaImage->Identity(); } //------------------------------------------------------------------------------------------- CreaImageComplement::~CreaImageComplement() { transformToComplementCreaImage->Delete(); } //------------------------------------------------------------------------------------------- void CreaImageComplement::SetBaseCreaImage(CreaImage* creaimage) { basecreaimage = creaimage; } //------------------------------------------------------------------------------------------- void CreaImageComplement::SetComplementCreaImage(CreaImage* creaimage) { complementcreaimage = creaimage; } //------------------------------------------------------------------------------------------- vtkTransform *CreaImageComplement::GetvtkTransformToComplementImage() { return transformToComplementCreaImage; } //------------------------------------------------------------------------------------------- double CreaImageComplement::GetVoxelFromComplementImage_In_BaseCreaImage_Universe(double x,double y, double z) { double result = 0; double pIn[3]; double pOut[3]; pIn[0]=x; pIn[1]=y; pIn[2]=z; transformToComplementCreaImage->TransformPoint( pIn , pOut ); int ext[6]; complementcreaimage->GetImage()->GetExtent(ext); int px = round(pOut[0]); int py = round(pOut[1]); int pz = round(pOut[2]); if ( (px>=ext[0]) && (px<=ext[1]) && (py>=ext[2]) && (py<=ext[3]) && (pz>=ext[4]) && (pz<=ext[5]) ) { unsigned short *p = (unsigned short*) complementcreaimage->GetImage()->GetScalarPointer( px , py ,pz ); result = (double)*p; } return result; } //------------------------------------------------------------------------------------------- void CreaImageComplement::Update() { if (basecreaimage!=NULL) { vtkTransform *transform; vtkMatrix4x4 *inversTransformComplementImage = vtkMatrix4x4::New(); vtkTransform* tmpTransformComplementCreaImage = vtkTransform::New(); basecreaimage -> Update(); complementcreaimage -> Update(); transform = basecreaimage -> GetvtkTransform(); tmpTransformComplementCreaImage = complementcreaimage -> GetvtkTransform(); tmpTransformComplementCreaImage -> GetInverse( inversTransformComplementImage ); transformToComplementCreaImage -> PostMultiply(); transformToComplementCreaImage -> Identity(); transformToComplementCreaImage -> Concatenate( transform ); transformToComplementCreaImage -> Concatenate( inversTransformComplementImage ); transformToComplementCreaImage -> Update(); inversTransformComplementImage -> Delete(); tmpTransformComplementCreaImage -> Delete(); } else { transformToComplementCreaImage->Identity(); } // if }