#include <vtkDataSet.h>
#include <vtkDataSetAttributes.h>
#include <vtkProperty.h>
-#include <vtkSmartPointer.h>
#include <vtkTubeFilter.h>
#include <vtkDataSetMapper.h>
#include <vtkPolyDataMapper.h>
-#include <vtkActor.h>
namespace bbcreaMaracasVisu
MaracasTubeFilter::MaracasTubeFilter()
{
}
+
+ MaracasTubeFilter::~MaracasTubeFilter()
+ {
+ // Interface Update
+ if (renderer!=NULL )
+ {
+ renderer->RemoveActor(actor);
+ }
+
+ }
+
void MaracasTubeFilter::SetvtkRenderer(vtkRenderer *render)
{
this->renderer = render;
}
+
+
void MaracasTubeFilter::SetlstPoints( std::vector<double> lstPointX , std::vector<double> lstPointY , std::vector<double> lstPointZ )
{
- this->lstPointX=lstPointX;
- this->lstPointY=lstPointY;
- this->lstPointZ=lstPointZ;
+ this->lstPointX = lstPointX;
+ this->lstPointY = lstPointY;
+ this->lstPointZ = lstPointZ;
}
void MaracasTubeFilter::SetlstRadius( std::vector<double> lstRadius )
{
- this->lstRadius=lstRadius;
+ this->lstRadius = lstRadius;
+ }
+
+ void MaracasTubeFilter::SetOpacity(double opacity)
+ {
+ this->opacity = opacity;
+ }
+
+ void MaracasTubeFilter::SetTransform( vtkLinearTransform* transform )
+ {
+ this->transform = transform;
}
+ vtkActor *MaracasTubeFilter::GetActor()
+ {
+ return actor;
+ }
void MaracasTubeFilter::Run()
{
- // Spiral tube
-// double vX, vY, vZ;
-// unsigned int nV = 256; // No. of vertices
-// unsigned int nCyc = 5; // No. of spiral cycles
-// double rT1 = 0.1, rT2 = 0.5;// Start/end tube radii
-// double rS = 2; // Spiral radius
-// double h = 10; // Height
- unsigned int nTv = 8; // No. of surface elements for each tube vertex
-
unsigned int i;
+ unsigned int nTv = 8; // No. of surface elements for each tube vertex
// Create points and cells
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
mapper->SetScalarModeToUsePointFieldData();
mapper->SelectColorArray("Colors");
- vtkSmartPointer<vtkActor> actor =
- vtkSmartPointer<vtkActor>::New();
+ // vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();
+ actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
+ actor->GetProperty()->SetOpacity( opacity );
+
- renderer->AddActor(actor);
+ if ( transform!=NULL )
+ {
+ actor->SetUserTransform( transform );
+ }
+
+ // Interface Update
+ if (renderer!=NULL )
+ {
+ renderer->AddActor(actor);
+ }
+
}
printf("EED TubeFilter::Process start \n");
+ if (tubefilter!=NULL)
+ {
+ delete tubefilter;
+ }
+
+ tubefilter = new MaracasTubeFilter();
tubefilter->SetvtkRenderer( bbGetInputRenderer() );
tubefilter->SetlstPoints( bbGetInputlstPointX(), bbGetInputlstPointY(), bbGetInputlstPointZ() );
tubefilter->SetlstRadius( bbGetInputlstRadio() );
+ tubefilter->SetOpacity( bbGetInputOpacity() );
+ tubefilter->SetTransform( bbGetInputTransform() );
tubefilter->Run();
- bbSetOutputOutAxis( NULL );
-
+ bbSetOutputOutAxis( tubefilter->GetActor() );
printf("EED TubeFilter::Process end \n");
}
+
//=====
// 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 TubeFilter::bbUserSetDefaultValues()
{
-
// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
// Here we initialize the input 'In' to 0
-// bbSetInputIn(0);
-
+ bbSetInputOpacity(1);
+ bbSetInputTransform(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 TubeFilter::bbUserInitializeProcessing()
{
-
// THE INITIALIZATION METHOD BODY :
// Here does nothing
// but this is where you should allocate the internal/output pointers
-// if any
-
- tubefilter = new MaracasTubeFilter();
-
+// if any
+ tubefilter = 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 TubeFilter::bbUserFinalizeProcessing()
{
-
// THE FINALIZATION METHOD BODY :
// Here does nothing
// but this is where you should desallocate the internal/output pointers
// if any
-
}
+
}
// EO namespace bbcreaMaracasVisu
-//=====
+//=====
// 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 __bbcreaMaracasVisuTubeFilter_h_INCLUDED__
#define __bbcreaMaracasVisuTubeFilter_h_INCLUDED__
#include "bbcreaMaracasVisu_EXPORT.h"
#include <vtkProp3D.h>
#include <vtkRenderer.h>
#include <vtkTransform.h>
+#include <vtkActor.h>
+#include <vtkLinearTransform.h>
+#include <vtkSmartPointer.h>
namespace bbcreaMaracasVisu
{
public:
MaracasTubeFilter();
~MaracasTubeFilter();
-
+
void SetvtkRenderer( vtkRenderer *render);
void SetlstPoints( std::vector<double> lstPointX , std::vector<double> lstPointY , std::vector<double> lstPointZ );
void SetlstRadius( std::vector<double> lstRadius );
+ void SetOpacity(double opacity);
+ void SetTransform( vtkLinearTransform* transform );
+ vtkActor *GetActor();
void Run();
-
+
vtkRenderer *renderer;
-
+ vtkSmartPointer<vtkActor> actor;
+
+ double opacity;
+ vtkLinearTransform *transform;
std::vector<double> lstPointX;
std::vector<double> lstPointY;
std::vector<double> lstPointZ;
std::vector<double> lstRadius;
-
+
};
-
+
class bbcreaMaracasVisu_EXPORT TubeFilter
- :
+ :
public bbtk::AtomicBlackBox
{
BBTK_BLACK_BOX_INTERFACE(TubeFilter,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(Renderer ,vtkRenderer*);
BBTK_DECLARE_INPUT(lstPointX,std::vector<double>);
BBTK_DECLARE_INPUT(lstPointY,std::vector<double>);
BBTK_DECLARE_INPUT(lstPointZ,std::vector<double>);
BBTK_DECLARE_INPUT(lstRadio ,std::vector<double>);
+ BBTK_DECLARE_INPUT(Opacity,double);
BBTK_DECLARE_INPUT(Colour ,std::vector<double>);
BBTK_DECLARE_INPUT(Transform, vtkLinearTransform *);
+
BBTK_DECLARE_OUTPUT(OutAxis,vtkProp3D *);
BBTK_PROCESS(Process);
void Process();
-
+
MaracasTubeFilter *tubefilter;
-//=====
+//=====
// 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(TubeFilter,bbtk::AtomicBlackBox);
- BBTK_NAME("TubeFilter");
- BBTK_AUTHOR("Info-Dev");
- BBTK_DESCRIPTION("vtk Tube Filter");
+ BBTK_NAME("TubeFilter");
+ BBTK_AUTHOR("Info-Dev");
+ BBTK_DESCRIPTION("vtk Tube Filter");
BBTK_CATEGORY("actor");
BBTK_INPUT(TubeFilter,Renderer,"Renderer",vtkRenderer*,"");
BBTK_INPUT(TubeFilter,lstPointX,"lstPointX",std::vector<double>,"");
BBTK_INPUT(TubeFilter,lstRadio,"lstRadio",std::vector<double>,"");
BBTK_INPUT(TubeFilter,Colour,"Colour",std::vector<double>,"");
BBTK_INPUT(TubeFilter,Transform,"vtkTransform", vtkLinearTransform *,"");
+ BBTK_INPUT(TubeFilter,Opacity,"Opacity",double,"");
BBTK_OUTPUT(TubeFilter,OutAxis,"Tube Actor",vtkProp3D *,"");
- BBTK_END_DESCRIBE_BLACK_BOX(TubeFilter);
-//=====
+BBTK_END_DESCRIBE_BLACK_BOX(TubeFilter);
+//=====
// 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 bbcreaMaracasVisu
--- /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 "bbcreaMaracasVisuTubeTreeFilter.h"
+#include "bbcreaMaracasVisuPackage.h"
+
+#include <vtkSmartPointer.h>
+#include <vtkDoubleArray.h>
+#include <vtkPolyData.h>
+#include <vtkPointData.h>
+#include <vtkTubeFilter.h>
+#include <vtkSphereSource.h>
+
+
+namespace bbcreaMaracasVisu
+{
+
+BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,TubeTreeFilter)
+BBTK_BLACK_BOX_IMPLEMENTATION(TubeTreeFilter,bbtk::AtomicBlackBox);
+
+
+
+void TubeTreeFilter::DrawOneTube(int iGeneral,int numPoints, int iTube)
+{
+ int i;
+ unsigned int nTv = 8; // No. of surface elements for each tube vertex
+
+ double spc[3];
+ // img->GetSpacing(spc);
+ spc[0]=1;
+ spc[1]=1;
+ spc[2]=1;
+
+ int size=iGeneral+numPoints;
+
+ // Create points and cells
+ vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
+//EED vtkPoints *points = vtkPoints::New();
+ vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
+//EED vtkCellArray *lines = vtkCellArray::New();
+
+ lines->InsertNextCell( numPoints );
+
+ for (i=iGeneral;i<size;i++)
+ {
+ points->InsertPoint(i-iGeneral, bbGetInputlstPointX()[i]*spc[0],
+ bbGetInputlstPointY()[i]*spc[1],
+ bbGetInputlstPointZ()[i]*spc[2] );
+ lines->InsertCellPoint(i-iGeneral);
+ }
+
+ vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
+//EED vtkPolyData *polyData = vtkPolyData::New();
+ polyData->SetPoints(points);
+ polyData->SetLines(lines);
+
+
+ // Varying tube radius using sine-function
+ vtkSmartPointer<vtkDoubleArray> tubeRadius = vtkSmartPointer<vtkDoubleArray>::New();
+//EED vtkDoubleArray *tubeRadius = vtkDoubleArray::New();
+ tubeRadius->SetName("TubeRadius");
+ tubeRadius->SetNumberOfTuples( numPoints );
+ for (i=iGeneral;i<size;i++)
+ {
+ tubeRadius->SetTuple1(i-iGeneral, bbGetInputlstRadio()[i] );
+ }
+ polyData->GetPointData()->AddArray(tubeRadius);
+ polyData->GetPointData()->SetActiveScalars("TubeRadius");
+
+
+
+// Adding spheres at the start and end of the tube
+
+ // Sphere start
+ i=iGeneral;
+ vtkSphereSource *vtksphereStart = vtkSphereSource::New();
+ vtksphereStart->SetThetaResolution (10);
+ vtksphereStart->SetPhiResolution (10);
+ vtksphereStart->SetRadius( bbGetInputlstRadio()[i] );
+ vtkPolyDataMapper *sphereMapperStart = vtkPolyDataMapper::New();
+ sphereMapperStart->SetInput( vtksphereStart->GetOutput() );
+ vtkActor *sphereActorStart = vtkActor::New();
+ sphereActorStart->SetMapper(sphereMapperStart);
+ sphereActorStart->SetOrigin( 0,0,0 );
+ sphereActorStart->SetPosition(bbGetInputlstPointX()[i]*spc[0], bbGetInputlstPointY()[i]*spc[1], bbGetInputlstPointZ()[i]*spc[2] );
+
+ // Sphere end
+ i=size-1;
+ vtkSphereSource *vtksphereEnd = vtkSphereSource::New();
+ vtksphereEnd->SetThetaResolution (10);
+ vtksphereEnd->SetPhiResolution (10);
+ vtksphereEnd->SetRadius( bbGetInputlstRadio()[i] );
+ vtkPolyDataMapper *sphereMapperEnd = vtkPolyDataMapper::New();
+ sphereMapperEnd->SetInput( vtksphereEnd->GetOutput() );
+ vtkActor *sphereActorEnd = vtkActor::New();
+ sphereActorEnd->SetMapper(sphereMapperEnd);
+ sphereActorEnd->SetOrigin( 0,0,0 );
+ sphereActorEnd->SetPosition(bbGetInputlstPointX()[i]*spc[0], bbGetInputlstPointY()[i]*spc[1], bbGetInputlstPointZ()[i]*spc[2] );
+
+
+ // color
+ double r,g,b;
+ if ( (iTube*3+1) < (int)(bbGetInputColour().size()) )
+ {
+ r = bbGetInputColour()[0+iTube*3];
+ g = bbGetInputColour()[1+iTube*3];
+ b = bbGetInputColour()[2+iTube*3];
+ } else {
+ r = (rand() % 100) / 100.0;
+ g = (rand() % 100) / 100.0;
+ b = (rand() % 100) / 100.0;
+ }
+ r = bbGetInputColour()[0];
+ g = bbGetInputColour()[1];
+ b = bbGetInputColour()[2];
+
+
+
+
+ vtkSmartPointer<vtkTubeFilter> tube = vtkSmartPointer<vtkTubeFilter>::New();
+//EED vtkTubeFilter *tube = vtkTubeFilter::New();
+ tube->SetInput(polyData);
+ tube->SetNumberOfSides(nTv);
+ tube->SetVaryRadiusToVaryRadiusByAbsoluteScalar();
+
+ vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+//EED vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
+ mapper->SetInputConnection(tube->GetOutputPort());
+ mapper->ScalarVisibilityOn();
+ mapper->SetScalarModeToUsePointFieldData();
+
+ // vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();
+ vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
+//EED vtkActor *actor = vtkActor::New();
+ actor->SetMapper(mapper);
+ actor->GetProperty()->SetColor( r,g,b );
+ actor->GetProperty()->SetOpacity( bbGetInputOpacity() );
+ sphereActorStart->GetProperty()->SetColor( r,g,b );;
+ sphereActorEnd->GetProperty()->SetColor( r,g,b );;
+ sphereActorStart->GetProperty()->SetOpacity( bbGetInputOpacity() );
+ sphereActorEnd->GetProperty()->SetOpacity( bbGetInputOpacity() );
+
+ vecVtkActors.push_back( actor );
+ vecVtkActors.push_back( sphereActorStart );
+ vecVtkActors.push_back( sphereActorEnd );
+
+
+ if ( bbGetInputTransform()!=NULL )
+ {
+ actor->SetUserTransform( bbGetInputTransform() );
+ sphereActorStart->SetUserTransform( bbGetInputTransform() );
+ sphereActorEnd->SetUserTransform( bbGetInputTransform() );
+ }
+
+ // Interface Update // Interface Update
+ if (bbGetInputRenderer()!=NULL )
+ {
+ bbGetInputRenderer()->AddActor( actor );
+ bbGetInputRenderer()->AddActor( sphereActorStart );
+ bbGetInputRenderer()->AddActor( sphereActorEnd );
+ }
+}
+
+
+//=====
+// 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 TubeTreeFilter::Process()
+{
+
+ printf("EED TubeTreeFilter::Process start \n");
+
+ int iGeneral=0;
+ int iTube,sizeLstAxis=bbGetInputlstIndexs().size();
+ int iActor,sizeActors = vecVtkActors.size();
+
+ int numPoints;
+ if (oldLstSize!=sizeLstAxis)
+ {
+ oldLstSize=sizeLstAxis;
+ for (iActor=0 ; iActor<sizeActors; iActor++)
+ {
+ if (bbGetInputRenderer()!=NULL )
+ {
+ bbGetInputRenderer()->RemoveActor( vecVtkActors[iActor] );
+ //EED vecVtkPolyData[iActor]->Delete();
+ //EED vecVtkPolyDataMaper[iActor]->Delete();
+ //EED vecVtkActors[iActor]->Delete();
+ }
+ }
+
+ //EED vecVtkPolyData.clear();
+ //EED vecVtkPolyDataMaper.clear();
+ vecVtkActors.clear();
+
+ for ( iTube=0 ; iTube<sizeLstAxis ; iTube++)
+ {
+ numPoints = bbGetInputlstIndexs()[iTube];
+ DrawOneTube(iGeneral,numPoints,iTube);
+ iGeneral = iGeneral+numPoints;
+ }
+
+ if ( bbGetInputiTube()*3 <= (int)(vecVtkActors.size()-1) )
+ {
+ bbSetOutputOutTube( vecVtkActors[ bbGetInputiTube()*3 ] );
+ } else {
+ printf("TubeTreeFilter .ERROR. missing index vector...\n");
+ }
+
+ }
+
+ double r,g,b;
+ r = bbGetInputColour()[0];
+ g = bbGetInputColour()[1];
+ b = bbGetInputColour()[2];
+ for (iTube=0 ; iTube<sizeLstAxis; iTube++)
+ {
+ vtkActor *actor1=vecVtkActors[0+iTube*3];
+ vtkActor *actor2=vecVtkActors[1+iTube*3];
+ vtkActor *actor3=vecVtkActors[2+iTube*3];
+
+ actor1->GetProperty()->SetOpacity( bbGetInputOpacity() );
+ actor2->GetProperty()->SetOpacity( bbGetInputOpacity() );
+ actor3->GetProperty()->SetOpacity( bbGetInputOpacity() );
+ if (bbGetInputColourLaw()==1)
+ {
+ actor1->GetProperty()->SetColor( r,g,b );
+ actor2->GetProperty()->SetColor( r,g,b );
+ actor3->GetProperty()->SetColor( r,g,b );
+ }
+ } // for
+
+
+ printf("EED TubeTreeFilter::Process end \n");
+}
+//=====
+// 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 TubeTreeFilter::bbUserSetDefaultValues()
+{
+ oldLstSize=-1;
+
+// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
+// Here we initialize the input 'In' to 0
+ bbSetInputiTube(0);
+ std::vector<double> colour;
+ // 0- gray
+ colour.push_back(0.5);
+ colour.push_back(0.5);
+ colour.push_back(0.5);
+ // 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);
+ bbSetInputRenderer(NULL);
+ bbSetInputColourLaw(1);
+ bbSetInputOpacity(1);
+
+}
+//=====
+// 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 TubeTreeFilter::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 TubeTreeFilter::bbUserFinalizeProcessing()
+{
+
+// THE FINALIZATION METHOD BODY :
+// Here does nothing
+// but this is where you should desallocate the internal/output pointers
+// if any
+
+}
+}
+// EO namespace bbcreaMaracasVisu
+
+
--- /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 __bbcreaMaracasVisuTubeTreeFilter_h_INCLUDED__
+#define __bbcreaMaracasVisuTubeTreeFilter_h_INCLUDED__
+#include "bbcreaMaracasVisu_EXPORT.h"
+#include "bbtkAtomicBlackBox.h"
+#include "iostream"
+
+
+#include <vtkProp3D.h>
+#include <vtkRenderer.h>
+#include "vtkImageData.h"
+#include "vtkActor.h"
+#include "vtkPolyData.h"
+#include "vtkPolyDataMapper.h"
+#include "vtkPoints.h"
+#include "vtkCellArray.h"
+#include "vtkProperty.h"
+#include "vtkLinearTransform.h"
+
+
+namespace bbcreaMaracasVisu
+{
+
+class bbcreaMaracasVisu_EXPORT TubeTreeFilter
+ :
+ public bbtk::AtomicBlackBox
+{
+ BBTK_BLACK_BOX_INTERFACE(TubeTreeFilter,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(Renderer , vtkRenderer*);
+ BBTK_DECLARE_INPUT(lstIndexs , std::vector<int>);
+ BBTK_DECLARE_INPUT(lstPointX , std::vector<double>);
+ BBTK_DECLARE_INPUT(lstPointY , std::vector<double>);
+ BBTK_DECLARE_INPUT(lstPointZ , std::vector<double>);
+ BBTK_DECLARE_INPUT(lstRadio , std::vector<double>);
+ BBTK_DECLARE_INPUT(Colour , std::vector<double>);
+ BBTK_DECLARE_INPUT(ColourLaw , int);
+ BBTK_DECLARE_INPUT(Transform , vtkLinearTransform *);
+ BBTK_DECLARE_INPUT(Opacity , double );
+ BBTK_DECLARE_INPUT(iTube , int );
+ BBTK_DECLARE_OUTPUT(OutTube,vtkProp3D *);
+ BBTK_PROCESS(Process);
+ void Process();
+
+ private:
+ std::vector<vtkActor*> vecVtkActors;
+ void DrawOneTube(int iGeneral,int numPoints, int iTube);
+ int oldLstSize;
+
+//=====
+// 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(TubeTreeFilter,bbtk::AtomicBlackBox);
+ BBTK_NAME("TubeTreeFilter");
+ BBTK_AUTHOR("Info-Dev");
+ BBTK_DESCRIPTION("vtk Tube Tree Filter");
+ BBTK_CATEGORY("actor");
+
+ BBTK_INPUT(TubeTreeFilter,Renderer,"Renderer",vtkRenderer*,"");
+ BBTK_INPUT(TubeTreeFilter,lstIndexs,"Indexs",std::vector<int>,"");
+ BBTK_INPUT(TubeTreeFilter,lstPointX,"lstPointX",std::vector<double>,"");
+ BBTK_INPUT(TubeTreeFilter,lstPointY,"lstPointY",std::vector<double>,"");
+ BBTK_INPUT(TubeTreeFilter,lstPointZ,"lstPointZ",std::vector<double>,"");
+ BBTK_INPUT(TubeTreeFilter,lstRadio,"lstRadio",std::vector<double>,"");
+ BBTK_INPUT(TubeTreeFilter,Colour,"Colour",std::vector<double>,"");
+ BBTK_INPUT(TubeTreeFilter,ColourLaw,"ColorLaw 1(default) solid color, 2 color by segment, 3 color for each point",int,"");
+ BBTK_INPUT(TubeTreeFilter,Transform,"vtkTransform", vtkLinearTransform *,"");
+ BBTK_INPUT(TubeTreeFilter,iTube,"iTube",int,"");
+ BBTK_INPUT(TubeTreeFilter,Opacity,"Opacity",double,"");
+ BBTK_OUTPUT(TubeTreeFilter,OutTube,"Tube[iTube]",vtkProp3D *,"");
+
+
+
+BBTK_END_DESCRIBE_BLACK_BOX(TubeTreeFilter);
+//=====
+// 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 bbcreaMaracasVisu
+
+#endif // __bbcreaMaracasVisuTubeTreeFilter_h_INCLUDED__
+
vecVtkPolyDataMaper.push_back( polydatamapper );
vecVtkActors.push_back( vtkactor );
-// vtkImageData* img = bbGetInputImage();
+// vtkImageData* img = bbGetInputImage();
unsigned int i,size;
- double spc[3];
+ double spc[3];
// img->GetSpacing(spc);
spc[0]=1;
spc[1]=1;
spc[2]=1;
- if(!bbGetInputlstPointX().empty()){
+ int lstpointsXsize =bbGetInputlstPointX().size();
+
+ if( lstpointsXsize>0 ){
vtkPoints* allPoints = vtkPoints::New( );
vtkCellArray* allTopology = vtkCellArray::New( );
allTopology->InsertNextCell( numPoints );
{
//multiplicar ver parametros spacing, en maracas cuando se toca la imagen y se ve dycom
//hay parĀ·metro dycom, vtkImagedata valor spacing y esos datos hay que multiplicar al polydata
- allPoints->InsertNextPoint( bbGetInputlstPointX()[i]*spc[0],
- bbGetInputlstPointY()[i]*spc[1],
+ allPoints->InsertNextPoint( bbGetInputlstPointX()[i]*spc[0],
+ bbGetInputlstPointY()[i]*spc[1],
bbGetInputlstPointZ()[i]*spc[2] );
// printf("DrawAxisTree3D::DrawOneAxis point %d -> %f, %f, %f \n", i, bbGetInputlstPointX()[i], bbGetInputlstPointY()[i], bbGetInputlstPointZ()[i] );
allTopology->InsertCellPoint( i-iGeneral );
polydata->SetPoints( allPoints );
polydata->SetLines( allTopology );
allPoints->Delete();
- allTopology->Delete();
+ allTopology->Delete();
}
// color
if ( (iAxis*3+1) < (int)(bbGetInputColour().size()) )
{
r = bbGetInputColour()[0+iAxis*3];
- g = bbGetInputColour()[1+iAxis*3];
+ g = bbGetInputColour()[1+iAxis*3];
b = bbGetInputColour()[2+iAxis*3];
} else {
r = (rand() % 100) / 100.0;
vtkactor->GetProperty()->SetColor( r,g,b );
vtkactor->GetProperty()->SetLineWidth( 0.5 );
+ vtkactor->GetProperty()->SetOpacity( bbGetInputOpacity() );
if ( bbGetInputTransform()!=NULL )
{
{
printf("EED DrawAxisTree3D::Process start \n");
- int iActor,sizeActors = vecVtkActors.size();
- for (iActor=0 ; iActor<sizeActors; iActor++)
- {
- if (bbGetInputRenderer()!=NULL )
- {
- bbGetInputRenderer()->RemoveActor( vecVtkActors[iActor] );
- vecVtkPolyData[iActor]->Delete();
- vecVtkPolyDataMaper[iActor]->Delete();
- vecVtkActors[iActor]->Delete();
- }
- }
- vecVtkPolyData.clear();
- vecVtkPolyDataMaper.clear();
- vecVtkActors.clear();
-
-
int iGeneral=0;
int iAxis,sizeLstAxis=bbGetInputlstIndexs().size();
+ int iActor,sizeActors = vecVtkActors.size();
int numPoints;
- for ( iAxis=0 ; iAxis<sizeLstAxis ; iAxis++)
- {
- numPoints = bbGetInputlstIndexs()[iAxis];
- DrawOneAxis(iGeneral,numPoints,iAxis);
- iGeneral = iGeneral+numPoints;
-
-// if ((iAxis % 1)==0)
-// {
-// printf("EED DrawAxisTree3D::Process %d/%d\n", iAxis,sizeLstAxis );
-// }
-
- }
+ if (oldLstSize!=sizeLstAxis)
+ {
+ oldLstSize=sizeLstAxis;
+ for (iActor=0 ; iActor<sizeActors; iActor++)
+ {
+ if (bbGetInputRenderer()!=NULL )
+ {
+ bbGetInputRenderer()->RemoveActor( vecVtkActors[iActor] );
+ vecVtkPolyData[iActor]->Delete();
+ vecVtkPolyDataMaper[iActor]->Delete();
+ vecVtkActors[iActor]->Delete();
+ }
+ }
+ vecVtkPolyData.clear();
+ vecVtkPolyDataMaper.clear();
+ vecVtkActors.clear();
+
+ for ( iAxis=0 ; iAxis<sizeLstAxis ; iAxis++)
+ {
+ numPoints = bbGetInputlstIndexs()[iAxis];
+ DrawOneAxis(iGeneral,numPoints,iAxis);
+ iGeneral = iGeneral+numPoints;
+
+ // if ((iAxis % 1)==0)
+ // {
+ // printf("EED DrawAxisTree3D::Process %d/%d\n", iAxis,sizeLstAxis );
+ // }
+
+ }
+
+ if ( bbGetInputiAxis() < (int)(vecVtkActors.size()-1) )
+ {
+ bbSetOutputOutAxis( vecVtkActors[ bbGetInputiAxis() ] );
+ } else {
+ printf("TubeTreeFilter .ERROR. missing index vector...\n");
+ }
+
+ } else {// if oldLstSize
+ for (iActor=0 ; iActor<sizeActors; iActor++)
+ {
+ vecVtkActors[iActor]->GetProperty()->SetOpacity( bbGetInputOpacity() );
+ }
+ }
- bbSetOutputOutAxis( vecVtkActors[ bbGetInputiAxis() ] );
printf("EED DrawAxisTree3D::Process end \n");
}
void DrawAxisTree3D::bbUserSetDefaultValues()
-{
+{
+ oldLstSize=-1;
bbSetInputiAxis(0);
std::vector<double> colour;
// 1- red
colour.push_back(0.0);
colour.push_back(1.0);
colour.push_back(0.0);
- // 5-
+ // 5-
colour.push_back(0.0);
colour.push_back(1.0);
colour.push_back(1.0);
- // 6-
+ // 6-
colour.push_back(0.5);
colour.push_back(0.5);
colour.push_back(0.5);
bbSetInputColour(colour);
+ bbSetInputOpacity(1);
+ bbSetInputColourLaw(1);
}
-
- //-----------------------------------------------------------------
+
+ //-----------------------------------------------------------------
void DrawAxisTree3D::bbUserInitializeProcessing()
{
}
-
- //-----------------------------------------------------------------
+
+ //-----------------------------------------------------------------
void DrawAxisTree3D::bbUserFinalizeProcessing()
{
}
-
- //-----------------------------------------------------------------
+
+ //-----------------------------------------------------------------
}
// EO namespace bbcreaMaracasVisu
{
class /*BBTK_EXPORT*/ DrawAxisTree3D
- :
+ :
public bbtk::AtomicBlackBox
{
BBTK_BLACK_BOX_INTERFACE(DrawAxisTree3D,bbtk::AtomicBlackBox);
- BBTK_DECLARE_INPUT(Renderer ,vtkRenderer*);
- BBTK_DECLARE_INPUT(lstIndexs,std::vector<int>);
- BBTK_DECLARE_INPUT(lstPointX,std::vector<double>);
- BBTK_DECLARE_INPUT(lstPointY,std::vector<double>);
- BBTK_DECLARE_INPUT(lstPointZ,std::vector<double>);
- BBTK_DECLARE_INPUT(lstRadio ,std::vector<double>);
- BBTK_DECLARE_INPUT(Colour ,std::vector<double>);
- BBTK_DECLARE_INPUT(Transform, vtkLinearTransform *);
+ BBTK_DECLARE_INPUT(Renderer , vtkRenderer*);
+ BBTK_DECLARE_INPUT(lstIndexs , std::vector<int>);
+ BBTK_DECLARE_INPUT(lstPointX , std::vector<double>);
+ BBTK_DECLARE_INPUT(lstPointY , std::vector<double>);
+ BBTK_DECLARE_INPUT(lstPointZ , std::vector<double>);
+ BBTK_DECLARE_INPUT(lstRadio , std::vector<double>);
+ BBTK_DECLARE_INPUT(ColourLaw , int );
+ BBTK_DECLARE_INPUT(Colour , std::vector<double>);
+ BBTK_DECLARE_INPUT(Transform , vtkLinearTransform *);
+ BBTK_DECLARE_INPUT(Opacity , double);
BBTK_DECLARE_INPUT(iAxis, int );
BBTK_DECLARE_OUTPUT(OutAxis,vtkProp3D *);
BBTK_PROCESS(Process);
private:
+ int oldLstSize;
std::vector<vtkPolyData*> vecVtkPolyData;
std::vector<vtkPolyDataMapper*> vecVtkPolyDataMaper;
std::vector<vtkActor*> vecVtkActors;
BBTK_INPUT(DrawAxisTree3D,lstPointZ,"lstPointZ",std::vector<double>,"");
BBTK_INPUT(DrawAxisTree3D,lstRadio,"lstRadio",std::vector<double>,"");
BBTK_INPUT(DrawAxisTree3D,Colour,"Colour",std::vector<double>,"");
+ BBTK_INPUT(DrawAxisTree3D,Opacity,"Opacity",double,"");
+ BBTK_INPUT(DrawAxisTree3D,ColourLaw,"ColorLaw 1(default) solid color, 2 color by segment, 3 color for each point",int,"");
BBTK_INPUT(DrawAxisTree3D,Transform,"vtkTransform", vtkLinearTransform *,"");
BBTK_INPUT(DrawAxisTree3D,iAxis,"iAxis",int,"");
BBTK_OUTPUT(DrawAxisTree3D,OutAxis,"Axis[iAxis]",vtkProp3D *,"");