[vtkusers] Map Scalar Values to colors using color lookup table
Gishara Indeewarie
gish.777 at gmail.com
Mon Feb 6 06:36:10 EST 2012
I am sorry, I have not set the range properly in the table and in the
mapper. Sorry again.
On Mon, Feb 6, 2012 at 12:53 PM, Gishara Indeewarie <gish.777 at gmail.com>wrote:
> Hi all,
>
> I have created a shape with different colors using color lookup table
> according to the example below:
> http://www.vtk.org/Wiki/VTK/Examples/Cxx/Meshes/Color_a_mesh_by_height
>
> It is working well, but I can't see where is set the scalar values to
> colors. Below is my code.
>
> vtkPoints *points = newPts;//ReadCFDData2();
> vtkSmartPointer<vtkPolyData> polydata =
> vtkSmartPointer<vtkPolyData>::New();
> polydata->SetPoints(points);
>
> vtkSmartPointer<vtkDoubleArray> weights =
> vtkSmartPointer<vtkDoubleArray>::New();
> weights->SetNumberOfValues(PoValues.GetSize());
> for(int i=0; i< PoValues.GetSize();i++){
> weights->SetValue(i, PoValues[i]);
> }
> // polydata->GetPointData()->SetScalars(weights);
>
> vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter =
> vtkSmartPointer<vtkVertexGlyphFilter>::New();
> #if VTK_MAJOR_VERSION <= 5
> glyphFilter->SetInputConnection(polydata->GetProducerPort());
> #else
> glyphFilter->SetInputData(polydata);
> #endif
> glyphFilter->Update();
>
> // Create a plane to cut
> vtkSmartPointer<vtkPlane> plane =
> vtkSmartPointer<vtkPlane>::New();
> plane->SetOrigin(polydata->GetCenter());
> plane->SetNormal(1,1,1);
>
>
> // Construct the surface and create isosurface.
> vtkSmartPointer<vtkSurfaceReconstructionFilter> surf =
> vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();
>
> surf->SetInput(polydata);
> //
> vtkSmartPointer<vtkContourFilter> cf =
> vtkSmartPointer<vtkContourFilter>::New();
> cf->SetInputConnection(surf->GetOutputPort());
> cf->Update();
> vtkPolyData* outputPolyData = cf->GetOutput();
>
> double bounds[6];
> outputPolyData->GetBounds(bounds);
>
> // Find min and max z
> double minz = bounds[4];
> double maxz = bounds[5];
>
> std::cout << "minz: " << minz << std::endl;
> std::cout << "maxz: " << maxz << std::endl;
>
> // Create the color map
> vtkSmartPointer<vtkLookupTable> colorLookupTable =
> vtkSmartPointer<vtkLookupTable>::New();
> colorLookupTable->SetTableRange(minz, maxz);
> colorLookupTable->SetHueRange(0.0,0.667);
> colorLookupTable->SetNumberOfColors(16);
>
> colorLookupTable->Build();
> //unsigned char *op;
> //vtkScalarsToColors::MapScalarsThroughTable(newScalars,op);
>
> // Generate the colors for each point based on the color map
> vtkSmartPointer<vtkUnsignedCharArray> colors =
> vtkSmartPointer<vtkUnsignedCharArray>::New();
> colors->SetNumberOfComponents(3);
> colors->SetName("Colors");
> for(int i = 0; i < outputPolyData->GetNumberOfPoints(); i++)
> {
> double p[3];
> outputPolyData->GetPoint(i,p);
>
> double dcolor[3];
> colorLookupTable->GetColor(p[2], dcolor);
> unsigned char color[3];
> for(unsigned int j = 0; j < 3; j++)
> {
> color[j] = static_cast<unsigned char>(255.0 * dcolor[j]);
> }
>
> colors->InsertNextTupleValue(color);
> }
>
> outputPolyData->GetPointData()->SetScalars(colors);
>
> // Create a mapper and actor
> vtkSmartPointer<vtkPolyDataMapper> mapper =
> vtkSmartPointer<vtkPolyDataMapper>::New();
>
> mapper->SetInputConnection(/*reverse->GetOutputPort()*/cf->GetOutputPort());
> mapper->ScalarVisibilityOn();
> mapper->SetLookupTable(colorLookupTable);
> // mapper->SetScalarRange(polydata->GetScalarRange());
> vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
> //actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque
> actor->SetMapper(mapper);
>
> //Create a renderer, render window, and interactor
> vtkSmartPointer<vtkRenderer> renderer =
> vtkSmartPointer<vtkRenderer>::New();
> vtkSmartPointer<vtkRenderWindow> renderWindow =
> vtkSmartPointer<vtkRenderWindow>::New();
> renderWindow->AddRenderer(renderer);
> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
> vtkSmartPointer<vtkRenderWindowInteractor>::New();
> renderWindowInteractor->SetRenderWindow(renderWindow);
>
> //Add the actor to the scene
> renderer->AddActor(actor);
> renderer->SetBackground(.3, .6, .3); // Background color green
>
> //Render and interact
> renderWindow->Render();
> renderWindowInteractor->Start();
>
> Can anyone tell me where should I map the scalar values to colors in the
> above code?
>
> Thanks.
>
--
Gish
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120206/d33b9595/attachment.htm>
More information about the vtkusers
mailing list