+#include "bbvtkVecIsoSurfaceExtractor.h"
+#include "bbvtkPackage.h"
+
+#include "vtkProperty.h"
+
+namespace bbvtk
+{
+
+BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,VecIsoSurfaceExtractor)
+BBTK_BLACK_BOX_IMPLEMENTATION(VecIsoSurfaceExtractor,bbtk::AtomicBlackBox);
+void VecIsoSurfaceExtractor::Process()
+{
+ double r,g,b;
+ vtkMarchingCubes *marchingcubes;
+ vtkPolyDataMapper *polydatamapper;
+ vtkActor *vtkactor;
+
+ int i,size;
+
+
+ size = VecVtkactor.size();
+ for( i=0 ; i<size ; i++)
+ {
+ if (bbGetInputRenderer()!=NULL )
+ {
+ bbGetInputRenderer()->RemoveActor( VecVtkactor[i] );
+ VecMarchingcubes[i]->Delete();
+ VecPolydatamapper[i]->Delete();
+ VecVtkactor[i]->Delete();
+ }
+ }
+ VecMarchingcubes.clear();
+ VecPolydatamapper.clear();
+ VecVtkactor.clear();
+
+
+ size = bbGetInputIn().size();
+ for( i=0 ; i<size ; i++){
+ marchingcubes = vtkMarchingCubes::New();
+ polydatamapper = vtkPolyDataMapper::New();
+ vtkactor = vtkActor::New();
+
+ polydatamapper->SetInput(marchingcubes->GetOutput());
+ vtkactor->SetMapper(polydatamapper);
+
+ polydatamapper->ScalarVisibilityOff();
+ polydatamapper->ImmediateModeRenderingOn();
+
+ VecMarchingcubes.push_back(marchingcubes);
+ VecPolydatamapper.push_back(polydatamapper);
+ VecVtkactor.push_back(vtkactor);
+ } // for i
+
+
+ for( i=0 ; i<size ; i++){
+ // Visualisation - result volume
+ marchingcubes=VecMarchingcubes[i];
+ vtkactor=(vtkActor*)VecVtkactor[i];
+
+ marchingcubes->SetInput( bbGetInputIn()[i] );
+ marchingcubes->SetValue(0, bbGetInputIsovalue() );
+ marchingcubes->Update();
+
+ if ( (i*3+1)<bbGetInputColour().size() ){
+ r = bbGetInputColour()[0+i*3];
+ g = bbGetInputColour()[1+i*3];
+ b = bbGetInputColour()[2+i*3];
+ } else {
+ r = bbGetInputColour()[0];
+ g = bbGetInputColour()[1];
+ b = bbGetInputColour()[2];
+ }
+ vtkactor->GetProperty()->SetColor( r,g,b );
+
+ vtkactor->GetProperty()->SetOpacity( bbGetInputOpacity() );
+
+ if ( bbGetInputTransform()!=NULL )
+ {
+ vtkactor->SetUserTransform( bbGetInputTransform() );
+ }
+
+ // Interface Update
+ if (bbGetInputRenderer()!=NULL )
+ {
+ bbGetInputRenderer()->AddActor( vtkactor );
+ }
+ } // for i
+
+
+ bbSetOutputOut( VecVtkactor );
+}
+
+void VecIsoSurfaceExtractor::bbUserConstructor()
+{
+ Init();
+ std::vector<double> colour;
+ // 1- red
+ colour.push_back(1.0);
+ colour.push_back(0.0);
+ colour.push_back(0.0);
+ // 2- blue
+ colour.push_back(0.0);
+ colour.push_back(0.0);
+ colour.push_back(1.0);
+ // 3- yellow
+ colour.push_back(1.0);
+ colour.push_back(1.0);
+ colour.push_back(0.0);
+ // 4- green
+ colour.push_back(0.0);
+ colour.push_back(1.0);
+ colour.push_back(0.0);
+ // 5-
+ colour.push_back(0.0);
+ colour.push_back(1.0);
+ colour.push_back(1.0);
+
+ // 6-
+ colour.push_back(0.5);
+ colour.push_back(0.5);
+ colour.push_back(0.5);
+
+
+ bbSetInputColour(colour);
+ bbSetInputTransform(NULL);
+}
+
+void VecIsoSurfaceExtractor::bbUserCopyConstructor()
+{
+ Init();
+}
+
+void VecIsoSurfaceExtractor::bbUserDestructor()
+{
+ int i,size = VecMarchingcubes.size();
+ for (i=0;i<size;i++)
+ {
+ VecMarchingcubes[i]->Delete();
+ VecPolydatamapper[i]->Delete();
+ VecVtkactor[i]->Delete();
+ }
+ VecMarchingcubes.clear();
+ VecPolydatamapper.clear();
+ VecVtkactor.clear();
+}
+
+
+void VecIsoSurfaceExtractor::Init()
+{
+// bbSetInputIn(NULL);
+ // bbSetInputInVtkObject(NULL);
+ bbSetInputRenderer(NULL);
+ bbSetInputIsovalue(128);
+ bbSetInputOpacity(1);
+
+}
+
+
+}
+// EO namespace bbvtk
+
+