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: wxMPRWidget.cxx,v $
31 Date: $Date: 2012/11/15 14:14:35 $
32 Version: $Revision: 1.17 $
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 <vtkObjectFactory.h>
45 #include <vtkInteractorStyleSwitch.h>
46 #include <vtkCamera.h>
47 #include <vtkImageActor.h>
48 #include <vtkRenderer.h>
49 #include <vtkRenderWindowInteractor.h>
50 #include <vtkRenderWindow.h>
52 #include <vtkRenderer.h>
53 #include <vtkImageViewer2.h>
54 #include <vtkInteractorStyleImage.h>
56 #include <vtkProperty.h>
57 #include <vtkPolyData.h>
58 #include <vtkDataSet.h>
59 #include <vtkStripper.h>
60 #include <vtkCellArray.h>
61 #include <vtkPointData.h>
62 #include <vtkInteractorStyleTrackballCamera.h>
64 #include <vtkPlanes.h>
65 #include <vtkProbeFilter.h>
67 #include <vtkPointPicker.h>
70 #include "vtkClosePolyData.h"
71 #include <vtkTriangleFilter.h>
72 #include <vtkSTLWriter.h>
73 #include <vtkPolyDataConnectivityFilter.h>
75 // EED 25 Janvier 2007 - TestLoic
76 #include <vtkCutter.h>
77 #include <vtkWindowLevelLookupTable.h>
78 #include <vtkLookupTable.h>
79 #include <vtkMetaImageWriter.h>
83 #include "wxMPRWidget.h"
84 #include "wxVTKRenderWindowInteractor.h"
85 #include "UtilVtk3DGeometriSelection.h"
86 #include "../kernel/marDicomBase.h"
90 #include <wx/notebook.h>
91 #include <wx/colordlg.h>
99 #include "pPlotter/HistogramDialog.h"
101 #include "vtkInteractorStyle3DView.h"
103 //-------------------------------------------------------------------
104 //-------------------------------------------------------------------
105 //-------------------------------------------------------------------
109 //-------------------------------------------------------------------
110 //-------------------------------------------------------------------
111 //-------------------------------------------------------------------
113 BEGIN_EVENT_TABLE( wxMPRWidget, wxPanel )
114 EVT_MENU( 12121, wxMPRWidget::OnRefreshView )
115 EVT_MENU( 12122, wxMPRWidget::OnDClickLeft )
120 wxMPRWidget::wxMPRWidget( wxWindow* parent,
121 marImageData *marimageData )
122 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
125 _vtkmpr2Dview[0] = NULL;
126 _vtkmpr2Dview[1] = NULL;
127 _vtkmpr2Dview[2] = NULL;
128 _vtkplane2Dview = NULL;
129 _widgetMesure = NULL;
130 _wxsphereview = NULL;
131 _wxvtk3Dbaseview_MPRClipping3D = NULL;
132 _wxvtkmpr3Dview = NULL;
133 _wxvtkclipping3Dview = NULL;
134 _vtkplane2Dview_B = NULL;
135 _widgetMesure_B = NULL;
137 _vtkmpr2Dview_B[0] = NULL;
138 _vtkmpr2Dview_B[1] = NULL;
139 _vtkmpr2Dview_B[2] = NULL;
140 _vtkplane2Dview_B = NULL;
141 _widgetMesure_B = NULL;
142 _wxsphereview_B = NULL;
143 _wxvtk3Dbaseview_MPR3D_B = NULL;
144 _wxvtkmpr3Dview_B = NULL;
145 _wxvtk3Dbaseview_Clipping3D_BB = NULL;
146 _wxvtkmpr3Dview_BB = NULL;
147 _wxvtkclipping3Dview_BB = NULL;
149 _vtkmprbasedata = NULL;
153 _framePanelCutting = NULL;
154 _panelCutting = NULL;
157 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL );
160 if(marimageData!=NULL){
161 _marImageData = marimageData;
162 _vtkmprbasedata = new vtkMPRBaseData();
163 _vtkmprbasedata->SetMarImageData(_marImageData);
168 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
169 pnlSplitter -> SetMinimumPaneSize( 2 );
170 //RaC Nov2012 Correctly resize internal panels with the window resize event
171 pnlSplitter->SetSashGravity(0.5);
173 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
174 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
175 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
177 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
183 //while (pp->GetParent()!=NULL) pp=pp->GetParent();
184 //pp->GetSize(&ww,&hh);
186 this -> SetAutoLayout( true );
187 this -> SetSizer(sizer);
188 // sizer -> Fit( this );
194 //----------------------------------------------------------------------------
195 void wxMPRWidget::setImageData(vtkImageData * img)
198 if(_marImageData!=NULL){
199 _marImageData->removeImageData(0);
200 _marImageData->AddImageData(img);
202 _marImageData = new marImageData(img);
205 if(_vtkmprbasedata==NULL){
206 _vtkmprbasedata = new vtkMPRBaseData();
207 _vtkmprbasedata->SetMarImageData(_marImageData);
209 wxSplitterWindow *pnlSplitter= new wxSplitterWindow( this , -1);
210 pnlSplitter -> SetMinimumPaneSize( 2 );
211 //RaC Nov2012 Correctly resize internal panels with the window resize event
212 pnlSplitter->SetSashGravity(0.5);
214 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
215 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
216 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
218 this->GetSizer() -> Add( pnlSplitter ,1,wxGROW ,0);
222 //----------------------------------------------------------------------------
223 wxMPRWidget::~wxMPRWidget( )
226 if (_framePanelCutting!=NULL)
228 _framePanelCutting->Close();
231 if (_vtkmpr2Dview[0]!=NULL) { delete _vtkmpr2Dview[0]; }
232 if (_vtkmpr2Dview[1]!=NULL) { delete _vtkmpr2Dview[1]; }
233 if (_vtkmpr2Dview[2]!=NULL) { delete _vtkmpr2Dview[2]; }
235 if (_vtkmpr2Dview_B[0]!=NULL) { delete _vtkmpr2Dview_B[0]; }
237 if (_vtkmpr2Dview_B[1]!=NULL) { delete _vtkmpr2Dview_B[1]; }
238 if (_vtkmpr2Dview_B[2]!=NULL) { delete _vtkmpr2Dview_B[2]; }
240 if (_vtkmprbasedata!=NULL) { delete _vtkmprbasedata; }
241 if (_vtkplane2Dview!=NULL) { delete _vtkplane2Dview; }
242 if (_wxsphereview!=NULL) { delete _wxsphereview; }
243 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL) { delete _wxvtk3Dbaseview_MPRClipping3D; }
244 if (_wxvtkmpr3Dview!=NULL) { delete _wxvtkmpr3Dview; }
245 if (_wxvtkclipping3Dview!=NULL) { delete _wxvtkclipping3Dview; }
247 if (_vtkplane2Dview_B!=NULL) { delete _vtkplane2Dview_B; }
248 if (_wxsphereview_B!=NULL) { delete _wxsphereview_B; }
250 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) { delete _wxvtk3Dbaseview_MPR3D_B; }
251 if (_wxvtkmpr3Dview_B!=NULL) { delete _wxvtkmpr3Dview_B; }
253 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL) { delete _wxvtk3Dbaseview_Clipping3D_BB; }
254 if (_wxvtkmpr3Dview_BB!=NULL) { delete _wxvtkmpr3Dview_BB; }
255 if (_wxvtkclipping3Dview_BB!=NULL) { delete _wxvtkclipping3Dview_BB; }
258 //----------------------------------------------------------------------------
260 wxPanel* wxMPRWidget::CreateControlPanel(wxWindow *parent)
263 wxPanel *panel=new wxPanel(parent,-1);
266 // wxStaticText *tmpText = new wxStaticText(panel,-1,"");
268 wxStaticText *help0Text = new wxStaticText(panel,-1,_T("General: \n middle click : contrast\n ctrl + middle click : rotate image\n shift + middle click: translate image\n ctrl + right click: zoom"));
270 wxStaticText *help1Text = new wxStaticText(panel,-1,_T("mpr2D: \n double click : choose a point\n mouse right : change perpendicular slice\n drag axis: change slice"));
272 wxStaticText *help2Text = new wxStaticText(panel,-1,_T("Plane: \n drag mouse: rotate\n ctrl + drag mouse : fix axis rotation\n \n mouse right: change perpendicular slice \n see split control \n - Active/Desactivet plane tool\n - Center market\n - Rotation axis market\n - 2D messure tool (open/close contour)"));
274 wxStaticText *help3Text = new wxStaticText(panel,-1,
275 _T("Sphere: \n drag mouse: rotation\n mouse right: change radio \n click: 3D point selection in MPR 2D \n double clicks in MPR: show surface sphere"));
277 wxStaticText *help4Text = new wxStaticText(panel,-1,_T("MPR3D:\n see split control"));
279 wxString text=_T("");
280 text=text+_T("Clipping: \n");
281 text=text+_T(" see split control \n");
282 text=text+_T(" 4 MarchingCubes: \n");
283 text=text+_T(" color, isovalue, opacity \n");
284 text=text+_T(" Box:\n");
285 text=text+_T(" mouse left drag (box): rotation\n");
286 text=text+_T(" mouse left drag (sphere): size,position\n");
287 text=text+_T(" mouse right drag (box): box size");
288 text=text+_T(" Axis: 3D\n");
289 text=text+_T(" mouse drag: translate\n");
290 text=text+_T(" shift + mouse drag: translate 2 axis\n");
291 text=text+_T(" mouse right: scale\n");
292 text=text+_T(" Plane 3D:\n");
293 text=text+_T(" mouse drag perpendicular axis: rotate plane\n");
294 text=text+_T(" mouse drag spheres: size plane\n");
295 text=text+_T(" ctrl +mouse right over the plane: size plane\n");
296 text=text+_T(" mouse drag plane: translate\n");
297 text=text+_T(" middle click perpendicular axis: translate\n");
298 wxStaticText *help5Text = new wxStaticText(panel,-1, text );
301 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
302 sizer->Add( new wxStaticText(panel,-1,_T("")) );
303 sizer->Add( new wxStaticText(panel,-1,_T("")) );
304 sizer->Add( help0Text );
306 sizer->Add( new wxStaticText(panel,-1,_T("")) );
307 sizer->Add( new wxStaticText(panel,-1,_T("")) );
308 sizer->Add( help1Text );
310 sizer->Add( new wxStaticText(panel,-1,_T("")) );
311 sizer->Add( new wxStaticText(panel,-1,_T("")) );
312 sizer->Add( help2Text );
314 sizer->Add( new wxStaticText(panel,-1,_T("")) );
315 sizer->Add( new wxStaticText(panel,-1,_T("")) );
316 sizer->Add( help3Text );
318 sizer->Add( new wxStaticText(panel,-1,_T("")) );
319 sizer->Add( new wxStaticText(panel,-1,_T("")) );
320 sizer->Add( help4Text );
322 sizer->Add( new wxStaticText(panel,-1,_T("")) );
323 sizer->Add( new wxStaticText(panel,-1,_T("")) );
324 sizer->Add( help5Text );
326 panel->SetSizer(sizer);
327 panel->SetAutoLayout(true);
328 panel->SetSize(350,500);
333 //----------------------------------------------------------------------------
335 void wxMPRWidget::OnPageAChanged(wxNotebookEvent & event)
337 _refreshAPage=event.GetSelection();
342 //----------------------------------------------------------------------------
344 void wxMPRWidget::OnPageBChanged(wxNotebookEvent & event)
346 _refreshBPage=event.GetSelection();
352 //----------------------------------------------------------------------------
354 wxPanel* wxMPRWidget::CreateView(int type,wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
357 wxPanel *panel=new wxPanel(parent,-1);
361 _vtkmpr2Dview_B[0] = new wxVtkMPR2DView(panel,0);
362 _vtkmpr2Dview_B[0]->SetVtkBaseData(vtkmprbasedata);
363 wxwindow=_vtkmpr2Dview_B[0]->GetWxVTKRenderWindowInteractor();
367 _vtkmpr2Dview_B[1] = new wxVtkMPR2DView(panel,1);
368 _vtkmpr2Dview_B[1]->SetVtkBaseData(vtkmprbasedata);
369 wxwindow=_vtkmpr2Dview_B[1]->GetWxVTKRenderWindowInteractor();
373 _vtkmpr2Dview_B[2] = new wxVtkMPR2DView(panel,2);
374 _vtkmpr2Dview_B[2]->SetVtkBaseData(vtkmprbasedata);
375 wxwindow=_vtkmpr2Dview_B[2]->GetWxVTKRenderWindowInteractor();
379 _widgetMesure_B = new wxWidgetMesure2D_Plane_in_MPR(panel);
380 _vtkplane2Dview_B = new vtkPlane2DView( _widgetMesure_B->GetWindow2());
381 _widgetMesure_B->SetVtkPlane2DView( _vtkplane2Dview_B );
382 _vtkplane2Dview_B->SetImgSize( 200 );
383 _vtkplane2Dview_B->SetVtkBaseData(vtkmprbasedata);
384 wxwindow = _widgetMesure_B;
389 // _wxsphereview_B = new wxSphereView( panel , vtkmprbasedata, vtkmprbasedata->GetImageData() );
390 _wxsphereview_B = new wxSphereView( panel , vtkmprbasedata );
391 wxwindow=_wxsphereview_B->GetWxVTKRenderWindowInteractor();
396 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( panel , -1);
397 _wxvtk3Dbaseview_MPR3D_B = new wxVtk3DBaseView( panelMPR3D , vtkmprbasedata );
399 _wxvtkmpr3Dview_B = new wxVtkMPR3DView(_wxvtk3Dbaseview_MPR3D_B);
400 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
401 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
402 vtkmpr3Ddataviewer->Configure();
403 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
405 wxWindow *window3D = _wxvtk3Dbaseview_MPR3D_B->GetWxVTKRenderWindowInteractor();
406 wxPanel *controlPanel3D = _wxvtkmpr3Dview_B->CreateControlPanel(panelMPR3D, false);
409 panelMPR3D -> SetMinimumPaneSize( 5 );
410 panelMPR3D -> SplitHorizontally( controlPanel3D,window3D,600 );
411 //RaC Nov2012 Correctly resize internal panels with the window resize event
412 panelMPR3D->SetSashGravity(0.5);
419 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
420 _wxvtk3Dbaseview_Clipping3D_BB = new wxVtk3DBaseView( panelClipping3D , vtkmprbasedata );
422 _wxvtkclipping3Dview_BB = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_BB);
423 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
424 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
425 vtkclipping3Ddataviewer->Configure();
426 _wxvtkclipping3Dview_BB->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
428 _wxvtkmpr3Dview_BB = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_BB );
429 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
430 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
431 vtkmpr3Ddataviewer->Configure();
432 _wxvtkmpr3Dview_BB->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
434 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D_BB->GetWxVTKRenderWindowInteractor();
436 wxPanel *panelControl = new wxPanel(panelClipping3D,-1);
437 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview_BB->CreateControlPanel(panelControl, false);
438 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview_BB->CreateSurfControlPanel(panelControl);
439 _btnCutImageData = new wxCheckBox(panelControl,-1,_T("Cut Module"));
440 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
442 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
443 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
444 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
445 sizerCtrol->Add( _btnCutImageData , 1, wxALL, 2);
447 panelControl->SetAutoLayout(true);
448 panelControl->SetSizer(sizerCtrol);
449 panelControl->SetSize(400,350);
450 panelControl->Layout();
452 // panelControl->FitInside();
455 panelClipping3D -> SetMinimumPaneSize( 5 );
456 panelClipping3D -> SplitHorizontally( panelControl , window3D , 10 );
457 //RaC Nov2012 Correctly resize internal panels with the window resize event
458 panelClipping3D->SetSashGravity(0.5);
459 wxwindow=panelClipping3D;
462 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
463 sizerH1->Add(wxwindow , 1, wxALL|wxGROW, 0);
464 panel->SetAutoLayout(true);
465 panel->SetSizer(sizerH1);
466 panel->SetSize(400,400);
472 //----------------------------------------------------------------------------
474 wxPanel* wxMPRWidget::CreateMPRPanel(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
476 wxPanel *panel=new wxPanel(parent,-1);
478 wxNotebook *notebook = new wxNotebook( panel, -1 );
480 notebook->AddPage( CreateMPRPanel4View( notebook ,vtkmprbasedata), _T("4-View") );
481 notebook->AddPage( CreateView(0,notebook,vtkmprbasedata) , _T("Axial") );
482 notebook->AddPage( CreateView(1,notebook,vtkmprbasedata) , _T("Sagital") );
483 notebook->AddPage( CreateView(2,notebook,vtkmprbasedata) , _T("Coronal") );
484 notebook->AddPage( CreateView(3,notebook,vtkmprbasedata) , _T("Plane") );
485 notebook->AddPage( CreateView(4,notebook,vtkmprbasedata) , _T("Sphere") );
486 notebook->AddPage( CreateView(5,notebook,vtkmprbasedata) , _T("MPR 3D") );
487 notebook->AddPage( CreateView(6,notebook,vtkmprbasedata) , _T("Clipping") );
488 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageAChanged );
490 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
491 sizer->Add(notebook , 1, wxALL|wxGROW, 2);
492 panel->SetAutoLayout(true);
493 panel->SetSizer(sizer);
494 panel->SetSize(400,400);
498 // panel->FitInside();
504 //----------------------------------------------------------------------------
506 wxPanel* wxMPRWidget::CreateMPRPanel4View(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
508 wxPanel *panel=new wxPanel(parent,-1);
511 _vtkmpr2Dview[0] = new wxVtkMPR2DView(panel,0);
512 _vtkmpr2Dview[0]->SetVtkBaseData(vtkmprbasedata);
513 wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();
516 _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
517 _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
518 wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();
521 _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
522 _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
523 wxVTKRenderWindowInteractor *iren2 = _vtkmpr2Dview[2]->GetWxVTKRenderWindowInteractor();
526 wxNotebook *notebook = new wxNotebook( panel, -1 );
527 notebook->SetSize(400,400);
531 _widgetMesure = new wxWidgetMesure2D_Plane_in_MPR(notebook);
532 _vtkplane2Dview = new vtkPlane2DView( _widgetMesure->GetWindow2() );
533 _widgetMesure->SetVtkPlane2DView( _vtkplane2Dview );
534 _vtkplane2Dview->SetImgSize( 200 );
535 _vtkplane2Dview->SetVtkBaseData(vtkmprbasedata);
536 notebook->AddPage( _widgetMesure, _T("Plane") );
540 // _wxsphereview = new wxSphereView( notebook , vtkmprbasedata, vtkmprbasedata->GetImageData());
541 _wxsphereview = new wxSphereView( notebook , vtkmprbasedata );
542 wxVTKRenderWindowInteractor *iren3B = _wxsphereview->GetWxVTKRenderWindowInteractor();
543 notebook->AddPage( iren3B, _T("Sphere") );
546 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( notebook , -1);
547 _wxvtk3Dbaseview_MPRClipping3D = new wxVtk3DBaseView( panelMPR3D ,vtkmprbasedata );
549 _wxvtkmpr3Dview = new wxVtkMPR3DView( _wxvtk3Dbaseview_MPRClipping3D );
550 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
551 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
552 vtkmpr3Ddataviewer->Configure();
553 _wxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
556 _wxvtkclipping3Dview = new wxVtkClipping3DView( _wxvtk3Dbaseview_MPRClipping3D );
557 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
558 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
559 vtkclipping3Ddataviewer->Configure();
560 _wxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
563 wxWindow *window3D = _wxvtk3Dbaseview_MPRClipping3D->GetWxVTKRenderWindowInteractor();
565 wxPanel *panelControl = new wxPanel(panelMPR3D,-1);
566 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview->CreateControlPanel(panelControl, false);
567 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview->CreateSurfControlPanel(panelControl);
572 // wxBoxSizer *sizerCtrol = new wxBoxSizer(wxVERTICAL);
573 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
574 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
575 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
578 panelControl->SetAutoLayout(true);
579 panelControl->SetSizer(sizerCtrol);
580 panelControl->SetSize(400,150);
581 panelControl->Layout();
584 panelMPR3D -> SetMinimumPaneSize( 5 );
585 //RaC Nov2012 Correctly resize internal panels with the window resize event
586 panelMPR3D->SetSashGravity(0.5);
587 panelMPR3D -> SplitHorizontally( panelControl,window3D,200 );
589 notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
592 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged );
594 wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
595 wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
596 wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
597 sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
598 sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
599 sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
600 // sizerH2->Add(iren3 , 1, wxALL|wxEXPAND, 2);
601 sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
603 sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
604 sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
606 panel->SetAutoLayout(true);
607 panel->SetSizer(sizerV);
608 panel->SetSize(400,400);
613 //----------------------------------------------------------------------------
614 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event)
616 if (_btnCutImageData->GetValue()==true){
618 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
620 _framePanelCutting->SetSize(550,400);
622 _panelCutting = new wxPanelCuttingImageData(_framePanelCutting);
623 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
624 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB );
626 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
627 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
628 _panelCutting->Configure( );
630 wxBoxSizer *topsizer = new wxBoxSizer(wxHORIZONTAL );
631 topsizer -> Add( _panelCutting ,1,wxALL ,0);
632 _framePanelCutting->SetAutoLayout(true);
633 _framePanelCutting->SetSizer( topsizer ); // use the sizer for layout
634 _framePanelCutting->Layout();
636 // _framePanelCutting->FitInside();
638 _framePanelCutting->Show();
642 if (_framePanelCutting!=NULL){
643 _panelCutting->RemoveActors();
644 _framePanelCutting->Destroy();
645 _framePanelCutting=NULL;
651 //----------------------------------------------------------------------------
652 void wxMPRWidget::ConfigureVTK(){
655 if (_vtkmprbasedata!=NULL)
657 _vtkmprbasedata->Configure();
658 x = _vtkmprbasedata->GetMaxPositionX()/2;
659 y = _vtkmprbasedata->GetMaxPositionY()/2;
660 z = _vtkmprbasedata->GetMaxPositionZ()/2;
661 _vtkmprbasedata->SetX( x );
662 _vtkmprbasedata->SetY( y );
663 _vtkmprbasedata->SetZ( z );
667 if(_vtkmpr2Dview[0]!=NULL) { _vtkmpr2Dview[0]->Configure(); }
668 if(_vtkmpr2Dview[1]!=NULL) { _vtkmpr2Dview[1]->Configure(); }
669 if(_vtkmpr2Dview[2]!=NULL) { _vtkmpr2Dview[2]->Configure(); }
671 if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0]->Configure(); }
672 if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1]->Configure(); }
673 if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2]->Configure(); }
675 if (_vtkplane2Dview!=NULL) { _vtkplane2Dview->Configure(); }
676 if (_widgetMesure!=NULL) { _widgetMesure->ConfigureA(_vtkplane2Dview); }
677 if (_widgetMesure!=NULL) { _widgetMesure->SetActiveLink(true); }
678 if (_wxsphereview!=NULL) { _wxsphereview->Configure(); }
680 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D->Configure();}
681 if (_wxvtkmpr3Dview!=NULL) { _wxvtkmpr3Dview->Configure(); }
682 if (_wxvtkclipping3Dview!=NULL) { _wxvtkclipping3Dview->Configure(); }
684 if (_vtkplane2Dview_B!=NULL) { _vtkplane2Dview_B->Configure(); }
685 if (_widgetMesure_B!=NULL) { _widgetMesure_B->ConfigureA( _vtkplane2Dview_B ); }
686 if (_widgetMesure_B!=NULL) { _widgetMesure_B->SetActiveLink(true); }
690 // vtkImageData *imageData = _vtkmprbasedata->GetImageData();
691 // imageData->Update();
692 // imageData->GetSpacing(spc);
693 // _widgetMesure_B->SetMesureScale(spc[0]);
696 if (_wxsphereview_B!=NULL) {_wxsphereview_B -> Configure();}
698 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) {_wxvtk3Dbaseview_MPR3D_B -> Configure();}
699 if (_wxvtkmpr3Dview_B!=NULL) {_wxvtkmpr3Dview_B -> Configure();}
701 if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL) {_wxvtk3Dbaseview_Clipping3D_BB -> Configure(); }
702 if ( _wxvtkmpr3Dview_BB!=NULL) {_wxvtkmpr3Dview_BB -> Configure(); }
703 if ( _wxvtkclipping3Dview_BB!=NULL) {_wxvtkclipping3Dview_BB -> Configure(); }
706 vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
707 if (_wxvtkmpr3Dview_BB!=NULL)
709 vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
710 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
711 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
714 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
716 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
720 // RefreshView(true);
724 //----------------------------------------------------------------------------
726 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
730 //----------------------------------------------------------------------------
731 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
733 if (_wxsphereview!=NULL) {
734 _wxsphereview -> RefreshPoint();
736 if (_wxsphereview_B!=NULL) {
737 _wxsphereview_B -> RefreshPoint();
740 //----------------------------------------------------------------------------
741 void wxMPRWidget::RefreshView(bool firsttime){
743 if (_refreshAPage == 0 )
746 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
748 _vtkmpr2Dview[2] -> Refresh();
749 _vtkmpr2Dview[1] -> Refresh();
750 _vtkmpr2Dview[0] -> Refresh();
752 if (firsttime==false)
754 _vtkmpr2Dview[2] -> RefreshView();
755 _vtkmpr2Dview[1] -> RefreshView();
756 _vtkmpr2Dview[0] -> RefreshView();
759 if (_refreshBPage == 0 )
761 if (_vtkplane2Dview!=NULL)
763 _vtkplane2Dview -> Refresh();
764 if (firsttime==false)
766 _vtkplane2Dview -> RefreshView();
768 // _wxvtk3Dbaseview_MPR3D_B -> Refresh();
771 if (_refreshBPage == 1 )
775 if (_refreshBPage == 2 )
777 if ((_wxvtkmpr3Dview!=NULL) && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
779 _wxvtkmpr3Dview -> RefreshView();
780 _wxvtk3Dbaseview_MPRClipping3D -> Refresh();
781 _wxvtkclipping3Dview -> Refresh();
787 if (_refreshAPage == 1 )
789 if (_vtkmpr2Dview_B[0] !=NULL){
790 _vtkmpr2Dview_B[0] -> Refresh();
793 if (_refreshAPage == 2 )
795 if (_vtkmpr2Dview_B[1] !=NULL){
796 _vtkmpr2Dview_B[1] -> Refresh();
799 if (_refreshAPage == 3 )
801 if (_vtkmpr2Dview_B[2] !=NULL){
802 _vtkmpr2Dview_B[2] -> Refresh();
805 if (_refreshAPage == 4 )
807 if (_vtkplane2Dview_B!=NULL){
808 _vtkplane2Dview_B -> Refresh();
809 if (firsttime==false)
811 _vtkplane2Dview_B -> RefreshView();
816 if (_refreshAPage == 5 )
820 if (_refreshAPage == 6 )
822 if (_wxvtkmpr3Dview_B!=NULL){
823 _wxvtkmpr3Dview_B -> Refresh();
824 _wxvtk3Dbaseview_MPR3D_B -> Refresh();
827 if (_refreshAPage == 7 )
829 if (_wxvtkmpr3Dview_BB!=NULL){
830 _wxvtkmpr3Dview_BB -> RefreshView();
831 _wxvtkclipping3Dview_BB -> Refresh();
832 _wxvtk3Dbaseview_Clipping3D_BB -> Refresh();
833 if (_panelCutting!=NULL)
835 _panelCutting->RefreshView();
841 //----------------------------------------------------------------------------
842 vtkMPRBaseData *wxMPRWidget::GetVtkMPRBaseData(){
843 return _vtkmprbasedata;
845 //----------------------------------------------------------------------------
846 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
848 return _vtkplane2Dview;
850 //----------------------------------------------------------------------------
851 wxVtkMPR3DView *wxMPRWidget::GetWxvtkmpr3Dview_BB()
853 return _wxvtkmpr3Dview_BB;
855 //----------------------------------------------------------------------------
856 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
858 wxVtkBaseView *result=NULL;
861 if ((id>=0) &&(id<=3)){
862 result=_vtkmpr2Dview[id];
866 result=_vtkplane2Dview;
871 //----------------------------------------------------------------------------
872 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
874 return _vtkmpr2Dview[direction];
879 //----------------------------------------------------------------------------
882 //----------------------------------------------------------------------------
883 //----------------------------------------------------------------------------
884 //----------------------------------------------------------------------------
888 // EOF - wxMPRWidget.cxx