Ogitor探索之代码分析(1)---OgreWidget::mouseMoveEvent;OgitorsRoot::OnMouseMove
来源:互联网 发布:形象设计师软件下 编辑:程序博客网 时间:2024/05/18 00:20
- 在../qtOgitor/src/ogrewidget.cpp中定义的void OgreWidget::mouseMoveEvent(QMouseEvent *evt)
- 代码如下:
1: void OgreWidget::mouseMoveEvent(QMouseEvent *evt)
2: {
3: if(!OgitorsRoot::getSingletonPtr()->IsSceneLoaded())
4: return;
5:
6: if(!hasFocus())
7: setFocus();
8:
9: Ogre::Vector2 pos(evt->x(), evt->y());
10:
11: OgitorsRoot::getSingletonPtr()->OnMouseMove(pos, getMouseButtons(evt->buttons(), evt->button()));
12:
13: OgreWidgetMouseMovedSincePress = true;
14: }
-
- 在第11行调用的OgitorsRoot::getSingletonPtr()->OnMouseMove(pos, getMouseButtons(evt->buttons(), evt->button()));
- 将坐标传递给OnMouseMove
- 在../Ogitor/src/OgitorsRootUtilityFunctions.cpp中定义的
- void OgitorsRoot::OnMouseMove (Ogre::Vector2 point, unsigned int buttons)
- point为鼠标在视口的坐标用(x,y)表示,坐标原点在左上角。
1: void OgitorsRoot::OnMouseMove (Ogre::Vector2 point, unsigned int buttons)
2: {
3: if(!mActiveViewport)
4: return;
5: Ogre::Vector4 rect;
6: mActiveViewport->getRect(rect);
7:
8: if((rect.x <= point.x) && (rect.y <= point.y) && ((rect.x + rect.z) >= point.x) && ((rect.y + rect.w) >= point.y))
9: {
10: if(mMouseListener)
11: mMouseListener->OnMouseMove(mActiveViewport, point - Ogre::Vector2(rect.x,rect.y), buttons);
12: else
13: mActiveViewport->OnMouseMove(point - Ogre::Vector2(rect.x,rect.y), buttons);
14: }
15: else
16: {
17: if(mMouseListener)
18: mMouseListener->OnMouseLeave(mActiveViewport, point - Ogre::Vector2(rect.x,rect.y), buttons);
19: else
20: mActiveViewport->OnMouseLeave(point - Ogre::Vector2(rect.x,rect.y), buttons);
21: }
22: }
如图所示:
仅当加载有场景时才会调用OnMouseMove,并实时更新point 的值。OnMouseMove (Ogre::Vector2 point, unsigned int buttons)其中的 buttons 的值由getMouseButtons(evt->buttons(), evt->button())传递过来;判断鼠标按键对应值如下:
OMB_LEFT = 1, /** Left mouse button type */
OMB_RIGHT = 2, /** Right mouse button type */
OMB_MIDDLE = 4 /** Middle mouse button type */
在../qtOgitor/src/ogrewidget.cpp中
1: unsigned int OgreWidget::getMouseButtons(Qt::MouseButtons buttons, Qt::MouseButton button)
2: {
3: unsigned int flags = 0;
4: buttons |= button;
5:
6: if(buttons.testFlag(Qt::LeftButton))
7: flags |= OMB_LEFT;
8: if(buttons.testFlag(Qt::RightButton))
9: flags |= OMB_RIGHT;
10: if(buttons.testFlag(Qt::MidButton))
11: flags |= OMB_MIDDLE;
12:
13: return flags;
14: }
在../Ogitor/include/OgitorsDefinitions.h中
1: /** Ogitor mouse button enumeration */
2: enum OgitorsMouseButtons
3: {
4: OMB_LEFT = 1, /** Left mouse button type */
5: OMB_RIGHT = 2, /** Right mouse button type */
6: OMB_MIDDLE = 4 /** Middle mouse button type */
7: };
- Ogitor探索之代码分析(1)---OgreWidget::mouseMoveEvent;OgitorsRoot::OnMouseMove
- Ogitor探索之代码分析(2)---void MainWindow::newScene()
- Ogitor探索之代码分析(3)---CBaseEditor::showBoundingBox(bool bShow)
- Ogitor代码分析
- Ogitor代码分析
- Ogitor代码分析
- OGITOR 探索打开场景(1)
- Ogitor 绘制地形图(1)
- OGITOR 探索打开场景(2)
- Ogitor
- ogitor
- MyCam 开发日志(十七)----- OnMouseMove()之痛苦经历
- Ogitor 场景编辑器之贴花
- OnMouseMove
- 【双目视觉探索路3】分析整理Learning OpenCV3书中立体标定、校正以及对应代码(1)之总体
- QT类之事件mousePressEvent以及mouseMoveEvent
- 【双目视觉探索路4】分析整理Learning OpenCV3书中立体标定、校正以及对应代码(2)之部分验证
- 【双目视觉探索路5】分析整理Learning OpenCV3书中立体标定、校正以及对应代码(3)之SGBM算法
- Android launcher - Launcher(一)
- 在控制台环境下调用MFC DLL崩溃的问题小结
- Android launcher - Workspace
- 我是做.NET产品的。
- ZJUT1099 最少拦截系统
- Ogitor探索之代码分析(1)---OgreWidget::mouseMoveEvent;OgitorsRoot::OnMouseMove
- 福州市申请及实施房屋拆迁工作程序规范
- 一位董事长的37条忠告
- 【解答】生产日期最近的面包会放在哪?
- VC-"应用程序正常初始化失败"-0xc0150002
- flash与字符串:替换表情(转载 夏天的树人的专栏)
- QQ截屏完美实现 小结
- how to write and run jpa idempotent on mysql
- 在北京的第一次面试