[38ba34]: / Body / AAUHuman / Scaling / ScalingCustom.any

Download this file

747 lines (665 with data), 31.4 kB

/*  AUTHOR: Pavel Galibarov, peg@anybodytech.com


*/

AnyFolder Scaling = {
  
  
  AnyMessage DeprecatedCustomScaling = 
  {
     TriggerConst = On;
     Type = MSG_Warning;
     Message = strformat("\n---------------------------------------------------------------------------------------------------------------\n"
     +"        Custom scaling using the '#define CUSTOM_SCALING_xxxx' statements are deprecated, - but still works.    \n"
     +"\n"
     +"        You can update your code by removing all `#define CUSTOM_SCA...` statements and instead override the         \n"
     +"        the scaling functions directly. E.g.: \n"
     +"\n"
     +"        Main.HumanModel.Scaling.GeometricalScaling = { \n"
     +"           Right.Thigh.ScalingFunction.Custom= &...Some_custom_scaling_function;\n"
     +"        };\n"
     +"\n"
     +"        See the AnyBody Tutorials on custom scaling on how to update your code. \n"
     +"---------------------------------------------------------------------------------------------------------------");
  };    
  
  AnyFolder& Scaling = .ScalingLaw;
  
  AnyFolder &StandardParameters = Scaling.StandardParameters;
  AnyFolder &MassScaling = Scaling.MassScaling;
  AnyFolder &StrengthScaling = Scaling.StrengthScaling;
  AnyFolder &FiberLengthScaling = Scaling.FiberLengthScaling;
   
  
  AnyFolder GeometricalScaling = {
    
    AnyFolder Right = {
      
      AnyFolder Foot  = {
        #ifndef CUSTOM_SCALING_Right_Foot
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Foot.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Right.Leg.Seg.Foot.Scale.T0;
        AnyMessage scaling_message_Right_Foot = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Right.Foot' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif
      };
      
      AnyFolder Talus = {
        #ifndef CUSTOM_SCALING_Right_Talus         
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Talus.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Right.Leg.Seg.Talus.Scale.T0;
        AnyMessage scaling_message_Right_Talus = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Right.Talus' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif
      };
      
      AnyFolder Patella = {
        #ifndef CUSTOM_SCALING_Right_Patella
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Patella.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Right.Leg.Seg.Patella.Scale.T0;
        AnyMessage scaling_message_Right_Patella = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Right.Patella' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif    
      };
      
      AnyFolder Shank = {
        #ifndef CUSTOM_SCALING_Right_Shank
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Shank.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Right.Leg.Seg.Shank.Scale.T0;
        AnyMessage scaling_message_Right_Shank = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Right.Shank' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif        
      };    
      
      AnyFolder Thigh = {
        #ifndef CUSTOM_SCALING_Right_Thigh
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Thigh.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Right.Leg.Seg.Thigh.Scale.T0;
        AnyMessage scaling_message_Right_Thigh = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Right.Thigh' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif        
      };
      
      AnyFolder Clavicula = {
        #ifndef CUSTOM_SCALING_Right_Clavicula
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Clavicula.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Right_Clavicula = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Clavicula' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Scapula = {
        #ifndef CUSTOM_SCALING_Right_Scapula
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Scapula.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Right_Scapula = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Scapula' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Humerus = {
        #ifndef CUSTOM_SCALING_Right_Humerus
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Humerus.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Right_Humerus = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Humerus' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Ulna = {
        #ifndef CUSTOM_SCALING_Right_Ulna
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Ulna.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Right_Ulna = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Ulna' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Radius = {
        #ifndef CUSTOM_SCALING_Right_Radius
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Radius.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Right_Radius = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Radius' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Hand = {
        
        // required by detailed hand, to be optimized
        // Todo: Restructure this part so the hand model directly refer to 
        //      Main.HumanModel.Anthropometrics.SegmentDimensions.Left/Right
        #if BM_SCALING == _SCALING_XYZ_
        AnyVar LengthScale  = ...Scaling.GeometricalScaling.Right.Hand.LengthScale;
        AnyVar WidthScale = ...Scaling.GeometricalScaling.Right.Hand.WidthScale;
        #else
        AnyVar HandLength  = ...Scaling.GeometricalScaling.Right.Hand.HandLength;
        AnyVar HandBreadth = ...Scaling.GeometricalScaling.Right.Hand.HandBreadth;
        #endif
        
        #ifndef CUSTOM_SCALING_Right_Hand
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Right.Hand.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Right_Hand = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Hand' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
    };//Right
    
    AnyFolder Left = {
      AnyFolder Foot  = {
        #ifndef CUSTOM_SCALING_Left_Foot
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Foot.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Left.Leg.Seg.Foot.Scale.T0;
        AnyMessage scaling_message_Left_Foot = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Left.Foot' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      AnyFolder Talus  = {
        #ifndef CUSTOM_SCALING_Left_Talus
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Talus.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Left.Leg.Seg.Talus.Scale.T0;
        AnyMessage scaling_message_Left_Talus = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Left.Talus' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      AnyFolder Patella = {
        #ifndef CUSTOM_SCALING_Left_Patella
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Patella.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Left.Leg.Seg.Patella.Scale.T0;
        AnyMessage scaling_message_Left_Patella = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for Left.Patella' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif    
      };
      
      AnyFolder Shank = {
        #ifndef CUSTOM_SCALING_Left_Shank
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Shank.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Left.Leg.Seg.Shank.Scale.T0;
        AnyMessage scaling_message_Left_Shank = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Left.Shank' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };        
      AnyFolder Thigh = {
        #ifndef CUSTOM_SCALING_Left_Thigh
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Thigh.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3D &TSeg2ScaleFrame = ....BodyModel.Left.Leg.Seg.Thigh.Scale.T0;
        AnyMessage scaling_message_Left_Thigh = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Left.Thigh' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif       
      };
      
      
      AnyFolder Clavicula = {
        #ifndef CUSTOM_SCALING_Left_Clavicula
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Clavicula.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Left_Clavicula = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Clavicula' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Scapula = {
        #ifndef CUSTOM_SCALING_Left_Scapula
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Scapula.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Left_Scapula = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Scapula' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Humerus = {
        #ifndef CUSTOM_SCALING_Left_Humerus
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Humerus.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Left_Humerus = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Humerus' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Ulna = {
        #ifndef CUSTOM_SCALING_Left_Ulna
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Ulna.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Left_Ulna = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Ulna' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Radius = {
        #ifndef CUSTOM_SCALING_Left_Radius
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Radius.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Left_Radius = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Radius' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
      AnyFolder Hand = {
        
        // required by detailed hand, to be optimized
        // Todo: Restructure this part so the hand model directly refer to 
        //      Main.HumanModel.Anthropometrics.SegmentDimensions.Left/Right
        #if BM_SCALING == _SCALING_XYZ_
        AnyVar LengthScale  = ...Scaling.GeometricalScaling.Left.Hand.LengthScale;
        AnyVar WidthScale = ...Scaling.GeometricalScaling.Left.Hand.WidthScale;
        #else
        AnyVar HandLength  = ...Scaling.GeometricalScaling.Left.Hand.HandLength;
        AnyVar HandBreadth = ...Scaling.GeometricalScaling.Left.Hand.HandBreadth;
        #endif
        
        #ifndef CUSTOM_SCALING_Left_Hand        
        AnyFunTransform3D &ScaleFunction = ...Scaling.GeometricalScaling.Left.Hand.ScaleFunction;
        #else
        /// The rigid body transform from segmental to scaling reference frame
        AnyFunTransform3DIdentity TSeg2ScaleFrame = {};
        AnyMessage scaling_message_Left_Hand = 
        {
          TriggerPreProcess = On;
          Type = MSG_Warning;
          Message = "Custom scaling for 'Hand' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
        };           
        #endif           
      };
      
    };//Left
    //    #endif
    
    //#endif
    
    
    
    // Common law for the upper body
    // *****************************
    
    AnyFolder PelvisSeg = {
      #ifndef CUSTOM_SCALING_PelvisSeg
      AnyFunTransform3D &ScaleFunction = ..Scaling.GeometricalScaling.Pelvis.ScaleFunction;
      #else
      #if BM_LEG_TRUNK_INTERFACE == _MORPH_LEG_TO_TRUNK_
      AnyFunTransform3DIdentity TSeg2ScaleFrame = {
        PreTransforms = {
          &....BodyModel.Trunk.SegmentsLumbar.PelvisSeg.InterfaceMorphingDef.IM_Leg_To_Trunk_Unscaled,            
          &....BodyModel.Trunk.SegmentsLumbar.PelvisSeg.AnatomicalFrame.Scale_Leg_Pelvis.ScaleAfterInterfaceMorphingDef.Scale.T0
        };
      };
      
      AnyMessage scaling_message_PelvisSeg_InterfaceMorphing = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Pelvis morphing: the source geometry corresponds to the TLEM1.2, \nto "+
        "switch back to TLEM2.2 please use another interface morphing option (_MORPH_NONE_ or _MORPH_TRUNK_TO_LEG_)";
      };           
      #else
      //options: BM_LEG_TRUNK_INTERFACE == _MORPH_NONE_ && BM_LEG_TRUNK_INTERFACE == _MORPH_TRUNK_TO_LEG_
      AnyFunTransform3DIdentity TSeg2ScaleFrame = {
        PreTransforms = {
          &....BodyModel.Trunk.SegmentsLumbar.PelvisSeg.InterfaceMorphingDef.IM_Leg_To_Trunk_Unscaled,            
          &....BodyModel.Trunk.SegmentsLumbar.PelvisSeg.AnatomicalFrame.Scale_Leg_Pelvis.ScaleAfterInterfaceMorphingDef.Scale.T0
        };
      };
      #endif
      
      AnyMessage scaling_message_PelvisSeg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'PelvisSeg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder Thorax = {
      #ifndef CUSTOM_SCALING_Thorax
      AnyFunTransform3D &ScaleFunction = ..Scaling.GeometricalScaling.Thorax.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_Trunk = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'Thorax' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder Head = {
      #ifndef CUSTOM_SCALING_Head
      AnyFunTransform3D &ScaleFunction = ..Scaling.GeometricalScaling.Head.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_Head = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'Head' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    
    AnyFolder SkullSeg = {
      #ifndef CUSTOM_SCALING_SkullSeg
      AnyFunTransform3D &ScaleFunction = .Head.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_SkullSeg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'SkullSeg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif       
    };
    AnyFolder ThoraxSeg = {
      #ifndef CUSTOM_SCALING_ThoraxSeg
      AnyFunTransform3D &ScaleFunction = .Thorax.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_ThoraxSeg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'ThoraxSeg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif       
    };
    
    AnyFolder C1Seg = {
      #ifndef CUSTOM_SCALING_C1Seg
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_C1Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C1Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder C2Seg = {
      #ifndef CUSTOM_SCALING_C2Seg
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_C2Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C2Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder C3Seg = {
      #ifndef CUSTOM_SCALING_C3Seg
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_C3Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C3Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder C4Seg = {
      #ifndef CUSTOM_SCALING_C4Seg
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_C4Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C4Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder C5Seg = {
      #ifndef CUSTOM_SCALING_C5Seg
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_C5Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C5Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif      
    };
    AnyFolder C6Seg = {
      #ifndef CUSTOM_SCALING_C6Seg    
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      
      AnyMessage scaling_message_C6Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C6Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif       
    };
    AnyFolder C7Seg = {
      #ifndef CUSTOM_SCALING_C7Seg    
      AnyFunTransform3D &ScaleFunction = .Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_C7Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'C7Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    AnyFolder Cervical = {
      #ifndef CUSTOM_SCALING_Cervical
      AnyFunTransform3D &ScaleFunction = ..Scaling.GeometricalScaling.Cervical.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_Cervical = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'Cervical' group is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder L1Seg = {
      #ifndef CUSTOM_SCALING_L1Seg
      AnyFunTransform3D &ScaleFunction = .Lumbar.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_L1Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'L1Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder L2Seg = {
      #ifndef CUSTOM_SCALING_L2Seg
      AnyFunTransform3D &ScaleFunction = .Lumbar.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_L2Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'L2Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder L3Seg = {
      #ifndef CUSTOM_SCALING_L3Seg
      AnyFunTransform3D &ScaleFunction = .Lumbar.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_L3Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'L3Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    AnyFolder L4Seg = {
      #ifndef CUSTOM_SCALING_L4Seg
      AnyFunTransform3D &ScaleFunction = .Lumbar.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_L4Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'L4Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    AnyFolder L5Seg = {
      #ifndef CUSTOM_SCALING_L5Seg
      AnyFunTransform3D &ScaleFunction = .Lumbar.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_L5Seg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'L5Seg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    AnyFolder SacrumSeg = {
      #ifndef CUSTOM_SCALING_SacrumSeg    
      AnyFunTransform3D &ScaleFunction = .PelvisSeg.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_SacrumSeg = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'SacrumSeg' segment is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
    AnyFolder Lumbar = {
      #ifndef CUSTOM_SCALING_Lumbar
      AnyFunTransform3D &ScaleFunction = ..Scaling.GeometricalScaling.Lumbar.ScaleFunction;
      #else
      /// The rigid body transform from segmental to scaling reference frame
      AnyFunTransform3DIdentity& TSeg2ScaleFrame = .PelvisSeg.TSeg2ScaleFrame;
      AnyMessage scaling_message_Lumbar = 
      {
        TriggerPreProcess = On;
        Type = MSG_Warning;
        Message = "Custom scaling for 'Lumbar' group is used! Please specify a scaling law should an 'Unresolved object' error occur";
      };           
      #endif           
    };
    
  };
  
};