// GENERATED by Tools/blender/export_arm.py from robotic-arm.blend // Do not edit by hand: re-run Tools/export_arm.ps1. Included by Player/Arm/DescentArmLayout.cpp. // // Centimetres, Unreal axes (+X forward = along the arm, +Y right, +Z up), arm at rest. RA_Root is the shoulder. // Each part's mesh has its own joint as the asset origin and the part's own axes (see export_arm.py), so the part's // component sits at LocalOffsetCm in its parent's frame, turned by RestRotation, and then moves by rotating about // JointAxis (FQuat(JointAxis, +angle) = the model's positive rotation: finger/hand/wrist-flex curl toward the palm). // Hand analysis from the geometry: right hand, fingers +X, palm -Z, thumb +Y (Blender axes). static constexpr double GArmShoulderToElbowCm = 30.0000; static constexpr double GArmElbowToHandPivotCm = 29.2000; static constexpr double GArmHandPivotToFingertipCm = 19.4400; static constexpr double GArmShoulderToFingertipCm = 78.6400; static constexpr bool GArmModelIsRightArm = true; static const FDescentArmPartDef GArmPartDefs[] = { { TEXT("RA_Root"), -1, TEXT(""), EDescentArmJoint::Fixed, FVector(0.0000, 0.0000, 0.0000), FQuat(0.0000000, 0.0000000, 0.0000000, 1.0000000), FVector(0.0000, 0.0000, 0.0000), 0.0000, FVector(0.0000, 0.0000, 0.0000), FVector(0.0000, 0.0000, 0.0000), FVector(0.0000, 0.0000, 0.0000), 0 }, { TEXT("RA_UpperArm"), 0, TEXT("SM_Arm_UpperArm"), EDescentArmJoint::Ball, FVector(0.0000, 0.0000, 0.0000), FQuat(0.0000000, 0.0000000, 0.0000000, 1.0000000), FVector(0.0000, 0.0000, 0.0000), 0.0000, FVector(0.0000, 0.0000, 0.0000), FVector(-6.3280, -7.0000, -6.4000), FVector(33.2000, 7.0000, 7.6308), 8736 }, { TEXT("RA_Forearm"), 1, TEXT("SM_Arm_Forearm"), EDescentArmJoint::Hinge, FVector(30.0000, 0.0000, 0.0000), FQuat(0.0000000, 0.0000000, 0.0000000, 1.0000000), FVector(0.0000, 1.0000, 0.0000), 0.0000, FVector(30.0000, 0.0000, 0.0000), FVector(-2.7000, -4.8225, -5.4000), FVector(26.4000, 5.5000, 5.7548), 5388 }, { TEXT("RA_PistonRod"), 2, TEXT("SM_Arm_PistonRod"), EDescentArmJoint::Slide, FVector(13.5000, 4.3000, 0.3000), FQuat(0.0000000, 0.0000000, 0.0000000, 1.0000000), FVector(1.0000, 0.0000, 0.0000), 0.0000, FVector(43.5000, 4.3000, 0.3000), FVector(0.0000, -0.6657, -0.7000), FVector(9.2000, 0.6657, 0.7000), 72 }, { TEXT("RA_Wrist"), 2, TEXT("SM_Arm_Wrist"), EDescentArmJoint::Roll, FVector(27.0000, 0.0000, 0.0000), FQuat(0.0000000, 0.0000000, 0.0000000, 1.0000000), FVector(-1.0000, 0.0000, 0.0000), 0.0000, FVector(57.0000, 0.0000, 0.0000), FVector(-0.6000, -3.2815, -2.6684), FVector(2.4000, 3.2815, 2.6684), 592 }, { TEXT("RA_Hand"), 4, TEXT("SM_Arm_Hand"), EDescentArmJoint::Hinge, FVector(2.2000, 0.0000, 0.0000), FQuat(0.0000000, 0.0000000, 0.0000000, 1.0000000), FVector(0.0000, 1.0000, 0.0000), 0.0000, FVector(59.2000, 0.0000, 0.0000), FVector(-1.2000, -4.6100, -2.2176), FVector(10.8800, 4.6100, 2.4500), 3048 }, { TEXT("RA_Thumb_1"), 5, TEXT("SM_Arm_Thumb_1"), EDescentArmJoint::Finger, FVector(2.2000, -3.4000, -0.6000), FQuat(0.4719762, -0.0669824, -0.4357174, 0.7634803), FVector(0.0000, 1.0000, 0.0000), 0.0000, FVector(61.4000, -3.4000, -0.6000), FVector(-0.9200, -1.1500, -1.3628), FVector(3.6825, 1.1500, 1.2765), 572 }, { TEXT("RA_Thumb_2"), 6, TEXT("SM_Arm_Thumb_2"), EDescentArmJoint::Finger, FVector(4.2000, 0.0000, 0.0000), FQuat(0.0000000, 0.1218693, 0.0000000, 0.9925461), FVector(0.0000, 1.0000, 0.0000), 14.0000, FVector(63.9676, -6.4599, -1.8979), FVector(-0.8400, -1.0500, -1.2443), FVector(2.7275, 1.0500, 1.1655), 572 }, { TEXT("RA_Thumb_3"), 7, TEXT("SM_Arm_Thumb_3"), EDescentArmJoint::Finger, FVector(3.2000, 0.0000, 0.0000), FQuat(0.0000000, 0.0871557, 0.0000000, 0.9961947), FVector(0.0000, 1.0000, 0.0000), 10.0000, FVector(66.2633, -8.2093, -3.2797), FVector(-0.7840, -0.9800, -1.1613), FVector(2.8000, 0.9800, 1.0319), 676 }, { TEXT("RA_Index_1"), 5, TEXT("SM_Arm_Index_1"), EDescentArmJoint::Finger, FVector(9.7000, -3.1500, 0.0000), FQuat(0.0036480, 0.1044648, -0.0347083, 0.9939161), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(68.9000, -3.1500, 0.0000), FVector(-0.7600, -0.9500, -1.1258), FVector(3.7725, 0.9500, 1.0545), 572 }, { TEXT("RA_Index_2"), 9, TEXT("SM_Arm_Index_2"), EDescentArmJoint::Finger, FVector(4.2000, 0.0000, 0.0000), FQuat(0.0000000, 0.1564345, 0.0000000, 0.9876883), FVector(0.0000, 1.0000, 0.0000), 18.0000, FVector(72.9982, -3.4366, -0.8732), FVector(-0.7220, -0.9025, -1.0695), FVector(2.1939, 0.9025, 1.0018), 572 }, { TEXT("RA_Index_3"), 10, TEXT("SM_Arm_Index_3"), EDescentArmJoint::Finger, FVector(2.6000, 0.0000, 0.0000), FQuat(0.0000000, 0.1045285, 0.0000000, 0.9945219), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(75.2444, -3.5936, -2.1732), FVector(-0.6840, -0.8550, -1.0132), FVector(2.3000, 0.8550, 0.9002), 676 }, { TEXT("RA_Middle_1"), 5, TEXT("SM_Arm_Middle_1"), EDescentArmJoint::Finger, FVector(10.0000, -1.0500, 0.0000), FQuat(0.0009122, 0.1045245, -0.0086787, 0.9944841), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(69.2000, -1.0500, 0.0000), FVector(-0.8000, -1.0000, -1.1850), FVector(4.1500, 1.0000, 1.1100), 572 }, { TEXT("RA_Middle_2"), 12, TEXT("SM_Arm_Middle_2"), EDescentArmJoint::Finger, FVector(4.6000, 0.0000, 0.0000), FQuat(0.0000000, 0.1564345, 0.0000000, 0.9876883), FVector(0.0000, 1.0000, 0.0000), 18.0000, FVector(73.6988, -1.1285, -0.9564), FVector(-0.7600, -0.9500, -1.1258), FVector(2.4725, 0.9500, 1.0545), 572 }, { TEXT("RA_Middle_3"), 13, TEXT("SM_Arm_Middle_3"), EDescentArmJoint::Finger, FVector(2.9000, 0.0000, 0.0000), FQuat(0.0000000, 0.1045285, 0.0000000, 0.9945219), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(76.2099, -1.1724, -2.4064), FVector(-0.7200, -0.9000, -1.0665), FVector(2.4000, 0.9000, 0.9476), 676 }, { TEXT("RA_Ring_1"), 5, TEXT("SM_Arm_Ring_1"), EDescentArmJoint::Finger, FVector(9.7000, 1.0500, 0.0000), FQuat(-0.0018243, 0.1045125, 0.0173568, 0.9943704), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(68.9000, 1.0500, 0.0000), FVector(-0.7600, -0.9500, -1.1258), FVector(3.8725, 0.9500, 1.0545), 572 }, { TEXT("RA_Ring_2"), 15, TEXT("SM_Arm_Ring_2"), EDescentArmJoint::Finger, FVector(4.3000, 0.0000, 0.0000), FQuat(0.0000000, 0.1564345, 0.0000000, 0.9876883), FVector(0.0000, 1.0000, 0.0000), 18.0000, FVector(73.1035, 1.1968, -0.8940), FVector(-0.7220, -0.9025, -1.0695), FVector(2.2939, 0.9025, 1.0018), 572 }, { TEXT("RA_Ring_3"), 16, TEXT("SM_Arm_Ring_3"), EDescentArmJoint::Finger, FVector(2.7000, 0.0000, 0.0000), FQuat(0.0000000, 0.1045285, 0.0000000, 0.9945219), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(75.4403, 1.2784, -2.2440), FVector(-0.6840, -0.8550, -1.0132), FVector(2.3000, 0.8550, 0.9002), 676 }, { TEXT("RA_Pinky_1"), 5, TEXT("SM_Arm_Pinky_1"), EDescentArmJoint::Finger, FVector(9.0000, 3.1500, 0.0000), FQuat(-0.0054706, 0.1043852, 0.0520493, 0.9931589), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(68.2000, 3.1500, 0.0000), FVector(-0.6640, -0.8300, -0.9836), FVector(3.0265, 0.8300, 0.9213), 572 }, { TEXT("RA_Pinky_2"), 18, TEXT("SM_Arm_Pinky_2"), EDescentArmJoint::Finger, FVector(3.4000, 0.0000, 0.0000), FQuat(0.0000000, 0.1564345, 0.0000000, 0.9876883), FVector(0.0000, 1.0000, 0.0000), 18.0000, FVector(71.5075, 3.4976, -0.7069), FVector(-0.6308, -0.7885, -0.9344), FVector(1.7500, 0.7885, 0.8752), 572 }, { TEXT("RA_Pinky_3"), 19, TEXT("SM_Arm_Pinky_3"), EDescentArmJoint::Finger, FVector(2.1000, 0.0000, 0.0000), FQuat(0.0000000, 0.1045285, 0.0000000, 0.9945219), FVector(0.0000, 1.0000, 0.0000), 12.0000, FVector(73.3162, 3.6877, -1.7569), FVector(-0.5976, -0.7470, -0.8852), FVector(2.0000, 0.7470, 0.7865), 676 }, };