16 class BoundaryVertexWithCost
20 BoundaryVertexWithCost() : m_cost(
KyFloat32MAXVAL), m_alreadyRemoved(false) {}
21 BoundaryVertexWithCost(BoundaryVertexListIterator vertex,
KyFloat32 cost) : m_cost(cost), m_alreadyRemoved(false)
23 m_vertexIterator = vertex;
26 KY_INLINE
bool operator<(
const BoundaryVertexWithCost& other)
const {
return m_cost > other.m_cost; }
29 BoundaryVertexListIterator m_vertexIterator;
31 bool m_alreadyRemoved;
34 class BoundarySimplifier
39 BoundarySimplifier(BoundaryGraph* boundaryGraph) : m_boundaryGraph(boundaryGraph)
52 KyResult SimplifyObstaclesAndConnexLinkBoundariesOfPolygon(
KyUInt32 polygonIdx);
57 KyResult DoSimplifyPolyline(BoundarySimplifyPolyline* polyline);
60 void RecursiveRDP(BoundarySimplifyPolyline* polyline,
61 BoundaryVertexListIterator begin,
62 BoundaryVertexListIterator last);
64 void ComputePolylineBoundingBox(
KyUInt32 polylineIdx);
66 KyResult SimplifyAllCellLinkAndFloorLinkBoundaries();
67 void RemoveVerticesIfPossible(BoundarySimplifyPolyline* polyline, BoundaryVertexListIterator begin,
68 BoundaryVertexListIterator last);
70 bool TestSimplificationAgainstOtherPolylinesAndSections(BoundarySimplifyPolyline* polyline,
71 BoundaryVertexListIterator begin, BoundaryVertexListIterator last,
72 BoundaryVertexListIterator previousVertex,BoundaryVertexListIterator currentVertex, BoundaryVertexListIterator nextVertex,
73 const Vec2i& v0,
const Vec2i& v1,
const Vec2i& v2,
KyFloat32 squareDist,
KyUInt32 insideVertexCount,
bool canCollapse);
75 bool TestAgainstTheOtherSectionsOfPolyline(BoundarySimplifyPolyline* polyline, BoundaryVertexListIterator begin, BoundaryVertexListIterator last,
76 BoundaryVertexListIterator previousVertex, BoundaryVertexListIterator currentVertex, BoundaryVertexListIterator nextVertex,
77 const Vec2i& v0,
const Vec2i& v1,
const Vec2i& v2,
KyFloat32 squareDist);
79 bool TestAgainstTheOtherPolylinesInFloor(BoundarySimplifyPolyline* polyline, BoundaryVertexListIterator previousVertex,
80 BoundaryVertexListIterator currentVertex, BoundaryVertexListIterator nextVertex,
const Vec2i& v0,
const Vec2i& v1,
const Vec2i& v2,
83 bool TestAgainstTheOtherPointsOfPolylineSection(BoundarySimplifyPolyline* polyline,
84 BoundaryVertexListIterator begin, BoundaryVertexListIterator last, BoundaryVertexListIterator previousVertex,
85 BoundaryVertexListIterator currentVertex, BoundaryVertexListIterator nextVertex,
const Vec2i& v0,
const Vec2i& v1,
const Vec2i& v2,
KyFloat32 squareDist);
87 bool TestAgainsPoint(
const Vec2i& v0,
const Vec2i& v1,
const Vec2i& v2,
const Vec2i& otherPos,
88 BoundaryVertexListIterator previousVertex, BoundaryVertexListIterator nextVertex, BoundaryVertexListIterator otherCurrent,
KyFloat32 squareDist);
90 void BuildBinaryHeap(BoundarySimplifyPolyline* polyline, BoundaryVertexListIterator begin,
91 BoundaryVertexListIterator last,
KyUInt32& insideVertexCount);
93 bool IsAxisAlignedElseGetCCW(
const Vec2i& previousPos,
const Vec2i& currentPos,
const Vec2i& nextPos, Vec2i& v0, Vec2i& v1, Vec2i& v2);
95 void MarkAsRemovedInTheHeap(BoundaryVertexListIterator iter, BoundaryVertexListIterator invalidIter);
96 void GetCyclicNext(BoundaryVertexList& vertices, BoundaryVertexListIterator& iter);
97 void GetCyclicPrev(BoundaryVertexList& vertices, BoundaryVertexListIterator& iter);
101 KyFloat32 m_exteriorSimplificationTolerance;
102 KyFloat32 m_interiorSimplificationTolerance;
106 BoundaryGraph* m_boundaryGraph;
108 KyArrayTLS_POD<BoundarySimplifyPolyline*> m_polylinesInPolygon;
109 KyArrayTLS_POD<BoundarySimplifyPolyline*> m_currentBoxIntersectingPolylines;
110 KyArrayTLS_POD<Box2f> m_polylineBoudingBox;
112 KyArrayTLS<BoundaryVertexListIterator> m_staticVertices;
113 BinaryHeapTLS_CPP<BoundaryVertexWithCost> m_binaryHeap;
116 KY_INLINE
void BoundarySimplifier::GetCyclicNext(BoundaryVertexList& vertices, BoundaryVertexListIterator& iter)
120 if (iter == vertices.End())
121 iter = vertices.Begin();
124 KY_INLINE
void BoundarySimplifier::GetCyclicPrev(BoundaryVertexList& vertices, BoundaryVertexListIterator& iter)
126 if (iter == vertices.Begin())
127 iter = vertices.End();
#define KyFloat32MAXVAL
KyFloat32 max value
Definition: types.h:71
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
float KyFloat32
float
Definition: types.h:32