#include <vtkPolyData.h>
#include <vtkPointData.h>
#include <vtkTubeFilter.h>
-#include <vtkSphereSource.h>
#include "vtkObjectFactory.h"
BBTK_BLACK_BOX_IMPLEMENTATION(TubeTreeFilter,bbtk::AtomicBlackBox);
+void TubeTreeFilter::SetRadioTube(int iGeneral,int numPoints, int iTube)
+{
+ int i;
+ double radiotmp=1;
+ int size=iGeneral+numPoints;
+ vtkDoubleArray *tubeRadius = vecTubeRadiosArray[iTube];
+
+ if (bbGetInputlstRadio().size()>=1)
+ {
+ if (bbGetInputlstRadioLaw()==0) // for All
+ {
+ radiotmp=bbGetInputlstRadio()[0];
+ } // Law 0 for All
+
+ if (bbGetInputlstRadioLaw()==1) // by segment
+ {
+ if (bbGetInputlstRadio().size()>=iTube)
+ {
+ radiotmp=bbGetInputlstRadio()[iTube];
+ } else {
+ radiotmp=bbGetInputlstRadio()[ bbGetInputlstRadio().size()-1 ];
+ }
+ } // Law 1 by segment
+
+ for (i=iGeneral;i<size;i++)
+ {
+ if (bbGetInputlstRadioLaw()==2) // by point
+ {
+ if (bbGetInputlstRadio().size()>=i)
+ {
+ radiotmp=bbGetInputlstRadio()[i];
+ } else {
+ radiotmp=bbGetInputlstRadio()[ bbGetInputlstRadio().size()-1 ];
+ }
+ } // Law 2 by points
+ tubeRadius->SetTuple1(i-iGeneral, radiotmp );
+ } // for
+ tubeRadius->Modified();
+ } // bbGetInputlstRadio().size()>=1
+
+
+}
+
void TubeTreeFilter::DrawOneTube(int iGeneral,int numPoints, int iTube)
{
//EED vtkDoubleArray *tubeRadius = vtkDoubleArray::New();
tubeRadius->SetName("TubeRadius");
tubeRadius->SetNumberOfTuples( numPoints );
- for (i=iGeneral;i<size;i++)
- {
- tubeRadius->SetTuple1(i-iGeneral, bbGetInputlstRadio()[i] );
- }
+ vecTubeRadiosArray.push_back( tubeRadius );
+
+
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] );
-
vtkSmartPointer<vtkTubeFilter> tube = vtkSmartPointer<vtkTubeFilter>::New();
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
tube->SetInput(polyData);
+#else
+ tube->SetInputData(polyData);
+#endif
tube->SetNumberOfSides(nTv);
tube->SetVaryRadiusToVaryRadiusByAbsoluteScalar();
+ tube->CappingOn();
vtkLookupTableEED* vLutEED = vtkLookupTableEED::New();
actor->SetMapper(mapper);
vecVtkActors.push_back( actor );
- vecVtkActors.push_back( sphereActorEnd );
- vecVtkActors.push_back( sphereActorStart );
// Interface Update // Interface Update
if (bbGetInputRenderer()!=NULL )
{
bbGetInputRenderer()->AddActor( actor );
- bbGetInputRenderer()->AddActor( sphereActorStart );
- bbGetInputRenderer()->AddActor( sphereActorEnd );
}
}
void TubeTreeFilter::SetGraphicProperties()
{
- int iTube,sizeLstAxis=bbGetInputlstIndexs().size();
+ int iTube,sizeLstAxis=bbGetInputlstIndexs().size();
- vtkActor *actorTube;
- vtkActor *actorSpherEnd;
- vtkActor *actorSpherStart;
+ int iGeneral=0;
+ int numPoints;
+ vtkActor *actorTube;
double r,g,b;
r = bbGetInputColour()[0];
for (iTube=0 ; iTube<sizeLstAxis; iTube++)
{
// Get Actor
- actorTube=vecVtkActors[0+iTube*3];
- actorSpherEnd=vecVtkActors[1+iTube*3];
- actorSpherStart=vecVtkActors[2+iTube*3];
+
+ actorTube=vecVtkActors[iTube];
// Set Opacity
actorTube->GetProperty()->SetOpacity( bbGetInputOpacity() );
- actorSpherEnd->GetProperty()->SetOpacity( bbGetInputOpacity() );
- actorSpherStart->GetProperty()->SetOpacity( bbGetInputOpacity() );
- //Set Colour
+ // Set Transform
if ( bbGetInputTransform()!=NULL )
{
actorTube->SetUserTransform( bbGetInputTransform() );
- actorSpherEnd->SetUserTransform( bbGetInputTransform() );
- actorSpherStart->SetUserTransform( bbGetInputTransform() );
}
+ //Set Colour
if (bbGetInputColourLaw()==1) // One solide colour
{
//
}
actorTube->GetProperty()->SetColor( r,g,b );
- actorSpherEnd->GetProperty()->SetColor( r,g,b );
- actorSpherStart->GetProperty()->SetColor( r,g,b );
+
+
+// Setting radio
+ numPoints = bbGetInputlstIndexs()[iTube];
+ SetRadioTube(iGeneral,numPoints,iTube);
+ iGeneral = iGeneral+numPoints;
+
} // for
}
//EED vecVtkPolyData.clear();
//EED vecVtkPolyDataMaper.clear();
vecVtkActors.clear();
+ vecTubeRadiosArray.clear();
for ( iTube=0 ; iTube<sizeLstAxis ; iTube++)
{
iGeneral = iGeneral+numPoints;
}
- if ( bbGetInputiTube()*3 <= (int)(vecVtkActors.size()-1) )
+ if ( bbGetInputiTube() <= (int)(vecVtkActors.size()-1) )
{
- bbSetOutputOutTube( vecVtkActors[ bbGetInputiTube()*3 ] );
+ bbSetOutputOutTube( vecVtkActors[ bbGetInputiTube() ] );
} else {
printf("TubeTreeFilter .ERROR. missing index vector...\n");
}// vector Actor size
- }
+
+ } // oldLstSize
SetGraphicProperties();
printf("EED TubeTreeFilter::Process end \n");
bbSetInputColourLaw(1);
bbSetInputOpacity(1);
+ std::vector<double> radio;
+ radio.push_back(1);
+ bbSetInputlstRadio( radio );
+ bbSetInputlstRadioLaw( 0 ); // for all
+
}
//=====
// 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)