24 class IVisualGeometry;
25 class VisualBoxVertices;
27 class IVisualGeometryBuilder
32 struct ArrowHeadCount {
enum Enum { One = 1, Two = 2 }; };
34 struct BoxSides {
enum Enum {
35 LeftRight = 1, FrontBack = 2, BottomTop = 4,
36 NotLeftRight = FrontBack | BottomTop,
37 NotFrontBack = LeftRight | BottomTop,
38 NotBottomTop = LeftRight | FrontBack,
39 All = LeftRight | FrontBack | BottomTop
42 struct SideLines {
enum Enum { No = 0, Yes = 1 }; };
44 KyUInt32 GetBoxTrianglesCount(BoxSides::Enum boxSides) {
return ((boxSides & BoxSides::LeftRight) + ((boxSides & BoxSides::FrontBack) >> 1) + ((boxSides & BoxSides::BottomTop) >> 2)) * 4; }
46 KyUInt32 GetCylinderTrianglesCount(
KyUInt32 segmentCount, DisplayFaces::Enum faces) {
return faces == DisplayFaces::All ? segmentCount * 4 : segmentCount * 2; }
47 KyUInt32 GetCylinderLinesCount(
KyUInt32 segmentCount, SideLines::Enum faces) {
return faces == SideLines::Yes ? segmentCount * 3 : segmentCount * 2; }
50 IVisualGeometryBuilder(IVisualGeometry* visualGeometry =
nullptr): m_visualGeometry(visualGeometry) {}
51 virtual ~IVisualGeometryBuilder() {}
53 void SetVisualGeometry(IVisualGeometry* visualGeometry) { m_visualGeometry = visualGeometry; }
55 bool IsInWriteMode()
const {
return m_buildMode == BuildMode_Write; }
56 bool IsInCountMode()
const {
return m_buildMode == BuildMode_Count; }
58 IVisualGeometry* GetVisualGeometry()
const {
return m_visualGeometry; }
60 void BuildVisualGeometry();
63 virtual void DoBuild() = 0;
65 void BuildSubVisualGeometry(IVisualGeometryBuilder& subGeometryBuilder);
69 void PushText(
const Vec3f& pos, Color color,
const char* text,
KyUInt32 byteCount = 0);
73 void PushLine(
const Vec3f& P,
const Vec3f& Q, Color color,
KyFloat32 pixelWidth = 1.0f);
74 void PushVerticalLine(
const Vec3f& P,
KyFloat32 offset_z, Color color,
KyFloat32 pixelWidth = 1.0f);
76 void PushLineCross2d(
const Vec3f& P,
KyFloat32 radius, Color color);
77 void PushLineCross3d(
const Vec3f& P,
KyFloat32 radius, Color color);
78 void PushArrowCross2d(
const Vec3f& P,
KyFloat32 radius, Color color);
79 void PushDiagonalCross2d(
const Vec3f& P,
KyFloat32 radius, Color color);
83 void PushTriangle(
const Triangle3f& triangle,
const ShapeColor& shapeColor);
84 void PushTriangle(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C,
const ShapeColor& shapeColor);
88 void PushSegmentBox(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor, BoxSides::Enum boxSides = BoxSides::All);
89 void PushSegmentTriangle2d5(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
90 void PushSegmentQuad2d5(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
91 void PushShearedBox(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 height,
KyFloat32 radius,
const ShapeColor& shapeColor, BoxSides::Enum boxSides = BoxSides::All);
92 void PushSegmentPyramid(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
93 void PushSegmentSquareTube(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
94 void PushSegmentTriangleCross(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
96 void PushCapsule2d5(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
97 void PushCapsule2d5Precise(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
KyFloat32 precision,
const ShapeColor& shapeColor);
103 void PushVerticalCylinder(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
KyUInt32 segmentCount,
const ShapeColor& shapeColor, SideLines::Enum sideLines, DisplayFaces::Enum faces = DisplayFaces::All);
104 void PushVerticalCylinderPrecise(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
KyFloat32 precision ,
const ShapeColor& shapeColor, SideLines::Enum sideLines, DisplayFaces::Enum faces = DisplayFaces::All);
108 void PushQuad(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C,
const Vec3f& D,
const ShapeColor& shapeColor);
109 void PushOrientedQuad(
const Vec3f& P,
const Vec3f& normal,
KyFloat32 radius,
const ShapeColor& shapeColor);
110 void PushQuad2d(
const Vec3f& P,
KyFloat32 radius,
const ShapeColor& shapeColor);
112 void PushDiamond2d(
const Vec3f& P,
KyFloat32 radius,
const ShapeColor& shapeColor);
116 void PushArrow(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 bodyHalfWidth,
const ShapeColor& color,
KyFloat32 headWidthRatio = 3.0f,
KyFloat32 headLengthRatio = 0.33f);
118 void PushArrow2d5(
const Vec3f& P,
const Vec3f& Q , Color color , ArrowHeadCount::Enum arrowHead = ArrowHeadCount::One);
119 void PushArrowPyramid(
const Vec3f& P,
const Vec3f& Q ,
const ShapeColor& shapeColor, ArrowHeadCount::Enum arrowHead = ArrowHeadCount::One);
120 void PushArrowTube(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor, ArrowHeadCount::Enum arrowHead = ArrowHeadCount::One);
124 void PushDisk(
const Vec3f& P,
KyFloat32 radius,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
125 void PushDiskPrecise(
const Vec3f& P,
KyFloat32 radius,
KyFloat32 precision,
const ShapeColor& shapeColor);
127 void PushDiskSector(
const Vec3f& P,
KyFloat32 radius,
const Vec3f& startPos,
const Vec3f& endPos,
const RotationDirection rotDir,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
128 void PushDiskSectorPrecise(
const Vec3f& P,
KyFloat32 radius,
const Vec3f& startPos,
const Vec3f& endPos,
const RotationDirection rotDir,
KyFloat32 precision,
const ShapeColor& shapeColor);
132 void PushBox(
const Box3f& box,
const ShapeColor& shapeColor, BoxSides::Enum boxSides = BoxSides::All);
133 void PushBox(
const Vec3f& P,
KyFloat32 radius,
const ShapeColor& shapeColor, BoxSides::Enum boxSides = BoxSides::All);
137 void PushFlag(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
const ShapeColor& shapeColor);
138 void PushSeedPoint(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
const ShapeColor& shapeColor);
142 void PushSegmentVerticalQuad(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 above,
KyFloat32 below,
const ShapeColor& shapeColor);
144 void PushOrientedBox3d(
const Transform& transform,
const Box3f& extents,
const ShapeColor& shapeColor);
145 void PushOrientedBox2d(
const OrientedBox2d& orientedBox2d,
const ShapeColor& shapeColor);
147 void PushDonut(
const Vec3f& P,
KyFloat32 innerRadius,
KyFloat32 outerRadius,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
148 void PushDonutPrecise(
const Vec3f& P,
KyFloat32 innerRadius,
KyFloat32 outerRadius,
KyFloat32 precision,
const ShapeColor& shapeColor);
150 void PushLadder(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const Color& color);
156 SegmentPyramid_LineCount = 8, SegmentPyramid_TriangleCount = 6,
157 SegmentTube_LineCount = 4, SegmentTube_TriangleCount = 8
160 void IncrementTextCount(
KyUInt32 increment, Color color);
161 void IncrementTriangleCount(
KyUInt32 increment, Color color);
162 void IncrementLineCount(
KyUInt32 increment, Color color);
163 void IncrementCountsForBox(
const ShapeColor& shapeColor, BoxSides::Enum boxSides);
164 void IncrementCountsForCylinder(
KyUInt32 segmentCount,
const ShapeColor& shapeColor, SideLines::Enum sideLines, DisplayFaces::Enum faces);
165 void IncrementCountsForTriangle(
const ShapeColor& shapeColor);
168 void DoWriteLine(
const Vec3f& P,
const Vec3f& Q, Color color);
169 void DoWriteTriangleFill(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C, Color color);
170 void DoWriteTriangleLines(
const Vec3f& cA,
const Vec3f& cB,
const Vec3f& cC, Color color);
171 void DoWriteQuadFill(
const Vec3f& cA,
const Vec3f& cB,
const Vec3f& cC,
const Vec3f& cD, Color color);
172 void DoWriteQuadLines(
const Vec3f& cA,
const Vec3f& cB,
const Vec3f& cC,
const Vec3f& cD, Color color);
175 void WriteText(
const Vec3f& pos, Color color,
const char* text,
KyUInt32 byteCount);
178 void WriteLineCross3d(
const Vec3f& P,
KyFloat32 radius, Color color);
179 void WriteLineCross2d(
const Vec3f& P,
KyFloat32 radius, Color color);
180 void WriteArrowCross2d(
const Vec3f& P,
KyFloat32 radius, Color color);
181 void WriteDiagonalCross2d(
const Vec3f& P,
KyFloat32 radius, Color color);
183 void WriteDisk(
const Vec3f& P,
KyFloat32 radius,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
186 void WriteLine(
const Vec3f& P,
const Vec3f& Q, Color color);
187 void WriteSegmentPyramid(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
188 void WriteSegmentSquareTube(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
189 void WriteSegmentTriangleCross(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius,
const ShapeColor& shapeColor);
196 void WriteArrowHead2d5(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 radius, Color color);
197 void WriteArrow2d5(
const Vec3f& P,
const Vec3f& Q, Color color, ArrowHeadCount::Enum arrowHeadCount = ArrowHeadCount::Two);
198 void WriteArrowPyramid(
const Vec3f& P,
const Vec3f& Q,
const ShapeColor& shapeColor, ArrowHeadCount::Enum arrowHeadCount = ArrowHeadCount::Two);
199 void WriteArrowTube(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 tubeRadius,
const ShapeColor& shapeColor, ArrowHeadCount::Enum arrowHeadCount = ArrowHeadCount::Two);
202 void WriteTriangle(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C,
const ShapeColor& shapeColor);
203 void WriteQuad(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C,
const Vec3f& D,
const ShapeColor& shapeColor);
204 void WriteOrientedBox(
const Transform& transform,
const Box3f& extents,
const ShapeColor& shapeColor, DisplayFaces::Enum faces);
205 void WriteOrientedBox2d(
const OrientedBox2d& orientedBox2d,
const ShapeColor& shapeColor);
206 void WriteDiskSector(
const Vec3f& P,
KyFloat32 radius,
const Vec3f& startPos,
const Vec3f& endPos,
const RotationDirection rotDir,
KyUInt32 subdivisions,
const ShapeColor& shapeColor);
207 void WriteDonut(
const Vec3f& P,
KyFloat32 innerRadius,
KyFloat32 outerRadius,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
208 void WriteBox(
const Box3f& box,
const ShapeColor& shapeColor, DisplayFaces::Enum faces);
209 void WriteLadder(
const Transform& transform,
const Box3f& entrances,
KyFloat32 ladderWidth,
KyFloat32 rungsThickness,
KyFloat32 rungsGapSize,
const ShapeColor& shapeColor);
212 void WriteFlagOnly(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
const ShapeColor& shapeColor);
213 void WriteFlag(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
const ShapeColor& shapeColor);
214 void WriteSeedPoint(
const Vec3f& P,
KyFloat32 height,
KyFloat32 radius,
const ShapeColor& shapeColor);
216 void WriteBoxFromVertices(
const VisualBoxVertices& box,
const ShapeColor& shapeColor, BoxSides::Enum boxSides);
219 void BeginWriteMode();
222 void DebugIncrementTextCount(
KyUInt32 increment);
223 void DebugIncrementTriangleCount(
KyUInt32 increment, Color color);
224 void DebugIncrementLineCount(
KyUInt32 increment, Color color);
227 void CheckWriteModeVsCountMode();
228 void WriteDiskTesselation(
const Vec3f& P,
KyFloat32 radius,
const Vec2f& dir1,
const Vec2f& dir2, Kaim::Winding::Enum winding,
KyUInt32 segmentCount,
const ShapeColor& shapeColor);
231 enum BuildMode { BuildMode_Count, BuildMode_Write };
232 BuildMode m_buildMode;
234 VisualGeometryPrimitiveCounts m_primitiveCounts;
235 Ptr<IVisualGeometry> m_visualGeometry;
237 #if defined(KY_CONFIG_DEBUG_OR_DEV)
239 VisualGeometryPrimitiveCounts m_writtenPrimitiveCounts;
242 friend class VisualBoxVertices;
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
RotationDirection
Defines the 4 possible cases of possibly constrained rotation in the horizontal plane for a given ele...
Definition: rotation.h:15
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16