23 class DiagonalStripComputerContext;
26 class DiagonalStripComputerConfig
29 DiagonalStripComputerConfig() { SetDefaults(); }
32 m_idealClearanceRadius = 2.5f;
39 FullDebug m_fullDebug;
47 DiagonalStripResult_BuildDiagonalForPathEdge,
48 DiagonalStripResult_ComputingMaxRadius_Init,
49 DiagonalStripResult_ComputingMaxRadius,
50 DiagonalStripResult_ComputingNeighborCompatibleRadius_Backward_Init,
51 DiagonalStripResult_ComputingNeighborCompatibleRadius_Backward,
52 DiagonalStripResult_ComputingNeighborCompatibleRadius_Forward_Init,
53 DiagonalStripResult_ComputingNeighborCompatibleRadius_Forward,
55 DiagonalStripResult_Done_DiagonalStripComputerError,
56 DiagonalStripResult_Done_ComputeMaxRadiusError,
57 DiagonalStripResult_Done_ComputeNeighborCompatibleRadiusError,
59 DiagonalStripResult_Done
62 enum DiagonalStripJunctionType { JunctionType_Slanting, JunctionType_AlmostOrtho };
64 class DiagonalStripComputer
69 DiagonalStripComputer();
70 ~DiagonalStripComputer();
75 void Init(Database* database, const Path* path,
KyUInt32 firstEdgeIdxOfSection,
KyUInt32 lastEdgeIdxOfSection, DiagonalStrip* diagonalStrip,
KyFloat32 cornerMaxRadius,
78 bool IsFinished()
const {
return m_result >= DiagonalStripResult_Done_DiagonalStripComputerError; }
80 void* GetTraverseLogicUserData()
const {
return m_traverseLogicUserData; }
81 void SetTraverseLogicUserData(
void* traverseLogicUserData) { m_traverseLogicUserData = traverseLogicUserData; }
89 enum ComputeCompatibleRadiusResult { OutOfNeighborhood, Shrinked, Unchanged };
93 ComputeCompatibleRadiusResult ComputeCompatibleRadius(
const Vec3f& cornerPos, CornerType cornerType,
KyUInt32 otherIdx,
KyFloat32& cornerRadius);
95 void InitContext(DiagonalStripComputerContext& context, WorkingMemory* workingMemory);
97 KyResult FillDiagonalStripFromPolylineCastResult(PolylineCastIntersector& clearancePolygonIntersector);
98 bool IsCCWQuadConvex(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C,
const Vec3f& D);
99 void ComputeBissectriceEndPoints(DiagonalStripComputerContext& context,
const Vec3f& nextPointOnPath,
KyFloat32 nextEdgelength2D,
KyFloat32 dotProdWithNextEdge,
102 bool PushCorner(
const Vec3f& pos, CornerType cornerType,
bool force =
false);
104 KyResult MakeJunctionWithCurrentDiagonalStrip(PolylineCastIntersector& clearancePolygonIntersector);
108 template <
class TLogic>
void Advance(WorkingMemory* workingMemory, ChannelArrayComputerStats& channelStats);
110 template <
class TLogic>
KyResult ComputeDiagonalsFromPath(WorkingMemory* workingMemory, ChannelArrayComputerStats& stats);
112 template <
class TLogic>
KyResult BuildDiagonalsForPathEdge(WorkingMemory* workingMemory);
114 template <
class TLogic>
KyResult ProcessTheOneTrapezeStartingThePolygon(WorkingMemory* workingMemory, DiagonalStripComputerContext& context,
KyFloat32 maxDotProdStart);
116 template <
class TLogic>
117 KyResult ProcessPolygonWithTriangles(WorkingMemory* workingMemory, DiagonalStripComputerContext& context, Vec3f& bissectricIntersection,
bool bissectriceIntersect,
120 template <
class TLogic>
121 KyResult ProcessTwoOppositeTriangles(WorkingMemory* workingMemory, DiagonalStripComputerContext& context,
const Vec3f& endPointLeft,
const Vec3f& endPointRight,
122 const Vec3f& endPointOnPath);
124 template <
class TLogic>
KyResult EndPolygonFromAlmostOrthoStart(WorkingMemory* workingMemory, DiagonalStripComputerContext& context,
KyFloat32 minDotProdEnd);
126 template <
class TLogic>
127 KyResult BuildDiagonalsInTrapeze(WorkingMemory* workingMemory,
const Vec3f& pathEdgeStart,
const Vec3f& pathEdgeEnd, NavTrianglePtr& inAndOutTrianglePtr,
128 const Vec3f& pointOnStartSideLeft,
const Vec3f& pointOnEndSideLeft,
const Vec3f& pointOnStartSideRight,
const Vec3f& pointOnEndSideRight);
130 template <
class TLogic>
131 KyResult BuildDiagonalsInTriangle(WorkingMemory* workingMemory,
const Vec3f& pathEdgeStart,
const Vec3f& pathEdgeEnd, NavTrianglePtr& inAndOutTrianglePtr,
132 const Vec3f& pointOnStartSideLeft,
const Vec3f& pointOnStartSideRight,
const Vec3f& pointOnEndSideLeft,
const Vec3f& pointOnEndSideRight,
133 bool forceTrapeze =
false);
136 void ClearDisplayList();
137 void CreateDisplayList();
138 static ShapeColor GetVisualDebugQuadColor();
139 static ShapeColor GetVisualDebugTriangleColor();
141 Database* m_database;
142 void* m_traverseLogicUserData;
145 const Path* m_rawPath;
146 DiagonalStrip* m_diagonalStrip;
156 DiagonalStripJunctionType m_startJunctionType;
157 Vec3f m_lastStripCornerLeft;
158 Vec3f m_lastStripCornerRight;
159 DisplayList* m_displayList;
161 FullDebug m_fullDebug;
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
Indicates the query has not yet been launched.
Definition: diagonalstripcomputer.h:45
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
DiagonalStripComputerResult
Definition: diagonalstripcomputer.h:42
Indicates that the query has not yet been initialized.
Definition: iquery.h:295
std::int32_t KyInt32
int32_t
Definition: types.h:24
Indicates that the query has not yet been launched.
Definition: iquery.h:296
Indicates the query has not yet been initialized.
Definition: diagonalstripcomputer.h:44
float KyFloat32
float
Definition: types.h:32