ImagingTools Core SDK
CScene3d.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// ACF includes
6#include <imod/CMultiModelDispatcherBase.h>
7
8// ImtCore includes
9#include <imt3d/CCuboid.h>
10#include <imt3dview/IScene3d.h>
11
12
13namespace imt3dview
14{
15
16
20class CScene3d: virtual public imt3dview::IScene3d
21{
22public:
23 CScene3d();
24
25 // reimplemented (IScene3d)
26 virtual void SetCamera(IScene3dCamera* cameraPtr) override;
27 virtual void SetProjection(const QMatrix4x4& projection) override;
28 virtual void SetViewPort(const QRect& viewPort) override;
29 virtual imt3d::CCuboid GetBoundingCuboid() const override;
30 virtual QByteArrayList GetShapeIds() const override;
31 virtual imt3dview::IScene3dItem* GetShapePtr(const QByteArray& id) const override;
32 virtual QByteArray AddShapeToScene(imt3dview::IScene3dItem* objectPtr, int itemFlags = SF_NONE) override;
33 virtual void RemoveShapeFromScene(imt3dview::IScene3dItem* objectPtr) override;
34
35 // reimplemented (imt3dview::IDrawable)
36 virtual void SetContext(QOpenGLContext* contextPtr) override;
37 virtual void DrawGl(QOpenGLShaderProgram& program) override;
38 virtual void Draw(QPainter& painter) override;
39
40private:
41 struct ShapeInfo
42 {
43 ShapeInfo()
44 :shapePtr(NULL),
45 flags(SF_NONE),
46 modelId(-1)
47 {
48 }
49
51 int flags;
52 int modelId;
53 };
54
55 void UpdateBoundingCuboid();
56 void UpdateBoundingCuboid(const imt3dview::IScene3dItem* objectPtr);
57
58 void UpdateItemsScale();
59 void UpdateItemScale(IScene3dItem& scene3dItem);
60
61 static imt3d::CCuboid GetItemBoundingCuboid(const IScene3dItem* scene3dItemPtr);
62
63private:
64 typedef QSharedPointer<ShapeInfo> ShapeInfoPtr;
65 typedef QMap<QByteArray, ShapeInfoPtr> Shapes;
66 Shapes m_shapes;
67
68 QOpenGLContext* m_contextPtr;
69 int m_nextModelId;
70 imt3dview::IScene3dCamera* m_cameraPtr;
71};
72
73
74} // namespace imt3dview
75
76