VTK/Examples/Cxx/Interaction/InteractorStyleUser

From KitwarePublic
< VTK‎ | Examples‎ | Cxx
Jump to navigationJump to search
VTK Examples Baseline Interaction TestInteractorStyleUser.png

This style is designed to NOT provide any default functionality. You must specify how to handle every event that you want handled.

InteractorStyleUser.cxx

#include <vtkSmartPointer.h>
#include <vtkCallbackCommand.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPolyData.h>
#include <vtkSphereSource.h>
#include <vtkInteractorStyleUser.h>

static void ClickCallbackFunction ( vtkObject* caller,
                                    long unsigned int eventId,
                                    void* clientData,
                                    void* callData );

int main(int, char *[])
{
  vtkSmartPointer<vtkSphereSource> sphereSource = 
    vtkSmartPointer<vtkSphereSource>::New();
  sphereSource->Update();
  
  // Visualize
  vtkSmartPointer<vtkPolyDataMapper> mapper = 
    vtkSmartPointer<vtkPolyDataMapper>::New();
  mapper->SetInputConnection(sphereSource->GetOutputPort());

  vtkSmartPointer<vtkActor> actor = 
    vtkSmartPointer<vtkActor>::New();
  actor->SetMapper(mapper);

  vtkSmartPointer<vtkRenderer> renderer = 
    vtkSmartPointer<vtkRenderer>::New();
  vtkSmartPointer<vtkRenderWindow> renderWindow = 
    vtkSmartPointer<vtkRenderWindow>::New();
  renderWindow->AddRenderer(renderer);

  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 
    vtkSmartPointer<vtkRenderWindowInteractor>::New();
  renderWindowInteractor->SetRenderWindow(renderWindow);

  renderer->AddActor(actor);
  renderer->SetBackground(1,1,1); // Background color white

  renderWindow->Render();

  vtkSmartPointer<vtkCallbackCommand> clickCallback = 
    vtkSmartPointer<vtkCallbackCommand>::New();
  clickCallback->SetCallback(ClickCallbackFunction);

  renderWindowInteractor->AddObserver ( vtkCommand::LeftButtonPressEvent, clickCallback );
  
  vtkSmartPointer<vtkInteractorStyleUser> style = 
    vtkSmartPointer<vtkInteractorStyleUser>::New();
  renderWindowInteractor->SetInteractorStyle(style);
  
  renderWindowInteractor->Start();
  
  return EXIT_SUCCESS;
}


void ClickCallbackFunction (vtkObject *,
                            long unsigned int,
                            void *,
                            void *)
{
  std::cout << "Click callback" << std::endl;

  // We can get the calling object like this:
  // vtkRenderWindowInteractor *iren = 
  //  static_cast<vtkRenderWindowInteractor*>(caller);
}

Please try the new VTKExamples website.

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

PROJECT(InteractorStyleUser)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

add_executable(InteractorStyleUser MACOSX_BUNDLE InteractorStyleUser.cxx)

if(VTK_LIBRARIES)
  target_link_libraries(InteractorStyleUser ${VTK_LIBRARIES})
else()
  target_link_libraries(InteractorStyleUser vtkHybrid vtkWidgets)
endif()

Download and Build InteractorStyleUser

Click here to download InteractorStyleUser. and its CMakeLists.txt file.

Once the tarball InteractorStyleUser.tar has been downloaded and extracted,

cd InteractorStyleUser/build 
  • If VTK is installed:
cmake ..
  • If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..

Build the project:

make

and run it:

./InteractorStyleUser

WINDOWS USERS PLEASE NOTE: Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.