]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxManualTree_MPRWidget.cxx
eafbb9a4a9d3512c03b1e01f6d1d4b72c0c56be5
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxManualTree_MPRWidget.cxx
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4 #                        pour la Sant�)
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
8 #
9 #  This software is governed by the CeCILL-B license under French law and
10 #  abiding by the rules of distribution of free software. You can  use,
11 #  modify and/ or redistribute the software under the terms of the CeCILL-B
12 #  license as circulated by CEA, CNRS and INRIA at the following URL
13 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 #  or in the file LICENSE.txt.
15 #
16 #  As a counterpart to the access to the source code and  rights to copy,
17 #  modify and redistribute granted by the license, users are provided only
18 #  with a limited warranty  and the software's author,  the holder of the
19 #  economic rights,  and the successive licensors  have only  limited
20 #  liability.
21 #
22 #  The fact that you are presently reading this means that you have had
23 #  knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
25
26 /*=========================================================================
27
28   Program:   wxMaracas
29   Module:    $RCSfile: wxManualTree_MPRWidget.cxx,v $
30   Language:  C++
31   Date:      $Date: 2012/11/15 14:14:35 $
32   Version:   $Revision: 1.5 $
33
34   Copyright: (c) 2002, 2003
35   License:
36
37      This software is distributed WITHOUT ANY WARRANTY; without even
38      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
39      PURPOSE.  See the above copyright notice for more information.
40
41 =========================================================================*/
42
43
44 #include "wxManualTree_MPRWidget.h"
45
46 #include <wx/wx.h>
47 #include <wx/splitter.h>
48 #include <wx/notebook.h>
49 #include <wx/colordlg.h>
50
51 #include "vtkInteractorStyle3DView.h"
52
53
54 //-------------------------------------------------------------------
55 //-------------------------------------------------------------------
56 //-------------------------------------------------------------------
57
58 BEGIN_EVENT_TABLE( wxManualTree_MPRWidget, wxPanel )
59         EVT_MENU( 12121, wxManualTree_MPRWidget::OnRefreshView )
60 //      EVT_MENU( 12122, wxManualTree_MPRWidget::OnDClickLeft  )
61 END_EVENT_TABLE( );
62
63
64 wxManualTree_MPRWidget::wxManualTree_MPRWidget( wxWindow* parent,
65                           marImageData *marimageData ,double voxelSize)
66 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
67 {
68
69         _voxelSize                                                      = voxelSize;
70         _marimageData                                                   = marimageData;
71
72         _wxvtk3Dbaseview_Clipping3D_C           = NULL;
73         _wxvtkmpr3Dview_C                                       = NULL;
74         _wxvtkclipping3Dview_C                          = NULL;
75
76     wxSplitterWindow    *pnlSplitter    = new wxSplitterWindow( this , -1);
77         
78         int ww,hh;
79         _MPRWidget2                                     = new wxMPRWidget2(pnlSplitter,_marimageData,voxelSize);
80         wxPanel *       contour3DView   = Create3DViewContour( pnlSplitter , _MPRWidget2->GetVtkMPRBaseData());
81         this->GetSize(&ww,&hh);
82
83     pnlSplitter -> SplitVertically( _MPRWidget2, contour3DView , 600);
84         wxBoxSizer      *sizer  = new wxBoxSizer(wxVERTICAL  );
85         sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
86         pnlSplitter     -> SetMinimumPaneSize( 50 );
87         this            -> SetSizer(sizer);
88 //EEDxx2.4
89 //      FitInside();
90
91 }
92
93 //----------------------------------------------------------------------------
94
95 wxManualTree_MPRWidget::~wxManualTree_MPRWidget( )
96 {
97         if (_wxvtk3Dbaseview_Clipping3D_C       != NULL) { delete       _wxvtk3Dbaseview_Clipping3D_C;  }
98         if (_wxvtkmpr3Dview_C                           != NULL) { delete       _wxvtkmpr3Dview_C;                              }
99         if (_wxvtkclipping3Dview_C                      != NULL) { delete       _wxvtkclipping3Dview_C;                 }
100 }
101
102
103 //----------------------------------------------------------------------------
104 wxPanel* wxManualTree_MPRWidget::Create3DViewContour( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
105 {
106         wxWindow *wxwindow;
107         wxPanel *panel=new wxPanel(parent,-1);
108
109         wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
110         _wxvtk3Dbaseview_Clipping3D_C = new wxVtk3DBaseView( panelClipping3D, vtkmprbasedata );
111
112         _wxvtkclipping3Dview_C = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_C);
113         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
114         vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
115         vtkclipping3Ddataviewer->Configure();
116         _wxvtkclipping3Dview_C->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
117
118         _wxvtkmpr3Dview_C = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_C );
119         vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer(); 
120         vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
121         vtkmpr3Ddataviewer->Configure();
122         _wxvtkmpr3Dview_C->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
123
124         wxWindow        *window3D                               = _wxvtk3Dbaseview_Clipping3D_C->GetWxVTKRenderWindowInteractor();
125
126         wxPanel         *panelControl                   = new wxPanel(panelClipping3D,-1);      
127         wxPanel         *controlPanelMPR3D              = _wxvtkmpr3Dview_C->CreateControlPanel(panelControl, false);
128         wxPanel         *controlPanelClipping3D = _wxvtkclipping3Dview_C->CreateSurfControlPanel(panelControl);
129
130 //      wxBoxSizer  *sizerCtrol             = new wxBoxSizer(wxVERTICAL);
131         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
132
133         sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
134         sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
135         panelControl->SetAutoLayout(true);
136         panelControl->SetSizer(sizerCtrol);
137         panelControl->SetSize(400,350);
138         panelControl->Layout();
139
140         int ww,hh;
141         wxWindow *pp=this;
142         while (pp->GetParent()!=NULL) pp=pp->GetParent();
143         pp->GetSize(&ww,&hh);
144
145 //EEDxx2.4
146 //              panelClipping3D -> SetMinimumPaneSize( -50 );
147         panelClipping3D -> SplitHorizontally( panelControl,window3D, (int)(hh*0.20) );
148         wxwindow=panelClipping3D;
149
150     wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
151         sizerH1->Add(wxwindow , 1, wxALL|wxEXPAND, 0);
152         panel->SetAutoLayout(true);
153         panel->SetSizer(sizerH1);
154         panel->SetSize(400,400);
155         panel->Layout();
156
157 //EEDxx2.4
158 //      panel->FitInside();
159 //      FitInside();
160
161         return panel;
162 }
163 //----------------------------------------------------------------------------
164 void wxManualTree_MPRWidget::ConfigureContour()
165 {       
166         wxVtkBaseView *wxvtkbaseview;
167         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,2);
168
169 //EED 3 oct 2006
170         double spc[3];
171         wxvtkbaseview->GetSpacing(spc);
172
173         _manContourControl_2    = new manualContour3VControler(2);
174         _mContourModel_2                = new manualContourModel();
175         _mViewContour_2                 = new manualView3VContour(2);
176         _mContourModel_2->SetCloseContour(false);
177         _mViewContour_2->SetModel( _mContourModel_2 );
178         _mViewContour_2->SetWxVtkBaseView( wxvtkbaseview );
179         _mViewContour_2->SetRange( 1 );
180         _mViewContour_2->SetMesureScale( _voxelSize     );
181
182 //EED 3 oct 2006
183         _mViewContour_2->SetSpacing(spc);
184
185         ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_2 );
186
187         //
188         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,0);
189         _manContourControl_0    = new manualContour3VControler(0);
190         _mViewContour_0                 = new manualView3VContour(0);
191         _mViewContour_0->SetModel( _mContourModel_2 );
192         _mViewContour_0->SetWxVtkBaseView( wxvtkbaseview );
193         _mViewContour_0->SetRange( 1 );
194         _mViewContour_0->SetMesureScale( _voxelSize     );
195
196 //EED 3 oct 2006
197         _mViewContour_0->SetSpacing(spc);
198
199         ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_0 );
200
201         //
202         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,1);
203         _manContourControl_1    = new manualContour3VControler(1);
204         _mViewContour_1                 = new manualView3VContour(1);
205         _mViewContour_1->SetModel( _mContourModel_2 );
206         _mViewContour_1->SetWxVtkBaseView( wxvtkbaseview );
207         _mViewContour_1->SetRange( 1 );
208         _mViewContour_1->SetMesureScale( _voxelSize     );
209
210 //EED 3 oct 2006
211         _mViewContour_1->SetSpacing(spc);
212
213         ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_1 );
214
215
216         // perpendicular plane
217         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,3);
218         _manContourControl_p    = new manualContourPerpPlaneControler();
219         _mViewContour_p                 = new manualViewPerpPlaneContour();
220         _mViewContour_p         ->      SetModel( _mContourModel_2 );
221         _mViewContour_p         ->      SetWxVtkBaseView( wxvtkbaseview );
222         _mViewContour_p         ->      SetRange( 1 );
223         _mViewContour_p->SetMesureScale( _voxelSize     );
224
225 //EED 3 oct 2006
226         _mViewContour_p->SetSpacing(spc);
227
228 //      wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_p );
229         ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->InsertInteractorStyleMaracas( 0, _manContourControl_p );
230
231         vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)wxvtkbaseview;
232         _manContourControl_p->SetVtkInteractorStylePlane2D( vtkplane2Dview->GetInteractorstyleplane2D() );
233
234         //
235         wxvtkbaseview                           = _wxvtkclipping3Dview_C->GetWxvtk3Dbaseview();
236         _manContourControl_3V3D         = new manualContour3V3DControler();
237         _mViewContour_3D                        = new manualView3DContour();
238         _mViewContour_3D->SetModel( _mContourModel_2 );
239         _mViewContour_3D->SetWxVtkBaseView( wxvtkbaseview );
240         _mViewContour_3D->SetRange( 1 );
241         _mViewContour_3D->SetMesureScale(_voxelSize     );
242
243 //EED 3 oct 2006
244         _mViewContour_3D->SetSpacing(spc);
245
246         int dim[3];
247         this->_marimageData->GetImageData()->GetDimensions( dim );  // image t=0
248         _mViewContour_3D->SetDimensions( dim[0],dim[1],dim[2] );
249         _mViewContour_3D->SetVtkMPRBaseData( _wxvtkmpr3Dview_C->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData() );
250         ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_3V3D );
251
252         //
253         _manContourControl_0    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
254         _manContourControl_1    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
255         _manContourControl_2    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
256         _manContourControl_p    -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
257         _manContourControl_3V3D -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
258
259         _manContourControl_0    -> SetModelView( _mContourModel_2 , _mViewContour_0 );
260         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_1    );
261         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_2    );
262         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_p    );
263         _manContourControl_0    -> AddManualViewBaseContour( _mViewContour_3D   );
264
265         _manContourControl_1    -> SetModelView( _mContourModel_2 , _mViewContour_1);
266         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_2    );
267         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_0    );
268         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_p    );
269         _manContourControl_1    -> AddManualViewBaseContour( _mViewContour_3D   );
270
271         _manContourControl_2    -> SetModelView( _mContourModel_2 , _mViewContour_2 );
272         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_0    );
273         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_1    );
274         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_p    );
275         _manContourControl_2    -> AddManualViewBaseContour( _mViewContour_3D   );
276
277
278         //
279         wxvtkbaseview                           = _wxvtkclipping3Dview_C->GetWxvtk3Dbaseview();
280         manualContour3VControler *_manContourControl_3V = new manualContour3VControler(-1);
281         _manContourControl_3V   -> SetModelView( _mContourModel_2 , _mViewContour_3D );
282         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_2    );
283         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_0    );
284         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_1    );
285         _manContourControl_3V   -> AddManualViewBaseContour( _mViewContour_p    );
286         _manContourControl_3V   -> SetVtkInteractorStyleBaseView ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView() );
287         _manContourControl_3V3D -> SetManualContour3VControler( _manContourControl_3V );
288         _manContourControl_3V3D -> SetModelView( _mContourModel_2 , _mViewContour_3D );
289
290         //
291         wxvtkbaseview                   = _MPRWidget2->GetWxVtkBaseView(0,3);
292         manualContour3VControler *_manContourControl_3V_p = new manualContour3VControler(-1);
293         _manContourControl_3V_p -> SetModelView( _mContourModel_2 , _mViewContour_p );
294         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_2    );
295         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_0    );
296         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_1    );
297         _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_3D   );
298         _manContourControl_3V_p -> SetVtkInteractorStyleBaseView ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView() );
299         _manContourControl_p    -> SetManualContour3VControler( _manContourControl_3V_p );
300         _manContourControl_p    -> SetModelView( _mContourModel_2 , _mViewContour_p );
301
302
303         //
304         _manContourControl_0    -> CreateNewManualContour();
305         _manContourControl_1    -> CreateNewManualContour();
306         _manContourControl_2    -> CreateNewManualContour();
307         _manContourControl_p    -> CreateNewManualContour();
308         _manContourControl_3V3D -> CreateNewManualContour();
309
310         _manContourControl_0    -> SetActive(true);
311         _manContourControl_1    -> SetActive(true);
312         _manContourControl_2    -> SetActive(true);
313         _manContourControl_p    -> SetActive(true);
314         _manContourControl_3V3D -> SetActive(true);
315
316         _manContourControl_0    -> SetEasyCreation(false);
317         _manContourControl_1    -> SetEasyCreation(false);
318         _manContourControl_2    -> SetEasyCreation(false);
319         _manContourControl_p    -> SetEasyCreation(false);
320         _manContourControl_3V3D -> SetEasyCreation(false);
321
322         _mViewContour_0                 -> RefreshContour();
323         _mViewContour_1                 -> RefreshContour();
324         _mViewContour_2                 -> RefreshContour();
325         _mViewContour_p                 -> RefreshContour();
326         _mViewContour_3D                -> RefreshContour();
327
328 }
329
330 //----------------------------------------------------------------------------
331 void wxManualTree_MPRWidget::ConfigureVTK(){
332         _MPRWidget2->ConfigureVTK();
333         _wxvtk3Dbaseview_Clipping3D_C   ->  Configure();
334         _wxvtkmpr3Dview_C                               ->      Configure();
335         _wxvtkclipping3Dview_C                  ->      Configure();
336
337         vtkInteractorStyle3DView *vtkinteractorstyle3Dview      = new vtkInteractorStyle3DView();
338         vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_C);
339         vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_C);
340         ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_C->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
341
342         ConfigureContour();
343 }
344
345 //----------------------------------------------------------------------------
346 vtkMPRBaseData  *wxManualTree_MPRWidget::GetVtkMPRBaseData(){
347         return _MPRWidget2->GetVtkMPRBaseData();
348 }
349 //----------------------------------------------------------------------------
350 vtkPlane2DView *wxManualTree_MPRWidget::GetVtkPlane2DView()
351 {
352         return _MPRWidget2->GetVtkPlane2DView();
353 }
354 //----------------------------------------------------------------------------
355 manualContourModel *wxManualTree_MPRWidget::GetManualContourModel()
356 {
357         return _mContourModel_2;
358 }
359 //----------------------------------------------------------------------------
360 void wxManualTree_MPRWidget::OnRefreshView(wxCommandEvent & event)
361 {
362         RefreshView();
363 }
364 //----------------------------------------------------------------------------
365 void wxManualTree_MPRWidget::RefreshView()
366 {
367         this->_MPRWidget2->RefreshView();
368         _wxvtkmpr3Dview_C                               -> RefreshView();
369         _wxvtkclipping3Dview_C                  -> Refresh();
370         _wxvtk3Dbaseview_Clipping3D_C   -> Refresh();
371         _mViewContour_p                                 -> Refresh();
372 }
373
374
375 // EOF - wxManualTree_MPRWidget.cxx
376
377
378
379