[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