--- a +++ b/Tools/ModelUtilities/KinematicLimits/RangeOfMotionLimits_template.any @@ -0,0 +1,668 @@ +#ifndef _RANGE_OF_MOTION_LIMITS_TEMPLATE_ANY_ +#define _RANGE_OF_MOTION_LIMITS_TEMPLATE_ANY_ +/* +--- +group: Utilities +topic: Kinematic limits +descr: | + Create joint limits as soft kinematic constraints + given some range of motion. +--- + +To use these drivers import the file: +#include "<AMMR_TOOLS>/ModelUtilities/kinematicLimits/RangeOfMotionLimits_template.any" + +See below for more information on how to use the class. + +*/ + +#include "KinLimit_template.any" + + + +// The class creates a set of limits (soft kinematic constraints) +// for the human model given some range of motion. +// +// The class template should be used after the human model is included in the model. +// This ensures that all the `BM_*` statements are defined. +// +// :::{note} Make sure the Limit drivers are included in your study. +// Otherwise they will have no effect. +// ::: +// +// :::{rubric} Example +// ::: +// +// ```{code-block} AnyScriptDoc +// +// RangeOfMotionLimits RoMLimits( +// ARM_RIGHT = BM_ARM_RIGHT, +// ARM_LEFT = BM_ARM_LEFT, +// LEG_RIGHT = BM_LEG_RIGHT, +// LEG_LEFT = BM_LEG_LEFT +// ) = { +// // Example of changing af few of the limits: +// Limits.Trunk.PelvisThoraxExtension = {-90, 90}; +// Limits.Right.ElbowPronation = {-90, 90}; +// }; +// +// ``` +// +// If some joint should not have a range of motion limits, the class accepts +// arguments for disabling individual joint limits: +// +// ```{code-block} AnyScriptDoc +// RangeOfMotionLimits RoMLimits( +// PELVIS_THORAX_LATERAL_BENDING = "Off" +// ... +// ``` +// +#class_template RangeOfMotionLimits ( + ARM_RIGHT, + ARM_LEFT, + LEG_RIGHT, + LEG_LEFT, + PELVIS_THORAX_EXTENSION = "On", + PELVIS_THORAX_LATERAL_BENDING = "On", + PELVIS_THORAX_ROTATION = "On", + SKULL_THORAX_FLEXION = "On", + SKULL_THORAX_LATERALBENDING = "On", + SKULL_THORAX_ROTATION = "On", + STERNO_CLAVICULAR_PROTRACTION = "On", + STERNO_CLAVICULAR_ELEVATION = "On", + STERNO_CLAVICULAR_AXIALROTATION = "Off", + GLENOHUMERAL_FLEXION = "On", + GLENOHUMERAL_EXTERNAL_ROTATION = "On", + GLENOHUMERAL_ABDUCTION = "On", + ELBOW_FLEXION = "On", + ELBOW_PRONATION = "On", + WRIST_FLEXION = "On", + WRIST_ABDUCTION = "On", + HIP_ABDUCTION = "On", + HIP_FLEXION = "On", + HIP_EXTERNAL_ROTATION = "On", + KNEE_FLEXION = "On", + ANKLE_PLANTAR_FLEXION = "On", + SUBTALAR_EVERSION = "On", + HUMAN_MODEL = Main.HumanModel, +) +{ + + // Arguments + //-------------- + //RangeOfMotionLimits#ARM_RIGHT + // Indicate if the right arm should be included in the limits. + // Set this to BM_ARM_RIGHT to make it follow the body config + //RangeOfMotionLimits#ARM_LEFT + // Indicate if the left arm should be included in the limits. + // Set this to BM_ARM_LEFT to make it follow the body config + //RangeOfMotionLimits#LEG_RIGHT + // Indicate if the right leg should be included in the limits. + // Set this to BM_LEG_RIGHT to make it follow the body config + //RangeOfMotionLimits#LEG_LEFT + // Indicate if the left leg should be included in the limits. + // Set this to BM_LEG_LEFT to make it follow the body config + //RangeOfMotionLimits#PELVIS_THORAX_EXTENSION + // Enables/disables limits for the pelvis thorax extension + //RangeOfMotionLimits#PELVIS_THORAX_LATERAL_BENDING + // Enables/disables limits for the pelvis thorax lateral bending + //RangeOfMotionLimits#PELVIS_THORAX_ROTATION + // Enables/disables limits for the pelvis thorax rotation + //RangeOfMotionLimits#SKULL_THORAX_FLEXION + // Enables/disables limits for the skull thorax flexion + //RangeOfMotionLimits#SKULL_THORAX_LATERALBENDING + // Enables/disables limits for the skull thorax lateral bending + //RangeOfMotionLimits#SKULL_THORAX_ROTATION + // Enables/disables limits for the skull thorax rotation + //RangeOfMotionLimits#STERNO_CLAVICULAR_PROTRACTION + // Enables/disables limits for the sterno clavicular protraction + //RangeOfMotionLimits#STERNO_CLAVICULAR_ELEVATION + // Enables/disables limits for the sterno clavicular elevation + //RangeOfMotionLimits#STERNO_CLAVICULAR_AXIALROTATION + // Enables/disables limits for the sterno clavicular axial rotation + //RangeOfMotionLimits#GLENOHUMERAL_FLEXION + // Enables/disables limits for the glenohumeral flexion + //RangeOfMotionLimits#GLENOHUMERAL_EXTERNAL_ROTATION + // Enables/disables limits for the glenohumeral external rotation + //RangeOfMotionLimits#GLENOHUMERAL_ABDUCTION + // Enables/disables limits for the glenohumeral abduction + //RangeOfMotionLimits#ELBOW_FLEXION + // Enables/disables limits for the elbow flexion + //RangeOfMotionLimits#ELBOW_PRONATION + // Enables/disables limits for the elbow pronation + //RangeOfMotionLimits#WRIST_FLEXION + // Enables/disables limits for the wrist flexion + //RangeOfMotionLimits#WRIST_ABDUCTION + // Enables/disables limits for the wrist abduction + //RangeOfMotionLimits#HIP_ABDUCTION + // Enables/disables limits for the hip abduction + //RangeOfMotionLimits#HIP_FLEXION + // Enables/disables limits for the hip flexion + //RangeOfMotionLimits#HIP_EXTERNAL_ROTATION + // Enables/disables limits for the hip external rotation + //RangeOfMotionLimits#KNEE_FLEXION + // Enables/disables limits for the knee flexion + //RangeOfMotionLimits#ANKLE_PLANTAR_FLEXION + // Enables/disables limits for the ankle plantar flexion + //RangeOfMotionLimits#SUBTALAR_EVERSION + // Enables/disables limits for the subtalar eversion + //RangeOfMotionLimits#HUMAN_MODEL + // The human model to which the limits should be applied. + + + AnyFolder Limits = + { + AnyFolder Trunk = + { + //RangeOfMotionLimits.Limits.Trunk + /// The limits for PelvisThoraxExtension + #var AnyVector PelvisThoraxExtension = DesignVar({ -80, 30}); + //RangeOfMotionLimits.Limits.Trunk + /// The limits for PelvisThoraxLateralBending + #var AnyVector PelvisThoraxLateralBending = DesignVar({ -40, 40}); + //RangeOfMotionLimits.Limits.Trunk + /// The limits for PelvisThoraxRotation + #var AnyVector PelvisThoraxRotation = DesignVar({-90, 90}); + //RangeOfMotionLimits.Limits.Trunk + /// The limits for SkullThoraxFlexion + #var AnyVector SkullThoraxFlexion = DesignVar({-70, 70}); + //RangeOfMotionLimits.Limits.Trunk + /// The limits for SkullThoraxLateralBending + #var AnyVector SkullThoraxLateralBending = DesignVar({-60, 60}); + //RangeOfMotionLimits.Limits.Trunk + /// The limits for SkullThoraxRotation + #var AnyVector SkullThoraxRotation = DesignVar({-90, 90}); + }; + AnyFolder Right = + { + //RangeOfMotionLimits.Limits.Right + /// The limits for SternoClavicularProtraction + #var AnyVector SternoClavicularProtraction = DesignVar({-23-20, -23+20}); + //RangeOfMotionLimits.Limits.Right + /// The limits for SternoClavicularElevation + #var AnyVector SternoClavicularElevation = DesignVar({11.5-11.5, 11.5+70}); + //RangeOfMotionLimits.Limits.Right + /// The limits for SternoClavicularAxialRotation + #var AnyVector SternoClavicularAxialRotation = DesignVar({-20-5, -20+5}); + //RangeOfMotionLimits.Limits.Right + /// The limits for GlenohumeralFlexion + #var AnyVector GlenohumeralFlexion = DesignVar({-70, 180}); + //RangeOfMotionLimits.Limits.Right + /// The limits for GlenohumeralAbduction + #var AnyVector GlenohumeralAbduction = DesignVar({-5, 180}); + //RangeOfMotionLimits.Limits.Right + /// The limits for GlenohumeralExternalRotation + #var AnyVector GlenohumeralExternalRotation = DesignVar({-50, 50}); + //RangeOfMotionLimits.Limits.Right + /// The limits for ElbowFlexion + #var AnyVector ElbowFlexion = DesignVar({0, 160}); + //RangeOfMotionLimits.Limits.Right + /// The limits for ElbowPronation + #var AnyVector ElbowPronation = DesignVar({-90, 90}); + //RangeOfMotionLimits.Limits.Right + /// The limits for WristFlexion + #var AnyVector WristFlexion = DesignVar({-90, 90}); + //RangeOfMotionLimits.Limits.Right + /// The limits for WristAbduction + #var AnyVector WristAbduction = DesignVar({-30, 30}); + //RangeOfMotionLimits.Limits.Right + /// The limits for HipFlexion + #var AnyVector HipFlexion = DesignVar({-30, 100}); + //RangeOfMotionLimits.Limits.Right + /// The limits for HipAbduction + #var AnyVector HipAbduction = DesignVar({-20, 45}); + //RangeOfMotionLimits.Limits.Right + /// The limits for HipExternalRotation + #var AnyVector HipExternalRotation = DesignVar({-45, 60}); + //RangeOfMotionLimits.Limits.Right + /// The limits for KneeFlexion + #var AnyVector KneeFlexion = DesignVar({0, 160}); + //RangeOfMotionLimits.Limits.Right + /// The limits for AnklePlantarFlexion + #var AnyVector AnklePlantarFlexion = DesignVar({-80, 40}); + //RangeOfMotionLimits.Limits.Right + /// The limits for SubTalarEversion + #var AnyVector SubTalarEversion = DesignVar({-40, 40}); + }; + AnyFolder Left = + { + //RangeOfMotionLimits.Limits.Left + /// The limits for SternoClavicularProtraction + #var AnyVector SternoClavicularProtraction = DesignVar({-23-20, -23+20}); + //RangeOfMotionLimits.Limits.Left + /// The limits for SternoClavicularElevation + #var AnyVector SternoClavicularElevation = DesignVar({11.5-11.5, 11.5+70}); + //RangeOfMotionLimits.Limits.Left + /// The limits for SternoClavicularAxialRotation + #var AnyVector SternoClavicularAxialRotation = DesignVar({-20-5, -20+5}); + //RangeOfMotionLimits.Limits.Left + /// The limits for GlenohumeralFlexion + #var AnyVector GlenohumeralFlexion = DesignVar({-70, 180}); + //RangeOfMotionLimits.Limits.Left + /// The limits for GlenohumeralAbduction + #var AnyVector GlenohumeralAbduction = DesignVar({-5, 180}); + //RangeOfMotionLimits.Limits.Left + /// The limits for GlenohumeralExternalRotation + #var AnyVector GlenohumeralExternalRotation = DesignVar({-50, 50}); + //RangeOfMotionLimits.Limits.Left + /// The limits for ElbowFlexion + #var AnyVector ElbowFlexion = DesignVar({0, 160}); + //RangeOfMotionLimits.Limits.Left + /// The limits for ElbowPronation + #var AnyVector ElbowPronation = DesignVar({-90, 90}); + //RangeOfMotionLimits.Limits.Left + /// The limits for WristFlexion + #var AnyVector WristFlexion = DesignVar({-90, 90}); + //RangeOfMotionLimits.Limits.Left + /// The limits for WristAbduction + #var AnyVector WristAbduction = DesignVar({-30, 30}); + //RangeOfMotionLimits.Limits.Left + /// The limits for HipFlexion + #var AnyVector HipFlexion = DesignVar({-30, 100}); + //RangeOfMotionLimits.Limits.Left + /// The limits for HipAbduction + #var AnyVector HipAbduction = DesignVar({-20, 45}); + //RangeOfMotionLimits.Limits.Left + /// The limits for HipExternalRotation + #var AnyVector HipExternalRotation = DesignVar({-45, 60}); + //RangeOfMotionLimits.Limits.Left + /// The limits for KneeFlexion + #var AnyVector KneeFlexion = DesignVar({0, 160}); + //RangeOfMotionLimits.Limits.Left + /// The limits for AnklePlantarFlexion + #var AnyVector AnklePlantarFlexion = DesignVar({-80, 40}); + //RangeOfMotionLimits.Limits.Left + /// The limits for SubTalarEversion + #var AnyVector SubTalarEversion = DesignVar({-40, 40}); + }; + + }; + + + + AnyFolder& InterfaceRef = HUMAN_MODEL.BodyModel.Interface; + AnyFolder Trunk = + { + #if PELVIS_THORAX_EXTENSION == "On" + AnyFolder PelvisThoraxExtension = + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Trunk.PelvisThoraxExtension + ) = { LowerLimit =...Limits.Trunk.PelvisThoraxExtension[0]; HighLimit = ...Limits.Trunk.PelvisThoraxExtension[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if PELVIS_THORAX_LATERAL_BENDING == "On" + AnyFolder PelvisThoraxLateralBending= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Trunk.PelvisThoraxLateralBending + ) = { LowerLimit =...Limits.Trunk.PelvisThoraxLateralBending[0]; HighLimit = ...Limits.Trunk.PelvisThoraxLateralBending[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if PELVIS_THORAX_ROTATION == "On" + AnyFolder PelvisThoraxRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Trunk.PelvisThoraxRotation + ) = { LowerLimit =...Limits.Trunk.PelvisThoraxRotation[0]; HighLimit = ...Limits.Trunk.PelvisThoraxRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if SKULL_THORAX_FLEXION == "On" + AnyFolder SkullThoraxFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Trunk.SkullThoraxFlexion + ) = { LowerLimit =...Limits.Trunk.SkullThoraxFlexion[0]; HighLimit = ...Limits.Trunk.SkullThoraxFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if SKULL_THORAX_LATERALBENDING == "On" + AnyFolder SkullThoraxLateralBending= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Trunk.SkullThoraxLateralBending + ) = { LowerLimit =...Limits.Trunk.SkullThoraxLateralBending[0]; HighLimit = ...Limits.Trunk.SkullThoraxLateralBending[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if SKULL_THORAX_ROTATION == "On" + AnyFolder SkullThoraxRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Trunk.SkullThoraxRotation + ) = { LowerLimit =...Limits.Trunk.SkullThoraxRotation[0]; HighLimit = ...Limits.Trunk.SkullThoraxRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + }; + + + AnyFolder Right = + { + +#if ARM_RIGHT == 1 + + #if STERNO_CLAVICULAR_PROTRACTION == "On" + AnyFolder SternoClavicularProtraction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.SternoClavicularProtraction + ) = { LowerLimit =...Limits.Right.SternoClavicularProtraction[0]; HighLimit = ...Limits.Right.SternoClavicularProtraction[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if STERNO_CLAVICULAR_ELEVATION == "On" + AnyFolder SternoClavicularElevation = { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.SternoClavicularElevation + ) = { LowerLimit =...Limits.Right.SternoClavicularElevation[0]; HighLimit = ...Limits.Right.SternoClavicularElevation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if STERNO_CLAVICULAR_AXIALROTATION == "On" + AnyFolder SternoClavicularAxialRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.SternoClavicularAxialRotation + ) = { LowerLimit =...Limits.Right.SternoClavicularAxialRotation[0]; HighLimit = ...Limits.Right.SternoClavicularAxialRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if GLENOHUMERAL_FLEXION == "On" + AnyFolder GlenohumeralFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.GlenohumeralFlexion + ) = { LowerLimit =...Limits.Right.GlenohumeralFlexion[0]; HighLimit = ...Limits.Right.GlenohumeralFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if GLENOHUMERAL_ABDUCTION == "On" + AnyFolder GlenohumeralAbduction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.GlenohumeralAbduction + ) = { LowerLimit =...Limits.Right.GlenohumeralAbduction[0]; HighLimit = ...Limits.Right.GlenohumeralAbduction[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if GLENOHUMERAL_EXTERNAL_ROTATION == "On" + AnyFolder GlenohumeralExternalRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.GlenohumeralExternalRotation + ) = { LowerLimit =...Limits.Right.GlenohumeralExternalRotation[0]; HighLimit = ...Limits.Right.GlenohumeralExternalRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if ELBOW_FLEXION == "On" + AnyFolder ElbowFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.ElbowFlexion + ) = { LowerLimit =...Limits.Right.ElbowFlexion[0]; HighLimit = ...Limits.Right.ElbowFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if ELBOW_PRONATION == "On" + AnyFolder ElbowPronation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.ElbowPronation + ) = { LowerLimit =...Limits.Right.ElbowPronation[0]; HighLimit = ...Limits.Right.ElbowPronation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if WRIST_FLEXION == "On" + AnyFolder WristFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.WristFlexion + ) = { LowerLimit =...Limits.Right.WristFlexion[0]; HighLimit = ...Limits.Right.WristFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if WRIST_ABDUCTION == "On" + AnyFolder WristAbduction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.WristAbduction + ) = { LowerLimit =...Limits.Right.WristAbduction[0]; HighLimit = ...Limits.Right.WristAbduction[1]; MeasureConversion=180/pi; }; + }; + #endif + +#endif + +#if LEG_RIGHT + + #if HIP_FLEXION == "On" + AnyFolder HipFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.HipFlexion + ) = { LowerLimit =...Limits.Right.HipFlexion[0]; HighLimit = ...Limits.Right.HipFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if HIP_ABDUCTION == "On" + AnyFolder HipAbduction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.HipAbduction + ) = { LowerLimit =...Limits.Right.HipAbduction[0]; HighLimit = ...Limits.Right.HipAbduction[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if HIP_EXTERNAL_ROTATION == "On" + AnyFolder HipExternalRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.HipExternalRotation + ) = { LowerLimit =...Limits.Right.HipExternalRotation[0]; HighLimit = ...Limits.Right.HipExternalRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if KNEE_FLEXION == "On" + AnyFolder KneeFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.KneeFlexion + ) = { LowerLimit =...Limits.Right.KneeFlexion[0]; HighLimit = ...Limits.Right.KneeFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if ANKLE_PLANTAR_FLEXION == "On" + AnyFolder AnklePlantarFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.AnklePlantarFlexion + ) = { LowerLimit =...Limits.Right.AnklePlantarFlexion[0]; HighLimit = ...Limits.Right.AnklePlantarFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif +#endif + + +#if LEG_RIGHT + + #if SUBTALAR_EVERSION == "On" + AnyFolder SubTalarEversion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Right.SubTalarEversion + ) = { LowerLimit =...Limits.Right.SubTalarEversion[0]; HighLimit = ...Limits.Right.SubTalarEversion[1]; MeasureConversion=180/pi; }; + }; + #endif + +#endif + + + };//Right + + + + AnyFolder Left = + { + +#if ARM_LEFT == 1 + + #if STERNO_CLAVICULAR_PROTRACTION == "On" + AnyFolder SternoClavicularProtraction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.SternoClavicularProtraction + ) = { LowerLimit =...Limits.Left.SternoClavicularProtraction[0]; HighLimit = ...Limits.Left.SternoClavicularProtraction[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if STERNO_CLAVICULAR_ELEVATION == "On" + AnyFolder SternoClavicularElevation = { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.SternoClavicularElevation + ) = { LowerLimit =...Limits.Left.SternoClavicularElevation[0]; HighLimit = ...Limits.Left.SternoClavicularElevation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if STERNO_CLAVICULAR_AXIALROTATION == "On" + AnyFolder SternoClavicularAxialRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.SternoClavicularAxialRotation + ) = { LowerLimit =...Limits.Left.SternoClavicularAxialRotation[0]; HighLimit = ...Limits.Left.SternoClavicularAxialRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if GLENOHUMERAL_FLEXION == "On" + AnyFolder GlenohumeralFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.GlenohumeralFlexion + ) = { LowerLimit =...Limits.Left.GlenohumeralFlexion[0]; HighLimit = ...Limits.Left.GlenohumeralFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if GLENOHUMERAL_ABDUCTION == "On" + AnyFolder GlenohumeralAbduction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.GlenohumeralAbduction + ) = { LowerLimit =...Limits.Left.GlenohumeralAbduction[0]; HighLimit = ...Limits.Left.GlenohumeralAbduction[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if GLENOHUMERAL_EXTERNAL_ROTATION == "On" + AnyFolder GlenohumeralExternalRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.GlenohumeralExternalRotation + ) = { LowerLimit =...Limits.Left.GlenohumeralExternalRotation[0]; HighLimit = ...Limits.Left.GlenohumeralExternalRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if ELBOW_FLEXION == "On" + AnyFolder ElbowFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.ElbowFlexion + ) = { LowerLimit =...Limits.Left.ElbowFlexion[0]; HighLimit = ...Limits.Left.ElbowFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if ELBOW_PRONATION == "On" + AnyFolder ElbowPronation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.ElbowPronation + ) = { LowerLimit =...Limits.Left.ElbowPronation[0]; HighLimit = ...Limits.Left.ElbowPronation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if WRIST_FLEXION == "On" + AnyFolder WristFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.WristFlexion + ) = { LowerLimit =...Limits.Left.WristFlexion[0]; HighLimit = ...Limits.Left.WristFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if WRIST_ABDUCTION == "On" + AnyFolder WristAbduction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.WristAbduction + ) = { LowerLimit =...Limits.Left.WristAbduction[0]; HighLimit = ...Limits.Left.WristAbduction[1]; MeasureConversion=180/pi; }; + }; + #endif + +#endif + +#if LEG_LEFT + + #if HIP_FLEXION == "On" + AnyFolder HipFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.HipFlexion + ) = { LowerLimit =...Limits.Left.HipFlexion[0]; HighLimit = ...Limits.Left.HipFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if HIP_ABDUCTION == "On" + AnyFolder HipAbduction= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.HipAbduction + ) = { LowerLimit =...Limits.Left.HipAbduction[0]; HighLimit = ...Limits.Left.HipAbduction[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if HIP_EXTERNAL_ROTATION == "On" + AnyFolder HipExternalRotation= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.HipExternalRotation + ) = { LowerLimit =...Limits.Left.HipExternalRotation[0]; HighLimit = ...Limits.Left.HipExternalRotation[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if KNEE_FLEXION == "On" + AnyFolder KneeFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.KneeFlexion + ) = { LowerLimit =...Limits.Left.KneeFlexion[0]; HighLimit = ...Limits.Left.KneeFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif + + #if ANKLE_PLANTAR_FLEXION == "On" + AnyFolder AnklePlantarFlexion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.AnklePlantarFlexion + ) = { LowerLimit =...Limits.Left.AnklePlantarFlexion[0]; HighLimit = ...Limits.Left.AnklePlantarFlexion[1]; MeasureConversion=180/pi; }; + }; + #endif +#endif + + +#if LEG_LEFT + + #if SUBTALAR_EVERSION == "On" + AnyFolder SubTalarEversion= + { + KinLimitsDriver Driver( + KinMeasure= ...InterfaceRef.Left.SubTalarEversion + ) = { LowerLimit =...Limits.Left.SubTalarEversion[0]; HighLimit = ...Limits.Left.SubTalarEversion[1]; MeasureConversion=180/pi; }; + }; + #endif + +#endif + + + };//Left + }; + +#endif