00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _BASE_TRAJECTORY_
00026 #define _BASE_TRAJECTORY_
00027
00028 #include <base/base>
00029
00030 #include <base/Path>
00031 #include <base/Time>
00032
00033 #include <base/TrajectoryTimeRep>
00034 #include <base/LineSegTrajectoryRep>
00035 #include <base/WaypointTrajectoryRep>
00036 #include <base/ParametricTrajectoryRep>
00037
00038
00039 namespace base {
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 class Trajectory : public Path
00051 {
00052 public:
00053
00054 Trajectory();
00055
00056
00057 Trajectory(const Trajectory& t);
00058
00059
00060
00061
00062
00063 Trajectory(const Path& p, Int samples = 100);
00064
00065
00066 Trajectory(const Point3& sp, const Orient& so, const Time& st,
00067 const Point3& ep, const Orient& eo, const Time& et);
00068
00069
00070
00071
00072 Trajectory(const array<Point3>& points, const array<Orient>& orients = array<Orient>(), const array<Time>& times = array<Time>(), bool deltas=false);
00073
00074
00075
00076
00077
00078
00079 Trajectory(const array<Vector>& points, bool deltas=false);
00080
00081
00082 Trajectory(const ExpressionVector& p);
00083
00084
00085 virtual String className() const { return String("Trajectory"); }
00086
00087
00088 Point3 position(const Time& t) const { return Path::position(trep->gets(t)); }
00089
00090
00091 Orient orientation(const Time& t) const { return Path::orientation(trep->gets(t)); }
00092
00093
00094 Time time(Real s) const { return trep->time(s); }
00095
00096
00097 void resample(Int samples=100);
00098
00099
00100 void resample(const Real dxmax);
00101
00102
00103 void shiftTime(const Time& dt) { trep->shiftTime(dt); }
00104
00105
00106 void scaleTime(Real s) { trep->scaleTime(s); }
00107
00108
00109 Path toPath() const;
00110
00111 virtual void serialize(Serializer& s);
00112
00113 virtual bool formatSupported(String format, Real version = 1.0, ExternalizationType type = IO) const;
00114 virtual void externalize(Externalizer& e, String format = "", Real version = 1.0);
00115
00116 protected:
00117
00118 virtual void create();
00119 virtual void create(const Trajectory& t);
00120 virtual void create(const Point3& sp, const Orient& so, const Point3& ep, const Orient& eo);
00121 virtual void create(const Point3& sp, const Orient& so, const Time& st,
00122 const Point3& ep, const Orient& eo, const Time& et);
00123 virtual void create(const array<Point3>& points, const array<Orient>& orients, bool deltas);
00124 virtual void create(const array<Point3>& points, const array<Orient>& orients, const array<Time>& times, bool deltas);
00125 virtual void create(const array<Vector>& points, bool deltas);
00126 virtual void create(const ExpressionVector& p);
00127
00128
00129 ref<TrajectoryTimeRep> trep;
00130
00131 void init(const array<Point3>& points, const array<Orient>& orients, const array<Time>& times, bool deltas);
00132
00133
00134 Serializable::SerializableDerivedInstantiator<LineSegTrajectoryRep> lineSegTrajectoryRepInstantiator;
00135 Serializable::SerializableDerivedInstantiator<WaypointTrajectoryRep> waypointTrajectoryRepInstantiator;
00136 Serializable::SerializableDerivedInstantiator<ParametricTrajectoryRep> parametricTrajectoryRepInstantiator;
00137
00138 };
00139
00140
00141
00142
00143 inline std::ostream& operator<<(std::ostream& out, const Trajectory& t)
00144 { return out; }
00145
00146
00147 }
00148
00149 #endif