[bfdf16]: / Body / AAUHuman / BodyModels / Include / MannequinDriversWidget.any

Download this file

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