1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
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
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.
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
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 # ------------------------------------------------------------------------ */
26 /*=========================================================================
29 Module: $RCSfile: wxManualTree_MPRWidget.cxx,v $
31 Date: $Date: 2012/11/15 14:14:35 $
32 Version: $Revision: 1.5 $
34 Copyright: (c) 2002, 2003
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.
41 =========================================================================*/
44 #include "wxManualTree_MPRWidget.h"
47 #include <wx/splitter.h>
48 #include <wx/notebook.h>
49 #include <wx/colordlg.h>
51 #include "vtkInteractorStyle3DView.h"
54 //-------------------------------------------------------------------
55 //-------------------------------------------------------------------
56 //-------------------------------------------------------------------
58 BEGIN_EVENT_TABLE( wxManualTree_MPRWidget, wxPanel )
59 EVT_MENU( 12121, wxManualTree_MPRWidget::OnRefreshView )
60 // EVT_MENU( 12122, wxManualTree_MPRWidget::OnDClickLeft )
64 wxManualTree_MPRWidget::wxManualTree_MPRWidget( wxWindow* parent,
65 marImageData *marimageData ,double voxelSize)
66 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
69 _voxelSize = voxelSize;
70 _marimageData = marimageData;
72 _wxvtk3Dbaseview_Clipping3D_C = NULL;
73 _wxvtkmpr3Dview_C = NULL;
74 _wxvtkclipping3Dview_C = NULL;
76 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
79 _MPRWidget2 = new wxMPRWidget2(pnlSplitter,_marimageData,voxelSize);
80 wxPanel * contour3DView = Create3DViewContour( pnlSplitter , _MPRWidget2->GetVtkMPRBaseData());
81 this->GetSize(&ww,&hh);
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);
93 //----------------------------------------------------------------------------
95 wxManualTree_MPRWidget::~wxManualTree_MPRWidget( )
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; }
103 //----------------------------------------------------------------------------
104 wxPanel* wxManualTree_MPRWidget::Create3DViewContour( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
107 wxPanel *panel=new wxPanel(parent,-1);
109 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
110 _wxvtk3Dbaseview_Clipping3D_C = new wxVtk3DBaseView( panelClipping3D );
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);
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);
124 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D_C->GetWxVTKRenderWindowInteractor();
126 wxPanel *panelControl = new wxPanel(panelClipping3D,-1);
127 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview_C->CreateControlPanel(panelControl, false);
128 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview_C->CreateSurfControlPanel(panelControl);
130 // wxBoxSizer *sizerCtrol = new wxBoxSizer(wxVERTICAL);
131 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
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();
142 while (pp->GetParent()!=NULL) pp=pp->GetParent();
143 pp->GetSize(&ww,&hh);
146 // panelClipping3D -> SetMinimumPaneSize( -50 );
147 panelClipping3D -> SplitHorizontally( panelControl,window3D, (int)(hh*0.20) );
148 wxwindow=panelClipping3D;
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);
158 // panel->FitInside();
163 //----------------------------------------------------------------------------
164 void wxManualTree_MPRWidget::ConfigureContour()
166 wxVtkBaseView *wxvtkbaseview;
167 wxvtkbaseview = _MPRWidget2->GetWxVtkBaseView(0,2);
171 wxvtkbaseview->GetSpacing(spc);
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 );
183 _mViewContour_2->SetSpacing(spc);
185 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_2 );
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 );
197 _mViewContour_0->SetSpacing(spc);
199 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_0 );
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 );
211 _mViewContour_1->SetSpacing(spc);
213 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_1 );
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 );
226 _mViewContour_p->SetSpacing(spc);
228 // wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_p );
229 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->InsertInteractorStyleMaracas( 0, _manContourControl_p );
231 vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)wxvtkbaseview;
232 _manContourControl_p->SetVtkInteractorStylePlane2D( vtkplane2Dview->GetInteractorstyleplane2D() );
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 );
244 _mViewContour_3D->SetSpacing(spc);
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 );
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() );
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 );
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 );
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 );
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 );
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 );
304 _manContourControl_0 -> CreateNewManualContour();
305 _manContourControl_1 -> CreateNewManualContour();
306 _manContourControl_2 -> CreateNewManualContour();
307 _manContourControl_p -> CreateNewManualContour();
308 _manContourControl_3V3D -> CreateNewManualContour();
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);
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);
322 _mViewContour_0 -> RefreshContour();
323 _mViewContour_1 -> RefreshContour();
324 _mViewContour_2 -> RefreshContour();
325 _mViewContour_p -> RefreshContour();
326 _mViewContour_3D -> RefreshContour();
330 //----------------------------------------------------------------------------
331 void wxManualTree_MPRWidget::ConfigureVTK(){
332 _MPRWidget2->ConfigureVTK();
333 _wxvtk3Dbaseview_Clipping3D_C -> Configure();
334 _wxvtkmpr3Dview_C -> Configure();
335 _wxvtkclipping3Dview_C -> Configure();
337 vtkInteractorStyle3DView *vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
338 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_C);
339 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_C);
340 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_C->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
345 //----------------------------------------------------------------------------
346 vtkMPRBaseData *wxManualTree_MPRWidget::GetVtkMPRBaseData(){
347 return _MPRWidget2->GetVtkMPRBaseData();
349 //----------------------------------------------------------------------------
350 vtkPlane2DView *wxManualTree_MPRWidget::GetVtkPlane2DView()
352 return _MPRWidget2->GetVtkPlane2DView();
354 //----------------------------------------------------------------------------
355 manualContourModel *wxManualTree_MPRWidget::GetManualContourModel()
357 return _mContourModel_2;
359 //----------------------------------------------------------------------------
360 void wxManualTree_MPRWidget::OnRefreshView(wxCommandEvent & event)
364 //----------------------------------------------------------------------------
365 void wxManualTree_MPRWidget::RefreshView()
367 this->_MPRWidget2->RefreshView();
368 _wxvtkmpr3Dview_C -> RefreshView();
369 _wxvtkclipping3Dview_C -> Refresh();
370 _wxvtk3Dbaseview_Clipping3D_C -> Refresh();
371 _mViewContour_p -> Refresh();
375 // EOF - wxManualTree_MPRWidget.cxx