]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkTransform.cxx
#3517 Transform box with manual matrix
[bbtk.git] / packages / vtk / src / bbvtkTransform.cxx
index 8b71e0052137ffced07620883c868fcabab315e4..1b29f8b33f29ea910afc72bc93f180de6ad6f3ee 100644 (file)
 
 #include "bbvtkTransform.h"
 #include "bbvtkPackage.h"
+
 #include "vtkMath.h"
+#include "vtkMatrix4x4.h"
+
 namespace bbvtk
 {
   BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,Transform);
@@ -130,16 +133,48 @@ namespace bbvtk
           result->RotateWXYZ( ang  , v3[0], v3[1], v3[2] );
       } // if rotation size >=4
 
+      if (bbGetInputManualMatrixIn().size()==16)
+      {
+          std::vector<double> manaulMatrixIn = bbGetInputManualMatrixIn();
+          vtkMatrix4x4* m = result->GetMatrix();
+          int i,j,ii=0;
+          for (j=0;j<4;j++)
+          {
+              for (i=0;i<4;i++)
+              {
+                  m->SetElement(i,j,manaulMatrixIn[ii]);
+                  ii++;
+              }// for i
+          } // for j
+          m->Modified();
+          result->Update();
+      } // ManualMatrix
+      
+      vtkTransform * finalTransform;
          if (bbGetInputInverse()==false)
          {
-               bbSetOutputOut(result);
+        finalTransform = result;
          } else {
                vtkMatrix4x4 *matrix;
                matrix=vtkMatrix4x4::New();
                result->GetInverse(matrix);
                resultInverse->SetMatrix( matrix );
-               bbSetOutputOut(resultInverse);
+               finalTransform = resultInverse;
          }  // if Inverse
+      
+      bbSetOutputOut(finalTransform);
+
+      std::vector<double> manualMatrixOut;
+      vtkMatrix4x4* m = finalTransform->GetMatrix();
+      int i,j,ii=0;
+      for (j=0;j<4;j++)
+      {
+          for (i=0;i<4;i++)
+          {
+              manualMatrixOut.push_back( m->GetElement(i,j) );
+          }// for i
+      } // for j
+      bbSetOutputManualMatrixOut( manualMatrixOut );
   }
   
 }// EO namespace bbvtk