Reorganize around function/purpose rather than file type.
This commit is contained in:
175
board-games/axis-and-allies/soldier.scad
Normal file
175
board-games/axis-and-allies/soldier.scad
Normal file
@ -0,0 +1,175 @@
|
||||
//$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();
|
Reference in New Issue
Block a user