58 static std::unique_ptr<UtScriptClass> CreateScriptClass(
const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
61 void Avoid(
const WsfGeoPoint& aPoint,
double aRadius);
62 void ClearAvoidances();
68 void DrawRoute(
double duration,
const UtVec3d& color);
69 void DrawGraph(
double duration,
const UtVec3d& color);
70 void DrawAvoidances(
double duration,
const UtVec3d& color);
86 Line2d(
const UtVec2d& a,
const UtVec2d& b)
92 UtVec2d IntoVec()
const {
return (mEnd - mBeg); }
106 Circle2d(
const UtVec2d& aPoint,
double aRadius)
119 Avoidance(
const UtVec2d& aLocation,
double aRadius,
double aDistance,
const WsfGeoPoint& aOrigPt,
unsigned short aID)
120 : mCircle(aLocation, aRadius)
121 , mDistance(aDistance)
123 , mOriginalPoint(aOrigPt)
125 mNear = mDistance - mCircle.mRadius;
126 mFar = mDistance + mCircle.mRadius;
128 Avoidance(
const UtVec2d& aLocation,
unsigned short aID = 65535)
129 : mCircle(aLocation, 0)
138 void SetRadius(
double aRadius)
140 mCircle.mRadius = aRadius;
141 mNear = mDistance - mCircle.mRadius;
142 mFar = mDistance + mCircle.mRadius;
145 bool operator<(
const Avoidance& aRhs)
const {
return (mNear < aRhs.mNear); }
149 return (mCircle.mLoc.Equals(aRhs.mCircle.mLoc) && (mCircle.mRadius == aRhs.mCircle.mRadius));
160 WsfGeoPoint mOriginalPoint;
162 std::vector<Avoidance*> mOverlaps;
169 GraphNode(Avoidance* aAvoidPtr)
170 : mAvoidPtr(aAvoidPtr)
176 for (std::vector<GraphBranch*>::iterator it = mBranches.begin(); it != mBranches.end(); ++it)
182 Avoidance* mAvoidPtr;
183 std::vector<GraphBranch*> mBranches;
189 GraphBranch(
const Line2d& aLine, GraphNode* aNodePtr)
190 : mFromPoint(aLine.mBeg)
191 , mToPoint(aLine.mEnd)
196 GraphBranch(
const UtVec2d& aFromPoint,
const UtVec2d& aToPoint, GraphNode* aNodePtr)
197 : mFromPoint(aFromPoint)
204 OrientationAround Orientation();
216 GraphNode* GenerateGraph();
217 std::vector<GraphBranch*> FindBestGraphPath();
218 std::vector<GraphBranch*> FindGraphPathUsingBranch(
unsigned int index);
221 void FindBestGraphPathRecursive(GraphNode* next,
224 OrientationAround enteringOrientation = NEITHER);
232 UtVec2d GetLocal(
const double wcs[3]);
233 UtVec2d GetLocal(
const WsfGeoPoint& pt);
234 void GetGlobal(
const UtVec2d& pt,
double wcs[3]);
235 WsfGeoPoint GetGlobal(
const UtVec2d& pt);
237 void DrawCircle(
const WsfGeoPoint& center,
double radius);
239 bool Contains(
const Circle2d& circle,
const UtVec2d& point);
241 bool Contains(
const Circle2d& a,
const Circle2d& b);
243 bool Intersects(
const Circle2d& a,
const Circle2d& b);
245 bool Intersects(
const Line2d& line,
const Circle2d& circle);
247 bool Intersection(
const Line2d& line1,
const Line2d& line2, UtVec2d& point);
249 double ArcLength(
const Circle2d& circle,
const UtVec2d& fromPt,
const UtVec2d& toPt);
251 double ArcLength(
const Circle2d& circle,
const UtVec2d& fromPt,
const UtVec2d& toPt, OrientationAround orientation);
253 bool OuterTangents(
const Circle2d& a,
const Circle2d& b, Line2d& cw, Line2d& ccw,
bool onEdge =
false);
254 bool InnerTangents(
const Circle2d& a,
const Circle2d& b, Line2d& cw, Line2d& ccw,
bool onEdge =
false);
255 std::pair<UtVec2d, UtVec2d> TangentPoints(
const UtVec2d& src,
const Circle2d& circle,
bool onEdge =
false);
257 std::vector<Avoidance*> GetAvoidancesIntersectedBy(
const Line2d& aLine);
258 std::vector<Avoidance*> GetAvoidancesContaining(
const UtVec2d& aPoint);
259 bool IntersectsAnAvoidance(
const Line2d& aLine);
260 bool LocalInsertAvoidance(
const Avoidance& avoid);
264 double mMaxArcLength;
267 ImpossibleRouteResponse mImpossibleRouteResponse;
270 double mVerySmallFudge;
271 double mPercentAvoidancePad;
274 bool mAvoidancesChanged;
276 double mCurrentRouteTime;
281 WsfRoute mRouteAvoidances;
283 UtEntity mReferenceEntity;
285 WsfGeoPoint mGeoSource;
286 WsfGeoPoint mGeoTarget;
290 Avoidance* mSourceAvoidancePtr;
291 Avoidance* mTargetAvoidancePtr;
295 std::map<size_t, double> mAvoidPlatformIdRadius;
297 std::vector<std::pair<WsfGeoPoint, double>> mAvoidLocationRadius;
299 std::vector<Avoidance> mAvoidances;
300 unsigned short mNextAvoidanceId;
302 double mBestPathDist;
303 std::vector<GraphNode*> mGraphNodes;
304 std::vector<GraphBranch*> mBestPath;
305 std::vector<GraphBranch*> mGraphPathStack;
306 WsfSimulation* mSimulationPtr;
bool operator==(int aId, const WsfStringInt &aRhs)
Equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:69