23 class PolylineCastHelper
28 static
KyResult RetrieveTriangleFromStartToEnd(WorkingMemory* workingMemory, Database* database, const Vec3f& start, const Vec3f& end, NavTrianglePtr& io_startTrianglePtr,
29 NavTrianglePtr& o_endTrianglePtr, Ptr<QueryDynamicOutput>& dynOutput);
31 template <class TLogic>
32 static
KyResult RunPolylineCastInTrapeze(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
33 PolylineCastIntersector& intersector, const Vec3f& startO, const Vec3f& endO, const Vec3f& startL, const Vec3f& endL,
34 const Vec3f& startR, const Vec3f& endR);
36 template <class TLogic>
37 static
KyResult RunPolylineCastInTriangle(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
38 PolylineCastIntersector& intersector, const Vec3f& startO, const Vec3f& endO, const Vec3f& startL, const Vec3f& startR,
39 const Vec3f& endL, const Vec3f& endR);
41 template <class TLogic>
42 static
KyResult RunPolylineCastInTriangleOnLeft(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
43 PolylineCastIntersector& intersector, const Vec3f& startO, const Vec3f& endO, const Vec3f& startL, const Vec3f& startR,
46 template <class TLogic>
47 static
KyResult RunPolylineCastInTriangleOnRight(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
48 PolylineCastIntersector& intersector, const Vec3f& startO, const Vec3f& endO, const Vec3f& startL, const Vec3f& endL,
51 template <class TLogic>
52 static
KyResult RunPolylineCast(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
53 PolylineCastIntersector& intersector);
56 template <class TLogic>
57 inline
KyResult PolylineCastHelper::RunPolylineCastInTrapeze(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
58 PolylineCastIntersector& intersector, const Vec3f& startO, const Vec3f& endO,
59 const Vec3f& startL, const Vec3f& endL, const Vec3f& startR,
62 intersector.InitTrapezoid(startO, endO, startL, endL, startR, endR, database->GetDatabaseGenMetrics());
63 return RunPolylineCast<TLogic>(workingMemory, database, traverseLogicUserData, dynOutput, intersector);
66 template <
class TLogic>
67 inline KyResult PolylineCastHelper::RunPolylineCastInTriangle(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
68 PolylineCastIntersector& intersector,
const Vec3f& startO,
const Vec3f& endO,
69 const Vec3f& startL,
const Vec3f& startR,
const Vec3f& endL,
72 KY_ASSERT(startL == endL || startR == endR);
74 return RunPolylineCastInTriangleOnLeft<TLogic>(workingMemory, database, traverseLogicUserData, dynOutput, intersector, startO, endO,
75 startL, startR, endR);
77 return RunPolylineCastInTriangleOnRight<TLogic>(workingMemory, database, traverseLogicUserData, dynOutput, intersector, startO, endO,
78 startL, startR, endL);
81 template <
class TLogic>
82 inline KyResult PolylineCastHelper::RunPolylineCastInTriangleOnLeft(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
83 QueryDynamicOutput* dynOutput, PolylineCastIntersector& intersector,
const Vec3f& startO,
84 const Vec3f& endO,
const Vec3f& startL,
const Vec3f& startR,
87 intersector.InitTriangleAroundLeft(startO, endO, startL, startR, endR, database->GetDatabaseGenMetrics());
88 return RunPolylineCast<TLogic>(workingMemory, database, traverseLogicUserData, dynOutput, intersector);
91 template <
class TLogic>
92 inline KyResult PolylineCastHelper::RunPolylineCastInTriangleOnRight(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData,
93 QueryDynamicOutput* dynOutput, PolylineCastIntersector& intersector,
const Vec3f& startO,
94 const Vec3f& endO,
const Vec3f& startL,
const Vec3f& startR,
97 intersector.InitTriangleAroundRight(startO, endO, startL, endL, startR, database->GetDatabaseGenMetrics());
98 return RunPolylineCast<TLogic>(workingMemory, database, traverseLogicUserData, dynOutput, intersector);
101 template <
class TLogic>
102 inline KyResult PolylineCastHelper::RunPolylineCast(WorkingMemory* workingMemory, Database* database,
void* traverseLogicUserData, QueryDynamicOutput* dynOutput,
103 PolylineCastIntersector& intersector)
105 if (dynOutput ==
nullptr || dynOutput->GetNavTrianglePtrCount() == 0)
108 QueryUtils queryUtils(database, workingMemory, traverseLogicUserData);
110 typedef BestFirstSearch2dBorderCollector<TLogic, PolylineCastIntersector> Visitor;
111 Visitor edgeIntersectionVisitor(traverseLogicUserData, intersector);
113 BestFirstSearchTraversal<Visitor> traversal(queryUtils, database->GetActiveData()->GetCellBox(), edgeIntersectionVisitor);
115 if (traversal.IsInitialized() ==
false)
118 for (
KyUInt32 i = 0; i < dynOutput->GetNavTrianglePtrCount(); ++i)
120 const NavTrianglePtr& triangle = dynOutput->GetNavTrianglePtr(i);
121 if (traversal.SetStartTriangle(triangle.GetRawPtr()) != TraversalResult_DONE)
125 if (traversal.Search() != TraversalResult_DONE)
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#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
#define KY_ERROR
use result == KY_ERROR to test for error
Definition: types.h:132