[vtkusers] [Collision detection ] How to prevent overlapping actors ?

Cory Quammen cory.quammen at kitware.com
Wed Jan 22 18:44:35 EST 2014


How do you know vtkIntersectionPolyDataFilter doesn't work?

Is the intersection empty? Do you get an error message?

Thanks,
Cory

On Wed, Jan 22, 2014 at 4:57 PM, agatte <agatakrason at gmail.com> wrote:
> Hi,
>
> I want to prevent overlapping/collision  of two actors in the render scene.
> I have already tried vtkIntersectionFilter, bu tit doesn't work in my case.
>
> Could You advice me something different ?
>
> int main(int, char *[])
> {
>   // Lower - first model
>   vtkSmartPointer<vtkSTLReader> readerLower =
> vtkSmartPointer<vtkSTLReader>::New();
>   readerLower->SetFileName("lower.stl");
>   readerLower->Update();
>
>   // Upper - second model
>   vtkSmartPointer<vtkSTLReader> readerUpper =
> vtkSmartPointer<vtkSTLReader>::New();
>   readerUpper->SetFileName("upper.stl");
>   readerUpper->Update();
>
>   // Create polydata
>   vtkSmartPointer<vtkPolyData> lowerPolyData = readerLower->GetOutput();
>   vtkSmartPointer<vtkPolyData> pointsUpperPolyData =
> readerUpper->GetOutput();
>   pointsUpperPolyData->GetPoints();
>
>
>   // Set  input transform to avoid overlap actors (models)
>   vtkSmartPointer<vtkTransform> transform =
> vtkSmartPointer<vtkTransform>::New();
>   transform->PostMultiply();
>   transform->RotateZ(180.0);
>   transform->RotateX(180.0);
>   transform->Translate(0,0,35);
>
>   // Set polydata filter
>   vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter =
> vtkSmartPointer<vtkTransformPolyDataFilter>::New();
>   transformFilter->SetInput(pointsUpperPolyData); // upperPolyData
>   transformFilter->SetTransform(transform);
>   transformFilter->Update();
>
>   vtkSmartPointer<vtkPolyDataMapper> lowerMapper =
> vtkSmartPointer<vtkPolyDataMapper>::New();
>   lowerMapper->SetInput(lowerPolyData);
>   vtkSmartPointer<vtkPolyDataMapper> upperMapper =
> vtkSmartPointer<vtkPolyDataMapper>::New();
>   upperMapper->SetInput(pointsUpperPolyData);
>
>   vtkSmartPointer<vtkActor> upperActor =  vtkSmartPointer<vtkActor>::New();
>   upperActor->SetMapper(upperMapper);
>   vtkSmartPointer<vtkActor> lowerActor =  vtkSmartPointer<vtkActor>::New();
>   lowerActor->SetMapper(lowerMapper);
>   lowerActor->SetUserTransform(transform);
>
>
>   vtkSmartPointer<vtkIntersectionPolyDataFilter> intersectionPolyDataFilter
> =
>     vtkSmartPointer<vtkIntersectionPolyDataFilter>::New();
>   intersectionPolyDataFilter->SetInput( 0, lowerPolyData );
>   intersectionPolyDataFilter->SetInput( 1, pointsUpperPolyData );
>   intersectionPolyDataFilter->Update();
>
>   vtkSmartPointer<vtkPolyDataMapper> intersectionMapper =
> vtkSmartPointer<vtkPolyDataMapper>::New();
>   intersectionMapper->SetInputConnection(
> intersectionPolyDataFilter->GetOutputPort() );
>   intersectionMapper->ScalarVisibilityOff();
>
>   vtkSmartPointer<vtkActor> intersectionActor =
> vtkSmartPointer<vtkActor>::New();
>   intersectionActor->SetMapper( intersectionMapper );
>
>   //vtkSmartPointer<vtkRenderer> renderer =
> vtkSmartPointer<vtkRenderer>::New();
>   //renderer->AddViewProp(sphere1Actor);
>   //renderer->AddViewProp(sphere2Actor);
>   //renderer->AddViewProp(intersectionActor);
>
>
>   // Visualization
>
>   // Create a renderer, render window, and interactor
>   vtkSmartPointer<vtkRenderer> renderer =
> vtkSmartPointer<vtkRenderer>::New();
>   renderer->AddActor(lowerActor);
>   renderer->AddActor(upperActor);
>   //renderer->AddActor(booleanOperationActor);
>   renderer->AddActor(intersectionActor);
>
>   // Render Window
>   vtkSmartPointer<vtkRenderWindow> renderWindow =
> vtkSmartPointer<vtkRenderWindow>::New();
>   renderWindow->AddRenderer(renderer);
>
>   // Interactor
>   vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
> vtkSmartPointer<vtkRenderWindowInteractor>::New();
>   renderWindowInteractor->SetRenderWindow(renderWindow);
>
>   // Move actors
>   vtkSmartPointer<vtkInteractorStyleTrackballActor> styleActor =
> vtkSmartPointer<vtkInteractorStyleTrackballActor>::New();
>   renderWindowInteractor->SetInteractorStyle( styleActor );
>   renderWindowInteractor->SetRenderWindow(renderWindow);
>
>   // Render and interact
>   renderer->SetBackground(.2, .3, .4);
>   renderWindow->Render();
>   renderWindowInteractor->Start();
>
>   return EXIT_SUCCESS;
> }
>
>
> I would appreciate for any help please.
>
>
>
>
>
> --
> View this message in context: http://vtk.1045678.n5.nabble.com/Collision-detection-How-to-prevent-overlapping-actors-tp5725551.html
> Sent from the VTK - Users mailing list archive at Nabble.com.
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers


More information about the vtkusers mailing list