[vtkusers] Extracting "feature surfaces" in VTK

Evan Kao tossin at gmail.com
Mon Oct 20 18:43:22 EDT 2014

Thanks a lot, I believe that worked.

- Evan

On Mon, Oct 20, 2014 at 3:11 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> Hi Evan,
> I think that you can make vtkPolyDataConnectivityFilter generate the
> RegionId array by calling ColorRegionsOn().  After that, the threshold
> filter should be able to separate the regions.
>  - David
> On Mon, Oct 20, 2014 at 12:32 PM, Evan Kao <tossin at gmail.com> wrote:
>> Hey vtk-users,
>> Sorry if the above is a bit long-winded.  It pretty much boils down to a
>> couple questions:
>> 1. How do I extract each individual surface created by
>> vtkPolyDataConnectivityFilter?
>> 2. How are the edges created by vtkPolyDataNormals stored in the poly
>> data object?
>> Thanks,
>> Evan Kao
>> On Fri, Oct 10, 2014 at 3:56 PM, Evan Kao <tossin at gmail.com> wrote:
>>> Hello all,
>>> I'm trying to extract feature surfaces (e.g. inlets, outlets, etc.) in
>>> VTK as briefly described in this fairly old mailing list exchange
>>> <http://public.kitware.com/pipermail/vtkusers/2000-December/005137.html>,
>>> but since I'm inexperienced with VTK, I need a little more detail.
>>> I've tried the corresponding filters in Paraview, which was pretty
>>> straightforward, but I'd like to be able to do it in VTK, which seems a lot
>>> less straightforward.  The sequence of filters in Paraview that I used is
>>> (starting from an unstructured grid volume) :
>>> 1. Extract Surface
>>> 2. Generate Surface Normals
>>> 3. Connectivity
>>> 4. Threshold (for each surface)
>>> I believe the corresponding filters in VTK are:
>>> 1. vtkGeometryFilter
>>> 2. vtkPolyDataNormals
>>> 3. vtkPolyDataConnectivityFilter (or vtkConnectivityFilter)
>>> 4. vtkThreshold
>>> I'm currently having trouble with the connectivity filters.  In
>>> Paraview, the connectivity filter conveniently adds a "RegionId" array to
>>> the data, which can then be used to separate the surfaces using the
>>> Threshold filter, but this doesn't seem to be the case in VTK.  If I print
>>> the output of the connectivity filter, there are no new arrays.  I believe
>>> the filter is working though since GetNumberOfExtractedRegions() gives 3 (1
>>> inlet, 1 outlet, 1 wall).  This brings me to a few questions:
>>>    1. Is there a way to access each individual region?  And if so, is
>>>    vtkThreshold even necessary?
>>>    2. Is there a way to get the "RegionId" array in VTK and add it to
>>>    the data?
>>> I also had a question about how the connectivity filter works.  The
>>> Feature Angle option in Generate Surface Normals dictates which edges of
>>> the object that are rendered and seems to change the calculated point
>>> normals, but not the cell normals.  Are these edges actually stored
>>> anywhere or are they just implicit in the calculated point normals?  And
>>> the description for the connectivity filter suggests that it simply looks
>>> for shared points between cells, which doesn't seem like it would be
>>> affected by calculating point normals.  So what does it use as criteria for
>>> separating surfaces when performed after Generate Surface
>>> Normals/vtkPolyDataNormals?
>>> Thanks,
>>> Evan Kao
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20141020/f6a8f687/attachment.html>

More information about the vtkusers mailing list