+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+# pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+#
+# 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 "bbPackRecalageReSlicerBox.h"
#include "bbPackRecalagePackage.h"
BBTK_BLACK_BOX_IMPLEMENTATION(ReSlicerBox,bbtk::AtomicBlackBox);
void ReSlicerBox::Process()
{
-
- if(!bbGetInputOrigin().empty())
+ if(!bbGetInputOrigin().empty() && bbGetInputTransform() != NULL)
{
- image = vtkImageChangeInformation::New();
+ //image = vtkImageChangeInformation::New();
image->SetInput( bbGetInputIn() );
- image->SetOutputSpacing( 1,1,1 );
-
- slicer =vtkImageReslice::New();
+ image->SetOutputSpacing( 1,1,1 );
+
+ if(bbGetInputCentered())
+ {
+ image->CenterImageOn();
+ }
+
+ //slicer =vtkImageReslice::New();
slicer->SetInput( image->GetOutput() );
+ slicer->SetInformationInput( image->GetOutput() );
slicer->SetResliceTransform(bbGetInputTransform());
- slicer->SetOutputOrigin( 0 , 0 , 0 );
- slicer->SetOutputOrigin( -(bbGetInputOrigin()[0]) , -(bbGetInputOrigin()[1]) , -(bbGetInputOrigin()[2]) );
+ slicer->SetOutputOrigin( -(bbGetInputOrigin()[0]) , -(bbGetInputOrigin()[1]) , -(bbGetInputOrigin()[2]) );
+
+
+ if(bbGetInputInterpolate())
+ {
+ slicer->InterpolateOn();
+ }
slicer->Update();
-
- imageResult = vtkImageChangeInformation::New();
+
+ //imageResult = vtkImageChangeInformation::New();
imageResult->SetInput( slicer->GetOutput() );
double spc[3];
bbGetInputIn()->GetSpacing(spc);
imageResult->SetOutputSpacing( spc );
imageResult->SetOutputOrigin( 0,0,0 );
- bbSetOutputOut( imageResult->GetOutput() );
+ bbSetOutputOut( imageResult->GetOutput() );
+
+ if (bbGetInputTransform()!=NULL)
+ {
+ bbGetInputTransform()->Update();
+ vtkMatrix4x4 *m = bbGetInputTransform()->GetMatrix();
+ if (m!=NULL)
+ {
+ printf("EED ReSlicerBox::Process Translation %d %d %d \n",-(bbGetInputOrigin()[0]),-(bbGetInputOrigin()[1]),-(bbGetInputOrigin()[2]));
+ printf("EED ReSlicerBox::Process Matrix %f %f %f %f\n", m->GetElement(0,0),m->GetElement(0,1),m->GetElement(0,2),m->GetElement(0,3));
+ printf("EED ReSlicerBox::Process Matrix %f %f %f %f\n", m->GetElement(1,0),m->GetElement(1,1),m->GetElement(1,2),m->GetElement(1,3));
+ printf("EED ReSlicerBox::Process Matrix %f %f %f %f\n", m->GetElement(2,0),m->GetElement(2,1),m->GetElement(2,2),m->GetElement(2,3));
+ printf("EED ReSlicerBox::Process Matrix %f %f %f %f\n", m->GetElement(3,0),m->GetElement(3,1),m->GetElement(3,2),m->GetElement(3,3));
+ } // if m
+ } // if Transform
}
else
{
- bbSetOutputOut( bbGetInputIn() );
- }
-
+ bbSetOutputOut( NULL );
+ }
}
+
+
void ReSlicerBox::bbUserSetDefaultValues()
-{
-
- std::vector<int> nuevo(3,0);
- nuevo.push_back(0);
- bbSetInputOrigin(nuevo);
+{
+ std::vector<int> empty;
+ bbSetInputOrigin(empty);
bbSetInputIn(NULL);
- bbSetInputTransform(vtkIdentityTransform::New());
+ bbSetInputTransform(NULL);
bbSetOutputOut(NULL);
+ bbSetInputCentered(false);
+ bbSetInputInterpolate(false);
}
+
+
void ReSlicerBox::bbUserInitializeProcessing()
{
slicer =vtkImageReslice::New();
imageResult = vtkImageChangeInformation::New();
}
+
void ReSlicerBox::bbUserFinalizeProcessing()
-{
-
-// THE FINALIZATION METHOD BODY :
-// Here does nothing
-// but this is where you should desallocate the internal/output pointers
-// if any
+{
image->Delete();
slicer->Delete();
imageResult->Delete();
}
+
}
// EO namespace bbPackRecalage
-