]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Extensions/Visualization/MPRWithDifferentWindows.cxx
Image visualization objects updated
[cpPlugins.git] / lib / cpPlugins / Extensions / Visualization / MPRWithDifferentWindows.cxx
1 #include <cpPlugins/Extensions/Visualization/MPRWithDifferentWindows.h>
2 #include <vtkCamera.h>
3
4 // -------------------------------------------------------------------------
5 cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
6 MPRWithDifferentWindows(
7   vtkRenderWindow* xWin,
8   vtkRenderWindow* yWin,
9   vtkRenderWindow* zWin,
10   vtkRenderWindow* auxWin
11   )
12 {
13   this->m_Windows[ 0 ] = xWin;
14   this->m_Windows[ 1 ] = yWin;
15   this->m_Windows[ 2 ] = zWin;
16   this->m_Windows[ 3 ] = auxWin;
17
18   // Prepare actors
19   this->m_MPRActors = vtkSmartPointer< TMPRActors >::New( );
20
21   // Prepare renderers
22   for( int i = 0; i < 4; ++i )
23   {
24     if( this->m_Windows[ i ] == NULL )
25       continue;
26
27     // Renderers
28     this->m_Renderers[ i ] = vtkSmartPointer< vtkRenderer >::New( );
29     this->m_Renderers[ i ]->SetBackground( 0.1, 0.3, 0.8 );
30     this->m_Windows[ i ]->AddRenderer( this->m_Renderers[ i ] );
31
32     // Image styles (just for 2D windows)
33     if( i < 3 )
34     {
35       this->m_Styles[ i ] = vtkSmartPointer< TStyle >::New( );
36       this->m_Styles[ i ]->Configure(
37         this->m_MPRActors->GetSliceActors( i ), this->m_MPRActors
38         );
39
40       this->m_Styles[ i ]->
41         SetInteractor( this->m_Windows[ i ]->GetInteractor( ), i );
42       this->m_Styles[ i ]->SetModeToNavigation( );
43
44     } // fi
45
46   } // rof
47   if( this->m_Windows[ 3 ] != NULL )
48     this->m_Renderers[ 3 ]->SetBackground( 0.2, 0.2, 0.2 );
49
50   for( int i = 0; i < 3; ++i )
51   {
52     for( int j = 0; j < 3; ++j )
53     {
54       if(
55         this->m_Windows[ i ] != NULL &&
56         this->m_Windows[ j ] != NULL &&
57         i != j
58         )
59         this->m_Styles[ i ]->
60           AssociateInteractor( this->m_Windows[ j ]->GetInteractor( ) );
61
62     } // rof
63     if( this->m_Windows[ 3 ] != NULL )
64       this->m_Styles[ i ]->
65         AssociateInteractor( this->m_Windows[ 3 ]->GetInteractor( ) );
66
67   } // rof
68 }
69
70 // -------------------------------------------------------------------------
71 cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
72 ~MPRWithDifferentWindows( )
73 {
74 }
75
76 // -------------------------------------------------------------------------
77 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
78 SetImage( vtkImageData* image )
79 {
80   this->m_MPRActors->SetInputData( image );
81   this->m_MPRActors->PushDataInto(
82     this->m_Renderers[ 0 ],
83     this->m_Renderers[ 1 ],
84     this->m_Renderers[ 2 ],
85     this->m_Renderers[ 3 ]
86     );
87
88   // Correct cameras positions
89   vtkCamera* zCam = this->m_Renderers[ 2 ]->GetActiveCamera( );
90   zCam->SetViewUp( 0, -1, 0 );
91   zCam->SetPosition( 0, 0, -1 );
92   zCam->SetFocalPoint( 0, 0, 0 );
93
94   // First rendering
95   this->ResetCameras( );
96   this->RenderAll( );
97 }
98
99 // -------------------------------------------------------------------------
100 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
101 SetModeToNavigation( )
102 {
103   for( unsigned int i = 0; i < 3; ++i )
104   {
105     if( this->m_Styles[ i ].GetPointer( ) != NULL )
106       this->m_Styles[ i ]->SetModeToNavigation( );
107     
108   } // rof
109 }
110
111 // -------------------------------------------------------------------------
112 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
113 SetModeToDeformation( )
114 {
115   for( unsigned int i = 0; i < 3; ++i )
116   {
117     if( this->m_Styles[ i ].GetPointer( ) != NULL )
118       this->m_Styles[ i ]->SetModeToDeformation( );
119     
120   } // rof
121 }
122
123 // -------------------------------------------------------------------------
124 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
125 ResetCamera( const int& id )
126 {
127   if( id < 4 )
128     if( this->m_Windows[ id ] != NULL )
129       this->m_Renderers[ id ]->ResetCamera( );
130 }
131
132 // -------------------------------------------------------------------------
133 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
134 ResetCameras( )
135 {
136   for( int i = 0; i < 4; ++i )
137     if( this->m_Windows[ i ] != NULL )
138       this->m_Renderers[ i ]->ResetCamera( );
139 }
140
141 // -------------------------------------------------------------------------
142 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
143 Render( const int& id )
144 {
145   if( id < 4 )
146     if( this->m_Windows[ id ] != NULL )
147       this->m_Windows[ id ]->Render( );
148 }
149
150 // -------------------------------------------------------------------------
151 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
152 RenderAll( )
153 {
154   for( int i = 0; i < 4; ++i )
155     if( this->m_Windows[ i ] != NULL )
156       this->m_Windows[ i ]->Render( );
157 }
158
159 // -------------------------------------------------------------------------
160 void cpPlugins::Extensions::Visualization::MPRWithDifferentWindows::
161 Add3DActor( vtkProp3D* prop )
162 {
163   if( this->m_Renderers[ 3 ] != NULL )
164   {
165     this->m_Renderers[ 3 ]->AddActor( prop );
166     this->ResetCamera( 3 );
167     this->Render( 3 );
168
169   } // fi
170 }
171
172 // eof - $RCSfile$