00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "wxManualTree_MPRWidget.h"
00020
00021 #include <wx/wx.h>
00022 #include <wx/splitter.h>
00023 #include <wx/notebook.h>
00024 #include <wx/colordlg.h>
00025
00026 #include "vtkInteractorStyle3DView.h"
00027
00028
00029
00030
00031
00032
00033 BEGIN_EVENT_TABLE( wxManualTree_MPRWidget, wxPanel )
00034 EVT_MENU( 12121, wxManualTree_MPRWidget::OnRefreshView )
00035
00036 END_EVENT_TABLE( );
00037
00038
00039 wxManualTree_MPRWidget::wxManualTree_MPRWidget( wxWindow* parent,
00040 marImageData *marimageData ,double voxelSize)
00041 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
00042 {
00043
00044 _voxelSize = voxelSize;
00045 _marimageData = marimageData;
00046
00047 _wxvtk3Dbaseview_Clipping3D_C = NULL;
00048 _wxvtkmpr3Dview_C = NULL;
00049 _wxvtkclipping3Dview_C = NULL;
00050
00051 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
00052
00053 int ww,hh;
00054 _MPRWidget2 = new wxMPRWidget2(pnlSplitter,_marimageData,voxelSize);
00055 wxPanel * contour3DView = Create3DViewContour( pnlSplitter , _MPRWidget2->GetVtkMPRBaseData());
00056 this->GetSize(&ww,&hh);
00057
00058 pnlSplitter -> SplitVertically( _MPRWidget2, contour3DView , 600);
00059 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL );
00060 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
00061 pnlSplitter -> SetMinimumPaneSize( 50 );
00062 this -> SetSizer(sizer);
00063
00064
00065
00066 }
00067
00068
00069
00070 wxManualTree_MPRWidget::~wxManualTree_MPRWidget( )
00071 {
00072 if (_wxvtk3Dbaseview_Clipping3D_C != NULL) { delete _wxvtk3Dbaseview_Clipping3D_C; }
00073 if (_wxvtkmpr3Dview_C != NULL) { delete _wxvtkmpr3Dview_C; }
00074 if (_wxvtkclipping3Dview_C != NULL) { delete _wxvtkclipping3Dview_C; }
00075 }
00076
00077
00078
00079 wxPanel* wxManualTree_MPRWidget::Create3DViewContour( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00080 {
00081 wxWindow *wxwindow;
00082 wxPanel *panel=new wxPanel(parent,-1);
00083
00084 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
00085 _wxvtk3Dbaseview_Clipping3D_C = new wxVtk3DBaseView( panelClipping3D );
00086
00087 _wxvtkclipping3Dview_C = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_C);
00088 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
00089 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00090 vtkclipping3Ddataviewer->Configure();
00091 _wxvtkclipping3Dview_C->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
00092
00093 _wxvtkmpr3Dview_C = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_C );
00094 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer();
00095 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00096 vtkmpr3Ddataviewer->Configure();
00097 _wxvtkmpr3Dview_C->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00098
00099 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D_C->GetWxVTKRenderWindowInteractor();
00100
00101 wxPanel *panelControl = new wxPanel(panelClipping3D,-1);
00102 wxPanel *controlPanelMPR3D = _wxvtkmpr3Dview_C->CreateControlPanel(panelControl, false);
00103 wxPanel *controlPanelClipping3D = _wxvtkclipping3Dview_C->CreateSurfControlPanel(panelControl);
00104
00105
00106 wxFlexGridSizer *sizerCtrol = new wxFlexGridSizer(1);
00107
00108 sizerCtrol->Add(controlPanelMPR3D , 1, wxALL|wxEXPAND, 2);
00109 sizerCtrol->Add(controlPanelClipping3D , 1, wxALL|wxEXPAND, 2);
00110 panelControl->SetAutoLayout(true);
00111 panelControl->SetSizer(sizerCtrol);
00112 panelControl->SetSize(400,350);
00113 panelControl->Layout();
00114
00115 int ww,hh;
00116 wxWindow *pp=this;
00117 while (pp->GetParent()!=NULL) pp=pp->GetParent();
00118 pp->GetSize(&ww,&hh);
00119
00120
00121
00122 panelClipping3D -> SplitHorizontally( panelControl,window3D, (int)(hh*0.20) );
00123 wxwindow=panelClipping3D;
00124
00125 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
00126 sizerH1->Add(wxwindow , 1, wxALL|wxEXPAND, 0);
00127 panel->SetAutoLayout(true);
00128 panel->SetSizer(sizerH1);
00129 panel->SetSize(400,400);
00130 panel->Layout();
00131
00132
00133
00134
00135
00136 return panel;
00137 }
00138
00139 void wxManualTree_MPRWidget::ConfigureContour()
00140 {
00141 wxVtkBaseView *wxvtkbaseview;
00142 wxvtkbaseview = _MPRWidget2->GetWxVtkBaseView(0,2);
00143
00144
00145 double spc[3];
00146 wxvtkbaseview->GetSpacing(spc);
00147
00148 _manContourControl_2 = new manualContour3VControler(2);
00149 _mContourModel_2 = new manualContourModel();
00150 _mViewContour_2 = new manualView3VContour(2);
00151 _mContourModel_2->SetCloseContour(false);
00152 _mViewContour_2->SetModel( _mContourModel_2 );
00153 _mViewContour_2->SetWxVtkBaseView( wxvtkbaseview );
00154 _mViewContour_2->SetRange( 1 );
00155 _mViewContour_2->SetMesureScale( _voxelSize );
00156
00157
00158 _mViewContour_2->SetSpacing(spc);
00159
00160 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_2 );
00161
00162
00163 wxvtkbaseview = _MPRWidget2->GetWxVtkBaseView(0,0);
00164 _manContourControl_0 = new manualContour3VControler(0);
00165 _mViewContour_0 = new manualView3VContour(0);
00166 _mViewContour_0->SetModel( _mContourModel_2 );
00167 _mViewContour_0->SetWxVtkBaseView( wxvtkbaseview );
00168 _mViewContour_0->SetRange( 1 );
00169 _mViewContour_0->SetMesureScale( _voxelSize );
00170
00171
00172 _mViewContour_0->SetSpacing(spc);
00173
00174 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_0 );
00175
00176
00177 wxvtkbaseview = _MPRWidget2->GetWxVtkBaseView(0,1);
00178 _manContourControl_1 = new manualContour3VControler(1);
00179 _mViewContour_1 = new manualView3VContour(1);
00180 _mViewContour_1->SetModel( _mContourModel_2 );
00181 _mViewContour_1->SetWxVtkBaseView( wxvtkbaseview );
00182 _mViewContour_1->SetRange( 1 );
00183 _mViewContour_1->SetMesureScale( _voxelSize );
00184
00185
00186 _mViewContour_1->SetSpacing(spc);
00187
00188 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_1 );
00189
00190
00191
00192 wxvtkbaseview = _MPRWidget2->GetWxVtkBaseView(0,3);
00193 _manContourControl_p = new manualContourPerpPlaneControler();
00194 _mViewContour_p = new manualViewPerpPlaneContour();
00195 _mViewContour_p -> SetModel( _mContourModel_2 );
00196 _mViewContour_p -> SetWxVtkBaseView( wxvtkbaseview );
00197 _mViewContour_p -> SetRange( 1 );
00198 _mViewContour_p->SetMesureScale( _voxelSize );
00199
00200
00201 _mViewContour_p->SetSpacing(spc);
00202
00203
00204 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->InsertInteractorStyleMaracas( 0, _manContourControl_p );
00205
00206 vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)wxvtkbaseview;
00207 _manContourControl_p->SetVtkInteractorStylePlane2D( vtkplane2Dview->GetInteractorstyleplane2D() );
00208
00209
00210 wxvtkbaseview = _wxvtkclipping3Dview_C->GetWxvtk3Dbaseview();
00211 _manContourControl_3V3D = new manualContour3V3DControler();
00212 _mViewContour_3D = new manualView3DContour();
00213 _mViewContour_3D->SetModel( _mContourModel_2 );
00214 _mViewContour_3D->SetWxVtkBaseView( wxvtkbaseview );
00215 _mViewContour_3D->SetRange( 1 );
00216 _mViewContour_3D->SetMesureScale(_voxelSize );
00217
00218
00219 _mViewContour_3D->SetSpacing(spc);
00220
00221 int dim[3];
00222 this->_marimageData->GetImageData()->GetDimensions( dim );
00223 _mViewContour_3D->SetDimensions( dim[0],dim[1],dim[2] );
00224 _mViewContour_3D->SetVtkMPRBaseData( _wxvtkmpr3Dview_C->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData() );
00225 ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manContourControl_3V3D );
00226
00227
00228 _manContourControl_0 -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
00229 _manContourControl_1 -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
00230 _manContourControl_2 -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
00231 _manContourControl_p -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
00232 _manContourControl_3V3D -> SetVtkMPRBaseData( _MPRWidget2->GetVtkMPRBaseData() );
00233
00234 _manContourControl_0 -> SetModelView( _mContourModel_2 , _mViewContour_0 );
00235 _manContourControl_0 -> AddManualViewBaseContour( _mViewContour_1 );
00236 _manContourControl_0 -> AddManualViewBaseContour( _mViewContour_2 );
00237 _manContourControl_0 -> AddManualViewBaseContour( _mViewContour_p );
00238 _manContourControl_0 -> AddManualViewBaseContour( _mViewContour_3D );
00239
00240 _manContourControl_1 -> SetModelView( _mContourModel_2 , _mViewContour_1);
00241 _manContourControl_1 -> AddManualViewBaseContour( _mViewContour_2 );
00242 _manContourControl_1 -> AddManualViewBaseContour( _mViewContour_0 );
00243 _manContourControl_1 -> AddManualViewBaseContour( _mViewContour_p );
00244 _manContourControl_1 -> AddManualViewBaseContour( _mViewContour_3D );
00245
00246 _manContourControl_2 -> SetModelView( _mContourModel_2 , _mViewContour_2 );
00247 _manContourControl_2 -> AddManualViewBaseContour( _mViewContour_0 );
00248 _manContourControl_2 -> AddManualViewBaseContour( _mViewContour_1 );
00249 _manContourControl_2 -> AddManualViewBaseContour( _mViewContour_p );
00250 _manContourControl_2 -> AddManualViewBaseContour( _mViewContour_3D );
00251
00252
00253
00254 wxvtkbaseview = _wxvtkclipping3Dview_C->GetWxvtk3Dbaseview();
00255 manualContour3VControler *_manContourControl_3V = new manualContour3VControler(-1);
00256 _manContourControl_3V -> SetModelView( _mContourModel_2 , _mViewContour_3D );
00257 _manContourControl_3V -> AddManualViewBaseContour( _mViewContour_2 );
00258 _manContourControl_3V -> AddManualViewBaseContour( _mViewContour_0 );
00259 _manContourControl_3V -> AddManualViewBaseContour( _mViewContour_1 );
00260 _manContourControl_3V -> AddManualViewBaseContour( _mViewContour_p );
00261 _manContourControl_3V -> SetVtkInteractorStyleBaseView ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView() );
00262 _manContourControl_3V3D -> SetManualContour3VControler( _manContourControl_3V );
00263 _manContourControl_3V3D -> SetModelView( _mContourModel_2 , _mViewContour_3D );
00264
00265
00266 wxvtkbaseview = _MPRWidget2->GetWxVtkBaseView(0,3);
00267 manualContour3VControler *_manContourControl_3V_p = new manualContour3VControler(-1);
00268 _manContourControl_3V_p -> SetModelView( _mContourModel_2 , _mViewContour_p );
00269 _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_2 );
00270 _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_0 );
00271 _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_1 );
00272 _manContourControl_3V_p -> AddManualViewBaseContour( _mViewContour_3D );
00273 _manContourControl_3V_p -> SetVtkInteractorStyleBaseView ((vtkInteractorStyleBaseView*)wxvtkbaseview->GetInteractorStyleBaseView() );
00274 _manContourControl_p -> SetManualContour3VControler( _manContourControl_3V_p );
00275 _manContourControl_p -> SetModelView( _mContourModel_2 , _mViewContour_p );
00276
00277
00278
00279 _manContourControl_0 -> CreateNewManualContour();
00280 _manContourControl_1 -> CreateNewManualContour();
00281 _manContourControl_2 -> CreateNewManualContour();
00282 _manContourControl_p -> CreateNewManualContour();
00283 _manContourControl_3V3D -> CreateNewManualContour();
00284
00285 _manContourControl_0 -> SetActive(true);
00286 _manContourControl_1 -> SetActive(true);
00287 _manContourControl_2 -> SetActive(true);
00288 _manContourControl_p -> SetActive(true);
00289 _manContourControl_3V3D -> SetActive(true);
00290
00291 _manContourControl_0 -> SetEasyCreation(false);
00292 _manContourControl_1 -> SetEasyCreation(false);
00293 _manContourControl_2 -> SetEasyCreation(false);
00294 _manContourControl_p -> SetEasyCreation(false);
00295 _manContourControl_3V3D -> SetEasyCreation(false);
00296
00297 _mViewContour_0 -> RefreshContour();
00298 _mViewContour_1 -> RefreshContour();
00299 _mViewContour_2 -> RefreshContour();
00300 _mViewContour_p -> RefreshContour();
00301 _mViewContour_3D -> RefreshContour();
00302
00303 }
00304
00305
00306 void wxManualTree_MPRWidget::ConfigureVTK(){
00307 _MPRWidget2->ConfigureVTK();
00308 _wxvtk3Dbaseview_Clipping3D_C -> Configure();
00309 _wxvtkmpr3Dview_C -> Configure();
00310 _wxvtkclipping3Dview_C -> Configure();
00311
00312 vtkInteractorStyle3DView *vtkinteractorstyle3Dview = new vtkInteractorStyle3DView();
00313 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_C);
00314 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_C);
00315 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_C->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
00316
00317 ConfigureContour();
00318 }
00319
00320
00321 vtkMPRBaseData *wxManualTree_MPRWidget::GetVtkMPRBaseData(){
00322 return _MPRWidget2->GetVtkMPRBaseData();
00323 }
00324
00325 vtkPlane2DView *wxManualTree_MPRWidget::GetVtkPlane2DView()
00326 {
00327 return _MPRWidget2->GetVtkPlane2DView();
00328 }
00329
00330 manualContourModel *wxManualTree_MPRWidget::GetManualContourModel()
00331 {
00332 return _mContourModel_2;
00333 }
00334
00335 void wxManualTree_MPRWidget::OnRefreshView(wxCommandEvent & event)
00336 {
00337 RefreshView();
00338 }
00339
00340 void wxManualTree_MPRWidget::RefreshView()
00341 {
00342 this->_MPRWidget2->RefreshView();
00343 _wxvtkmpr3Dview_C -> RefreshView();
00344 _wxvtkclipping3Dview_C -> Refresh();
00345 _wxvtk3Dbaseview_Clipping3D_C -> Refresh();
00346 _mViewContour_p -> Refresh();
00347 }
00348
00349
00350
00351
00352
00353
00354