//$fn = 50; module lowerLeg() { translate([0, 0, -6]) union() { translate([0, 0, 0]) cylinder(d1=1.5, d2=2.0, h=6); translate([0, -0.25, 3.75]) scale([1, 1, 2]) sphere(1); translate([0, 0, 6]) sphere(1); } } module upperLeg() { translate([0, 0, -6]) intersection() { union() { cylinder(d1=2.0, d2=2.75, h=6); translate([0, 0.05, 3.5]) scale([1.30, 1.50, 4]) sphere(1); } cylinder(d1=3, d2=3.75, h=6); } } module leg(footTilt = 0, calfTilt = 0, thighTilt =0) { rotate([thighTilt, 0, 0]) union() { upperLeg(); translate([0, 0, -5.75]) rotate([calfTilt, 0, 0]) union() { lowerLeg(); translate([0, 0, -5.75]) rotate([footTilt, 0, 0]) translate([0, 1, 0]) scale([1, 2, 1]) sphere(1); } } // foot //translate([0, 1, 0]) rotate([0, 0, 0]) scale([1, 2, 1]) sphere(1); //translate([0, 0, 0]) lowerLeg(); //translate([0, 0, 8.4]) upperLeg(); } module upperArm() { translate([0, 0, -5]) union() { cylinder(d1=1.4, d2=1.8, h=5); translate([0, -0.1, 3]) scale([0.85, 1, 2.75]) sphere(1); translate([0, 0.25, 3]) scale([1.00, 1, 2.25]) sphere(1); } } module lowerArm() { translate([0, 0, -4.5]) cylinder(d1=1.25, d2=1.4, h=4.5); translate([0, 0, -1.25]) scale([1, 1, 2.5]) sphere(0.80); } module arm(rotation = 0, flexion = 0, abduction = 0, elbowFlexion = 0) { // shoulder sphere(0.90); rotate([flexion, abduction, rotation]) union() { upperArm(); // elbow translate([0, 0, -5]) sphere(0.7); translate([0, 0, -5]) rotate([elbowFlexion, 0, 0]) union() { lowerArm(); translate([0, 0, -4.5]) scale([1, 0.75, 1.5]) sphere(1); } } } module person( // forward/backword, sideways, rotation torso = [0, 0, 0], // flexion, knee flexion, ankle flexion, abduction, rotation leftLeg = [0, 0, 0, 0, 0], rightLeg = [0, 0, 0, 0, 0], // flexion, elbow flexion, abduction, rotation leftArm = [0, 0, -90, 0], rightArm = [0, 0, 90, 0] ) { rotate([torso[0], torso[1], torso[2]]) union() { // helmet translate([0, 0, 9]) scale([2, 1.75, 2]) intersection() { sphere(1); translate([0, 0, 0.6]) cube([2, 2, 1], center=true); } // head & neck translate([0, 0, 9]) scale([1.75, 1.5, 2]) sphere(1); translate([0, 0, 7]) cylinder(d=1.5, h=2); // torso intersection() { scale([3, 1.75, 1]) cylinder(r1=0.9, r2=1.1, h=7); translate([0, 0, -0.5]) scale([8, 4, 8]) sphere(1); } // backpack translate([0, -2, 4]) intersection() { cube([4.5, 2, 6], center=true); scale([3.5, 2, 3.5]) sphere(1); } // arms translate([-3, 0, 6]) arm( rotation = leftArm[3], flexion = leftArm[0], abduction = leftArm[2], elbowFlexion = leftArm[1]); translate([3, 0, 6]) arm( rotation = rightArm[3], flexion = rightArm[0], abduction = rightArm[2], elbowFlexion = rightArm[1]); } // pelvis translate([0, 0, -0.5]) scale([3, 1.75, 2]) sphere(1); // legs translate([-1.5, 0, 0]) rotate([0, leftLeg[3], leftLeg[4]]) leg( thighTilt = leftLeg[0], calfTilt = leftLeg[1], footTilt = leftLeg[2]); translate([1.5, 0, 0]) rotate([0, rightLeg[3], rightLeg[4]]) leg( thighTilt = rightLeg[0], calfTilt = rightLeg[1], footTilt = rightLeg[2]); } module soldier() { difference() { union() { // base translate([0, 0, 0.5]) cylinder(d=14, h=1, center=true); // soldier translate([0, 0, 12.25]) person( torso = [-10, -3, -5], leftLeg = [5, -15, -20, 20, 60], rightLeg = [20, -24, 4, 0, -15], leftArm = [-20, 100, 0, -30], rightArm = [20, 130, -10, 45]); // gun translate([0, 4, 18]) rotate([-20, -10, -90]) union() { translate([0, 0, 1]) cylinder(d=0.8, h=12, center=true); translate([0, 0.4, -2]) cube([0.8, 1, 6], center=true); translate([0, 0.6, -6]) rotate([10, 0, 0]) cube([0.8, 1.25, 4], center=true); } } translate([0, 0, -0.499]) cylinder(d=14, h=1, center=true); } } soldier();