[vtkusers] vtkDataSetSurfaceFilter - Cell Picking

Bhanu Hariharan bhanu at petrotel.com
Wed Mar 6 12:41:55 EST 2013


David,

I am using vtk 5.2 - is it possible that this function was not defined in
that version.

I get the error that SetOriginalCellIdsName is not a member of
vtkDataSetSurfaceFilter   :(

Bhanu


On Wed, Mar 6, 2013 at 10:36 AM, David E DeMarle
<dave.demarle at kitware.com>wrote:

> Give DSF a name for the array.
> SetOriginalCellIdsName("idsintoDSForsomething")
> Then retrieve it from the output like
> DSF->GetOutput()->GetCellData()->GetArray("idsintoDSForsomething")
>
>
> David E DeMarle
> Kitware, Inc.
> R&D Engineer
> 21 Corporate Drive
> Clifton Park, NY 12065-8662
> Phone: 518-881-4909
>
>
> On Wed, Mar 6, 2013 at 11:29 AM, Bhanu Hariharan <bhanu at petrotel.com>wrote:
>
>>
>> David,
>>
>> I had turned on PassThroughCell. But I do not know how to access the new
>> Ids array after the fact.
>> VTK Doc says something about a 'OrginalCellIds' but I am not sure how to
>> access this.
>> So I extracted the output of DSF to a vtkPolyData but still cant figure
>> out how to get to that new Ids array.
>> Any help with that is really appreciated.
>>
>> I will try your other suggestion in the meantime.
>>
>> Thanks,
>> Bhanu
>>
>>
>> On Wed, Mar 6, 2013 at 9:25 AM, David E DeMarle <dave.demarle at kitware.com
>> > wrote:
>>
>>> Sorry for the confusion, it has been a long time since I added that code
>>> the DataSetSurfaceFilter. Turning PassThroughCell/PointIds in fact
>>> generates a new Ids array, which you can retrieve after the fact to do the
>>> lookups into the data that is input to the DSF and extract particular
>>> cells/points by their offset (n'th cell in the cell array, n'th point in
>>> the point array)
>>>
>>> However I still recommend making your own ids array and using that
>>> instead of PassThrough. vtkIdFilter will generate them for you. The array
>>> marked as the active global ids array is treated specially by most filters
>>> in that they try to preserve it across operations (including threshold and
>>> DSF). We added this to VTK a few years ago specifically for this case of
>>> finding out where particular result values come from (and in particular for
>>> surface selection). So the Threshold and surface filter will push globalIDS
>>> forward just fine. Once you get a result, grab the active globaIDs array,
>>> look for the values in it, and look them up in the original data. The
>>> extract selections filter will do the job of looking them up in the
>>> original data and pulling them out as a new dataset.
>>>
>>>
>>> David E DeMarle
>>> Kitware, Inc.
>>> R&D Engineer
>>> 21 Corporate Drive
>>> Clifton Park, NY 12065-8662
>>> Phone: 518-881-4909
>>>
>>>
>>> On Wed, Mar 6, 2013 at 10:02 AM, Bhanu Hariharan <bhanu at petrotel.com>wrote:
>>>
>>>> David,
>>>> Thanks for replying. However I have a doubt.
>>>> Are you suggesting the VTKUnstructuredgrid should have an globalids
>>>> array? Is that what the member is called - globalIds? I actually pass
>>>> VTKUnstructuredgrid  to a VTKThreshold filter and then pass that filter to
>>>> VTKdatasetsurfacefilter.
>>>>
>>>> Perhaps you can post a couple lines of code. That would be very helpful.
>>>> Thanks,
>>>> Bhanu
>>>>
>>>>
>>>>
>>>> On Tue, Mar 5, 2013 at 6:55 PM, David E DeMarle <
>>>> dave.demarle at kitware.com> wrote:
>>>>
>>>>> The input data should have a globalids array containing a unique value
>>>>> for each cell. If it does, extract will preserve it. After the extraction,
>>>>> use that array in the polydata to do the look up to the original cell in
>>>>> the unstructured grid.
>>>>> On Mar 5, 2013 6:00 PM, "Bhanu Hariharan" <bhanu at petrotel.com> wrote:
>>>>>
>>>>>> Hi All,
>>>>>>
>>>>>> I need some help doing the following. Please could one of you guide
>>>>>> me on how.
>>>>>>
>>>>>> I use a vtkDataSetSurfaceFilter on VTKUnstructuredGrid to render skin
>>>>>> of that grid. That works fine and I can see the number of surfaces shown by
>>>>>> grabbing the
>>>>>> dataSetSurfaceFilter->GetOutput()->GetNumberOfCells().
>>>>>>
>>>>>>
>>>>>> I need a way to map the surface back to the original cell id. That is
>>>>>> if I have 2 cells and I render just skin, number of surfaces rendered are
>>>>>> 10. I need to be able to pick on any of these 10 surfaces and map them back
>>>>>> to either of the the 2 grid cells.
>>>>>>
>>>>>>
>>>>>> http://www.vtk.org/doc says :
>>>>>>
>>>>>> If PassThroughCellIdsOn is 1, then the output polygonal dataset will
>>>>>> have a celldata array that holds the cell index of the original 3D cell
>>>>>> that produced each output cell. This is useful for cell picking.
>>>>>> I turned the PassThroughCellIds On and I have UseStrips turned off.
>>>>>>
>>>>>> Then I did
>>>>>> vtkPolyData *surfacePolyData = dataSetSurfaceFilter->GetOutput();
>>>>>>
>>>>>> But I do not see how I can access that celldata array that holds the
>>>>>> original 3D cells for the surfaces.
>>>>>>
>>>>>> Please can anyone advise on how.
>>>>>>
>>>>>> Thanks in advance.
>>>>>> Bhanu
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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
>>>>>>
>>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130306/0bfce3e5/attachment.htm>


More information about the vtkusers mailing list