1 /*=========================================================================
4 Module: $RCSfile: wxMPRWidget.cxx,v $
6 Date: $Date: 2009/05/14 13:54:35 $
7 Version: $Revision: 1.14 $
9 Copyright: (c) 2002, 2003
12 This software is distributed WITHOUT ANY WARRANTY; without even
13 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 PURPOSE. See the above copyright notice for more information.
16 =========================================================================*/
19 #include <vtkObjectFactory.h>
20 #include <vtkInteractorStyleSwitch.h>
21 #include <vtkCamera.h>
22 #include <vtkImageActor.h>
23 #include <vtkRenderer.h>
24 #include <vtkRenderWindowInteractor.h>
25 #include <vtkRenderWindow.h>
27 #include <vtkRenderer.h>
28 #include <vtkImageViewer2.h>
29 #include <vtkInteractorStyleImage.h>
31 #include <vtkProperty.h>
32 #include <vtkPolyData.h>
33 #include <vtkDataSet.h>
34 #include <vtkStripper.h>
35 #include <vtkCellArray.h>
36 #include <vtkPointData.h>
37 #include <vtkInteractorStyleTrackballCamera.h>
39 #include <vtkPlanes.h>
40 #include <vtkProbeFilter.h>
42 #include <vtkPointPicker.h>
45 #include "vtkClosePolyData.h"
46 #include <vtkTriangleFilter.h>
47 #include <vtkSTLWriter.h>
48 #include <vtkPolyDataConnectivityFilter.h>
50 // EED 25 Janvier 2007 - TestLoic
51 #include <vtkCutter.h>
52 #include <vtkWindowLevelLookupTable.h>
53 #include <vtkLookupTable.h>
54 #include <vtkMetaImageWriter.h>
58 #include "wxMPRWidget.h"
59 #include "wxVTKRenderWindowInteractor.h"
60 #include "UtilVtk3DGeometriSelection.h"
61 #include "../kernel/marDicomBase.h"
65 #include <wx/notebook.h>
66 #include <wx/colordlg.h>
74 #include "pPlotter/HistogramDialog.h"
76 #include "vtkInteractorStyle3DView.h"
78 //-------------------------------------------------------------------
79 //-------------------------------------------------------------------
80 //-------------------------------------------------------------------
84 //-------------------------------------------------------------------
85 //-------------------------------------------------------------------
86 //-------------------------------------------------------------------
88 BEGIN_EVENT_TABLE( wxMPRWidget, wxPanel )
89 EVT_MENU( 12121, wxMPRWidget::OnRefreshView )
90 EVT_MENU( 12122, wxMPRWidget::OnDClickLeft )
95 wxMPRWidget::wxMPRWidget( wxWindow* parent,
96 marImageData *marimageData , double voxelSize)
97 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
100 _vtkmpr2Dview[0] = NULL;
101 _vtkmpr2Dview[1] = NULL;
102 _vtkmpr2Dview[2] = NULL;
103 _vtkplane2Dview = NULL;
104 _widgetMesure = NULL;
105 _wxsphereview = NULL;
106 _wxvtk3Dbaseview_MPRClipping3D = NULL;
107 _wxvtkmpr3Dview = NULL;
108 _wxvtkclipping3Dview = NULL;
109 _vtkplane2Dview_B = NULL;
110 _widgetMesure_B = NULL;
112 _vtkmpr2Dview_B[0] = NULL;
113 _vtkmpr2Dview_B[1] = NULL;
114 _vtkmpr2Dview_B[2] = NULL;
115 _vtkplane2Dview_B = NULL;
116 _widgetMesure_B = NULL;
117 _wxsphereview_B = NULL;
118 _wxvtk3Dbaseview_MPR3D_B = NULL;
119 _wxvtkmpr3Dview_B = NULL;
120 _wxvtk3Dbaseview_Clipping3D_BB = NULL;
121 _wxvtkmpr3Dview_BB = NULL;
122 _wxvtkclipping3Dview_BB = NULL;
124 _vtkmprbasedata = NULL;
128 _framePanelCutting = NULL;
129 _panelCutting = NULL;
132 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL );
135 if(marimageData!=NULL){
136 _marImageData = marimageData;
137 _voxelSize = voxelSize;
138 _vtkmprbasedata = new vtkMPRBaseData();
139 _vtkmprbasedata->SetMarImageData(_marImageData);
144 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
145 pnlSplitter -> SetMinimumPaneSize( 2 );
147 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
148 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
149 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
151 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
157 //while (pp->GetParent()!=NULL) pp=pp->GetParent();
158 //pp->GetSize(&ww,&hh);
160 this -> SetAutoLayout( true );
161 this -> SetSizer(sizer);
162 // sizer -> Fit( this );
167 void wxMPRWidget::setImageData(vtkImageData * img, double voxelsize){
169 if(_marImageData!=NULL){
170 _marImageData->removeImageData(0);
171 _marImageData->AddImageData(img);
173 _marImageData = new marImageData(img);
176 _voxelSize = voxelsize;
178 if(_vtkmprbasedata==NULL){
179 _vtkmprbasedata = new vtkMPRBaseData();
180 _vtkmprbasedata->SetMarImageData(_marImageData);
182 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
183 pnlSplitter -> SetMinimumPaneSize( 2 );
185 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
186 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
187 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
189 this->GetSizer() -> Add( pnlSplitter ,1,wxGROW ,0);
195 //----------------------------------------------------------------------------
197 wxMPRWidget::~wxMPRWidget( )
200 if (_framePanelCutting!=NULL)
202 _framePanelCutting->Close();
205 if (_vtkmpr2Dview[0]!=NULL) { delete _vtkmpr2Dview[0]; }
206 if (_vtkmpr2Dview[1]!=NULL) { delete _vtkmpr2Dview[1]; }
207 if (_vtkmpr2Dview[2]!=NULL) { delete _vtkmpr2Dview[2]; }
209 if (_vtkmpr2Dview_B[0]!=NULL) { delete _vtkmpr2Dview_B[0]; }
211 if (_vtkmpr2Dview_B[1]!=NULL) { delete _vtkmpr2Dview_B[1]; }
212 if (_vtkmpr2Dview_B[2]!=NULL) { delete _vtkmpr2Dview_B[2]; }
214 if (_vtkmprbasedata!=NULL) { delete _vtkmprbasedata; }
215 if (_vtkplane2Dview!=NULL) { delete _vtkplane2Dview; }
216 if (_wxsphereview!=NULL) { delete _wxsphereview; }
217 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL) { delete _wxvtk3Dbaseview_MPRClipping3D; }
218 if (_wxvtkmpr3Dview!=NULL) { delete _wxvtkmpr3Dview; }
219 if (_wxvtkclipping3Dview!=NULL) { delete _wxvtkclipping3Dview; }
221 if (_vtkplane2Dview_B!=NULL) { delete _vtkplane2Dview_B; }
222 if (_wxsphereview_B!=NULL) { delete _wxsphereview_B; }
224 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) { delete _wxvtk3Dbaseview_MPR3D_B; }
225 if (_wxvtkmpr3Dview_B!=NULL) { delete _wxvtkmpr3Dview_B; }
227 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL) { delete _wxvtk3Dbaseview_Clipping3D_BB; }
228 if (_wxvtkmpr3Dview_BB!=NULL) { delete _wxvtkmpr3Dview_BB; }
229 if (_wxvtkclipping3Dview_BB!=NULL) { delete _wxvtkclipping3Dview_BB; }
232 //----------------------------------------------------------------------------
234 wxPanel* wxMPRWidget::CreateControlPanel(wxWindow *parent)
237 wxPanel *panel=new wxPanel(parent,-1);
240 // wxStaticText *tmpText = new wxStaticText(panel,-1,"");
242 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"));
244 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"));
246 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)"));
248 wxStaticText *help3Text = new wxStaticText(panel,-1,
249 _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"));
251 wxStaticText *help4Text = new wxStaticText(panel,-1,_T("MPR3D:\n see split control"));
253 wxString text=_T("");
254 text=text+_T("Clipping: \n");
255 text=text+_T(" see split control \n");
256 text=text+_T(" 4 MarchingCubes: \n");
257 text=text+_T(" color, isovalue, opacity \n");
258 text=text+_T(" Box:\n");
259 text=text+_T(" mouse left drag (box): rotation\n");
260 text=text+_T(" mouse left drag (sphere): size,position\n");
261 text=text+_T(" mouse right drag (box): box size");
262 text=text+_T(" Axis: 3D\n");
263 text=text+_T(" mouse drag: translate\n");
264 text=text+_T(" shift + mouse drag: translate 2 axis\n");
265 text=text+_T(" mouse right: scale\n");
266 text=text+_T(" Plane 3D:\n");
267 text=text+_T(" mouse drag perpendicular axis: rotate plane\n");
268 text=text+_T(" mouse drag spheres: size plane\n");
269 text=text+_T(" ctrl +mouse right over the plane: size plane\n");
270 text=text+_T(" mouse drag plane: translate\n");
271 text=text+_T(" middle click perpendicular axis: translate\n");
272 wxStaticText *help5Text = new wxStaticText(panel,-1, text );
275 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
276 sizer->Add( new wxStaticText(panel,-1,_T("")) );
277 sizer->Add( new wxStaticText(panel,-1,_T("")) );
278 sizer->Add( help0Text );
280 sizer->Add( new wxStaticText(panel,-1,_T("")) );
281 sizer->Add( new wxStaticText(panel,-1,_T("")) );
282 sizer->Add( help1Text );
284 sizer->Add( new wxStaticText(panel,-1,_T("")) );
285 sizer->Add( new wxStaticText(panel,-1,_T("")) );
286 sizer->Add( help2Text );
288 sizer->Add( new wxStaticText(panel,-1,_T("")) );
289 sizer->Add( new wxStaticText(panel,-1,_T("")) );
290 sizer->Add( help3Text );
292 sizer->Add( new wxStaticText(panel,-1,_T("")) );
293 sizer->Add( new wxStaticText(panel,-1,_T("")) );
294 sizer->Add( help4Text );
296 sizer->Add( new wxStaticText(panel,-1,_T("")) );
297 sizer->Add( new wxStaticText(panel,-1,_T("")) );
298 sizer->Add( help5Text );
300 panel->SetSizer(sizer);
301 panel->SetAutoLayout(true);
302 panel->SetSize(350,500);
307 //----------------------------------------------------------------------------
309 void wxMPRWidget::OnPageAChanged(wxNotebookEvent & event)
311 _refreshAPage=event.GetSelection();
316 //----------------------------------------------------------------------------
318 void wxMPRWidget::OnPageBChanged(wxNotebookEvent & event)
320 _refreshBPage=event.GetSelection();
326 //----------------------------------------------------------------------------
328 wxPanel* wxMPRWidget::CreateView(int type,wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
331 wxPanel *panel=new wxPanel(parent,-1);
335 _vtkmpr2Dview_B[0] = new wxVtkMPR2DView(panel,0);
336 _vtkmpr2Dview_B[0]->SetVtkBaseData(vtkmprbasedata);
337 wxwindow=_vtkmpr2Dview_B[0]->GetWxVTKRenderWindowInteractor();
341 _vtkmpr2Dview_B[1] = new wxVtkMPR2DView(panel,1);
342 _vtkmpr2Dview_B[1]->SetVtkBaseData(vtkmprbasedata);
343 wxwindow=_vtkmpr2Dview_B[1]->GetWxVTKRenderWindowInteractor();
347 _vtkmpr2Dview_B[2] = new wxVtkMPR2DView(panel,2);
348 _vtkmpr2Dview_B[2]->SetVtkBaseData(vtkmprbasedata);
349 wxwindow=_vtkmpr2Dview_B[2]->GetWxVTKRenderWindowInteractor();
353 _widgetMesure_B = new wxWidgetMesure2D_Plane_in_MPR(panel);
354 _vtkplane2Dview_B = new vtkPlane2DView( _widgetMesure_B->GetWindow2());
355 _widgetMesure_B->SetVtkPlane2DView( _vtkplane2Dview_B );
356 _vtkplane2Dview_B->SetImgSize( 200 );
357 _vtkplane2Dview_B->SetVtkBaseData(vtkmprbasedata);
358 wxwindow = _widgetMesure_B;
362 _wxsphereview_B = new wxSphereView( panel , vtkmprbasedata, vtkmprbasedata->GetImageData() );
363 wxwindow=_wxsphereview_B->GetWxVTKRenderWindowInteractor();
368 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( panel , -1);
369 _wxvtk3Dbaseview_MPR3D_B = new wxVtk3DBaseView( panelMPR3D );
371 _wxvtkmpr3Dview_B = new wxVtkMPR3DView(_wxvtk3Dbaseview_MPR3D_B);
372 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
373 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
374 vtkmpr3Ddataviewer->Configure();
375 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
377 wxWindow *window3D = _wxvtk3Dbaseview_MPR3D_B->GetWxVTKRenderWindowInteractor();
378 wxPanel *controlPanel3D = _wxvtkmpr3Dview_B->CreateControlPanel(panelMPR3D);
381 panelMPR3D -> SetMinimumPaneSize( 5 );
382 panelMPR3D -> SplitHorizontally( controlPanel3D,window3D,600 );
389 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
390 _wxvtk3Dbaseview_Clipping3D_BB = new wxVtk3DBaseView( panelClipping3D );
392 _wxvtkclipping3Dview_BB = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_BB);
393 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
394 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
395 vtkclipping3Ddataviewer->Configure();
396 _wxvtkclipping3Dview_BB->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
398 _wxvtkmpr3Dview_BB = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_BB );
399 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
400 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
401 vtkmpr3Ddataviewer->Configure();
402 _wxvtkmpr3Dview_BB->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
404 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D_BB->GetWxVTKRenderWindowInteractor();
406 wxPanel *panelControl = new wxPanel(panelClipping3D,-1);
407 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview_BB->CreateControlPanel(panelControl);
408 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview_BB->CreateControlPanel(panelControl);
409 _btnCutImageData = new wxCheckBox(panelControl,-1,_T("Cut Module"));
410 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
412 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
413 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
414 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
415 sizerCtrol->Add( _btnCutImageData , 1, wxALL, 2);
417 panelControl->SetAutoLayout(true);
418 panelControl->SetSizer(sizerCtrol);
419 panelControl->SetSize(400,350);
420 panelControl->Layout();
422 // panelControl->FitInside();
425 panelClipping3D -> SetMinimumPaneSize( 5 );
426 panelClipping3D -> SplitHorizontally( panelControl , window3D , 10 );
427 wxwindow=panelClipping3D;
430 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
431 sizerH1->Add(wxwindow , 1, wxALL|wxGROW, 0);
432 panel->SetAutoLayout(true);
433 panel->SetSizer(sizerH1);
434 panel->SetSize(400,400);
440 //----------------------------------------------------------------------------
442 wxPanel* wxMPRWidget::CreateMPRPanel(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
444 wxPanel *panel=new wxPanel(parent,-1);
446 wxNotebook *notebook = new wxNotebook( panel, -1 );
448 notebook->AddPage( CreateMPRPanel4View( notebook ,vtkmprbasedata), _T("4-View") );
449 notebook->AddPage( CreateView(0,notebook,vtkmprbasedata) , _T("Axial") );
450 notebook->AddPage( CreateView(1,notebook,vtkmprbasedata) , _T("Sagital") );
451 notebook->AddPage( CreateView(2,notebook,vtkmprbasedata) , _T("Coronal") );
452 notebook->AddPage( CreateView(3,notebook,vtkmprbasedata) , _T("Plane") );
453 notebook->AddPage( CreateView(4,notebook,vtkmprbasedata) , _T("Sphere") );
454 notebook->AddPage( CreateView(5,notebook,vtkmprbasedata) , _T("MPR 3D") );
455 notebook->AddPage( CreateView(6,notebook,vtkmprbasedata) , _T("Clipping") );
456 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageAChanged );
458 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
459 sizer->Add(notebook , 1, wxALL|wxGROW, 2);
460 panel->SetAutoLayout(true);
461 panel->SetSizer(sizer);
462 panel->SetSize(400,400);
466 // panel->FitInside();
472 //----------------------------------------------------------------------------
474 wxPanel* wxMPRWidget::CreateMPRPanel4View(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
476 wxPanel *panel=new wxPanel(parent,-1);
479 _vtkmpr2Dview[0] = new wxVtkMPR2DView(panel,0);
480 _vtkmpr2Dview[0]->SetVtkBaseData(vtkmprbasedata);
481 wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();
484 _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
485 _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
486 wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();
489 _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
490 _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
491 wxVTKRenderWindowInteractor *iren2 = _vtkmpr2Dview[2]->GetWxVTKRenderWindowInteractor();
494 wxNotebook *notebook = new wxNotebook( panel, -1 );
495 notebook->SetSize(400,400);
499 _widgetMesure = new wxWidgetMesure2D_Plane_in_MPR(notebook);
500 _vtkplane2Dview = new vtkPlane2DView( _widgetMesure->GetWindow2() );
501 _widgetMesure->SetVtkPlane2DView( _vtkplane2Dview );
502 _vtkplane2Dview->SetImgSize( 200 );
503 _vtkplane2Dview->SetVtkBaseData(vtkmprbasedata);
504 notebook->AddPage( _widgetMesure, _T("Plane") );
507 _wxsphereview = new wxSphereView( notebook , vtkmprbasedata, vtkmprbasedata->GetImageData());
508 wxVTKRenderWindowInteractor *iren3B = _wxsphereview->GetWxVTKRenderWindowInteractor();
509 notebook->AddPage( iren3B, _T("Sphere") );
513 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( notebook , -1);
514 _wxvtk3Dbaseview_MPRClipping3D = new wxVtk3DBaseView( panelMPR3D );
516 _wxvtkmpr3Dview = new wxVtkMPR3DView( _wxvtk3Dbaseview_MPRClipping3D );
517 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
518 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
519 vtkmpr3Ddataviewer->Configure();
520 _wxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
523 _wxvtkclipping3Dview = new wxVtkClipping3DView( _wxvtk3Dbaseview_MPRClipping3D );
524 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
525 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
526 vtkclipping3Ddataviewer->Configure();
527 _wxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
530 wxWindow *window3D = _wxvtk3Dbaseview_MPRClipping3D->GetWxVTKRenderWindowInteractor();
532 wxPanel *panelControl = new wxPanel(panelMPR3D,-1);
533 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview->CreateControlPanel(panelControl);
534 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview->CreateControlPanel(panelControl);
539 // wxBoxSizer *sizerCtrol = new wxBoxSizer(wxVERTICAL);
540 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
541 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
542 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
545 panelControl->SetAutoLayout(true);
546 panelControl->SetSizer(sizerCtrol);
547 panelControl->SetSize(400,150);
548 panelControl->Layout();
551 panelMPR3D -> SetMinimumPaneSize( 5 );
553 panelMPR3D -> SplitHorizontally( panelControl,window3D,200 );
555 notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
558 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged );
560 wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
561 wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
562 wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
563 sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
564 sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
565 sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
566 // sizerH2->Add(iren3 , 1, wxALL|wxEXPAND, 2);
567 sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
569 sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
570 sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
572 panel->SetAutoLayout(true);
573 panel->SetSizer(sizerV);
574 panel->SetSize(400,400);
579 //----------------------------------------------------------------------------
580 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event)
582 if (_btnCutImageData->GetValue()==true){
584 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
586 _framePanelCutting->SetSize(550,400);
588 _panelCutting = new wxPanelCuttingImageData(_framePanelCutting);
589 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
590 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB );
592 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
593 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
594 _panelCutting->Configure( );
596 wxBoxSizer *topsizer = new wxBoxSizer(wxHORIZONTAL );
597 topsizer -> Add( _panelCutting ,1,wxALL ,0);
598 _framePanelCutting->SetAutoLayout(true);
599 _framePanelCutting->SetSizer( topsizer ); // use the sizer for layout
600 _framePanelCutting->Layout();
602 // _framePanelCutting->FitInside();
604 _framePanelCutting->Show();
608 if (_framePanelCutting!=NULL){
609 _panelCutting->RemoveActors();
610 _framePanelCutting->Destroy();
611 _framePanelCutting=NULL;
617 //----------------------------------------------------------------------------
618 void wxMPRWidget::ConfigureVTK(){
621 if (_vtkmprbasedata!=NULL)
623 _vtkmprbasedata->Configure();
624 x=_vtkmprbasedata -> GetMaxPositionX()/2;
625 y=_vtkmprbasedata -> GetMaxPositionY()/2;
626 z=_vtkmprbasedata -> GetMaxPositionZ()/2;
627 _vtkmprbasedata->SetX( x );
628 _vtkmprbasedata->SetY( y );
629 _vtkmprbasedata->SetZ( z );
633 if(_vtkmpr2Dview[0]!=NULL) {_vtkmpr2Dview[0] -> Configure();}
634 if(_vtkmpr2Dview[1]!=NULL) {_vtkmpr2Dview[1] -> Configure();}
635 if(_vtkmpr2Dview[2]!=NULL) {_vtkmpr2Dview[2] -> Configure();}
638 if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0] -> Configure(); }
639 if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1] -> Configure(); }
640 if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2] -> Configure(); }
645 if (_vtkplane2Dview!=NULL){_vtkplane2Dview -> Configure();}
646 if (_widgetMesure!=NULL){_widgetMesure -> ConfigureA(_vtkplane2Dview);}
647 if (_widgetMesure!=NULL){_widgetMesure -> SetActiveLink(true);}
648 if (_widgetMesure!=NULL){_widgetMesure -> SetMesureScale( _voxelSize );}
649 if (_wxsphereview!=NULL){_wxsphereview -> Configure();}
651 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D -> Configure();}
652 if (_wxvtkmpr3Dview!=NULL){
653 _wxvtkmpr3Dview -> Configure();
655 if (_wxvtkclipping3Dview!=NULL){_wxvtkclipping3Dview -> Configure();}
657 if (_vtkplane2Dview_B!=NULL){ _vtkplane2Dview_B -> Configure(); }
658 if (_widgetMesure_B!=NULL){ _widgetMesure_B -> ConfigureA( _vtkplane2Dview_B ); }
659 if (_widgetMesure_B!=NULL){ _widgetMesure_B -> SetActiveLink(true); }
663 // vtkImageData *imageData = _vtkmprbasedata->GetImageData();
664 // imageData->Update();
665 // imageData->GetSpacing(spc);
666 // _widgetMesure_B->SetMesureScale(spc[0]);
668 if (_widgetMesure_B!=NULL) {_widgetMesure_B->SetMesureScale( _voxelSize );}
671 if (_wxsphereview_B!=NULL) {_wxsphereview_B -> Configure();}
673 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) {_wxvtk3Dbaseview_MPR3D_B -> Configure();}
674 if (_wxvtkmpr3Dview_B!=NULL) {_wxvtkmpr3Dview_B -> Configure();}
676 if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL) {_wxvtk3Dbaseview_Clipping3D_BB -> Configure(); }
677 if ( _wxvtkmpr3Dview_BB!=NULL) {_wxvtkmpr3Dview_BB -> Configure(); }
678 if ( _wxvtkclipping3Dview_BB!=NULL) {_wxvtkclipping3Dview_BB -> Configure(); }
681 vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
682 if (_wxvtkmpr3Dview_BB!=NULL)
684 vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
685 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
686 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
689 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
691 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
695 // RefreshView(true);
699 //----------------------------------------------------------------------------
701 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
705 //----------------------------------------------------------------------------
706 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
708 if (_wxsphereview!=NULL) {
709 _wxsphereview -> RefreshPoint();
711 if (_wxsphereview_B!=NULL) {
712 _wxsphereview_B -> RefreshPoint();
715 //----------------------------------------------------------------------------
716 void wxMPRWidget::RefreshView(bool firsttime){
718 if (_refreshAPage == 0 )
721 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
723 _vtkmpr2Dview[2] -> Refresh();
724 _vtkmpr2Dview[1] -> Refresh();
725 _vtkmpr2Dview[0] -> Refresh();
727 if (firsttime==false)
729 _vtkmpr2Dview[2] -> RefreshView();
730 _vtkmpr2Dview[1] -> RefreshView();
731 _vtkmpr2Dview[0] -> RefreshView();
734 if (_refreshBPage == 0 )
736 if (_vtkplane2Dview!=NULL)
738 _vtkplane2Dview -> Refresh();
739 if (firsttime==false)
741 _vtkplane2Dview -> RefreshView();
743 // _wxvtk3Dbaseview_MPR3D_B -> Refresh();
746 if (_refreshBPage == 1 )
750 if (_refreshBPage == 2 )
752 if ((_wxvtkmpr3Dview!=NULL) && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
754 _wxvtkmpr3Dview -> RefreshView();
755 _wxvtk3Dbaseview_MPRClipping3D -> Refresh();
756 _wxvtkclipping3Dview -> Refresh();
762 if (_refreshAPage == 1 )
764 if (_vtkmpr2Dview_B[0] !=NULL){
765 _vtkmpr2Dview_B[0] -> Refresh();
768 if (_refreshAPage == 2 )
770 if (_vtkmpr2Dview_B[1] !=NULL){
771 _vtkmpr2Dview_B[1] -> Refresh();
774 if (_refreshAPage == 3 )
776 if (_vtkmpr2Dview_B[2] !=NULL){
777 _vtkmpr2Dview_B[2] -> Refresh();
780 if (_refreshAPage == 4 )
782 if (_vtkplane2Dview_B!=NULL){
783 _vtkplane2Dview_B -> Refresh();
784 if (firsttime==false)
786 _vtkplane2Dview_B -> RefreshView();
791 if (_refreshAPage == 5 )
795 if (_refreshAPage == 6 )
797 if (_wxvtkmpr3Dview_B!=NULL){
798 _wxvtkmpr3Dview_B -> Refresh();
799 _wxvtk3Dbaseview_MPR3D_B -> Refresh();
802 if (_refreshAPage == 7 )
804 if (_wxvtkmpr3Dview_BB!=NULL){
805 _wxvtkmpr3Dview_BB -> RefreshView();
806 _wxvtkclipping3Dview_BB -> Refresh();
807 _wxvtk3Dbaseview_Clipping3D_BB -> Refresh();
808 if (_panelCutting!=NULL)
810 _panelCutting->RefreshView();
816 //----------------------------------------------------------------------------
817 vtkMPRBaseData *wxMPRWidget::GetVtkMPRBaseData(){
818 return _vtkmprbasedata;
820 //----------------------------------------------------------------------------
821 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
823 return _vtkplane2Dview;
825 //----------------------------------------------------------------------------
826 wxVtkMPR3DView *wxMPRWidget::GetWxvtkmpr3Dview_BB()
828 return _wxvtkmpr3Dview_BB;
830 //----------------------------------------------------------------------------
831 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
833 wxVtkBaseView *result=NULL;
836 if ((id>=0) &&(id<=3)){
837 result=_vtkmpr2Dview[id];
841 result=_vtkplane2Dview;
846 //----------------------------------------------------------------------------
847 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
849 return _vtkmpr2Dview[direction];
854 //----------------------------------------------------------------------------
857 //----------------------------------------------------------------------------
858 //----------------------------------------------------------------------------
859 //----------------------------------------------------------------------------
863 // EOF - wxMPRWidget.cxx