[vtkusers] VTK polylines using RGBA to set opacity does not work
Reicht Ignaz
i.reicht at Dkfz-Heidelberg.de
Mon Jan 10 09:02:59 EST 2011
Hi,
on creating vtk polylines with RGBA-color information for each single point, no opacity has been processed/rendered. VTK-Literature says that opacity can be specified for an actor and also for an vertex, but somehow this does not work properly for vertex based settings. Attached you will find my code example where two polylines are given. coordinates represent polyline1 in front of polyline2. Color/opacity-information is given using RGBA tuple with 4 Components. I also tried this approach using vtkTubes but with the same disappointing result (see commented out parts).
Does somebody know what is missing or what is implemented wrong?
thanks in advise
iggy
##############################
int main() {
//Create points for polyline1.
double origin[3] = {0.0, 0.0, 0.0};
double p0[3] = {100.0, 0.0, 0.0};
double p1[3] = {150.0, 100.0, 0.0};
double p2[3] = {170.0, 200.0, 0.0};
//create points for polyline2
double p01[3] = {50.0, 50.0, 13.0};
double p11[3] = {200.0, 100.0, 13.0};
//insert points to vtkPointarray
vtkPoints *pnts = vtkPoints::New();
pnts->InsertPoint(0,origin);
pnts->InsertPoint(1,p0);
pnts->InsertPoint(2,p1);
pnts->InsertPoint(3,p2);
pnts->InsertPoint(4,p01);
pnts->InsertPoint(5,p11);
//generate and define polyline1
vtkPolyLine *polyLine = vtkPolyLine::New();
polyLine->GetPointIds()->SetNumberOfIds(4);
polyLine->GetPointIds()->SetId(0,0);
polyLine->GetPointIds()->SetId(1,1);
polyLine->GetPointIds()->SetId(2,2);
polyLine->GetPointIds()->SetId(3,3);
//generate and define polyline2
vtkPolyLine *polyLine2 = vtkPolyLine::New();
polyLine2->GetPointIds()->SetNumberOfIds(2);
polyLine2->GetPointIds()->SetId(0,4);
polyLine2->GetPointIds()->SetId(1,5);
//add lines to cellArray
vtkCellArray *lines = vtkCellArray::New();
lines->InsertNextCell(polyLine);
lines->InsertNextCell(polyLine2);
vtkPolyData *polyDataT = vtkPolyData::New();
polyDataT->SetPoints(pnts);
polyDataT->SetLines(lines);
//color and opacity handling
vtkUnsignedCharArray *colorT = vtkUnsignedCharArray::New();
colorT->SetName("Colors");
colorT->SetNumberOfComponents(4); //4 components cuz of RGBA
unsigned char red[4] = {255, 0, 0, 0.5};
unsigned char green[4] = {0, 255, 0, 0.5};
unsigned char blue[4] = {0, 0, 255, 0.5};
unsigned char white[4] = {255, 255, 255, 0.5};
colorT->InsertNextTupleValue(red); //color for point0
colorT->InsertNextTupleValue(green); //color for point1
colorT->InsertNextTupleValue(blue);
colorT->InsertNextTupleValue(white);
colorT->InsertNextTupleValue(white);
colorT->InsertNextTupleValue(white); //color for point5
polyDataT->GetPointData()->AddArray(colorT);
//tube representation
//vtkTubeFilter *tube = vtkTubeFilter::New();
//tube->SetInput(polyDataT);
//tube->SetNumberOfSides(8);
//tube->SetRadius(5);
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInput(polyDataT);
//mapper->SetInputConnection(tube->GetOutputPort()); //using for tube representation
mapper->ScalarVisibilityOn();
mapper->SetScalarModeToUsePointFieldData();
mapper->SelectColorArray("Colors");
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
//Rendering
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(.2, .3, .4);
renderer->ResetCamera();
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor>
iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
renWin->AddRenderer(renderer);
renWin->SetSize(500, 500);
renWin->Render();
iren->Start();
}//end main()
#############################
More information about the vtkusers
mailing list