[38ba34]: / Body / AAUHuman / Arm / ScapulaMuscleGeometry.any

Download this file

373 lines (279 with data), 17.1 kB

// Nodes for muscle attachments bml etc. data from VU sub2
AnyFolder &Scapula =.Seg.Scapula;

Scapula = {
     
  
  // Definition of cylinder used for wrapping of the trapezius muscles 
  // the cylinder starts in ai and points towards ts.
  AnyRefNode margo_medialis={ 
    
    AnyVec3 P2= .Scale(.Data.margo_medialis_P2_pos*.Mirror);
    AnyVec3 P3= .Scale(.Data.margo_medialis_P3_pos*.Mirror);
    
    sRel=.Scale(.Data.margo_medialis_pos*.Mirror);
    
    //Calculate rot matrix for cylinder using three points
    //p2-p1 used to find x axis
    //p3-p1 used to find the y axis
    //z axis found as cross product
    AnyMat33  Mat = RotMat(sRel,P2,P3);
    
    //Switch around the on the columns to compensate that the cylinder has 
    //main axis along the zaxis
    ARel={
      {Mat[0][1],Mat[0][2],Mat[0][0]},
      {Mat[1][1],Mat[1][2],Mat[1][0]},
      {Mat[2][1],Mat[2][2],Mat[2][0]}};          
    
    AnySurfCylinder cyl = { 
      Radius= vnorm(.sRel-.P3);
      Length= vnorm(.sRel-.P2);
      CapRatio=1.0;
      //AnyDrawParamSurf drw={RGB={1,0,0};};
    };
  }; 

  // Definition of cylinder used for wrapping of Deltoid scapula muscles 
  // the cylinder starts in gh and points towards ts.
  AnyRefNode deltoid_cyl={ 

    AnyVec3 P2 = .Scale(.Data.deltoid_cyl_P2_pos*.Mirror); //P2=.ai.sRel + VZ*Length;
    AnyVec3 P3 = .Scale(.Data.deltoid_cyl_P3_pos*.Mirror); //P3=.ai.sRel - VX*Radius;
    
    sRel=.ai.sRel;
    
   
    //Calculate rot matrix for cylinder using three points
    //p2-p1 used to find x axis
    //p3-p1 used to find the y axis
    //z axis found as cross product
    AnyMat33  Mat = RotMat(sRel,P3,P2);
    
    //Switch around the on the columns to compensate that the cylinder has 
    //main axis along the zaxis
    ARel={
      {Mat[0][2],Mat[0][0],Mat[0][1]},
      {Mat[1][2],Mat[1][0],Mat[1][1]},
      {Mat[2][2],Mat[2][0],Mat[2][1]}};          
    
    AnySurfCylinder cyl = { 
      Radius= vnorm(.sRel-.P3);
      Length= vnorm(.sRel-.P2);
      CapRatio=1.0;
      //AnyDrawParamSurf drw={RGB={0,0,1};};
    };
    
  }; 
  
  
  AnyRefNode triceps_LH_ellipsoid = {
  
    sRel = .GHReactionCenterNode.sRel + (.GHReactionCenterNode.sRel-.gh.sRel);
    ARel = RotMat(.O_Triceps_LH_2.sRel, .O_Triceps_LH_1.sRel, sRel)*RotMat(pi/2, y);      
    AnySurfEllipsoid surf = { 
      AnyVar ra = 0.97*min({vnorm(.sRel-..O_Triceps_LH_2.sRel), vnorm(.sRel-..O_Triceps_LH_1.sRel) });
      Radius= {ra,ra,2.5*ra};
    };

  };

  AnyRefNode Lattisimus_wrap={ 

    AnyVec3 P = .GHReactionCenterNode.sRel + (.GHReactionCenterNode.sRel -.gh.sRel);
    AnyVec3 Dir = (.coronoid.sRel-.gh.sRel)/vnorm(.coronoid.sRel-.gh.sRel);
   
    AnyVar Length = 0.09;
    sRel= P + Dir*Length*0.8;
    
    ARel = RotMat(sRel, sRel+Dir, {0,0,0.0})*RotMat(-pi/2,y);
    
        
    AnySurfCylinder cyl = { 
      Radius= 0.9*vnorm(..GHReactionCenterNode.sRel -..gh.sRel);
      Length= .Length;
      CapRatio=1.0;
    };
    
  }; 
  
  
  
  
  // Definition of cylinder used for wrapping Teres major muscles.
  // The cylinder starts in gh and points inwards into scapula and has the same 
  // radius as the cylinder on humerus.
  AnyRefNode teres_major_cyl={ 

    AnyVec3 P2 = 1.4*.GHReactionCenterNode.sRel -0.4*.EdgeNode1.sRel; 
    AnyVec3 P3 = .ai.sRel; 

    sRel=.gh.sRel;


    //Calculate rot matrix for cylinder using three points
    //p2-p1 used to find x axis
    //p3-p1 used to find the y axis
    //z axis found as cross product
    AnyMat33  Mat = RotMat(sRel,P2,P3);
    
    //Switch around the on the columns to compensate that the cylinder has 
    //main axis along the zaxis
    ARel =Mat*RotMat(0.5*pi,y);
    AnySurfCylinder cyl = { 
      Radius= 0.99*...Humerus.collum_hum_teres_minor_major.cyl.Radius;
      Length= vnorm(.sRel-..ts.sRel);
      CapRatio=1.0;
    };
  }; 

  

  // Definition of cylinder used for wrapping of Deltoid scapula muscles 
  // the cylinder starts in deltoid O_deltoideus_posterior_part_1 and points towards acromion.
  AnyRefNode acromion_cyl={ 
    /*
    AnyVar Radius=0.01;
    AnyVar Length=0.08;     
  
    AnyVec3 P1 = sRel;
    AnyVec3 P2 =sRel+VZ*Length;
    AnyVec3 P3 =sRel+VX*Radius;
        
    
    AnyVec3 p2=sRel; // Starting point of the vector.
    AnyVec3 p1= p2+{0.025,...Sign*0.005,-0.09}; // End point of the vector
    AnyVec3 v ={0,1,0}; // arbitary vector for cross product.
    
    AnyVec3 VecZ={(p1[0]-p2[0]),(p1[1]-p2[1]),(p1[2]-p2[2])}; // Direction of the cylinder.
    AnyVec3 VecY={(v[1]*VecZ[2]-v[2]*VecZ[1]),(v[2]*VecZ[0]-v[0]*VecZ[2]),(v[0]*VecZ[1]-v[1]*VecZ[0])};
    AnyVec3 VecX={(VecY[1]*VecZ[2]-VecY[2]*VecZ[1]),(VecY[2]*VecZ[0]-VecY[0]*VecZ[2]),(VecY[0]*VecZ[1]-VecY[1]*VecZ[0])};
    
    sRel=.O_deltoideus_scapular_part_3.sRel+{0.03,...Sign*-0.005,0};
    
    //Length calculation
    AnyVar LengthX=sqrt((VecX[0])^2+(VecX[1])^2+(VecX[2])^2);
    AnyVar LengthZ=sqrt((VecZ[0])^2+(VecZ[1])^2+(VecZ[2])^2);
    AnyVar LengthY=sqrt((VecY[0])^2+(VecY[1])^2+(VecY[2])^2);
    
    //Normalizing
    AnyVec3 VX=VecX/LengthX;
    AnyVec3 VY=VecY/LengthY;
    AnyVec3 VZ=VecZ/LengthZ;

    //Note STC issue for scaling
    ARel = {
      {VX[0],VY[0],VZ[0]},
      {VX[1],VY[1],VZ[1]},
      {VX[2],VY[2],VZ[2]}};
    
    AnySurfCylinder cyl = { 
      Radius=0.01;
      Length=0.08; 
      CapRatio=1.0;
    };
    
    */                                                                              // TO DO: to be deleted
    
    AnyVec3 P2 =.Scale(.Data.acromion_cyl_P2_pos*.Mirror);//sRel+VZ*Length;
    AnyVec3 P3 =.Scale(.Data.acromion_cyl_P3_pos*.Mirror);//sRel+VX*Radius;
        
    
    sRel=.Scale(.Data.acromion_cyl_pos*.Mirror);
    //Calculate rot matrix for cylinder using three points
    //p2-p1 used to find x axis
    //p3-p1 used to find the y axis
    //z axis found as cross product
    AnyMat33  Mat = RotMat(sRel,P3,P2);
    
    //Switch around the on the columns to compensate that the cylinder has 
    //main axis along the zaxis
    ARel={
      {Mat[0][2],Mat[0][0],Mat[0][1]},
      {Mat[1][2],Mat[1][0],Mat[1][1]},
      {Mat[2][2],Mat[2][0],Mat[2][1]}};          
    
    AnySurfCylinder cyl = { 
      Radius=vnorm(.sRel-.P3);
      Length= vnorm(.sRel-.P2);
      CapRatio=1.0;
      //AnyDrawParamSurf drw={RGB={1,1,0};};
    };
    
  }; 
  
 
  //AnyRefNode P1 ={sRel=.coracoid_cyl2.P3;AnyDrawRefFrame  Drw={RGB={0,0,1};};};
  //AnyRefNode P2 ={sRel=.coracoid_cyl2.P2; AnyDrawRefFrame Drw={RGB={0,1,0};};};
                                                                                // TO DO: to be deleted

  
 
  
     // Definition of cylinder used for wrapping of subscapularis muscles 
  // the cylinder replicates the shape of the  coracoid process.
  AnyRefNode coracoid_cyl={ 
    
    AnyVec3 P2 =.Scale(.Data.coracoid_cyl_P2_pos*.Mirror);
    AnyVec3 P3 =.Scale(.Data.coracoid_cyl_P3_pos*.Mirror);//sRel+VX*Radius;
        
    //AnyDrawRefFrame drw={};
    sRel=.Scale(.Data.coracoid_cyl_pos*.Mirror);
    
    //Calculate rot matrix for cylinder using three points
    //p2-p1 used to find x axis
    //p3-p1 used to find the y axis
    //z axis found as cross product

     AnyMat33  Mat = RotMat(sRel,P2,P3);
    
     //AnyDrawRefFrame drw={RGB={0.2,0.2,0.2};};
    //Switch around the on the columns to compensate that the cylinder has 
    //main axis along the zaxis
   
    ARel={
      {Mat[0][1],Mat[0][2],Mat[0][0]},
      {Mat[1][1],Mat[1][2],Mat[1][0]},
      {Mat[2][1],Mat[2][2],Mat[2][0]}};              
    

    AnySurfCylinder cyl = { 
      Radius=vnorm(.sRel-.P3);
      Length= vnorm(.sRel-.P2);
      CapRatio=1.0;
//      AnyDrawParamSurf drw={RGB={0,1,0};};
    };
    
  }; 
  


    
  // Definition of torus used for wrapping of subscapularis muscles 
  AnyRefNode subscapularis_torus={ 
      
    // Points for achoring the wrapping torus to the scapula geometry. This ensure the torus will 
    // scale witht the scapula
    AnyVec3 P1 = .GHReactionCenterNode.sRel + 1.3*(.GHReactionCenterNode.sRel-.EdgeNode1.sRel)+1.5*(.GHReactionCenterNode.sRel-.EdgeNode2.sRel);
    AnyVec3 P2 = .O_subscapularis_1.sRel;//0.5*(.O_subscapularis_1.sRel+.O_subscapularis_4.sRel);
    AnyVar dist = vnorm(.gh.sRel-.GHReactionCenterNode.sRel);
    
    ARel = RotMat(.GHReactionCenterNode.sRel,.EdgeNode1.sRel,.EdgeNode2.sRel)*RotMat(0*...Sign*pi/180, y);  
    sRel=P1 + 0.7*dist*((P2-P1)/vnorm(P2-P1));
        
    AnySurfTorus surface = {
      MajorRadius = 1*vnorm(..GHReactionCenterNode.sRel-..EdgeNode2.sRel)+MinorRadius;
      MinorRadius = 0.4*.dist;   
      viewSurface.Opacity = 0.5;
    };

  }; 
  
  AnyVec3 T={-0.02,0.012,0.005}; //corections
#if BM_ARM_DELTOID_WRAPPING == _DELTOID_WRAPPING_RAKE_
  AnyRefNode O_deltoideus_scapular_part_1 = {sRel = .Scale(.Data.O_deltoideus_scapular_part_1_pos*.Mirror);};
  AnyRefNode O_deltoideus_scapular_part_2 = {sRel = .Scale(.Data.O_deltoideus_scapular_part_2_pos*.Mirror);};
  AnyRefNode O_deltoideus_scapular_part_3 = {sRel = .Scale(.Data.O_deltoideus_scapular_part_3_pos*.Mirror);};
  AnyRefNode O_deltoideus_scapular_part_4 = {sRel = .Scale(.Data.O_deltoideus_scapular_part_4_pos*.Mirror);};
  AnyRefNode O_deltoideus_scapular_part_5 = {sRel = .Scale(.Data.O_deltoideus_scapular_part_5_pos*.Mirror);};
  AnyRefNode O_deltoideus_scapular_part_6 = {sRel = .Scale(.Data.O_deltoideus_scapular_part_6_pos*.Mirror);};
#else
  AnyRefNode O_deltoideus_posterior_part_1 = {sRel = .Scale(.Data.O_deltoideus_posterior_part_1_pos*.Mirror);};
  AnyRefNode O_deltoideus_posterior_part_2 = {sRel = .Scale(.Data.O_deltoideus_posterior_part_2_pos*.Mirror);};
  AnyRefNode O_deltoideus_posterior_part_3 = {sRel = .Scale(.Data.O_deltoideus_posterior_part_3_pos*.Mirror);};
  AnyRefNode O_deltoideus_posterior_part_4 = {sRel = .Scale(.Data.O_deltoideus_posterior_part_4_pos*.Mirror);};
  AnyRefNode O_deltoideus_lateral_part_1 = {sRel = .Scale(.Data.O_deltoideus_lateral_part_1_pos*.Mirror);};
  AnyRefNode O_deltoideus_lateral_part_2 = {sRel = .Scale(.Data.O_deltoideus_lateral_part_2_pos*.Mirror);};
  AnyRefNode O_deltoideus_lateral_part_3 = {sRel = .Scale(.Data.O_deltoideus_lateral_part_3_pos*.Mirror);};
  AnyRefNode O_deltoideus_lateral_part_4 = {sRel = .Scale(.Data.O_deltoideus_lateral_part_4_pos*.Mirror);};
#endif
  AnyRefNode O_subscapularis_1 = {sRel = .Scale(.Data.O_subscapularis_1_pos*.Mirror);};
  AnyRefNode O_subscapularis_2 = {sRel = .Scale(.Data.O_subscapularis_2_pos*.Mirror);};
  AnyRefNode O_subscapularis_3 = {sRel = .Scale(.Data.O_subscapularis_3_pos*.Mirror);};
  AnyRefNode O_subscapularis_4 = {sRel = .Scale(.Data.O_subscapularis_4_pos*.Mirror);};
  AnyRefNode O_subscapularis_5 = {sRel = .Scale(.Data.O_subscapularis_5_pos*.Mirror);};
  AnyRefNode O_subscapularis_6 = {sRel = .Scale(.Data.O_subscapularis_6_pos*.Mirror);};
  AnyRefNode O_supraspinatus_1 = {sRel = .Scale(.Data.O_supraspinatus_1_pos*.Mirror);};
  AnyRefNode O_supraspinatus_2 = {sRel = .Scale(.Data.O_supraspinatus_2_pos*.Mirror);};
  AnyRefNode O_supraspinatus_3 = {sRel = .Scale(.Data.O_supraspinatus_3_pos*.Mirror);};
  AnyRefNode O_supraspinatus_4 = {sRel = .Scale(.Data.O_supraspinatus_4_pos*.Mirror);};
  AnyRefNode O_supraspinatus_5 = {sRel = .Scale(.Data.O_supraspinatus_5_pos*.Mirror);};
  AnyRefNode O_supraspinatus_6 = {sRel = .Scale(.Data.O_supraspinatus_6_pos*.Mirror);};
  AnyRefNode O_infraspinatus_1 = {sRel = .Scale(.Data.O_infraspinatus_1_pos*.Mirror);};
  AnyRefNode O_infraspinatus_2 = {sRel = .Scale(.Data.O_infraspinatus_2_pos*.Mirror);};
  AnyRefNode O_infraspinatus_3 = {sRel = .Scale(.Data.O_infraspinatus_3_pos*.Mirror);};
  AnyRefNode O_infraspinatus_4 = {sRel = .Scale(.Data.O_infraspinatus_4_pos*.Mirror);};
  AnyRefNode O_infraspinatus_5 = {sRel = .Scale(.Data.O_infraspinatus_5_pos*.Mirror);};
  AnyRefNode O_infraspinatus_6 = {sRel = .Scale(.Data.O_infraspinatus_6_pos*.Mirror);};
  
  AnyRefNode O_teres_minor_1 = {sRel = .Scale(.Data.O_teres_minor_1_pos*.Mirror);};
  AnyRefNode O_teres_minor_2 = {sRel = .Scale(.Data.O_teres_minor_2_pos*.Mirror);};
  AnyRefNode O_teres_minor_3 = {sRel = .Scale(.Data.O_teres_minor_3_pos*.Mirror);};
  AnyRefNode O_teres_minor_4 = {sRel = .Scale(.Data.O_teres_minor_4_pos*.Mirror);};
  AnyRefNode O_teres_minor_5 = {sRel = .Scale(.Data.O_teres_minor_5_pos*.Mirror);};
  AnyRefNode O_teres_minor_6 = {sRel = .Scale(.Data.O_teres_minor_6_pos*.Mirror);};
  
  AnyRefNode O_teres_major_1 = {sRel = .Scale(.Data.O_teres_major_1_pos*.Mirror);};
  AnyRefNode O_teres_major_2 = {sRel = .Scale(.Data.O_teres_major_2_pos*.Mirror);};
  AnyRefNode O_teres_major_3 = {sRel = .Scale(.Data.O_teres_major_3_pos*.Mirror);};
  AnyRefNode O_teres_major_4 = {sRel = .Scale(.Data.O_teres_major_4_pos*.Mirror);};
  AnyRefNode O_teres_major_5 = {sRel = .Scale(.Data.O_teres_major_5_pos*.Mirror);};
  AnyRefNode O_teres_major_6 = {sRel = .Scale(.Data.O_teres_major_6_pos*.Mirror);};
  
  AnyRefNode O_biceps_brachii_caput_breve  = {sRel = .Scale(.Data.O_biceps_brachii_caput_breve_pos*.Mirror);};
  AnyRefNode O_biceps_brachii_caput_longum = {sRel = .Scale(.Data.O_biceps_brachii_caput_longum_pos*.Mirror);};
  AnyRefNode O_coracobrachialis_1          = {sRel = .Scale(.Data.O_coracobrachialis_1_pos*.Mirror);};
  AnyRefNode O_coracobrachialis_2          = {sRel = .Scale(.Data.O_coracobrachialis_2_pos*.Mirror);};
  AnyRefNode O_coracobrachialis_3          = {sRel = .Scale(.Data.O_coracobrachialis_3_pos*.Mirror);};
  AnyRefNode O_coracobrachialis_4          = {sRel = .Scale(.Data.O_coracobrachialis_4_pos*.Mirror);};
  AnyRefNode O_coracobrachialis_5          = {sRel = .Scale(.Data.O_coracobrachialis_5_pos*.Mirror);};
  AnyRefNode O_coracobrachialis_6          = {sRel = .Scale(.Data.O_coracobrachialis_6_pos*.Mirror);};
  
  AnyRefNode I_trapezius_scapular_part_1 = {sRel = .Scale(.Data.I_trapezius_scapular_part_1_pos*.Mirror);};
  AnyRefNode I_trapezius_scapular_part_2 = {sRel = .Scale(.Data.I_trapezius_scapular_part_2_pos*.Mirror);};
  AnyRefNode I_trapezius_scapular_part_3 = {sRel = .Scale(.Data.I_trapezius_scapular_part_3_pos*.Mirror);};
  AnyRefNode I_trapezius_scapular_part_4 = {sRel = .Scale(.Data.I_trapezius_scapular_part_4_pos*.Mirror);};
  AnyRefNode I_trapezius_scapular_part_5 = {sRel = .Scale(.Data.I_trapezius_scapular_part_5_pos*.Mirror);};
  AnyRefNode I_trapezius_scapular_part_6 = {sRel = .Scale(.Data.I_trapezius_scapular_part_6_pos*.Mirror);};
  
  AnyRefNode I_rhomboideus_1             = {sRel = .Scale(.Data.I_rhomboideus_1_pos*.Mirror);};
  AnyRefNode I_rhomboideus_2             = {sRel = .Scale(.Data.I_rhomboideus_2_pos*.Mirror);};
  AnyRefNode I_rhomboideus_3             = {sRel = .Scale(.Data.I_rhomboideus_3_pos*.Mirror);};
  
  AnyRefNode I_levator_scapulae_1        = {sRel = .Scale(.Data.I_levator_scapulae_1_pos*.Mirror);};
  AnyRefNode I_levator_scapulae_2        = {sRel = .Scale(.Data.I_levator_scapulae_2_pos*.Mirror);};
  AnyRefNode I_levator_scapulae_3        = {sRel = .Scale(.Data.I_levator_scapulae_3_pos*.Mirror);};
  AnyRefNode I_levator_scapulae_4        = {sRel = .Scale(.Data.I_levator_scapulae_4_pos*.Mirror);}; //this point has been added

  AnyRefNode I_pectoralis_minor_1        = {sRel = .Scale(.Data.I_pectoralis_minor_1_pos*.Mirror);};
  AnyRefNode I_pectoralis_minor_2        = {sRel = .Scale(.Data.I_pectoralis_minor_2_pos*.Mirror);};
  AnyRefNode I_pectoralis_minor_3        = {sRel = .Scale(.Data.I_pectoralis_minor_3_pos*.Mirror);};
  
  AnyRefNode I_serratus_anterior_1       = {sRel = .Scale(.Data.I_serratus_anterior_1_pos*.Mirror);};
  AnyRefNode I_serratus_anterior_2       = {sRel = .Scale(.Data.I_serratus_anterior_2_pos*.Mirror);};
  AnyRefNode I_serratus_anterior_3       = {sRel = .Scale(.Data.I_serratus_anterior_3_pos*.Mirror);};
  AnyRefNode I_serratus_anterior_4       = {sRel = .Scale(.Data.I_serratus_anterior_4_pos*.Mirror);};
  AnyRefNode I_serratus_anterior_5       = {sRel = .Scale(.Data.I_serratus_anterior_5_pos*.Mirror);};
  AnyRefNode I_serratus_anterior_6       = {sRel = .Scale(.Data.I_serratus_anterior_6_pos*.Mirror);};
  //  AnyRefNode conoid = {sRel = .Scale({-0.030040, -0.008900, -0.035754})*.Mirror;};
  
  
  
  // Nodes for muscle attachments bml etc. data from MAYO sub2
  AnyRefNode O_Biceps_LH                 = {sRel = .Scale(.Data.O_Biceps_LH_pos*.Mirror);};
  AnyRefNode O_Biceps_SH                 = {sRel = .Scale(.Data.O_Biceps_SH_pos*.Mirror);};
  AnyRefNode O_Cor_brach_1               = {sRel = .Scale(.Data.O_Cor_brach_1_pos*.Mirror);};
  AnyRefNode O_Cor_brach_2               = {sRel = .Scale(.Data.O_Cor_brach_2_pos*.Mirror);};
  AnyRefNode O_Triceps_LH_1              = {sRel = .Scale(.Data.O_Triceps_LH_1_pos*.Mirror);}; //corrected
  AnyRefNode O_Triceps_LH_2              = {sRel = .Scale(.Data.O_Triceps_LH_2_pos*.Mirror);};//corrected
  
};