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_WAYPOINTPATHREP_
00026 #define _BASE_WAYPOINTPATHREP_
00027
00028 #include <base/PathRep>
00029 #include <base/Math>
00030
00031
00032 namespace base {
00033
00034
00035
00036 class WaypointPathRep : public PathRep
00037 {
00038 public:
00039 WaypointPathRep(const array<Point3>& points, const array<Orient>& orients)
00040 : points(points), orients(orients), flags(None)
00041 { computeSis(); }
00042
00043
00044 virtual Object& clone() const
00045 { return *NewObj WaypointPathRep(points, orients, si, flags); }
00046
00047 virtual String className() const { return String("WaypointPathRep"); }
00048
00049
00050 virtual Point3 position(Real s) const;
00051
00052
00053 virtual Orient orientation(Real s) const;
00054
00055 virtual Real distinguishedValue(Int i) const;
00056
00057
00058 virtual Int numDistinguishedValues() const;
00059
00060
00061 virtual void translate(const Vector3& t);
00062
00063
00064 virtual void rotate(const Quat4& r);
00065
00066
00067 virtual void transform(const Matrix4& m);
00068
00069 virtual void scalePosition(Real s);
00070
00071 virtual void serialize(Serializer& s);
00072
00073 protected:
00074 enum Flags { None=0, ConstPos=1, ConstOrient=2 };
00075
00076 WaypointPathRep() {}
00077 WaypointPathRep(const array<Point3>& points, const array<Orient>& orients, array<Real> si, Int flags)
00078 : points(points), orients(orients), si(si), flags(flags) {}
00079
00080 array<Point3> points;
00081 array<Orient> orients;
00082 array<Real> si;
00083
00084
00085
00086 virtual void computeSis();
00087
00088 Int findIndex(Real s) const;
00089
00090 Int flags;
00091
00092 friend class Serializable::SerializableDerivedInstantiator<WaypointPathRep>;
00093 };
00094
00095
00096 }
00097
00098 #endif