[vtkusers] Fwd: Help with VtkDatasetsurface filter

Bhanu Hariharan bhanu at petrotel.com
Tue Apr 2 17:18:23 EDT 2013


Alex,

To be specific in one of my cases,  No. of surfaces rendered were reduced
from 6163542 to 373626 assuming grid has hexahedrons each with 6 surfaces.
I got the number 373626 by doing

dataSetSurfaceFilter->GetOutput()->GetNumberOfCells()

Thats a significant reduction of number of surfaces. These are rendered
using VTKLODActor.

Can you please explain what you mean by "actually shown primitives during
rotation". What are the shown primitives?

I am just adding the output of the dataSetSurfaceFilter to a
vtkDataSetMapper and then to a vtkLODActor.

All I know if no. of surfaces are reduced. Do I need to do/check something
else?

If you need something specific to answer more specifically, I can provide
the details. It would be a great help.

Thanks,
Bhanu

---------- Forwarded message ----------
From: Alex Malyushytskyy <alexmalvtk at gmail.com>
Date: Tue, Apr 2, 2013 at 4:03 PM
Subject: Re: [vtkusers] Help with VtkDatasetsurface filter
To: "vtkusers at vtk.org" <vtkusers at vtk.org>


You may get only general advice asking general questions.
Compare  the number of nodes/cells you are you are getting from
vtkDataSetSurfaceFilter with
such in the unstructured grid,
Even though it may be significantly decreased in some cases, for
example if LOD actors are used,  they may decrease actually shown
primitives during rotation approximately to the same number and you
will not see any difference in the performance.

Regards,
    Alex


On Tue, Apr 2, 2013 at 8:27 AM, Bhanu Hariharan <bhanu at petrotel.com> wrote:
> Hi All,
> I was wondering if anyone would be kind enough to answer the following
query
> for me.
>
> I had posted this a while back and still havent found the reason why
> vtkDataSetSurfaceFilter hasn't made rendering any faster. The interaction
> and rendering time to rotate zoom etc seem to be just the same as though I
> rendered all cells in the unstructured grid.
> The reason I chose to introduce rendering just surface cells in the first
> place was to make rendering faster. But I am surprised it doesnt make any
> difference at all :(.
> Any words or ideas?
>
> Thanks so much
> Bhanu
>
>
>
> On Mon, Mar 11, 2013 at 4:30 PM, Bhanu Hariharan <bhanu at petrotel.com>
wrote:
>>
>> One related question though. I started using Surface Filter really only
>> for performance reasons.
>>
>> I was thinking if I rendered just surface cells, the rendering and
>> rotation etc would be must faster.
>> However I do not find it any different than when I render all cells. What
>> am I missing?
>> Any reasons anyone can think of, please let me know.
>>
>>
>>
>> Thanks,
>> Bhanu
>>
>>
>>
>> On Mon, Mar 11, 2013 at 4:12 PM, Bhanu Hariharan <bhanu at petrotel.com>
>> wrote:
>>>
>>> David,
>>> As you suggested, I got it to work using SetGlobalIds and then
retrieving
>>> that using GetGlobalIds. Many thanks for your patience and help.
>>>
>>>
>>> -Bhanu
>>>
>>>
>>> On Wed, Mar 6, 2013 at 11:41 AM, Bhanu Hariharan <bhanu at petrotel.com>
>>> wrote:
>>>>
>>>> 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
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>
> _______________________________________________
> 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
>
_______________________________________________
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/20130402/a3d920dc/attachment.htm>


More information about the vtkusers mailing list