1 #include <fpa/VTK/ImageMPR.h>
3 #include <vtkCommand.h>
4 #include <vtkInteractorStyleSwitch.h>
5 #include <vtkPickingManager.h>
7 class vtkUpdateCallback
11 static vtkUpdateCallback *New()
13 return new vtkUpdateCallback;
15 virtual void Execute(vtkObject *caller, unsigned long eventId, void*
18 vtkRenderWindowInteractor* iren =
19 static_cast< vtkRenderWindowInteractor* >( caller );
23 switch( iren->GetKeyCode( ) )
28 bool eSeed = ( this->SeedWidget->GetProcessEvents( ) == 1 );
31 this->SeedWidget->ProcessEventsOff( );
32 this->WidgetX->InteractionOn( );
33 this->WidgetY->InteractionOn( );
34 this->WidgetZ->InteractionOn( );
38 this->SeedWidget->ProcessEventsOn( );
39 this->WidgetX->InteractionOff( );
40 this->WidgetY->InteractionOff( );
41 this->WidgetZ->InteractionOff( );
53 vtkImagePlaneWidget* WidgetX;
54 vtkImagePlaneWidget* WidgetY;
55 vtkImagePlaneWidget* WidgetZ;
56 vtkSeedWidget2* SeedWidget;
59 // -------------------------------------------------------------------------
63 this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( );
64 this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
65 this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( );
66 this->m_Picker = vtkSmartPointer< vtkCellPicker >::New( );
67 this->m_WidgetX = vtkSmartPointer< vtkImagePlaneWidget >::New( );
68 this->m_WidgetY = vtkSmartPointer< vtkImagePlaneWidget >::New( );
69 this->m_WidgetZ = vtkSmartPointer< vtkImagePlaneWidget >::New( );
70 this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( );
71 this->m_Window = vtkSmartPointer< vtkRenderWindow >::New( );
72 this->m_Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
80 vtkSmartPointer<vtkPointHandleRepresentation3D>::New();
81 //handlePointRep3D->AllOn();
82 handlePointRep3D->GetProperty()->SetColor(1.,0.,1.);
84 vtkSmartPointer<vtkSeedRepresentation>::New();
85 seedRep->SetHandleRepresentation(handlePointRep3D);
86 seedWidget = vtkSmartPointer<vtkSeedWidget2>::New();
88 seedWidget->SetRepresentation(seedRep);
90 this->m_WidgetX->KeyPressActivationOff( );
91 this->m_WidgetY->KeyPressActivationOff( );
92 this->m_WidgetZ->KeyPressActivationOff( );
93 seedWidget->KeyPressActivationOff( );
95 // this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker );
98 vtkUpdateCallback* onUpdate = vtkUpdateCallback::New();
99 onUpdate->WidgetX = this->m_WidgetX;
100 onUpdate->WidgetY = this->m_WidgetY;
101 onUpdate->WidgetZ = this->m_WidgetZ;
102 onUpdate->SeedWidget = this->seedWidget;
104 this->m_Interactor->AddObserver(vtkCommand::KeyPressEvent, onUpdate);
107 // -------------------------------------------------------------------------
113 // -------------------------------------------------------------------------
114 void fpa::VTK::ImageMPR::
115 SetImage( vtkImageData* image )
117 this->m_Image = image;
120 this->m_Outline->SetBounds( this->m_Image->GetBounds( ) );
121 this->m_OutlineMapper->
122 SetInputConnection( this->m_Outline->GetOutputPort( ) );
123 this->m_OutlineActor->SetMapper( this->m_OutlineMapper );
124 this->m_OutlineActor->GetProperty( )->SetColor( 1, 1, 1 );
127 this->m_Picker->SetTolerance( 0.005 );
130 this->m_WidgetX->DisplayTextOn( );
131 this->m_WidgetX->SetInputData( this->m_Image );
132 this->m_WidgetX->SetPlaneOrientationToXAxes( );
133 this->m_WidgetX->SetSliceIndex( this->m_Image->GetExtent( )[ 0 ] );
134 this->m_WidgetX->SetPicker( this->m_Picker );
135 this->m_WidgetX->SetKeyPressActivationValue( 'x' );
136 this->m_WidgetX->GetPlaneProperty( )->SetLineWidth( 3 );
137 this->m_WidgetX->GetPlaneProperty( )->SetColor( 0, 1, 1 );
139 this->m_WidgetY->DisplayTextOn( );
140 this->m_WidgetY->SetInputData( this->m_Image );
141 this->m_WidgetY->SetPlaneOrientationToYAxes( );
142 this->m_WidgetY->SetSliceIndex( this->m_Image->GetExtent( )[ 2 ] );
143 this->m_WidgetY->SetPicker( this->m_Picker );
144 this->m_WidgetY->SetKeyPressActivationValue( 'y' );
145 this->m_WidgetY->GetPlaneProperty( )->SetColor( 1, 0, 1 );
146 this->m_WidgetY->GetPlaneProperty( )->SetLineWidth( 3 );
147 this->m_WidgetY->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
149 this->m_WidgetZ->DisplayTextOn( );
150 this->m_WidgetZ->SetInputData( this->m_Image );
151 this->m_WidgetZ->SetPlaneOrientationToZAxes( );
152 this->m_WidgetZ->SetSliceIndex( this->m_Image->GetExtent( )[ 4 ] );
153 this->m_WidgetZ->SetPicker( this->m_Picker );
154 this->m_WidgetZ->SetKeyPressActivationValue( 'z' );
155 this->m_WidgetZ->GetPlaneProperty( )->SetColor( 1, 1, 0 );
156 this->m_WidgetZ->GetPlaneProperty( )->SetLineWidth( 3 );
157 this->m_WidgetZ->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
160 this->m_Window->AddRenderer( this->m_Renderer );
161 this->m_Interactor->SetRenderWindow( this->m_Window );
165 this->m_Image->GetSpacing( spac );
166 double min_spacing = spac[ 0 ];
167 for( unsigned int d = 1; d < 3; d++ )
168 min_spacing = ( spac[ d ] < min_spacing )? spac[ d ]: min_spacing;
170 vtkInteractorStyleSwitch* iswitch =
171 dynamic_cast< vtkInteractorStyleSwitch* >(
172 this->m_Interactor->GetInteractorStyle( )
174 if( iswitch != NULL )
175 iswitch->SetCurrentStyleToTrackballCamera( );
178 this->m_Renderer->AddActor( this->m_OutlineActor );
181 this->m_WidgetX->SetInteractor( this->m_Interactor );
182 this->m_WidgetY->SetInteractor( this->m_Interactor );
183 this->m_WidgetZ->SetInteractor( this->m_Interactor );
184 seedWidget->SetInteractor(this->m_Interactor);
186 this->m_WidgetX->On( );
187 this->m_WidgetY->On( );
188 this->m_WidgetZ->On( );
190 seedWidget->ProcessEventsOff( );
191 this->m_Interactor->SetPicker( this->m_Picker );
192 this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker );
193 this->m_Interactor->GetPickingManager( )->EnabledOn( );
196 // -------------------------------------------------------------------------
197 void fpa::VTK::ImageMPR::
198 SetBackground( double r, double g, double b )
200 this->m_Renderer->SetBackground( r, g, b );
203 // -------------------------------------------------------------------------
204 void fpa::VTK::ImageMPR::
205 SetSize( unsigned int w, unsigned int h )
207 this->m_Window->SetSize( w, h );
210 // -------------------------------------------------------------------------
211 void fpa::VTK::ImageMPR::
212 AddPolyData( vtkPolyData* pd, double r, double g, double b )
214 unsigned int i = this->m_PolyDatas.size( );
216 this->m_PolyDatas.push_back( pd );
217 this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) );
218 this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
220 this->m_Mappers[ i ]->SetInputData( pd );
221 this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
222 this->m_Actors[ i ]->GetProperty( )->SetColor( r, g, b );
223 this->m_Renderer->AddActor( this->m_Actors[ i ] );
226 // -------------------------------------------------------------------------
227 vtkRenderWindow* fpa::VTK::ImageMPR::
230 return( this->m_Window );
233 // -------------------------------------------------------------------------
234 vtkRenderer* fpa::VTK::ImageMPR::
237 return( this->m_Renderer );
240 // -------------------------------------------------------------------------
241 void fpa::VTK::ImageMPR::
244 this->m_WidgetX->On( );
245 this->m_WidgetY->On( );
246 this->m_WidgetZ->On( );
248 this->m_Renderer->ResetCamera( );
249 this->m_Interactor->Initialize( );
250 this->m_Interactor->Start( );