[vtk-developers] Adding ComputeArea() to vtkTriangle

Berk Geveci berk.geveci at kitware.com
Tue Dec 22 12:12:29 EST 2009


I don't think that this is a good idea. Users will expect a method
that computes "size" in vtkCell to do it "right". However, unless you
are subdividing adaptively, simple subdivision is likely to be very
inaccurate for higher order cells. Having a default implementation
that may be inaccurate for bunch of subclasses is a bad ideas unless
you have the time and resources to go to all subclasses and override
the default implementation.

We started with a very simple request: add ComputeArea() to
vtkTriangle. Now, we are talking about going down a path that is long
and somewhat researchy - without resources to go all the way. Unless
David is willing to spend some significant amount of time figuring out
how to compute the volume of higher order elements accurately, I'd
suggest going back to the original ComputeArea() and skipping the
ComputeSize() idea.

-berk

On Tue, Dec 22, 2009 at 10:03 AM, Moreland, Kenneth <kmorel at sandia.gov> wrote:
> Why not have a default implementation that breaks the cell into simplicia
> (line segments, triangles, or tetrahedra)?  That’s what vtkCellIntegrator
> (attached) does.
>
> -Ken
>
>
> On 12/22/09 7:53 AM, "David Doria" <daviddoria+vtk at gmail.com> wrote:
>
>
> On Mon, Dec 21, 2009 at 10:53 AM, Moreland, Kenneth <kmorel at sandia.gov>
> wrote:
>
> Yes, but the vtkCell classes (of which vtkTriangle is one) is not really
> like the vtkDataObject objects.  These classes are designed to hold methods
> for common computations.  For example, they already hold methods for
> computing interpolation, derivatives, contours, and intersections.  In this
> regard, a method to compute the length/area/volume of the cell is wholly
> appropriate.
>
> My only criticism (everyone has to have an opinion, right?) is that it would
> be helpful if there was a pure virtual method in vtkCell, perhaps called
> ComputeSize, that returned the length, area, or volume (depending on the
> dimensionality of the cell).  That way you would not have to down cast the
> vtkCell to some known subclass and hope the implementation is there.
>
> Now that I write this, it occurs to me that somewhere there is a
> vtkCellIntegrator in ParaView that does something similar.  Perhaps the
> implementation of that could be duplicated in vtkCell.
>
> -Ken
>
>
>
> On 12/18/09 12:15 PM, "Berk Geveci" <berk.geveci at kitware.com
> <http://berk.geveci@kitware.com> > wrote:
>
> I think Mathieu brings up an important point. I don't think this has
> any direct impact on the issue here but it is still a good one. VTK
> usually separates computation from the data structures. There is a
> good reason behind this. For example, when you are computing the
> volume of a polyhedron or performing some other numerical integration
> over it, there may be more than one way to do it numerically. Some
> more accurate but more costly, others less accurate but faster. This
> is why you don't find a lot of computational geometry related methods
> on vtkPolyData.
>
> On Fri, Dec 18, 2009 at 11:09 AM, Mathieu Malaterre
> <mathieu.malaterre at gmail.com <http://mathieu.malaterre@gmail.com> > wrote:
>> Ok, my bad. I thought this was introducing a new framework to compute
>> 2D area which seem difficult to extend to 3d cell.
>>
>> thanks for clarification.
>>
>> On Fri, Dec 18, 2009 at 5:05 PM, Bill Lorensen <bill.lorensen at gmail.com
>> <http://bill.lorensen@gmail.com> > wrote:
>>> Mathieu,
>>>
>>> vtkTriangle is a cell. It is not filter. It currently has a
>>> TriangleArea() method, but it is cumbersome to use. David is proposing
>>> a convenience method to do the computation. It calls the
>>> TriangleArea() method but save the user from setting up the parameters
>>> for that call.
>>>
>>> Bill
>>>
>>> On Fri, Dec 18, 2009 at 10:54 AM, David Doria <daviddoria+vtk at gmail.com
>>> <http://daviddoria+vtk@gmail.com> > wrote:
>>>> On Fri, Dec 18, 2009 at 10:51 AM, Mathieu Malaterre
>>>> <mathieu.malaterre at gmail.com <http://mathieu.malaterre@gmail.com> >
>>>> wrote:
>>>>>
>>>>> Hi David,
>>>>>
>>>>>  I do not have a strong opinion on this particular case.
>>>>>  However here is a couple of thoughts, I have from my modest
>>>>> understanding of VTK.
>>>>>  1. I would really separate source/sink from filter. You are writing a
>>>>> partial filter (aka algorithm) in a data object.
>>>>>  2. You are duplicating (possibly) code from vtkMeshQuality.
>>>>>
>>>>> 2cts
>>>>> -Mathieu
>>>>
>>>> 1) I'm not sure I follow. Isn't vtkTriangle an "object", not a "source"
>>>> or
>>>> "filter"?
>>>> 2) That is likely the case and that is exactly my point here -
>>>> vtkMeshQuality (or anything else) should not have to implement this
>>>> code, it
>>>> should just be able to call ComputeArea() on a triangle object.
>>>> Thanks,
>>>>
>>>> David
>>>> _______________________________________________
>>>> Powered by www.kitware.com <http://www.kitware.com>
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> Powered by www.kitware.com <http://www.kitware.com>
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>>
>>>
>>
>>
>>
>> --
>> Mathieu
>> _______________________________________________
>> Powered by www.kitware.com <http://www.kitware.com>
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>
>>
> _______________________________________________
> Powered by www.kitware.com <http://www.kitware.com>
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
>
>
>
>
> Per Ken's suggestion, I am trying to implement a virtual double
> ComputeSize() function for vtkCell.  There are a lot of cells! Many of which
> I have no idea how to get their size. Is it acceptable to somehow commit
> these changes without having all of them implemented? Something like a
> filler "return 0" and a comment "this function has not yet been
> implemented"?
>
> The idea would be that then the framework is setup, so when a developer who
> is familiar with the particular cell subclass sees the missing
> implementation, they could easily fill it in.
>
> Thoughts?
>
> Thanks,
>
> David
>
>
>
>    ****      Kenneth Moreland
>     ***      Sandia National Laboratories
> ***********
> *** *** ***  email: kmorel at sandia.gov
> **  ***  **  phone: (505) 844-8919
>     ***      web:   http://www.cs.unm.edu/~kmorel
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
>



More information about the vtk-developers mailing list