]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkRescaleSlopeIntercept.cxx
#3212 BBTK Feature New Normal - vtk8itk4wx3-mingw64
[bbtk.git] / packages / vtk / src / bbvtkRescaleSlopeIntercept.cxx
index 3fcedd1ac572875ee6bf147429ffd897a85b1479..a1d5805b56c26eb450e3d1beb8333119a54590d2 100644 (file)
@@ -1,8 +1,38 @@
-//===== 
+/*
+ # ---------------------------------------------------------------------
+ #
+ # 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.
+ # ------------------------------------------------------------------------ */
+
+
+//=====
 // Don't edit this file. This file is generated from xml description.. 
 //===== 
 #include "bbvtkRescaleSlopeIntercept.h"
 #include "bbvtkPackage.h"
+
+#include "bbtkStaticLecture.h"
+
 namespace bbvtk
 {
 
@@ -13,7 +43,6 @@ BBTK_BLACK_BOX_IMPLEMENTATION(RescaleSlopeIntercept,bbtk::AtomicBlackBox);
 //===== 
 void RescaleSlopeIntercept::Process()
 {
-
 // THE MAIN PROCESSING METHOD BODY
 //   Here we simply set the input 'In' value to the output 'Out'
 //   And print out the output value
@@ -28,83 +57,91 @@ void RescaleSlopeIntercept::Process()
 //    bbSetOutputOut( bbGetInputIn() );
 //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
   
-
        double range[2];
-       double spc[6];
-       int dim[3];
+       double spc[3];
        int ext[6];
-       double value;
-       double newValue;
        double A=bbGetInputA();
        double B=bbGetInputB();
        
        if (bbGetInputIn()!=0)
        {
-               if (bbGetInputOutputFormat()=="SAME")                                   outputformat = bbGetInputIn()->GetScalarType();
-               else if (bbGetInputOutputFormat()=="VTK_BIT")                   outputformat = VTK_BIT;
-               else if (bbGetInputOutputFormat()=="VTK_CHAR")                  outputformat = VTK_CHAR;
-               else if (bbGetInputOutputFormat()=="VTK_SIGNED_CHAR")   outputformat = VTK_SIGNED_CHAR;
-               else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_CHAR") outputformat = VTK_UNSIGNED_CHAR;
-               else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_SHORT") outputformat = VTK_UNSIGNED_SHORT;
-               else if (bbGetInputOutputFormat()=="VTK_INT")                   outputformat = VTK_INT;
-               else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_INT")  outputformat = VTK_UNSIGNED_INT;
-               else if (bbGetInputOutputFormat()=="VTK_LONG")                  outputformat = VTK_LONG;
-               else if (bbGetInputOutputFormat()=="VTK_UNSIGNED_LONG") outputformat = VTK_UNSIGNED_LONG;
-               else if (bbGetInputOutputFormat()=="VTK_FLOAT")                 outputformat = VTK_FLOAT;
-               else if (bbGetInputOutputFormat()=="VTK_DOUBLE")                outputformat = VTK_DOUBLE;
-               
-               imageoutput->Initialize();
-               imageoutput->SetScalarType( outputformat );     
+               int outputformat = bbtkStaticLecture::GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() );
                bbGetInputIn()->GetScalarRange(range);
                bbGetInputIn()->GetSpacing(spc);
-               imageoutput->SetSpacing( spc );
-               bbGetInputIn()->GetWholeExtent(ext);
-               dim[0]=ext[1]-ext[0]+1;
-               dim[1]=ext[3]-ext[2]+1;
-               dim[2]=ext[5]-ext[4]+1;
-               imageoutput->SetDimensions( dim[0] , dim[1], dim[2] );
-               imageoutput->AllocateScalars();
-
+               bbGetInputIn()->GetExtent( ext );                               
                double range0plusrange1 = range[0]+range[1];
-               double difrange = range[1]-range[0];
-               double newdifrange = B-A;
+               double difrange                 = range[1]-range[0];
+               double newdifrange              = B-A;
+               double shift;
+               double scale;
+               
+               if (bbGetInputType()==0) // Rescale Slope/Intercept
+               { 
+                       //                      newValue = value*A+B;
+                       scale = A;
+                       shift = B;
+               } // if type 0
+               
+               if (bbGetInputType()==1) // Invert
+               { 
+                       //                      newValue = value*(-1) + (range0plusrange1);
+                       scale=-1;
+                       shift=range0plusrange1;
+               } // if type 1
+               
+               if (bbGetInputType()==2) // Redimension
+               { 
+                       //                      newValue = ((value-range[0])/difrange)*newdifrange + A;
+                       scale=newdifrange/difrange;
+                       shift= A - (range[0]*newdifrange/difrange);
+               } // if type 2
+               
+               if (bbGetInputType()==3) // Invert redimension
+               { 
+                       //                      newValue = ((value*(-1)+range[1])/difrange)*newdifrange + A;
+                       scale=-newdifrange/difrange;
+                       shift= A + (range[1]*newdifrange/difrange);
+               } // if type 3
                
-               int i,j,k;
-               for (i=0; i<dim[0]; i++)
-               {
-                       for (j=0; j<dim[1]; j++)
-                       {
-                               for (k=0; k<dim[2]; k++)
-                               {
-                                       value = bbGetInputIn()->GetScalarComponentAsDouble(i,j,k,0);
 
-                                       if (bbGetInputType()==0) // Rescale Slope/Intercept
-                                       { 
-                                               newValue = value*A+B;
-                                       } // if type 0
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
+               filter1->SetInput( bbGetInputIn() );
+#else
+               filter1->SetInputData( bbGetInputIn() );
+#endif
 
-                                       if (bbGetInputType()==1) // Invert
-                                       { 
-                                               newValue = value*(-1) + (range0plusrange1);
-                                       } // if type 1
-                                       
-                                       if (bbGetInputType()==2) // Redimension
-                                       { 
-                                               newValue = ((value-range[0])/difrange)*newdifrange + A;
-                                       } // if type 2
+               filter1->SetOutputScalarType( VTK_DOUBLE );
+               filter1->SetShift( 0 );
+               filter1->SetScale( scale );
+               
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
+               filter2->SetInput( filter1->GetOutput() );
+#else
+               filter2->SetInputData( filter1->GetOutput() );
+#endif
+
+               filter2->SetOutputScalarType( outputformat );
+               filter2->SetShift( shift );
+               filter2->SetScale( 1 );
+               
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
+               mchange->SetInput( filter2->GetOutput() );
+#else
+               mchange->SetInputData( filter2->GetOutput() );
+#endif
 
-                                       if (bbGetInputType()==3) // Invert redimension
-                                       { 
-                                               newValue = ((value*(-1)+range[1])/difrange)*newdifrange + A;
-                                       } // if type 3
-                                       
-                                       imageoutput->SetScalarComponentFromDouble (i,j,k, 0, newValue);
-                               } // for k
-                       } // for j
-               } // for i
-                       
-               bbSetOutputOut(imageoutput);
-       } // if
+               mchange->SetExtentTranslation( -ext[0], -ext[2], -ext[4] );
+               mchange->SetOutputSpacing (spc);
+               filter1->Update();    //important
+               filter2->Update();    //important
+               mchange->Update();    //important
+               bbSetOutputOut( mchange->GetOutput() );
+       } else  {
+               bbSetOutputOut( NULL );
+       }               // if bbGetInputIn      
 }
        
 //===== 
@@ -120,21 +157,22 @@ void RescaleSlopeIntercept::bbUserSetDefaultValues()
        bbSetInputA(1);
        bbSetInputB(0);
        bbSetInputOutputFormat("SAME");
-       imageoutput=NULL;
+       filter1 = NULL;
+       filter2 = NULL;
+       mchange = NULL;
 }
 //===== 
 // Don't edit this file. This file is generated from xml description.. 
 //===== 
 void RescaleSlopeIntercept::bbUserInitializeProcessing()
 {
-
 //  THE INITIALIZATION METHOD BODY :
 //    Here does nothing 
 //    but this is where you should allocate the internal/output pointers 
 //    if any 
-
-       imageoutput = vtkImageData::New();
-  
+       filter1 = vtkImageShiftScale::New();
+       filter2 = vtkImageShiftScale::New();
+       mchange = vtkImageChangeInformation::New();
 }
 //===== 
 // Don't edit this file. This file is generated from xml description.. 
@@ -146,8 +184,11 @@ void RescaleSlopeIntercept::bbUserFinalizeProcessing()
 //    Here does nothing 
 //    but this is where you should desallocate the internal/output pointers 
 //    if any
-  
+       mchange->Delete();              
+       filter1->Delete();
+       filter2->Delete();
 }
+       
 }
 // EO namespace bbvtk