176 lines
4.2 KiB
OpenSCAD
176 lines
4.2 KiB
OpenSCAD
//$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();
|