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 if ( _vtkInteractorStyleBaseView!=NULL)
00141 {
00142 int X,Y;
00143 wxVTKRenderWindowInteractor *_wxVTKiren;
00144 _wxVTKiren= _vtkInteractorStyleBaseView->GetWxVtk2DBaseView()->GetWxVTKRenderWindowInteractor();
00145 _wxVTKiren->GetEventPosition( X , Y );
00146
00147 printf("EED manualContourBaseControler::OnMouseMove %d %d\n",X,Y);
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 MouseClickRight(X,Y);
00228 }
00229 return true;
00230 }
00231
00232 bool manualContourBaseControler::OnRightButtonUp()
00233 {
00234 return true;
00235 }
00236
00237 void manualContourBaseControler::SetModelView(manualBaseModel *manContModel, manualViewBaseContour *manViewBaseCont){
00238 _manContModel = manContModel;
00239 _manViewBaseCont = manViewBaseCont;
00240 _manViewBaseCont->SetEditable( &_editable );
00241 }
00242
00243 manualBaseModel* manualContourBaseControler::GetManualContourModel()
00244 {
00245 return _manContModel;
00246 }
00247
00248 manualViewBaseContour* manualContourBaseControler::GetManualViewBaseContour()
00249 {
00250 return _manViewBaseCont;
00251 }
00252
00253 void manualContourBaseControler::MouseClickLeft(int x, int y)
00254 {
00255
00256 }
00257
00258 void manualContourBaseControler::MouseClickRight(int x, int y)
00259 {
00260 SetCompleteCreation( true );
00261 SetKeyBoardMoving( false );
00262 this->GetManualContourModel()->SetCloseContour(true);
00263
00264
00265
00266
00267
00268 SetEditable( false );
00269 SetPosibleToMove( false );
00270 _state = 0;
00271
00272
00273 }
00274
00275 void manualContourBaseControler::MouseReleaseLeft(int x, int y)
00276 {
00277 if (_state==5){ _state = 0; }
00278 if (_state==6){ _state = 0; }
00279 if (_state==7){ _state = 0; }
00280 SetMoving( false );
00281 GetManualViewBaseContour()->SelectPosibleContour(x,y,GetZ());
00282 if( GetIfCompleteCreation() && IsEditable() && !GetManualViewBaseContour()->GetPosibleSelected() && (GetManualViewBaseContour()->GetIdPoint(x,y,GetZ())==-1) )
00283 {
00284 SetEditable( false );
00285 SetPosibleToMove( false );
00286 }
00287 }
00288
00289 void manualContourBaseControler::MouseDLeft(int x, int y )
00290 {
00291 if (_state==0)
00292 {
00293
00294 int z=GetZ();
00295 _manViewBaseCont->SelectPosibleContour(x,y,z);
00296
00297 _manViewBaseCont->SelectPosiblePoint(x,y,z);
00298
00299 if ( _manViewBaseCont->GetPosibleSelected() )
00300 {
00301 _editable = true;
00302 }
00303 }
00304 }
00305
00306 void manualContourBaseControler::MouseMove(int x, int y)
00307 {
00308 }
00309
00310 void manualContourBaseControler::SetState(int state)
00311 {
00312 _state=state;
00313 }
00314
00315 int manualContourBaseControler::GetState()
00316 {
00317 return _state;
00318 }
00319
00320 bool manualContourBaseControler::IsEditable( )
00321 {
00322 return _editable;
00323 }
00324
00325 void manualContourBaseControler::SetEditable( bool condition )
00326 {
00327 if (GetManualViewBaseContour()!=NULL) {
00328 if( !condition )
00329 {
00330 GetManualViewBaseContour()->RemoveControlPoints();
00331 }
00332 GetManualViewBaseContour()->SetSelected( condition );
00333 }
00334 _editable = condition;
00335 }
00336
00337
00338 bool manualContourBaseControler::GetPosibleToMove()
00339 {
00340 return _posibleToMove;
00341 }
00342
00343 void manualContourBaseControler::SetPosibleToMove( bool condition )
00344 {
00345 _posibleToMove = condition;
00346 }
00347
00348 bool manualContourBaseControler::IsMoving()
00349 {
00350 return _moving;
00351 }
00352
00353 void manualContourBaseControler::SetMoving( bool condition )
00354 {
00355 _moving = condition;
00356 }
00357
00358 void manualContourBaseControler::SetCompleteCreation( bool condition )
00359 {
00360 _created = condition;
00361 }
00362
00363 bool manualContourBaseControler::GetIfCompleteCreation ( )
00364 {
00365 return _created;
00366 }
00367
00368 void manualContourBaseControler::SetKeyBoardMoving( bool condition )
00369 {
00370 _keyBoardMoving = condition;
00371 }
00372
00373 bool manualContourBaseControler::GetKeyBoardMoving( )
00374 {
00375 return _keyBoardMoving;
00376 }
00377
00378 void manualContourBaseControler::CreateNewManualContour(){
00379 _manViewBaseCont->CreateNewContour();
00380 }
00381
00382 int manualContourBaseControler::GetNumberOfPointsManualContour(){
00383 return _manViewBaseCont->GetNumberOfPoints();
00384 }
00385
00386
00387
00388 int manualContourBaseControler::GetNumberOfPointsSplineManualContour(){
00389
00390 return _manContModel->GetNumberOfPointsSpline();
00391 }
00392
00393
00394 double* manualContourBaseControler::GetVectorPointsXManualContour(){
00395 return _manViewBaseCont->GetVectorPointsXManualContour();
00396 }
00397
00398 double* manualContourBaseControler::GetVectorPointsYManualContour(){
00399 return _manViewBaseCont->GetVectorPointsYManualContour();
00400 }
00401
00402 void manualContourBaseControler::DeleteContour(){
00403 _manViewBaseCont->DeleteContour();
00404 _manContModel->DeleteAllPoints();
00405 }
00406
00407 void manualContourBaseControler::DeleteActualMousePoint(int x, int y)
00408 {
00409 if ((_manContModel!=NULL) && (_manViewBaseCont!=NULL) )
00410 {
00411 int id=_manViewBaseCont->GetIdPoint(x,y,GetZ());
00412 if ((id!=-1) && (_manContModel->GetSizeLstPoints()>2) ){
00413 _manContModel->DeletePoint(id);
00414 _manViewBaseCont->DeletePoint(id);
00415 }
00416 }
00417 _state = 0;
00418 }
00419
00420
00421 void manualContourBaseControler::Magnet(int x, int y)
00422 {
00423 if( IsEditable())
00424 {
00425 _manViewBaseCont->GetIdPoint(x,y,GetZ());
00426 if (GetManualContourModel()!=NULL){
00427 double xx = x;
00428 double yy = y;
00429 double zz = GetZ();
00430 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00431 int id = GetManualContourModel()->GetIdPoint(xx,yy,zz,32000,-1);
00432 if (id!=-1)
00433 {
00434 manualPoint *mp = GetManualContourModel()->GetManualPoint(id);
00435 mp->SetPoint(xx,yy,zz);
00436 }
00437
00438 }
00439 _state = 0;
00440 }
00441 }
00442
00443
00444 void manualContourBaseControler::SetZ(int z)
00445 {
00446 _z=z;
00447 }
00448
00449 int manualContourBaseControler::GetZ()
00450 {
00451 return _z;
00452 }
00453
00454 void manualContourBaseControler::AddPoint(int x, int y, int z)
00455 {
00456 if (GetManualContourModel()!=NULL){
00457 double xx = x;
00458 double yy = y;
00459 double zz = z;
00460
00461 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00462 GetManualContourModel()->AddPoint(xx,yy,zz);
00463 GetManualViewBaseContour()->AddPoint();
00464
00465 }
00466 }
00467
00468 void manualContourBaseControler::InsertPoint(int x,int y,int z)
00469 {
00470
00471 int id=-1;
00472 if (GetManualContourModel()!=NULL){
00473 double xx = x;
00474 double yy = y;
00475 double zz = z;
00476 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00477 if (GetManualContourModel()->GetSizeLstPoints()>1){
00478 id = GetManualContourModel()->InsertPoint(xx,yy,zz);
00479 GetManualViewBaseContour()->InsertPoint(id);
00480
00481 } else {
00482 GetManualContourModel()->AddPoint(xx,yy,zz);
00483 GetManualViewBaseContour()->AddPoint();
00484
00485
00486 }
00487 }
00488 }
00489
00490
00491 void manualContourBaseControler::SetPoint( int id ,int x , int y , int z){
00492 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00493 double xx = x;
00494 double yy = y;
00495 double zz = z;
00496
00497 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00498 manualPoint *mp = _manContModel->GetManualPoint(id);
00499 mp->SetPoint(xx,yy,zz);
00500 GetManualViewBaseContour()->UpdateViewPoint(id);
00501 }
00502 }
00503
00504 void manualContourBaseControler::SetPointX( int id ,int x ){
00505 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00506 double xx = x;
00507 double yy = 0;
00508 double zz = 0;
00509 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00510 manualPoint *mp = _manContModel->GetManualPoint(id);
00511 mp->SetPointX(xx);
00512 GetManualViewBaseContour()->UpdateViewPoint(id);
00513 }
00514 }
00515
00516 void manualContourBaseControler::SetPointY( int id ,int y ){
00517 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00518 double xx = 0;
00519 double yy = y;
00520 double zz = 0;
00521 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00522 manualPoint *mp = _manContModel->GetManualPoint(id);
00523 mp->SetPointY(yy);
00524 GetManualViewBaseContour()->UpdateViewPoint(id);
00525 }
00526 }
00527
00528 void manualContourBaseControler::SetPointZ( int id ,int z ){
00529 if ((GetManualViewBaseContour()!=NULL) && (id>=0)){
00530 double xx = 0;
00531 double yy = 0;
00532 double zz = z;
00533 GetManualViewBaseContour()->TransfromCoordViewWorld(xx,yy,zz);
00534 manualPoint *mp = _manContModel->GetManualPoint(id);
00535 mp->SetPointZ(zz);
00536 GetManualViewBaseContour()->UpdateViewPoint(id);
00537 }
00538 }
00539
00540 void manualContourBaseControler::ResetContour()
00541 {
00542 this->DeleteContour();
00543 GetManualViewBaseContour()->CreateNewContour();
00544 this->SetState(0);
00545 }
00546