[vtkusers] Help with VtkDatasetsurface filter

Alex Malyushytskyy alexmalvtk at gmail.com
Tue Apr 2 19:14:01 EDT 2013


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
>> >
>
>



More information about the vtkusers mailing list