[vtkusers] True RGB values to vtkTubeFilter - How?

D. Rathore divyaksr at iitk.ac.in
Mon Feb 19 14:41:24 EST 2007


How to send TRUE 24 Bit RGB values (in the range 0 to 255 for each R,G,B plane) to vtkTubeFilter for each X,Y,Z coordinate?
I can't seem to get the true color representation? Is the default some 256 color or something?
I am attaching the code I am using.. would be really nice if someone could point out what is going wrong.

Essentially I have a set of coordinates alongwith their RGB values and I want a Tube out of them..


warm regards,
- Divya Rathore




vtkPoints* temp_pts = vtkPoints::New(); // XYZ coords
vtkPoints* scalar_rgb = vtkPoints::New(); // RGB values

// Populate pts and RGB values
for(int k=0; k < num_3D_points; k++)
{
    temp_pts->InsertPoint(k, 
         (double) Data[count1++], 
         (double) Data[count1++], 
         (double) Data[count1++]
         );
    scalar_rgb->InsertPoint(k, 
         (double) DataRGBval[count2++], 
         (double) DataRGBval[count2++], 
         (double) DataRGBval[count2++]
         ); // NOTE*** values in DataRGBval[] are in range [0,255] NOT [0,1]
}


// Create the polyline.
vtkCellArray *lines = vtkCellArray::New();
int numPoints = temp_pts->GetNumberOfPoints();
lines->InsertNextCell(numPoints);  
for (int j = 0; j < numPoints; j++) lines->InsertCellPoint(j);


// Insert Scalars.
vtkFloatArray *scalars = vtkFloatArray::New();
scalars->SetNumberOfComponents(3);
double pts[3];
for(int j=0; j < numPoints; j++) 
{
    scalar_rgb->GetPoint(j,pts);
    scalars->InsertTuple3(j, (float)pts[0]/255.0, (float)pts[1]/255.0, (float)pts[2]/255.0);
} // division by 255.0 so that data is in range [0,1]


vtkPolyData *profileData = vtkPolyData::New();
profileData->SetPoints((vtkPoints *)(temp_pts));
profileData->SetLines(lines);
profileData->GetPointData()->SetScalars(scalars);
profileData->BuildLinks();


// Add thickness to the resulting line.
vtkTubeFilter *axesTubes = vtkTubeFilter::New();
axesTubes->SetNumberOfSides(12);
axesTubes->SetInput(profileData);
axesTubes->SetRadius(0.3);


vtkPolyDataMapper *axesMapper = vtkPolyDataMapper::New();
axesMapper->SetColorModeToMapScalars(); // This is important i guess
axesMapper->SetScalarRange(0,numPoints-1);
axesMapper->SetInput(axesTubes->GetOutput());
   
vtkActor *axesActor = vtkActor::New();
axesActor->SetMapper(axesMapper);

ren1->AddActor(axesActor); // add to renderer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070220/fe4077ae/attachment.htm>


More information about the vtkusers mailing list