Main MRPT website > C++ reference for MRPT 1.9.9
CQtGlCanvasBase.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2017, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "gui-precomp.h" // Precompiled headers
11 
13 
14 #if MRPT_HAS_Qt5
15 #include <QMouseEvent>
16 
17 using namespace mrpt;
18 using namespace mrpt::gui;
19 
20 CQtGlCanvasBase::CQtGlCanvasBase(QWidget* parent)
21  : QOpenGLWidget(parent),
22  mrpt::gui::CGlCanvasBase(),
23  m_isPressLMouseButton(false),
24  m_isPressRMouseButton(false)
25 {
26  m_mainViewport = getOpenGLSceneRef()->getViewport("main");
27  setMouseTracking(true);
28 }
29 
30 void CQtGlCanvasBase::initializeGL()
31 {
32  clearColors();
33 
34  QOpenGLWidget::initializeGL();
35 }
36 
37 void CQtGlCanvasBase::paintGL() { renderCanvas(); }
38 void CQtGlCanvasBase::resizeGL(int width, int height)
39 {
40  if (height == 0) height = 1;
41  glViewport(0, 0, width, height);
42 
43  QOpenGLWidget::resizeGL(width, height);
44 }
45 
46 opengl::COpenGLViewport::Ptr CQtGlCanvasBase::mainViewport() const
47 {
48  return m_mainViewport;
49 }
50 
51 float CQtGlCanvasBase::getCameraZoomDistance() const
52 {
53  mrpt::opengl::CCamera& cam = m_mainViewport->getCamera();
54  return cam.getZoomDistance();
55 }
56 
57 void CQtGlCanvasBase::mousePressEvent(QMouseEvent* event)
58 {
59  setMousePos(event->pos().x(), event->pos().y());
60  setMouseClicked(true);
61 
62  m_isPressLMouseButton = (event->button() == Qt::LeftButton);
63  m_isPressRMouseButton = (event->button() == Qt::RightButton);
64 
65  QOpenGLWidget::mousePressEvent(event);
66 }
67 
68 void CQtGlCanvasBase::mouseMoveEvent(QMouseEvent* event)
69 {
70  if (m_isPressLMouseButton ||
71  m_isPressRMouseButton) // QApplication::keyboardModifiers()//
72  // event->modifiers() == Qt::ControlModifier
73  // Qt::ShiftModifier
74  {
75  int X = event->pos().x();
76  int Y = event->pos().y();
77  updateLastPos(X, Y);
78 
79  // Proxy variables to cache the changes:
80  CamaraParams params = cameraParams();
81 
82  if (m_isPressLMouseButton)
83  {
84  if (event->modifiers() == Qt::ShiftModifier)
85  updateZoom(params, X, Y);
86 
87  else if (event->modifiers() == Qt::ControlModifier)
88  updateRotate(params, X, Y);
89 
90  else if (event->modifiers() == Qt::NoModifier)
91  updateOrbitCamera(params, X, Y);
92  }
93  else
94  updatePan(params, X, Y);
95 
96  setMousePos(X, Y);
97  setCameraParams(params);
98 
99  updateCamerasParams();
100  update();
101  }
102 
103  QOpenGLWidget::mouseMoveEvent(event);
104 }
105 
106 void CQtGlCanvasBase::mouseReleaseEvent(QMouseEvent* event)
107 {
108  setMouseClicked(false);
109  m_isPressLMouseButton = false;
110  m_isPressRMouseButton = false;
111  QOpenGLWidget::mouseReleaseEvent(event);
112 }
113 
114 void CQtGlCanvasBase::wheelEvent(QWheelEvent* event)
115 {
116  CamaraParams params = cameraParams();
117  updateZoom(params, event->delta());
118  setCameraParams(params);
119 
120  updateCamerasParams();
121 
122  update();
123  QOpenGLWidget::wheelEvent(event);
124 }
125 
126 void CQtGlCanvasBase::renderError(const std::string& err_msg)
127 {
128  Q_UNUSED(err_msg);
129 }
130 
131 void CQtGlCanvasBase::updateCamerasParams()
132 {
133  mrpt::opengl::CCamera& cam = m_mainViewport->getCamera();
134  updateCameraParams(cam);
135 }
136 
137 void CQtGlCanvasBase::insertToMap(const opengl::CRenderizable::Ptr& newObject)
138 {
139  assert(m_mainViewport);
140  m_mainViewport->insert(newObject);
141 }
142 
143 void CQtGlCanvasBase::removeFromMap(const opengl::CRenderizable::Ptr& newObject)
144 {
145  assert(m_mainViewport);
146  m_mainViewport->removeObject(newObject);
147 }
148 
149 bool CQtGlCanvasBase::isPressLMouseButton() const
150 {
151  return m_isPressLMouseButton;
152 }
153 
154 bool CQtGlCanvasBase::isPressRMouseButton() const
155 {
156  return m_isPressRMouseButton;
157 }
158 
159 void CQtGlCanvasBase::unpressMouseButtons()
160 {
161  m_isPressLMouseButton = false;
162  m_isPressRMouseButton = false;
163 }
164 
165 #endif // MRPT_HAS_Qt5
std::shared_ptr< COpenGLViewport > Ptr
std::shared_ptr< CRenderizable > Ptr
Definition: CRenderizable.h:45
float getZoomDistance() const
Definition: CCamera.h:73
GLenum GLsizei width
Definition: glext.h:3531
GLsizei const GLchar ** string
Definition: glext.h:4101
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
GLAPI void GLAPIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
Classes for creating GUI windows for 2D and 3D visualization.
Definition: about_box.h:16
This base class implements a working with opengl::Camera and a OpenGL canvas, and it&#39;s used in gui::C...
Definition: CGlCanvasBase.h:28
A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...
Definition: CCamera.h:30
GLenum GLsizei GLsizei height
Definition: glext.h:3554
GLenum const GLfloat * params
Definition: glext.h:3534



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ae4571287 Thu Nov 23 00:06:53 2017 +0100 at dom oct 27 23:51:55 CET 2019