Body.h
Go to the documentation of this file.00001 #ifndef SimTK_SIMBODY_BODY_H_
00002 #define SimTK_SIMBODY_BODY_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00051 #include "SimTKcommon.h"
00052 #include "simbody/internal/common.h"
00053
00054 #include <cassert>
00055
00056 namespace SimTK {
00057
00058 class DecorativeGeometry;
00059
00060 class SimTK_SIMBODY_EXPORT Body {
00061 public:
00062 Body() : rep(0) { }
00063 ~Body();
00064 Body(const Body&);
00065 Body& operator=(const Body&);
00066
00070 Body(const MassProperties&);
00071
00072 Body& addDecoration(const Transform& X_BD, const DecorativeGeometry&);
00073
00074
00075
00076
00077 const MassProperties& getDefaultRigidBodyMassProperties() const;
00078 Body& setDefaultRigidBodyMassProperties(const MassProperties&);
00079
00080
00081 class Ground;
00082 class Massless;
00083 class Particle;
00084 class Linear;
00085 class Rigid;
00086 class Deformable;
00087
00088 bool isOwnerHandle() const;
00089 bool isEmptyHandle() const;
00090
00091
00092 class BodyRep;
00093 explicit Body(class BodyRep* r) : rep(r) { }
00094 bool hasRep() const {return rep!=0;}
00095 const BodyRep& getRep() const {assert(rep); return *rep;}
00096 BodyRep& updRep() const {assert(rep); return *rep;}
00097 void setRep(BodyRep& r) {assert(!rep); rep = &r;}
00098 protected:
00099 class BodyRep* rep;
00100 };
00101
00102 class SimTK_SIMBODY_EXPORT Body::Rigid : public Body {
00103 public:
00104 Rigid();
00105 explicit Rigid(const MassProperties&);
00106
00107 Rigid& addDecoration(const Transform& X_BD, const DecorativeGeometry& g) {
00108 (void)Body::addDecoration(X_BD,g);
00109 return *this;
00110 }
00111 Rigid& setDefaultRigidBodyMassProperties(const MassProperties& m) {
00112 (void)Body::setDefaultRigidBodyMassProperties(m);
00113 return *this;
00114 }
00115
00116 class RigidRep;
00117 SimTK_PIMPL_DOWNCAST(Rigid, Body);
00118 private:
00119 RigidRep& updRep();
00120 const RigidRep& getRep() const;
00121 };
00122
00123 class SimTK_SIMBODY_EXPORT Body::Linear : public Body {
00124 public:
00125 Linear();
00126 explicit Linear(const MassProperties&);
00127
00128 Linear& addDecoration(const Transform& X_BD, const DecorativeGeometry& g) {
00129 (void)Body::addDecoration(X_BD,g);
00130 return *this;
00131 }
00132 Linear& setDefaultRigidBodyMassProperties(const MassProperties& m) {
00133 (void)Body::setDefaultRigidBodyMassProperties(m);
00134 return *this;
00135 }
00136
00137 class LinearRep;
00138 SimTK_PIMPL_DOWNCAST(Linear, Body);
00139 private:
00140 LinearRep& updRep();
00141 const LinearRep& getRep() const;
00142 };
00143
00144 class SimTK_SIMBODY_EXPORT Body::Ground : public Body {
00145 public:
00146 Ground();
00147
00148 Ground& addDecoration(const Transform& X_BD, const DecorativeGeometry& g) {
00149 (void)Body::addDecoration(X_BD,g);
00150 return *this;
00151 }
00152
00153 class GroundRep;
00154 SimTK_PIMPL_DOWNCAST(Ground, Body);
00155 private:
00156 GroundRep& updRep();
00157 const GroundRep& getRep() const;
00158 };
00159
00160 class SimTK_SIMBODY_EXPORT Body::Massless : public Body {
00161 public:
00162 Massless();
00163
00164 Massless& addDecoration(const Transform& X_BD, const DecorativeGeometry& g) {
00165 (void)Body::addDecoration(X_BD,g);
00166 return *this;
00167 }
00168
00169 class MasslessRep;
00170 SimTK_PIMPL_DOWNCAST(Massless, Body);
00171 private:
00172 MasslessRep& updRep();
00173 const MasslessRep& getRep() const;
00174 };
00175
00176 }
00177
00178 #endif // SimTK_SIMBODY_BODY_H_
00179
00180
00181