]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxManualTree_MPRWidget.cxx
creaMaracasVisu Library
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxManualTree_MPRWidget.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxManualTree_MPRWidget.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/10/31 16:32:42 $
7   Version:   $Revision: 1.1 $
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 #include "wxManualTree_MPRWidget.h"
20
21 #include <wx/wx.h>
22 #include <wx/splitter.h>
23 #include <wx/notebook.h>
24 #include <wx/colordlg.h>
25
26
27
28 //-------------------------------------------------------------------
29 //-------------------------------------------------------------------
30 //-------------------------------------------------------------------
31
32 BEGIN_EVENT_TABLE( wxManualTree_MPRWidget, wxPanel )
33         EVT_MENU( 12121, wxManualTree_MPRWidget::OnRefreshView )
34 //      EVT_MENU( 12122, wxManualTree_MPRWidget::OnDClickLeft  )
35 END_EVENT_TABLE( );
36
37
38 wxManualTree_MPRWidget::wxManualTree_MPRWidget( wxWindow* parent,
39                           marImageData *marimageData ,double voxelSize)
40 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
41 {
42
43         _voxelSize                                                      = voxelSize;
44         _marimageData                                                   = marimageData;
45
46         _wxvtk3Dbaseview_Clipping3D_C           = NULL;
47         _wxvtkmpr3Dview_C                                       = NULL;
48         _wxvtkclipping3Dview_C                          = NULL;
49
50     wxSplitterWindow    *pnlSplitter    = new wxSplitterWindow( this , -1);
51         
52         int ww,hh;
53         _MPRWidget2                                     = new wxMPRWidget2(pnlSplitter,_marimageData,voxelSize);
54         wxPanel *       contour3DView   = Create3DViewContour( pnlSplitter , _MPRWidget2->GetVtkMPRBaseData());
55         this->GetSize(&ww,&hh);
56
57     pnlSplitter -> SplitVertically( _MPRWidget2, contour3DView , 600);
58         wxBoxSizer      *sizer  = new wxBoxSizer(wxVERTICAL  );
59         sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
60         pnlSplitter     -> SetMinimumPaneSize( 50 );
61         this            -> SetSizer(sizer);
62 //EEDxx2.4
63 //      FitInside();
64
65 }
66
67 //----------------------------------------------------------------------------
68
69 wxManualTree_MPRWidget::~wxManualTree_MPRWidget( )
70 {
71         if (_wxvtk3Dbaseview_Clipping3D_C       != NULL) { delete       _wxvtk3Dbaseview_Clipping3D_C;  }
72         if (_wxvtkmpr3Dview_C                           != NULL) { delete       _wxvtkmpr3Dview_C;                              }
73         if (_wxvtkclipping3Dview_C                      != NULL) { delete       _wxvtkclipping3Dview_C;                 }
74 }
75
76
77 //----------------------------------------------------------------------------
78 wxPanel* wxManualTree_MPRWidget::Create3DViewContour( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
79 {
80         wxWindow *wxwindow;
81         wxPanel *panel=new wxPanel(parent,-1);
82
83         wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
84         _wxvtk3Dbaseview_Clipping3D_C = new wxVtk3DBaseView( panelClipping3D );
85
86         _wxvtkclipping3Dview_C = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_C);
87         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
88         vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
89         vtkclipping3Ddataviewer->Configure();
90         _wxvtkclipping3Dview_C->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
91
92         _wxvtkmpr3Dview_C = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_C );
93         vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer(); 
94         vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
95         vtkmpr3Ddataviewer->Configure();
96         _wxvtkmpr3Dview_C->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
97
98         wxWindow        *window3D                               = _wxvtk3Dbaseview_Clipping3D_C->GetWxVTKRenderWindowInteractor();
99
100         wxPanel         *panelControl                   = new wxPanel(panelClipping3D,-1);      
101         wxPanel         *controlPanelMPR3D              = _wxvtkmpr3Dview_C->CreateControlPanel(panelControl);
102         wxPanel         *controlPanelClipping3D = _wxvtkclipping3Dview_C->CreateControlPanel(panelControl);
103
104 //      wxBoxSizer  *sizerCtrol             = new wxBoxSizer(wxVERTICAL);
105         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
106
107         sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
108         sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
109         panelControl->SetAutoLayout(true);
110         panelControl->SetSizer(sizerCtrol);
111         panelControl->SetSize(400,350);
112         panelControl->Layout();
113
114         int ww,hh;
115         wxWindow *pp=this;
116         while (pp->GetParent()!=NULL) pp=pp->GetParent();
117         pp->GetSize(&ww,&hh);
118
119 //EEDxx2.4
120 //              panelClipping3D -> SetMinimumPaneSize( -50 );
121         panelClipping3D -> SplitHorizontally( panelControl,window3D, (int)(hh*0.20) );
122         wxwindow=panelClipping3D;
123
124     wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
125         sizerH1->Add(wxwindow , 1, wxALL|wxEXPAND, 0);
126         panel->SetAutoLayout(true);
127         panel->SetSizer(sizerH1);
128         panel->SetSize(400,400);
129         panel->Layout();
130
131 //EEDxx2.4
132 //      panel->FitInside();
133 //      FitInside();
134
135         return panel;
136 }
137 //----------------------------------------------------------------------------
138 void wxManualTree_MPRWidget::ConfigureContour()
139 {       
140         wxVtkBaseView *wxvtkbaseview;
141         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,2);
142
143 //EED 3 oct 2006
144         double spc[3];
145         wxvtkbaseview->GetSpacing(spc);
146
147         _manContourControl_2    = new manualContour3VControler(2);
148         _mContourModel_2                = new manualContourModel();
149         _mViewContour_2                 = new manualView3VContour(2);
150         _mContourModel_2->SetCloseContour(false);
151         _mViewContour_2->SetModel( _mContourModel_2 );
152         _mViewContour_2->SetWxVtkBaseView( wxvtkbaseview );
153         _mViewContour_2->SetRange( 1 );
154         _mViewContour_2->SetMesureScale( _voxelSize     );
155
156 //EED 3 oct 2006
157         _mViewContour_2->SetSpacing(spc);
158
159         wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_2 );
160
161         //
162         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,0);
163         _manContourControl_0    = new manualContour3VControler(0);
164         _mViewContour_0                 = new manualView3VContour(0);
165         _mViewContour_0->SetModel( _mContourModel_2 );
166         _mViewContour_0->SetWxVtkBaseView( wxvtkbaseview );
167         _mViewContour_0->SetRange( 1 );
168         _mViewContour_0->SetMesureScale( _voxelSize     );
169
170 //EED 3 oct 2006
171         _mViewContour_0->SetSpacing(spc);
172
173         wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_0 );
174
175         //
176         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,1);
177         _manContourControl_1    = new manualContour3VControler(1);
178         _mViewContour_1                 = new manualView3VContour(1);
179         _mViewContour_1->SetModel( _mContourModel_2 );
180         _mViewContour_1->SetWxVtkBaseView( wxvtkbaseview );
181         _mViewContour_1->SetRange( 1 );
182         _mViewContour_1->SetMesureScale( _voxelSize     );
183
184 //EED 3 oct 2006
185         _mViewContour_1->SetSpacing(spc);
186
187         wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_1 );
188
189
190         // perpendicular plane
191         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,3);
192         _manContourControl_p    = new manualContourPerpPlaneControler();
193         _mViewContour_p                 = new manualViewPerpPlaneContour();
194         _mViewContour_p         ->      SetModel( _mContourModel_2 );
195         _mViewContour_p         ->      SetWxVtkBaseView( wxvtkbaseview );
196         _mViewContour_p         ->      SetRange( 1 );
197         _mViewContour_p->SetMesureScale( _voxelSize     );
198
199 //EED 3 oct 2006
200         _mViewContour_p->SetSpacing(spc);
201
202 //      wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_p );
203         wxvtkbaseview->GetInteractorStyleBaseView()->InsertInteractorStyleMaracas( 0, _manContourControl_p );
204
205         vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)wxvtkbaseview;
206         _manContourControl_p->SetVtkInteractorStylePlane2D( vtkplane2Dview->GetInteractorstyleplane2D() );
207
208         //
209         wxvtkbaseview                           = _wxvtkclipping3Dview_C->GetWxvtk3Dbaseview();
210         _manContourControl_3V3D         = new manualContour3V3DControler();
211         _mViewContour_3D                        = new manualView3DContour();
212         _mViewContour_3D->SetModel( _mContourModel_2 );
213         _mViewContour_3D->SetWxVtkBaseView( wxvtkbaseview );
214         _mViewContour_3D->SetRange( 1 );
215         _mViewContour_3D->SetMesureScale(_voxelSize     );
216
217 //EED 3 oct 2006
218         _mViewContour_3D->SetSpacing(spc);
219
220         int dim[3];
221         this->_marimageData->GetImageData()->GetDimensions( dim );  // image t=0
222         _mViewContour_3D->SetDimensions( dim[0],dim[1],dim[2] );
223         _mViewContour_3D->SetVtkMPRBaseData( _wxvtkmpr3Dview_C->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData() );
224         wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_3V3D );
225
226         //
227         _manContourControl_0    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
228         _manContourControl_1    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
229         _manContourControl_2    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
230         _manContourControl_p    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
231         _manContourControl_3V3D -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
232
233         _manContourControl_0    -> SetModelView( _mContourModel_2 , _mViewContour_0 );
234         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_1    );
235         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_2    );
236         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_p    );
237         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_3D   );
238
239         _manContourControl_1    -> SetModelView( _mContourModel_2 , _mViewContour_1);
240         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_2    );
241         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_0    );
242         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_p    );
243         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_3D   );
244
245         _manContourControl_2    -> SetModelView( _mContourModel_2 , _mViewContour_2 );
246         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_0    );
247         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_1    );
248         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_p    );
249         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_3D   );
250
251
252         //
253         wxvtkbaseview                           = _wxvtkclipping3Dview_C->GetWxvtk3Dbaseview();
254         manualContour3VControler *_manContourControl_3V = new manualContour3VControler(-1);
255         _manContourControl_3V   -> SetModelView( _mContourModel_2 , _mViewContour_3D );
256         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_2    );
257         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_0    );
258         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_1    );
259         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_p    );
260         _manContourControl_3V   -> SetVtkInteractorStyleBaseView (wxvtkbaseview->GetInteractorStyleBaseView() );
261         _manContourControl_3V3D -> SetManualContour3VControler( _manContourControl_3V );
262         _manContourControl_3V3D -> SetModelView( _mContourModel_2 , _mViewContour_3D );
263
264         //
265         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,3);
266         manualContour3VControler *_manContourControl_3V_p = new manualContour3VControler(-1);
267         _manContourControl_3V_p -> SetModelView( _mContourModel_2 , _mViewContour_p );
268         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_2    );
269         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_0    );
270         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_1    );
271         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_3D   );
272         _manContourControl_3V_p -> SetVtkInteractorStyleBaseView (wxvtkbaseview->GetInteractorStyleBaseView() );
273         _manContourControl_p    -> SetManualContour3VControler( _manContourControl_3V_p );
274         _manContourControl_p    -> SetModelView( _mContourModel_2 , _mViewContour_p );
275
276
277         //
278         _manContourControl_0    -> CreateNewManualContour();
279         _manContourControl_1    -> CreateNewManualContour();
280         _manContourControl_2    -> CreateNewManualContour();
281         _manContourControl_p    -> CreateNewManualContour();
282         _manContourControl_3V3D -> CreateNewManualContour();
283
284         _manContourControl_0    -> SetActive(true);
285         _manContourControl_1    -> SetActive(true);
286         _manContourControl_2    -> SetActive(true);
287         _manContourControl_p    -> SetActive(true);
288         _manContourControl_3V3D -> SetActive(true);
289
290         _manContourControl_0    -> SetEasyCreation(false);
291         _manContourControl_1    -> SetEasyCreation(false);
292         _manContourControl_2    -> SetEasyCreation(false);
293         _manContourControl_p    -> SetEasyCreation(false);
294         _manContourControl_3V3D -> SetEasyCreation(false);
295
296         _mViewContour_0                 -> RefreshContour();
297         _mViewContour_1                 -> RefreshContour();
298         _mViewContour_2                 -> RefreshContour();
299         _mViewContour_p                 -> RefreshContour();
300         _mViewContour_3D                -> RefreshContour();
301
302 }
303
304 //----------------------------------------------------------------------------
305 void wxManualTree_MPRWidget::ConfigureVTK(){
306         _MPRWidget2->ConfigureVTK();
307         _wxvtk3Dbaseview_Clipping3D_C   ->  Configure();
308         _wxvtkmpr3Dview_C                               ->      Configure();
309         _wxvtkclipping3Dview_C                  ->      Configure();
310
311         vtkInteractorStyle3DView *vtkinteractorstyle3Dview      = new vtkInteractorStyle3DView();
312         vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_C);
313         vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_C);
314         _wxvtk3Dbaseview_Clipping3D_C->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
315
316         ConfigureContour();
317 }
318
319 //----------------------------------------------------------------------------
320 vtkMPRBaseData  *wxManualTree_MPRWidget::GetVtkMPRBaseData(){
321         return _MPRWidget2->GetVtkMPRBaseData();
322 }
323 //----------------------------------------------------------------------------
324 vtkPlane2DView *wxManualTree_MPRWidget::GetVtkPlane2DView()
325 {
326         return _MPRWidget2->GetVtkPlane2DView();
327 }
328 //----------------------------------------------------------------------------
329 manualContourModel *wxManualTree_MPRWidget::GetManualContourModel()
330 {
331         return _mContourModel_2;
332 }
333 //----------------------------------------------------------------------------
334 void wxManualTree_MPRWidget::OnRefreshView(wxCommandEvent & event)
335 {
336         RefreshView();
337 }
338 //----------------------------------------------------------------------------
339 void wxManualTree_MPRWidget::RefreshView()
340 {
341         this->_MPRWidget2->RefreshView();
342         _wxvtkmpr3Dview_C                               -> RefreshView();
343         _wxvtkclipping3Dview_C                  -> Refresh();
344         _wxvtk3Dbaseview_Clipping3D_C   -> Refresh();
345         _mViewContour_p                                 -> Refresh();
346 }
347
348
349 // EOF - wxManualTree_MPRWidget.cxx
350
351
352
353