[vtkusers] vtkPolyDataConnectivityFilter Help
Sylvain Jaume
sylvain.jaume at kitware.com
Sat Nov 26 00:01:30 EST 2005
Hi Mike,
Please replace:
clipInsideOut->SetInput(connections->GetOutput() );
with:
clipInsideOut->SetInput(clip->GetOutput() );
Let me know if it works for you.
Cheers,
Sylvain
Sylvain Jaume wrote:
> Hi Mike,
>
> I think this code will solve your problem:
>
> unsigned int numRegions = connections->GetNumberOfExtractedRegions();
>
> vtkClipPolyData *clip = vtkClipPolyData::New();
> clip->SetInput(connections->GetOutput() );
>
> vtkClipPolyData *clipInsideOut = vtkClipPolyData::New();
> clipInsideOut->SetInput(connections->GetOutput() );
> clipInsideOut->InsideOutOn();
>
> for (unsigned int i = 0; i < numRegions; ++i)
> {
> std::cout << "----------- Region Number " << i << " ----------"
> << std::endl;
>
> clip->SetValue( (float) i - 0.5 );
> clipInsideOut->SetValue( (float) i + 0.5 );
> clipInsideOut->Update();
>
> clipInsideOut->GetOutput()->PrintSelf(std::cout, 1);
> }
>
> Cheers,
> Sylvain
>
> Mike Jackson wrote:
>
>>
>> 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