Simbody
3.4 (development)
|
00001 #ifndef SimTK_SIMBODY_MOBILIZED_BODY_ELLIPSOID_H_ 00002 #define SimTK_SIMBODY_MOBILIZED_BODY_ELLIPSOID_H_ 00003 00004 /* -------------------------------------------------------------------------- * 00005 * Simbody(tm) * 00006 * -------------------------------------------------------------------------- * 00007 * This is part of the SimTK biosimulation toolkit originating from * 00008 * Simbios, the NIH National Center for Physics-Based Simulation of * 00009 * Biological Structures at Stanford, funded under the NIH Roadmap for * 00010 * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. * 00011 * * 00012 * Portions copyright (c) 2009-13 Stanford University and the Authors. * 00013 * Authors: Ajay Seth, Michael Sherman * 00014 * Contributors: * 00015 * * 00016 * Licensed under the Apache License, Version 2.0 (the "License"); you may * 00017 * not use this file except in compliance with the License. You may obtain a * 00018 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * 00019 * * 00020 * Unless required by applicable law or agreed to in writing, software * 00021 * distributed under the License is distributed on an "AS IS" BASIS, * 00022 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 00023 * See the License for the specific language governing permissions and * 00024 * limitations under the License. * 00025 * -------------------------------------------------------------------------- */ 00026 00030 #include "simbody/internal/MobilizedBody.h" 00031 00032 namespace SimTK { 00033 00045 class SimTK_SIMBODY_EXPORT MobilizedBody::Ellipsoid : public MobilizedBody { 00046 public: 00049 Ellipsoid() {} 00050 00058 Ellipsoid(MobilizedBody& parent, const Transform& X_PF, 00059 const Body& bodyInfo, const Transform& X_BM, 00060 const Vec3& radii, Direction=Forward); 00061 00064 Ellipsoid(MobilizedBody& parent, const Body& bodyInfo, 00065 const Vec3& radii, Direction=Forward); 00066 00069 Ellipsoid(MobilizedBody& parent, const Transform& X_PF, 00070 const Body& bodyInfo, const Transform& X_BM, 00071 Direction=Forward); 00072 00076 Ellipsoid(MobilizedBody& parent, const Body& bodyInfo, Direction=Forward); 00077 00080 Ellipsoid& setDefaultRadii(const Vec3& radii); 00083 const Vec3& getDefaultRadii() const; 00084 00085 00091 Ellipsoid& setDefaultRotation(const Rotation& R_FM) { 00092 return setDefaultQ(R_FM.convertRotationToQuaternion()); 00093 } 00096 Rotation getDefaultRotation() const {return Rotation(getDefaultQ());} 00097 00098 Ellipsoid& addBodyDecoration(const Transform& X_BD, const DecorativeGeometry& g) { 00099 (void)MobilizedBody::addBodyDecoration(X_BD,g); return *this; 00100 } 00101 Ellipsoid& addOutboardDecoration(const Transform& X_MD, const DecorativeGeometry& g) { 00102 (void)MobilizedBody::addOutboardDecoration(X_MD,g); return *this; 00103 } 00104 Ellipsoid& addInboardDecoration (const Transform& X_FD, const DecorativeGeometry& g) { 00105 (void)MobilizedBody::addInboardDecoration(X_FD,g); return *this; 00106 } 00107 00108 Ellipsoid& setDefaultInboardFrame(const Transform& X_PF) { 00109 (void)MobilizedBody::setDefaultInboardFrame(X_PF); return *this; 00110 } 00111 00112 Ellipsoid& setDefaultOutboardFrame(const Transform& X_BM) { 00113 (void)MobilizedBody::setDefaultOutboardFrame(X_BM); return *this; 00114 } 00115 00116 00117 00118 // Generic default state Topology methods. 00119 const Quaternion& getDefaultQ() const; 00120 Quaternion& updDefaultQ(); 00121 Ellipsoid& setDefaultQ(const Quaternion& q) {updDefaultQ()=q; return *this;} 00122 00123 const Vec4& getQ(const State&) const; 00124 const Vec4& getQDot(const State&) const; 00125 const Vec4& getQDotDot(const State&) const; 00126 const Vec3& getU(const State&) const; 00127 const Vec3& getUDot(const State&) const; 00128 00129 void setQ(State&, const Vec4&) const; 00130 void setU(State&, const Vec3&) const; 00131 00132 const Vec4& getMyPartQ(const State&, const Vector& qlike) const; 00133 const Vec3& getMyPartU(const State&, const Vector& ulike) const; 00134 00135 Vec4& updMyPartQ(const State&, Vector& qlike) const; 00136 Vec3& updMyPartU(const State&, Vector& ulike) const; 00137 // hide from Doxygen 00139 SimTK_INSERT_DERIVED_HANDLE_DECLARATIONS(Ellipsoid, EllipsoidImpl, 00140 MobilizedBody); 00142 }; 00143 00144 } // namespace SimTK 00145 00146 #endif // SimTK_SIMBODY_MOBILIZED_BODY_ELLIPSOID_H_ 00147 00148 00149