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 #include <physics/SpatialTransform>
00026
00027
00028 using physics::SpatialTransform;
00029
00030 using base::Point3;
00031 using base::Orient;
00032 using base::Transform;
00033
00034 using physics::Spatial;
00035
00036
00037
00038 SpatialTransform::SpatialTransform()
00039 {
00040 }
00041
00042 SpatialTransform::SpatialTransform(const base::Transform& childTransform)
00043 : t(childTransform), tinv(inverse(childTransform))
00044 {
00045 }
00046
00047 SpatialTransform::SpatialTransform(ref<Spatial> child, const base::Transform& childTransform)
00048 : t(childTransform), tinv(inverse(childTransform)), child(child)
00049 {
00050 }
00051
00052 SpatialTransform::SpatialTransform(ref<Spatial> child, ref<Spatial> transformedRelativeTo)
00053 : child(child)
00054 {
00055 if (child)
00056 t = transformedRelativeTo->getConfiguration() * inverse(child->getConfiguration());
00057 else
00058 t = transformedRelativeTo->getConfiguration();
00059 tinv = inverse(t);
00060 }
00061
00062 SpatialTransform::SpatialTransform(const String& name)
00063 : Spatial(name)
00064 {
00065 }
00066
00067 SpatialTransform::SpatialTransform(const SpatialTransform& st)
00068 : Spatial(st), t(st.t), tinv(st.tinv), child(st.child)
00069 {
00070 }
00071
00072
00073 SpatialTransform::~SpatialTransform()
00074 {
00075 }
00076
00077
00078 SpatialTransform& SpatialTransform::operator=(const SpatialTransform& st)
00079 {
00080 t = st.t;
00081 tinv = st.tinv;
00082 child = st.child;
00083 setName(st.getName());
00084 return *this;
00085 }
00086
00087
00088
00089
00090 void SpatialTransform::setConfiguration(const base::Transform& configuration)
00091 {
00092 if (child) child->setConfiguration( configuration*t );
00093 }
00094
00095
00096 base::Transform SpatialTransform::getConfiguration() const
00097 {
00098 if (child)
00099 return child->getConfiguration()*tinv;
00100 return Transform();
00101 }
00102
00103
00104 void SpatialTransform::setPosition(const Point3& pos)
00105 {
00106 setConfiguration( Transform(pos, getOrientation()) );
00107 }
00108
00109
00110 Point3 SpatialTransform::getPosition() const
00111 {
00112 return getConfiguration().getTranslation();
00113 }
00114
00115
00116 void SpatialTransform::setOrientation(const Orient& orient)
00117 {
00118 setConfiguration( Transform(getPosition(), orient) );
00119 }
00120
00121
00122 Orient SpatialTransform::getOrientation() const
00123 {
00124 return getConfiguration().getRotation();
00125 }
00126
00127
00128 void SpatialTransform::setTransform(const base::Transform& transform)
00129 {
00130 t = transform;
00131 tinv = inverse(t);
00132 }
00133
00134
00135 base::Transform SpatialTransform::getTransform() const
00136 {
00137 return t;
00138 }
00139
00140
00141 void SpatialTransform::setChild(ref<Spatial> child)
00142 {
00143 this->child = child;
00144 }
00145
00146
00147 ref<Spatial> SpatialTransform::getChild() const
00148 {
00149 return child;
00150 }
00151
00152