this->lstPointZ = lstPointZ;
}
+
+ void MaracasTubeFilter::SetlstColour( std::vector<double> lstColour )
+ {
+ this->lstColour=lstColour;
+ }
+
+
void MaracasTubeFilter::SetlstRadius( std::vector<double> lstRadius )
{
this->lstRadius = lstRadius;
void MaracasTubeFilter::Run()
{
+
+
unsigned int i;
unsigned int nTv = 8; // No. of surface elements for each tube vertex
points->InsertPoint(i, lstPointX[i], lstPointY[i], lstPointZ[i]);
}
- vtkSmartPointer<vtkCellArray> lines =
- vtkSmartPointer<vtkCellArray>::New();
+ vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
lines->InsertNextCell( lstPointX.size() );
for (i = 0; i < lstPointX.size(); i++)
{
lines->InsertCellPoint(i);
}
- vtkSmartPointer<vtkPolyData> polyData =
- vtkSmartPointer<vtkPolyData>::New();
+ vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData->SetPoints(points);
polyData->SetLines(lines);
// Varying tube radius using sine-function
- vtkSmartPointer<vtkDoubleArray> tubeRadius =
- vtkSmartPointer<vtkDoubleArray>::New();
+ vtkSmartPointer<vtkDoubleArray> tubeRadius = vtkSmartPointer<vtkDoubleArray>::New();
tubeRadius->SetName("TubeRadius");
tubeRadius->SetNumberOfTuples( lstRadius.size() );
for (i=0 ;i<lstRadius.size() ; i++)
// RBG array (could add Alpha channel too I guess...)
// Varying from blue to red
- vtkSmartPointer<vtkUnsignedCharArray> colors =
- vtkSmartPointer<vtkUnsignedCharArray>::New();
+ vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
colors->SetName("Colors");
colors->SetNumberOfComponents(3);
colors->SetNumberOfTuples( lstPointX.size() );
+ int numberOfColours = lstColour.size()/3;
+ int indexcolour;
for (i = 0; i < lstPointX.size() ;i++)
- {
- colors->InsertTuple3(i, 255 , 0.0 , 0.0 );
- }
+ {
+ if (numberOfColours==0){
+ colors->InsertTuple3(i, 1 , 1 , 1 );
+ } else {
+ if (i<numberOfColours){
+ indexcolour=i*3;
+ } else {
+ indexcolour=(numberOfColours-1)*3;
+ }
+ colors->InsertTuple3(i, 255*lstColour[indexcolour+0] , 255*lstColour[indexcolour+1] , 255*lstColour[indexcolour+2] );
+ }
+ } // for
polyData->GetPointData()->AddArray(colors);
- vtkSmartPointer<vtkTubeFilter> tube
- = vtkSmartPointer<vtkTubeFilter>::New();
+ vtkSmartPointer<vtkTubeFilter> tube = vtkSmartPointer<vtkTubeFilter>::New();
+ tube->CappingOn();
tube->SetInput(polyData);
tube->SetNumberOfSides(nTv);
tube->SetVaryRadiusToVaryRadiusByAbsoluteScalar();
- vtkSmartPointer<vtkPolyDataMapper> mapper =
- vtkSmartPointer<vtkPolyDataMapper>::New();
+ vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(tube->GetOutputPort());
+// mapper->ScalarVisibilityOn();
+// mapper->SetScalarModeToUsePointFieldData();
+
mapper->ScalarVisibilityOn();
+
+// mapper->SetScalarModeToUseCellData();
+// mapper->SetScalarModeToUseCellFieldData();
+// mapper->SetScalarModeToUseFieldData();
+// mapper->SetScalarModeToUsePointData();
mapper->SetScalarModeToUsePointFieldData();
+
+ mapper->SetColorModeToDefault();
+// mapper->SetColorModeToMapScalars();
+
+
mapper->SelectColorArray("Colors");
// vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetOpacity( opacity );
-
if ( transform!=NULL )
{
actor->SetUserTransform( transform );
tubefilter->SetlstRadius( bbGetInputlstRadio() );
tubefilter->SetOpacity( bbGetInputOpacity() );
tubefilter->SetTransform( bbGetInputTransform() );
+ tubefilter->SetlstColour( bbGetInputColour() );
tubefilter->Run();
bbSetOutputOutAxis( tubefilter->GetActor() );
printf("EED TubeFilter::Process end \n");
// Here we initialize the input 'In' to 0
bbSetInputOpacity(1);
bbSetInputTransform(NULL);
-
+
+ std::vector<double> colour;
+ // 0- gray
+ colour.push_back(1.0);
+ colour.push_back(0.0);
+ colour.push_back(0.0);
+ bbSetInputColour(colour);
+
+
}
//=====