8#if QT_VERSION < 0x060000
9#include <QtGui/QOpenGLBuffer>
11#include <QtOpenGL/QOpenGLBuffer>
14#include <QtGui/QOpenGLFunctions>
17#include <imod/CSingleModelObserverBase.h>
20#include <imt3dgui/IShape3d.h>
21#include <imt3d/IPointsBasedObject.h>
37 typedef imod::CSingleModelObserverBase BaseClass;
42 int FindVertex(
const QPoint& point,
bool limitDistance, QVector3D* positionPtr =
nullptr)
const;
45 virtual bool IsValid()
const override;
46 virtual bool IsVisible()
const override;
47 virtual void SetVisible(
bool isVisible)
override;
51 virtual void SetProjection(
const QMatrix4x4& projection)
override;
52 virtual void SetViewPort(
const QRect& viewPort)
override;
54 virtual const QVector3D& GetPosition()
const override;
55 virtual void SetPosition(
const QVector3D& position)
override;
57 virtual const QQuaternion& GetRotation()
const override;
58 virtual void SetRotation(
const QQuaternion& rotation)
override;
60 virtual float GetScale()
const override;
61 virtual void SetScale(
float scale)
override;
64 virtual void SetContext(QOpenGLContext* contextPtr)
override;
65 virtual void DrawGl(QOpenGLShaderProgram& program)
override;
66 virtual void Draw(QPainter& )
override;
70 virtual QVector3D GetColor()
const override {
return QVector3D(); }
74 virtual void UpdateShapeGeometry(
const istd::IChangeable::ChangeSet& changeSet) = 0;
75 virtual void DrawShapeGl(QOpenGLShaderProgram& program, QOpenGLFunctions& functions) = 0;
78 void UpdateGeometry(
const istd::IChangeable::ChangeSet& changeSet);
79 QMatrix4x4 GetModelMatrix()
const;
80 QPoint ModelToWindow(
const QVector3D& modelCoordinate)
const;
81 QVector3D WindowToModel(
const QPoint& windowCoordinate,
float z)
const;
83 void CreateGeometry();
84 void RefreshGeometry();
87 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
91 QVector<GLuint> m_indices;
94 QQuaternion m_rotation;
97 QOpenGLContext* m_contextPtr;
100 QOpenGLBuffer m_vertexBuffer;
101 QOpenGLBuffer m_indexBuffer;
102 QMatrix4x4 m_projection;
104#if QT_VERSION >= 0x060000
105 mutable QRecursiveMutex m_bufferMutex;
107 mutable QMutex m_bufferMutex;