[vtk-developers] [vtkusers] Help with VtkDatasetsurface filter

Bhanu Hariharan bhanu at petrotel.com
Thu Apr 4 10:23:13 EDT 2013


Alex,

You may be right. Maybe for a transparent image, vtkDataSetSurfaceFilter is
indeed not eliminating internal surfaces?

But I do agree with Cory on the fact that vtkDataSetMapper and
vtkDataSetSurfaceFilter  are behaving identical !!
Thats why I do not see any performance or image difference in either case -
opaque or transparent.

Still find it all unclear!

Thanks,
Bhanu


On Wed, Apr 3, 2013 at 8:59 PM, Alex Malyushytskyy <alexmalvtk at gmail.com>wrote:

> As far as I understand if all internal surfaces were eliminated (for
> example by vtkDataSetSurfaceFilter ) you would see only blue,
> but I do not think vtkDataSetSurfaceFilterdoes it.
>
> Below is only my assumption, since I did not look in the
> vtkDataSetSurfaceFilter internals and documentation does not answer the
> question, but I would expect that filter only combines small primitives
> which are in the same geometrical plane and are connected into large and
> eliminates duplicates when it works on the unstructured grid .
>
> It the array you colored original database is transferred you will see the
> same colors as with original database.
>
> Regards,
>       Alex
>
>
> On Wed, Apr 3, 2013 at 7:42 AM, Bhanu Hariharan <bhanu at petrotel.com>wrote:
>
>> Thanks Alex.
>>
>> However the resulting picture (full sized model) is the same. I expected
>> different picture but it is not.
>>
>> I made outer cells all blue and in between cells all red. A transparent
>> image of this grid when all cells are rendered is purple (which is expected
>> blend of red and blue).
>>
>> But it remains the same image when I render just surface - I expect to
>> see only BLUE?
>> Is this a VTK bug perhaps??
>>
>> Thanks again.
>> Bhanu
>>
>>
>>
>> On Tue, Apr 2, 2013 at 6:14 PM, Alex Malyushytskyy <alexmalvtk at gmail.com>wrote:
>>
>>> I was not suggesting to use VTKActor, cause it means that your
>>> performance at least for large number of nodes
>>> will decrease. I only said it would make a difference ( possibly from
>>> very slow to slow or the same you currently have).
>>>
>>> As for opacity, I would expect picture be different, but I would not
>>> expect human eye to see the difference.
>>> Keep in mind that as far as I understand curse model only used during
>>> transition or rotation, resulted picture shown is full sized model,
>>>
>>> Regards,
>>>    Alex
>>>
>>>
>>> On Tue, Apr 2, 2013 at 3:14 PM, Bhanu Hariharan <bhanu at petrotel.com>
>>> wrote:
>>> > Alex,
>>> > I will try your suggestions - using VTKActor to see difference and
>>> different
>>> > frame rates.
>>> >
>>> > I have one more question that's not related to rendering performance.
>>> It
>>> > concerns opacity.
>>> >
>>> > I was alteast expecting to see different images when I specify opacity
>>> < 1
>>> > for the grid.
>>> >
>>> > Shouldn't a transparent image look different when I render all cells
>>> (all
>>> > layers) than when I render just surface cells?
>>> >
>>> >
>>> > Thanks again,
>>> > Bhanu
>>> >
>>> >
>>> >
>>> >
>>> > On Tue, Apr 2, 2013 at 4:49 PM, Alex Malyushytskyy <
>>> alexmalvtk at gmail.com>
>>> > wrote:
>>> >>
>>> >> LOD (level of details)  technique consists of run time assessment of
>>> >> performance and building a special model which will be used in certain
>>> >> circumstances and on the one hand would look as close as possible to
>>> >> the original, but on another hand allows achieve desired or better
>>> >> performance.
>>> >> That what LOD actor does, crude models will be silently created and
>>> >> displayed during rotation or when actor is moved.
>>> >>
>>> >> Now assume there are 2 model - lets say 1st is your unstructured grid,
>>> >> another is result of dataSetSurfaceFilter.
>>> >> Since both are using LOD actors, the following might happen:
>>> >>
>>> >> 1st model is found to be too big to be displayed and as a result crude
>>> >> model with N1 number of nodes is created and displayed
>>> >> 2nd model is found to be too big to be displayed and as a result crude
>>> >> model with N2 number of nodes is created and displayed
>>> >> or it is small enough , so it is displayed as is (but lets say still
>>> >> have N2 nodes)
>>> >>
>>> >> Now N1 might be mostly the same as N2.
>>> >> And you see no difference in performance during transition or
>>> rotation.
>>> >> Basically this means that LOD actor does his job well enough.
>>> >> I bet if you were using regular actors you would see a huge
>>> >> performance increase.
>>> >>
>>> >> If you need further performance you may just specify different frame
>>> rate.
>>> >> From http://www.vtk.org/doc/release/4.0/html/classvtkLODActor.html:
>>> >>
>>> >> "To control the frame rate, you typically set the
>>> >> vtkRenderWindowInteractor DesiredUpdateRate and StillUpdateRate. This
>>> >> then will cause vtkLODActor to adjust its LOD to fulfill the requested
>>> >> update rate.
>>> >> For greater control on levels of detail, see also vtkLODProp3D. That
>>> >> class allows arbitrary definition of each LOD.
>>> >> "
>>> >>
>>> >> Hope this helps,
>>> >>
>>> >> Alex
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> On Tue, Apr 2, 2013 at 2:18 PM, Bhanu Hariharan <bhanu at petrotel.com>
>>> >> wrote:
>>> >> > 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
>>> >> >
>>> >
>>> >
>>> _______________________________________________
>>> 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://public.kitware.com/pipermail/vtk-developers/attachments/20130404/8ef3a87b/attachment.html>


More information about the vtk-developers mailing list