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 , double voxelSize)
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 _voxelSize = voxelSize;
163 _vtkmprbasedata = new vtkMPRBaseData();
164 _vtkmprbasedata->SetMarImageData(_marImageData);
169 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
170 pnlSplitter -> SetMinimumPaneSize( 2 );
171 //RaC Nov2012 Correctly resize internal panels with the window resize event
172 pnlSplitter->SetSashGravity(0.5);
174 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
175 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
176 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
178 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
184 //while (pp->GetParent()!=NULL) pp=pp->GetParent();
185 //pp->GetSize(&ww,&hh);
187 this -> SetAutoLayout( true );
188 this -> SetSizer(sizer);
189 // sizer -> Fit( this );
195 //----------------------------------------------------------------------------
196 void wxMPRWidget::setImageData(vtkImageData * img, double voxelsize)
199 if(_marImageData!=NULL){
200 _marImageData->removeImageData(0);
201 _marImageData->AddImageData(img);
203 _marImageData = new marImageData(img);
206 _voxelSize = voxelsize;
208 if(_vtkmprbasedata==NULL){
209 _vtkmprbasedata = new vtkMPRBaseData();
210 _vtkmprbasedata->SetMarImageData(_marImageData);
212 wxSplitterWindow *pnlSplitter= new wxSplitterWindow( this , -1);
213 pnlSplitter -> SetMinimumPaneSize( 2 );
214 //RaC Nov2012 Correctly resize internal panels with the window resize event
215 pnlSplitter->SetSashGravity(0.5);
217 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
218 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
219 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
221 this->GetSizer() -> Add( pnlSplitter ,1,wxGROW ,0);
225 //----------------------------------------------------------------------------
226 wxMPRWidget::~wxMPRWidget( )
229 if (_framePanelCutting!=NULL)
231 _framePanelCutting->Close();
234 if (_vtkmpr2Dview[0]!=NULL) { delete _vtkmpr2Dview[0]; }
235 if (_vtkmpr2Dview[1]!=NULL) { delete _vtkmpr2Dview[1]; }
236 if (_vtkmpr2Dview[2]!=NULL) { delete _vtkmpr2Dview[2]; }
238 if (_vtkmpr2Dview_B[0]!=NULL) { delete _vtkmpr2Dview_B[0]; }
240 if (_vtkmpr2Dview_B[1]!=NULL) { delete _vtkmpr2Dview_B[1]; }
241 if (_vtkmpr2Dview_B[2]!=NULL) { delete _vtkmpr2Dview_B[2]; }
243 if (_vtkmprbasedata!=NULL) { delete _vtkmprbasedata; }
244 if (_vtkplane2Dview!=NULL) { delete _vtkplane2Dview; }
245 if (_wxsphereview!=NULL) { delete _wxsphereview; }
246 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL) { delete _wxvtk3Dbaseview_MPRClipping3D; }
247 if (_wxvtkmpr3Dview!=NULL) { delete _wxvtkmpr3Dview; }
248 if (_wxvtkclipping3Dview!=NULL) { delete _wxvtkclipping3Dview; }
250 if (_vtkplane2Dview_B!=NULL) { delete _vtkplane2Dview_B; }
251 if (_wxsphereview_B!=NULL) { delete _wxsphereview_B; }
253 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) { delete _wxvtk3Dbaseview_MPR3D_B; }
254 if (_wxvtkmpr3Dview_B!=NULL) { delete _wxvtkmpr3Dview_B; }
256 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL) { delete _wxvtk3Dbaseview_Clipping3D_BB; }
257 if (_wxvtkmpr3Dview_BB!=NULL) { delete _wxvtkmpr3Dview_BB; }
258 if (_wxvtkclipping3Dview_BB!=NULL) { delete _wxvtkclipping3Dview_BB; }
261 //----------------------------------------------------------------------------
263 wxPanel* wxMPRWidget::CreateControlPanel(wxWindow *parent)
266 wxPanel *panel=new wxPanel(parent,-1);
269 // wxStaticText *tmpText = new wxStaticText(panel,-1,"");
271 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"));
273 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"));
275 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)"));
277 wxStaticText *help3Text = new wxStaticText(panel,-1,
278 _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"));
280 wxStaticText *help4Text = new wxStaticText(panel,-1,_T("MPR3D:\n see split control"));
282 wxString text=_T("");
283 text=text+_T("Clipping: \n");
284 text=text+_T(" see split control \n");
285 text=text+_T(" 4 MarchingCubes: \n");
286 text=text+_T(" color, isovalue, opacity \n");
287 text=text+_T(" Box:\n");
288 text=text+_T(" mouse left drag (box): rotation\n");
289 text=text+_T(" mouse left drag (sphere): size,position\n");
290 text=text+_T(" mouse right drag (box): box size");
291 text=text+_T(" Axis: 3D\n");
292 text=text+_T(" mouse drag: translate\n");
293 text=text+_T(" shift + mouse drag: translate 2 axis\n");
294 text=text+_T(" mouse right: scale\n");
295 text=text+_T(" Plane 3D:\n");
296 text=text+_T(" mouse drag perpendicular axis: rotate plane\n");
297 text=text+_T(" mouse drag spheres: size plane\n");
298 text=text+_T(" ctrl +mouse right over the plane: size plane\n");
299 text=text+_T(" mouse drag plane: translate\n");
300 text=text+_T(" middle click perpendicular axis: translate\n");
301 wxStaticText *help5Text = new wxStaticText(panel,-1, text );
304 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
305 sizer->Add( new wxStaticText(panel,-1,_T("")) );
306 sizer->Add( new wxStaticText(panel,-1,_T("")) );
307 sizer->Add( help0Text );
309 sizer->Add( new wxStaticText(panel,-1,_T("")) );
310 sizer->Add( new wxStaticText(panel,-1,_T("")) );
311 sizer->Add( help1Text );
313 sizer->Add( new wxStaticText(panel,-1,_T("")) );
314 sizer->Add( new wxStaticText(panel,-1,_T("")) );
315 sizer->Add( help2Text );
317 sizer->Add( new wxStaticText(panel,-1,_T("")) );
318 sizer->Add( new wxStaticText(panel,-1,_T("")) );
319 sizer->Add( help3Text );
321 sizer->Add( new wxStaticText(panel,-1,_T("")) );
322 sizer->Add( new wxStaticText(panel,-1,_T("")) );
323 sizer->Add( help4Text );
325 sizer->Add( new wxStaticText(panel,-1,_T("")) );
326 sizer->Add( new wxStaticText(panel,-1,_T("")) );
327 sizer->Add( help5Text );
329 panel->SetSizer(sizer);
330 panel->SetAutoLayout(true);
331 panel->SetSize(350,500);
336 //----------------------------------------------------------------------------
338 void wxMPRWidget::OnPageAChanged(wxNotebookEvent & event)
340 _refreshAPage=event.GetSelection();
345 //----------------------------------------------------------------------------
347 void wxMPRWidget::OnPageBChanged(wxNotebookEvent & event)
349 _refreshBPage=event.GetSelection();
355 //----------------------------------------------------------------------------
357 wxPanel* wxMPRWidget::CreateView(int type,wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
360 wxPanel *panel=new wxPanel(parent,-1);
364 _vtkmpr2Dview_B[0] = new wxVtkMPR2DView(panel,0);
365 _vtkmpr2Dview_B[0]->SetVtkBaseData(vtkmprbasedata);
366 wxwindow=_vtkmpr2Dview_B[0]->GetWxVTKRenderWindowInteractor();
370 _vtkmpr2Dview_B[1] = new wxVtkMPR2DView(panel,1);
371 _vtkmpr2Dview_B[1]->SetVtkBaseData(vtkmprbasedata);
372 wxwindow=_vtkmpr2Dview_B[1]->GetWxVTKRenderWindowInteractor();
376 _vtkmpr2Dview_B[2] = new wxVtkMPR2DView(panel,2);
377 _vtkmpr2Dview_B[2]->SetVtkBaseData(vtkmprbasedata);
378 wxwindow=_vtkmpr2Dview_B[2]->GetWxVTKRenderWindowInteractor();
382 _widgetMesure_B = new wxWidgetMesure2D_Plane_in_MPR(panel);
383 _vtkplane2Dview_B = new vtkPlane2DView( _widgetMesure_B->GetWindow2());
384 _widgetMesure_B->SetVtkPlane2DView( _vtkplane2Dview_B );
385 _vtkplane2Dview_B->SetImgSize( 200 );
386 _vtkplane2Dview_B->SetVtkBaseData(vtkmprbasedata);
387 wxwindow = _widgetMesure_B;
392 // _wxsphereview_B = new wxSphereView( panel , vtkmprbasedata, vtkmprbasedata->GetImageData() );
393 _wxsphereview_B = new wxSphereView( panel , vtkmprbasedata );
394 wxwindow=_wxsphereview_B->GetWxVTKRenderWindowInteractor();
399 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( panel , -1);
400 _wxvtk3Dbaseview_MPR3D_B = new wxVtk3DBaseView( panelMPR3D , vtkmprbasedata );
402 _wxvtkmpr3Dview_B = new wxVtkMPR3DView(_wxvtk3Dbaseview_MPR3D_B);
403 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
404 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
405 vtkmpr3Ddataviewer->Configure();
406 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
408 wxWindow *window3D = _wxvtk3Dbaseview_MPR3D_B->GetWxVTKRenderWindowInteractor();
409 wxPanel *controlPanel3D = _wxvtkmpr3Dview_B->CreateControlPanel(panelMPR3D, false);
412 panelMPR3D -> SetMinimumPaneSize( 5 );
413 panelMPR3D -> SplitHorizontally( controlPanel3D,window3D,600 );
414 //RaC Nov2012 Correctly resize internal panels with the window resize event
415 panelMPR3D->SetSashGravity(0.5);
422 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
423 _wxvtk3Dbaseview_Clipping3D_BB = new wxVtk3DBaseView( panelClipping3D , vtkmprbasedata );
425 _wxvtkclipping3Dview_BB = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_BB);
426 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
427 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
428 vtkclipping3Ddataviewer->Configure();
429 _wxvtkclipping3Dview_BB->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
431 _wxvtkmpr3Dview_BB = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_BB );
432 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
433 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
434 vtkmpr3Ddataviewer->Configure();
435 _wxvtkmpr3Dview_BB->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
437 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D_BB->GetWxVTKRenderWindowInteractor();
439 wxPanel *panelControl = new wxPanel(panelClipping3D,-1);
440 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview_BB->CreateControlPanel(panelControl, false);
441 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview_BB->CreateSurfControlPanel(panelControl);
442 _btnCutImageData = new wxCheckBox(panelControl,-1,_T("Cut Module"));
443 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
445 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
446 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
447 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
448 sizerCtrol->Add( _btnCutImageData , 1, wxALL, 2);
450 panelControl->SetAutoLayout(true);
451 panelControl->SetSizer(sizerCtrol);
452 panelControl->SetSize(400,350);
453 panelControl->Layout();
455 // panelControl->FitInside();
458 panelClipping3D -> SetMinimumPaneSize( 5 );
459 panelClipping3D -> SplitHorizontally( panelControl , window3D , 10 );
460 //RaC Nov2012 Correctly resize internal panels with the window resize event
461 panelClipping3D->SetSashGravity(0.5);
462 wxwindow=panelClipping3D;
465 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
466 sizerH1->Add(wxwindow , 1, wxALL|wxGROW, 0);
467 panel->SetAutoLayout(true);
468 panel->SetSizer(sizerH1);
469 panel->SetSize(400,400);
475 //----------------------------------------------------------------------------
477 wxPanel* wxMPRWidget::CreateMPRPanel(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
479 wxPanel *panel=new wxPanel(parent,-1);
481 wxNotebook *notebook = new wxNotebook( panel, -1 );
483 notebook->AddPage( CreateMPRPanel4View( notebook ,vtkmprbasedata), _T("4-View") );
484 notebook->AddPage( CreateView(0,notebook,vtkmprbasedata) , _T("Axial") );
485 notebook->AddPage( CreateView(1,notebook,vtkmprbasedata) , _T("Sagital") );
486 notebook->AddPage( CreateView(2,notebook,vtkmprbasedata) , _T("Coronal") );
487 notebook->AddPage( CreateView(3,notebook,vtkmprbasedata) , _T("Plane") );
488 notebook->AddPage( CreateView(4,notebook,vtkmprbasedata) , _T("Sphere") );
489 notebook->AddPage( CreateView(5,notebook,vtkmprbasedata) , _T("MPR 3D") );
490 notebook->AddPage( CreateView(6,notebook,vtkmprbasedata) , _T("Clipping") );
491 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageAChanged );
493 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
494 sizer->Add(notebook , 1, wxALL|wxGROW, 2);
495 panel->SetAutoLayout(true);
496 panel->SetSizer(sizer);
497 panel->SetSize(400,400);
501 // panel->FitInside();
507 //----------------------------------------------------------------------------
509 wxPanel* wxMPRWidget::CreateMPRPanel4View(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
511 wxPanel *panel=new wxPanel(parent,-1);
514 _vtkmpr2Dview[0] = new wxVtkMPR2DView(panel,0);
515 _vtkmpr2Dview[0]->SetVtkBaseData(vtkmprbasedata);
516 wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();
519 _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
520 _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
521 wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();
524 _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
525 _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
526 wxVTKRenderWindowInteractor *iren2 = _vtkmpr2Dview[2]->GetWxVTKRenderWindowInteractor();
529 wxNotebook *notebook = new wxNotebook( panel, -1 );
530 notebook->SetSize(400,400);
534 _widgetMesure = new wxWidgetMesure2D_Plane_in_MPR(notebook);
535 _vtkplane2Dview = new vtkPlane2DView( _widgetMesure->GetWindow2() );
536 _widgetMesure->SetVtkPlane2DView( _vtkplane2Dview );
537 _vtkplane2Dview->SetImgSize( 200 );
538 _vtkplane2Dview->SetVtkBaseData(vtkmprbasedata);
539 notebook->AddPage( _widgetMesure, _T("Plane") );
543 // _wxsphereview = new wxSphereView( notebook , vtkmprbasedata, vtkmprbasedata->GetImageData());
544 _wxsphereview = new wxSphereView( notebook , vtkmprbasedata );
545 wxVTKRenderWindowInteractor *iren3B = _wxsphereview->GetWxVTKRenderWindowInteractor();
546 notebook->AddPage( iren3B, _T("Sphere") );
549 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( notebook , -1);
550 _wxvtk3Dbaseview_MPRClipping3D = new wxVtk3DBaseView( panelMPR3D ,vtkmprbasedata );
552 _wxvtkmpr3Dview = new wxVtkMPR3DView( _wxvtk3Dbaseview_MPRClipping3D );
553 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
554 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
555 vtkmpr3Ddataviewer->Configure();
556 _wxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
559 _wxvtkclipping3Dview = new wxVtkClipping3DView( _wxvtk3Dbaseview_MPRClipping3D );
560 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
561 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
562 vtkclipping3Ddataviewer->Configure();
563 _wxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
566 wxWindow *window3D = _wxvtk3Dbaseview_MPRClipping3D->GetWxVTKRenderWindowInteractor();
568 wxPanel *panelControl = new wxPanel(panelMPR3D,-1);
569 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview->CreateControlPanel(panelControl, false);
570 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview->CreateSurfControlPanel(panelControl);
575 // wxBoxSizer *sizerCtrol = new wxBoxSizer(wxVERTICAL);
576 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
577 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
578 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
581 panelControl->SetAutoLayout(true);
582 panelControl->SetSizer(sizerCtrol);
583 panelControl->SetSize(400,150);
584 panelControl->Layout();
587 panelMPR3D -> SetMinimumPaneSize( 5 );
588 //RaC Nov2012 Correctly resize internal panels with the window resize event
589 panelMPR3D->SetSashGravity(0.5);
590 panelMPR3D -> SplitHorizontally( panelControl,window3D,200 );
592 notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
595 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged );
597 wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
598 wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
599 wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
600 sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
601 sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
602 sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
603 // sizerH2->Add(iren3 , 1, wxALL|wxEXPAND, 2);
604 sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
606 sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
607 sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
609 panel->SetAutoLayout(true);
610 panel->SetSizer(sizerV);
611 panel->SetSize(400,400);
616 //----------------------------------------------------------------------------
617 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event)
619 if (_btnCutImageData->GetValue()==true){
621 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
623 _framePanelCutting->SetSize(550,400);
625 _panelCutting = new wxPanelCuttingImageData(_framePanelCutting);
626 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
627 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB );
629 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
630 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
631 _panelCutting->Configure( );
633 wxBoxSizer *topsizer = new wxBoxSizer(wxHORIZONTAL );
634 topsizer -> Add( _panelCutting ,1,wxALL ,0);
635 _framePanelCutting->SetAutoLayout(true);
636 _framePanelCutting->SetSizer( topsizer ); // use the sizer for layout
637 _framePanelCutting->Layout();
639 // _framePanelCutting->FitInside();
641 _framePanelCutting->Show();
645 if (_framePanelCutting!=NULL){
646 _panelCutting->RemoveActors();
647 _framePanelCutting->Destroy();
648 _framePanelCutting=NULL;
654 //----------------------------------------------------------------------------
655 void wxMPRWidget::ConfigureVTK(){
658 if (_vtkmprbasedata!=NULL)
660 _vtkmprbasedata->Configure();
661 x=_vtkmprbasedata -> GetMaxPositionX()/2;
662 y=_vtkmprbasedata -> GetMaxPositionY()/2;
663 z=_vtkmprbasedata -> GetMaxPositionZ()/2;
664 _vtkmprbasedata->SetX( x );
665 _vtkmprbasedata->SetY( y );
666 _vtkmprbasedata->SetZ( z );
670 if(_vtkmpr2Dview[0]!=NULL) {_vtkmpr2Dview[0] -> Configure();}
671 if(_vtkmpr2Dview[1]!=NULL) {_vtkmpr2Dview[1] -> Configure();}
672 if(_vtkmpr2Dview[2]!=NULL) {_vtkmpr2Dview[2] -> Configure();}
675 if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0] -> Configure(); }
676 if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1] -> Configure(); }
677 if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2] -> Configure(); }
682 if (_vtkplane2Dview!=NULL){_vtkplane2Dview -> Configure();}
683 if (_widgetMesure!=NULL){_widgetMesure -> ConfigureA(_vtkplane2Dview);}
684 if (_widgetMesure!=NULL){_widgetMesure -> SetActiveLink(true);}
685 if (_widgetMesure!=NULL){_widgetMesure -> SetMesureScale( _voxelSize );}
686 if (_wxsphereview!=NULL){_wxsphereview -> Configure();}
688 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D -> Configure();}
689 if (_wxvtkmpr3Dview!=NULL){
690 _wxvtkmpr3Dview -> Configure();
692 if (_wxvtkclipping3Dview!=NULL){_wxvtkclipping3Dview -> Configure();}
694 if (_vtkplane2Dview_B!=NULL){ _vtkplane2Dview_B -> Configure(); }
695 if (_widgetMesure_B!=NULL){ _widgetMesure_B -> ConfigureA( _vtkplane2Dview_B ); }
696 if (_widgetMesure_B!=NULL){ _widgetMesure_B -> SetActiveLink(true); }
700 // vtkImageData *imageData = _vtkmprbasedata->GetImageData();
701 // imageData->Update();
702 // imageData->GetSpacing(spc);
703 // _widgetMesure_B->SetMesureScale(spc[0]);
705 if (_widgetMesure_B!=NULL) {_widgetMesure_B->SetMesureScale( _voxelSize );}
708 if (_wxsphereview_B!=NULL) {_wxsphereview_B -> Configure();}
710 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) {_wxvtk3Dbaseview_MPR3D_B -> Configure();}
711 if (_wxvtkmpr3Dview_B!=NULL) {_wxvtkmpr3Dview_B -> Configure();}
713 if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL) {_wxvtk3Dbaseview_Clipping3D_BB -> Configure(); }
714 if ( _wxvtkmpr3Dview_BB!=NULL) {_wxvtkmpr3Dview_BB -> Configure(); }
715 if ( _wxvtkclipping3Dview_BB!=NULL) {_wxvtkclipping3Dview_BB -> Configure(); }
718 vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
719 if (_wxvtkmpr3Dview_BB!=NULL)
721 vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
722 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
723 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
726 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
728 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
732 // RefreshView(true);
736 //----------------------------------------------------------------------------
738 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
742 //----------------------------------------------------------------------------
743 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
745 if (_wxsphereview!=NULL) {
746 _wxsphereview -> RefreshPoint();
748 if (_wxsphereview_B!=NULL) {
749 _wxsphereview_B -> RefreshPoint();
752 //----------------------------------------------------------------------------
753 void wxMPRWidget::RefreshView(bool firsttime){
755 if (_refreshAPage == 0 )
758 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
760 _vtkmpr2Dview[2] -> Refresh();
761 _vtkmpr2Dview[1] -> Refresh();
762 _vtkmpr2Dview[0] -> Refresh();
764 if (firsttime==false)
766 _vtkmpr2Dview[2] -> RefreshView();
767 _vtkmpr2Dview[1] -> RefreshView();
768 _vtkmpr2Dview[0] -> RefreshView();
771 if (_refreshBPage == 0 )
773 if (_vtkplane2Dview!=NULL)
775 _vtkplane2Dview -> Refresh();
776 if (firsttime==false)
778 _vtkplane2Dview -> RefreshView();
780 // _wxvtk3Dbaseview_MPR3D_B -> Refresh();
783 if (_refreshBPage == 1 )
787 if (_refreshBPage == 2 )
789 if ((_wxvtkmpr3Dview!=NULL) && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
791 _wxvtkmpr3Dview -> RefreshView();
792 _wxvtk3Dbaseview_MPRClipping3D -> Refresh();
793 _wxvtkclipping3Dview -> Refresh();
799 if (_refreshAPage == 1 )
801 if (_vtkmpr2Dview_B[0] !=NULL){
802 _vtkmpr2Dview_B[0] -> Refresh();
805 if (_refreshAPage == 2 )
807 if (_vtkmpr2Dview_B[1] !=NULL){
808 _vtkmpr2Dview_B[1] -> Refresh();
811 if (_refreshAPage == 3 )
813 if (_vtkmpr2Dview_B[2] !=NULL){
814 _vtkmpr2Dview_B[2] -> Refresh();
817 if (_refreshAPage == 4 )
819 if (_vtkplane2Dview_B!=NULL){
820 _vtkplane2Dview_B -> Refresh();
821 if (firsttime==false)
823 _vtkplane2Dview_B -> RefreshView();
828 if (_refreshAPage == 5 )
832 if (_refreshAPage == 6 )
834 if (_wxvtkmpr3Dview_B!=NULL){
835 _wxvtkmpr3Dview_B -> Refresh();
836 _wxvtk3Dbaseview_MPR3D_B -> Refresh();
839 if (_refreshAPage == 7 )
841 if (_wxvtkmpr3Dview_BB!=NULL){
842 _wxvtkmpr3Dview_BB -> RefreshView();
843 _wxvtkclipping3Dview_BB -> Refresh();
844 _wxvtk3Dbaseview_Clipping3D_BB -> Refresh();
845 if (_panelCutting!=NULL)
847 _panelCutting->RefreshView();
853 //----------------------------------------------------------------------------
854 vtkMPRBaseData *wxMPRWidget::GetVtkMPRBaseData(){
855 return _vtkmprbasedata;
857 //----------------------------------------------------------------------------
858 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
860 return _vtkplane2Dview;
862 //----------------------------------------------------------------------------
863 wxVtkMPR3DView *wxMPRWidget::GetWxvtkmpr3Dview_BB()
865 return _wxvtkmpr3Dview_BB;
867 //----------------------------------------------------------------------------
868 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
870 wxVtkBaseView *result=NULL;
873 if ((id>=0) &&(id<=3)){
874 result=_vtkmpr2Dview[id];
878 result=_vtkplane2Dview;
883 //----------------------------------------------------------------------------
884 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
886 return _vtkmpr2Dview[direction];
891 //----------------------------------------------------------------------------
894 //----------------------------------------------------------------------------
895 //----------------------------------------------------------------------------
896 //----------------------------------------------------------------------------
900 // EOF - wxMPRWidget.cxx