1 #include <fpa/VTK/ImageMPR.h>
3 #include <vtkInteractorStyleSwitch.h>
5 // -------------------------------------------------------------------------
9 // vtkSmartPointer< vtkImageData > m_Image;
11 this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( );
12 this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
13 this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( );
14 this->m_Picker = vtkSmartPointer< vtkCellPicker >::New( );
15 this->m_WidgetX = vtkSmartPointer< vtkImagePlaneWidget >::New( );
16 this->m_WidgetY = vtkSmartPointer< vtkImagePlaneWidget >::New( );
17 this->m_WidgetZ = vtkSmartPointer< vtkImagePlaneWidget >::New( );
18 this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( );
19 this->m_Window = vtkSmartPointer< vtkRenderWindow >::New( );
20 this->m_Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
23 // -------------------------------------------------------------------------
29 // -------------------------------------------------------------------------
30 void fpa::VTK::ImageMPR::
31 SetImage( vtkImageData* image )
33 this->m_Image = image;
36 this->m_Outline->SetBounds( this->m_Image->GetBounds( ) );
37 this->m_OutlineMapper->
38 SetInputConnection( this->m_Outline->GetOutputPort( ) );
39 this->m_OutlineActor->SetMapper( this->m_OutlineMapper );
40 this->m_OutlineActor->GetProperty( )->SetColor( 1, 1, 1 );
43 this->m_Picker->SetTolerance( 0.005 );
46 this->m_WidgetX->DisplayTextOn( );
47 this->m_WidgetX->SetInputData( this->m_Image );
48 this->m_WidgetX->SetPlaneOrientationToXAxes( );
49 this->m_WidgetX->SetSliceIndex( this->m_Image->GetExtent( )[ 0 ] );
50 this->m_WidgetX->SetPicker( this->m_Picker );
51 this->m_WidgetX->SetKeyPressActivationValue( 'x' );
52 this->m_WidgetX->GetPlaneProperty( )->SetLineWidth( 3 );
53 this->m_WidgetX->GetPlaneProperty( )->SetColor( 0, 1, 1 );
55 this->m_WidgetY->DisplayTextOn( );
56 this->m_WidgetY->SetInputData( this->m_Image );
57 this->m_WidgetY->SetPlaneOrientationToYAxes( );
58 this->m_WidgetY->SetSliceIndex( this->m_Image->GetExtent( )[ 2 ] );
59 this->m_WidgetY->SetPicker( this->m_Picker );
60 this->m_WidgetY->SetKeyPressActivationValue( 'y' );
61 this->m_WidgetY->GetPlaneProperty( )->SetColor( 1, 0, 1 );
62 this->m_WidgetY->GetPlaneProperty( )->SetLineWidth( 3 );
63 this->m_WidgetY->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
65 this->m_WidgetZ->DisplayTextOn( );
66 this->m_WidgetZ->SetInputData( this->m_Image );
67 this->m_WidgetZ->SetPlaneOrientationToZAxes( );
68 this->m_WidgetZ->SetSliceIndex( this->m_Image->GetExtent( )[ 4 ] );
69 this->m_WidgetZ->SetPicker( this->m_Picker );
70 this->m_WidgetZ->SetKeyPressActivationValue( 'z' );
71 this->m_WidgetZ->GetPlaneProperty( )->SetColor( 1, 1, 0 );
72 this->m_WidgetZ->GetPlaneProperty( )->SetLineWidth( 3 );
73 this->m_WidgetZ->SetLookupTable( this->m_WidgetX->GetLookupTable( ) );
76 this->m_Window->AddRenderer( this->m_Renderer );
77 this->m_Interactor->SetRenderWindow( this->m_Window );
81 this->m_Image->GetSpacing( spac );
82 double min_spacing = spac[ 0 ];
83 for( unsigned int d = 1; d < 3; d++ )
84 min_spacing = ( spac[ d ] < min_spacing )? spac[ d ]: min_spacing;
86 vtkInteractorStyleSwitch* iswitch =
87 dynamic_cast< vtkInteractorStyleSwitch* >(
88 this->m_Interactor->GetInteractorStyle( )
91 iswitch->SetCurrentStyleToTrackballCamera( );
94 this->m_Renderer->AddActor( this->m_OutlineActor );
97 this->m_WidgetX->SetInteractor( this->m_Interactor );
98 this->m_WidgetY->SetInteractor( this->m_Interactor );
99 this->m_WidgetZ->SetInteractor( this->m_Interactor );
102 // -------------------------------------------------------------------------
103 void fpa::VTK::ImageMPR::
104 SetBackground( double r, double g, double b )
106 this->m_Renderer->SetBackground( r, g, b );
109 // -------------------------------------------------------------------------
110 void fpa::VTK::ImageMPR::
111 SetSize( unsigned int w, unsigned int h )
113 this->m_Window->SetSize( w, h );
116 // -------------------------------------------------------------------------
117 void fpa::VTK::ImageMPR::
118 AddPolyData( vtkPolyData* pd, double r, double g, double b )
120 unsigned int i = this->m_PolyDatas.size( );
122 this->m_PolyDatas.push_back( pd );
123 this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) );
124 this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
126 this->m_Mappers[ i ]->SetInputData( pd );
127 this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
128 this->m_Actors[ i ]->GetProperty( )->SetColor( r, g, b );
129 this->m_Renderer->AddActor( this->m_Actors[ i ] );
132 // -------------------------------------------------------------------------
133 vtkRenderWindow* fpa::VTK::ImageMPR::
136 return( this->m_Window );
139 // -------------------------------------------------------------------------
140 vtkRenderer* fpa::VTK::ImageMPR::
143 return( this->m_Renderer );
146 // -------------------------------------------------------------------------
147 void fpa::VTK::ImageMPR::
150 this->m_WidgetX->On( );
151 this->m_WidgetY->On( );
152 this->m_WidgetZ->On( );
154 this->m_Renderer->ResetCamera( );
155 this->m_Interactor->Initialize( );
156 this->m_Interactor->Start( );