--- /dev/null
+#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$