15 #include <QMouseEvent> 20 CQtGlCanvasBase::CQtGlCanvasBase(QWidget* parent)
21 : QOpenGLWidget(parent),
23 m_isPressLMouseButton(false),
24 m_isPressRMouseButton(false)
26 m_mainViewport = getOpenGLSceneRef()->getViewport(
"main");
27 setMouseTracking(
true);
30 void CQtGlCanvasBase::initializeGL()
34 QOpenGLWidget::initializeGL();
37 void CQtGlCanvasBase::paintGL() { renderCanvas(); }
38 void CQtGlCanvasBase::resizeGL(
int width,
int height)
48 return m_mainViewport;
51 float CQtGlCanvasBase::getCameraZoomDistance()
const 57 void CQtGlCanvasBase::mousePressEvent(QMouseEvent* event)
59 setMousePos(event->pos().x(),
event->pos().y());
60 setMouseClicked(
true);
62 m_isPressLMouseButton = (
event->button() == Qt::LeftButton);
63 m_isPressRMouseButton = (
event->button() == Qt::RightButton);
65 QOpenGLWidget::mousePressEvent(event);
68 void CQtGlCanvasBase::mouseMoveEvent(QMouseEvent* event)
70 if (m_isPressLMouseButton ||
71 m_isPressRMouseButton)
75 int X =
event->pos().x();
76 int Y =
event->pos().y();
80 CamaraParams
params = cameraParams();
82 if (m_isPressLMouseButton)
84 if (event->modifiers() == Qt::ShiftModifier)
87 else if (event->modifiers() == Qt::ControlModifier)
88 updateRotate(
params, X, Y);
90 else if (event->modifiers() == Qt::NoModifier)
91 updateOrbitCamera(
params, X, Y);
99 updateCamerasParams();
103 QOpenGLWidget::mouseMoveEvent(event);
106 void CQtGlCanvasBase::mouseReleaseEvent(QMouseEvent* event)
108 setMouseClicked(
false);
109 m_isPressLMouseButton =
false;
110 m_isPressRMouseButton =
false;
111 QOpenGLWidget::mouseReleaseEvent(event);
114 void CQtGlCanvasBase::wheelEvent(QWheelEvent* event)
116 CamaraParams
params = cameraParams();
117 updateZoom(
params, event->delta());
120 updateCamerasParams();
123 QOpenGLWidget::wheelEvent(event);
126 void CQtGlCanvasBase::renderError(
const std::string& err_msg)
131 void CQtGlCanvasBase::updateCamerasParams()
134 updateCameraParams(cam);
139 assert(m_mainViewport);
140 m_mainViewport->insert(newObject);
145 assert(m_mainViewport);
146 m_mainViewport->removeObject(newObject);
149 bool CQtGlCanvasBase::isPressLMouseButton()
const 151 return m_isPressLMouseButton;
154 bool CQtGlCanvasBase::isPressRMouseButton()
const 156 return m_isPressRMouseButton;
159 void CQtGlCanvasBase::unpressMouseButtons()
161 m_isPressLMouseButton =
false;
162 m_isPressRMouseButton =
false;
165 #endif // MRPT_HAS_Qt5 std::shared_ptr< COpenGLViewport > Ptr
std::shared_ptr< CRenderizable > Ptr
float getZoomDistance() const
GLsizei const GLchar ** string
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.
This base class implements a working with opengl::Camera and a OpenGL canvas, and it's used in gui::C...
A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...
GLenum GLsizei GLsizei height
GLenum const GLfloat * params