00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <wx/wx.h>
00021 #include <wx/splitter.h>
00022 #include <wx/notebook.h>
00023 #include <wx/colordlg.h>
00024
00025 #include "wxManualRegistration3D.h"
00026
00027
00028
00029
00030
00031
00032 BEGIN_EVENT_TABLE( wxManualRegistration3D, wxPanel )
00033 EVT_MENU( 12121, wxManualRegistration3D::OnRefreshView )
00034
00035 END_EVENT_TABLE( );
00036
00037
00038 wxManualRegistration3D::wxManualRegistration3D( wxWindow* parent,
00039 marImageData *marimageData )
00040 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
00041 {
00042
00043 _marimageData = marimageData;
00044
00045 _vtkmprbasedata_A = new vtkMPRBaseData();
00046 _vtkmprbasedata_A->SetMarImageData(_marimageData);
00047
00048 _wxvtk3Dbaseview_Clipping3D = NULL;
00049 _wxvtkmpr3Dview_A = NULL;
00050 _wxvtkclipping3Dview_A = NULL;
00051
00052 _wxvtkmpr3Dview_B = NULL;
00053 _wxvtkclipping3Dview_B = NULL;
00054
00055 _panelCutting = NULL;
00056
00057 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
00058
00059
00060
00061
00062 wxPanel * view3Dpanel = Create3DView( pnlSplitter , _vtkmprbasedata_A );
00063 wxPanel * registrationControl = CreateRegistration3DControl( pnlSplitter ,_vtkmprbasedata_A);
00064
00065
00066
00067 pnlSplitter -> SplitVertically( view3Dpanel, registrationControl , 700);
00068 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL );
00069 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
00070 pnlSplitter -> SetMinimumPaneSize( 25 );
00071 this -> SetSizer(sizer);
00072
00073
00074 _transform = vtkTransform::New();
00075 _transformBak = vtkTransform::New();
00076 _transformBak->Identity();
00077 xBak=0;
00078 yBak=0;
00079 zBak=0;
00080 }
00081
00082
00083
00084 wxManualRegistration3D::~wxManualRegistration3D( )
00085 {
00086 if (_wxvtk3Dbaseview_Clipping3D != NULL) { delete _wxvtk3Dbaseview_Clipping3D; }
00087 if (_wxvtkmpr3Dview_A != NULL) { delete _wxvtkmpr3Dview_A; }
00088 if (_wxvtkclipping3Dview_A != NULL) { delete _wxvtkclipping3Dview_A; }
00089
00090 if (_wxvtkmpr3Dview_B != NULL) { delete _wxvtkmpr3Dview_B; }
00091 if (_wxvtkclipping3Dview_B != NULL) { delete _wxvtkclipping3Dview_B; }
00092 }
00093
00094
00095
00096
00097 void wxManualRegistration3D::ConfigureVTK()
00098 {
00099 _wxvtk3Dbaseview_Clipping3D -> Configure();
00100
00101 _wxvtkmpr3Dview_A -> Configure();
00102 _wxvtkclipping3Dview_A -> Configure();
00103 vtkInteractorStyle3DView *vtkinteractorstyle3Dview_A = new vtkInteractorStyle3DView();
00104 vtkinteractorstyle3Dview_A->SetWxVtkMPR3DView(_wxvtkmpr3Dview_A);
00105 vtkinteractorstyle3Dview_A->SetWxVtkClipping3DView(_wxvtkclipping3Dview_A);
00106 _wxvtk3Dbaseview_Clipping3D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( vtkinteractorstyle3Dview_A );
00107
00108 }
00109
00110
00111 void wxManualRegistration3D::ConfigureVTK_B()
00112 {
00113 _wxvtkmpr3Dview_B -> Configure();
00114 _wxvtkclipping3Dview_B -> Configure();
00115 vtkInteractorStyle3DView *vtkinteractorstyle3Dview_B = new vtkInteractorStyle3DView();
00116 vtkinteractorstyle3Dview_B->SetWxVtkMPR3DView(_wxvtkmpr3Dview_B);
00117 vtkinteractorstyle3Dview_B->SetWxVtkClipping3DView(_wxvtkclipping3Dview_B);
00118 _wxvtk3Dbaseview_Clipping3D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( vtkinteractorstyle3Dview_B );
00119 }
00120
00121
00122 void wxManualRegistration3D::OnRefreshView(wxCommandEvent & event)
00123 {
00124 RefreshView();
00125 }
00126
00127
00128 void wxManualRegistration3D::OnTracking(wxCommandEvent& event)
00129 {
00130 if (_wxvtkmpr3Dview_B!=NULL){
00131 _wxvtkmpr3Dview_B->InitOrientationPointWidget();
00132
00133 double spc[3];
00134
00135 this->_marimageData->GetImageData()->GetSpacing(spc);
00136
00137
00138 xBak = spc[0] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
00139 yBak = spc[1] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
00140 zBak = spc[2] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
00141
00142 double mat[16];
00143 mat[0]=_transform->GetMatrix()->GetElement(0,0);
00144 mat[1]=_transform->GetMatrix()->GetElement(0,1);
00145 mat[2]=_transform->GetMatrix()->GetElement(0,2);
00146 mat[3]=_transform->GetMatrix()->GetElement(0,3);
00147
00148 mat[4]=_transform->GetMatrix()->GetElement(1,0);
00149 mat[5]=_transform->GetMatrix()->GetElement(1,1);
00150 mat[6]=_transform->GetMatrix()->GetElement(1,2);
00151 mat[7]=_transform->GetMatrix()->GetElement(1,3);
00152
00153 mat[8]=_transform->GetMatrix()->GetElement(2,0);
00154 mat[9]=_transform->GetMatrix()->GetElement(2,1);
00155 mat[10]=_transform->GetMatrix()->GetElement(2,2);
00156 mat[11]=_transform->GetMatrix()->GetElement(2,3);
00157
00158 mat[12]=_transform->GetMatrix()->GetElement(3,0);
00159 mat[13]=_transform->GetMatrix()->GetElement(3,1);
00160 mat[14]=_transform->GetMatrix()->GetElement(3,2);
00161 mat[15]=_transform->GetMatrix()->GetElement(3,3);
00162
00163 _transformBak->SetMatrix(mat);
00164 }
00165
00166
00167 this->_wxvtkmpr3Dview_A->TestLoic1();
00168
00169
00170 }
00171
00172
00173
00174 void wxManualRegistration3D::RefreshView()
00175 {
00176 double spc[3];
00177
00178 if ( _wxvtkmpr3Dview_B!=NULL )
00179 {
00180 if (_btnTrack->GetValue()==true)
00181 {
00182
00183 this->_marimageData->GetImageData()->GetSpacing(spc);
00184 vtkTransform *m = this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetTransformOrientation();
00185 double x = spc[0] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
00186 double y = spc[1] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
00187 double z = spc[2] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
00188 double xx=this->_posX->GetValue()/30.0;
00189 double yy=this->_posY->GetValue()/30.0;
00190 double zz=this->_posZ->GetValue()/30.0;
00191 double sx=this->_scaleX->GetValue()/100.0;
00192 double sy=this->_scaleY->GetValue()/100.0;
00193 double sz=this->_scaleZ->GetValue()/100.0;
00194 _transform->Identity();
00195
00196
00197
00198
00199
00200
00201 _transform->Translate( xx , yy , zz );
00202 _transform->Translate( x , y , z );
00203 _transform->Concatenate( m->GetMatrix() );
00204 _transform->RotateX( _angAlfa->GetValue()/30.0 );
00205 _transform->RotateY( _angBeta->GetValue()/30.0 );
00206 _transform->RotateZ( _angGama->GetValue()/30.0 );
00207 _transform->Scale( sx,sy,sz );
00208 _transform->Translate(-(xBak),-(yBak),-(zBak) );
00209
00210 _transform->Concatenate( _transformBak->GetMatrix() );
00211
00212 }
00213
00214
00215
00216 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = _wxvtkclipping3Dview_B->GetVtkClipping3DDataViewer();
00217 vtkActor *vtkactor;
00218 int i;
00219 for (i=0;i<4;i++)
00220 {
00221 vtkactor = vtkclipping3Ddataviewer->GetTissueActor(i);
00222 vtkactor->SetUserTransform( _transform );
00223 }
00224 _wxvtkmpr3Dview_B -> RefreshView();
00225 _wxvtkclipping3Dview_B -> Refresh();
00226 }
00227
00228 _wxvtkmpr3Dview_A -> RefreshView();
00229 _wxvtkclipping3Dview_A -> Refresh();
00230 _wxvtk3Dbaseview_Clipping3D -> Refresh();
00231
00232 if (_panelCutting!=NULL)
00233 {
00234 _panelCutting->RefreshView();
00235 }
00236
00237 }
00238
00239
00240
00241
00242 wxPanel* wxManualRegistration3D::CreateRegistration3DControl( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00243 {
00244 wxPanel *panel = new wxPanel(parent,-1);
00245
00246 int maxX = vtkmprbasedata->GetMaxPositionX();
00247 int maxY = vtkmprbasedata->GetMaxPositionY();
00248 int maxZ = vtkmprbasedata->GetMaxPositionZ();
00249 maxX=100;
00250 maxY=100;
00251 maxZ=100;
00252
00253 _posX = new wxSlider( panel, -1,0 , -maxX*2, maxX*2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00254 _posY = new wxSlider( panel, -1,0 , -maxY*2, maxY*2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00255 _posZ = new wxSlider( panel, -1,0 , -maxZ*2, maxZ*2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00256
00257 _scaleX = new wxSlider( panel, -1,100 , 0, 200, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00258 _scaleY = new wxSlider( panel, -1,100 , 0, 200, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00259 _scaleZ = new wxSlider( panel, -1,100 , 0, 200, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00260
00261
00262 _angAlfa = new wxSlider( panel, -1,0 , -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00263 _angBeta = new wxSlider( panel, -1,0 , -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00264 _angGama = new wxSlider( panel, -1,0 , -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS |wxSL_LABELS );
00265
00266
00267 _btnTrack = new wxCheckBox(panel, -1,_T("Tracking"));
00268
00269 _posX->SetTickFreq( 10, 0 );
00270 _posY->SetTickFreq( 10, 0 );
00271 _posZ->SetTickFreq( 10, 0 );
00272
00273 _angAlfa->SetTickFreq( 30, 0 );
00274 _angBeta->SetTickFreq( 30, 0 );
00275 _angGama->SetTickFreq( 30, 0 );
00276
00277
00278
00279
00280 Connect(_posX->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00281 Connect(_posY->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00282 Connect(_posZ->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00283
00284 Connect(_scaleX->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00285 Connect(_scaleY->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00286 Connect(_scaleZ->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00287
00288 Connect(_angAlfa->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00289 Connect(_angBeta->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00290 Connect(_angGama->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation );
00291
00292 Connect(_btnTrack->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxManualRegistration3D::OnTracking );
00293
00294
00295 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
00296 sizerH1->Add( _posX, 1, wxALL|wxEXPAND, 5);
00297 sizerH1->Add( _posY, 1, wxALL|wxEXPAND, 5);
00298 sizerH1->Add( _posZ, 1, wxALL|wxEXPAND, 5);
00299
00300
00301 wxBoxSizer *sizerH2 = new wxBoxSizer(wxHORIZONTAL);
00302 sizerH2->Add( _scaleX, 1, wxALL|wxEXPAND, 5);
00303 sizerH2->Add( _scaleY, 1, wxALL|wxEXPAND, 5);
00304 sizerH2->Add( _scaleZ, 1, wxALL|wxEXPAND, 5);
00305
00306 wxBoxSizer *sizerH3 = new wxBoxSizer(wxHORIZONTAL);
00307 sizerH3->Add( _angAlfa, 1, wxALL|wxEXPAND, 5);
00308 sizerH3->Add( _angBeta, 1, wxALL|wxEXPAND, 5);
00309 sizerH3->Add( _angGama, 1, wxALL|wxEXPAND, 5);
00310
00311
00312 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00313 sizer->Add( sizerH1 , 1, wxALL|wxEXPAND, 0);
00314 sizer->Add( sizerH2 , 1, wxALL|wxEXPAND, 0);
00315 sizer->Add( sizerH3 , 1, wxALL|wxEXPAND, 0);
00316 sizer->Add( _btnTrack , 1, wxALL|wxEXPAND, 10);
00317 sizer->Add( new wxPanel(panel,-1) , 1, wxALL|wxEXPAND, 0);
00318 sizer->Add( new wxPanel(panel,-1) , 1, wxALL|wxEXPAND, 0);
00319 sizer->Add( new wxPanel(panel,-1) , 1, wxALL|wxEXPAND, 0);
00320
00321 panel->SetAutoLayout(true);
00322 panel->SetSizer(sizer);
00323 panel->SetSize(400,400);
00324 panel->Layout();
00325
00326 return panel;
00327 }
00328
00329 void wxManualRegistration3D::OnPositionRotation(wxScrollEvent& event)
00330 {
00331
00332 RefreshView();
00333 }
00334
00335
00336 wxPanel* wxManualRegistration3D::Create3DView( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00337 {
00338 wxWindow *wxwindow;
00339 wxPanel *panel=new wxPanel(parent,-1);
00340
00341 wxSplitterWindow *panelClipping3D = new wxSplitterWindow( panel , -1);
00342 _wxvtk3Dbaseview_Clipping3D = new wxVtk3DBaseView( panelClipping3D );
00343
00344 _wxvtkclipping3Dview_A = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D);
00345 vtkClipping3DDataViewer *vtkclipping3Ddataviewer_A = new vtkClipping3DDataViewer();
00346 vtkclipping3Ddataviewer_A->SetVtkMPRBaseData(vtkmprbasedata);
00347 vtkclipping3Ddataviewer_A->Configure();
00348 _wxvtkclipping3Dview_A->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer_A);
00349
00350 _wxvtkmpr3Dview_A = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D );
00351 vtkMPR3DDataViewer *vtkmpr3Ddataviewer_A = new vtkMPR3DDataViewer();
00352 vtkmpr3Ddataviewer_A->SetVtkMPRBaseData(vtkmprbasedata);
00353 vtkmpr3Ddataviewer_A->Configure();
00354 _wxvtkmpr3Dview_A->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer_A);
00355
00356
00357
00358 wxWindow *window3D = _wxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
00359 wxSplitterWindow *panelControlSplit = new wxSplitterWindow(panelClipping3D,-1);
00360
00361
00362 wxPanel *panelControl_A = new wxPanel(panelControlSplit,-1,wxDefaultPosition,wxSize(800,800));
00363
00364 wxPanel *controlPanelMPR3D_A = _wxvtkmpr3Dview_A->CreateControlPanel(panelControl_A);
00365 wxPanel *controlPanelClipping3D_A = _wxvtkclipping3Dview_A->CreateControlPanel(panelControl_A);
00366
00367 _btnCutImageData = new wxCheckBox(panelControl_A,-1,_T("Cut Module"));
00368 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &wxManualRegistration3D::OnCutImagaData );
00369
00370
00371
00372 wxFlexGridSizer *sizerCtrol_A = new wxFlexGridSizer(1);
00373
00374 sizerCtrol_A->Add(controlPanelMPR3D_A , 1, wxALL|wxEXPAND, 2);
00375 sizerCtrol_A->Add(controlPanelClipping3D_A , 1, wxALL|wxEXPAND, 2);
00376 sizerCtrol_A->Add( _btnCutImageData , 1, wxALL, 2);
00377
00378
00379 panelControl_A->SetAutoLayout(true);
00380 panelControl_A->SetSizer(sizerCtrol_A);
00381 panelControl_A->SetSize(400,350);
00382 panelControl_A->Layout();
00383
00384
00385
00386 _panelControl_B = new wxPanel(panelControlSplit,-1,wxDefaultPosition,wxSize(800,800));
00387
00388
00389 panelControlSplit->SplitVertically(panelControl_A, _panelControl_B);
00390 panelControlSplit->SetMinimumPaneSize( 20 );
00391
00392 wxBoxSizer *sizerCtrol = new wxBoxSizer(wxHORIZONTAL);
00393 sizerCtrol->Add(panelControlSplit , 1, wxALL|wxEXPAND, 2);
00394
00395 panelControlSplit->SetAutoLayout(true);
00396 panelControlSplit->SetSizer(sizerCtrol);
00397
00398 panelControlSplit->Layout();
00399
00400 int ww,hh;
00401 wxWindow *pp=this;
00402 while (pp->GetParent()!=NULL) pp=pp->GetParent();
00403 pp->GetSize(&ww,&hh);
00404
00405
00406
00407 panelClipping3D -> SplitHorizontally( panelControlSplit,window3D );
00408 panelClipping3D -> SetMinimumPaneSize( 20 );
00409 wxwindow=panelClipping3D;
00410
00411 wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
00412 sizerH1->Add(wxwindow , 1, wxALL|wxEXPAND, 0);
00413 panel->SetAutoLayout(true);
00414 panel->SetSizer(sizerH1);
00415 panel->SetSize(400,400);
00416 panel->Layout();
00417
00418
00419
00420
00421
00422 return panel;
00423 }
00424
00425 void wxManualRegistration3D::AddPanelControl_B( wxWindow *parent, marImageData *marimagedata)
00426 {
00427
00428
00429
00430 vtkMPRBaseData* vtkmprbasedata = new vtkMPRBaseData();
00431 vtkmprbasedata->SetMarImageData(marimagedata);
00432
00433 _wxvtkclipping3Dview_B = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D);
00434 vtkClipping3DDataViewer *vtkclipping3Ddataviewer_B = new vtkClipping3DDataViewer();
00435 vtkclipping3Ddataviewer_B->SetVtkMPRBaseData(vtkmprbasedata);
00436 vtkclipping3Ddataviewer_B->Configure();
00437 _wxvtkclipping3Dview_B->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer_B);
00438
00439 _wxvtkmpr3Dview_B = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D );
00440 vtkMPR3DDataViewer *vtkmpr3Ddataviewer_B = new vtkMPR3DDataViewer();
00441 vtkmpr3Ddataviewer_B->SetVtkMPRBaseData(vtkmprbasedata);
00442 vtkmpr3Ddataviewer_B->Configure();
00443 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer_B);
00444
00445
00446 wxPanel *controlPanelMPR3D_B = _wxvtkmpr3Dview_B->CreateControlPanel(_panelControl_B);
00447 wxPanel *controlPanelClipping3D_B = _wxvtkclipping3Dview_B->CreateControlPanel(_panelControl_B);
00448
00449
00450 wxFlexGridSizer *sizerCtrol_B = new wxFlexGridSizer(1);
00451
00452 sizerCtrol_B->Add(controlPanelMPR3D_B , 1, wxALL|wxEXPAND, 2);
00453 sizerCtrol_B->Add(controlPanelClipping3D_B , 1, wxALL|wxEXPAND, 2);
00454
00455 _panelControl_B->SetAutoLayout(true);
00456 _panelControl_B->SetSizer(sizerCtrol_B);
00457 _panelControl_B->SetSize(400,350);
00458 _panelControl_B->Layout();
00459 }
00460
00461
00462 void wxManualRegistration3D::AddSecondVolume(marImageData *marimagedata)
00463 {
00464 AddPanelControl_B(_panelControl_B,marimagedata);
00465 ConfigureVTK_B();
00466 RefreshView();
00467 }
00468
00469 bool wxManualRegistration3D::GetIfSecondVolumeExist()
00470 {
00471 bool result=false;
00472 if (_wxvtkmpr3Dview_B!=NULL)
00473 {
00474 result=true;
00475 }
00476 return result;
00477 }
00478
00479 void wxManualRegistration3D::OnCutImagaData(wxCommandEvent &event)
00480 {
00481 if (_btnCutImageData->GetValue()==true){
00482 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
00483 _framePanelCutting->SetSize(550,400);
00484 _panelCutting = new wxPanelCuttingImageData(_framePanelCutting);
00485 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D );
00486 _panelCutting->SetVtkMPRBaseData( _vtkmprbasedata_A );
00487 _panelCutting->Configure( );
00488 _framePanelCutting->Show();
00489
00490 RefreshView();
00491 } else {
00492 if (_framePanelCutting!=NULL){
00493 _panelCutting->RemoveActors();
00494 _framePanelCutting->Close();
00495 _framePanelCutting = NULL;
00496 _panelCutting = NULL;
00497 }
00498 }
00499 }
00500
00501
00502
00503
00504