#include <navigation.h>

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 | |
| Navigation * | navigation |
| C++ does not allow the embedded class to see its surrounding class, so we need this pointer. | |
Definition at line 107 of file navigation.h.
| 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 }
| 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.
01239 { 01240 navigation->getAndFixButtonValues(evt, examineButtonsInfo); 01241 navigation->getAndFixButtonValues(evt, flyModeButtonsInfo); 01242 getAndFixFlyModeButtonValue(evt); 01243 getAndFixFitAllInButtonValue(evt); 01244 }
| 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.
| 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.
01266 { 01267 return navigation->isAnyButtonSelected(examineButtonsInfo) || navigation->isAnyButtonSelected(flyModeButtonsInfo); 01268 }
| 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.
| 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 }
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.
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::panButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::rotateButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::zoomInButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::zoomOutButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::turnHeadButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::flyButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::accelerateButtonIter |
| ParameterIdentificatorList::iterator VRUT::Navigation::NavigationStyleCATIASpecific::decelerateButtonIter |
1.5.5