00001 #include "manualContourBaseControler.h"
00002
00003
00004
00005
00006
00007
00008 manualContourBaseControler::manualContourBaseControler()
00009 {
00010 _manViewBaseCont = NULL;
00011 _manContModel = NULL;
00012 _state = 0;
00013 _z = 900;
00014 _editable = true;
00015 _posibleToMove = true;
00016 _moving = false;
00017 _created = false;
00018 _keyBoardMoving = false;
00019 }
00020
00021 manualContourBaseControler::~manualContourBaseControler()
00022 {
00023 }
00024
00025
00026 manualContourBaseControler * manualContourBaseControler :: Clone()
00027 {
00028 manualContourBaseControler * clone = new manualContourBaseControler();
00029 CopyAttributesTo(clone);
00030 return clone;
00031 }
00032
00033
00034
00035 void manualContourBaseControler::CopyAttributesTo( manualContourBaseControler * cloneObject)
00036 {
00037
00038 InteractorStyleMaracas::CopyAttributesTo(cloneObject);
00039 cloneObject->SetZ( this->GetZ() );
00040 cloneObject->SetState( this->GetState() );
00041 cloneObject->SetEditable( this->IsEditable() );
00042 cloneObject->SetPosibleToMove( this->GetPosibleToMove() );
00043 cloneObject->SetMoving( this->IsMoving() );
00044 cloneObject->SetCompleteCreation( this->GetIfCompleteCreation() );
00045 cloneObject->SetKeyBoardMoving( this->GetKeyBoardMoving() );
00046 }
00047
00048
00049 void manualContourBaseControler::Configure()
00050 {
00051 }
00052
00053
00054 bool manualContourBaseControler::OnChar()
00055 {
00056 if ( _vtkInteractorStyleBaseView!=NULL )
00057 {
00058 char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
00059
00060 int X,Y;
00061 wxVTKRenderWindowInteractor *_wxVTKiren;
00062 _wxVTKiren= _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00063 _wxVTKiren->GetEventPosition(X, Y);
00064
00065
00066 if ((keyCode==8) || (keyCode==127))
00067 {
00068
00069 if (!GetManualViewBaseContour()->GetPosibleSelected()==true)
00070 {
00071 DeleteActualMousePoint(X,Y);
00072 }
00073 GetManualViewBaseContour()->Refresh();
00074 this->_vtkInteractorStyleBaseView->SetRefresh_waiting();
00075 }
00076 else
00077 {
00078
00079 if (keyCode==32)
00080 {
00081 Magnet(X,Y);
00082 GetManualViewBaseContour()->Refresh();
00083 this->_vtkInteractorStyleBaseView->SetRefresh_waiting();
00084 }
00085 else if( !IsEditable() )
00086 {
00087 if ( keyCode == 'L' )
00088 {
00089 GetManualViewBaseContour()->MoveContour( -1, 0 );
00090 SetKeyBoardMoving( true );
00091 }
00092 else if ( keyCode == 'R' )
00093 {
00094 GetManualViewBaseContour()->MoveContour( 1, 0 );
00095 SetKeyBoardMoving( true );
00096 }
00097 else if ( keyCode == 'U' )
00098 {
00099 GetManualViewBaseContour()->MoveContour( 0, -1 );
00100 SetKeyBoardMoving( true );
00101 }
00102 else if ( keyCode == 'D' )
00103 {
00104 GetManualViewBaseContour()->MoveContour( 0, 1 );
00105 SetKeyBoardMoving( true );
00106 }
00107 else if ( keyCode == 'W' )
00108 {
00109 GetManualViewBaseContour()->MoveContour( -1, 1 );
00110 SetKeyBoardMoving( true );
00111 }
00112 else if ( keyCode == 'Q' )
00113 {
00114 GetManualViewBaseContour()->MoveContour( -1, -1 );
00115 SetKeyBoardMoving( true );
00116 }
00117 else if( keyCode == 'P' )
00118 {
00119 GetManualViewBaseContour()->MoveContour( 1, -1 );
00120 SetKeyBoardMoving( true );
00121 }
00122 else if( keyCode == 'M' )
00123 {
00124 GetManualViewBaseContour()->MoveContour( 1, 1 );
00125 SetKeyBoardMoving( true );
00126 }
00127 if( GetKeyBoardMoving() )
00128 {
00129 GetManualViewBaseContour()->Refresh();
00130 this->_vtkInteractorStyleBaseView->SetRefresh_waiting();
00131 }
00132 }
00133 }
00134 }
00135 return true;
00136 }
00137
00138 bool manualContourBaseControler::OnMouseMove()
00139 {
00140
00141 if ( _vtkInteractorStyleBaseView!=NULL)
00142 {
00143 int X,Y;
00144 wxVTKRenderWindowInteractor *_wxVTKiren;
00145 _wxVTKiren= _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00146 _wxVTKiren->GetEventPosition( X , Y );
00147
00148
00149 if ( (_vtkInteractorStyleBaseView->GetInteractor()->GetControlKey()==0) &&
00150 (_vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey()==0) ) {
00151 MouseMove(X,Y);
00152 }
00153 }
00154 return true;
00155 }
00156
00157 bool manualContourBaseControler::OnLeftButtonDown()
00158 {
00159 SetKeyBoardMoving( false );
00160 if ( _vtkInteractorStyleBaseView!=NULL )
00161 {
00162 int X,Y;
00163 wxVTKRenderWindowInteractor *wxVTKiren;
00164 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00165 wxVTKiren->GetEventPosition(X,Y);
00166
00167 MouseClickLeft(X,Y);
00168 }
00169 return true;
00170 }
00171
00172 bool manualContourBaseControler::OnLeftButtonUp()
00173 {
00174 if ( _vtkInteractorStyleBaseView!=NULL )
00175 {
00176 int X,Y;
00177 wxVTKRenderWindowInteractor *wxVTKiren;
00178 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00179 wxVTKiren->GetEventPosition(X,Y);
00180 MouseReleaseLeft(X,Y);
00181 }
00182 return true;
00183 }
00184
00185 bool manualContourBaseControler::OnLeftDClick()
00186 {
00187 if ( _vtkInteractorStyleBaseView!=NULL )
00188 {
00189 int X,Y;
00190 wxVTKRenderWindowInteractor *wxVTKiren;
00191 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00192 wxVTKiren->GetEventPosition(X,Y);
00193
00194 this->MouseDLeft(X,Y);
00195 }
00196 return true;
00197 }
00198
00199 bool manualContourBaseControler::OnMiddleButtonDown()
00200 {
00201
00202 if ( _vtkInteractorStyleBaseView!=NULL )
00203 {
00204 int X,Y;
00205 wxVTKRenderWindowInteractor *wxVTKiren;
00206 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00207 wxVTKiren->GetEventPosition(X,Y);
00208 GetManualViewBaseContour()->InitMove( X, Y,GetZ());
00209 }
00210 return true;
00211 }
00212
00213 bool manualContourBaseControler::OnMiddleButtonUp()
00214 {
00215 return true;
00216 }
00217
00218 bool manualContourBaseControler::OnRightButtonDown()
00219 {
00220 if( _vtkInteractorStyleBaseView!= NULL )
00221 {
00222 int X,Y;
00223 wxVTKRenderWindowInteractor *wxVTKiren;
00224 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00225 wxVTKiren->GetEventPosition(X, Y);
00226
00227 SetCompleteCreation( true );
00228 SetKeyBoardMoving( false );
00229 MouseClickRight(X,Y);
00230 }
00231 return true;
00232 }
00233
00234 bool manualContourBaseControler::OnRightButtonUp()
00235 {
00236 return true;
00237 }
00238
00239 void manualContourBaseControler::SetModelView(manualContourModel *manContModel, manualViewBaseContour *manViewBaseCont){
00240 _manContModel = manContModel;
00241 _manViewBaseCont = manViewBaseCont;
00242 _manViewBaseCont->SetEditable( &_editable );
00243 }
00244
00245 manualContourModel* manualContourBaseControler::GetManualContourModel()
00246 {
00247 return _manContModel;
00248 }
00249
00250 manualViewBaseContour* manualContourBaseControler::GetManualViewBaseContour()
00251 {
00252 return _manViewBaseCont;
00253 }
00254
00255 void manualContourBaseControler::MouseClickLeft(int x, int y)
00256 {
00257
00258 }
00259
00260 void manualContourBaseControler::MouseClickRight(int x, int y)
00261 {
00262
00263
00264
00265
00266 SetEditable( false );
00267 SetPosibleToMove( false );
00268 _state = 0;
00269
00270
00271 }
00272
00273 void manualContourBaseControler::MouseReleaseLeft(int x, int y)
00274 {
00275 if (_state==5){ _state = 0; }
00276 if (_state==6){ _state = 0; }
00277 if (_state==7){ _state = 0; }
00278 SetMoving( false );
00279 GetManualViewBaseContour()->SelectPosibleContour(x,y,GetZ());
00280 if( GetIfCompleteCreation() && IsEditable() && !GetManualViewBaseContour()->GetPosibleSelected() && (GetManualViewBaseContour()->GetIdPoint(x,y,GetZ())==-1) )
00281 {
00282 SetEditable( false );
00283 SetPosibleToMove( false );
00284 }
00285 }
00286
00287 void manualContourBaseControler::MouseDLeft(int x, int y )
00288 {
00289 if (_state==0)
00290 {
00291 int z=GetZ();
00292 GetManualViewBaseContour()->SelectPosibleContour(x,y,z);
00293 GetManualViewBaseContour()->SelectPosiblePoint(x,y,z);
00294 if ( GetManualViewBaseContour()->GetPosibleSelected() )
00295 {
00296 _editable = true;
00297 }
00298 }
00299 }
00300
00301 void manualContourBaseControler::MouseMove(int x, int y)
00302 {
00303 }
00304
00305 void manualContourBaseControler::SetState(int state)
00306 {
00307 _state=state;
00308 }
00309
00310 int manualContourBaseControler::GetState()
00311 {
00312 return _state;
00313 }
00314
00315 bool manualContourBaseControler::IsEditable( )
00316 {
00317 return _editable;
00318 }
00319
00320 void manualContourBaseControler::SetEditable( bool condition )
00321 {
00322 if (GetManualViewBaseContour()!=NULL) {
00323 if( !condition )
00324 {
00325 GetManualViewBaseContour()->RemoveControlPoints();
00326 }
00327 GetManualViewBaseContour()->SetSelected( condition );
00328 }
00329 _editable = condition;
00330 }
00331
00332
00333 bool manualContourBaseControler::GetPosibleToMove()
00334 {
00335 return _posibleToMove;
00336 }
00337
00338 void manualContourBaseControler::SetPosibleToMove( bool condition )
00339 {
00340 _posibleToMove = condition;
00341 }
00342
00343 bool manualContourBaseControler::IsMoving()
00344 {
00345 return _moving;
00346 }
00347
00348 void manualContourBaseControler::SetMoving( bool condition )
00349 {
00350 _moving = condition;
00351 }
00352
00353 void manualContourBaseControler::SetCompleteCreation( bool condition )
00354 {
00355 _created = condition;
00356 }
00357
00358 bool manualContourBaseControler::GetIfCompleteCreation ( )
00359 {
00360 return _created;
00361 }
00362
00363 void manualContourBaseControler::SetKeyBoardMoving( bool condition )
00364 {
00365 _keyBoardMoving = condition;
00366 }
00367
00368 bool manualContourBaseControler::GetKeyBoardMoving( )
00369 {
00370 return _keyBoardMoving;
00371 }
00372
00373 void manualContourBaseControler::CreateNewManualContour(){
00374 _manViewBaseCont->CreateNewContour();
00375 }
00376
00377 int manualContourBaseControler::GetNumberOfPointsManualContour(){
00378 return _manViewBaseCont->GetNumberOfPoints();
00379 }
00380
00381
00382
00383 int manualContourBaseControler::GetNumberOfPointsSplineManualContour(){
00384
00385 return _manContModel->GetNumberOfPointsSpline();
00386 }
00387
00388
00389 double* manualContourBaseControler::GetVectorPointsXManualContour(){
00390 return _manViewBaseCont->GetVectorPointsXManualContour();
00391 }
00392
00393 double* manualContourBaseControler::GetVectorPointsYManualContour(){
00394 return _manViewBaseCont->GetVectorPointsYManualContour();
00395 }
00396
00397 void manualContourBaseControler::DeleteContour(){
00398 _manViewBaseCont->DeleteContour();
00399 _manContModel->DeleteAllPoints();
00400 }
00401
00402 void manualContourBaseControler::DeleteActualMousePoint(int x, int y)
00403 {
00404 if ((_manContModel!=NULL) && (_manViewBaseCont!=NULL) )
00405 {
00406 int id=_manViewBaseCont->GetIdPoint(x,y,GetZ());
00407 if ((id!=-1) && (_manContModel->GetSizeLstPoints()>2) ){
00408 _manContModel->DeletePoint(id);
00409 _manViewBaseCont->DeletePoint(id);
00410 }
00411 }
00412 _state = 0;
00413 }
00414
00415
00416 void manualContourBaseControler::Magnet(int x, int y)
00417 {
00418 if( IsEditable())
00419 {
00420 _manViewBaseCont->GetIdPoint(x,y,GetZ());
00421 if (GetManualContourModel()!=NULL){
00422 double xx = x;
00423 double yy = y;
00424 double zz = GetZ();
00425 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00426 int id = GetManualContourModel()->GetIdPoint(xx,yy,zz,32000,-1);
00427 if (id!=-1)
00428 {
00429 manualPoint *mp = GetManualContourModel()->GetManualPoint(id);
00430 mp->SetPoint(xx,yy,zz);
00431 }
00432
00433 }
00434 _state = 0;
00435 }
00436 }
00437
00438
00439 void manualContourBaseControler::SetZ(int z)
00440 {
00441 _z=z;
00442 }
00443
00444 int manualContourBaseControler::GetZ()
00445 {
00446 return _z;
00447 }
00448
00449 void manualContourBaseControler::AddPoint(int x, int y, int z)
00450 {
00451 if (GetManualContourModel()!=NULL){
00452 double xx = x;
00453 double yy = y;
00454 double zz = z;
00455 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00456 GetManualContourModel()->AddPoint(xx,yy,zz);
00457 GetManualViewBaseContour()->AddPoint();
00458
00459 }
00460 }
00461
00462 void manualContourBaseControler::InsertPoint(int x,int y,int z)
00463 {
00464
00465 int id=-1;
00466 if (GetManualContourModel()!=NULL){
00467 double xx = x;
00468 double yy = y;
00469 double zz = z;
00470 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00471 if (GetManualContourModel()->GetSizeLstPoints()>1){
00472 id = GetManualContourModel()->InsertPoint(xx,yy,zz);
00473 GetManualViewBaseContour()->InsertPoint(id);
00474
00475 } else {
00476 GetManualContourModel()->AddPoint(xx,yy,zz);
00477 GetManualViewBaseContour()->AddPoint();
00478
00479
00480 }
00481 }
00482 }
00483
00484
00485 void manualContourBaseControler::SetPoint( int id ,int x , int y , int z){
00486 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00487 double xx = x;
00488 double yy = y;
00489 double zz = z;
00490 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00491 manualPoint *mp = _manContModel->GetManualPoint(id);
00492 mp->SetPoint(xx,yy,zz);
00493 GetManualViewBaseContour()->UpdateViewPoint(id);
00494 }
00495 }
00496
00497 void manualContourBaseControler::SetPointX( int id ,int x ){
00498 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00499 double xx = x;
00500 double yy = 0;
00501 double zz = 0;
00502 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00503 manualPoint *mp = _manContModel->GetManualPoint(id);
00504 mp->SetPointX(xx);
00505 GetManualViewBaseContour()->UpdateViewPoint(id);
00506 }
00507 }
00508
00509 void manualContourBaseControler::SetPointY( int id ,int y ){
00510 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00511 double xx = 0;
00512 double yy = y;
00513 double zz = 0;
00514 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00515 manualPoint *mp = _manContModel->GetManualPoint(id);
00516 mp->SetPointY(yy);
00517 GetManualViewBaseContour()->UpdateViewPoint(id);
00518 }
00519 }
00520
00521 void manualContourBaseControler::SetPointZ( int id ,int z ){
00522 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00523 double xx = 0;
00524 double yy = 0;
00525 double zz = z;
00526 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00527 manualPoint *mp = _manContModel->GetManualPoint(id);
00528 mp->SetPointZ(zz);
00529 GetManualViewBaseContour()->UpdateViewPoint(id);
00530 }
00531 }
00532
00533 void manualContourBaseControler::ResetContour()
00534 {
00535 this->DeleteContour();
00536 GetManualViewBaseContour()->CreateNewContour();
00537 this->SetState(0);
00538 }
00539