--- /dev/null
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+#include "bbvtkSurfaceTexture.h"
+#include "bbvtkPackage.h"
+
+#include <vtkPointData.h>
+
+
+namespace bbvtk
+{
+
+BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SurfaceTexture)
+BBTK_BLACK_BOX_IMPLEMENTATION(SurfaceTexture,bbtk::AtomicBlackBox);
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+void SurfaceTexture::Process()
+{
+
+// THE MAIN PROCESSING METHOD BODY
+// Here we simply set the input 'In' value to the output 'Out'
+// And print out the output value
+// INPUT/OUTPUT ACCESSORS ARE OF THE FORM :
+// void bbSet{Input|Output}NAME(const TYPE&)
+// const TYPE& bbGet{Input|Output}NAME() const
+// Where :
+// * NAME is the name of the input/output
+// (the one provided in the attribute 'name' of the tag 'input')
+// * TYPE is the C++ type of the input/output
+// (the one provided in the attribute 'type' of the tag 'input')
+
+// bbSetOutputOut( bbGetInputIn() );
+// std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
+
+printf("EED SurfaceTexture::Process Start\n");
+
+ int i;
+ double spc[3];
+ double range[2];
+ int ext[6];
+ bbGetInputImage()->GetSpacing(spc);
+ bbGetInputImage()->GetScalarRange(range);
+ bbGetInputImage()->GetWholeExtent(ext);
+ int maxX = ext[1]-ext[0]+1;
+ int maxY = ext[3]-ext[2]+1;
+ int maxZ = ext[5]-ext[4]+1;
+
+ if (firsttime==true)
+ {
+ firsttime=false;
+ // Generate the colors for each point based on the color map
+ colors = vtkUnsignedCharArray::New();
+ colors->SetNumberOfComponents(3);
+ colors->SetName("Colors");
+
+ // Create the color map
+ if (bbGetInputColorType()==1)
+ {
+ colorLookupTableWL = vtkWindowLevelLookupTable::New();
+ colorLookupTable=colorLookupTableWL;
+ } else {
+ colorLookupTable = vtkLookupTable::New();
+ }
+ }
+ colorLookupTable->SetTableRange(range[0],range[1]);
+ colorLookupTable->Build();
+ bbGetInputMesh()->GetPointData()->SetScalars(colors);
+
+ if (bbGetInputColorType()==1)
+ {
+ colorLookupTableWL->SetLevel( bbGetInputColorLevel() );
+ colorLookupTableWL->SetWindow( bbGetInputColorWindow() );
+ }
+
+ int missingpoints = bbGetInputMesh()->GetNumberOfPoints() - colors->GetDataSize()/colors->GetNumberOfComponents();
+ for(i = 0; i < missingpoints; i++)
+ {
+ colors->InsertNextTuple3(0,0,0);
+ }
+
+ if (bbGetInputTransform()!=NULL)
+ {
+ bbGetInputTransform()->Update();
+ }
+
+ unsigned short gl;
+ double p1[3];
+ double p2[3];
+ double dcolor[3];
+ for(i = 0; i < bbGetInputMesh()->GetNumberOfPoints(); i++)
+ {
+ if (bbGetInputTransform()!=NULL)
+ {
+ bbGetInputMesh()->GetPoint(i,p1);
+ bbGetInputTransform()->TransformPoint(p1,p2);
+ } else {
+ bbGetInputMesh()->GetPoint(i,p2);
+ }
+ p2[0] = p2[0]/spc[0];
+ p2[1] = p2[1]/spc[1];
+ p2[2] = p2[2]/spc[2];
+
+ if ( (p2[0]>=0) && (p2[0]<maxX) && (p2[1]>=0) && (p2[1]<maxY) &&(p2[2]>=0) && (p2[2]<maxZ) )
+ {
+ gl = bbGetInputImage()->GetScalarComponentAsDouble(p2[0], p2[1], p2[2],0);
+ } else {
+ gl=0;
+ }
+ colorLookupTable->GetColor(gl, dcolor);
+ colors->SetTuple3(i,255*dcolor[0],255*dcolor[1],255*dcolor[2]);
+ } // for i
+ bbGetInputMesh()->Modified();
+
+}
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+void SurfaceTexture::bbUserSetDefaultValues()
+{
+
+// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
+// Here we initialize the input 'In' to 0
+ bbSetInputMesh(NULL);
+ bbSetInputImage(NULL);
+ bbSetInputColorType(0);
+ bbSetInputColorLevel(500);
+ bbSetInputColorWindow(500);
+ bbSetInputTransform(NULL);
+
+ firsttime = true;
+ colors = NULL;
+ colorLookupTable = NULL;
+ colorLookupTableWL = NULL;
+}
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+void SurfaceTexture::bbUserInitializeProcessing()
+{
+
+// THE INITIALIZATION METHOD BODY :
+// Here does nothing
+// but this is where you should allocate the internal/output pointers
+// if any
+
+
+}
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+void SurfaceTexture::bbUserFinalizeProcessing()
+{
+
+// THE FINALIZATION METHOD BODY :
+// Here does nothing
+// but this is where you should desallocate the internal/output pointers
+// if any
+
+}
+}
+// EO namespace bbvtk
+
+
--- /dev/null
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+#ifndef __bbvtkSurfaceTexture_h_INCLUDED__
+#define __bbvtkSurfaceTexture_h_INCLUDED__
+#include "bbvtk_EXPORT.h"
+#include "bbtkAtomicBlackBox.h"
+#include "iostream"
+
+#include "vtkPolyData.h"
+#include "vtkImageData.h"
+#include <vtkLookupTable.h>
+#include <vtkWindowLevelLookupTable.h>
+#include <vtkLinearTransform.h>
+
+namespace bbvtk
+{
+
+class bbvtk_EXPORT SurfaceTexture
+ :
+ public bbtk::AtomicBlackBox
+{
+ BBTK_BLACK_BOX_INTERFACE(SurfaceTexture,bbtk::AtomicBlackBox);
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+ BBTK_DECLARE_INPUT(Mesh,vtkPolyData*);
+ BBTK_DECLARE_INPUT(Image,vtkImageData*);
+ BBTK_DECLARE_INPUT(ColorType,int);
+ BBTK_DECLARE_INPUT(ColorLevel,double);
+ BBTK_DECLARE_INPUT(ColorWindow,double);
+ BBTK_DECLARE_INPUT(Transform,vtkLinearTransform*);
+// BBTK_DECLARE_OUTPUT(Out,double);
+ BBTK_PROCESS(Process);
+ void Process();
+
+
+ bool firsttime;
+ vtkUnsignedCharArray *colors;
+ vtkLookupTable *colorLookupTable;
+ vtkWindowLevelLookupTable *colorLookupTableWL;
+
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+};
+
+BBTK_BEGIN_DESCRIBE_BLACK_BOX(SurfaceTexture,bbtk::AtomicBlackBox);
+BBTK_NAME("SurfaceTexture");
+BBTK_AUTHOR("Info-Dev");
+BBTK_DESCRIPTION("Surface texture");
+BBTK_CATEGORY("");
+ BBTK_INPUT(SurfaceTexture,Mesh,"Mesh topology",vtkPolyData*,"");
+ BBTK_INPUT(SurfaceTexture,Image,"Image Reference",vtkImageData*,"");
+ BBTK_INPUT(SurfaceTexture,ColorType,"Color Type (default 0) 0 Colors, 1 ColorWindowLevel",int,"");
+ BBTK_INPUT(SurfaceTexture,ColorLevel,"Color Level (default 500)",double,"");
+ BBTK_INPUT(SurfaceTexture,ColorWindow,"ColorWindow (default 500)",double,"");
+ BBTK_INPUT(SurfaceTexture,Transform,"vtk Linear Transform (default NULL)",vtkLinearTransform*,"");
+// BBTK_OUTPUT(SurfaceTexture,Out,"First output",double,"");
+
+BBTK_END_DESCRIBE_BLACK_BOX(SurfaceTexture);
+//=====
+// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
+//=====
+}
+// EO namespace bbvtk
+
+#endif // __bbvtkSurfaceTexture_h_INCLUDED__
+