--- /dev/null
+/*=========================================================================
+ 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_
--- /dev/null
+/*=========================================================================
+ 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_