[bfdf16]: / Body / AAUHuman / Trunk / SegmentsThorax.any

Download this file

210 lines (169 with data), 8.5 kB

/**
Definitions of Segments in the Thorax Part of the Spine.

Abbrevitations:
ALL = Anterior Longitudinal Ligament
PLL = Posterior Longitudinal Ligament
LS = Ligamentum Supraspinale
LI = Ligamentum Interspinalia

MF = Multifidi
ILpl = Iliocostalis Lumborum pars lumborum (part of Erector Spinae)
LTpl = Longissimus Thoracis pars lumborum (part of Erector Spinae)
ILpt = Iliocostalis Lumborum pars thoracis (part of Erector Spinae)
LTpt = Longissimus Thoracis pars thoracis (part of Erector Spinae)
PM = Psoas Major
QL = Quadratus Lumborum
RA = Rectus Abdominis
OE = Obliquus Externus
OI = Obliquus Internus

C = Costae
CI = Crista Iliaca
CP = Crista Pubica
SIPS = Spina iliaca posterior superior
SIPI = Spina iliaca Posterior inferior
T = Thoracal hvirvel
L = Lumbal hvirvel
S = Sacral segment
*/
AnyFolder SegmentsThorax = { 
  

  AnySeg ThoraxSeg = {

    AnyFolder &StdPar=..ModelParameters;
    
    r0=..SegmentsLumbar.L1Seg.T12L1JntNode.sRel*..SegmentsLumbar.L1Seg.Axes0'+..SegmentsLumbar.L1Seg.r0-T12L1JntNode.sRel*Axes0';
    
    // This file includes the trunk specifc scaling function
    // and anatomical reference system
    AnyFunTransform3D &GeomScale = ..Scaling.GeometricalScaling.ThoraxSeg.ScaleFunction;
    #include "TrunkScalingAndAnatomicalFrame.any"
    AnyVar MassS = ..Scaling.MassScaling.Thorax.MassScale;
        
    AnyVar MassStandard = ..StandardParameters.Trunk.Mass;
    Mass = MassS*MassStandard;
    
    AnyVar UBHeight =  StdPar.Thorax.UBHeight; //0.50; //Upperbody height
    AnyVar Radius = (Mass/(pi*UBHeight*1000))^0.5;
    AnyVar Ixx = 0.25*Mass*Radius^2 + 1/12*Mass*UBHeight^2;
    AnyVar Izz = Ixx;
    AnyVar Iyy = 0.5*Mass*Radius^2;
    
    AnyMat33 JMatRot = AnatomicalFrameTrunk.ARel*{{Ixx,0,0},{0,Iyy,0},{0,0,Izz}}*AnatomicalFrameTrunk.ARel';
    Jii = {JMatRot[0][0], JMatRot[1][1], JMatRot[2][2]};
    Jij = {JMatRot[1][0], JMatRot[2][1], JMatRot[2][0]};

    
    sCoM = Scale(StdPar.Thorax.sCoM_pos);
    JaboutCoMOnOff = On;
        
    AnyRefNode MoCapMarkerFrameAMMR24 = {}; ///< For backwards Compatibility with AMMR 2.4 MoCap Marker protocols    
    //Incisura jungularis right and left
    //the nodes are used for attachment of ShoulderArm block
    AnyRefNode ij = {
      AnyFloat Mirror = eye(3);
      //This is the standard value for the ij it must be used in order to scale the model
      //since nodes are inserted into this node.
      //If the position of ij are to be adjusted it should be done by changing sRelStd 
      AnyVec3 sRelStd = .StdPar.Thorax.ij_pos;  
      sRel = .Scale(sRelStd);
      // The rotation is adjusted to give same values as before the pelvic tilt adjust in AMMR 3.0.
      ARel = .AnatomicalFrameTrunk.ARel * RotMat(6.491948543235*pi/180,z) * {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}};
    };
    
    AnyRefNode iji = {
      AnyFloat Mirror = {{-1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
      
      //This is the standard value for the ij it must be used in order to scale the model
      //since nodes are inserted into this node.
      //If the position of ij are to be adjusted it should be done by changing sRelS 
      AnyVec3 sRelStd = .StdPar.Thorax.iji_pos;    
      sRel = .Scale(sRelStd);      
      // The rotation is adjusted to give same values as before the pelvic tilt adjust in AMMR 3.0.
      ARel = .AnatomicalFrameTrunk.ARel*RotMat(6.491948543235*pi/180,z) * {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}};
    };
        
    AnyRefNode T1C7JntNode = {sRel = .Scale(.StdPar.Thorax.T1C7JntNode_pos);};    
    AnyRefNode T1T2JntNode = {sRel = .Scale(.StdPar.Thorax.T1T2JntNode_pos);};    
    AnyRefNode T2T3JntNode = {sRel = .Scale(.StdPar.Thorax.T2T3JntNode_pos);};    
    AnyRefNode T3T4JntNode = {sRel = .Scale(.StdPar.Thorax.T3T4JntNode_pos);};    
    AnyRefNode T4T5JntNode = {sRel = .Scale(.StdPar.Thorax.T4T5JntNode_pos);};    
    AnyRefNode T5T6JntNode = {sRel = .Scale(.StdPar.Thorax.T5T6JntNode_pos);};    
    AnyRefNode T6T7JntNode = {sRel = .Scale(.StdPar.Thorax.T6T7JntNode_pos);};    
    AnyRefNode T7T8JntNode = {sRel = .Scale(.StdPar.Thorax.T7T8JntNode_pos);};    
    AnyRefNode T8T9JntNode = {sRel = .Scale(.StdPar.Thorax.T8T9JntNode_pos);};    
    AnyRefNode T9T10JntNode = {sRel = .Scale(.StdPar.Thorax.T9T10JntNode_pos);};    
    AnyRefNode T10T11JntNode = {sRel = .Scale(.StdPar.Thorax.T10T11JntNode_pos);};    
    AnyRefNode T11T12JntNode = {sRel = .Scale(.StdPar.Thorax.T11T12JntNode_pos);};    
    AnyRefNode T12L1JntNode = {sRel = .Scale(.StdPar.Thorax.T12L1JntNode_pos);};

    AnyRefNode CTCVJntNode = {}; ///<placeholder for the rigid thorax
    AnyRefNode CS          = {}; ///<placeholder for the rigid thorax
    AnyRefNode RibNodes = {
      AnyRefNode CTCVJntNodeR = {};    
      AnyRefNode CTCVJntNodeL = {};    
    };
    
    AnyRefNode ForceVectorNode = {sRel = .Scale(.StdPar.Thorax.ForceVectorNode_pos);};
    

    AnyRefNode T1C5Jnt = {sRel = .Scale(.StdPar.Thorax.T1C5Jnt_pos);};     
    
    AnyDrawSurf DrwSurf = {
      FileName = ...STL.FilenameThoraxSegWithoutNeck; 
      RGB = ...ColorRef.Segments;
      ScaleXYZ={1.0,1.0,1.0};
      Opacity = Main.DrawSettings.BonesOpacity.Thorax;
      AnyFunTransform3D &Scale =.Scale;
    };

    AnyRefNode Right ={
      AnyInt Sign = 1;
      #include "ThoraxScapulaContactRibPoints.any"
    };
    AnyRefNode Left ={
      AnyInt Sign = -1;
      #include "ThoraxScapulaContactRibPoints.any"
    };    

  }; // End of ThoraxSeg
  
  AnyFolder &T12Seg = ThoraxSeg;
  AnyFolder &T11Seg = ThoraxSeg;
  AnyFolder &T10Seg = ThoraxSeg;
  AnyFolder &T9Seg = ThoraxSeg;
  AnyFolder &T8Seg = ThoraxSeg;
  AnyFolder &T7Seg = ThoraxSeg;
  AnyFolder &T6Seg = ThoraxSeg;
  AnyFolder &T5Seg = ThoraxSeg;
  AnyFolder &T4Seg = ThoraxSeg;
  AnyFolder &T3Seg = ThoraxSeg;
  AnyFolder &T2Seg = ThoraxSeg;
  AnyFolder &T1Seg = ThoraxSeg;
  
  T1Seg = {
    T1C7JntNode = {
      // Rotated node with x axis parallel to the superior endplate surface
      AnyRefNode RotNode = {
        ARel = RotMat(0.5*(..T1SuperiorEndplateAnteriorNode.sRel + ..T1SuperiorEndplatePosteriorNode.sRel),
                      ..T1SuperiorEndplateAnteriorNode.sRel,
                      0.5*(..T1SuperiorEndplateAnteriorNode.sRel + ..T1SuperiorEndplatePosteriorNode.sRel) + (..T1SuperiorEndplateNodeL.sRel - ..T1SuperiorEndplateNodeR.sRel))*RotMat(pi/2,x);
      };
    };
    
    // Nodes at the anterior and posterior points on the superior endplate
    AnyRefNode T1SuperiorEndplateAnteriorNode = {sRel = .Scale(.StdPar.T1.SuperiorEndplateAnteriorNode_pos);};
    AnyRefNode T1SuperiorEndplatePosteriorNode = {sRel = .Scale(.StdPar.T1.SuperiorEndplatePosteriorNode_pos);};
    
    // Nodes at the right and left points on the superior endplate
    AnyRefNode T1SuperiorEndplateNodeR = {sRel = .Scale(.StdPar.T1.Right.SuperiorEndplateNode_pos);};
    AnyRefNode T1SuperiorEndplateNodeL = {sRel = .Scale(.StdPar.T1.Left.SuperiorEndplateNode_pos);};
  };


  #if BM_TRUNK_THORACIC_FUTURE == OFF
    AnyFolder &SkullSeg = .SegmentsCervicalSpine.SkullSeg;
  #endif
  
};

SegmentsRibCage = {

 RibsRight = {
 
  AnyFolder &R12Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R11Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R10Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R9Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R8Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R7Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R6Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R5Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R4Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R3Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R2Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R1Seg = ..SegmentsThorax.ThoraxSeg;
 
 };

 RibsLeft = {
 
  AnyFolder &R12Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R11Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R10Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R9Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R8Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R7Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R6Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R5Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R4Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R3Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R2Seg = ..SegmentsThorax.ThoraxSeg;
  AnyFolder &R1Seg = ..SegmentsThorax.ThoraxSeg;
 
 };


};