ImagingTools Core SDK
CMeshShape.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// STL includes
6#include <set>
7
8// ACF includes
9#include <istd/TRange.h>
10
11// ImtCore includes
12#include <imt3dgui/CShape3dBase.h>
13#include <imt3d/IMesh3d.h>
14
15
16namespace imt3dgui
17{
18
19
24{
26
27public:
28 CMeshShape();
29
30 void SetColor(const QVector3D& color);
31 void SetPointSelection(const QPoint& selectionPoint, bool clearPreviousSelection);
32 void SetBoxSelection(const QRect& selectionRect, bool clearPreviousSelection);
33 void SetCircleSelection(const QRect& selectionRect, bool clearPreviousSelection);
34 void ClearSelection();
35 void AllSelection();
36 void InvertSelection();
37 void DeleteSelection();
38 void SetInfoBoxEnabled(bool isEnabled = true);
39
40protected:
41 // reimplemented (imt3dgui::CShape3dBase)
42 virtual void UpdateShapeGeometry(const istd::IChangeable::ChangeSet& changeSet) override;
43 virtual void DrawShapeGl(QOpenGLShaderProgram& program, QOpenGLFunctions& functions) override;
44
45 // reimplemented (imt3dview::IDrawable)
46 virtual void Draw(QPainter& painter) override;
47
48 // reimplemented (imt3dgui::IShape3d)
49 virtual QVector3D GetColor() const override;
50
51private:
52 typedef std::set<int> Indices;
53
54 void SetRectSelection(const QRect& selectionRect, bool isCircle, bool clearPreviousSelection);
55 template <typename PointType> void DeleteSelectionHelper(imt3d::IMesh3d& mesh);
56 static bool IsPointWithin(const QPoint& point, const QRect& rect, bool isCircle);
57 bool GetFacePointIntersection(const QPoint& point, Indices& intersectedIndicies) const;
58 bool GetFaceRectIntersections(const QRect& rect, bool isCircle, Indices& intersectedIndicies) const;
59 static bool IsFaceRayIntersection(
60 const QVector3D& rayOrigin,
61 const QVector3D& rayDirection,
62 const QVector3D& trianglePoint1,
63 const QVector3D& trianglePoint2,
64 const QVector3D& trianglePoint3,
65 float& distanceToTriangle,
66 QVector3D& intersectionPoint);
67 void SelectVertices(Indices& intersectedIndicies, bool clearPreviousSelection);
68
69private:
70 QVector3D m_color;
71 Indices m_selectedIndicies;
72 bool m_isInfoBoxEnabled;
73
74 static const QVector3D s_selectionColor;
75};
76
77
78} // namespace imt3dgui
79
80