[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