]> Creatis software - cpPlugins.git/blobdiff - appli/examples/example_HandleWidget.cxx
More widgets added
[cpPlugins.git] / appli / examples / example_HandleWidget.cxx
diff --git a/appli/examples/example_HandleWidget.cxx b/appli/examples/example_HandleWidget.cxx
new file mode 100644 (file)
index 0000000..193091c
--- /dev/null
@@ -0,0 +1,130 @@
+#include <cstdlib>
+#include <iostream>
+#include <string>
+
+#include <vtkHandleWidget.h>
+#include <vtkImageActorPointPlacer.h>
+#include <vtkPointHandleRepresentation3D.h>
+#include <vtkProperty.h>
+#include <vtkRenderer.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+
+#include <cpPlugins/Interface/Interface.h>
+#include <cpPlugins/Interface/ProcessObject.h>
+#include <cpPlugins/Interface/Image.h>
+
+#include <cpExtensions/Visualization/ImageSliceActors.h>
+
+// -------------------------------------------------------------------------
+typedef cpPlugins::Interface::Interface     TInterface;
+typedef cpPlugins::Interface::ProcessObject TProcessObject;
+typedef cpPlugins::Interface::DataObject    TDataObject;
+typedef cpPlugins::Interface::Image         TImage;
+typedef cpPlugins::Interface::Parameters    TParameters;
+typedef TInterface::TClasses                TClasses;
+
+typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
+
+// -------------------------------------------------------------------------
+int main( int argc, char* argv[] )
+{
+  if( argc < 3 )
+  {
+    std::cerr
+      << "Usage: " << argv[ 0 ]
+      << " plugins_file input_image"
+      << std::endl;
+    return( 1 );
+
+  } // fi
+
+  // Create interface
+  TInterface plugins;
+  if( !plugins.Load( argv[ 1 ] ) )
+  {
+    std::cerr << "Failed to load plugins." << std::endl;
+    return( 1 );
+
+  } // fi
+
+  // Create objects
+  TProcessObject::Pointer reader;
+  reader = plugins.CreateProcessObject( "cpPlugins::IO::ImageReader" );
+  if( reader.IsNull( ) )
+  {
+    std::cerr
+      << "No suitable reader found in plugins." << std::endl
+      << "Reader: " << reader.GetPointer( ) << std::endl
+      << std::endl;
+    return( 1 );
+
+  } // fi
+
+  // Configure reader
+  TParameters* reader_params = reader->GetParameters( );
+  for( int i = 2; i < argc; ++i )
+    reader_params->AddToStringList( "FileNames", argv[ i ] );
+
+  // Execute pipeline
+  std::string err = reader->Update( );
+  if( err != "" )
+  {
+    std::cerr << "ERROR: " << err << std::endl;
+    return( 1 );
+
+  } // fi
+  TImage* image = reader->GetOutput< TImage >( "Output" );
+
+  // Configure visualization objects
+  vtkSmartPointer< vtkRenderer > renderer =
+    vtkSmartPointer< vtkRenderer >::New( );
+  renderer->SetBackground( 0.1, 0.3, 0.5 );
+
+  vtkSmartPointer< vtkRenderWindow > window =
+    vtkSmartPointer< vtkRenderWindow >::New( );
+  window->AddRenderer( renderer );
+  window->SetSize( 600, 600 );
+
+  // Set up the interaction
+  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
+    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
+  window->SetInteractor( interactor );
+
+  // Create slice actors
+  vtkSmartPointer< TSliceActors > image_actors =
+    vtkSmartPointer< TSliceActors >::New( );
+  image_actors->AddInputData( image->GetVTK< vtkImageData >( ), 2 );
+  image_actors->PushActorsInto( window );
+
+  vtkSmartPointer< vtkImageActorPointPlacer > placer =
+    vtkSmartPointer< vtkImageActorPointPlacer >::New( );
+  placer->SetImageActor( image_actors->GetImageActor( 0 ) );
+
+  double bnds[ 6 ];
+  image_actors->GetImageActor( 0 )->GetDisplayBounds( bnds );
+  double pos[] = { bnds[ 0 ], bnds[ 2 ], bnds[ 4 ] };
+
+  vtkSmartPointer< vtkPointHandleRepresentation3D > rep =
+    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
+  rep->SetDisplayPosition( pos );
+  rep->GetProperty( )->SetColor( 1, 0, 0 );
+  rep->ActiveRepresentationOff( );
+  rep->SetPointPlacer( placer );
+
+  vtkSmartPointer< vtkHandleWidget > handleWidget =
+    vtkSmartPointer< vtkHandleWidget >::New( );
+  handleWidget->SetInteractor( interactor );
+  handleWidget->SetRepresentation( rep );
+
+  // Begin interaction
+  interactor->Initialize( );
+  renderer->ResetCamera( );
+  window->Render( );
+  handleWidget->On( );
+  interactor->Start( );
+
+  return( 0 );
+}
+
+// eof - $RCSfile$