00001 /**************************************************************************** 00002 Copyright (C)2002 David Jung <opensim@pobox.com> 00003 00004 This program/file is free software; you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or 00007 (at your option) any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. (http://www.gnu.org) 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program; if not, write to the Free Software 00016 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 00018 $Id: PathRep 1029 2004-02-11 20:45:54Z jungd $ 00019 $Revision: 1.3 $ 00020 $Date: 2004-02-11 15:45:54 -0500 (Wed, 11 Feb 2004) $ 00021 $Author: jungd $ 00022 00023 ****************************************************************************/ 00024 00025 #ifndef _BASE_PATHREP_ 00026 #define _BASE_PATHREP_ 00027 00028 #include <base/base> 00029 00030 #include <base/ReferencedObject> 00031 #include <base/Point3> 00032 #include <base/Orient> 00033 #include <base/Math> 00034 #include <base/Serializable> 00035 #include <base/Cloneable> 00036 00037 00038 namespace base { 00039 00040 00041 /** 00042 * Abstract interface for concrete path representations used by class Path. 00043 * (users should use class Path directly; implementors of new representations 00044 * should implement this interface and add appropriate support in Path) 00045 */ 00046 class PathRep : public ReferencedObject, virtual public Serializable, virtual public Cloneable 00047 { 00048 public: 00049 00050 /// get cartesian position at s:[0..1] 00051 virtual Point3 position(Real s) const = 0; 00052 00053 /// get orientation at s:[0..1] 00054 virtual Orient orientation(Real s) const = 0; 00055 00056 /// some values of s may correspond to distinguished points along a path. 00057 /// the values s=0 and s=1 are always distinguished values. For example, 00058 /// if the path was specified using waypoints, then there will be a 00059 /// distinguished value of s for each waypoint. 0 <= i < numDistinguishedValues() 00060 virtual Real distinguishedValue(Int i) const 00061 { Math::bound<Int>(i,0,1); return (i==0)?0.0:1.0; } 00062 00063 /// number of distinguished s values 00064 virtual Int numDistinguishedValues() const { return 2; } 00065 00066 /// translate the path position by t 00067 virtual void translate(const Vector3& t) = 0; 00068 00069 /// rotate the path orientation by r 00070 virtual void rotate(const Quat4& r) = 0; 00071 00072 /// transform the path by m 00073 virtual void transform(const Matrix4& m) = 0; 00074 00075 /// scale position coords. by s 00076 virtual void scalePosition(Real s) = 0; 00077 00078 }; 00079 00080 00081 } // base 00082 00083 #endif