[vtkusers] Extracting "feature surfaces" in VTK

David Gobbi david.gobbi at gmail.com
Mon Oct 20 18:11:22 EDT 2014


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/a5bf9c99/attachment.html>


More information about the vtkusers mailing list