[vtkusers] vtkPolyDataConnectivityFilter Help
Mike Jackson
maillist at bluequartz.net
Fri Nov 25 16:52:08 EST 2005
On Nov 23, 2005, at 6:51 PM, Sylvain Jaume wrote:
> Hi Mike,
>
> You may want to do:
>
> vtkPolyDataConnectivityFilter *connections =
> vtkPolyDataConnectivityFilter::New();
> connections->SetInput(data);
> connections->SetExtractionModeToAllRegions();
> connections->ColorRegionsOn();
> connections->Update();
>
> unsigned int numRegions = connections->GetNumberOfExtractedRegions();
> vtkClipPolyData *clip = vtkClipPolyData::New();
> clip->SetInput(connections->GetOutput() );
>
> for (unsigned int i = 0; i < numRegions; ++i)
> {
> std::cout << "----------- Region Number " << i << "
> ----------" << std::endl;
> clip->SetValue( (float) i );
> clip->Update();
> clip->GetOutput()->PrintSelf(std::cout, 1);
> }
>
> You don't need clip->GenerateClipScalarsOff();
>
> Cheers,
> Sylvain
>
> Mike Jackson wrote:
>
>>
>> On Nov 23, 2005, at 5:18 PM, Sylvain Jaume wrote:
>>
>>>
>>> You could set ColorRegionsOn in vtkPolyDataConnectivityFilter.
>>> Then use vtkClipPolyData with SetValue set to the region id (i
>>> in your code).
>>>
>>> Cheers,
>>> Sylvain
>>
>>
>> I gave that a try, looking extensively at the docs and this is
>> what I have.
>> //Assume data is of type vtkPolyData which has been through a
>> smoothing
>> // and a Decimation, just prior to this.
>> vtkPolyDataConnectivityFilter *connections =
>> vtkPolyDataConnectivityFilter::New();
>> connections->SetInput(data);
>> connections->SetExtractionModeToAllRegions();
>> connections->Update();
>>
>> /// Loop on each Region
>> unsigned int numRegions = connections-
>> >GetNumberOfExtractedRegions();
>> vtkClipPolyData *clip = vtkClipPolyData::New();
>> vtkImplicitBoolean *func = vtkImplicitBoolean::New();
>> clip->SetInput(connections->GetOutput() );
>> clip->SetClipFunction(func);
>> clip->GenerateClipScalarsOff();
>>
>> for (unsigned int i = 0; i < numRegions; ++i)
>> {
>> std::cout << "----------- Region Number " << i << "
>> ----------" << std::endl;
>> clip->SetValue( (float) i );
>> clip->Update();
>> clip->GetOutput()->PrintSelf(std::cout, 1);
>> }
>>
>> When the prints go by the number of polys, vertices, cells... are
>> all Zero. Any idea what I am doing wrong?
>>
>> I think I am getting confused about the implicit function and
>> whether or not to have GenerateClipScalarsOff or
>> GenerateClipScalarsOn.
>> ---
>> Mike Jackson
>> mike _at_ bluequartz dot net
>>
>>
I have been working on this problem some more today but am still
coming up short.
This is the code that I have now:
unsigned int numRegions = connections->GetNumberOfExtractedRegions();
vtkClipPolyData *clip = vtkClipPolyData::New();
clip->SetInput(connections->GetOutput() );
clip->InsideOutOn();
for (unsigned int i = 0; i < 5; ++i)
{
std::cout << "----------- Region Number " << i << "
----------" << std::endl;
clip->SetValue( (float) i );
clip->Update();
clip->GetOutput()->PrintSelf(std::cout, 1);
}
But what happens is the number of polygons just keeps growing with
each iteration, eventually on the last iteration, the number of
polygons in the clip are the same as the number of original polygons.
So I think I am just missing something, could someone please fill me in?
More information about the vtkusers
mailing list