20 class ChannelComputerConfig;
23 class PolylineExtremityContext
26 PolylineExtremityContext()
27 : m_useStartAsInput(false), m_useEndAsInput(false), m_startCanBeMoved(false), m_endCanBeMoved(false), m_startX(0.0), m_startY(0.0), m_endX(0.0), m_endY(0.0)
32 bool m_useStartAsInput;
34 bool m_startCanBeMoved;
43 class ChannelBorderSimplifier
46 ChannelBorderSimplifier();
47 ~ChannelBorderSimplifier();
50 void InitializeForSection(Database* database,
const ChannelComputerConfig& channelConfig,
const Vec3f& edgeStartPos,
const Vec2f& pathEdgeDir2d,
KyFloat32 pathEdgeLength,
const FullDebug& fullDebug);
51 void InitializeForChannelPrePost(Database* database,
const ChannelComputerConfig& channelConfig,
const Vec3f& edgeStartPos,
const Vec2f& pathEdgeDir2d,
KyFloat32 pathEdgeLength,
const FullDebug& fullDebug);
53 KyResult Simplify_Left(
const SharedPoolList<PolylineCastIntersector::BorderEdge>& leftBorders, PolylineExtremityContext& extremityContext);
54 KyResult Simplify_Right(
const SharedPoolList<PolylineCastIntersector::BorderEdge>& rightBorders, PolylineExtremityContext& extremityContext);
55 KyResult Simplify(
const SharedPoolList<PolylineCastIntersector::BorderEdge>& borders,
bool onLeft, PolylineExtremityContext& extremityContext);
56 void ProcessExtremity(SharedPoolList<Vec2f>& polyline, PolylineExtremityContext& extremityContext);
58 Vec3f GetGlobalPosFromLocalPos(
const Vec2f& localPos) {
return m_edgeStartPos + Vec3f(localPos.x * m_edgeDir2d + localPos.y * m_edgeDir2d.PerpCCW()); }
59 Vec3f GetGlobalPosFromLocalPos(
KyFloat32 x,
KyFloat32 y) {
return GetGlobalPosFromLocalPos(Vec2f(x, y)); }
62 void RemoveNoiseInPolyline(SharedPoolList<Vec2f>& polyline);
64 void CreatePolylineFromBorder(
const SharedPoolList<PolylineCastIntersector::BorderEdge>& borderEdgeList,
65 SharedPoolList<Vec2f>& borderPolyline);
74 KyResult ConvertPolylineToEdgeLocalCoords(SharedPoolList<Vec2f>& polyline);
76 void FixXCoordinatesOrder(SharedPoolList<Vec2f>& polyline);
77 void MoveYPositionOfAllPoints(SharedPoolList<Vec2f>& polyline);
79 void FixPolylineAroundStartPoint(SharedPoolList<Vec2f>& polyline,
KyFloat32& xCoordinate,
KyFloat32& yCoordinate,
bool canMovePoint);
80 void FixPolylineAroundEndPoint(SharedPoolList<Vec2f>& polyline,
KyFloat32& xCoordinate,
KyFloat32& yCoordinate,
bool canMovePoint);
84 void RenderBorderEdges(
const char* listName, Color visualColor,
const SharedPoolList<PolylineCastIntersector::BorderEdge>& leftBorders);
85 void RenderPolyline(
const char* listName, Color visualColor, SharedPoolList<Vec2f>& polyline,
bool hideByDefault =
true);
88 void ComputeMaxTangent(
KyFloat32 angleInDegrees);
89 void EraseCurrentPoint(SharedPoolList<Vec2f>& polyline, SPL_Iterator<Vec2f>& previous, SPL_Iterator<Vec2f>& current, SPL_Iterator<Vec2f>& next);
91 KyFloat32 GetChannelRadius() {
return m_channelConfig.m_channelRadius; }
92 KyFloat32 GetMin2dDistanceBetweenPoints() {
return m_channelConfig.m_advancedConfig.m_minDistBetweenIntermediaryGates; }
93 KyFloat32 GetMax2dDistanceBetweenPoints() {
return m_channelConfig.m_advancedConfig.m_maxDistBetweenIntermediaryGates; }
97 ChannelComputerConfig m_channelConfig;
101 SharedPoolList<Vec2f> m_leftPolyline;
102 SharedPoolList<Vec2f> m_rightPolyline;
103 SharedPoolList<Vec2f>::NodePool m_positionPool;
106 Vec3f m_edgeStartPos;
112 class SweepLinePolylineSimplifier
116 ~SweepLinePolylineSimplifier() { Clear(); }
120 KyResult Simplify(SharedPoolList<Vec2f>& polyline);
122 static bool CompVec2fY(
const Vec2f& p0,
const Vec2f& p1) {
return (p0.y < p1.y) || (p0.y == p1.y && p0.x < p1.x); }
124 static bool IsAbsSlope1StrictlyGreaterThanAbsSlope2(
const Vec2f& slope1,
const Vec2f& slope2) {
return (fabsf(slope1.y * slope2.x) > fabsf(slope1.x * slope2.y)); }
127 KyResult ConsumeInputPolyline(
const SharedPoolList<Vec2f>& inPolyline);
129 KyResult BuildOutput(SharedPoolList<Vec2f>& polyline);
131 SPL_Iterator<Vec2f> GetAndPopPointToProcess();
133 KyResult SimplifyAfterPolylinePoint(SPL_Iterator<Vec2f> pointIt);
134 KyResult SimplifyBeforePolylinePoint(SPL_Iterator<Vec2f> pointIt);
136 Vec2f GetMaxSlopeForPoint(
const Vec2f &point);
138 SPL_Iterator<Vec2f> ComputeFirstPointIteratorAfterLine(SPL_Iterator<Vec2f> firstPointItToCheck,
const Vec2f& lineStartPoint,
const Vec2f& lineSlope);
139 SPL_Iterator<Vec2f> ComputeFirstPointIteratorBeforeLine(SPL_Iterator<Vec2f> firstPointItToCheck,
const Vec2f& lineStartPoint,
const Vec2f& lineSlope);
141 SPL_Iterator<Vec2f> GetMoreConstraintSlopeForward(
const Vec2f& point, SPL_Iterator<Vec2f> currentIt);
142 SPL_Iterator<Vec2f> GetMoreConstraintSlopeBackward(
const Vec2f& point, SPL_Iterator<Vec2f> currentIt);
144 void RemoveFromWorkingPolyline(SPL_Iterator<Vec2f> firstIteratorToRemove, SPL_Iterator<Vec2f> stopAtThis);
147 SharedPoolList<Vec2f> m_workingPolyline;
148 SharedPoolList<Vec2f>::NodePool m_pointPool;
150 KyArrayCPP<SPL_Iterator<Vec2f> > m_openNodes;
164 KY_INLINE
KyResult ChannelBorderSimplifier::Simplify_Left(
const SharedPoolList<PolylineCastIntersector::BorderEdge>& leftBorders, PolylineExtremityContext& extremityContext)
166 return Simplify(leftBorders,
true, extremityContext);
168 KY_INLINE
KyResult ChannelBorderSimplifier::Simplify_Right(
const SharedPoolList<PolylineCastIntersector::BorderEdge>& rightBorders, PolylineExtremityContext& extremityContext)
170 return Simplify(rightBorders,
false, extremityContext);
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32