VTK/Examples/Cxx/Widgets/SphereWidgetEvents
From KitwarePublic
This example shows how to subclass a widget so that events can be further customized.
SphereWidgetEvents.cxx
#include <vtkCallbackCommand.h> #include <vtkCommand.h> #include <vtkObjectFactory.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkSmartPointer.h> #include <vtkSphereWidget.h> #include <vtkSphereRepresentation.h> class MySphereWidget : public vtkSphereWidget { public: static MySphereWidget* New(); vtkTypeMacro(MySphereWidget, vtkSphereWidget); // Handles the events static void ProcessEvents(vtkObject* object, unsigned long event, void* clientdata, void* calldata); virtual void OnLeftButtonUp() { std::cout << "Left button up!" << std::endl; this->Superclass::OnLeftButtonUp(); } protected: MySphereWidget(); }; MySphereWidget::MySphereWidget() { this->EventCallbackCommand->SetCallback( MySphereWidget::ProcessEvents ); } void MySphereWidget::ProcessEvents( vtkObject* vtkNotUsed(object), unsigned long event, void* clientdata, void* vtkNotUsed(calldata) ) { MySphereWidget* self = reinterpret_cast<MySphereWidget *>( clientdata ); switch(event) { case vtkCommand::LeftButtonPressEvent: self->OnLeftButtonDown(); break; case vtkCommand::LeftButtonReleaseEvent: self->OnLeftButtonUp(); break; case vtkCommand::RightButtonPressEvent: self->OnRightButtonDown(); break; case vtkCommand::RightButtonReleaseEvent: self->OnRightButtonUp(); break; case vtkCommand::MouseMoveEvent: self->OnMouseMove(); break; } } vtkStandardNewMacro(MySphereWidget); int main(int, char *[]) { // Create a renderer and render window vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); // Create an interactor vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); vtkSmartPointer<MySphereWidget> sphereWidget = vtkSmartPointer<MySphereWidget>::New(); sphereWidget->SetInteractor(renderWindowInteractor); sphereWidget->SetRepresentationToSurface(); sphereWidget->HandleVisibilityOn(); renderWindow->Render(); renderWindowInteractor->Initialize(); renderWindow->Render(); sphereWidget->On(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.6) PROJECT(SphereWidgetEvents) FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE}) ADD_EXECUTABLE(SphereWidgetEvents SphereWidgetEvents.cxx) TARGET_LINK_LIBRARIES(SphereWidgetEvents vtkHybrid vtkWidgets)
Color.
