MRPT  1.9.9
CQtGlCanvasBase.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://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), mrpt::gui::CGlCanvasBase()
22 
23 {
24  m_mainViewport = getOpenGLSceneRef()->getViewport("main");
25  setMouseTracking(true);
26 }
27 
28 void CQtGlCanvasBase::initializeGL()
29 {
30  clearColors();
31 
32  QOpenGLWidget::initializeGL();
33 }
34 
35 void CQtGlCanvasBase::paintGL() { renderCanvas(); }
36 void CQtGlCanvasBase::resizeGL(int width, int height)
37 {
38  if (height == 0) height = 1;
39  glViewport(0, 0, width, height);
40 
41  QOpenGLWidget::resizeGL(width, height);
42 }
43 
44 opengl::COpenGLViewport::Ptr CQtGlCanvasBase::mainViewport() const
45 {
46  return m_mainViewport;
47 }
48 
49 float CQtGlCanvasBase::getCameraZoomDistance() const
50 {
51  mrpt::opengl::CCamera& cam = m_mainViewport->getCamera();
52  return cam.getZoomDistance();
53 }
54 
55 void CQtGlCanvasBase::mousePressEvent(QMouseEvent* event)
56 {
57  setMousePos(event->pos().x(), event->pos().y());
58  setMouseClicked(true);
59 
60  m_isPressLMouseButton = (event->button() == Qt::LeftButton);
61  m_isPressRMouseButton = (event->button() == Qt::RightButton);
62 
63  QOpenGLWidget::mousePressEvent(event);
64 }
65 
66 void CQtGlCanvasBase::mouseMoveEvent(QMouseEvent* event)
67 {
68  if (m_isPressLMouseButton ||
69  m_isPressRMouseButton) // QApplication::keyboardModifiers()//
70  // event->modifiers() == Qt::ControlModifier
71  // Qt::ShiftModifier
72  {
73  int X = event->pos().x();
74  int Y = event->pos().y();
75  updateLastPos(X, Y);
76 
77  // Proxy variables to cache the changes:
78  CamaraParams params = cameraParams();
79 
80  if (m_isPressLMouseButton)
81  {
82  if (event->modifiers() == Qt::ShiftModifier)
83  updateZoom(params, X, Y);
84 
85  else if (event->modifiers() == Qt::ControlModifier)
86  updateRotate(params, X, Y);
87 
88  else if (event->modifiers() == Qt::NoModifier)
89  updateOrbitCamera(params, X, Y);
90  }
91  else
92  updatePan(params, X, Y);
93 
94  setMousePos(X, Y);
95  setCameraParams(params);
96 
97  updateCamerasParams();
98  update();
99  }
100 
101  QOpenGLWidget::mouseMoveEvent(event);
102 }
103 
104 void CQtGlCanvasBase::mouseReleaseEvent(QMouseEvent* event)
105 {
106  setMouseClicked(false);
107  m_isPressLMouseButton = false;
108  m_isPressRMouseButton = false;
109  QOpenGLWidget::mouseReleaseEvent(event);
110 }
111 
112 void CQtGlCanvasBase::wheelEvent(QWheelEvent* event)
113 {
114  CamaraParams params = cameraParams();
115  updateZoom(params, event->delta());
116  setCameraParams(params);
117 
118  updateCamerasParams();
119 
120  update();
121  QOpenGLWidget::wheelEvent(event);
122 }
123 
124 void CQtGlCanvasBase::renderError(const std::string& err_msg)
125 {
126  Q_UNUSED(err_msg);
127 }
128 
129 void CQtGlCanvasBase::updateCamerasParams()
130 {
131  mrpt::opengl::CCamera& cam = m_mainViewport->getCamera();
132  updateCameraParams(cam);
133 }
134 
135 void CQtGlCanvasBase::insertToMap(const opengl::CRenderizable::Ptr& newObject)
136 {
137  assert(m_mainViewport);
138  m_mainViewport->insert(newObject);
139 }
140 
141 void CQtGlCanvasBase::removeFromMap(const opengl::CRenderizable::Ptr& newObject)
142 {
143  assert(m_mainViewport);
144  m_mainViewport->removeObject(newObject);
145 }
146 
147 bool CQtGlCanvasBase::isPressLMouseButton() const
148 {
149  return m_isPressLMouseButton;
150 }
151 
152 bool CQtGlCanvasBase::isPressRMouseButton() const
153 {
154  return m_isPressRMouseButton;
155 }
156 
157 void CQtGlCanvasBase::unpressMouseButtons()
158 {
159  m_isPressLMouseButton = false;
160  m_isPressRMouseButton = false;
161 }
162 
163 #endif // MRPT_HAS_Qt5
float getZoomDistance() const
Definition: CCamera.h:70
GLenum GLsizei width
Definition: glext.h:3535
GLsizei const GLchar ** string
Definition: glext.h:4116
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:14
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:27
GLenum GLsizei GLsizei height
Definition: glext.h:3558
GLenum const GLfloat * params
Definition: glext.h:3538



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 8fe78517f Sun Jul 14 19:43:28 2019 +0200 at lun oct 28 02:10:00 CET 2019