[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