[vtkusers] write vtkPolyData with colors from vtkPolyDataMapper

Bill Lorensen bill.lorensen at gmail.com
Fri Jun 20 14:45:29 EDT 2014


The lut is only used for rendering. The cell data contains scalar
values that are mapped through the lut to provide r,g,b for display.
If youo want to save r,g,b colors in the file, you must create r,g,b
cell data.

See for example:
http://vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ColorCellsWithRGB


On Tue, Jun 17, 2014 at 6:28 PM, Jian Cheng <jian.cheng.1983 at gmail.com> wrote:
> Hi,
>
> I would like to write a vtkPolydata into .vtk file with the colors from
> vtkPolyDataMapper.
> However the written .vtk file has  incorrect color which is different
> from the rendered color.
> Please see the following small code.
> Your help will be appreciated.
>
> best,
> Jian Cheng
>
> #include <vtkSmartPointer.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkActor.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindowInteractor.h>
>
> #include <vtkLookupTable.h>
> #include <vtkFloatArray.h>
> #include <vtkCellData.h>
> #include <vtkPolyData.h>
> #include <vtkPlaneSource.h>
>
> #include <vtkPolyDataWriter.h>
> #include <vtkSmartPointer.h>
>
> int main(int , char *[])
> {
>   // Provide some geometry
>   int resolution = 3;
>   vtkSmartPointer<vtkPlaneSource> aPlane =
>     vtkSmartPointer<vtkPlaneSource>::New();
>   aPlane->SetXResolution(resolution);
>   aPlane->SetYResolution(resolution);
>
>   // Create cell data
>   vtkSmartPointer<vtkFloatArray> cellData =
>     vtkSmartPointer<vtkFloatArray>::New();
>   for (int i = 0; i < resolution * resolution; i++)
>     {
>     cellData->InsertNextValue(i + 1);
>     }
>
>   // Create a lookup table to map cell data to colors
>   vtkSmartPointer<vtkLookupTable> lut =
>     vtkSmartPointer<vtkLookupTable>::New();
>   int tableSize = std::max(resolution*resolution + 1, 10);
>   lut->SetNumberOfTableValues(tableSize);
>   lut->Build();
>
>   // Fill in a few known colors, the rest will be generated if needed
>   lut->SetTableValue(0     , 0     , 0     , 0, 1);  //Black
>   lut->SetTableValue(1, 0.8900, 0.8100, 0.3400, 1); // Banana
>   lut->SetTableValue(2, 1.0000, 0.3882, 0.2784, 1); // Tomato
>   lut->SetTableValue(3, 0.9608, 0.8706, 0.7020, 1); // Wheat
>   lut->SetTableValue(4, 0.9020, 0.9020, 0.9804, 1); // Lavender
>   lut->SetTableValue(5, 1.0000, 0.4900, 0.2500, 1); // Flesh
>   lut->SetTableValue(6, 0.5300, 0.1500, 0.3400, 1); // Raspberry
>   lut->SetTableValue(7, 0.9804, 0.5020, 0.4471, 1); // Salmon
>   lut->SetTableValue(8, 0.7400, 0.9900, 0.7900, 1); // Mint
>   lut->SetTableValue(9, 0.2000, 0.6300, 0.7900, 1); // Peacock
>
>   aPlane->Update(); // Force an update so we can set cell data
>   aPlane->GetOutput()->GetCellData()->SetScalars(cellData);
>
>   // Setup actor and mapper
>   vtkSmartPointer<vtkPolyDataMapper> mapper =
>     vtkSmartPointer<vtkPolyDataMapper>::New();
>   mapper->SetInputConnection(aPlane->GetOutputPort());
>   mapper->SetScalarRange(0, tableSize - 1);
>   mapper->SetLookupTable(lut);
>
>   mapper->Update();
>
>   vtkSmartPointer<vtkPolyDataWriter> writer =
> vtkSmartPointer<vtkPolyDataWriter>::New();
>   writer->SetFileName( "aa.vtk" );
>   writer->SetInputData( mapper->GetInput() );
>   writer->Write();
>
>
>   vtkSmartPointer<vtkActor> actor =
>     vtkSmartPointer<vtkActor>::New();
>   actor->SetMapper(mapper);
>
>   // Setup render window, renderer, 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);
>   renderer->AddActor(actor);
>   renderer->SetBackground(.1,.2,.3);
>   renderWindow->Render();
>   renderWindowInteractor->Start();
>
>   return EXIT_SUCCESS;
> }
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers



-- 
Unpaid intern in BillsBasement at noware dot com


More information about the vtkusers mailing list