diff --git a/Interaction/Widgets/Testing/Cxx/CMakeLists.txt b/Interaction/Widgets/Testing/Cxx/CMakeLists.txt index 30bb2250bc94de97f37bd09eb243f3782a8a9f73..05d38056fade5f99bda4f488a5582a893aaca275 100644 --- a/Interaction/Widgets/Testing/Cxx/CMakeLists.txt +++ b/Interaction/Widgets/Testing/Cxx/CMakeLists.txt @@ -28,7 +28,6 @@ vtk_add_test_cxx(${vtk-module}CxxTests tests TestHandleWidget.cxx TestHandleWidget2D.cxx TestImageActorContourWidget.cxx - TestImageTracerWidget.cxx TestImplicitCylinderWidget.cxx TestImplicitCylinderWidget2.cxx TestImplicitPlaneWidget.cxx @@ -124,6 +123,12 @@ if(VTK_RENDERING_BACKEND STREQUAL "OpenGL") ) endif() +if(VTK_RENDERING_BACKEND STREQUAL "OpenGL2") + vtk_add_test_cxx(${vtk-module}CxxTests tests + TestImageTracerWidget.cxx + ) +endif() + set(all_tests ${tests} ${no_valid_tests} diff --git a/Interaction/Widgets/Testing/Cxx/TestImageTracerWidget.cxx b/Interaction/Widgets/Testing/Cxx/TestImageTracerWidget.cxx index f9577344c3fdebcc9eee6e181a7700d078ada3b0..966c7e34849c3a23460f60a087b69e5e2cb66595 100644 --- a/Interaction/Widgets/Testing/Cxx/TestImageTracerWidget.cxx +++ b/Interaction/Widgets/Testing/Cxx/TestImageTracerWidget.cxx @@ -223,10 +223,7 @@ const char ImageTracerWidgetEventLog[] = "MouseMoveEvent 353 145 0 0 0 0 Shift_L\n" "MouseMoveEvent 352 147 0 0 0 0 Shift_L\n" "MouseMoveEvent 352 148 0 0 0 0 Shift_L\n" - "MouseMoveEvent 352 150 0 0 0 0 Shift_L\n" - "MouseMoveEvent 351 152 0 0 0 0 Shift_L\n" - "MouseMoveEvent 350 156 0 0 0 0 Shift_L\n" - "MouseMoveEvent 349 158 0 0 0 0 Shift_L\n" + "MouseMoveEvent 352 149 0 0 0 0 Shift_L\n" "RightButtonReleaseEvent 349 158 0 0 0 0 Shift_L\n" "MouseMoveEvent 381 179 0 0 0 0 Shift_L\n" "LeftButtonPressEvent 381 179 0 0 0 0 Shift_L\n" diff --git a/Rendering/OpenGL2/Testing/Cxx/CMakeLists.txt b/Rendering/OpenGL2/Testing/Cxx/CMakeLists.txt index 4505385f43977cc9083d22da3acb1ef6b0f98249..7e8f2ade3c26d3fc4f1a400238aa0ecba5fc92ae 100644 --- a/Rendering/OpenGL2/Testing/Cxx/CMakeLists.txt +++ b/Rendering/OpenGL2/Testing/Cxx/CMakeLists.txt @@ -22,6 +22,7 @@ vtk_add_test_cxx(${vtk-module}CxxTests tests TestLightingMapNormalsPass.cxx TestOffscreenRenderingResize.cxx TestPointFillPass.cxx + TestPropPicker2Renderers.cxx,NO_DATA TestPointGaussianMapper.cxx TestPointGaussianMapperOpacity.cxx TestRemoveActorNonCurrentContext.cxx diff --git a/Rendering/OpenGL2/Testing/Cxx/TestPropPicker2Renderers.cxx b/Rendering/OpenGL2/Testing/Cxx/TestPropPicker2Renderers.cxx new file mode 100644 index 0000000000000000000000000000000000000000..ef8ac66ad574a39868c7f979dadc9c748b590cf6 --- /dev/null +++ b/Rendering/OpenGL2/Testing/Cxx/TestPropPicker2Renderers.cxx @@ -0,0 +1,206 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: TestImageTracerWidget.cxx + + Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + + +#include <vtkActor.h> +#include <vtkAssemblyPath.h> +#include <vtkCamera.h> +#include <vtkCubeSource.h> +#include <vtkInteractorEventRecorder.h> +#include <vtkInteractorStyleTrackballCamera.h> +#include <vtkNew.h> +#include <vtkObjectFactory.h> +#include <vtkPoints.h> +#include <vtkPolyData.h> +#include <vtkPolyDataMapper.h> +#include <vtkProperty.h> +#include <vtkPropPicker.h> +#include <vtkRendererCollection.h> +#include <vtkRenderWindow.h> +#include <vtkRenderWindowInteractor.h> +#include <vtkRenderer.h> +#include <vtkPolyDataReader.h> +#include <vtkPolyDataNormals.h> +#include <vtkSphereSource.h> + +bool corner = true; +//bool corner = false; + +double sphereColor[3] = { 0.73, 0.33, 0.83 }; +double sphereColorPicked[3] = { 1.0, 1., 0.0 }; +double sphereColor2[3] = { 0.33, 0.73, 0.83 }; + +// Handle mouse events +class MouseInteractorStyle2 : public vtkInteractorStyleTrackballCamera +{ +public: + static MouseInteractorStyle2* New(); + vtkTypeMacro(MouseInteractorStyle2, vtkInteractorStyleTrackballCamera); + + + virtual void OnLeftButtonDown() VTK_OVERRIDE + { + int* clickPos = this->GetInteractor()->GetEventPosition(); + + vtkRenderWindow* renwin = this->GetInteractor()->GetRenderWindow(); + vtkRenderer *aren = this->GetInteractor()->FindPokedRenderer(clickPos[0], clickPos[1]); + + vtkNew<vtkPropPicker> picker2; + if (0 != picker2->Pick(clickPos[0], clickPos[1], 0, aren)) + { + vtkAssemblyPath* path = picker2->GetPath(); + vtkProp* prop = path->GetFirstNode()->GetViewProp(); + vtkActor* actor = vtkActor::SafeDownCast(prop); + actor->GetProperty()->SetColor(sphereColorPicked); + } + else + renwin->SetCurrentCursor(VTK_CURSOR_DEFAULT); + + renwin->Render(); + } + +private: + +}; + +vtkStandardNewMacro(MouseInteractorStyle2); + + +void InitRepresentation(vtkRenderer* renderer) +{ + //Sphere + vtkNew<vtkSphereSource> sphereSource; + sphereSource->SetPhiResolution(24); + sphereSource->SetThetaResolution(24); + sphereSource->SetRadius(1.75); + sphereSource->Update(); + + vtkNew<vtkActor> sphere; + vtkNew<vtkPolyDataMapper> sphereM; + sphereM->SetInputConnection(sphereSource->GetOutputPort()); + sphereM->Update(); + sphere->SetMapper(sphereM); + sphere->GetProperty()->BackfaceCullingOff(); + sphere->GetProperty()->SetColor(sphereColor); + sphere->SetPosition(0, 0, 2); + renderer->AddActor(sphere); +} + +const char PropPickerEventLog[] = + "# StreamVersion 1\n" + "LeftButtonPressEvent 160 150 0 0 0 0\n" + "LeftButtonReleaseEvent 160 150 0 0 0 0\n"; + + +int TestPropPicker2Renderers(int, char *[]) +{ + vtkNew<vtkRenderer> renderer0; + renderer0->SetUseDepthPeeling(1); + renderer0->SetMaximumNumberOfPeels(8); + renderer0->LightFollowCameraOn(); + renderer0->TwoSidedLightingOn(); + renderer0->SetOcclusionRatio(0.0); + + renderer0->GetActiveCamera()->SetParallelProjection(1); + + vtkNew<vtkRenderWindow> renWin; + renWin->SetAlphaBitPlanes(1); + renWin->SetMultiSamples(0); + renWin->AddRenderer(renderer0); + + vtkNew<vtkRenderWindowInteractor> iren; + iren->SetRenderWindow(renWin); + iren->LightFollowCameraOff(); + + // Set the custom stype to use for interaction. + vtkNew<MouseInteractorStyle2> istyle; + + iren->SetInteractorStyle(istyle); + + + if (corner) //corner + { + vtkNew<vtkRenderer> renderer1; + renderer1->SetViewport(0, 0, 0.1, 0.1); + renWin->AddRenderer(renderer1); + + vtkNew<vtkSphereSource> sphereSource; + vtkNew<vtkPolyDataMapper> mapper; + mapper->SetInputConnection(sphereSource->GetOutputPort()); + mapper->Update(); + + vtkNew<vtkActor> actor; + actor->PickableOff(); + actor->SetMapper(mapper); + renderer1->AddActor(actor); + } + + { + vtkNew<vtkCubeSource> reader; + reader->SetXLength(80); + reader->SetYLength(50); + reader->SetZLength(1); + reader->Update(); + + vtkNew<vtkPolyDataNormals> norm; + norm->SetInputConnection(reader->GetOutputPort()); + norm->ComputePointNormalsOn(); + norm->SplittingOff(); + norm->Update(); + + vtkNew<vtkPolyDataMapper> mapper; + mapper->ImmediateModeRenderingOn(); + mapper->ScalarVisibilityOff(); + mapper->SetResolveCoincidentTopologyToPolygonOffset(); + mapper->SetInputConnection(norm->GetOutputPort()); + mapper->Update(); + + vtkNew<vtkActor> actor; + actor->SetMapper(mapper); + actor->GetProperty()->BackfaceCullingOff(); + actor->GetProperty()->SetColor(0.93, 0.5, 0.5); + + { + renderer0->AddActor(actor); + + InitRepresentation(renderer0); + + renderer0->ResetCameraClippingRange(); + renderer0->ResetCamera(); + + istyle->SetDefaultRenderer(renderer0); + } + + actor->PickableOff(); + } + renWin->SetSize(300, 300); + + + vtkNew<vtkInteractorEventRecorder> recorder; + recorder->SetInteractor(iren); + recorder->ReadFromInputStringOn(); + recorder->SetInputString(PropPickerEventLog); + + + renWin->Render(); + recorder->Play(); + // Remove the observers so we can go interactive. Without this the "-I" + // testing option fails. + recorder->Off(); + + iren->Start(); + + return EXIT_SUCCESS; +} diff --git a/Rendering/OpenGL2/Testing/Data/Baseline/TestPropPicker2Renderers.png.md5 b/Rendering/OpenGL2/Testing/Data/Baseline/TestPropPicker2Renderers.png.md5 new file mode 100644 index 0000000000000000000000000000000000000000..cade2b060292658219bef4fd264f6eba3044ceaf --- /dev/null +++ b/Rendering/OpenGL2/Testing/Data/Baseline/TestPropPicker2Renderers.png.md5 @@ -0,0 +1 @@ +751c89159f0b36250144c9bd381214c8 diff --git a/Rendering/OpenGL2/vtkOpenGLRenderer.cxx b/Rendering/OpenGL2/vtkOpenGLRenderer.cxx index f2772d40e64a5da769d49306d17c794e90ea77cc..e81bf4e427b4f816d4b3235bca515a58c1137d5b 100644 --- a/Rendering/OpenGL2/vtkOpenGLRenderer.cxx +++ b/Rendering/OpenGL2/vtkOpenGLRenderer.cxx @@ -603,6 +603,7 @@ void vtkOpenGLRenderer::StartPick(unsigned int vtkNotUsed(pickFromSize)) this->PickInfo->NumPicked = 0; this->PickInfo->PickedId = 0; + this->UpdateCamera(); this->Clear(); vtkOpenGLCheckErrorMacro("failed after StartPick");