[38ba34]: / Tools / ModelUtilities / KinematicLimits / RangeOfMotionLimits_template.any

Download this file

669 lines (594 with data), 27.4 kB

#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