const Force::MobilityLinearSpring& Force::MobilityLinearSpring:: setStiffness(State& state, Real stiffness) const { SimTK_ERRCHK1_ALWAYS(stiffness >= 0, "Force::MobilityLinearSpring::setStiffness()", "Stiffness coefficient must be nonnegative " "(stiffness=%g).", stiffness); getImpl().updParams(state).first = stiffness; return *this; }
Force::Gravity& Force::Gravity:: setDefaultMagnitude(Real g) { SimTK_ERRCHK1_ALWAYS(g >= 0, "Force::Gravity::setDefaultMagnitude()", "The gravity magnitude g must be nonnegative but was specified as %g.", g); getImpl().invalidateTopologyCache(); updImpl().defMagnitude = g; return *this; }
const Force::MobilityLinearDamper& Force::MobilityLinearDamper:: setDamping(State& state, Real damping) const { SimTK_ERRCHK1_ALWAYS(damping >= 0, "Force::MobilityLinearDamper::setDamping()", "Damping coefficient must be nonnegative " "(damping=%g).", damping); getImpl().updDamping(state) = damping; return *this; }
Force::Gravity::Gravity (GeneralForceSubsystem& forces, const SimbodyMatterSubsystem& matter, Real defMagnitude) : Force(new GravityImpl(matter,defMagnitude,0)) { SimTK_ERRCHK1_ALWAYS(defMagnitude >= 0, "Force::Gravity::Gravity(magnitude)", "The gravity magnitude g must be nonnegative but was specified as %g.", defMagnitude); updImpl().setForceSubsystem(forces, forces.adoptForce(*this)); }
Force::MobilityLinearDamper& Force::MobilityLinearDamper:: setDefaultDamping(Real defaultDamping) { SimTK_ERRCHK1_ALWAYS(defaultDamping >= 0, "Force::MobilityLinearDamper::setDefaultDamping()", "Damping coefficient must be nonnegative " "(defaultDamping=%g).", defaultDamping); MobilityLinearDamperImpl& impl = updImpl(); if (impl.m_defaultDamping != defaultDamping) { impl.m_defaultDamping = defaultDamping; impl.invalidateTopologyCache(); } return *this; }
Force::MobilityLinearDamper:: MobilityLinearDamper(GeneralForceSubsystem& forces, const MobilizedBody& mobod, MobilizerUIndex whichU, Real defaultDamping) : Force(new MobilityLinearDamperImpl(mobod, whichU, defaultDamping)) { SimTK_ERRCHK1_ALWAYS(defaultDamping >= 0, "Force::MobilityLinearDamper::MobilityLinearDamper()", "Damping coefficient must be nonnegative " "(defaultDamping=%g).", defaultDamping); updImpl().setForceSubsystem(forces, forces.adoptForce(*this)); }
Force::MobilityLinearSpring& Force::MobilityLinearSpring:: setDefaultStiffness(Real defaultStiffness) { SimTK_ERRCHK1_ALWAYS(defaultStiffness >= 0, "Force::MobilityLinearSpring::setDefaultStiffness()", "Stiffness coefficient must be nonnegative " "(defaultStiffness=%g).", defaultStiffness); MobilityLinearSpringImpl& impl = updImpl(); if (impl.m_defaultStiffness != defaultStiffness) { impl.m_defaultStiffness = defaultStiffness; impl.invalidateTopologyCache(); } return *this; }
const Force::Gravity& Force::Gravity:: setMagnitude(State& state, Real g) const { SimTK_ERRCHK1_ALWAYS(g >= 0, "Force::Gravity::setMagnitude()", "The gravity magnitude g must be nonnegative but was specified as %g.", g); if (getMagnitude(state) != g) { getImpl().invalidateForceCache(state); getImpl().updParameters(state).g = g; if (g == 0) getImpl().updForceCache(state).setToZero(); // must precalculate } return *this; }
Force::MobilityLinearSpring:: MobilityLinearSpring(GeneralForceSubsystem& forces, const MobilizedBody& mobod, MobilizerQIndex whichQ, Real defaultStiffness, Real defaultQZero) : Force(new MobilityLinearSpringImpl(mobod, whichQ, defaultStiffness, defaultQZero)) { SimTK_ERRCHK1_ALWAYS(defaultStiffness >= 0, "Force::MobilityLinearSpring::MobilityLinearSpring()", "Stiffness coefficient must be nonnegative " "(defaultStiffness=%g).", defaultStiffness); updImpl().setForceSubsystem(forces, forces.adoptForce(*this)); }
Force::Gravity::Gravity (GeneralForceSubsystem& forces, const SimbodyMatterSubsystem& matter, const UnitVec3& defDirection, Real defMagnitude, Real defZeroHeight) : Force(new GravityImpl(matter,defDirection,defMagnitude,defZeroHeight)) { SimTK_ERRCHK1_ALWAYS(defMagnitude >= 0, "Force::Gravity::Gravity(downDirection,magnitude)", "The gravity magnitude g must be nonnegative but was specified as %g.", defMagnitude); SimTK_ERRCHK_ALWAYS(defDirection.isFinite(), "Force::Gravity::Gravity(downDirection,magnitude)", "A non-finite 'down' direction was received; did you specify a zero-" "length Vec3? The direction must be non-zero."); updImpl().setForceSubsystem(forces, forces.adoptForce(*this)); }