00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <vtkObjectFactory.h>
00020 #include <vtkInteractorStyleSwitch.h>
00021 #include <vtkCamera.h>
00022 #include <vtkImageActor.h>
00023 #include <vtkRenderer.h>
00024 #include <vtkRenderWindowInteractor.h>
00025 #include <vtkRenderWindow.h>
00026
00027 #include <vtkRenderer.h>
00028 #include <vtkImageViewer2.h>
00029 #include <vtkInteractorStyleImage.h>
00030
00031 #include <vtkProperty.h>
00032 #include <vtkPolyData.h>
00033 #include <vtkDataSet.h>
00034 #include <vtkStripper.h>
00035 #include <vtkCellArray.h>
00036 #include <vtkPointData.h>
00037 #include <vtkInteractorStyleTrackballCamera.h>
00038
00039 #include <vtkPlanes.h>
00040 #include <vtkProbeFilter.h>
00041 #include <vtkPlane.h>
00042 #include <vtkPointPicker.h>
00043
00044
00045 #include "vtkClosePolyData.h"
00046 #include <vtkTriangleFilter.h>
00047 #include <vtkSTLWriter.h>
00048 #include <vtkPolyDataConnectivityFilter.h>
00049
00050
00051 #include <vtkCutter.h>
00052 #include <vtkWindowLevelLookupTable.h>
00053 #include <vtkLookupTable.h>
00054 #include <vtkMetaImageWriter.h>
00055
00056
00057
00058 #include "wxMPRWidget.h"
00059 #include "wxVTKRenderWindowInteractor.h"
00060 #include "UtilVtk3DGeometriSelection.h"
00061 #include "../kernel/marDicomBase.h"
00062
00063
00064 #include <wx/wx.h>
00065 #include <wx/notebook.h>
00066 #include <wx/colordlg.h>
00067
00068 #include "matrix.h"
00069 #include <string>
00070 #include <stdio.h>
00071
00072
00073
00074 #include "pPlotter/HistogramDialog.h"
00075
00076 #include "vtkInteractorStyle3DView.h"
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 BEGIN_EVENT_TABLE( wxMPRWidget, wxPanel )
00089 EVT_MENU( 12121, wxMPRWidget::OnRefreshView )
00090 EVT_MENU( 12122, wxMPRWidget::OnDClickLeft )
00091 END_EVENT_TABLE( );
00092
00093
00094
00095 wxMPRWidget::wxMPRWidget( wxWindow* parent,
00096 marImageData *marimageData , double voxelSize)
00097 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
00098 {
00099
00100 _vtkmpr2Dview[0] = NULL;
00101 _vtkmpr2Dview[1] = NULL;
00102 _vtkmpr2Dview[2] = NULL;
00103 _vtkplane2Dview = NULL;
00104 _widgetMesure = NULL;
00105 _wxsphereview = NULL;
00106 _wxvtk3Dbaseview_MPRClipping3D = NULL;
00107 _wxvtkmpr3Dview = NULL;
00108 _wxvtkclipping3Dview = NULL;
00109 _vtkplane2Dview_B = NULL;
00110 _widgetMesure_B = NULL;
00111
00112 _vtkmpr2Dview_B[0] = NULL;
00113 _vtkmpr2Dview_B[1] = NULL;
00114 _vtkmpr2Dview_B[2] = NULL;
00115 _vtkplane2Dview_B = NULL;
00116 _widgetMesure_B = NULL;
00117 _wxsphereview_B = NULL;
00118 _wxvtk3Dbaseview_MPR3D_B = NULL;
00119 _wxvtkmpr3Dview_B = NULL;
00120 _wxvtk3Dbaseview_Clipping3D_BB = NULL;
00121 _wxvtkmpr3Dview_BB = NULL;
00122 _wxvtkclipping3Dview_BB = NULL;
00123
00124 _vtkmprbasedata = NULL;
00125
00126
00127
00128 _framePanelCutting = NULL;
00129 _panelCutting = NULL;
00130
00131
00132 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL );
00133 _marImageData=NULL;
00134
00135 if(marimageData!=NULL){
00136 _marImageData = marimageData;
00137 _voxelSize = voxelSize;
00138 _vtkmprbasedata = new vtkMPRBaseData();
00139 _vtkmprbasedata->SetMarImageData(_marImageData);
00140
00141
00142
00143
00144 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
00145 pnlSplitter -> SetMinimumPaneSize( 2 );
00146
00147 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
00148 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
00149 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
00150
00151 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
00152
00153 }
00154
00155
00156
00157
00158
00159
00160 this -> SetAutoLayout( true );
00161 this -> SetSizer(sizer);
00162
00163 _refreshAPage=0;
00164 _refreshBPage=0;
00165
00166 }
00167 void wxMPRWidget::setImageData(vtkImageData * img, double voxelsize){
00168
00169 if(_marImageData!=NULL){
00170 _marImageData->removeImageData(0);
00171 _marImageData->AddImageData(img);
00172 }else{
00173 _marImageData = new marImageData(img);
00174 }
00175
00176 _voxelSize = voxelsize;
00177
00178 if(_vtkmprbasedata==NULL){
00179 _vtkmprbasedata = new vtkMPRBaseData();
00180 _vtkmprbasedata->SetMarImageData(_marImageData);
00181
00182 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
00183 pnlSplitter -> SetMinimumPaneSize( 2 );
00184
00185 wxPanel *MPRPanel = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
00186 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
00187 pnlSplitter -> SplitVertically( MPRPanel, controlPanel, 550 );
00188
00189 this->GetSizer() -> Add( pnlSplitter ,1,wxGROW ,0);
00190 }
00191
00192
00193
00194 }
00195
00196
00197 wxMPRWidget::~wxMPRWidget( )
00198 {
00199
00200 if (_framePanelCutting!=NULL)
00201 {
00202 _framePanelCutting->Close();
00203 }
00204
00205 if (_vtkmpr2Dview[0]!=NULL) { delete _vtkmpr2Dview[0]; }
00206 if (_vtkmpr2Dview[1]!=NULL) { delete _vtkmpr2Dview[1]; }
00207 if (_vtkmpr2Dview[2]!=NULL) { delete _vtkmpr2Dview[2]; }
00208
00209 if (_vtkmpr2Dview_B[0]!=NULL) { delete _vtkmpr2Dview_B[0]; }
00210
00211 if (_vtkmpr2Dview_B[1]!=NULL) { delete _vtkmpr2Dview_B[1]; }
00212 if (_vtkmpr2Dview_B[2]!=NULL) { delete _vtkmpr2Dview_B[2]; }
00213
00214 if (_vtkmprbasedata!=NULL) { delete _vtkmprbasedata; }
00215 if (_vtkplane2Dview!=NULL) { delete _vtkplane2Dview; }
00216 if (_wxsphereview!=NULL) { delete _wxsphereview; }
00217 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL) { delete _wxvtk3Dbaseview_MPRClipping3D; }
00218 if (_wxvtkmpr3Dview!=NULL) { delete _wxvtkmpr3Dview; }
00219 if (_wxvtkclipping3Dview!=NULL) { delete _wxvtkclipping3Dview; }
00220
00221 if (_vtkplane2Dview_B!=NULL) { delete _vtkplane2Dview_B; }
00222 if (_wxsphereview_B!=NULL) { delete _wxsphereview_B; }
00223
00224 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) { delete _wxvtk3Dbaseview_MPR3D_B; }
00225 if (_wxvtkmpr3Dview_B!=NULL) { delete _wxvtkmpr3Dview_B; }
00226
00227 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL) { delete _wxvtk3Dbaseview_Clipping3D_BB; }
00228 if (_wxvtkmpr3Dview_BB!=NULL) { delete _wxvtkmpr3Dview_BB; }
00229 if (_wxvtkclipping3Dview_BB!=NULL) { delete _wxvtkclipping3Dview_BB; }
00230 }
00231
00232
00233
00234 wxPanel* wxMPRWidget::CreateControlPanel(wxWindow *parent)
00235 {
00236
00237 wxPanel *panel=new wxPanel(parent,-1);
00238
00239
00240
00241
00242 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"));
00243
00244 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"));
00245
00246 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)"));
00247
00248 wxStaticText *help3Text = new wxStaticText(panel,-1,
00249 _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"));
00250
00251 wxStaticText *help4Text = new wxStaticText(panel,-1,_T("MPR3D:\n see split control"));
00252
00253 wxString text=_T("");
00254 text=text+_T("Clipping: \n");
00255 text=text+_T(" see split control \n");
00256 text=text+_T(" 4 MarchingCubes: \n");
00257 text=text+_T(" color, isovalue, opacity \n");
00258 text=text+_T(" Box:\n");
00259 text=text+_T(" mouse left drag (box): rotation\n");
00260 text=text+_T(" mouse left drag (sphere): size,position\n");
00261 text=text+_T(" mouse right drag (box): box size");
00262 text=text+_T(" Axis: 3D\n");
00263 text=text+_T(" mouse drag: translate\n");
00264 text=text+_T(" shift + mouse drag: translate 2 axis\n");
00265 text=text+_T(" mouse right: scale\n");
00266 text=text+_T(" Plane 3D:\n");
00267 text=text+_T(" mouse drag perpendicular axis: rotate plane\n");
00268 text=text+_T(" mouse drag spheres: size plane\n");
00269 text=text+_T(" ctrl +mouse right over the plane: size plane\n");
00270 text=text+_T(" mouse drag plane: translate\n");
00271 text=text+_T(" middle click perpendicular axis: translate\n");
00272 wxStaticText *help5Text = new wxStaticText(panel,-1, text );
00273
00274
00275 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
00276 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00277 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00278 sizer->Add( help0Text );
00279
00280 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00281 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00282 sizer->Add( help1Text );
00283
00284 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00285 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00286 sizer->Add( help2Text );
00287
00288 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00289 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00290 sizer->Add( help3Text );
00291
00292 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00293 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00294 sizer->Add( help4Text );
00295
00296 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00297 sizer->Add( new wxStaticText(panel,-1,_T("")) );
00298 sizer->Add( help5Text );
00299
00300 panel->SetSizer(sizer);
00301 panel->SetAutoLayout(true);
00302 panel->SetSize(350,500);
00303
00304 return panel;
00305 }
00306
00307
00308
00309 void wxMPRWidget::OnPageAChanged(wxNotebookEvent & event)
00310 {
00311 _refreshAPage=event.GetSelection();
00312 Refresh();
00313 RefreshView(true);
00314 }
00315
00316
00317
00318 void wxMPRWidget::OnPageBChanged(wxNotebookEvent & event)
00319 {
00320 _refreshBPage=event.GetSelection();
00321
00322
00323 }
00324
00325
00326
00327
00328 wxPanel* wxMPRWidget::CreateView(int type,wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00329 {
00330 wxWindow *wxwindow;
00331 wxPanel *panel=new wxPanel(parent,-1);
00332
00333 if (type==0)
00334 {
00335 _vtkmpr2Dview_B[0] = new wxVtkMPR2DView(panel,0);
00336 _vtkmpr2Dview_B[0]->SetVtkBaseData(vtkmprbasedata);
00337 wxwindow=_vtkmpr2Dview_B[0]->GetWxVTKRenderWindowInteractor();
00338 }
00339 if (type==1)
00340 {
00341 _vtkmpr2Dview_B[1] = new wxVtkMPR2DView(panel,1);
00342 _vtkmpr2Dview_B[1]->SetVtkBaseData(vtkmprbasedata);
00343 wxwindow=_vtkmpr2Dview_B[1]->GetWxVTKRenderWindowInteractor();
00344 }
00345 if (type==2)
00346 {
00347 _vtkmpr2Dview_B[2] = new wxVtkMPR2DView(panel,2);
00348 _vtkmpr2Dview_B[2]->SetVtkBaseData(vtkmprbasedata);
00349 wxwindow=_vtkmpr2Dview_B[2]->GetWxVTKRenderWindowInteractor();
00350 }
00351 if (type==3)
00352 {
00353 _widgetMesure_B = new wxWidgetMesure2D_Plane_in_MPR(panel);
00354 _vtkplane2Dview_B = new vtkPlane2DView( _widgetMesure_B->GetWindow2());
00355 _widgetMesure_B->SetVtkPlane2DView( _vtkplane2Dview_B );
00356 _vtkplane2Dview_B->SetImgSize( 200 );
00357 _vtkplane2Dview_B->SetVtkBaseData(vtkmprbasedata);
00358 wxwindow = _widgetMesure_B;
00359 }
00360 if (type==4)
00361 {
00362 _wxsphereview_B = new wxSphereView( panel , vtkmprbasedata, vtkmprbasedata->GetImageData() );
00363 wxwindow=_wxsphereview_B->GetWxVTKRenderWindowInteractor();
00364 }
00365
00366 if (type==5)
00367 {
00368 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( panel , -1);
00369 _wxvtk3Dbaseview_MPR3D_B = new wxVtk3DBaseView( panelMPR3D );
00370
00371 _wxvtkmpr3Dview_B = new wxVtkMPR3DView(_wxvtk3Dbaseview_MPR3D_B);
00372 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
00373 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00374 vtkmpr3Ddataviewer->Configure();
00375 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00376
00377 wxWindow *window3D = _wxvtk3Dbaseview_MPR3D_B->GetWxVTKRenderWindowInteractor();
00378 wxPanel *controlPanel3D = _wxvtkmpr3Dview_B->CreateControlPanel(panelMPR3D, false);
00379
00380
00381 panelMPR3D -> SetMinimumPaneSize( 5 );
00382 panelMPR3D -> SplitHorizontally( controlPanel3D,window3D,600 );
00383
00384 wxwindow=panelMPR3D;
00385 }
00386
00387 if (type==6)
00388 {
00389 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
00390 _wxvtk3Dbaseview_Clipping3D_BB = new wxVtk3DBaseView( panelClipping3D );
00391
00392 _wxvtkclipping3Dview_BB = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_BB);
00393 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
00394 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00395 vtkclipping3Ddataviewer->Configure();
00396 _wxvtkclipping3Dview_BB->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
00397
00398 _wxvtkmpr3Dview_BB = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_BB );
00399 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
00400 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00401 vtkmpr3Ddataviewer->Configure();
00402 _wxvtkmpr3Dview_BB->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00403
00404 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D_BB->GetWxVTKRenderWindowInteractor();
00405
00406 wxPanel *panelControl = new wxPanel(panelClipping3D,-1);
00407 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview_BB->CreateControlPanel(panelControl, false);
00408 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview_BB->CreateSurfControlPanel(panelControl);
00409 _btnCutImageData = new wxCheckBox(panelControl,-1,_T("Cut Module"));
00410 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
00411
00412 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
00413 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
00414 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
00415 sizerCtrol->Add( _btnCutImageData , 1, wxALL, 2);
00416
00417 panelControl->SetAutoLayout(true);
00418 panelControl->SetSizer(sizerCtrol);
00419 panelControl->SetSize(400,350);
00420 panelControl->Layout();
00421
00422
00423
00424
00425 panelClipping3D -> SetMinimumPaneSize( 5 );
00426 panelClipping3D -> SplitHorizontally( panelControl , window3D , 10 );
00427 wxwindow=panelClipping3D;
00428 }
00429
00430 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
00431 sizerH1->Add(wxwindow , 1, wxALL|wxGROW, 0);
00432 panel->SetAutoLayout(true);
00433 panel->SetSizer(sizerH1);
00434 panel->SetSize(400,400);
00435 panel->Layout();
00436
00437 return panel;
00438 }
00439
00440
00441
00442 wxPanel* wxMPRWidget::CreateMPRPanel(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00443 {
00444 wxPanel *panel=new wxPanel(parent,-1);
00445
00446 wxNotebook *notebook = new wxNotebook( panel, -1 );
00447
00448 notebook->AddPage( CreateMPRPanel4View( notebook ,vtkmprbasedata), _T("4-View") );
00449 notebook->AddPage( CreateView(0,notebook,vtkmprbasedata) , _T("Axial") );
00450 notebook->AddPage( CreateView(1,notebook,vtkmprbasedata) , _T("Sagital") );
00451 notebook->AddPage( CreateView(2,notebook,vtkmprbasedata) , _T("Coronal") );
00452 notebook->AddPage( CreateView(3,notebook,vtkmprbasedata) , _T("Plane") );
00453 notebook->AddPage( CreateView(4,notebook,vtkmprbasedata) , _T("Sphere") );
00454 notebook->AddPage( CreateView(5,notebook,vtkmprbasedata) , _T("MPR 3D") );
00455 notebook->AddPage( CreateView(6,notebook,vtkmprbasedata) , _T("Clipping") );
00456 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageAChanged );
00457
00458 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00459 sizer->Add(notebook , 1, wxALL|wxGROW, 2);
00460 panel->SetAutoLayout(true);
00461 panel->SetSizer(sizer);
00462 panel->SetSize(400,400);
00463 panel->Layout();
00464
00465
00466
00467
00468 panel->Refresh();
00469 return panel;
00470 }
00471
00472
00473
00474 wxPanel* wxMPRWidget::CreateMPRPanel4View(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00475 {
00476 wxPanel *panel=new wxPanel(parent,-1);
00477
00478
00479 _vtkmpr2Dview[0] = new wxVtkMPR2DView(panel,0);
00480 _vtkmpr2Dview[0]->SetVtkBaseData(vtkmprbasedata);
00481 wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();
00482
00483
00484 _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
00485 _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
00486 wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();
00487
00488
00489 _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
00490 _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
00491 wxVTKRenderWindowInteractor *iren2 = _vtkmpr2Dview[2]->GetWxVTKRenderWindowInteractor();
00492
00493
00494 wxNotebook *notebook = new wxNotebook( panel, -1 );
00495 notebook->SetSize(400,400);
00496
00497
00498
00499 _widgetMesure = new wxWidgetMesure2D_Plane_in_MPR(notebook);
00500 _vtkplane2Dview = new vtkPlane2DView( _widgetMesure->GetWindow2() );
00501 _widgetMesure->SetVtkPlane2DView( _vtkplane2Dview );
00502 _vtkplane2Dview->SetImgSize( 200 );
00503 _vtkplane2Dview->SetVtkBaseData(vtkmprbasedata);
00504 notebook->AddPage( _widgetMesure, _T("Plane") );
00505
00506
00507 _wxsphereview = new wxSphereView( notebook , vtkmprbasedata, vtkmprbasedata->GetImageData());
00508 wxVTKRenderWindowInteractor *iren3B = _wxsphereview->GetWxVTKRenderWindowInteractor();
00509 notebook->AddPage( iren3B, _T("Sphere") );
00510
00511
00512
00513 wxSplitterWindow *panelMPR3D = new wxSplitterWindow( notebook , -1);
00514 _wxvtk3Dbaseview_MPRClipping3D = new wxVtk3DBaseView( panelMPR3D );
00515
00516 _wxvtkmpr3Dview = new wxVtkMPR3DView( _wxvtk3Dbaseview_MPRClipping3D );
00517 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
00518 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00519 vtkmpr3Ddataviewer->Configure();
00520 _wxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00521
00522
00523 _wxvtkclipping3Dview = new wxVtkClipping3DView( _wxvtk3Dbaseview_MPRClipping3D );
00524 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
00525 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00526 vtkclipping3Ddataviewer->Configure();
00527 _wxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
00528
00529
00530 wxWindow *window3D = _wxvtk3Dbaseview_MPRClipping3D->GetWxVTKRenderWindowInteractor();
00531
00532 wxPanel *panelControl = new wxPanel(panelMPR3D,-1);
00533 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview->CreateControlPanel(panelControl, false);
00534 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview->CreateSurfControlPanel(panelControl);
00535
00536
00537
00538
00539
00540 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
00541 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
00542 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
00543
00544
00545 panelControl->SetAutoLayout(true);
00546 panelControl->SetSizer(sizerCtrol);
00547 panelControl->SetSize(400,150);
00548 panelControl->Layout();
00549
00550
00551 panelMPR3D -> SetMinimumPaneSize( 5 );
00552
00553 panelMPR3D -> SplitHorizontally( panelControl,window3D,200 );
00554
00555 notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
00556
00557
00558 Connect(notebook->GetId() , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged );
00559
00560 wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
00561 wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
00562 wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
00563 sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
00564 sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
00565 sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
00566
00567 sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
00568
00569 sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
00570 sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
00571
00572 panel->SetAutoLayout(true);
00573 panel->SetSizer(sizerV);
00574 panel->SetSize(400,400);
00575 panel->Layout();
00576 return panel;
00577 }
00578
00579
00580 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event)
00581 {
00582 if (_btnCutImageData->GetValue()==true){
00583
00584 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
00585
00586 _framePanelCutting->SetSize(550,400);
00587
00588 _panelCutting = new wxPanelCuttingImageData(_framePanelCutting);
00589 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
00590 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB );
00591 }
00592 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
00593 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
00594 _panelCutting->Configure( );
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604 _framePanelCutting->Show();
00605
00606
00607 } else {
00608 if (_framePanelCutting!=NULL){
00609 _panelCutting->RemoveActors();
00610 _framePanelCutting->Destroy();
00611 _framePanelCutting=NULL;
00612 _panelCutting=NULL;
00613 }
00614 }
00615 }
00616
00617
00618 void wxMPRWidget::ConfigureVTK(){
00619 int x=0,y=0,z=0;
00620
00621 if (_vtkmprbasedata!=NULL)
00622 {
00623 _vtkmprbasedata->Configure();
00624 x=_vtkmprbasedata -> GetMaxPositionX()/2;
00625 y=_vtkmprbasedata -> GetMaxPositionY()/2;
00626 z=_vtkmprbasedata -> GetMaxPositionZ()/2;
00627 _vtkmprbasedata->SetX( x );
00628 _vtkmprbasedata->SetY( y );
00629 _vtkmprbasedata->SetZ( z );
00630
00631 }
00632
00633 if(_vtkmpr2Dview[0]!=NULL) {_vtkmpr2Dview[0] -> Configure();}
00634 if(_vtkmpr2Dview[1]!=NULL) {_vtkmpr2Dview[1] -> Configure();}
00635 if(_vtkmpr2Dview[2]!=NULL) {_vtkmpr2Dview[2] -> Configure();}
00636
00637
00638 if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0] -> Configure(); }
00639 if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1] -> Configure(); }
00640 if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2] -> Configure(); }
00641
00642
00643
00644
00645 if (_vtkplane2Dview!=NULL){_vtkplane2Dview -> Configure();}
00646 if (_widgetMesure!=NULL){_widgetMesure -> ConfigureA(_vtkplane2Dview);}
00647 if (_widgetMesure!=NULL){_widgetMesure -> SetActiveLink(true);}
00648 if (_widgetMesure!=NULL){_widgetMesure -> SetMesureScale( _voxelSize );}
00649 if (_wxsphereview!=NULL){_wxsphereview -> Configure();}
00650
00651 if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D -> Configure();}
00652 if (_wxvtkmpr3Dview!=NULL){
00653 _wxvtkmpr3Dview -> Configure();
00654 }
00655 if (_wxvtkclipping3Dview!=NULL){_wxvtkclipping3Dview -> Configure();}
00656
00657 if (_vtkplane2Dview_B!=NULL){ _vtkplane2Dview_B -> Configure(); }
00658 if (_widgetMesure_B!=NULL){ _widgetMesure_B -> ConfigureA( _vtkplane2Dview_B ); }
00659 if (_widgetMesure_B!=NULL){ _widgetMesure_B -> SetActiveLink(true); }
00660
00661
00662
00663
00664
00665
00666
00667
00668 if (_widgetMesure_B!=NULL) {_widgetMesure_B->SetMesureScale( _voxelSize );}
00669
00670
00671 if (_wxsphereview_B!=NULL) {_wxsphereview_B -> Configure();}
00672
00673 if (_wxvtk3Dbaseview_MPR3D_B!=NULL) {_wxvtk3Dbaseview_MPR3D_B -> Configure();}
00674 if (_wxvtkmpr3Dview_B!=NULL) {_wxvtkmpr3Dview_B -> Configure();}
00675
00676 if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL) {_wxvtk3Dbaseview_Clipping3D_BB -> Configure(); }
00677 if ( _wxvtkmpr3Dview_BB!=NULL) {_wxvtkmpr3Dview_BB -> Configure(); }
00678 if ( _wxvtkclipping3Dview_BB!=NULL) {_wxvtkclipping3Dview_BB -> Configure(); }
00679
00680
00681 vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
00682 if (_wxvtkmpr3Dview_BB!=NULL)
00683 {
00684 vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
00685 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
00686 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
00687 }
00688
00689 if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
00690 {
00691 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
00692 }
00693
00694
00695
00696
00697 }
00698
00699
00700
00701 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
00702 {
00703 RefreshView();
00704 }
00705
00706 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
00707 {
00708 if (_wxsphereview!=NULL) {
00709 _wxsphereview -> RefreshPoint();
00710 }
00711 if (_wxsphereview_B!=NULL) {
00712 _wxsphereview_B -> RefreshPoint();
00713 }
00714 }
00715
00716 void wxMPRWidget::RefreshView(bool firsttime){
00717
00718 if (_refreshAPage == 0 )
00719 {
00720
00721 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
00722 {
00723 _vtkmpr2Dview[2] -> Refresh();
00724 _vtkmpr2Dview[1] -> Refresh();
00725 _vtkmpr2Dview[0] -> Refresh();
00726
00727 if (firsttime==false)
00728 {
00729 _vtkmpr2Dview[2] -> RefreshView();
00730 _vtkmpr2Dview[1] -> RefreshView();
00731 _vtkmpr2Dview[0] -> RefreshView();
00732 }
00733
00734 if (_refreshBPage == 0 )
00735 {
00736 if (_vtkplane2Dview!=NULL)
00737 {
00738 _vtkplane2Dview -> Refresh();
00739 if (firsttime==false)
00740 {
00741 _vtkplane2Dview -> RefreshView();
00742 }
00743
00744 }
00745 }
00746 if (_refreshBPage == 1 )
00747 {
00748
00749 }
00750 if (_refreshBPage == 2 )
00751 {
00752 if ((_wxvtkmpr3Dview!=NULL) && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
00753 {
00754 _wxvtkmpr3Dview -> RefreshView();
00755 _wxvtk3Dbaseview_MPRClipping3D -> Refresh();
00756 _wxvtkclipping3Dview -> Refresh();
00757 }
00758 }
00759 }
00760 }
00761
00762 if (_refreshAPage == 1 )
00763 {
00764 if (_vtkmpr2Dview_B[0] !=NULL){
00765 _vtkmpr2Dview_B[0] -> Refresh();
00766 }
00767 }
00768 if (_refreshAPage == 2 )
00769 {
00770 if (_vtkmpr2Dview_B[1] !=NULL){
00771 _vtkmpr2Dview_B[1] -> Refresh();
00772 }
00773 }
00774 if (_refreshAPage == 3 )
00775 {
00776 if (_vtkmpr2Dview_B[2] !=NULL){
00777 _vtkmpr2Dview_B[2] -> Refresh();
00778 }
00779 }
00780 if (_refreshAPage == 4 )
00781 {
00782 if (_vtkplane2Dview_B!=NULL){
00783 _vtkplane2Dview_B -> Refresh();
00784 if (firsttime==false)
00785 {
00786 _vtkplane2Dview_B -> RefreshView();
00787 }
00788 }
00789 }
00790
00791 if (_refreshAPage == 5 )
00792 {
00793
00794 }
00795 if (_refreshAPage == 6 )
00796 {
00797 if (_wxvtkmpr3Dview_B!=NULL){
00798 _wxvtkmpr3Dview_B -> Refresh();
00799 _wxvtk3Dbaseview_MPR3D_B -> Refresh();
00800 }
00801 }
00802 if (_refreshAPage == 7 )
00803 {
00804 if (_wxvtkmpr3Dview_BB!=NULL){
00805 _wxvtkmpr3Dview_BB -> RefreshView();
00806 _wxvtkclipping3Dview_BB -> Refresh();
00807 _wxvtk3Dbaseview_Clipping3D_BB -> Refresh();
00808 if (_panelCutting!=NULL)
00809 {
00810 _panelCutting->RefreshView();
00811 }
00812 }
00813 }
00814
00815 }
00816
00817 vtkMPRBaseData *wxMPRWidget::GetVtkMPRBaseData(){
00818 return _vtkmprbasedata;
00819 }
00820
00821 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
00822 {
00823 return _vtkplane2Dview;
00824 }
00825
00826 wxVtkMPR3DView *wxMPRWidget::GetWxvtkmpr3Dview_BB()
00827 {
00828 return _wxvtkmpr3Dview_BB;
00829 }
00830
00831 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
00832 {
00833 wxVtkBaseView *result=NULL;
00834 if (page==0)
00835 {
00836 if ((id>=0) &&(id<=3)){
00837 result=_vtkmpr2Dview[id];
00838 }
00839 if (id==3)
00840 {
00841 result=_vtkplane2Dview;
00842 }
00843 }
00844 return result;
00845 }
00846
00847 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
00848 {
00849 return _vtkmpr2Dview[direction];
00850 }
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867