1 #include <fpa/VTK/ImageMPR.h>
3 #include <vtkCommand.h>
4 #include <vtkInteractorStyleSwitch.h>
6 #include <fpa/VTK/SeedWidgetCorrector.h>
10 class fpa_VTK_InteractionModeCallback
14 static fpa_VTK_InteractionModeCallback* New( )
16 return( new fpa_VTK_InteractionModeCallback );
19 vtkObject* caller, unsigned long eventId, void* arguments )
21 if( eventId == vtkCommand::KeyPressEvent )
23 vtkRenderWindowInteractor* iren =
24 static_cast< vtkRenderWindowInteractor* >( caller );
28 switch( iren->GetKeyCode( ) )
33 bool eSeed = ( this->SeedWidget->GetProcessEvents( ) == 1 );
36 this->SeedWidget->ProcessEventsOff( );
37 this->WidgetX->InteractionOn( );
38 this->WidgetY->InteractionOn( );
39 this->WidgetZ->InteractionOn( );
43 this->SeedWidget->ProcessEventsOn( );
44 this->WidgetX->InteractionOff( );
45 this->WidgetY->InteractionOff( );
46 this->WidgetZ->InteractionOff( );
60 vtkImagePlaneWidget* WidgetX;
61 vtkImagePlaneWidget* WidgetY;
62 vtkImagePlaneWidget* WidgetZ;
63 vtkSeedWidget* SeedWidget;
66 // -------------------------------------------------------------------------
70 this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( );
71 this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
72 this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( );
73 this->m_Picker = vtkSmartPointer< vtkCellPicker >::New( );
74 this->m_WidgetX = vtkSmartPointer< vtkImagePlaneWidget >::New( );
75 this->m_WidgetY = vtkSmartPointer< vtkImagePlaneWidget >::New( );
76 this->m_WidgetZ = vtkSmartPointer< vtkImagePlaneWidget >::New( );
77 this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( );
78 this->m_Window = vtkSmartPointer< vtkRenderWindow >::New( );
79 this->m_Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
80 this->m_SeedHandleRepresentation =
81 vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
82 this->m_SeedRepresentation =
83 vtkSmartPointer< vtkSeedRepresentation >::New( );
84 this->m_SeedWidget = vtkSmartPointer<vtkSeedWidget>::New();
86 this->m_SeedHandleRepresentation->GetProperty()->SetColor( 1, 0, 1 );
87 this->m_SeedRepresentation->
88 SetHandleRepresentation( this->m_SeedHandleRepresentation );
89 this->m_SeedWidget->SetRepresentation( this->m_SeedRepresentation );
91 this->m_WidgetX->KeyPressActivationOff( );
92 this->m_WidgetY->KeyPressActivationOff( );
93 this->m_WidgetZ->KeyPressActivationOff( );
94 this->m_SeedWidget->KeyPressActivationOff( );
96 vtkSmartPointer< fpa_VTK_InteractionModeCallback > int_cb =
97 vtkSmartPointer< fpa_VTK_InteractionModeCallback >::New( );
98 int_cb->WidgetX = this->m_WidgetX;
99 int_cb->WidgetY = this->m_WidgetY;
100 int_cb->WidgetZ = this->m_WidgetZ;
101 int_cb->SeedWidget = this->m_SeedWidget;
102 this->m_Interactor->AddObserver( vtkCommand::KeyPressEvent, int_cb );
104 vtkSmartPointer< fpa::VTK::SeedWidgetCorrector > corr_cb =
105 vtkSmartPointer< fpa::VTK::SeedWidgetCorrector >::New( );
106 corr_cb->Configure( this->m_Picker );
107 this->m_SeedWidget->AddObserver( vtkCommand::PlacePointEvent, corr_cb );
110 // -------------------------------------------------------------------------
116 // -------------------------------------------------------------------------
117 void fpa::VTK::ImageMPR::
118 SetImage( vtkImageData* image )
120 this->m_Image = image;
123 this->m_Outline->SetBounds( this->m_Image->GetBounds( ) );
124 this->m_OutlineMapper->
125 SetInputConnection( this->m_Outline->GetOutputPort( ) );
126 this->m_OutlineActor->SetMapper( this->m_OutlineMapper );
127 this->m_OutlineActor->GetProperty( )->SetColor( 1, 1, 1 );
130 this->m_Picker->SetTolerance( 0.005 );
133 this->m_WidgetX->DisplayTextOn( );
134 this->m_WidgetX->SetInputData( this->m_Image );
135 this->m_WidgetX->SetPlaneOrientationToXAxes( );
136 this->m_WidgetX->SetSliceIndex( this->m_Image->GetExtent( )[ 0 ] );
137 this->m_WidgetX->SetPicker( this->m_Picker );
138 this->m_WidgetX->SetKeyPressActivationValue( 'x' );
139 this->m_WidgetX->GetPlaneProperty( )->SetLineWidth( 3 );
140 this->m_WidgetX->GetPlaneProperty( )->SetColor( 0, 1, 1 );
142 this->m_WidgetY->DisplayTextOn( );
143 this->m_WidgetY->SetInputData( this->m_Image );
144 this->m_WidgetY->SetPlaneOrientationToYAxes( );
145 this->m_WidgetY->SetSliceIndex( this->m_Image->GetExtent( )[ 2 ] );
146 this->m_WidgetY->SetPicker( this->m_Picker );
147 this->m_WidgetY->SetKeyPressActivationValue( 'y' );
148 this->m_WidgetY->GetPlaneProperty( )->SetColor( 1, 0, 1 );
149 this->m_WidgetY->GetPlaneProperty( )->SetLineWidth( 3 );
150 this->m_WidgetY->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
152 this->m_WidgetZ->DisplayTextOn( );
153 this->m_WidgetZ->SetInputData( this->m_Image );
154 this->m_WidgetZ->SetPlaneOrientationToZAxes( );
155 this->m_WidgetZ->SetSliceIndex( this->m_Image->GetExtent( )[ 4 ] );
156 this->m_WidgetZ->SetPicker( this->m_Picker );
157 this->m_WidgetZ->SetKeyPressActivationValue( 'z' );
158 this->m_WidgetZ->GetPlaneProperty( )->SetColor( 1, 1, 0 );
159 this->m_WidgetZ->GetPlaneProperty( )->SetLineWidth( 3 );
160 this->m_WidgetZ->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
163 this->m_Window->AddRenderer( this->m_Renderer );
164 this->m_Interactor->SetRenderWindow( this->m_Window );
168 this->m_Image->GetSpacing( spac );
169 double min_spacing = spac[ 0 ];
170 for( unsigned int d = 1; d < 3; d++ )
171 min_spacing = ( spac[ d ] < min_spacing )? spac[ d ]: min_spacing;
173 vtkInteractorStyleSwitch* iswitch =
174 dynamic_cast< vtkInteractorStyleSwitch* >(
175 this->m_Interactor->GetInteractorStyle( )
177 if( iswitch != NULL )
178 iswitch->SetCurrentStyleToTrackballCamera( );
181 this->m_Renderer->AddActor( this->m_OutlineActor );
184 this->m_WidgetX->SetInteractor( this->m_Interactor );
185 this->m_WidgetY->SetInteractor( this->m_Interactor );
186 this->m_WidgetZ->SetInteractor( this->m_Interactor );
187 this->m_SeedWidget->SetInteractor( this->m_Interactor );
189 this->m_WidgetX->On( );
190 this->m_WidgetY->On( );
191 this->m_WidgetZ->On( );
192 this->m_SeedWidget->On( );
193 this->m_SeedWidget->ProcessEventsOff( );
194 this->m_Interactor->SetPicker( this->m_Picker );
196 this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker );
197 this->m_Interactor->GetPickingManager( )->EnabledOn( );
201 // -------------------------------------------------------------------------
202 void fpa::VTK::ImageMPR::
203 SetBackground( double r, double g, double b )
205 this->m_Renderer->SetBackground( r, g, b );
208 // -------------------------------------------------------------------------
209 void fpa::VTK::ImageMPR::
210 SetSize( unsigned int w, unsigned int h )
212 this->m_Window->SetSize( w, h );
215 // -------------------------------------------------------------------------
216 void fpa::VTK::ImageMPR::
217 AddPolyData( vtkPolyData* pd, double r, double g, double b, double opacity )
219 unsigned int i = this->m_PolyDatas.size( );
221 this->m_PolyDatas.push_back( pd );
222 this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) );
223 this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
225 this->m_Mappers[ i ]->SetInputData( pd );
226 this->m_Mappers[ i ]->ScalarVisibilityOff( );
227 this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
228 this->m_Actors[ i ]->GetProperty( )->SetColor( r, g, b );
229 this->m_Actors[ i ]->GetProperty( )->SetOpacity( opacity );
230 this->m_Renderer->AddActor( this->m_Actors[ i ] );
233 // -------------------------------------------------------------------------
234 unsigned int fpa::VTK::ImageMPR::
235 GetNumberOfSeeds( ) const
237 return( this->m_SeedRepresentation->GetNumberOfSeeds( ) );
240 // -------------------------------------------------------------------------
241 void fpa::VTK::ImageMPR::
242 GetSeed( int n, double* s ) const
244 vtkHandleWidget* hWdg = this->m_SeedWidget->GetSeed( n );
247 vtkHandleRepresentation* hRep =
248 dynamic_cast< vtkHandleRepresentation* >( hWdg->GetRepresentation( ) );
251 hRep->GetWorldPosition( s );
254 // -------------------------------------------------------------------------
255 vtkRenderWindow* fpa::VTK::ImageMPR::
258 return( this->m_Window );
261 // -------------------------------------------------------------------------
262 vtkRenderer* fpa::VTK::ImageMPR::
265 return( this->m_Renderer );
268 // -------------------------------------------------------------------------
269 void fpa::VTK::ImageMPR::
272 this->m_WidgetX->On( );
273 this->m_WidgetY->On( );
274 this->m_WidgetZ->On( );
276 this->m_Renderer->ResetCamera( );
277 this->m_Interactor->Initialize( );
278 this->m_Interactor->Start( );