gwnavruntime/pathfollower/positiononcirclearcspline.h Source File

positiononcirclearcspline.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 #pragma once
8 
11 
12 namespace Kaim
13 {
14 
15 class CircleArcSpline;
16 class CircleArcSplineSection;
17 
18 
21 {
22 public:
23  PositionOnCircleArcSplineSection() { Invalidate(); }
24  PositionOnCircleArcSplineSection(const CircleArcSplineSection* circleArcSplineSection) { Reset(circleArcSplineSection); }
25 
26  void Invalidate();
27  void Reset(const CircleArcSplineSection* circleArcSplineSection);
28  void ResetAtSectionEnd(const CircleArcSplineSection* circleArcSplineSection);
29 
30  bool IsValid() const;
31 
32  const CircleArcSplineSection* GetSection() const { return m_circleArcSplineSection; }
33  const Vec3f& GetPosition() const { return m_position; }
34  const Vec2f& GetTangent() const { return m_tangent; }
35  KyFloat32 GetDistanceFromStart() const { return m_distFromStart; }
36  KyFloat32 GetDistanceToEnd() const { return (m_circleArcSplineSection ? (m_circleArcSplineSection->GetLength2d() - m_distFromStart) : 0.0f); }
37  KyFloat32 GetTurningRadius() const { return (m_circleArcSplineSection ? m_circleArcSplineSection->GetRadius() : 0.0f); }
38 
44 
50 
51 public:
52  const CircleArcSplineSection* m_circleArcSplineSection;
53  Vec3f m_position;
54  Vec2f m_tangent;
55  KyFloat32 m_distFromStart;
56 };
57 
58 
61 {
62 public:
63  PositionOnCircleArcSpline() { Invalidate(); }
64  PositionOnCircleArcSpline(const CircleArcSpline* circleArcSpline) { Reset(circleArcSpline); }
65 
66  void Invalidate();
67  void Reset(const CircleArcSpline* circleArcSpline);
68 
69  bool IsValid() const;
70 
71  const CircleArcSplineSection* GetSection() const { return m_positionOnCircleArcSplineSection.GetSection(); }
72  const Vec3f& GetPosition() const { return m_positionOnCircleArcSplineSection.GetPosition(); }
73  const Vec2f& GetTangent() const { return m_positionOnCircleArcSplineSection.GetTangent(); }
74  KyFloat32 GetDistanceFromSectionStart() const { return m_positionOnCircleArcSplineSection.GetDistanceFromStart(); }
75  KyFloat32 GetDistanceToSectionEnd() const { return m_positionOnCircleArcSplineSection.GetDistanceToEnd(); }
76  KyFloat32 GetTurningRadius() const { return m_positionOnCircleArcSplineSection.GetTurningRadius(); }
77 
78  KyFloat32 GetDistanceFromSplineStart() const;
79  KyFloat32 GetDistanceToSplineEnd() const;
80 
81  void MoveForward(KyFloat32 distance);
82  void MoveBackward(KyFloat32 distance);
83 
88 
92 
96 
98  bool IsStrictlyBefore(const PositionOnCircleArcSpline& other) const;
99 
103  KyResult GetDistanceTo(const PositionOnCircleArcSpline& other, KyFloat32& distanceToOther) const;
104 
105 public:
106  PositionOnCircleArcSplineSection m_positionOnCircleArcSplineSection;
107  const CircleArcSpline* m_circleArcSpline;
108  KyUInt32 m_splineSectionIndex;
109 };
110 
111 }
112 
KyFloat32 MoveForward(KyFloat32 distance)
Moves the position forward for the provided distance (in meter), taken along the circle if the Circle...
Definition: positiononcirclearcspline.cpp:60
KyResult MoveToNextTurnSectionStart()
Moves this PositionOnCircleArcSpline to the next upcoming curve CircleArcSplineSection start position...
Definition: positiononcirclearcspline.cpp:233
KyResult MoveToNextStraigthLineSectionStart()
Moves this PositionOnCircleArcSpline to the next upcoming straight CircleArcSplineSection start posit...
Definition: positiononcirclearcspline.cpp:253
KyFloat32 MoveBackward(KyFloat32 distance)
Moves the position backward for the provided distance (in meter), taken along the circle if the Circl...
Definition: positiononcirclearcspline.cpp:82
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
Maintains a position moving along a given CricleArcSpline.
Definition: positiononcirclearcspline.h:60
Maintains a position moving along a given CricleArc.
Definition: positiononcirclearcspline.h:20
KyResult GetDistanceTo(const PositionOnCircleArcSpline &other, KyFloat32 &distanceToOther) const
Computes the distance along spline from this position to other one.
Definition: positiononcirclearcspline.cpp:288
The class representing a spline compounded of oriented circle arcs and straight line segments...
Definition: circlearcspline.h:27
2d vector using KyFloat32.
Definition: vec2f.h:18
KyResult MoveToNextSectionStart()
Moves this PositionOnCircleArcSpline to the next CircleArcSplineSection start position.
Definition: positiononcirclearcspline.cpp:212
bool IsStrictlyBefore(const PositionOnCircleArcSpline &other) const
Compares the relative position with another PositionOnCircleArcSpline.
Definition: positiononcirclearcspline.cpp:273
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Class representing either an oriented circle arc or a straight line segment, to be aggregated into a ...
Definition: circlearcsplinesection.h:23
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16