X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FTransformer.cxx;h=66763d670b4b49750d4377b9f49fbacdce56a36a;hb=ab5334c59e38e205d1fd826dc7fed9454f5194ab;hp=3fa55077343044b8af26c3fcda458be4c0e15871;hpb=0c0807563f54ac3149d9bd23815c4ddacbc5b223;p=creaRigidRegistration.git diff --git a/lib/Transformer.cxx b/lib/Transformer.cxx index 3fa5507..66763d6 100644 --- a/lib/Transformer.cxx +++ b/lib/Transformer.cxx @@ -1,3 +1,29 @@ +/* +# --------------------------------------------------------------------- +# +# 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 "Transformer.h" #include "vtkMatrix4x4.h" @@ -15,10 +41,9 @@ Transformer::Transformer() //If the transform already exists, we delete it before we create a new transform //and set the matrix with the identity matrix _transform= vtkTransform::New(); - vtkMatrix4x4 *_matrix = vtkMatrix4x4::New(); + _matrix = vtkMatrix4x4::New(); _matrix->Identity(); - _transform->SetMatrix(_matrix); - + _transform->SetMatrix(_matrix); } /* @@ -28,6 +53,7 @@ Transformer::~Transformer() { //We delete the existing transform if (_transform != NULL ) { _transform->Delete(); } + if (_matrix != NULL ) { _matrix->Delete(); } } /* @@ -46,14 +72,6 @@ void Transformer::SetCenterPoint(std::vector point) _centerPoint=point; } -/* - SETS AXIS POINT -*/ -void Transformer::SetAxis(std::vector axis) -{ - _transformAxis=axis; -} - /* SETS THE ANGLE */ @@ -99,24 +117,34 @@ vtkTransform *Transformer::GetResult() /* MAKES THE TRANSFORMATIONS */ -void Transformer::Run(bool _3D) -{ +void Transformer::Run() +{ _transform->Identity(); - _transform->Translate(_centerPoint[0], _centerPoint[1], _centerPoint[2]); + _transform->PostMultiply(); + if(_centerPoint.size() < 3) + { + _transform->Translate(-_centerPoint[0], -_centerPoint[1], 0); + std::cout << "NTU Transformer2D Center Points: " << _centerPoint[0] << " " << _centerPoint[1] << std::endl; + } + else + { + _transform->Translate(-_centerPoint[0], -_centerPoint[1], -_centerPoint[2]); + std::cout << "NTU Transformer2D Center Points: " << _centerPoint[0] << " " << _centerPoint[1] << " " << _centerPoint[2] << std::endl; + } - std::cout << "Transformer: Center points: X = " << _centerPoint[0] << " Y = " << _centerPoint[1] << " Z = " << _centerPoint[2] << std::endl; - std::cout << "Transformer Angle: " << _angle << std::endl; + _transform->RotateWXYZ(_angle, 0, 0, 1); + //std::cout << "NTU Transformer2D Angle: " << _angle << std::endl; - _transform->Scale(_scaleX, _scaleY,_scaleZ); - if(_3D) + if(_scaleX < 0 || _scaleY < 0 || _scaleZ < 0) { - _transform->RotateWXYZ(_angle, _transformAxis[0], _transformAxis[1], _transformAxis[2]); - std::cout << "Transformer 3D Version" << std::endl; + _transform->Scale(100, 100, 100); + //std::cout << "NTU Transformer2D Scale: " << _scaleX << " " << _scaleY << " " << _scaleZ << std::endl; } else { - _transform->RotateWXYZ(_angle, 0, 0, 1); - } - + _transform->Scale(_scaleX, _scaleY,_scaleZ); + //std::cout << "NTU Transformer2D Scale: " << _scaleX << " " << _scaleY << " " << _scaleZ << std::endl; + } + _transform->Inverse(); _transform->Update(); }