[vtkusers] write vtkPolyData with colors from vtkPolyDataMapper

Andrew Maclean andrew.amaclean at gmail.com
Wed Jun 25 19:06:15 EDT 2014


Hi Jian,
Glad to be of help.
I have also done a more comprehensive example that also uses color transfer
functions in addition to a lookup table of predefined colors, it also
writes and reads vtp files, see:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/AssignColorsFromLUT

Regards
   Andrew


On Thu, Jun 26, 2014 at 2:31 AM, Jian Cheng <jian.cheng.1983 at gmail.com>
wrote:

>  Hi Andrew,
>
> Thank you very much for your help!
> That is what I am looking for.
> I will use this way for my codes.
> Thank you!
>
> best,
> Jian Cheng
>
>
> On 06/23/2014 02:02 AM, Andrew Maclean wrote:
>
>  Hi Jan,
>  I may not be reading the question correctly but you can map the colours
> from the vtkLookupTable as follows in the attached code.
> Essentially you use an unsigned char array and calculate the colour for
> each cell by interpolating using the vtkLookupTable, then you set the array
> as a scalar in your polydata. VTK will then treat it as the cell colour.
> This will allow you to save the colours of your cells.
>
>  Attached is a zip file with the code based on your code and a
> CMakeLists.txt file.
>
>  Regards
>    Andrew
>
>
>
>> ---------- Forwarded message ----------
>> From: Bill Lorensen <bill.lorensen at gmail.com>
>> To: Jian Cheng <jian.cheng.1983 at gmail.com>
>> Cc: VTK Users <vtkusers at vtk.org>
>> Date: Fri, 20 Jun 2014 14:45:29 -0400
>> Subject: Re: [vtkusers] write vtkPolyData with colors from
>> vtkPolyDataMapper
>> 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
>>
>>
>> _______________________________________________
>> vtkusers mailing list
>> vtkusers at vtk.org
>> http://public.kitware.com/mailman/listinfo/vtkusers
>>
>>
>
>
>  --
> ___________________________________________
> Andrew J. P. Maclean
>
> ___________________________________________
>
>
> _______________________________________________
> 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
>
>
>


-- 
___________________________________________
Andrew J. P. Maclean

___________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20140626/105f851a/attachment.html>


More information about the vtkusers mailing list