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