5 #include <vtkHandleWidget.h>
6 #include <vtkImageActorPointPlacer.h>
7 #include <vtkPointHandleRepresentation3D.h>
8 #include <vtkProperty.h>
9 #include <vtkRenderer.h>
10 #include <vtkRenderWindow.h>
11 #include <vtkRenderWindowInteractor.h>
13 #include <cpPlugins/Interface/Interface.h>
14 #include <cpPlugins/Interface/ProcessObject.h>
15 #include <cpPlugins/Interface/Image.h>
17 #include <cpExtensions/Visualization/ImageSliceActors.h>
19 // -------------------------------------------------------------------------
20 typedef cpPlugins::Interface::Interface TInterface;
21 typedef cpPlugins::Interface::ProcessObject TProcessObject;
22 typedef cpPlugins::Interface::DataObject TDataObject;
23 typedef cpPlugins::Interface::Image TImage;
24 typedef cpPlugins::Interface::Parameters TParameters;
25 typedef TInterface::TClasses TClasses;
27 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
29 // -------------------------------------------------------------------------
30 int main( int argc, char* argv[] )
35 << "Usage: " << argv[ 0 ]
36 << " plugins_file input_image"
44 if( !plugins.Load( argv[ 1 ] ) )
46 std::cerr << "Failed to load plugins." << std::endl;
52 TProcessObject::Pointer reader;
53 reader = plugins.CreateProcessObject( "cpPlugins::IO::ImageReader" );
54 if( reader.IsNull( ) )
57 << "No suitable reader found in plugins." << std::endl
58 << "Reader: " << reader.GetPointer( ) << std::endl
65 TParameters* reader_params = reader->GetParameters( );
66 for( int i = 2; i < argc; ++i )
67 reader_params->AddToStringList( "FileNames", argv[ i ] );
70 std::string err = reader->Update( );
73 std::cerr << "ERROR: " << err << std::endl;
77 TImage* image = reader->GetOutput< TImage >( "Output" );
79 // Configure visualization objects
80 vtkSmartPointer< vtkRenderer > renderer =
81 vtkSmartPointer< vtkRenderer >::New( );
82 renderer->SetBackground( 0.1, 0.3, 0.5 );
84 vtkSmartPointer< vtkRenderWindow > window =
85 vtkSmartPointer< vtkRenderWindow >::New( );
86 window->AddRenderer( renderer );
87 window->SetSize( 600, 600 );
89 // Set up the interaction
90 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
91 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
92 window->SetInteractor( interactor );
94 // Create slice actors
95 vtkSmartPointer< TSliceActors > image_actors =
96 vtkSmartPointer< TSliceActors >::New( );
97 image_actors->AddInputData( image->GetVTK< vtkImageData >( ) );
98 image_actors->SetAxis( 2 );
99 image_actors->PushActorsInto( window );
101 vtkSmartPointer< vtkImageActorPointPlacer > placer =
102 vtkSmartPointer< vtkImageActorPointPlacer >::New( );
103 placer->SetImageActor( image_actors->GetImageActor( ) );
106 image_actors->GetImageActor( )->GetDisplayBounds( bnds );
107 double pos[] = { bnds[ 0 ], bnds[ 2 ], bnds[ 4 ] };
109 vtkSmartPointer< vtkPointHandleRepresentation3D > rep =
110 vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
111 rep->SetWorldPosition( pos );
112 rep->GetProperty( )->SetColor( 1, 0, 0 );
113 rep->ActiveRepresentationOff( );
114 rep->SetPointPlacer( placer );
116 vtkSmartPointer< vtkHandleWidget > handleWidget =
117 vtkSmartPointer< vtkHandleWidget >::New( );
118 handleWidget->SetInteractor( interactor );
119 handleWidget->SetRepresentation( rep );
122 interactor->Initialize( );
123 renderer->ResetCamera( );
126 interactor->Start( );