]> Creatis software - bbtk.git/commitdiff
Flip (Upside down) box CREATOOLS.2-0-3
authorjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Wed, 6 Oct 2010 16:44:04 +0000 (16:44 +0000)
committerjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Wed, 6 Oct 2010 16:44:04 +0000 (16:44 +0000)
packages/vtk/src/bbvtkFlip.cxx [new file with mode: 0644]
packages/vtk/src/bbvtkFlip.h [new file with mode: 0644]

diff --git a/packages/vtk/src/bbvtkFlip.cxx b/packages/vtk/src/bbvtkFlip.cxx
new file mode 100644 (file)
index 0000000..93317a1
--- /dev/null
@@ -0,0 +1,167 @@
+/*=========================================================================                                                                               
+  Program:   bbtk
+  Module:    $RCSfile: bbvtkFlip.cxx,v $
+  Language:  C++
+  Date:      $Date: 2010/10/06 16:44:04 $
+  Version:   $Revision: 1.1 $
+=========================================================================*/
+
+/* ---------------------------------------------------------------------
+
+* 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 
+ */
+
+#ifdef _USE_VTK_
+#include "bbvtkFlip.h"
+#include "bbvtkPackage.h"
+
+namespace bbvtk
+{
+   BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,Flip)
+   BBTK_BLACK_BOX_IMPLEMENTATION(Flip,bbtk::AtomicBlackBox);
+
+//---------------------------------------------------------------------
+
+   void Flip::bbUserSetDefaultValues() 
+   { 
+      //std::cout << "-------- entree ds Flip::bbUserSetDefaultValues()\n" << std::endl;
+      
+      bbSetInputIn(NULL); 
+      mImageOut = NULL;
+      bbSetOutputOut(NULL);
+   }
+
+//---------------------------------------------------------------------
+
+   void Flip::bbUserInitializeProcessing() 
+   {
+       //std::cout << "-------- entree ds Flip::bbUserInitalizeProcessing()\n" << std::endl;
+      //bbUserFinalizeProcessing();
+      mImageOut = vtkImageData::New();  // Alloc depends on  bbGetInputIn().size()  
+   }
+  
+//---------------------------------------------------------------------
+
+   void Flip::bbUserFinalizeProcessing() 
+   {
+            //std::cout << "-------- entree ds Flip::bbUserFinalizeProcessing()\n" << std::endl;
+   // WTF? we never enter here // JPR  bbUserFinalizeProcessing()  JPR 
+      if (mImageOut!=NULL)
+      {
+        // mImageOut->Delete();
+        // mImageOut=NULL;
+      }
+      bbSetOutputOut(mImageOut);          
+   }
+
+//---------------------------------------------------------------------
+ ///  :
+ ///  - receives a vtkImageData*imageIn, flips it
+ ///  - exports a vtkImageData*  
+ ///  
+ ///
+void Flip::Process()
+{
+       vtkImageData* imageIn = bbGetInputIn();
+       vtkImageData * mImageOut = flip(imageIn);
+      
+   // Devrait etre dans bbUserFinalizeProcessing() ? // JPR    
+        bbSetOutputOut(mImageOut);     
+}
+
+
+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]-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_
diff --git a/packages/vtk/src/bbvtkFlip.h b/packages/vtk/src/bbvtkFlip.h
new file mode 100644 (file)
index 0000000..f6af304
--- /dev/null
@@ -0,0 +1,90 @@
+/*=========================================================================                                                                               
+  Program:   bbtk
+  Module:    $RCSfile: bbvtkFlip.h,v $
+  Language:  C++
+  Date:      $Date: 2010/10/06 16:44:04 $
+  Version:   $Revision: 1.1 $
+=========================================================================*/
+
+/* ---------------------------------------------------------------------
+
+* 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.
+* ------------------------------------------------------------------------ */                                                                         
+
+/**
+ * \brief Short description in one line
+ * 
+ * Long description which 
+ * can span multiple lines
+ */
+/**
+ * \file 
+ * \brief Pattern for the definition of a new type of Node (header)
+ */
+/**
+ * \class bbtk::NodePatern 
+ * \brief Pattern for the definition of a new type of Node 
+ */
+#ifdef _USE_VTK_
+
+#ifndef __bbvtkFlip_h_INCLUDED__
+#define __bbvtkFlip_h_INCLUDED__
+#include "bbvtk_EXPORT.h"
+
+#include "bbtkAtomicBlackBox.h"
+
+#include "vtkImageData.h"
+
+namespace bbvtk
+{
+  class bbvtk_EXPORT Flip : public bbtk::AtomicBlackBox
+  { 
+  public:
+    BBTK_BLACK_BOX_INTERFACE(Flip, bbtk::AtomicBlackBox);
+    BBTK_DECLARE_INPUT (In,vtkImageData *);  
+    BBTK_DECLARE_OUTPUT(Out, vtkImageData*);    
+    BBTK_PROCESS(Process);
+    void Process();
+  private :
+  vtkImageData * flip(vtkImageData *imageIn);
+  protected:
+  
+  // Attributes :
+  private:
+     vtkImageData *mImageOut;    
+  };
+
+  //=================================================================
+  // UserBlackBox description
+  BBTK_BEGIN_DESCRIBE_BLACK_BOX(Flip,bbtk::AtomicBlackBox);
+  BBTK_NAME("Flip");
+  BBTK_AUTHOR("jp at creatis.univ-lyon.fr");
+  BBTK_DESCRIPTION("flips a <vtkImageData*>");
+  BBTK_CATEGORY("application, image");
+  BBTK_INPUT(Flip, In, "image", vtkImageData *, "");
+  BBTK_OUTPUT(Flip, Out, "fliped image", vtkImageData *, "");
+  BBTK_END_DESCRIBE_BLACK_BOX(Flip);   
+  //=================================================================
+
+}//namespace bbvtk
+   
+#endif  //__bbtvtkFlip_h__
+#endif //_USE_VTK_