]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkTransform.cxx
Clean code
[bbtk.git] / packages / vtk / src / bbvtkTransform.cxx
index 64735248c4e7d26bcd78c3d94f4e7275cc1ac838..fd4b98e45a078337c81273444e90bc1979122bc8 100644 (file)
-#include "bbvtkTransform.h"
-#include "bbvtkPackage.h"
+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ #                        pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ #  This software is governed by the CeCILL-B license under French law and
+ #  abiding by the rules of distribution of free software. You can  use,
+ #  modify and/ or redistribute the software under the terms of the CeCILL-B
+ #  license as circulated by CEA, CNRS and INRIA at the following URL
+ #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ #  or in the file LICENSE.txt.
+ #
+ #  As a counterpart to the access to the source code and  rights to copy,
+ #  modify and redistribute granted by the license, users are provided only
+ #  with a limited warranty  and the software's author,  the holder of the
+ #  economic rights,  and the successive licensors  have only  limited
+ #  liability.
+ #
+ #  The fact that you are presently reading this means that you have had
+ #  knowledge of the CeCILL-B license and that you accept its terms.
+ # ------------------------------------------------------------------------ */
 
 
+#include "bbvtkTransform.h"
+#include "bbvtkPackage.h"
+#include "vtkMath.h"
 namespace bbvtk
 {
+  BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,Transform);
+  BBTK_BLACK_BOX_IMPLEMENTATION(Transform,bbtk::AtomicBlackBox);
 
-BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,Transform)
-BBTK_BLACK_BOX_IMPLEMENTATION(Transform,bbtk::AtomicBlackBox);
-void Transform::Process()
-{
-    if (result!=NULL)
-       {
-               result->Delete();
-       }
-       result = vtkTransform::New();
-
+       // --------------------------------------------------------------       
 
-       if (bbGetInputIn()!=NULL)
+       void Transform::bbUserSetDefaultValues()
        {
-               result->Concatenate( bbGetInputIn()->GetMatrix() );
+        bbSetInputIn(NULL);
+               bbSetInputInverse(false);
+
+               vecScale.push_back(1);  // scale x
+               vecScale.push_back(1);  // scale y
+               vecScale.push_back(1);  // scale z
+               bbSetInputScale(vecScale);
+
+               vecRotateWXYZ.push_back(0);  //angle 
+               vecRotateWXYZ.push_back(1);  //vx
+               vecRotateWXYZ.push_back(0);  //vy
+               vecRotateWXYZ.push_back(0);  //vz
+               bbSetInputRotateWXYZ(vecRotateWXYZ);
+
+               vecTranslate.push_back(0);  //tx
+               vecTranslate.push_back(0);  //ty
+               vecTranslate.push_back(0);  //tz
+               bbSetInputTranslate(vecTranslate);
+
+               vecSpacing.push_back(1);  //spacing x
+               vecSpacing.push_back(1);  //spacing y
+               vecSpacing.push_back(1);  //spacing z
+               bbSetInputSpacing(vecSpacing);
+        
+               result = NULL;
        }
 
-
-       if (bbGetInputScale().size()>=3)
+       // --------------------------------------------------------------       
+       void Transform::bbUserInitializeProcessing()
        {
-               result->Scale(bbGetInputScale()[0], bbGetInputScale()[1], bbGetInputScale()[2]);
+               bbUserFinalizeProcessing();
+               result = vtkTransform::New();
+               result->Update();
+               resultInverse = vtkTransform::New();
+               resultInverse->Update();
        }
 
-       if ((bbGetInputTranslate().size()>=3) && (bbGetInputSpacing().size()>=3))
+       // --------------------------------------------------------------       
+       void Transform::bbUserFinalizeProcessing()
        {
-               double tx = bbGetInputTranslate()[0] * bbGetInputSpacing()[0];
-               double ty = bbGetInputTranslate()[1] * bbGetInputSpacing()[1];
-               double tz = bbGetInputTranslate()[2] * bbGetInputSpacing()[2];
-               result->Translate(tx,ty,tz);
+               if (result!=NULL)
+               {
+                       result->Delete();
+                       result=NULL;
+               }
        }
 
-       if (bbGetInputRotateWXYZ().size()>=4)
-       {
-         result->RotateWXYZ(bbGetInputRotateWXYZ()[0],bbGetInputRotateWXYZ()[1], bbGetInputRotateWXYZ()[2], bbGetInputRotateWXYZ()[3]);
-       }
-
-       result->Update();
-
-       bbSetOutputOut(result);
-}
 
-
-void Transform::bbUserConstructor()
-{
-    bbSetInputIn(NULL);
-
-       vecScale.push_back(1);  // scale x
-       vecScale.push_back(1);  // scale y
-       vecScale.push_back(1);  // scale z
-    bbSetInputScale(vecScale);
-
-       vecRotateWXYZ.push_back(0);  //angle 
-       vecRotateWXYZ.push_back(1);  //vx
-       vecRotateWXYZ.push_back(0);  //vy
-       vecRotateWXYZ.push_back(0);  //vz
-    bbSetInputRotateWXYZ(vecRotateWXYZ);
-
-       vecTranslate.push_back(0);  //tx
-       vecTranslate.push_back(0);  //ty
-       vecTranslate.push_back(0);  //tz
-    bbSetInputTranslate(vecTranslate);
-
-       vecSpacing.push_back(1);  //spacing x
-       vecSpacing.push_back(1);  //spacing y
-       vecSpacing.push_back(1);  //spacing z
-    bbSetInputTranslate(vecSpacing);
-
-       result = NULL;  
-}
-/*
-void Transform::bbUserCopyConstructor()
-{
+       // --------------------------------------------------------------       
+  void Transform::Process()
+  {
+         bbUserInitializeProcessing();
+         if (bbGetInputIn()!=NULL)
+      {
+                 result->Concatenate( bbGetInputIn()->GetMatrix() );
+      } // if In
+         if ((bbGetInputTranslate().size()>=3) && (bbGetInputSpacing().size()>=3))
+      {
+                 double tx = bbGetInputTranslate()[0] * bbGetInputSpacing()[0];
+                 double ty = bbGetInputTranslate()[1] * bbGetInputSpacing()[1];
+                 double tz = bbGetInputTranslate()[2] * bbGetInputSpacing()[2];
+                 result->Translate(tx,ty,tz);
+      }  // if translate spacing  size >=3
+         if (bbGetInputScale().size()>=3)
+      {
+                 result->Scale(bbGetInputScale()[0], bbGetInputScale()[1], bbGetInputScale()[2]);
+      }  // if scale size >=3
+         if (bbGetInputRotateWXYZ().size()>=4)
+      {
+                 result->RotateWXYZ(bbGetInputRotateWXYZ()[0],bbGetInputRotateWXYZ()[1], bbGetInputRotateWXYZ()[2], bbGetInputRotateWXYZ()[3]);
+      } // if rotation size >=4
  
+      if (bbGetInputRotateToNormal().size()>=3)
+      {
+          double v1[3],v2[3],v3[3];
+          v1[0]             = 0;
+          v1[1]             = 0;
+          v1[2]             = 1;
+          v2[0]             = bbGetInputRotateToNormal()[0];
+          v2[1]             = bbGetInputRotateToNormal()[1];
+          v2[2]             = bbGetInputRotateToNormal()[2];
+          
+          double mag= sqrt( v2[0]*v2[0] + v2[1]*v2[1]+ v2[2]*v2[2] ) ;
+                 v2[0] = v2[0] / mag;
+                 v2[1] = v2[1] / mag;
+                 v2[2] = v2[2] / mag;
+          vtkMath *vtkmath  = vtkMath::New();
+          double ang        = acos ( vtkmath->Dot(v1,v2)  );
+          ang               = vtkmath->DegreesFromRadians( ang );
+          vtkmath->Cross( v1,v2,v3 );
+          vtkmath->Delete();
+          result->RotateWXYZ( ang  , v3[0], v3[1], v3[2] );
+      } // if rotation size >=4
+
+         if (bbGetInputInverse()==false)
+         {
+               bbSetOutputOut(result);
+         } else {
+               vtkMatrix4x4 *matrix;
+               matrix=vtkMatrix4x4::New();
+               result->GetInverse(matrix);
+               resultInverse->SetMatrix( matrix );
+               bbSetOutputOut(resultInverse);
+         }  // if Inverse
+  }
   
-}
-*/
-void Transform::bbUserDestructor()
-{
-  
-}
-}
-// EO namespace bbvtk
-
-
+}// EO namespace bbvtk