]> Creatis software - creaImageIO.git/blob - lib/TransformDicom3D/CreaImageComplement.cxx
#3327 TransformDicom3D in Linux
[creaImageIO.git] / lib / TransformDicom3D / CreaImageComplement.cxx
1 #include "math.h"
2 #include "CreaImage.h"
3 #include "CreaImageComplement.h"
4
5 //-------------------------------------------------------------------------------------------
6 CreaImageComplement::CreaImageComplement()
7 {
8         basecreaimage                                   = NULL;
9         complementcreaimage                             = NULL;
10         transformToComplementCreaImage  = vtkTransform::New();
11         transformToComplementCreaImage->Identity();
12 }
13
14 //-------------------------------------------------------------------------------------------
15 CreaImageComplement::~CreaImageComplement()
16 {
17         transformToComplementCreaImage->Delete();
18 }
19
20 //-------------------------------------------------------------------------------------------
21 void CreaImageComplement::SetBaseCreaImage(CreaImage* creaimage)
22 {
23         basecreaimage = creaimage;
24 }
25
26 //-------------------------------------------------------------------------------------------
27 void CreaImageComplement::SetComplementCreaImage(CreaImage* creaimage)
28 {
29         complementcreaimage = creaimage;
30 }
31
32 //-------------------------------------------------------------------------------------------
33 vtkTransform *CreaImageComplement::GetvtkTransformToComplementImage()
34 {
35         return transformToComplementCreaImage;
36 }
37
38
39 //-------------------------------------------------------------------------------------------
40 double CreaImageComplement::GetVoxelFromComplementImage_In_BaseCreaImage_Universe(double x,double y, double z)
41 {
42         double result = 0;
43         double pIn[3];
44         double pOut[3];
45         
46         pIn[0]=x;
47         pIn[1]=y;
48         pIn[2]=z;
49         
50     transformToComplementCreaImage->TransformPoint( pIn , pOut );
51         int ext[6];
52         complementcreaimage->GetImage()->GetExtent(ext);
53         int px = round(pOut[0]);
54         int py = round(pOut[1]);
55         int pz = round(pOut[2]);
56         if ( (px>=ext[0]) && (px<=ext[1]) &&  
57                  (py>=ext[2]) && (py<=ext[3]) && 
58                  (pz>=ext[4]) && (pz<=ext[5])  ) 
59         {
60                 unsigned short *p = (unsigned short*) complementcreaimage->GetImage()->GetScalarPointer( px , py ,pz );
61                 result = (double)*p;
62         }
63         return result;
64 }
65
66
67 //-------------------------------------------------------------------------------------------
68 void CreaImageComplement::Update()
69 {
70         if (basecreaimage!=NULL)
71         {
72                 vtkTransform *transform;
73                 vtkMatrix4x4 *inversTransformComplementImage    = vtkMatrix4x4::New();  
74                 vtkTransform* tmpTransformComplementCreaImage           = vtkTransform::New();
75
76                 basecreaimage                                   -> Update();    
77                 complementcreaimage                             -> Update();
78                 
79                 transform = basecreaimage               -> GetvtkTransform();
80                 tmpTransformComplementCreaImage =  complementcreaimage  -> GetvtkTransform();
81
82                 tmpTransformComplementCreaImage -> GetInverse( inversTransformComplementImage );        
83
84                 transformToComplementCreaImage  -> PostMultiply();
85                 transformToComplementCreaImage  -> Identity();
86
87                 transformToComplementCreaImage  -> Concatenate( transform );
88                 transformToComplementCreaImage  -> Concatenate( inversTransformComplementImage );
89                 transformToComplementCreaImage  -> Update();
90
91                 inversTransformComplementImage  -> Delete();
92                 tmpTransformComplementCreaImage         -> Delete();
93                 
94         } else {
95                 transformToComplementCreaImage->Identity();
96         } // if
97         
98 }
99
100