263 lines (216 with data), 9.9 kB
/**This is the artificial rake used for the wrapping of the deltiod muscle the rake prevent that the deltoid muscle slides
around in a uncontrolled way on the humerus head */
AnyFolder ArtificialRake ={
AnySeg DeltoidMuscleConnector ={
AnyMat33 As= {
{...Sign*...Seg.Humerus.Axes0[0][0],...Sign*...Seg.Humerus.Axes0[0][1],...Sign*...Seg.Humerus.Axes0[0][2]},
{...Sign*...Seg.Humerus.Axes0[1][0],...Sign*...Seg.Humerus.Axes0[1][1],...Sign*...Seg.Humerus.Axes0[1][2]},
{...Seg.Humerus.Axes0[2][0],...Seg.Humerus.Axes0[2][1],...Seg.Humerus.Axes0[2][2]}
};
r0=...Seg.Humerus.r0;
Axes0=As;
AnyFunTransform3D &ScaleScapula=...Scaling.Scapula.ScaleFunction;
AnyFunTransform3D &Scale=...Scaling.Humerus.ScaleFunction;
AnyVar RadiusStd=0.038; //This is the standard radius of the rake
//Next to points are used for controlling the scaling of the rake they are located with 90 deg spacing
AnyRefNode P1={
sRel=.Scale(.StartPoint+{....Sign*-.RadiusStd*cos(pi),.offset,.RadiusStd*sin(pi)});
};
AnyRefNode P2={
sRel=.Scale(.StartPoint+{....Sign*-.RadiusStd*cos(....Sign*-0.5*pi),.offset,.RadiusStd*sin(....Sign*-0.5*pi)});
};
AnyVar R1=((P1.sRel[0])^2+(P1.sRel[1])^2+(P1.sRel[2])^2)^0.5; //Radius found using point P1
AnyVar R2=((P2.sRel[0])^2+(P2.sRel[1])^2+(P2.sRel[2])^2)^0.5; //Radius found using point P2
//This is the scaled radius calculated using the average radius of R1 and R2
AnyVar radius=0.5*(R1+R2);
Mass=0;
Jii={0.0,0.0,0.0};
AnyVar no=12;
AnyVar angspace=...Sign*30*pi/180;
AnyVar startangle =...Sign*-300*pi/180;
AnyVec3 StartPoint={0.0,0.0,0.0};
AnyVar offset=-0.0;
AnyVec3 DrwRadius =0*{0.005,0.005,0.005};
AnyVec3 DrwRGB = {47/256,131/256,80/256}; //AnyBody standard green
AnyRefNode DeltoidVia1={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle+.angspace*1),.offset,.radius*sin(.startangle+.angspace*1)}
+....Sign*{-0.015,-0.0125,0.005}*.radius/.RadiusStd;
AnyDrawNode node = {RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia2={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle+.angspace*2),.offset,.radius*sin(.startangle+.angspace*2)}
+....Sign*{-0.01,-0.003,0.005}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia3={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle+.angspace*3),.offset,.radius*sin(.startangle+.angspace*3)}
+....Sign*{0.0,0.005,0.00}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia4={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle+.angspace*4),.offset,.radius*sin(.startangle+.angspace*4)}
+....Sign*{0.0,0.0075,0.00}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia5={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle+.angspace*5),.offset,.radius*sin(.startangle+.angspace*5)}
+....Sign*{0.0,0.01,0.00}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia6={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle+.angspace*6),.offset,.radius*sin(.startangle+.angspace*6)}
+....Sign*{0.0+0.004,0.01,0.00}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyVar angspace2=...Sign*13*pi/180;
AnyVar startangle2 =...Sign*-185*pi/180;
AnyRefNode DeltoidVia7={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle2+.angspace2*7),.offset,.radius*sin(.startangle2+.angspace2*7)}
+....Sign*{-0.00+0.01,-0.0035+0.01,-0.00-0.001} ;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia8={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle2+.angspace2*8),.offset,.radius*sin(.startangle2+.angspace2*8)}
+....Sign*{-0.00+0.010,-0.005+0.0075,-0.002-0.002} ;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia9={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle2+.angspace2*9),.offset,.radius*sin(.startangle2+.angspace2*9)}
+....Sign*{-0.00+0.011,-0.006+0.005,-0.005-0.003};
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia10={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle2+.angspace2*10),.offset,.radius*sin(.startangle2+.angspace2*10)}
+....Sign*{-0.002+0.010,-0.007+0.003,-0.008-0.003};
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia11={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle2+.angspace2*11),.offset,.radius*sin(.startangle2+.angspace2*11)}
+....Sign*{-0.007+0.011,-0.007,-0.014-0.004}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
AnyRefNode DeltoidVia12={
sRel=.StartPoint+{....Sign*-.radius*cos(.startangle2+.angspace2*12),.offset,.radius*sin(.startangle2+.angspace2*12)}
+....Sign*{-0.012+0.012,-0.012,-0.018-0.004}*.radius/.RadiusStd;
AnyDrawNode node ={RGB=..DrwRGB; ScaleXYZ=..DrwRadius;};
};
};
AnySeg DeltoidMuscleRotControlSeg ={
Mass=0.00;
Jii={0.0,0.0,0.0};
AnyFolder NeutralPositionOnThorax = {
AnyMat33 DeltoidMuscleConnector_Axes = {
{....Sign*-0.021288,....Sign* -0.139315, ....Sign*-0.990019},
{....Sign*0.142582,....Sign* 0.979699, ....Sign*-0.140929},
{0.989554, -0.144159, -0.000992}};
AnyMat33 Pelvis_Axes = {{1.000000, 0.000000, 0.000000}, {-0.000000, 1.000000, -0.000000}, {-0.000000, 0.000000, 1.000000}};
AnyMat33 ARel=DeltoidMuscleConnector_Axes'*Pelvis_Axes;
};
AnyMat33 As= .....Trunk.SegmentsRibCage.SternumSeg.Axes0*NeutralPositionOnThorax.ARel';
r0=...Seg.Humerus.DeltoidConnectorCenter.sRel*...Seg.Humerus.Axes0'+...Seg.Humerus.r0;
Axes0={{As[0][0],As[0][1],As[0][2]},
{As[1][0],As[1][1],As[1][2]},
{As[2][0],As[2][1],As[2][2]}};
};
AnySphericalJoint DeltoidMuscleConnectorJnt ={
AnyRefNode &ref1=...Seg.Humerus.DeltoidConnectorCenter ;
AnySeg &ref2=.DeltoidMuscleRotControlSeg;
};
AnyFolder &Scapula=..Seg.Scapula;
Scapula={
AnyRefNode gh_rotated={
sRel=.gh.sRel;
ARel={{....Sign*1,0,0},{0,1,0},{0,0,....Sign*1}};
};
};
AnyFolder &Humerus =..Seg.Humerus;
Humerus={
AnyRefNode gh_rotated={
sRel=.gh.sRel;
ARel={{1,0,0},{0,....Sign*1,0},{0,0,....Sign*1}};
};
};
AnyKinRotational HumerusScapulaRot={
AnyRefNode &ref2=.Scapula.gh_rotated;
AnyRefNode &ref1=.Humerus.gh_rotated;
Type = RotVector;
};
AnyKinRotational HumerusDeltoidMuscleConnectorRot={
AnyRefNode &ref1=.Scapula.gh_rotated;
AnySeg &ref2=.DeltoidMuscleRotControlSeg;
Type =RotVector;
};
AnyKinMeasureLinComb LinComb = {
AnyKinMeasure& u1 = .HumerusScapulaRot;
AnyKinMeasure& u2 = .HumerusDeltoidMuscleConnectorRot;
OutDim = 3;
Coef={
{0.3,0,0,-1,0,0},
{0,0.05,0,0,-1,0}, //this one controls the rotaion around the long axis og humerus
{0,0,0.3,0,0,-1}
};
}; // Measure
//This is not an engine no muscles are attached to the control segment
//and the deltoidmuscleconnector segment is only driven kinematically
//all reactions are swithed off
AnyKinEqSimpleDriver LinCombDrv={
AnyKinMeasureLinComb &ref=.LinComb ;
DriverPos={0,0,0};
DriverVel={0,0,0};
Reaction.Type={Off,Off,Off};
};
AnyRevoluteJoint DeltoidRevoluteJoint={
Axis=y;
AnyRefFrame &ref1=.DeltoidMuscleRotControlSeg;
AnyRefFrame &ref2=.DeltoidMuscleConnector;
Constraints.Reaction.Type={On,On,On,On,On};
};
AnyReacForce DeltoidRevoluteJointReactionForce={
AnyRevoluteJoint &ref=.DeltoidRevoluteJoint;
};
AnyKinRotational DeltoidMuscleConnectorHumerusRot={
AnyRefFrame &ref1 = .Humerus;
AnyRefFrame &ref2 = .DeltoidMuscleRotControlSeg;
Type=RotVector;
};
AnyReacForce DeltoidMuscleConnectorReactionForce={
AnyKinRotational &ref2=.DeltoidMuscleConnectorHumerusRot;
};
/*
This way of driving the rake has some disadvantages
especially for flexion extension..
AnyKinMeasureLinComb LinComb2 = {
AnyKinPLine ScapulaDeltoidMuscleConnector5={
AnyRefNode &ref1 =..Scapula.MuscleConnectorPlaneNode;
AnyRefNode &ref2 = ..DeltoidMuscleConnector.DeltoidVia5;
AnyDrawPLine drw={Thickness=0.0035;RGB={82/256,85/256,111/256};};
};
AnyKinPLine ScapulaDeltoidMuscleConnector9={
AnyRefNode &ref1 =..Scapula.MuscleConnectorPlaneNode;
AnyRefNode &ref2 = ..DeltoidMuscleConnector.DeltoidVia9;
AnyDrawPLine drw={Thickness=0.0035;RGB={82/256,85/256,111/256};};
};
Coef={{0.5,-0.5}};
};
AnyKinEqSimpleDriver LinCom2Drv={
AnyKinMeasureLinComb &ref=.LinComb2;
DriverPos={0};
DriverVel={0};
Reaction.Type={0};
};*/
AnyKinRotational ScapulaDeltoidMuscleConnectorRot={
AnyRefFrame &ref1=.DeltoidMuscleRotControlSeg;
AnySeg &ref2 = .DeltoidMuscleConnector;
Type=RotVector;
};
AnyKinMeasureOrg ScapulaDeltoidMuscleConnectorRotY={
AnyKinRotational &ref=.ScapulaDeltoidMuscleConnectorRot;
MeasureOrganizer ={1};
};
AnyKinEqSimpleDriver LinCom2Drv={
AnyKinMeasure& ref=.ScapulaDeltoidMuscleConnectorRotY;
DriverPos={-0.1};
DriverVel={0};
Reaction.Type={Off};
};
};