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
};