]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkFlip.cxx
2024 Feature FLIP X Y Z
[bbtk.git] / packages / vtk / src / bbvtkFlip.cxx
index 4f9244fe7a101ad0d78cd51f1f4bdc3e6c7db3f9..d37aa6fb2c8a9e759174bc23d8e19c56c10af017 100644 (file)
@@ -1,33 +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.
+ # ------------------------------------------------------------------------ */
+
+
+/*=========================================================================
   Program:   bbtk
   Module:    $RCSfile: bbvtkFlip.cxx,v $
   Language:  C++
-  Date:      $Date: 2012/04/11 16:27:00 $
-  Version:   $Revision: 1.2 $
+  Date:      $Date: 2012/11/16 08:51:58 $
+  Version:   $Revision: 1.5 $
 =========================================================================*/
 
-/* ---------------------------------------------------------------------
-
-* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
-* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
-*
-*  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.
-* ------------------------------------------------------------------------ */                                                                         
-
 /**
  *  \file 
  *  \brief 
@@ -49,6 +54,7 @@ namespace bbvtk
       //std::cout << "-------- entree ds Flip::bbUserSetDefaultValues()\n" << std::endl;
       
       bbSetInputIn(NULL); 
+      bbSetInputAxis("Y"); 
       mImageOut = NULL;
       bbSetOutputOut(NULL);
    }
@@ -58,8 +64,6 @@ namespace bbvtk
    void Flip::bbUserInitializeProcessing() 
    {
        //std::cout << "-------- entree ds Flip::bbUserInitalizeProcessing()\n" << std::endl;
-      //bbUserFinalizeProcessing();
-      mImageOut = vtkImageData::New();  // Alloc depends on  bbGetInputIn().size()  
    }
   
 //---------------------------------------------------------------------
@@ -70,8 +74,8 @@ namespace bbvtk
    // WTF? we never enter here // JPR  bbUserFinalizeProcessing()  JPR 
       if (mImageOut!=NULL)
       {
-        // mImageOut->Delete();
-        // mImageOut=NULL;
+        mImageOut->Delete();
+        mImageOut=NULL;
       }
       bbSetOutputOut(mImageOut);          
    }
@@ -85,83 +89,93 @@ namespace bbvtk
  ///
 void Flip::Process()
 {
-       vtkImageData* imageIn = bbGetInputIn();
-       vtkImageData * mImageOut = flip(imageIn);
-      
-   // Devrait etre dans bbUserFinalizeProcessing() ? // JPR    
-        bbSetOutputOut(mImageOut);     
-}
+       
+       if (bbGetInputIn()!=NULL)
+       {
+               if (mImageOut!=NULL)
+               {
+                       mImageOut->Delete();
+                       mImageOut=NULL;
+               } // if mImageOut
+       
+               mImageOut = vtkImageData::New();  // Alloc depends on  bbGetInputIn().size()  
+               mImageOut->Initialize();
+               mImageOut->SetScalarType(  bbGetInputIn()->GetScalarType() );
+               mImageOut->SetSpacing(   bbGetInputIn()->GetSpacing()  );
+               mImageOut->SetDimensions(   bbGetInputIn()->GetDimensions()  );
+               mImageOut->SetNumberOfScalarComponents( bbGetInputIn()->GetNumberOfScalarComponents() );
+               mImageOut->AllocateScalars();
+       
+               int inputdims[3];
+               //   int outputdims[3];
+               bbGetInputIn()->GetDimensions (inputdims);
+               bbGetInputIn()->Update();
+               int nbScalComp  = bbGetInputIn()->GetNumberOfScalarComponents();
+               int scalarSize  = bbGetInputIn()->GetScalarSize();
+               int lineSize    = inputdims[0]*scalarSize*nbScalComp;      
+               int planeSize   = inputdims[1]*lineSize;
+               char *pixelsIn  = (char *)bbGetInputIn()->GetScalarPointer();
+               char *pixelsOut = (char *)mImageOut->GetScalarPointer();
+       
+               char *lineIn;
+               char *lineOut;
+               char *debPlanIn;
+               char *debPlanOut;
+               int i,j,k;
+               
+               if ( (bbGetInputAxis()=="X") || (bbGetInputAxis()=="x") )
+               {  
+
+                       for(k=0; k<inputdims[2]; k++)  // iterate  planes
+                       {  
+                               for(j=0; j<inputdims[1]; j++)  // iterates  rows
+                               { 
+                                       for(i=0; i<inputdims[0]; i++)  // iterates  columns
+                                       { 
+                                               pixelsIn = (char *)bbGetInputIn()->GetScalarPointer(i,j,k);
+                                               pixelsOut = (char *)mImageOut->GetScalarPointer(inputdims[0]-1-i,j,k);
+                                               memcpy(pixelsOut,  pixelsIn, scalarSize );
+                                       }       // for i
+                               }       // for j
+                       } // for k
+
+               } else if ( (bbGetInputAxis()=="Z") || (bbGetInputAxis()=="z") )  {  
+
+                       for(k=0; k<inputdims[2]; k++)  // iterate  planes
+                       {  
+                               for(j=0; j<inputdims[1]; j++)  // iterates  rows
+                               { 
+                                       for(i=0; i<inputdims[0]; i++)  // iterates  columns
+                                       { 
+                                               pixelsIn = (char *)bbGetInputIn()->GetScalarPointer(i,j,k);
+                                               pixelsOut = (char *)mImageOut->GetScalarPointer(i,j,inputdims[2]-1-k);
+                                               memcpy(pixelsOut,  pixelsIn, scalarSize );
+                                       }       // for i
+                               }       // for j
+                       } // for k
+
+               } else {  
+
+                       for(k=0; k<inputdims[2]; k++)  // iterate  planes
+                       {  
+                               debPlanIn       = pixelsIn+k*planeSize;
+                               debPlanOut      = pixelsOut+k*planeSize;
+                               for(j=0; j<inputdims[1]; j++)  // iterates  rows
+                               { 
+                                       lineIn = debPlanIn+j*lineSize;
+                                       lineOut = debPlanOut+(inputdims[1]-1-j)*lineSize;
+                                       memcpy(lineOut,  lineIn, lineSize);
+                               }       // for j
+                       } // for k
+
+               } //if
+               mImageOut->Modified();
+               bbSetOutputOut( mImageOut  );           
+       } // bbGetInputIn
 
-
-vtkImageData * Flip::flip(vtkImageData *imageIn)
-{   
-   int inputdims[3];
-//   int outputdims[3];
-   imageIn->GetDimensions (inputdims);
-   imageIn->Update();
-   int nbScalComp = imageIn->GetNumberOfScalarComponents();
-   int scalarSize = imageIn->GetScalarSize();
-   int lineSize  = inputdims[0]*scalarSize*nbScalComp;    
-   int planeSize = inputdims[1]*lineSize;
-   char *pixelsIn = (char *)imageIn->GetScalarPointer();
-   
-/*     
-   outputdims[0] = inputdims[1]; 
-   outputdims[1] = inputdims[0];
-   outputdims[2] = inputdims[2];
- std::cout << " inputdims[0] " << inputdims[0] <<" inputdims[1] " <<inputdims[1] << " inputdims[2] "
-           << inputdims[2] << std::endl;
-*/
-
- /*       
-    vtkImageData *vtkImageOut;
-    vtkImageOut = vtkImageData::New();
-    vtkImageOut->SetDimensions( outputdims );
-    vtkImageOut->SetExtent(0,outputdims[0]-1,0,outputdims[1]-1,0,outputdims[2]-1);
-    vtkImageOut->SetWholeExtent(0,outputdims[0]-1,0,outputdims[1]-1,0,outputdims[2]-1);
-    int nbScalComp = imageIn->GetNumberOfScalarComponents();
-    vtkImageOut->SetNumberOfScalarComponents(nbScalComp);
-    vtkImageOut->SetSpacing( imageIn->GetSpacing() );
-    vtkImageOut->SetScalarType(imageIn->GetScalarType()  );
-    vtkImageOut->AllocateScalars();
-    vtkImageOut->Update();    
-    char *pixelsOut = (char *)vtkImageOut->GetScalarPointer();    
-    unsigned short *output =(unsigned short *)(vtkImageOut->GetScalarPointer());
-   */
-   
-   char *temp = (char *)malloc(lineSize);
-   char *line1;
-   char *line2;
-   char *debPlan;     
-   for(int k=0; k<inputdims[2]; k++) {  // iterate on planes
-        debPlan = pixelsIn+k*planeSize;
-               for(int j=0; j<inputdims[1]/2; j++) { // iterates on rows
-                       line1 = debPlan+j*lineSize;
-                       line2 = debPlan+(inputdims[1]-1-j)*lineSize;
-                       memcpy(temp,  line2, lineSize);
-                       memcpy(line2, line1, lineSize);
-                       memcpy(line1, temp,  lineSize);        
-       }
-   }
-   
-// This was to transpose the image ...  
-/*
-    for(int k=0; k<inputdims[2]; k++) {  // iterate on planes
-       for(int j=0; j<inputdims[1]; j++) { // iterates on rows
-          for(int i=0; i<inputdims[0]; i++) { // iterates on columns
-             for(int l=0; l<nbScalComp; l++) { // iterates on scalar components
-                vtkImageOut->SetScalarComponentFromDouble(j,i,k,l,imageIn->GetScalarComponentAsDouble(i,j,k,l));
-             }
-         } 
-         
-       }
-    }
-    return  vtkImageOut;
-*/
-   free (temp);
-   return imageIn;        
 }
 
+
 }//namespace bbtk
 
 #endif // _USE_VTK_