void EllipsoidJoint::extendSetPropertiesFromState(const SimTK::State& state) { Super::extendSetPropertiesFromState(state); // Override default in case of quaternions. const SimbodyMatterSubsystem& matter = getModel().getMatterSubsystem(); if (!matter.getUseEulerAngles(state)) { Rotation r = getChildFrame().getMobilizedBody().getBodyRotation(state); Vec3 angles = r.convertRotationToBodyFixedXYZ(); updCoordinate(EllipsoidJoint::Coord::Rotation1X).setDefaultValue(angles[0]); updCoordinate(EllipsoidJoint::Coord::Rotation2Y).setDefaultValue(angles[1]); updCoordinate(EllipsoidJoint::Coord::Rotation3Z).setDefaultValue(angles[2]); } }
void GimbalJoint::extendSetPropertiesFromState(const SimTK::State& state) { Super::extendSetPropertiesFromState(state); // Override default behavior in case of quaternions. const MultibodySystem& system = _model->getMultibodySystem(); const SimbodyMatterSubsystem& matter = system.getMatterSubsystem(); if (!matter.getUseEulerAngles(state)) { Rotation r = getChildFrame().getMobilizedBody().getBodyRotation(state); Vec3 angles = r.convertRotationToBodyFixedXYZ(); const CoordinateSet& coordinateSet = get_CoordinateSet(); coordinateSet[0].setDefaultValue(angles[0]); coordinateSet[1].setDefaultValue(angles[1]); coordinateSet[2].setDefaultValue(angles[2]); } }
void FreeJoint::extendSetPropertiesFromState(const SimTK::State& state) { Super::extendSetPropertiesFromState(state); // Override default behavior in case of quaternions. const MultibodySystem& system = _model->getMultibodySystem(); const SimbodyMatterSubsystem& matter = system.getMatterSubsystem(); if (!matter.getUseEulerAngles(state)) { Rotation r = getChildFrame().getMobilizedBody().getMobilizerTransform(state).R(); Vec3 t = getChildFrame().getMobilizedBody().getMobilizerTransform(state).p(); Vec3 angles = r.convertRotationToBodyFixedXYZ(); updCoordinate(FreeJoint::Coord::Rotation1X).setDefaultValue(angles[0]); updCoordinate(FreeJoint::Coord::Rotation2Y).setDefaultValue(angles[1]); updCoordinate(FreeJoint::Coord::Rotation3Z).setDefaultValue(angles[2]); updCoordinate(FreeJoint::Coord::TranslationX).setDefaultValue(t[0]); updCoordinate(FreeJoint::Coord::TranslationY).setDefaultValue(t[1]); updCoordinate(FreeJoint::Coord::TranslationZ).setDefaultValue(t[2]); } }
void FreeJoint::extendSetPropertiesFromState(const SimTK::State& state) { Super::extendSetPropertiesFromState(state); // Override default behavior in case of quaternions. const MultibodySystem& system = _model->getMultibodySystem(); const SimbodyMatterSubsystem& matter = system.getMatterSubsystem(); if (!matter.getUseEulerAngles(state)) { Rotation r = getChildFrame().getMobilizedBody().getMobilizerTransform(state).R(); Vec3 t = getChildFrame().getMobilizedBody().getMobilizerTransform(state).p(); Vec3 angles = r.convertRotationToBodyFixedXYZ(); int zero = 0; // Workaround for really ridiculous Visual Studio 8 bug. const CoordinateSet& coordinateSet = get_CoordinateSet(); coordinateSet.get(zero).setDefaultValue(angles[0]); coordinateSet.get(1).setDefaultValue(angles[1]); coordinateSet.get(2).setDefaultValue(angles[2]); coordinateSet.get(3).setDefaultValue(t[0]); coordinateSet.get(4).setDefaultValue(t[1]); coordinateSet.get(5).setDefaultValue(t[2]); } }