[vtkusers] Connected Components

prabhat246 prabhat246 at yahoo.com
Tue Nov 25 03:57:53 EST 2008


Hi Mike,
But there seems to be some problem. I am not getting the accurate
triangulation that it should be.
I cant see smooth surface, rather it is displaying uniform patches. I am
attaching a screenshot. http://www.nabble.com/file/p20677309/surface.JPG
surface.JPG 

Can you suggest what might be wrong?

Thanks
Regards,
Prabhat


prabhat246 wrote:
> 
> Hi Mike,
> Thanks a million.... It worked. :)
> 
> Regards,
> Prabhat
> 
> Mike Jackson-19 wrote:
>> 
>> First off you need a matching con->Delete() for the  
>> vtkPolyDataConnectivityFilter * con =  
>> vtkPolyDataConnectivityFilter::New(); function otherwise you are  
>> leaking that filter object.
>> 
>> Next, I bet this takes a really long time to run because for 10,000  
>> components, you have to run the same filter 10,000 times. How about  
>> this filter instead:
>> 
>> //Find all the discrete components
>> vtkSmartPointer<DiscreteParticleFilter> connectivity =  
>> vtkSmartPointer<DiscreteParticleFilter>::New();
>> connectivity->SetInput( mc->GetOutput() );
>> connectivity->Update(); //Force the pipeline to execute ...
>> vtkPolyData* currentComponent = NULL;
>> vtkPolyDataCollection* components = connectivity->GetPolyRegions();
>> components->InitTraversal(); //Init the enumeration
>> int count = components->GetNumberOfItems();
>> 
>> //Iterate over each PolyLoop and decide how to triangulate it
>> for (int i = 0; i < count; ++i) {
>>    currentComponent = components->GetNextItem();
>>    // Add Mapper and Actor code from below
>> 	vtkPolyDataMapper *polymap;
>> 	vtkActor * polyact;
>> 	
>> 	//std::cout<<connect->GetOutput()->GetNumberOfCells()<<std::endl;
>> 		
>> 	polymap = vtkPolyDataMapper::New();
>> 	polymap->SetInput(currentComponent);
>> 	polyact = vtkActor::New();
>> 	polyact->SetMapper(polymap);
>> 	renderer->AddActor(polyact);
>> 	
>> 	vtkBoxWidget *boxWidget = vtkBoxWidget::New();
>> 	boxWidget->SetInteractor(iren);
>> 	boxWidget->SetPlaceFactor(1);
>> 	boxWidget->SetProp3D(polyact);
>> 	boxWidget->PlaceWidget();
>> 	boxWidget->SetOutlineFaceWires(1);
>> 	boxWidget->SetScalingEnabled(0);
>> 	boxWidget->SetRotationEnabled(1);
>> 	boxWidget->OutlineFaceWiresOff();
>> 	boxWidget->OutlineCursorWiresOff();
>> 	boxWidget->HandlesOff();
>> 	boxWidget->On();
>> 
>> 	vtkMyCallback *callback = vtkMyCallback::New();
>> 	boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);
>> }
>> 
>> I am attaching the source files.
>> 
>> _________________________________________________________
>> Mike Jackson                  mike.jackson at bluequartz.net
>> BlueQuartz Software                    www.bluequartz.net
>> Principal Software Engineer                  Dayton, Ohio
>> 
>> 
>>  
>>  
>> 
>> 
>> On Nov 24, 2008, at 9:13 AM, prabhat246 wrote:
>> 
>>>
>>> Hi,
>>>
>>> I have a object containing large no. of multiple connected  
>>> components(say
>>> 10,000). I want to be able to transform each component seperately.   
>>> I am
>>> doing it in following way.
>>>
>>> for(int i = 0; i< NoOfRegions; i++)
>>> 	{
>>> 	vtkPolyDataConnectivityFilter * con =  
>>> vtkPolyDataConnectivityFilter::New();
>>> 	con->SetInput(mc->GetOutput());
>>> 	con->SetExtractionModeToSpecifiedRegions();
>>> 	con->AddSpecifiedRegion(i);
>>> 	connect->Update();
>>>
>>> 	vtkPolyDataMapper *polymap;
>>> 	vtkActor * polyact;
>>> 	
>>> 	//std::cout<<connect->GetOutput()->GetNumberOfCells()<<std::endl;
>>> 		
>>> 	polymap = vtkPolyDataMapper::New();
>>> 	polymap->SetInput(con->GetOutput());
>>> 	polyact = vtkActor::New();
>>> 	polyact->SetMapper(polymap);
>>> 	renderer->AddActor(polyact);
>>> 	
>>> 	vtkBoxWidget *boxWidget = vtkBoxWidget::New();
>>> 	boxWidget->SetInteractor(iren);
>>> 	boxWidget->SetPlaceFactor(1);
>>> 	boxWidget->SetProp3D(polyact);
>>> 	boxWidget->PlaceWidget();
>>> 	boxWidget->SetOutlineFaceWires(1);
>>> 	boxWidget->SetScalingEnabled(0);
>>> 	boxWidget->SetRotationEnabled(1);
>>> 	boxWidget->OutlineFaceWiresOff();
>>> 	boxWidget->OutlineCursorWiresOff();
>>> 	boxWidget->HandlesOff();
>>> 	boxWidget->On();
>>>
>>> 	vtkMyCallback *callback = vtkMyCallback::New();
>>> 	boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);
>>> 	}
>>>
>>>
>>> But It runs successfully if I have less no. of components say 10 but  
>>> it
>>> crashes on large no of componenets.. I feel that It is due to memory  
>>> crash.
>>> Of course all these objects inside loop are not being deleted.
>>>
>>> is there anything that can be avoided to save memory?? or Is there  
>>> any other
>>> lighter way to do this???
>>> Please help me out.
>>>
>>> Thanks a lot
>>> Prabhat Kumar Gupta
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Connected-Components-tp20661092p20661092.html
>>> Sent from the VTK - Users mailing list archive at Nabble.com.
>>>
>>> _______________________________________________
>>> This is the private VTK discussion list.
>>> Please keep messages on-topic. Check the FAQ at:
>>> http://www.vtk.org/Wiki/VTK_FAQ
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.vtk.org/mailman/listinfo/vtkusers
>> 
>> 
>> 
>> 
>> _______________________________________________
>> This is the private VTK discussion list.
>> Please keep messages on-topic. Check the FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Connected-Components-tp20661092p20677309.html
Sent from the VTK - Users mailing list archive at Nabble.com.




More information about the vtkusers mailing list