]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_ViewerWidget.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracas_ViewerWidget.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracas_ViewerWidget.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/03/24 10:49:21 $
7   Version:   $Revision: 1.4 $
8
9   Copyright: (c) 2002, 2003
10   License:
11   
12      This software is distributed WITHOUT ANY WARRANTY; without even 
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17
18 //------------------------------------------------------------------------------------------------------------
19 // Definition includes
20 //------------------------------------------------------------------------------------------------------------
21 #include "wxMaracas_ViewerWidget.h"
22
23 //------------------------------------------------------------------------------------------------------------
24 // Other includes
25 //------------------------------------------------------------------------------------------------------------
26
27
28         //------------------------------------------------------------------------------------------------------------
29         // Constructors & Destructors
30         //------------------------------------------------------------------------------------------------------------
31
32
33         wxMaracas_ViewerWidget::wxMaracas_ViewerWidget(wxWindow *parent, vtkImageData* imagedata, int type)
34                 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
35         {
36                 wxPanel *panel = this;
37                 wxWindow *wxwindow = NULL;
38
39                 mType = type;
40
41         marImageData    *marimagedata   = new marImageData( imagedata );                        
42                 mvtkmprbasedata                                 = new vtkMPRBaseData(); 
43                 mvtkmprbasedata->SetMarImageData(marimagedata);
44
45                 mvtk2Dbaseview                          = NULL;
46                 mvtkmpr2Dview_X                         = NULL;
47                 mvtkmpr2Dview_Y                         = NULL;
48                 mvtkmpr2Dview_Z                         = NULL;
49                 mvtkplane2Dview                         = NULL;
50                 mwidgetMesure                           = NULL;
51                 mwxsphereview                           = NULL;
52                 mwxvtkclipping3Dview            = NULL;
53                 mwxvtk3Dbaseview_Clipping3D     = NULL;
54                 mwxvtkmpr3Dview                         = NULL; 
55
56
57                 std::cout<<"mtype "<<mType<<std::endl;
58                 std::cout<<"type "<<type<<std::endl;
59                 if (type==-1)
60                 {
61                         mvtk2Dbaseview  = new wxVtk2DBaseView(panel);
62                         mvtk2Dbaseview->SetVtkBaseData(mvtkmprbasedata);
63                         wxwindow                = mvtk2Dbaseview->GetWxVTKRenderWindowInteractor();
64                 }
65
66
67                 if (type==0)
68                 {
69                         mvtkmpr2Dview_Z = new wxVtkMPR2DView(panel,0);
70                         mvtkmpr2Dview_Z->SetVtkBaseData(mvtkmprbasedata);
71                         wxwindow                = mvtkmpr2Dview_Z->GetWxVTKRenderWindowInteractor();
72                 }
73                 if (type==1)
74                 {
75                         mvtkmpr2Dview_X = new wxVtkMPR2DView(panel,1);
76                         mvtkmpr2Dview_X->SetVtkBaseData(mvtkmprbasedata);
77                         wxwindow                =       mvtkmpr2Dview_X->GetWxVTKRenderWindowInteractor();
78                 }
79
80                 if (type==2)
81                 {
82                         mvtkmpr2Dview_Y = new wxVtkMPR2DView(panel,2);
83                         mvtkmpr2Dview_Y->SetVtkBaseData(mvtkmprbasedata);
84                         wxwindow                = mvtkmpr2Dview_Y->GetWxVTKRenderWindowInteractor();
85                 }
86
87
88                 if (type==3)
89                 {
90                         mwidgetMesure           = new wxWidgetMesure2D_Plane_in_MPR(panel);
91                         mvtkplane2Dview         = new vtkPlane2DView( mwidgetMesure->GetWindow2());
92                         mwidgetMesure   -> SetVtkPlane2DView( mvtkplane2Dview );
93                         mvtkplane2Dview -> SetImgSize( 200 );
94                         mvtkplane2Dview -> SetVtkBaseData(mvtkmprbasedata);
95                         wxwindow                        = mwidgetMesure;
96                 }
97                 if (type==4)
98                 {
99                         mwxsphereview           = new wxSphereView( panel , mvtkmprbasedata, mvtkmprbasedata->GetImageData() );
100                         wxwindow=mwxsphereview->GetWxVTKRenderWindowInteractor();
101                 }
102
103
104                 if (type==5)
105                 {
106                         wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
107                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
108
109                         mwxvtkclipping3Dview                                            = new wxVtkClipping3DView(mwxvtk3Dbaseview_Clipping3D);
110                         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
111                         vtkclipping3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
112                         vtkclipping3Ddataviewer->Configure();
113                         mwxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
114
115                         mwxvtkmpr3Dview                                                 = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
116                         vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer(); 
117                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
118                         vtkmpr3Ddataviewer->Configure();
119                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
120
121                         wxWindow        *window3D                                       = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
122
123                         wxPanel                 *panelControl                   = new wxPanel(panelClipping3D,-1);      
124                         wxPanel                 *controlPanelMPR3D              = mwxvtkmpr3Dview->CreateControlPanel(panelControl);
125                         wxPanel                 *controlPanelClipping3D = mwxvtkclipping3Dview->CreateControlPanel(panelControl);
126         //                               mbtnCutImageData               = new wxCheckBox(panelControl,-1,_T("Cut Module"));
127         //              Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
128
129                         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
130                         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
131                         sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
132         //              sizerCtrol->Add( mbtnCutImageData               , 1, wxALL, 2);
133
134                         panelControl->SetAutoLayout(true);
135                         panelControl->SetSizer(sizerCtrol);
136                         panelControl->SetSize(400,350);
137                         panelControl->Layout();
138                         panelClipping3D -> SetMinimumPaneSize( 5 );
139                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
140                         wxwindow=panelClipping3D;
141                 }
142
143                 if (type==6)
144                 {
145                         wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
146                         mwxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
147
148                         mwxvtkmpr3Dview                                                 = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
149                         vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer(); 
150                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
151                         vtkmpr3Ddataviewer->Configure();
152                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
153
154                         wxWindow        *window3D                                       = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
155
156                         wxPanel                 *panelControl                   = new wxPanel(panelClipping3D,-1);      
157                         wxPanel                 *controlPanelMPR3D              = mwxvtkmpr3Dview->CreateControlPanel(panelControl);
158
159                         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
160                         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
161
162                         panelControl->SetAutoLayout(true);
163                         panelControl->SetSizer(sizerCtrol);
164                         panelControl->SetSize(400,350);
165                         panelControl->Layout();
166                         panelClipping3D -> SetMinimumPaneSize( 5 );
167                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
168                         wxwindow=panelClipping3D;
169                 }
170
171
172
173         wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
174         sizer->Add( wxwindow , 1, wxGROW);      
175         panel->SetSizer(sizer);
176         panel->SetAutoLayout(true);
177         sizer->Layout();
178         panel->Layout();
179         panel->Refresh();
180
181         //   mbbtkViewerMaracas= NULL;
182         }
183         //-------------------------------------------------------------------------
184           
185         wxMaracas_ViewerWidget::~wxMaracas_ViewerWidget()
186         {
187
188                 testDelete(mvtkmprbasedata);
189                 testDelete(mvtk2Dbaseview);
190                 testDelete(mvtkmpr2Dview_X); 
191                 testDelete(mvtkmpr2Dview_Y); 
192                 testDelete(mvtkmpr2Dview_Z); 
193                 testDelete(mwidgetMesure);
194                 testDelete(mvtkplane2Dview);
195                 testDelete(mwxsphereview); 
196                 testDelete(mwxvtkclipping3Dview);
197                 testDelete(mwxvtk3Dbaseview_Clipping3D);
198                 testDelete(mwxvtkmpr3Dview);
199
200         }
201
202         void wxMaracas_ViewerWidget::testDelete(void* point){
203                 if(point!=NULL){
204                         delete point;
205                 }
206         }
207             
208         //------------------------------------------------------------------------------------------------------------
209         // Methods
210         //------------------------------------------------------------------------------------------------------------
211
212         //-------------------------------------------------------------------------
213
214         void wxMaracas_ViewerWidget::ConfigureVTK()
215         {
216                 int x=0,y=0,z=0;
217
218                 if ( mvtk2Dbaseview                             !=NULL ) { mvtk2Dbaseview                               ->      Configure();                            }
219                 if ( mvtkmpr2Dview_X                    !=NULL ) { mvtkmpr2Dview_X                              ->      Configure();                            }
220                 if ( mvtkmpr2Dview_Y                    !=NULL ) { mvtkmpr2Dview_Y                              ->      Configure();                            }
221                 if ( mvtkmpr2Dview_Z                    !=NULL ) { mvtkmpr2Dview_Z                              ->      Configure();                            }
222                 if ( mvtkplane2Dview                    !=NULL ) { mvtkplane2Dview                              ->      Configure();                            }
223                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      ConfigureA(mvtkplane2Dview);}
224                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      ConfigureA(mvtkplane2Dview);}
225                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      SetActiveLink(true);            }
226                 if ( mwidgetMesure                              !=NULL ) { mwidgetMesure                                ->      SetMesureScale( 1 );            }
227                 if ( mwxsphereview                              !=NULL ) { mwxsphereview                                ->      Configure();                            }
228
229                 if (mwxvtk3Dbaseview_Clipping3D !=NULL) { mwxvtk3Dbaseview_Clipping3D   ->      Configure();                            }
230                 if (mwxvtkmpr3Dview                             !=NULL) { mwxvtkmpr3Dview                               ->      Configure();                            }
231                 if (mwxvtkclipping3Dview                !=NULL) { mwxvtkclipping3Dview                  ->      Configure();                            }
232
233                 if (mvtkmprbasedata!=NULL)
234                 {
235                         x = mvtkmprbasedata     ->      GetMaxPositionX()/2;
236                         y = mvtkmprbasedata     ->      GetMaxPositionY()/2;
237                         z = mvtkmprbasedata     ->      GetMaxPositionZ()/2;
238                         mvtkmprbasedata->SetX( x );
239                         mvtkmprbasedata->SetY( y );
240                         mvtkmprbasedata->SetZ( z );
241                 }
242                 RefreshView();
243         }
244
245         //-------------------------------------------------------------------------
246
247   void wxMaracas_ViewerWidget::Refresh(bool eraseBackground ,const wxRect* rect  )  // virtual  eraseBackground=true , rect=NULL
248   {
249     wxPanel::Refresh(false);
250   }
251
252         //-------------------------------------------------------------------------
253         void wxMaracas_ViewerWidget::RefreshView()
254         {
255                         if (mvtk2Dbaseview                              !=NULL ){ mvtk2Dbaseview                                -> Refresh();           }
256                         if (mvtkmpr2Dview_X                             !=NULL ){ mvtkmpr2Dview_X                               -> Refresh();           }
257                         if (mvtkmpr2Dview_Y                             !=NULL ){ mvtkmpr2Dview_Y                               -> Refresh();           }
258                         if (mvtkmpr2Dview_Z                             !=NULL ){ mvtkmpr2Dview_Z                               -> Refresh();           }
259                         if (mvtkplane2Dview                             !=NULL ){ mvtkplane2Dview                               -> Refresh();           }
260                         if (mwxsphereview                               !=NULL ){ mwxsphereview                                 -> Refresh();           }
261
262                         if (mwxvtkmpr3Dview                             !=NULL ){ mwxvtkmpr3Dview                               -> RefreshView();       }
263                         if (mwxvtkclipping3Dview                !=NULL ){ mwxvtkclipping3Dview                  -> Refresh();           }
264                         if (mwxvtk3Dbaseview_Clipping3D !=NULL ){ mwxvtk3Dbaseview_Clipping3D   -> Refresh();           }
265         }
266
267         //-------------------------------------------------------------------------
268
269         wxVtkBaseView *wxMaracas_ViewerWidget::GetwxVtkBaseView()
270         {
271                 wxVtkBaseView *wxvtkbaseview=NULL;
272                 if (mvtk2Dbaseview!=NULL)                               { wxvtkbaseview = mvtk2Dbaseview;                       }
273                 if (mvtkmpr2Dview_X!=NULL)                              { wxvtkbaseview = mvtkmpr2Dview_X;                      }
274                 if (mvtkmpr2Dview_Y!=NULL)                              { wxvtkbaseview = mvtkmpr2Dview_Y;                      }
275                 if (mvtkmpr2Dview_Z!=NULL)                              { wxvtkbaseview = mvtkmpr2Dview_Z;                      }
276                 if (mvtkplane2Dview!=NULL)                              { wxvtkbaseview = mvtkplane2Dview;                      }
277                 if (mwxsphereview!=NULL)                                { wxvtkbaseview = mwxsphereview;                        }
278                 if (mwxvtk3Dbaseview_Clipping3D!=NULL)  { wxvtkbaseview = mwxvtk3Dbaseview_Clipping3D;}
279                 return wxvtkbaseview   ;
280         }
281
282         void wxMaracas_ViewerWidget::SetImage( vtkImageData *image      )
283         {
284                 //printf("EED wxMaracas_ViewerWidget::SetImage   IMPORTANT this methode is missing \n");
285                 marImageData* mar = mvtkmprbasedata->GetMarImageData();
286                 mar->removeImageData(0);
287                 mar->AddImageData(image);
288
289                 ConfigureVTK();
290                 RefreshView();
291
292
293
294         }
295
296         double wxMaracas_ViewerWidget :: GetX()
297         {
298                 return mvtkmprbasedata->GetX();
299         }
300
301         double wxMaracas_ViewerWidget :: GetY()
302         {
303                 return mvtkmprbasedata->GetY();
304         }
305
306         double wxMaracas_ViewerWidget :: GetZ()
307         {
308                 return mvtkmprbasedata->GetZ();
309 //              return mvtk2Dbaseview->GetVtkBaseData()->GetZ();
310         }
311