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 "creawxVTKRenderWindowInteractor.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 crea::wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();
516 _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
517 _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
518 crea::wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();
521 _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
522 _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
523 crea::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 crea::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();
564 wxPanel *panelControl = new wxPanel(panelMPR3D,-1);
565 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview->CreateControlPanel(panelControl, false);
566 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview->CreateSurfControlPanel(panelControl);
568 // wxBoxSizer *sizerCtrol = new wxBoxSizer(wxVERTICAL);
569 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
570 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
571 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
573 panelControl->SetAutoLayout(true);
574 panelControl->SetSizer(sizerCtrol);
575 panelControl->SetSize(400,150);
576 panelControl->Layout();
579 panelMPR3D -> SetMinimumPaneSize( 5 );
580 //RaC Nov2012 Correctly resize internal panels with the window resize event
581 panelMPR3D->SetSashGravity(0.5);
582 panelMPR3D -> SplitHorizontally( panelControl,window3D,200 );
583 notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
584 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged );
585 wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
586 wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
587 wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
588 sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
589 sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
590 sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
591 // sizerH2->Add(iren3 , 1, wxALL|wxEXPAND, 2);
592 sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
594 sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
595 sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
597 panel->SetAutoLayout(true);
598 panel->SetSizer(sizerV);
599 panel->SetSize(400,400);
604 //----------------------------------------------------------------------------
605 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event)
607 if (_btnCutImageData->GetValue()==true){
609 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
611 _framePanelCutting->SetSize(550,400);
613 _panelCutting = new wxPanelCuttingImageData(_framePanelCutting);
614 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
615 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB );
617 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
618 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
619 _panelCutting->Configure( );
621 wxBoxSizer *topsizer = new wxBoxSizer(wxHORIZONTAL );
622 topsizer -> Add( _panelCutting ,1,wxALL ,0);
623 _framePanelCutting->SetAutoLayout(true);
624 _framePanelCutting->SetSizer( topsizer ); // use the sizer for layout
625 _framePanelCutting->Layout();
627 // _framePanelCutting->FitInside();
629 _framePanelCutting->Show();
633 if (_framePanelCutting!=NULL){
634 _panelCutting->RemoveActors();
635 _framePanelCutting->Destroy();
636 _framePanelCutting=NULL;
642 //----------------------------------------------------------------------------
643 void wxMPRWidget::ConfigureVTK(){
646 if (_vtkmprbasedata!=NULL)
648 _vtkmprbasedata->Configure();
649 x = _vtkmprbasedata->GetMaxPositionX()/2;
650 y = _vtkmprbasedata->GetMaxPositionY()/2;
651 z = _vtkmprbasedata->GetMaxPositionZ()/2;
652 _vtkmprbasedata->SetX( x );
653 _vtkmprbasedata->SetY( y );
654 _vtkmprbasedata->SetZ( z );
658 if(_vtkmpr2Dview[0]!=NULL) { _vtkmpr2Dview[0]->Configure(); }
659 if(_vtkmpr2Dview[1]!=NULL) { _vtkmpr2Dview[1]->Configure(); }
660 if(_vtkmpr2Dview[2]!=NULL) { _vtkmpr2Dview[2]->Configure(); }
662 if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0]->Configure(); }
663 if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1]->Configure(); }
664 if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2]->Configure(); }
666 if (_vtkplane2Dview!=NULL) { _vtkplane2Dview->Configure(); }
667 if (_widgetMesure!=NULL) { _widgetMesure->ConfigureA(_vtkplane2Dview); }
668 if (_widgetMesure!=NULL) { _widgetMesure->SetActiveLink(true); }
669 if (_wxsphereview!=NULL) { _wxsphereview->Configure(); }
671 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D->Configure();}
672 if (_wxvtkmpr3Dview!=NULL) { _wxvtkmpr3Dview->Configure(); }
673 if (_wxvtkclipping3Dview!=NULL) { _wxvtkclipping3Dview->Configure(); }
675 if (_vtkplane2Dview_B!=NULL) { _vtkplane2Dview_B->Configure(); }
676 if (_widgetMesure_B!=NULL) { _widgetMesure_B->ConfigureA( _vtkplane2Dview_B ); }
677 if (_widgetMesure_B!=NULL) { _widgetMesure_B->SetActiveLink(true); }
681 // vtkImageData *imageData = _vtkmprbasedata->GetImageData();
682 // imageData->Update();
683 // imageData->GetSpacing(spc);
684 // _widgetMesure_B->SetMesureScale(spc[0]);
687 if (_wxsphereview_B!=NULL) {_wxsphereview_B -> Configure();}
689 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) {_wxvtk3Dbaseview_MPR3D_B -> Configure();}
690 if (_wxvtkmpr3Dview_B!=NULL) {_wxvtkmpr3Dview_B -> Configure();}
692 if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL) {_wxvtk3Dbaseview_Clipping3D_BB -> Configure(); }
693 if ( _wxvtkmpr3Dview_BB!=NULL) {_wxvtkmpr3Dview_BB -> Configure(); }
694 if ( _wxvtkclipping3Dview_BB!=NULL) {_wxvtkclipping3Dview_BB -> Configure(); }
697 vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
698 if (_wxvtkmpr3Dview_BB!=NULL)
700 vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
701 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
702 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
705 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
707 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
711 // RefreshView(true);
715 //----------------------------------------------------------------------------
717 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
721 //----------------------------------------------------------------------------
722 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
724 if (_wxsphereview!=NULL) {
725 _wxsphereview -> RefreshPoint();
727 if (_wxsphereview_B!=NULL) {
728 _wxsphereview_B -> RefreshPoint();
731 //----------------------------------------------------------------------------
732 void wxMPRWidget::RefreshView(bool firsttime){
734 if (_refreshAPage == 0 )
737 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
739 _vtkmpr2Dview[2] -> Refresh();
740 _vtkmpr2Dview[1] -> Refresh();
741 _vtkmpr2Dview[0] -> Refresh();
743 if (firsttime==false)
745 _vtkmpr2Dview[2] -> RefreshView();
746 _vtkmpr2Dview[1] -> RefreshView();
747 _vtkmpr2Dview[0] -> RefreshView();
750 if (_refreshBPage == 0 )
752 if (_vtkplane2Dview!=NULL)
754 _vtkplane2Dview -> Refresh();
755 if (firsttime==false)
757 _vtkplane2Dview -> RefreshView();
759 // _wxvtk3Dbaseview_MPR3D_B -> Refresh();
762 if (_refreshBPage == 1 )
766 if (_refreshBPage == 2 )
768 if ((_wxvtkmpr3Dview!=NULL) && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
770 _wxvtkmpr3Dview -> RefreshView();
771 _wxvtk3Dbaseview_MPRClipping3D -> Refresh();
772 _wxvtkclipping3Dview -> Refresh();
778 if (_refreshAPage == 1 )
780 if (_vtkmpr2Dview_B[0] !=NULL){
781 _vtkmpr2Dview_B[0] -> Refresh();
784 if (_refreshAPage == 2 )
786 if (_vtkmpr2Dview_B[1] !=NULL){
787 _vtkmpr2Dview_B[1] -> Refresh();
790 if (_refreshAPage == 3 )
792 if (_vtkmpr2Dview_B[2] !=NULL){
793 _vtkmpr2Dview_B[2] -> Refresh();
796 if (_refreshAPage == 4 )
798 if (_vtkplane2Dview_B!=NULL){
799 _vtkplane2Dview_B -> Refresh();
800 if (firsttime==false)
802 _vtkplane2Dview_B -> RefreshView();
807 if (_refreshAPage == 5 )
811 if (_refreshAPage == 6 )
813 if (_wxvtkmpr3Dview_B!=NULL){
814 _wxvtkmpr3Dview_B -> Refresh();
815 _wxvtk3Dbaseview_MPR3D_B -> Refresh();
818 if (_refreshAPage == 7 )
820 if (_wxvtkmpr3Dview_BB!=NULL){
821 _wxvtkmpr3Dview_BB -> RefreshView();
822 _wxvtkclipping3Dview_BB -> Refresh();
823 _wxvtk3Dbaseview_Clipping3D_BB -> Refresh();
824 if (_panelCutting!=NULL)
826 _panelCutting->RefreshView();
832 //----------------------------------------------------------------------------
833 vtkMPRBaseData *wxMPRWidget::GetVtkMPRBaseData(){
834 return _vtkmprbasedata;
836 //----------------------------------------------------------------------------
837 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
839 return _vtkplane2Dview;
841 //----------------------------------------------------------------------------
842 wxVtkMPR3DView *wxMPRWidget::GetWxvtkmpr3Dview_BB()
844 return _wxvtkmpr3Dview_BB;
846 //----------------------------------------------------------------------------
847 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
849 wxVtkBaseView *result=NULL;
852 if ((id>=0) &&(id<=3)){
853 result=_vtkmpr2Dview[id];
857 result=_vtkplane2Dview;
862 //----------------------------------------------------------------------------
863 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
865 return _vtkmpr2Dview[direction];
870 //----------------------------------------------------------------------------
873 //----------------------------------------------------------------------------
874 //----------------------------------------------------------------------------
875 //----------------------------------------------------------------------------
879 // EOF - wxMPRWidget.cxx