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-2018, 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
glViewport
GLAPI void GLAPIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
mrpt::gui::CGlCanvasBase
This base class implements a working with opengl::Camera and a OpenGL canvas, and it's used in gui::C...
Definition: CGlCanvasBase.h:28
mrpt::opengl::CCamera::getZoomDistance
float getZoomDistance() const
Definition: CCamera.h:73
mrpt::opengl::CRenderizable::Ptr
std::shared_ptr< CRenderizable > Ptr
Definition: CRenderizable.h:45
mrpt
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Definition: CKalmanFilterCapable.h:30
mrpt::opengl::CCamera
A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...
Definition: CCamera.h:30
gui-precomp.h
mrpt::gui
Classes for creating GUI windows for 2D and 3D visualization.
Definition: about_box.h:16
height
GLenum GLsizei GLsizei height
Definition: glext.h:3554
width
GLenum GLsizei width
Definition: glext.h:3531
string
GLsizei const GLchar ** string
Definition: glext.h:4101
CQtGlCanvasBase.h
mrpt::opengl::COpenGLViewport::Ptr
std::shared_ptr< COpenGLViewport > Ptr
Definition: COpenGLViewport.h:63
params
GLenum const GLfloat * params
Definition: glext.h:3534



Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST