FLImaging 6.5.8.1
GUIView3DUtils.h
1#pragma once
2
3#include "GUIDefinitions.h"
4
5namespace FLImaging
6{
7 namespace GUI
8 {
9 typedef struct FL_EXPORT sVertexTangent
10 {
11 sVertexTangent() {}
12 sVertexTangent(
13 const Base::TPoint3<float>& p,
14 const Base::TPoint3<float>& n,
15 const Base::TPoint3<float>& t) :
16 position(p),
17 normal(n),
18 tangentU(t) {}
19 sVertexTangent(
20 float px, float py, float pz,
21 float nx, float ny, float nz,
22 float tx, float ty, float tz) :
23 position(px, py, pz),
24 normal(nx, ny, nz),
25 tangentU(tx, ty, tz) {}
26 Base::TPoint3<float> position;
27 Base::TPoint3<float> normal;
28 Base::TPoint3<float> tangentU;
29 }
30 SVertexTangent;
31
32 typedef struct FL_EXPORT sFaceDataTangent
33 {
34 std::vector<SVertexTangent>& m_vctVertex;
35 std::vector<uint32_t>& m_vctIndices32;
36
37 sFaceDataTangent();
38 sFaceDataTangent(const sFaceDataTangent& rh);
39 ~sFaceDataTangent();
40
41 const CResult Assign(const sFaceDataTangent& rh);
42 sFaceDataTangent& operator=(const sFaceDataTangent& rh);
43 std::vector<uint16_t>& GetIndices16();
44
45 private:
46 std::vector<uint16_t>& m_vctIndices16;
47 }
48 SFaceDataTangent;
49
50 typedef struct FL_EXPORT sBoundingBox
51 {
52 Base::TPoint3<float> Center; // Center of the box.
53 Base::TPoint3<float> Extents; // Distance from the center to each side.
54
55 sBoundingBox();
56 sBoundingBox(const sBoundingBox& rh);
57 sBoundingBox& operator=(const sBoundingBox& rh);
58 sBoundingBox(const Base::TPoint3<float>& center, const Base::TPoint3<float>& extents);
59
60 bool Intersects(const Base::TPoint3<float>& tp3F32Origin, const Base::TPoint3<float>& tp3F32Direction, float& f32Dist);
61 const CResult GetMinMaxCoord(Base::TPoint3<float>& tp3F32Min, Base::TPoint3<float>& tp3F32Max);
62 const CResult GetMinMaxCoord(float& f32MinX, float& f32MinY, float& f32MinZ, float& f32MaxX, float& f32MaxY, float& f32MaxZ);
63 const CResult Extend(const Base::TPoint3<float>& tp3F32NewPoint);
64 const CResult Extend(const Base::TPoint3<double>& tp3F64NewPoint);
65 const CResult Extend(const Base::TPoint3<float>& tp3F32NewPoint1, const Base::TPoint3<float>& tp3F32NewPoint2);
66 const CResult Extend(const Base::TPoint3<double>& tp3F64NewPoint1, const Base::TPoint3<double>& tp3F64NewPoint2);
67 void Reset();
68 }
69 SBoundingBox;
70
71 class FL_EXPORT CGUIView3DUtils
72 {
73 public:
74 CGUIView3DUtils();
75 virtual ~CGUIView3DUtils();
76
77 static CGUIView3DUtils* GetObject();
78
79 static bool Initialize(); // Initialize tables
80 static bool IsInitialized(); // Is tables initialized?
81
82 static bool RayTriangleIntersect(const Base::TPoint3<float>& tpRayOrig, const Base::TPoint3<float>& tpRayDir, const Base::TPoint3<float>& tp0, const Base::TPoint3<float>& tp1, const Base::TPoint3<float>& tp2, float& f32Dist);
83 static bool RayOrientedBoundigBoxIntersect(const Base::TPoint3<float>& tpRayOrig, const Base::TPoint3<float>& tpRayDir, const Base::TPoint3<float>& tpOrientedBoundigBoxMin, const Base::TPoint3<float>& tpOrientedBoundigBoxMax, float& f32Dist);
84
85
86
87 static const CResult CreateBox(float width, float height, float depth, uint32_t numSubdivisions, SFaceDataTangent& sFaceData);
88 static const CResult CreateSphere(float radius, uint32_t sliceCount, uint32_t stackCount, SFaceDataTangent& sFaceData);
89 static const CResult CreateGeosphere(float radius, uint32_t numSubdivisions, SFaceDataTangent& sFaceData);
90 static const CResult CreateCylinder(float bottomRadius, float topRadius, float height, float x, float y, float z, uint32_t sliceCount, uint32_t stackCount, SFaceDataTangent& sFaceData);
91 static const CResult CreateGrid(float width, float depth, uint32_t m, uint32_t n, SFaceDataTangent& sFaceData);
92 static const CResult CreateQuad(float x, float y, float w, float h, float depth, SFaceDataTangent& sFaceData);
93 static const CResult CreateCircle(float f32Radius, float x, float y, float z, uint32_t sliceCount, SFaceDataTangent& sFaceData);
94
95 static void __fastcall FastFloatRGB(const COLORREF& clr, float& f32R, float& f32G, float& f32B);
96
97 static COLORREF GetPredefinedColor(int32_t i32Index);
98
99 private:
100 const CResult Subdivide(SFaceDataTangent& meshData);
101 const CResult MidPoint(const SVertexTangent& v0, const SVertexTangent& v1, SVertexTangent& vOut);
102 const CResult BuildCylinderTopCap(float bottomRadius, float topRadius, float height, uint32_t sliceCount, uint32_t stackCount, SFaceDataTangent& meshData);
103 const CResult BuildCylinderBottomCap(float bottomRadius, float topRadius, float height, uint32_t sliceCount, uint32_t stackCount, SFaceDataTangent& meshData);
104
105 protected:
106 volatile bool m_bInitialized;
107 };
108 }
109}
@ Center
Apply textures to the center of the object.
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
@ Extend
Extend directional Figures (Line, Rect, Quad, Ellipse) in the direction each figure is directed to.