[vtkusers] Adding chars to 3D char array in python or how to add colors to array?

David Gobbi david.gobbi at gmail.com
Mon Dec 21 10:03:11 EST 2009


Yeah, I've seen those methods in vtkMapper but I've never used them.
They're nice because they allow a person to attach colors to their
data that are independent of the scalars.  From the documentation, it
looks like they are used as follows:

mapper->SetScalarModeToUsePointFieldData();
mapper->SelectColorArray("Colors");

This is probably not something that a beginner would find without
seeing an example first.  But, yeah,
vtkScalarsToColors/vtkLookupTable, vtkMapper,
vtkFieldData/vtkDataSetAttributes are all worthwhile classes to study.
 And definitely the cross-interaction between LookupTable and Mapper
is a mess.

   David


On Mon, Dec 21, 2009 at 7:37 AM, Berk Geveci <berk.geveci at kitware.com> wrote:
> I also want to add that you can color by any array not just scalars.
> The mapper and the lookup table have API to enable this. If you want
> to focus on cleaning this API, I'd suggest taking a look at the lookup
> table and the mapper. The way you select which array to color by is
> quite messy.
>
> -berk
>
> On Mon, Dec 21, 2009 at 9:06 AM, David Gobbi <david.gobbi at gmail.com> wrote:
>> On Mon, Dec 21, 2009 at 6:30 AM, David Doria <daviddoria+vtk at gmail.com> wrote:
>>> On Mon, Dec 21, 2009 at 2:42 AM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>> Hi Lynx,
>>>>
>>>> Use SetTuple3(), the doubles are converted to the array type before
>>>> they are stored.
>>>>
>>>> colors = vtk.vtkUnsignedCharArray()
>>>> colors.SetNumberOfComponents (3)
>>>> colors.InsertNextTuple3(255, 255, 255)
>>>> colors.InsertNextTuple3(0, 255, 127)
>>>>
>>>> Also a note about this example: it's best to use SetScalars() to add
>>>> colors to the data, so that you don't have to do anything special in
>>>> order to display them.  That example is misleading, the array name
>>>> "Colors" doesn't have any special meaning in VTK.
>>>>
>>>> smoothed_polys.GetPointData().SetScalars(colors)
>>>>
>>>> Hope this helps.
>>>>
>>>>   David
>>>
>>> David G,
>>>
>>> I always wondered we can't add a vtkPolyData::SetColors (which could
>>> simply call SetScalars). It seems much less confusing than having to
>>> tell people, "rather than create an array called colors, you have to
>>> use SetScalars". In fact,
>>> polydata->SetPointColors(colors)
>>> rather than
>>> polydata->GetPointData()->SetColors(colors)
>>>
>>> would also prevent having to include of vtkPointData.h
>>>
>>> What do you think about both of these things?
>>>
>>> Lynx - when you get it working, don't forget to add it to the examples
>>> :) As you're seeing, I don't believe there is much documentation for
>>> the python API so these examples will help serve as that documentation
>>> (so comment well!)
>>>
>>> Thanks,
>>>
>>> David
>>
>> Oh, you're probably asking the wrong person.  I'm always against
>> adding new methods that just do the same thing as existing methods.
>> Let's look at the two changes that you are suggesting:
>>
>> 1) Adding a SetColors() method that just calls SetScalars():
>>
>> This is bad because someone (a new user, for example) might have
>> already set Scalars for their data, because they need them for some
>> filter that uses scalars.  Then they call SetColors().  All of a
>> sudden, the scalars are gone, they've been replaced by the colors.
>> That is unexpected and bad.  Having two method names that set the same
>> data is almost always a bad idea.
>>
>> 2) polydata->SetPointColors(colors):
>>
>> This is bad because if you do this, then it would also make sense to
>> add polydata->SetCellColors(), polydata->SetPointNormals(normals),
>> polydata->SetCellNormals(), etc., etc.  There is no end to it.  You
>> could say that you would only add SetPointColors() because setting
>> colors is the only one of those things that is a common operation.
>> But you would be wrong.  The things that you use VTK for might be
>> quite different from other people. For example I use Normals and
>> Scalars all the time but I very rarely use RGB colors with my
>> polydata.  I actually think that the way Cell/Point data is handled in
>> VTK is an example of very good software design.
>>
>>   David
>> _______________________________________________
>> 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://www.vtk.org/mailman/listinfo/vtkusers
>>
>



More information about the vtkusers mailing list