VRUT::Navigation::NavigationStyleCATIASpecific Class Reference

Type for CATIA specific variables needed for a proper emulation. More...

#include <navigation.h>

Inheritance diagram for VRUT::Navigation::NavigationStyleCATIASpecific:

NavigationStyleInterface

List of all members.

Public Member Functions

 NavigationStyleCATIASpecific (const MODULE_ID &_id, const wxString &_name, Navigation *navigation)
 Constructor.
bool isCATIAFlyModeEnabled () const
 Is the CATIA fly mode enabled.
void getAndFixFlyModeButtonValue (const wxCommandEvent &evt)
 Update flyMode button value.
void getAndFixFitAllInButtonValue (const wxCommandEvent &evt)
 Update fitAllIn button value.
void getAndFixButtonValues (const wxCommandEvent &evt)
 Update other CATIA buttons' value.
void updateParams (const wxCommandEvent &evt)
 Updates the module specific registered parameters.
void registerButtons ()
 Register catia buttons into gui.
bool isAnyButtonSelected () const
 Returns true if any button was selected, false oterwise.
void buttonEvent ()
 Method for handling stateless buttons.
void keyStyle (wxKeyEvent &evt)
 CATIA key style.
void mouseStyle (wxMouseEvent &evt)
 CATIA mouse style.

Public Attributes

bool wasLeftOrRightButtonDownWhilePanning
 Was left or right button down while the user was panning the camera?
bool wasDragging
 Used to determine if the middle button click should set a center of rotation.
bool buttonOperationStarted
 In CATIA, navigation operation is used only once after the operation button was pressed. This variable remembers the state.
bool fly
 Are we in a fly mode?
ParameterIdentificatorList examineButtonsInfo
 List of paramIDs for CATIA Examine buttons.
ParameterIdentificatorList flyModeButtonsInfo
 List of paramIDs for CATIA Fly mode sub buttons.
ParameterIdentificatorList::iterator panButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator rotateButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator zoomInButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator zoomOutButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator turnHeadButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator flyButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator accelerateButtonIter
 Convenience iterator.
ParameterIdentificatorList::iterator decelerateButtonIter
 Convenience iterator.
NavigationOperationPair flyModeButton
 paramID for CATIA Fly mode button
NavigationOperationPair fitAllInButton
 paramID for CATIA Fit All In

Private Attributes

Navigationnavigation
 C++ does not allow the embedded class to see its surrounding class, so we need this pointer.


Detailed Description

Type for CATIA specific variables needed for a proper emulation.

Definition at line 107 of file navigation.h.


Constructor & Destructor Documentation

Navigation::NavigationStyleCATIASpecific::NavigationStyleCATIASpecific ( const MODULE_ID _id,
const wxString &  _name,
Navigation navigation 
)

Constructor.

Definition at line 1190 of file navigation.cpp.

01191 : NavigationStyleInterface(wxT("CATIA"))
01192 {
01193        this->navigation = navigation;
01194 
01195        wasLeftOrRightButtonDownWhilePanning = false;
01196        wasDragging = false;
01197        buttonOperationStarted = false;
01198        fly = false;
01199 
01200        flyModeButton = NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("flyMode"), _id),0);
01201        fitAllInButton = NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("fitAllIn"), _id),0);
01202 
01203        panButtonIter = examineButtonsInfo.insert(examineButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("pan"), _id),0)));
01204        rotateButtonIter = examineButtonsInfo.insert(examineButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("rotate"), _id),0)));
01205        zoomInButtonIter = examineButtonsInfo.insert(examineButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("zoomIn"), _id),0)));
01206        zoomOutButtonIter = examineButtonsInfo.insert(examineButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("zoomOut"), _id),0)));
01207 
01208        turnHeadButtonIter = flyModeButtonsInfo.insert(flyModeButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("turnHead"), _id),0)));
01209        flyButtonIter = flyModeButtonsInfo.insert(flyModeButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("fly"), _id),0)));
01210        accelerateButtonIter = flyModeButtonsInfo.insert(flyModeButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("accelerate"), _id),0)));
01211        decelerateButtonIter = flyModeButtonsInfo.insert(flyModeButtonsInfo.begin(), ParameterIdentificatorList::value_type(NavigationOperationPair(Parameter::ParameterIdentificator(_name, wxT("decelerate"), _id),0)));
01212 
01213 }


Member Function Documentation

bool Navigation::NavigationStyleCATIASpecific::isCATIAFlyModeEnabled (  )  const

Is the CATIA fly mode enabled.

Definition at line 1260 of file navigation.cpp.

01261 {
01262        return flyModeButton.paramValue ? true : false;
01263 }

void Navigation::NavigationStyleCATIASpecific::getAndFixFlyModeButtonValue ( const wxCommandEvent &  evt  ) 

Update flyMode button value.

Definition at line 1215 of file navigation.cpp.

01216 {
01217        int previousValue = flyModeButton.paramValue;
01218        UPDATE_PARAM_FROM_EVENT_INT(flyModeButton.paramId, flyModeButton.paramValue, evt);
01219        if ( flyModeButton.paramValue != previousValue)
01220        {
01221               flyModeButton.paramValue = !previousValue;
01222               navigation->clearButtonValues(examineButtonsInfo);
01223               navigation->clearButtonValues(flyModeButtonsInfo);
01224               navigation->refreshGUI();
01225        }
01226 }

void Navigation::NavigationStyleCATIASpecific::getAndFixFitAllInButtonValue ( const wxCommandEvent &  evt  ) 

Update fitAllIn button value.

Definition at line 1228 of file navigation.cpp.

01229 {
01230        int previousValue = fitAllInButton.paramValue;
01231        UPDATE_PARAM_FROM_EVENT_INT(fitAllInButton.paramId, fitAllInButton.paramValue, evt);
01232        if ( fitAllInButton.paramValue != previousValue)
01233        {
01234               fitAllInButton.paramValue = !previousValue;
01235        }
01236 }

void Navigation::NavigationStyleCATIASpecific::getAndFixButtonValues ( const wxCommandEvent &  evt  )  [virtual]

Update other CATIA buttons' value.

Implements NavigationStyleInterface.

Definition at line 1238 of file navigation.cpp.

void VRUT::Navigation::NavigationStyleCATIASpecific::updateParams ( const wxCommandEvent &  evt  )  [inline, virtual]

Updates the module specific registered parameters.

Implements NavigationStyleInterface.

Definition at line 157 of file navigation.h.

00157 {}

void Navigation::NavigationStyleCATIASpecific::registerButtons (  )  [virtual]

Register catia buttons into gui.

Implements NavigationStyleInterface.

Definition at line 1246 of file navigation.cpp.

01247 {
01248        navigation->registerButton(flyModeButton.paramId);
01249        navigation->registerButton(fitAllInButton.paramId);
01250        if (flyModeButton.paramValue)
01251        {
01252               navigation->registerButtonList(flyModeButtonsInfo);
01253        }
01254        else
01255        {
01256               navigation->registerButtonList(examineButtonsInfo);
01257        }
01258 }

bool Navigation::NavigationStyleCATIASpecific::isAnyButtonSelected (  )  const

Returns true if any button was selected, false oterwise.

Definition at line 1265 of file navigation.cpp.

void Navigation::NavigationStyleCATIASpecific::buttonEvent (  )  [virtual]

Method for handling stateless buttons.

Implements NavigationStyleInterface.

Definition at line 1270 of file navigation.cpp.

01271 {
01272        NODE_ID cameraID = navigation->getCameraID();
01273        Scene * scene = navigation->GetSceneMgr()->GetScene(navigation->getSceneID());
01274        if (!scene)
01275               return;
01276 
01277        const SceneNode * camNode = scene->GetNode(cameraID);
01278        if (!camNode || !camNode->IsOfType(SceneNode::CAMERA))
01279               return;
01280 
01281        Camera * camera = (Camera *)(const_cast<SceneNode *>(camNode));
01282        WriteLocker camLock(*camera);
01283 
01284        if (zoomInButtonIter->paramValue)
01285        {
01286               navigation->zoom(scene, camera, cameraID, 1, -navigation->zoomStep);
01287               navigation->clearButtonValues(examineButtonsInfo);
01288        }
01289        if (zoomOutButtonIter->paramValue)
01290        {
01291               navigation->zoom(scene, camera, cameraID, 1, navigation->zoomStep);
01292               navigation->clearButtonValues(examineButtonsInfo);
01293        }
01294 
01295        if (accelerateButtonIter->paramValue)
01296        {
01297               wxCommandEvent ev = Event::GET_EVT_PARAM_SET_DO(navigation->cruisespeedParamID, wxString::Format(wxT("%g"), navigation->cruisespeed + navigation->flySpeedStep));
01298               navigation->PostToKernel(ev);
01299               navigation->clearButtonValues(flyModeButtonsInfo);
01300        }
01301 
01302        if (decelerateButtonIter->paramValue)
01303        {
01304               wxCommandEvent ev = Event::GET_EVT_PARAM_SET_DO(navigation->cruisespeedParamID, wxString::Format(wxT("%g"), navigation->cruisespeed - navigation->flySpeedStep));
01305               navigation->PostToKernel(ev);
01306               navigation->clearButtonValues(flyModeButtonsInfo);
01307        }
01308        if (fitAllInButton.paramValue)
01309        {
01310               NODE_ID cameraID = navigation->getCameraID();
01311               Scene * scene = navigation->GetSceneMgr()->GetScene(navigation->getSceneID());
01312               scene->Fit(cameraID);
01313               fitAllInButton.paramValue = 0;
01314        }
01315 }

void Navigation::NavigationStyleCATIASpecific::keyStyle ( wxKeyEvent &  evt  )  [virtual]

CATIA key style.

Implements NavigationStyleInterface.

Definition at line 1317 of file navigation.cpp.

01318 {
01319        
01320 }

void Navigation::NavigationStyleCATIASpecific::mouseStyle ( wxMouseEvent &  evt  )  [virtual]

CATIA mouse style.

Implements NavigationStyleInterface.

Definition at line 1322 of file navigation.cpp.

01323 {
01324        NODE_ID cameraID = navigation->getCameraID();
01325        Scene * scene = navigation->GetSceneMgr()->GetScene(navigation->getSceneID());
01326        const SceneNode * camNode = scene->GetNode(cameraID);
01327        Camera * camera = (Camera *)(const_cast<SceneNode *>(camNode));
01328 
01329        navigation->mouseDelta = wxPoint(evt.GetPosition().x - navigation->lastPos.x, evt.GetPosition().y - navigation->lastPos.y);
01330        if (!isAnyButtonSelected()) //Navigation purely by mouse
01331        {
01332               //LOGDEBUG(wxT("handling pure mouse navigation"));
01333               if (evt.Dragging())
01334               {
01335                      wasDragging = true;
01336               }
01337               else if (evt.MiddleUp() && !wasDragging)
01338               {
01339                      navigation->translateCameraCenterToSelection(scene, camera, cameraID, evt);
01340               }
01341               else if (evt.MiddleUp() && wasDragging)
01342               {
01343                      wasDragging = false;
01344               }
01345 
01346               if (evt.MiddleIsDown())
01347               {
01348                      if (evt.LeftIsDown() || evt.RightIsDown())
01349                      {
01350                             wasLeftOrRightButtonDownWhilePanning = true;
01351                             if (isCATIAFlyModeEnabled())
01352                             {
01353                                    navigation->turnHead(scene, camera, cameraID, navigation->mouseDelta, false);
01354                             }
01355                             else
01356                             {
01357                                    navigation->rotate(scene, camera, cameraID, evt.GetPosition(), navigation->mouseDelta, true, false, false);
01358                             }
01359                      }
01360                      else if (!wasLeftOrRightButtonDownWhilePanning)
01361                      {
01362                             navigation->pan(scene, camera, cameraID, navigation->mouseDelta, navigation->panspeed);
01363                      }
01364                      else if (wasLeftOrRightButtonDownWhilePanning)
01365                      {
01366                             navigation->zoom(scene, camera, cameraID, navigation->mouseDelta.y, navigation->zoomspeed);
01367                      }
01368               }
01369               else if (evt.LeftDown() && !evt.Moving())
01370               {
01371                      navigation->select(scene, camera, evt);
01372               }
01373               else
01374               {
01375                      wasLeftOrRightButtonDownWhilePanning = false;
01376                      evt.Skip();
01377               }
01378        }
01379        else //Navigation by buttons and a following mouse action
01380        {
01381               //LOGDEBUG(wxT("handling button navigation"));
01382               if (evt.LeftIsDown())
01383               {
01384                      buttonOperationStarted = true;
01385                      if (!isCATIAFlyModeEnabled())
01386                      {
01387                             if (panButtonIter->paramValue)
01388                             {
01389                                    navigation->pan(scene, camera, cameraID, navigation->mouseDelta, navigation->panspeed);
01390                             }
01391                             if (rotateButtonIter->paramValue)
01392                             {
01393                                    navigation->rotate(scene, camera, cameraID, evt.GetPosition(), navigation->mouseDelta, true, false, false);
01394                             }
01395                      }
01396                      else
01397                      {
01398                             if (flyButtonIter->paramValue)
01399                             {
01400                                    fly = true;
01401                                    //It seems the mouse event is generated only when the mouse cursor is moved, not when just the button is pressed.
01402                                    //When there is no event in the queue, the run methos is not called frequently. This behavior causes changes of flight
01403                                    //speed depending on whether the user only holds the mouse button or moves the mouse and holds the button.
01404                                    //This fixes the problem.
01405                                    navigation->lowMouseEventTimeout();
01406                             }
01407                             if (turnHeadButtonIter->paramValue)
01408                             {
01409                                    navigation->turnHead(scene, camera, cameraID, navigation->mouseDelta, false);
01410                             }
01411                      }
01412               }
01413               else if (buttonOperationStarted)
01414               {
01415                      buttonOperationStarted = false;
01416                      fly = false;
01417                      navigation->clearButtonValues(examineButtonsInfo);
01418                      navigation->clearButtonValues(flyModeButtonsInfo);
01419                      navigation->highMouseEventTimeout();
01420               }
01421        }
01422 
01423        navigation->lastPos = evt.GetPosition();
01424 }


Member Data Documentation

C++ does not allow the embedded class to see its surrounding class, so we need this pointer.

Definition at line 110 of file navigation.h.

Was left or right button down while the user was panning the camera?

Definition at line 113 of file navigation.h.

Used to determine if the middle button click should set a center of rotation.

Definition at line 115 of file navigation.h.

In CATIA, navigation operation is used only once after the operation button was pressed. This variable remembers the state.

Definition at line 117 of file navigation.h.

Are we in a fly mode?

Definition at line 119 of file navigation.h.

List of paramIDs for CATIA Examine buttons.

Definition at line 121 of file navigation.h.

List of paramIDs for CATIA Fly mode sub buttons.

Definition at line 123 of file navigation.h.

Convenience iterator.

Definition at line 126 of file navigation.h.

Convenience iterator.

Definition at line 128 of file navigation.h.

Convenience iterator.

Definition at line 130 of file navigation.h.

Convenience iterator.

Definition at line 132 of file navigation.h.

Convenience iterator.

Definition at line 134 of file navigation.h.

Convenience iterator.

Definition at line 136 of file navigation.h.

Convenience iterator.

Definition at line 138 of file navigation.h.

Convenience iterator.

Definition at line 140 of file navigation.h.

paramID for CATIA Fly mode button

Definition at line 143 of file navigation.h.

paramID for CATIA Fit All In

Definition at line 145 of file navigation.h.


The documentation for this class was generated from the following files:

Generated on Tue Mar 10 14:41:48 2009 for VRUT by  doxygen 1.5.5