1115 lines (872 with data), 30.0 kB
/* ----------------------------------------------------------------
Drivers for the model:
-The pelvis is locked to the ground
-The remaining degrees of freedom are controlled by parameters in the mannequin.any file.
-This file is a good way to get an overview of the dof in the full body model
all the dof in the body model is driven from this file.
-In total
Soeren, March 1, 2006.
---------------------------------------------------------------- */
#if GLOBAL_DRIVER_SWITCH == 1
// ************************************
// Drivers for attaching the pelvis to the global reference system
// ************************************
#if TRUNK == 1
#if PELVIS_POS_X_DRIVER == 1
AnyKinEqSimpleDriver PelvisGroundDriverPosX ={
AnyKinLinear lin ={
AnyFixedRefFrame &ref1 =....EnvironmentModel.GlobalRef;
AnySeg &ref2 =..BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
};
MeasureOrganizer = {0};
DriverPos={Main.WidgetValues.PelvisPosX[0]};
DriverVel={.JntVel.PelvisPosX};
Reaction.Type={On};
};
AnyDrawWidgetLin PelvisWidgetLinX = {
Visible = On;
//Opacity = 1;
Operation = &.Study;
UpdateEvent = OnMouseRelease;
MaxDrawSize = 0.4;
//MinDrawSize = 0;
RefFrame =&...EnvironmentModel.GlobalRef;
Target = &.Main.WidgetValues.PelvisPosX;
AnyVec3 RelPosition = {.PelvisGroundDriverPosX.DriverPos[0]-.Main.WidgetValues.PelvisPosX[0],.PelvisGroundDriverPosX.lin.Pos[1],.PelvisGroundDriverPosX.lin.Pos[2]};
RelPos=&RelPosition;
AxisOnOff = {On, Off, Off};
};
#else
#endif
#if PELVIS_POS_Y_DRIVER == 1
AnyKinEqSimpleDriver PelvisGroundDriverPosY ={
AnyKinLinear lin ={
AnyFixedRefFrame &ref1 =....EnvironmentModel.GlobalRef;
AnySeg &ref2 =..BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
};
MeasureOrganizer = {1};
DriverPos={Main.WidgetValues.PelvisPosY[1]};
DriverVel={.JntVel.PelvisPosY};
Reaction.Type={On};
};
AnyDrawWidgetLin PelvisWidgetLinY = {
Visible = On;
Operation = &.Study;
UpdateEvent = OnMouseRelease;
MaxDrawSize = 0.4;
//MinDrawSize = 0;
RefFrame =&...EnvironmentModel.GlobalRef;
Target = &.Main.WidgetValues.PelvisPosY;
AnyVec3 RelPosition = {.PelvisGroundDriverPosY.lin.Pos[0],.PelvisGroundDriverPosY.DriverPos[0]-.Main.WidgetValues.PelvisPosY[1],.PelvisGroundDriverPosY.lin.Pos[2]};
RelPos=&RelPosition;
AxisOnOff = {Off, On, Off};
};
#else
#endif
#if PELVIS_POS_Z_DRIVER == 1
AnyKinEqSimpleDriver PelvisGroundDriverPosZ ={
AnyKinLinear lin ={
AnyFixedRefFrame &ref1 =....EnvironmentModel.GlobalRef;
AnySeg &ref2 =..BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
};
MeasureOrganizer = {2};
DriverPos={Main.WidgetValues.PelvisPosZ[2]};
DriverVel={.JntVel.PelvisPosZ};
Reaction.Type={On};
};
AnyDrawWidgetLin PelvisWidgetLinZ = {
Visible = On;
//Opacity = 1;
Operation = &.Study;
UpdateEvent = OnMouseRelease;
MaxDrawSize = 0.4;
//MinDrawSize = 0;
RefFrame =&...EnvironmentModel.GlobalRef;
Target = &.Main.WidgetValues.PelvisPosZ;
AnyVec3 RelPosition = {.PelvisGroundDriverPosZ.lin.Pos[0],.PelvisGroundDriverPosZ.lin.Pos[1],.PelvisGroundDriverPosZ.DriverPos[0]-.Main.WidgetValues.PelvisPosZ[2]};
RelPos=&RelPosition;
AxisOnOff = {Off, Off, On};
};
#else
#endif
#if PELVIS_ROT_Z_DRIVER == 1
AnyKinEqSimpleDriver PelvisGroundDriverRotZ ={
AnyKinRotational rot ={
AnyFixedRefFrame &ref1 =....EnvironmentModel.GlobalRef;
AnySeg &ref2 =..BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Type=RotAxesAngles;
};
MeasureOrganizer = {0};
DriverPos={Main.WidgetValues.PelvisRotZ[0]};
DriverVel={.JntVel.PelvisPosZ};
Reaction.Type={On};
};
AnyDrawWidgetRot PelvisPosRotZ = {
//Visible = On;
//Opacity = 1;
Operation = &.Study;
UpdateEvent = OnMouseRelease;
MaxDrawSize = 0.2;
MinDrawSize = 0;
RefFrame =&.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Target = &.Main.WidgetValues.PelvisRotZ;
AxisOnOff = {On, Off, Off};
Axis1 = z;
Axis2 = y;
Axis3 = x;
};
#else
#endif
#if PELVIS_ROT_Y_DRIVER == 1
AnyKinEqSimpleDriver PelvisGroundDriverRotY ={
AnyKinRotational rot ={
AnyFixedRefFrame &ref1 =....EnvironmentModel.GlobalRef;
AnySeg &ref2 =..BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Type=RotAxesAngles;
};
MeasureOrganizer = {1};
DriverPos={Main.WidgetValues.PelvisRotY[1]};
DriverVel={pi/180*.JntVel.PelvisRotY};
Reaction.Type={On};
};
AnyDrawWidgetRot PelvisPosRotY = {
Operation = &.Study;
UpdateEvent = OnMouseRelease;
MaxDrawSize = 0.2;
MinDrawSize = 0;
RefFrame =&.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Target = &.Main.WidgetValues.PelvisRotY;
AxisOnOff = {Off, On, Off};
Axis1 = z;
Axis2 = y;
Axis3 = x;
};
#else
#endif
#if PELVIS_ROT_X_DRIVER == 1
AnyKinEqSimpleDriver PelvisGroundDriverRotX ={
AnyKinRotational rot ={
AnyFixedRefFrame &ref1 =....EnvironmentModel.GlobalRef;
AnySeg &ref2 =..BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Type=RotAxesAngles;
};
MeasureOrganizer = {2};
DriverPos={Main.WidgetValues.PelvisRotX[2]};
DriverVel={pi/180*.JntVel.PelvisRotX};
Reaction.Type={On};
AnyVec3 Rot ={0,0,0};
AnyVec3 RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot PelvisPosRotX = {
Operation = &.Study;
UpdateEvent = OnMouseRelease;
MaxDrawSize = 0.2;
MinDrawSize = 0;
RefFrame =&.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
Target = &.Main.WidgetValues.PelvisRotX;
AxisOnOff = {Off, Off, On};
Axis1 = z;
Axis2 = y;
Axis3 = x;
};
#else
#endif
// ************************************
// Drivers for the spine
// ************************************
//Neck driver
#if NECK_DRIVER == 1
AnyKinEqSimpleDriver NeckJntDriver = {
AnyRevoluteJoint &T12L1Joint = .BodyModel.Interface.Trunk.NeckJoint;
DriverPos = pi/180*{.JntPos.NeckExtension};
DriverVel = pi/180*{.JntVel.NeckExtension};
Reaction.Type = {Off};
};
#else
#endif
//Thorax pelvis rotation driver
#if PELVIS_THORAX_LATERAL_BENDING_DRIVER == 1
AnyKinEqSimpleDriver PostureDriverBending ={
AnyKinMeasure& Ref2 = .BodyModel.Interface.Trunk.PelvisThoraxLateralBending;
DriverPos = pi/180*{.JntPos.PelvisThoraxLateralBending};
DriverVel = pi/180*{.JntVel.PelvisThoraxLateralBending};
Reaction.Type = {Off};
};
#else
#endif
#if PELVIS_THORAX_ROTATION_DRIVER == 1
AnyKinEqSimpleDriver PostureDriverRotation ={
AnyKinMeasure& Ref3 = .BodyModel.Interface.Trunk.PelvisThoraxRotation;
DriverPos = pi/180*{.JntPos.PelvisThoraxRotation};
DriverVel = pi/180*{.JntVel.PelvisThoraxRotation};
Reaction.Type = {Off};
};
#else
#endif
#if PELVIS_THORAX_EXTENSION_DRIVER == 1
AnyKinEqSimpleDriver PostureDriverExtension ={
AnyKinMeasure& Ref1 = .BodyModel.Interface.Trunk.PelvisThoraxExtension;
DriverPos = pi/180*{.JntPos.PelvisThoraxExtension};
DriverVel = pi/180*{.JntVel.PelvisThoraxExtension};
Reaction.Type = {Off};
};
#else
#endif
#else
#endif
// ************************************
// Drivers for the right arm
// ************************************
#if RIGHT_ARM == 1
//Sterno clavicular joint driver
#if STERNO_CLAVICULAR_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver SCDriverRight ={
AnyKinMeasure& ref1 =.BodyModel.Interface.Right.SternoClavicularProtraction;
AnyKinMeasure& ref2 =.BodyModel.Interface.Right.SternoClavicularElevation;
DriverPos = pi/180*{
.JntPos.Right.SternoClavicularProtraction,
.JntPos.Right.SternoClavicularElevation
};
DriverVel = {
.JntVel.Right.SternoClavicularProtraction,
.JntVel.Right.SternoClavicularElevation
};
Reaction.Type={Off,Off};
AnyFloat SCRot ={0,0,0};
AnyFloat SCRotDesVar= DesignVar(SCRot);
};
AnyDrawWidgetRot SCWidgetRight = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.scj.RotNode;
Target = &.SCDriverRight.SCRotDesVar ;
AxisOnOff = {On,On,On};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = y;
Axis2 = z;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Glenohumeral joint
#if GLENOHUMERAL_ABDUCTION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver GHDriverRightAbduction={
AnyKinMeasure& ref1 =.BodyModel.Interface.Right.GlenohumeralAbduction;
DriverPos=pi/180*{.JntPos.Right.GlenohumeralAbduction}+RotDesVar[0];
DriverVel = pi/180*{.JntVel.Right.GlenohumeralAbduction};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot GHWidgetRightAbduction = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode;
Target = &.GHDriverRightAbduction.RotDesVar ;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
Axis2 = z;
Axis3 = y;
MaxDrawSize=0.1;
AnyVec3 RelPosition=(..HumanModel.Right.ShoulderArm.Seg.Humerus.gh.RotNode.r-..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode.r)*..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode.Axes';
RelPos=&RelPosition;
};
#else
#endif
#if GLENOHUMERAL_FLEXION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver GHDriverRightFlexion={
AnyKinMeasure& ref2 =.BodyModel.Interface.Right.GlenohumeralFlexion;
DriverPos=pi/180*{.JntPos.Right.GlenohumeralFlexion}+RotDesVar[1];
DriverVel = pi/180*{.JntVel.Right.GlenohumeralFlexion};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot GHWidgetRightFlexion = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode;
Target = &.GHDriverRightFlexion.RotDesVar ;
AxisOnOff = {Off,On,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
Axis2 = z;
Axis3 = y;
MaxDrawSize=0.1;
AnyVec3 RelPosition=(..HumanModel.Right.ShoulderArm.Seg.Humerus.gh.RotNode.r-..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode.r)*..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode.Axes';
RelPos=&RelPosition;
};
#else
#endif
#if GLENOHUMERAL_EXTERNAL_ROTATION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver GHDriverRightExternalRotation={
AnyKinMeasure& ref3 =.BodyModel.Interface.Right.GlenohumeralExternalRotation;
DriverPos=pi/180*{.JntPos.Right.GlenohumeralExternalRotation}+RotDesVar[2];
DriverVel = pi/180*{.JntVel.Right.GlenohumeralExternalRotation};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot GHWidgetRightExternalRotation = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode;
Target = &.GHDriverRightExternalRotation.RotDesVar ;
AxisOnOff = {Off,Off,On};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
Axis2 = z;
Axis3 = y;
MaxDrawSize=0.1;
AnyVec3 RelPosition=(..HumanModel.Right.ShoulderArm.Seg.Humerus.gh.RotNode.r-..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode.r)*..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.ij.RotNode.Axes';
RelPos=&RelPosition;
};
#else
#endif
//Elbow flexion driver
#if ELBOW_FLEXION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver ElbowFlexionDriverRight={
AnyKinMeasureOrg &Elbow =.BodyModel.Interface.Right.ElbowFlexion;
DriverPos=pi/180*{.JntPos.Right.ElbowFlexion}+RotDesVar;
DriverVel = pi/180*{.JntVel.Right.ElbowFlexion};
Reaction.Type={Off};
AnyFloat Rot ={0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot ElbowFlexionDriverWidgetRight= {
RefFrame = &..HumanModel.Right.ShoulderArm.Seg.Humerus.fe.RotNode;
Target = &.ElbowFlexionDriverRight.RotDesVar ;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Elbow pronation driver
#if ELBOW_PRONATION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver ElbowPronationDriverRight={
AnyKinMeasure& Elbow =.BodyModel.Interface.Right.ElbowPronation;
DriverPos = pi/180*{.JntPos.Right.ElbowPronation }+RotDesVar;
DriverVel=pi/180*{.JntVel.Right.ElbowPronation };
Reaction.Type={Off};
AnyFloat Rot ={0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot ElbowPronationDriverWidgetRight= {
RefFrame = &..HumanModel.Right.ShoulderArm.Seg.Ulna.ps2.RotNode;
Target = &.ElbowPronationDriverRight.RotDesVar ;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Wrist driver
#if WRIST_FLEXION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver WristDriverRightFlexion ={
AnyKinMeasure& ref1 =.BodyModel.Interface.Right.WristFlexion;
DriverPos = pi/180*{.JntPos.Right.WristFlexion}+RotDesVar[0];
DriverVel = pi/180*{.JntVel.Right.WristFlexion};
Reaction.Type={Off};
AnyFloat Rot ={0,0};
AnyFloat RotDesVar= DesignVar(Rot );
};
AnyDrawWidgetRot WristDriverWidgetFlexionRight = {
RefFrame = &..HumanModel.Right.ShoulderArm.Seg.Radius.wj.RotNode;
Target = &.WristDriverRightFlexion.RotDesVar;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = y;
MaxDrawSize=0.1;
};
#else
#endif
#if WRIST_ABDUCTION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver WristDriverRightAbduction ={
AnyKinMeasure& ref2 =.BodyModel.Interface.Right.WristAbduction;
DriverPos = pi/180*{.JntPos.Right.WristAbduction}+RotDesVar[0];
DriverVel = pi/180*{.JntVel.Right.WristAbduction};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot );
};
AnyDrawWidgetRot WristDriverWidgetAbductionRight = {
RefFrame = &..HumanModel.Right.ShoulderArm.Seg.Radius.wj.RotNode;
Target = &.WristDriverRightAbduction.RotDesVar;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
#else
#endif
// ************************************
// Drivers for the left arm
// ************************
#if LEFT_ARM == 1
//Sterno clavicular joint driver
#if STERNO_CLAVICULAR_LEFT_DRIVER == 1
AnyKinEqSimpleDriver SCDriverLeft ={
AnyKinMeasure& ref1 =.BodyModel.Interface.Left.SternoClavicularProtraction;
AnyKinMeasure& ref2 =.BodyModel.Interface.Left.SternoClavicularElevation;
DriverPos = pi/180*{
.JntPos.Left.SternoClavicularProtraction,
.JntPos.Left.SternoClavicularElevation
};
DriverVel = {
.JntVel.Left.SternoClavicularProtraction,
.JntVel.Left.SternoClavicularElevation
};
Reaction.Type={Off,Off};
AnyFloat SCRot ={0,0,0};
AnyFloat SCRotDesVar= DesignVar(SCRot);
};
AnyDrawWidgetRot SCWidgetLeft = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.scj.RotNode;
Target = &.SCDriverLeft.SCRotDesVar ;
AxisOnOff = {On,On,On};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = y;
Axis2 = z;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Glenohumeral joint
#if GLENOHUMERAL_ABDUCTION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver GHDriverLeftAbduction={
AnyKinMeasure& ref1 =.BodyModel.Interface.Left.GlenohumeralAbduction;
DriverPos=pi/180*{.JntPos.Left.GlenohumeralAbduction}+RotDesVar[0];
DriverVel = pi/180*{.JntVel.Left.GlenohumeralAbduction};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot GHWidgetLeftAbduction = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode;
Target = &.GHDriverLeftAbduction.RotDesVar ;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
Axis2 = z;
Axis3 = y;
MaxDrawSize=0.1;
AnyVec3 RelPosition=(..HumanModel.Left.ShoulderArm.Seg.Humerus.gh.RotNode.r-..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode.r)*..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode.Axes';
RelPos=&RelPosition;
};
#else
#endif
#if GLENOHUMERAL_FLEXION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver GHDriverLeftFlexion={
AnyKinMeasure& ref2 =.BodyModel.Interface.Left.GlenohumeralFlexion;
DriverPos=pi/180*{.JntPos.Left.GlenohumeralFlexion}+RotDesVar[1];
DriverVel = pi/180*{.JntVel.Left.GlenohumeralFlexion};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot GHWidgetLeftFlexion = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode;
Target = &.GHDriverLeftFlexion.RotDesVar ;
AxisOnOff = {Off,On,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
Axis2 = z;
Axis3 = y;
MaxDrawSize=0.1;
AnyVec3 RelPosition=(..HumanModel.Left.ShoulderArm.Seg.Humerus.gh.RotNode.r-..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode.r)*..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode.Axes';
RelPos=&RelPosition;
};
#else
#endif
#if GLENOHUMERAL_EXTERNAL_ROTATION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver GHDriverLeftExternalRotation={
AnyKinMeasure& ref3 =.BodyModel.Interface.Left.GlenohumeralExternalRotation;
DriverPos=pi/180*{.JntPos.Left.GlenohumeralExternalRotation}+RotDesVar[2];
DriverVel = pi/180*{.JntVel.Left.GlenohumeralExternalRotation};
Reaction.Type={Off};
AnyFloat Rot ={0,0,0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot GHWidgetLeftExternalRotation = {
RefFrame = &..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode;
Target = &.GHDriverLeftExternalRotation.RotDesVar ;
AxisOnOff = {Off,Off,On};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
Axis2 = z;
Axis3 = y;
MaxDrawSize=0.1;
AnyVec3 RelPosition=(..HumanModel.Left.ShoulderArm.Seg.Humerus.gh.RotNode.r-..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode.r)*..HumanModel.Trunk.SegmentsThorax.ThoraxSeg.iji.RotNode.Axes';
RelPos=&RelPosition;
};
#else
#endif
//Elbow flexion driver
#if ELBOW_FLEXION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver ElbowFlexionDriverLeft={
AnyKinMeasureOrg &Elbow =.BodyModel.Interface.Left.ElbowFlexion;
DriverPos=pi/180*{.JntPos.Left.ElbowFlexion}+RotDesVar;
DriverVel = pi/180*{.JntVel.Left.ElbowFlexion};
Reaction.Type={Off};
AnyFloat Rot ={0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot ElbowFlexionDriverWidgetLeft= {
RefFrame = &..HumanModel.Left.ShoulderArm.Seg.Humerus.fe.RotNode;
Target = &.ElbowFlexionDriverLeft.RotDesVar ;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Elbow pronation driver
#if ELBOW_PRONATION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver ElbowPronationDriverLeft={
AnyKinMeasure& Elbow =.BodyModel.Interface.Left.ElbowPronation;
DriverPos = pi/180*{.JntPos.Left.ElbowPronation }+RotDesVar;
DriverVel=pi/180*{.JntVel.Left.ElbowPronation };
Reaction.Type={Off};
AnyFloat Rot ={0};
AnyFloat RotDesVar= DesignVar(Rot);
};
AnyDrawWidgetRot ElbowPronationDriverWidgetLeft= {
RefFrame = &..HumanModel.Left.ShoulderArm.Seg.Ulna.ps2.RotNode;
Target = &.ElbowPronationDriverLeft.RotDesVar ;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Wrist driver
#if WRIST_FLEXION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver WristDriverLeftFlexion ={
AnyKinMeasure& ref1 =.BodyModel.Interface.Left.WristFlexion;
DriverPos = pi/180*{.JntPos.Left.WristFlexion}+RotDesVar[0];
DriverVel = pi/180*{.JntVel.Left.WristFlexion};
Reaction.Type={Off};
AnyFloat Rot ={0,0};
AnyFloat RotDesVar= DesignVar(Rot );
};
AnyDrawWidgetRot WristDriverWidgetFlexionLeft = {
RefFrame = &..HumanModel.Left.ShoulderArm.Seg.Radius.wj.RotNode;
Target = &.WristDriverLeftFlexion.RotDesVar;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = y;
MaxDrawSize=0.1;
};
#else
#endif
#if WRIST_ABDUCTION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver WristDriverLeftAbduction ={
AnyKinMeasure& ref2 =.BodyModel.Interface.Left.WristAbduction;
DriverPos = pi/180*{.JntPos.Left.WristAbduction}+RotDesVar[0];
DriverVel = pi/180*{.JntVel.Left.WristAbduction};
Reaction.Type={Off};
AnyFloat Rot ={0,0};
AnyFloat RotDesVar= DesignVar(Rot );
};
AnyDrawWidgetRot WristDriverWidgetAbductionLeft = {
RefFrame = &..HumanModel.Left.ShoulderArm.Seg.Radius.wj.RotNode;
Target = &.WristDriverLeftAbduction.RotDesVar;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
#else
#endif
// ************************************
// Drivers for the right leg
// ************************************
#if RIGHT_LEG + RIGHT_LEG_TD == 0
#else
//Hip driver
#if HIP_FLEXION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver HipDriverRightFlexion={
AnyKinMeasure& ref1 =.BodyModel.Interface.Right.HipFlexion;
DriverPos={Main.WidgetValues.Right.HipFlexion [0]};
DriverVel = pi/180*{.JntVel.Right.HipFlexion};
Reaction.Type={Off};
};
AnyDrawWidgetRot HipWidgetRightFlexion = {
RefFrame = &.BodyModel.Interface.Right.HipFlexion.HipMeasure.PelvisNode;
Target = &.Main.WidgetValues.Right.HipFlexion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
Axis2 = y;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
#if HIP_EXTERNAL_ROTATION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver HipDriverRightExternalRotation={
AnyKinMeasure& ref2 =.BodyModel.Interface.Right.HipExternalRotation;
DriverPos={Main.WidgetValues.Right.HipExternalRotation[1]};
DriverVel = pi/180*{.JntVel.Right.HipExternalRotation};
Reaction.Type={Off};
};
AnyDrawWidgetRot HipWidgetRightExternalRotation = {
RefFrame = &.BodyModel.Interface.Right.HipFlexion.HipMeasure.PelvisNode;
Target = &.Main.WidgetValues.Right.HipExternalRotation;
AxisOnOff = {Off,On,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
Axis2 = y;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
#if HIP_ABDUCTION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver HipDriverRightAbduction={
AnyKinMeasure& ref3 =.BodyModel.Interface.Right.HipAbduction;
DriverPos= {Main.WidgetValues.Right.HipAbduction[2]};
DriverVel = pi/180*{.JntVel.Right.HipAbduction};
Reaction.Type={Off};
};
AnyDrawWidgetRot HipWidgetRightAbduction = {
RefFrame = &.BodyModel.Interface.Right.HipFlexion.HipMeasure.PelvisNode;
Target = &Main.WidgetValues.Right.HipAbduction;
AxisOnOff = {Off,Off,On};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
Axis2 = y;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Knee driver
#if KNEE_FLEXION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver KneeDriverRight={
AnyKinMeasureOrg &Knee = .BodyModel.Interface.Right.KneeFlexion;
DriverPos={Main.WidgetValues.Right.KneeFlexion[0]};
DriverVel = pi/180*{.JntVel.Right.KneeFlexion};
Reaction.Type={Off};
};
AnyDrawWidgetRot KneeFlexionWidgetRight = {
AnyRefNode &node = .BodyModel.Interface.Right.KneeFlexion.KneeRot.ThighNode;
node={ AnyRefNode WidgetNode={ ARel =RotMat(pi,y); }; };
RefFrame = &.BodyModel.Interface.Right.KneeFlexion.KneeRot.ThighNode.WidgetNode;
Target = &Main.WidgetValues.Right.KneeFlexion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
//Ankle driver
#if ANKLE_FLEXION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver AnkleDriverRightFlexion={
AnyKinMeasure& ref1=.BodyModel.Interface.Right.AnklePlantarFlexion;
DriverPos ={ Main.WidgetValues.Right.AnklePlantarFlexion[0] };
DriverVel=pi/180*{.JntVel.Right.AnklePlantarFlexion};
Reaction.Type={Off};
};
//
AnyDrawWidgetRot AnklePlantarFlexionWidgetRight = {
RefFrame = &.BodyModel.Interface.Right.AnklePlantarFlexion.Shank;
Target = &Main.WidgetValues.Right.AnklePlantarFlexion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
#if ANKLE_EVERSION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver AnkleDriverRightEversion={
AnyKinMeasure& ref2=.BodyModel.Interface.Right.AnkleEversion;
DriverPos = {Main.WidgetValues.Right.SubTalarEversion[0]};
DriverVel=pi/180*{.JntVel.Right.SubTalarEversion};
Reaction.Type={Off};
};
#else
#endif
#if ANKLE_SUBTALAR_EVERSION_RIGHT_DRIVER == 1
AnyKinEqSimpleDriver AnkleDriverRightEversion={
AnyKinMeasure& ref2=.BodyModel.Interface.Right.SubTalarEversion;
DriverPos = {Main.WidgetValues.Right.SubTalarEversion[0]};
DriverVel=pi/180*{.JntVel.Right.SubTalarEversion};
Reaction.Type={Off};
};
AnyDrawWidgetRot SubTalarEversionWidgetRight = {
RefFrame = &.BodyModel.Interface.Right.SubTalarEversion.Ankle.TalusNode;
Target = &Main.WidgetValues.Right.SubTalarEversion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
#endif
// ************************************
// Drivers for the Left leg
// ************************************
#if LEFT_LEG + LEFT_LEG_TD == 0
#else
//Hip driver
#if HIP_FLEXION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver HipDriverLeftFlexion={
AnyKinMeasure& ref1 =.BodyModel.Interface.Left.HipFlexion;
DriverPos={Main.WidgetValues.Left.HipFlexion [0]};
DriverVel = pi/180*{.JntVel.Left.HipFlexion};
Reaction.Type={Off};
};
AnyDrawWidgetRot HipWidgetLeftFlexion = {
RefFrame = &.BodyModel.Interface.Left.HipFlexion.HipMeasure.PelvisNode;
Target = &.Main.WidgetValues.Left.HipFlexion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
Axis2 = y;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
#if HIP_EXTERNAL_ROTATION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver HipDriverLeftExternalRotation={
AnyKinMeasure& ref2 =.BodyModel.Interface.Left.HipExternalRotation;
DriverPos={Main.WidgetValues.Left.HipExternalRotation[1]};
DriverVel = pi/180*{.JntVel.Left.HipExternalRotation};
Reaction.Type={Off};
};
AnyDrawWidgetRot HipWidgetLeftExternalRotation = {
RefFrame = &.BodyModel.Interface.Left.HipFlexion.HipMeasure.PelvisNode;
Target = &.Main.WidgetValues.Left.HipExternalRotation;
AxisOnOff = {Off,On,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
Axis2 = y;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
#if HIP_ABDUCTION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver HipDriverLeftAbduction={
AnyKinMeasure& ref3 =.BodyModel.Interface.Left.HipAbduction;
DriverPos= {Main.WidgetValues.Left.HipAbduction[2]};
DriverVel = pi/180*{.JntVel.Left.HipAbduction};
Reaction.Type={Off};
};
AnyDrawWidgetRot HipWidgetLeftAbduction = {
RefFrame = &.BodyModel.Interface.Left.HipFlexion.HipMeasure.PelvisNode;
Target = &Main.WidgetValues.Left.HipAbduction;
AxisOnOff = {Off,Off,On};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
Axis2 = y;
Axis3 = x;
MaxDrawSize=0.1;
};
#else
#endif
//Knee driver
#if KNEE_FLEXION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver KneeDriverLeft={
AnyKinMeasureOrg &Knee = .BodyModel.Interface.Left.KneeFlexion;
DriverPos={Main.WidgetValues.Left.KneeFlexion[0]};
DriverVel = pi/180*{.JntVel.Left.KneeFlexion};
Reaction.Type={Off};
};
AnyDrawWidgetRot KneeFlexionWidgetLeft = {
AnyRefNode &node = .BodyModel.Interface.Left.KneeFlexion.KneeRot.ThighNode;
node={ AnyRefNode WidgetNode={ ARel =RotMat(pi,y); }; };
RefFrame = &.BodyModel.Interface.Left.KneeFlexion.KneeRot.ThighNode.WidgetNode;
Target = &Main.WidgetValues.Left.KneeFlexion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
//Ankle driver
#if ANKLE_FLEXION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver AnkleDriverLeftFlexion={
AnyKinMeasure& ref1=.BodyModel.Interface.Left.AnklePlantarFlexion;
DriverPos ={ Main.WidgetValues.Left.AnklePlantarFlexion[0] };
DriverVel=pi/180*{.JntVel.Left.AnklePlantarFlexion};
Reaction.Type={Off};
};
//
AnyDrawWidgetRot AnklePlantarFlexionWidgetLeft = {
RefFrame = &.BodyModel.Interface.Left.AnklePlantarFlexion.Shank;
Target = &Main.WidgetValues.Left.AnklePlantarFlexion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
#if ANKLE_EVERSION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver AnkleDriverLeftEversion={
AnyKinMeasure& ref2=.BodyModel.Interface.Left.AnkleEversion;
DriverPos = {Main.WidgetValues.Left.SubTalarEversion[0]};
DriverVel=pi/180*{.JntVel.Left.SubTalarEversion};
Reaction.Type={Off};
};
#else
#endif
#if ANKLE_SUBTALAR_EVERSION_LEFT_DRIVER == 1
AnyKinEqSimpleDriver AnkleDriverLeftEversion={
AnyKinMeasure& ref2=.BodyModel.Interface.Left.SubTalarEversion;
DriverPos = {Main.WidgetValues.Left.SubTalarEversion[0]};
DriverVel=pi/180*{.JntVel.Left.SubTalarEversion};
Reaction.Type={Off};
};
AnyDrawWidgetRot SubTalarEversionWidgetLeft = {
RefFrame = &.BodyModel.Interface.Left.SubTalarEversion.Ankle.TalusNode;
Target = &Main.WidgetValues.Left.SubTalarEversion;
AxisOnOff = {On,Off,Off};
UpdateEvent = OnMouseRelease;
Operation = &.Study;
Axis1 = z;
MaxDrawSize=0.1;
};
#else
#endif
#endif
#else
#endif