1 #ifndef __FPA__UTILITY__H__
2 #define __FPA__UTILITY__H__
6 #include <itkImageFileReader.h>
7 #include <itkImageFileWriter.h>
10 #include <vtkImageActor.h>
11 #include <vtkImageData.h>
12 #include <vtkInteractorStyleImage.h>
13 #include <vtkPointHandleRepresentation3D.h>
14 #include <vtkProperty.h>
15 #include <vtkRenderer.h>
16 #include <vtkRenderWindow.h>
17 #include <vtkRenderWindowInteractor.h>
18 #include <vtkSeedRepresentation.h>
19 #include <vtkSeedWidget.h>
20 #include <vtkSmartPointer.h>
26 struct Viewer2DWithSeeds
28 vtkSmartPointer< vtkImageData > Image;
29 vtkSmartPointer< vtkImageActor > ImageActor;
30 vtkSmartPointer< vtkRenderer > Renderer;
31 vtkSmartPointer< vtkRenderWindow > Window;
32 vtkSmartPointer< vtkInteractorStyleImage > Style;
33 vtkSmartPointer< vtkRenderWindowInteractor > Interactor;
34 vtkSmartPointer< vtkPointHandleRepresentation3D > Handle;
35 vtkSmartPointer< vtkSeedRepresentation > Representation;
36 vtkSmartPointer< vtkSeedWidget > Widget;
40 this->ImageActor = vtkSmartPointer< vtkImageActor >::New( );
41 this->Renderer = vtkSmartPointer< vtkRenderer >::New( );
42 this->Window = vtkSmartPointer< vtkRenderWindow >::New( );
43 this->Style = vtkSmartPointer< vtkInteractorStyleImage >::New( );
44 this->Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
45 this->Handle = vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
46 this->Representation = vtkSmartPointer< vtkSeedRepresentation >::New( );
47 this->Widget = vtkSmartPointer< vtkSeedWidget >::New( );
49 this->Renderer->SetBackground( 0.1, 0.2, 0.7 );
50 this->Window->SetSize( 600, 600 );
51 this->Window->AddRenderer( this->Renderer );
52 this->Interactor->SetInteractorStyle( this->Style );
53 this->Window->SetInteractor( this->Interactor );
54 this->Handle->GetProperty( )->SetColor( 1, 0, 0 );
55 this->Representation->SetHandleRepresentation( this->Handle );
56 this->Widget->SetInteractor( this->Interactor );
57 this->Widget->SetRepresentation( this->Representation );
59 void SetImage( vtkImageData* image )
62 this->ImageActor->SetInputData( this->Image );
63 this->Renderer->AddActor( this->ImageActor );
65 // Correct camera due to the loaded image
66 vtkCamera* camera = this->Renderer->GetActiveCamera( );
67 camera->SetViewUp( 0, -1, 0 );
68 camera->SetPosition( 0, 0, -1 );
69 camera->SetFocalPoint( 0, 0, 0 );
71 // Prepare visualization
72 this->Interactor->Initialize( );
73 this->Renderer->ResetCamera( );
77 this->Window->Render( );
81 this->Window->Render( );
83 this->Interactor->Start( );
85 unsigned long GetNumberOfSeeds( ) const
87 return( this->Representation->GetNumberOfSeeds( ) );
91 bool GetSeed( P& seed, unsigned long i )
93 if( i < this->Representation->GetNumberOfSeeds( ) )
96 this->Representation->GetSeedWorldPosition( i, pos );
98 seed[ 0 ] = ( typename P::ValueType )( pos[ 0 ] );
99 seed[ 1 ] = ( typename P::ValueType )( pos[ 1 ] );
108 // -----------------------------------------------------------------------
110 std::string ReadImage( Ip& image, const std::string& fname )
112 typename itk::ImageFileReader< typename Ip::ObjectType >::Pointer r =
113 itk::ImageFileReader< typename Ip::ObjectType >::New( );
114 r->SetFileName( fname );
119 catch( itk::ExceptionObject& err )
121 std::stringstream str;
122 str << "Error while reading image from " << fname << ": " << err;
123 return( str.str( ) );
126 image = r->GetOutput( );
127 image->DisconnectPipeline( );
131 // -----------------------------------------------------------------------
133 std::string SaveImage( const I* image, const std::string& fname )
135 typename itk::ImageFileWriter< I >::Pointer w =
136 itk::ImageFileWriter< I >::New( );
137 w->SetInput( image );
138 w->SetFileName( fname );
143 catch( itk::ExceptionObject& err )
145 std::stringstream str;
146 str << "Error while reading image from " << fname << ": " << err;
147 return( str.str( ) );
155 #endif // __FPA__UTILITY__H__