26 class DynamicNavRasterCell;
27 class GeneratorSystem;
28 class ConnectionSquare;
53 BoundaryGraph(const DynamicNavRasterCell* navRaster);
59 KyResult WriteIntermediateBoundaryGraphFile();
61 KyUInt32 VerticesCount()
const {
return m_vertices.GetElementCount(); }
62 KyUInt32 EdgesCount()
const {
return m_edges.GetElementCount(); }
63 KyUInt32 ContoursCount()
const {
return m_contours.GetElementCount(); }
64 KyUInt32 PolygonsCount()
const {
return m_polygons.GetCount(); }
65 KyUInt32 SimplifyPolylinesCount()
const {
return m_simplifyPolylines.GetCount(); }
66 KyUInt32 SimplifiedEdgesCount()
const {
return m_simplifiedEdges.GetElementCount(); }
67 KyUInt32 SimplifiedContoursCount()
const {
return m_simplifiedContours.GetElementCount(); }
68 KyUInt32 SimplifiedPolygonsCount()
const {
return m_simplifiedPolygons.GetCount(); }
71 BoundaryEdge* AddEdge(
CardinalDir dir, BoundaryEdgeType type, BoundaryPixel* leftPixel,
KyUInt32 leftColor);
74 void BuildBoundaryPixelColumns();
77 void BuildEdgesBetweenSouthNorthNeighbors();
80 void BuildEdgesBetweenWestEastNeighbors();
83 KyResult BuildAllVerticesInAllColumns();
86 void BuildAllContour();
92 void BuildSimplifyPolylinesFromContour();
98 void BuildSimplifiedPolygons();
100 KyUInt32 ProcessEdgeColumn(
const PixelPos& currentPixelPos,
const PixelPos& nextPos,
CardinalDir dir);
101 KyUInt32 ProcessBirDirEdge(
CardinalDir dir,
const PixelPos& currentPos,
const PixelPos& nextPos, BoundaryPixel* currentPixel, BoundaryPixel* nextPixel);
102 void AddObstacleEdge(BoundaryPixel* boundaryPixel,
CardinalDir dir);
103 BoundaryEdge* AddEdgeInPixel(BoundaryPixel* boundaryPixel,
CardinalDir dirLocationOfEdgeIdPixel, BoundaryEdgeType type);
105 KyResult BuildVerticesColumn(ConnectionSquare& connectionSquare,
const NavBoundaryPos& pos);
106 void AddVertexColumnToBuild(
const NavBoundaryPos& pos);
107 void SetupSquarePixelColumn(ConnectionSquare& connectionSquare,
KyUInt32 idxInSquare,
const NavBoundaryPos& pos);
108 void BuildContour(BoundaryEdge* beginEdge);
110 void BuildSimplifyPolylinesInContour(BoundaryContour& contour);
111 void BuildSimplifyPolyline_Cycle(BoundaryContour& contour);
112 void BuildSimplifyPolylines_NonCycle(BoundaryContour& contour, BoundaryEdge* firstEdgeWithStaticStart);
113 void BuildSimplifiedContour(
const BoundaryContour& contour, BoundarySimplifiedContour& simplifiedContour);
114 BoundaryEdge* AddSimplifiedEdge(BoundarySimplifiedContour* simplifiedContour,
const BoundaryVertexListIterator &firstEdgeIt,
const BoundaryVertexListIterator &lastEdgeIt,
bool isStraight);
116 bool IsOutsideWest(NavPixelCoord x)
const;
117 bool IsOutsideEast(NavPixelCoord x)
const;
118 bool IsOutsideSouth(NavPixelCoord y)
const;
119 bool IsOutsideNorth(NavPixelCoord y)
const;
120 bool IsOutsideExclusiveBox(
const PixelPos& pos)
const;
121 bool IsOutsideExclusiveBox(NavPixelCoord x, NavPixelCoord y)
const;
123 bool IsInputNavRasterValid();
126 GeneratorSystem* m_sys;
127 const DynamicNavRasterCell* m_navRaster;
129 PixelBox m_navPixelBox;
130 PixelBox m_exclusivePixelBox;
132 BoxOfArrays<BoundaryPixel> m_boxOfBoundaryPixelColumn;
134 GrowingPool<BoundaryEdge> m_edges;
135 GrowingPool<BoundaryEdge> m_outsideEdges;
136 GrowingPool<BoundaryVertex> m_vertices;
137 GrowingPool<BoundaryContour> m_contours;
139 KyArrayTLS<BoundaryPolygon> m_polygons;
141 BitFieldTLS m_registerVertexColumnsToBuild;
142 KyArrayTLS_POD<NavBoundaryPos> m_vertexColumnsToBuild;
144 BoundaryVertexPool m_poolForBoundaryVertexList;
145 KyArrayTLS<BoundarySimplifyPolyline*> m_simplifyPolylines;
147 GrowingPool<BoundarySimplifiedEdge> m_simplifiedEdges;
148 GrowingPool<BoundarySimplifiedContour> m_simplifiedContours;
149 KyArrayTLS<BoundarySimplifiedPolygon> m_simplifiedPolygons;
151 KyArrayTLS<ConnectedPattern> m_connectPatterns;
154 KY_INLINE
bool BoundaryGraph::IsOutsideWest(NavPixelCoord x)
const {
return x == 0; }
155 KY_INLINE
bool BoundaryGraph::IsOutsideEast(NavPixelCoord x)
const {
return x == m_navPixelBox.CountX() - 1; }
156 KY_INLINE
bool BoundaryGraph::IsOutsideSouth(NavPixelCoord y)
const {
return y == 0; }
157 KY_INLINE
bool BoundaryGraph::IsOutsideNorth(NavPixelCoord y)
const {
return y == m_navPixelBox.CountY() - 1; }
158 KY_INLINE
bool BoundaryGraph::IsOutsideExclusiveBox(
const PixelPos& pos)
const {
return IsOutsideExclusiveBox(pos.x, pos.y); }
159 KY_INLINE
bool BoundaryGraph::IsOutsideExclusiveBox(NavPixelCoord x, NavPixelCoord y)
const
161 return IsOutsideWest(x) || IsOutsideEast(x) || IsOutsideSouth(y) || IsOutsideNorth(y);
164 KY_INLINE
void BoundaryGraph::SetupSquarePixelColumn(ConnectionSquare& connectionSquare,
KyUInt32 idxInSquare,
const NavBoundaryPos& pos)
166 const BoxOfArrays<BoundaryPixel>::Column& boundaryPixelColumn = m_boxOfBoundaryPixelColumn.GetColumn(pos);
167 connectionSquare.SetupSquarePixelColumn(idxInSquare, pos, boundaryPixelColumn, IsOutsideExclusiveBox(pos));
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
KyUInt32 CardinalDir
Defines a type that refers to one of the cardinal points on the compass:
Definition: cardinaldir.h:15
#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