154 lines (117 with data), 10.2 kB
// This file contains segment inertia properties and geometry used for muscle wrapping.
// The file includes a number of segment files which contains muscles attachment points and
// bonylandmarks.
AnySeg Hand ={
AnyMat33 Mirror={{1,0,0},{0,1,0},{0,0,..Sign}};
AnyFunTransform3D &Scale=..Scaling.Hand.ScaleFunction;
r0=.WristJointSeg.RadialUlnarDeviation.sRel*.WristJointSeg.Axes0'+.WristJointSeg.r0 - Ref.wj.sRel * Axes0';//.Radius.wj.sRel*.Radius.Axes0'+.Radius.r0+;
#include "../DrawSettings/Nodes.any"
AnyFolder &Data = ..ModelParameters.HandSeg.SimpleHandSeg;
AnyVar MassS = ..MassScaling.Hand.MassScale;
AnyVar MassStandard = ..StandardParameters.Hand.Mass; // Veeger1997 subject no.4.
Mass = MassS*MassStandard;
AnyVar LengthStandard = 0.1;// Guesstimate..
AnyVar Length = 0.1; // Guesstimate..
AnyVar Radius = (Mass/(pi*Length*..StandardParameters.Hand.Density))^0.5;
AnyVar Ixx = 0.25*Mass*Radius*Radius + 1/12*Mass*Length*Length;
AnyVar Iyy = 0.5*Mass*Radius*Radius;
AnyVar Izz = Ixx;
Jii = {Ixx,Iyy,Izz};
sCoM=Scale(Data.sCoM_pos);
JaboutCoMOnOff = On;
AnyRefNode AnatomicalFrame = {};
AnyRefNode& MoCapMarkerFrameAMMR24 = AnatomicalFrame; ///< For backwards Compatibility with AMMR 2.4 MoCap Marker protocols
AnyRefNode& ScalingNode = AnatomicalFrame;
AnyFunTransform3D& GeomScale = Scale;
// Not used or duplicated in the Ref folder (kept for now)
//AnyRefNode Hand ={ sRel=.Scale({-0.1,0,.0})*.Mirror;};
//AnyRefNode PalmJoint={ sRel=.Scale({-0.08,-0.02,0.0})*.Mirror;};
//AnyRefNode Thumb3joint={ sRel=.Scale({0.0,0,0.05})*.Mirror;};
AnyRefNode Ref={
AnyRefNode wj={ sRel=..Scale(..Data.wj_pos*..Mirror);
//Note:STC Issue for scaling
ARel = {{1,0,0},
{0,....Sign*1,0},
{0,0,....Sign*1}
};
};
AnyRefNode PalmJoint = { sRel = ..Scale(..Data.PalmJoint_pos *..Mirror); };
AnyRefNode Hand = { sRel = ..Scale(..Data.Hand_pos *..Mirror); };
AnyRefNode Via1_Extensor_Indicis = { sRel = ..Scale(..Data.Via1_Extensor_Indicis_pos *..Mirror); };
AnyRefNode I_Extensor_Indicis = { sRel = ..Scale(..Data.I_Extensor_Indicis_pos *..Mirror); };
AnyRefNode I_Extensor_Pollicis_Longus = { sRel = ..Scale(..Data.I_Extensor_Pollicis_Longus_pos *..Mirror); };
AnyRefNode Via1_Extensor_Pollicis_Longus = { sRel = ..Scale(..Data.Via1_Extensor_Pollicis_Longus_pos *..Mirror); };
AnyRefNode I_Extensor_Pollicis_Brevis = { sRel = ..Scale(..Data.I_Extensor_Pollicis_Brevis_pos *..Mirror); };
AnyRefNode Via1_Extensor_Pollicis_Brevis = { sRel = ..Scale(..Data.Via1_Extensor_Pollicis_Brevis_pos *..Mirror); };
AnyRefNode I_Abductor_Pollicis_Longus = { sRel = ..Scale(..Data.I_Abductor_Pollicis_Longus_pos *..Mirror); };
AnyRefNode Via1_Abductor_Pollicis_Longus = { sRel = ..Scale(..Data.Via1_Abductor_Pollicis_Longus_pos *..Mirror); };
AnyRefNode I_Extensor_Carpi_Ulnaris = { sRel = ..Scale(..Data.I_Extensor_Carpi_Ulnaris_pos *..Mirror); };
AnyRefNode I_Extensor_Carpi_Radialis_Brevis = { sRel = ..Scale(..Data.I_Extensor_Carpi_Radialis_Brevis_pos *..Mirror); };
AnyRefNode Via_Extensor_Carpi_Radialis_Brevis = { sRel = ..Scale(..Data.Via_Extensor_Carpi_Radialis_Brevis_pos *..Mirror); };
AnyRefNode I_Extensor_Carpi_Radialis_Longus = { sRel = ..Scale(..Data.I_Extensor_Carpi_Radialis_Longus_pos *..Mirror); };
AnyRefNode I_Flexor_Carpi_Ulnaris = { sRel = ..Scale(..Data.I_Flexor_Carpi_Ulnaris_pos *..Mirror); };
AnyRefNode I_Flexor_Carpi_Radialis = { sRel = ..Scale(..Data.I_Flexor_Carpi_Radialis_pos *..Mirror); };
AnyRefNode Via_Flexor_Carpi_Radialis = { sRel = ..Scale(..Data.Via_Flexor_Carpi_Radialis_pos *..Mirror); };
AnyRefNode I_Palmaris_Longus = { sRel = ..Scale(..Data.I_Palmaris_Longus_pos *..Mirror); };
AnyRefNode Via_Palmaris_Longus = { sRel = ..Scale(..Data.Via_Palmaris_Longus_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Superficialis_Digit2 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Superficialis_Digit2_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Superficialis_Digit3 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Superficialis_Digit3_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Superficialis_Digit4 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Superficialis_Digit4_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Superficialis_Digit5 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Superficialis_Digit5_pos *..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Superficialis_Digit5 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Superficialis_Digit5_pos*..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Superficialis_Digit4 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Superficialis_Digit4_pos*..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Superficialis_Digit3 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Superficialis_Digit3_pos*..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Superficialis_Digit2 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Superficialis_Digit2_pos*..Mirror); };
AnyRefNode I_Flexor_Digitorum_Profundus_Digit2 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Profundus_Digit2_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Profundus_Digit3 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Profundus_Digit3_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Profundus_Digit4 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Profundus_Digit4_pos *..Mirror); };
AnyRefNode I_Flexor_Digitorum_Profundus_Digit5 = { sRel = ..Scale(..Data.I_Flexor_Digitorum_Profundus_Digit5_pos *..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Profundus_Digit5 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Profundus_Digit5_pos *..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Profundus_Digit4 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Profundus_Digit4_pos *..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Profundus_Digit3 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Profundus_Digit3_pos *..Mirror); };
AnyRefNode Via_Flexor_Digitorum_Profundus_Digit2 = { sRel = ..Scale(..Data.Via_Flexor_Digitorum_Profundus_Digit2_pos *..Mirror); };
AnyRefNode I_Extensor_Digitorum_Digit2 = { sRel = ..Scale(..Data.I_Extensor_Digitorum_Digit2_pos *..Mirror); };
AnyRefNode I_Extensor_Digitorum_Digit3 = { sRel = ..Scale(..Data.I_Extensor_Digitorum_Digit3_pos *..Mirror); };
AnyRefNode I_Extensor_Digitorum_Digit4 = { sRel = ..Scale(..Data.I_Extensor_Digitorum_Digit4_pos *..Mirror); };
AnyRefNode I_Extensor_Digitorum_Digit5 = { sRel = ..Scale(..Data.I_Extensor_Digitorum_Digit5_pos *..Mirror); };
AnyRefNode Via_Extensor_Digitorum_Digit5 = { sRel = ..Scale(..Data.Via_Extensor_Digitorum_Digit5_pos *..Mirror); };
AnyRefNode Via_Extensor_Digitorum_Digit4 = { sRel = ..Scale(..Data.Via_Extensor_Digitorum_Digit4_pos *..Mirror); };
AnyRefNode Via_Extensor_Digitorum_Digit3 = { sRel = ..Scale(..Data.Via_Extensor_Digitorum_Digit3_pos *..Mirror); };
AnyRefNode Via_Extensor_Digitorum_Digit2 = { sRel = ..Scale(..Data.Via_Extensor_Digitorum_Digit2_pos *..Mirror); };
AnyRefNode Via_Extensor_Digiti_Minimi = { sRel = ..Scale(..Data.Via_Extensor_Digiti_Minimi_pos *..Mirror); };
AnyRefNode I_Extensor_Digiti_Minimi = { sRel = ..Scale(..Data.I_Extensor_Digiti_Minimi_pos *..Mirror); };
AnyRefNode Via_Flexor_Pollicis_Longus = { sRel = ..Scale(..Data.Via_Flexor_Pollicis_Longus_pos *..Mirror); };
AnyRefNode I_Flexor_Pollicis_Longus = { sRel = ..Scale(..Data.I_Flexor_Pollicis_Longus_pos *..Mirror); };
Via1_Extensor_Pollicis_Longus = {ARel=.ARel0;};
Via1_Extensor_Pollicis_Brevis = {ARel=.ARel0;};
I_Extensor_Carpi_Ulnaris = {ARel=.ARel0;};
Via_Extensor_Carpi_Radialis_Brevis = {ARel=.ARel0;};
I_Extensor_Carpi_Radialis_Longus = {ARel=.ARel0;};
Via_Extensor_Digitorum_Digit5 = {ARel=.ARel0;};
Via_Extensor_Digitorum_Digit4 = {ARel=.ARel0;};
Via_Extensor_Digitorum_Digit3 = {ARel=.ARel0;};
Via_Extensor_Digitorum_Digit2 = {ARel=.ARel0;};
I_Extensor_Digiti_Minimi = {ARel=.ARel0;};
Via_Extensor_Digiti_Minimi = {ARel=.ARel0;};
AnyFloat ARel0 = RotMat(...Sign*pi/2,y)*RotMat(...Sign*pi/2,x); // used for the SPLine.InitWrapPosVectors
//It is used for wrapping of the flexor muscles.
AnyRefNode FlexorMuscleCyl = {
sRel = ..Scale(..Data.FlexorMuscleCyl_pos*..Mirror);
AnyVec3 P3 = ..Scale(..Data.FlexorMuscleCyl_P3_pos*..Mirror);
AnyVec3 P2 = ..Scale(..Data.FlexorMuscleCyl_P2_pos*..Mirror);
//Calculate orientation of the cylinder
ARel=RotMat(sRel,P3,P2)*RotMat(-90/180*pi, z)*RotMat(-90/180*pi, y);
AnySurfCylinder cyl = {
Radius=vnorm(.sRel-.P3);
Length= vnorm(.sRel-.P2);
};
};
};//end Ref
AnyDrawSurf DrwSurf = {
FileName = ...STL.FileNameHand;
RGB = ...ColorRef.Segments;
ScaleXYZ = ({1,1.0,1})*.Mirror;
AnyFunTransform3D &Scale = .Scale;
Opacity = ...BonesOpacity.Hand;
};
}; // End hand