Reorganize around function/purpose rather than file type.

This commit is contained in:
2024-04-07 18:49:47 -05:00
parent 42e78ed35e
commit d4af5d3c36
141 changed files with 101779 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,42 @@
module triPrism(s = 2, h = 4) {
difference() {
cube([s, s, h]);
translate([0, 0, -0.5]) rotate([0, 0, 45]) cube([1.5 * s, 1.5 * s, h + 1]);
}
}
$fn=50;
ep = 0.01;
module antiAir() {
// base
cylinder(d = 12, h = 1);
for (i = [0:3]) {
color("LightCoral") rotate([0, 15, 90 * i]) translate([-0.5, -1.5, 1.5]) cube([5.5, 3, 1]);
}
// central column
translate([-1.5, -1, 2]) cube([3, 2, 4]);
// body
color("LightSeaGreen") translate([-3.25, 1.5, 3]) rotate([90, 0, 0]) triPrism(s=5, h=3);
color("Coral") translate([0, 1.75, 4.25]) rotate([90, 0, 0]) cylinder(d=2, h=3.5);
intersection() {
color("LightSteelBlue") translate([-8, -1.5, 0]) rotate([0, 45, 0]) cube([2.5, 3, 20]);
rotate([0, -45, 0]) scale([1.3, 0.75, 1]) translate([2.5, 0, 0]) cylinder(d=7, h=8);
}
// main barrel
translate([-4.5, 0, 3.25]) rotate([0, 45, 0]) cylinder(d=1.6, h=16);
// decorations
color("Cornsilk") translate([0, 0, 7.5]) rotate([0, 45, 0]) cylinder(d=3, h=0.6);
color("Cornsilk") translate([-3.5, 0, 4]) rotate([0, 45, 0]) cylinder(d=3, h=0.6);
color("MistyRose") for (i = [0:1]) {
translate([-3.25, 1.5 - 3*i, 3.25]) rotate([0, 45, 0]) cylinder(d=1, h=6);
}
}
antiAir();

View File

@ -0,0 +1,90 @@
//$fn=50;
ep=0.1;
module engine() {
intersection() {
union() {
rotate([90, 0, 0]) cylinder(r=1, h=3);
translate([0, -3, 0]) scale([1, 3, 1]) sphere(r=1);
}
translate([0, -11.75, 0]) scale([1, 3, 1]) sphere(r=4);
}
}
module b17Bomber() {
color("DarkOliveGreen")
difference() {
union() {
// right wing
rotate([0, 0, -5]) translate([-ep, 0, 0]) cube([18 + ep, 4, 1]);
rotate([0, 0, 5]) translate([-ep + 0.5, -3.90, 0]) cube([18 + ep, 4, 1]);
translate([18.2, 0.05, 0]) cylinder(r=2.35, h=1);
// right tail wing
translate([-ep + 0.25, -18.35, 0]) rotate([0, 0, 4]) cube([9 + ep, 2.5, 1]);
translate([-ep , -15.40, 0]) rotate([0, 0, -15]) cube([9 + ep, 2.5, 1]);
translate([8.80, -16.5, 0]) cylinder(r=1.25, h=1);
// right wing engines
translate([6, 5.5, 0.75]) engine();
translate([11, 4.5, 0.75]) engine();
mirror([1, 0, 0])
union() {
// left wing
rotate([0, 0, -5]) translate([-ep, 0, 0]) cube([18 + ep, 4, 1]);
rotate([0, 0, 5]) translate([-ep + 0.5, -3.90, 0]) cube([18 + ep, 4, 1]);
translate([18.2, 0.05, 0]) cylinder(r=2.35, h=1);
// left tail wing
translate([-ep + 0.25, -18.35, 0]) rotate([0, 0, 4]) cube([9 + ep, 2.5, 1]);
translate([-ep , -15.40, 0]) rotate([0, 0, -15]) cube([9 + ep, 2.5, 1]);
translate([8.80, -16.5, 0]) cylinder(r=1.25, h=1);
// right wing engines
translate([6, 5.5, 0.75]) engine();
translate([11, 4.5, 0.75]) engine();
}
// fuselage
//intersection() {
union() {
translate([0, 4, 1.5]) rotate([90, 0, 0]) cylinder(r=2.25, h=10);
translate([0, 4, 1.5]) scale([1, 1.75, 1]) sphere(2.25);
translate([0, -6, 1.5]) scale([1, 6.00, 1]) sphere(2.25);
}
/*
translate([0, -17.0, 1.5]) scale([1, 1.5, 1]) sphere(16);
translate([0, -16.25, 1.5]) scale([1, 4.0, 1]) sphere(6);
*/
//}
//cockpit
intersection() {
union() {
translate([0, 1, 3.25]) cube([2.5, 6, 2], center=true);
translate([0, -2, 2.85]) rotate([45, 0, 0]) cube([2.5, 2.5, 2], center=true);
translate([0, 3.6, 3.25]) rotate([0, 0, 45]) cube([2.5, 2.5, 2], center=true);
}
translate([0, 1, 3.25]) cube([2.5, 10, 2], center=true);
}
// top gun
translate([0, 0, 4.25]) sphere(d=1.5);
translate([0.5, -1, 4.4]) rotate([90, 0, 0]) cylinder(d=0.4, h=1.5, center=true);
translate([-0.5, -1, 4.4]) rotate([90, 0, 0]) cylinder(d=0.4, h=1.5, center=true);
// tail
translate([0, -16.50, 2]) rotate([-15, 0, 0]) rotate([0, 90, 0]) cube([7, 4, 1], center=true);
translate([0, -10.0, 2.15]) rotate([85, 0, 0]) rotate([0, 90, 0]) cube([10, 4, 1], center=true);
translate([0, -14.0, 3.00]) rotate([55, 0, 0]) rotate([0, 90, 0]) cube([4, 4, 1], center=true);
translate([0, -14.5, 2.5]) rotate([25, 0, 0]) rotate([0, 90, 0]) cube([7, 4, 1], center=true);
translate([0, -15.75, 5.80]) rotate([0, 90, 0]) cylinder(r=1.75, h=1, center=true);
}
translate([0, -5, -2.5]) cube([30, 30, 5], center=true);
}
}
b17Bomber();

View File

@ -0,0 +1,77 @@
$fn=50;
ep=0.1;
module messerschmitt() {
color("SlateGrey")
difference() {
union() {
// right wing
translate([0, -1, 0])
intersection() {
union() {
rotate([0, 0, -5]) translate([-ep, -0.25, 0]) cube([14.5 + ep, 4.25, 1]);
rotate([0, 0, 8]) translate([-ep + 0.5, -3.50, 0]) cube([14 + ep, 4, 1]);
translate([8, 0.5, 0.9]) cube([1, 4, 1], center=true);
translate([8, 0.5, 0.9]) cube([4, 1, 1], center=true);
}
translate([-6, 0, 0]) sphere(20);
translate([-17.5, 0.5, 1]) scale([4, 1, 1]) cylinder(r=8, h=2, center=true);
}
// right tail wing
translate([-ep + 0.25, -15.35, 2.5]) rotate([0, 0, 4]) cube([4 + ep, 1.5, 1]);
translate([-ep , -13.65, 2.5]) rotate([0, 0, -15]) cube([4 + ep, 1.5, 1]);
translate([4, -14.15, 2.5]) cylinder(r=0.90, h=1);
mirror([1, 0, 0])
union() {
// left wing
translate([0, -1, 0])
intersection() {
union() {
rotate([0, 0, -5]) translate([-ep, -0.25, 0]) cube([14.5 + ep, 4.25, 1]);
rotate([0, 0, 8]) translate([-ep + 0.5, -3.50, 0]) cube([14 + ep, 4, 1]);
translate([8, 0.5, 0.9]) cube([1, 4, 1], center=true);
translate([8, 0.5, 0.9]) cube([4, 1, 1], center=true);
}
translate([-6, 0, 0]) sphere(20);
translate([-17.5, 0.5, 1]) scale([4, 1, 1]) cylinder(r=8, h=2, center=true);
}
// left tail wing
translate([-ep + 0.25, -15.35, 2.5]) rotate([0, 0, 4]) cube([4 + ep, 1.5, 1]);
translate([-ep , -13.65, 2.5]) rotate([0, 0, -15]) cube([4 + ep, 1.5, 1]);
translate([4, -14.15, 2.5]) cylinder(r=0.90, h=1);
}
// fuselage
intersection() {
union() {
translate([0, 9, 1.25]) rotate([90, 0, 0]) cylinder(r=1.5, h=13);
translate([0, -2, 1.25]) rotate([-5.0, 0, 0]) translate([0, -2, 0]) scale([0.75, 9.0, 1]) sphere(1.5);
translate([0, -3, 1.25]) rotate([-5.0, 0, 0]) scale([1, 3.0, 1]) sphere(1.5);
}
translate([0, -17.0, 1.5]) scale([1, 1.5, 1]) sphere(16);
translate([0, -10, 1.25]) scale([1, 6.0, 1]) sphere(3);
}
//cockpit
//#translate([0, -3, 1.25]) rotate([-2.5, 0, 0]) scale([1, 3.0, 1]) sphere(1.5);
difference() {
translate([0, -5, 2.25]) rotate([92, 0, 0]) cylinder(d=2,h=10, center=true);
translate([0, 0.5, 3]) rotate([30, 0, 0]) cube([2, 2, 3], center=true);
}
// tail
translate([0, -14.40, 3.0]) rotate([-15, 0, 0]) rotate([0, 90, 0]) cube([2.5, 3, 1], center=true);
translate([0, -13.5, 3.5]) rotate([25, 0, 0]) rotate([0, 90, 0]) cube([2.5, 3, 1], center=true);
translate([0, -14.00, 4.5]) rotate([0, 90, 0]) cylinder(r=1.50, h=1, center=true);
translate([0, -14, 0]) scale([0.5, 1, 1]) cylinder(r=1, h=3);
}
translate([0, -5, -2.5]) cube([30, 30, 5], center=true);
}
}
messerschmidt();

View File

@ -0,0 +1,57 @@
//$fn=50;
ep=0.1;
// Create a module so you can call it like a normal OpenSCAD function, like
// cube
module fighterZero() {
color("OrangeRed")
difference() {
union() {
// right wing
translate([-ep, -1, 0]) cube([11 + ep, 5, 1]);
rotate([0, 0, 15]) translate([-ep + 0.5, -3.90, 0]) cube([11 + ep, 4, 1]);
translate([11, 1.5, 0]) cylinder(r=2.5, h=1);
// right tail wing
translate([-ep + 0.25, -15.35, 0]) rotate([0, 0, 4]) cube([5 + ep, 2, 1]);
translate([-ep , -13.65, 0]) rotate([0, 0, -15]) cube([5 + ep, 2, 1]);
translate([5, -14, 0]) cylinder(r=1, h=1);
mirror([1, 0, 0])
union() {
// left wing
translate([-ep, -1, 0]) cube([11 + ep, 5, 1]);
rotate([0, 0, 15]) translate([-ep + 0.5, -3.90, 0]) cube([11 + ep, 4, 1]);
translate([11, 1.5, 0]) cylinder(r=2.5, h=1);
// left tail wing
translate([-ep + 0.25, -15.35, 0]) rotate([0, 0, 4]) cube([5 + ep, 2, 1]);
translate([-ep , -13.65, 0]) rotate([0, 0, -15]) cube([5 + ep, 2, 1]);
translate([5, -14, 0]) cylinder(r=1, h=1);
}
// fuselage
intersection() {
union() {
translate([0, 7, 1.5]) rotate([90, 0, 0]) cylinder(r=2, h=10);
translate([0, -2, 1.5]) scale([1, 7.5, 1]) sphere(2);
}
translate([0, -17.0, 1.5]) scale([1, 1.5, 1]) sphere(16);
translate([0, -16.25, 1.5]) scale([1, 4.0, 1]) sphere(6);
}
//cockpit
translate([0, 0.5, 0.5]) scale([1, 2, 2]) sphere(2);
// tail
translate([0, -14.40, 2]) rotate([-15, 0, 0]) rotate([0, 90, 0]) cube([5, 3, 1], center=true);
translate([0, -13.0, 2.5]) rotate([25, 0, 0]) rotate([0, 90, 0]) cube([5, 3, 1], center=true);
translate([0, -13.85, 4.55]) rotate([0, 90, 0]) cylinder(r=1.40, h=1, center=true);
}
translate([0, -5, -2.5]) cube([30, 30, 5], center=true);
}
}
//fighterZero();

View File

@ -0,0 +1,121 @@
$fn=120;
ep=0.1;
module reference() {
translate([-0.1, 0, 5]) rotate([0, 0, 0.5])
translate([0, -5, 0]) rotate([0, 0, -90]) difference() {
scale([0.08, 0.08, 0.01]) surface(file="yak9-overhead.png", center=true, convexity = 5, invert = true);
translate([-20, -20, -1.75]) cube([40, 40, 1]);
}
translate([2, -5, 2.60]) rotate([90, 0, -90]) difference() {
scale([0.066, 0.066, 0.01]) surface(file="yak9-profile.png", center=true, convexity = 5, invert = true);
translate([-20, -20, -1.75]) cube([40, 40, 1]);
}
translate([0, 5, 1.70]) rotate([90, 0, 0]) difference() {
scale([0.043, 0.043, 0.01]) surface(file="yak9-front.png", center=true, convexity = 5, invert = true);
translate([-20, -20, -1.75]) cube([40, 40, 1]);
}
}
module yak9() {
color("SaddleBrown")
// fuselage
/*difference() {
translate([0, -5, -0.5]) union() {
intersection() {
// tail shaping (x & y)
translate([98.75, 4, -1]) cylinder(r=100, h = 6);
translate([-98.75, 4, -1]) cylinder(r=100, h = 6);
}
// nose shaping
translate([0, 6.25, 2.4]) scale([1, 4, 1]) sphere(r=1.25);
translate([-3, 6.0, 1.9]) scale([1, 2.5, 1]) rotate([0, 90, 0]) cylinder(d = 3, h=6);
}
translate([-2, -19, -2]) cube([4, 4, 8]);
}*/
union() {
translate([0, 2, 1.80]) rotate([90, 0, 0]) cylinder(d=2.5, h=24);
}
}
module messerschmitt() {
color("SlateGrey")
difference() {
union() {
// right wing
translate([0, -1, 0])
intersection() {
union() {
rotate([0, 0, -5]) translate([-ep, -0.25, 0]) cube([14.5 + ep, 4.25, 1]);
rotate([0, 0, 8]) translate([-ep + 0.5, -3.50, 0]) cube([14 + ep, 4, 1]);
translate([8, 0.5, 0.9]) cube([1, 4, 1], center=true);
translate([8, 0.5, 0.9]) cube([4, 1, 1], center=true);
}
translate([-6, 0, 0]) sphere(20);
translate([-17.5, 0.5, 1]) scale([4, 1, 1]) cylinder(r=8, h=2, center=true);
}
// right tail wing
translate([-ep + 0.25, -15.35, 2.5]) rotate([0, 0, 4]) cube([4 + ep, 1.5, 1]);
translate([-ep , -13.65, 2.5]) rotate([0, 0, -15]) cube([4 + ep, 1.5, 1]);
translate([4, -14.15, 2.5]) cylinder(r=0.90, h=1);
mirror([1, 0, 0])
union() {
// left wing
translate([0, -1, 0])
intersection() {
union() {
rotate([0, 0, -5]) translate([-ep, -0.25, 0]) cube([14.5 + ep, 4.25, 1]);
rotate([0, 0, 8]) translate([-ep + 0.5, -3.50, 0]) cube([14 + ep, 4, 1]);
translate([8, 0.5, 0.9]) cube([1, 4, 1], center=true);
translate([8, 0.5, 0.9]) cube([4, 1, 1], center=true);
}
translate([-6, 0, 0]) sphere(20);
translate([-17.5, 0.5, 1]) scale([4, 1, 1]) cylinder(r=8, h=2, center=true);
}
// left tail wing
translate([-ep + 0.25, -15.35, 2.5]) rotate([0, 0, 4]) cube([4 + ep, 1.5, 1]);
translate([-ep , -13.65, 2.5]) rotate([0, 0, -15]) cube([4 + ep, 1.5, 1]);
translate([4, -14.15, 2.5]) cylinder(r=0.90, h=1);
}
// fuselage
intersection() {
union() {
translate([0, 9, 1.25]) rotate([90, 0, 0]) cylinder(r=1.5, h=13);
translate([0, -2, 1.25]) rotate([-5.0, 0, 0]) translate([0, -2, 0]) scale([0.75, 9.0, 1]) sphere(1.5);
translate([0, -3, 1.25]) rotate([-5.0, 0, 0]) scale([1, 3.0, 1]) sphere(1.5);
}
translate([0, -17.0, 1.5]) scale([1, 1.5, 1]) sphere(16);
translate([0, -10, 1.25]) scale([1, 6.0, 1]) sphere(3);
}
//cockpit
//#translate([0, -3, 1.25]) rotate([-2.5, 0, 0]) scale([1, 3.0, 1]) sphere(1.5);
difference() {
translate([0, -5, 2.25]) rotate([92, 0, 0]) cylinder(d=2,h=10, center=true);
translate([0, 0.5, 3]) rotate([30, 0, 0]) cube([2, 2, 3], center=true);
}
// tail
translate([0, -14.40, 3.0]) rotate([-15, 0, 0]) rotate([0, 90, 0]) cube([2.5, 3, 1], center=true);
translate([0, -13.5, 3.5]) rotate([25, 0, 0]) rotate([0, 90, 0]) cube([2.5, 3, 1], center=true);
translate([0, -14.00, 4.5]) rotate([0, 90, 0]) cylinder(r=1.50, h=1, center=true);
translate([0, -14, 0]) scale([0.5, 1, 1]) cylinder(r=1, h=3);
}
translate([0, -5, -2.5]) cube([30, 30, 5], center=true);
}
}
reference();
//#messerschmitt();
yak9();

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,319 @@
use <fighter-japan-mitsubishi-zero.scad>;
use <soldier.scad>;
use <sub.scad>;
use <b17-bomber.scad>;
module tank() {
translate([31.25, -48.5, 0]) import("AA_Stuart.stl");
}
module transport() {
translate([-35.5, -17.5, -0.4]) import("AA_Hunt.stl");
}
module carrier() {
scale([0.7971014492753623, 0.7971014492753623, 0.7971014492753623])
translate([-8, -7, 0])
import("AA_Midway.stl");
}
module battleship() {
scale([1.153846153846154, 1, 1])
translate([-43.5, -116, 0])
import("AA_Des_Moines.stl");
}
$fn=50;
// general global values
ep = 0.01;
wall = 2;
side = 145;
innerSide = side - 2*wall;
//font = "Source Code Pro";
font = "Impact";
// Toggles
inclTray = true;
inclBase = true;
inclSoldier = true;
inclTank = true;
inclFighter = true;
inclSub = true;
inclBomber = true;
inclCarrier = true;
inclBttlship = true;
inclToken = true;
inclLid = false;
inclLidBase = false;
inclPieces = false;
// tray section dimensions [x, y, z]
soldierDims = [88, 43, 10];
tankDims = [innerSide - soldierDims[0], 60, 10];
fighterDims = [innerSide - soldierDims[0], 66, 10];
subTprtDims = [innerSide, 19, 10];
bomberDims = [44 + 2 * wall, 36, 10];
carrierDims = [innerSide - fighterDims[0], 14 + 2*wall, 10];
bttlshipDims = [
innerSide - fighterDims[0], // x
innerSide - soldierDims[1] - bomberDims[1] - carrierDims[1] - subTprtDims[1] + (wall / 2), // y
10]; // z
tokenDims = [innerSide - fighterDims[0] - bomberDims[0], bomberDims[1], 10];
module base() {
cube([side, side, wall + ep]);
}
module soldiers() {
difference() {
color("SlateGrey") cube([soldierDims[0] + ep, soldierDims[1] + ep, soldierDims[2]]);
for (i = [0:4]) {
translate([9 + 15.5*i, 9, -ep]) color("Teal") cylinder(d=14.5, h=12 + ep);
translate([16.5 + 15.5*i, 9 + 13, -ep]) color("Teal") cylinder(d=14.5, h=12 + ep);
translate([9 + 15.5*i, 9 + 2 * 13, -ep]) color("Teal") cylinder(d=14.5, h=12 + ep);
}
}
if (inclPieces) {
for (i = [0:4]) {
color("DarkGreen") translate([9 + 15.5 * i, 9, 0]) soldier();
color("DarkGreen") translate([16.5 + 15.5*i, 9 + 14, 0]) soldier();
color("DarkGreen") translate([9 + 15.5*i, 9 + 2 * 14, 0]) soldier();
}
}
}
module tanks() {
rotate([0, 0, 180])
union() {
translate([wall + 32, 57.5, 10 - ep])
rotate([0, 0, 180])
linear_extrude(2 + ep)
text(text = "ARMOR", font = font, size = 8);
difference() {
color("MediumSeaGreen") cube([tankDims[0] + ep, tankDims[1] + ep, tankDims[2]]);
for (i = [0:8]) {
translate([7 + 17 * floor(i/3), wall + 14.5 * (i % 3), -0.25])
rotate([0, -45, 0])
cube([22, 12, 10]);
}
translate([41, wall + 14.5 * 3, -0.25]) rotate([0, -45, 0]) cube([22, 12, 10]);
}
if (inclPieces) {
for (i = [0:8]) {
translate(
[7 + wall + 17 * floor(i / 3),
10.5 + wall + 14.5 * (i % 3),
1])
rotate([45, 0, -90])
translate([0, -2, 0])
tank();
}
translate([41 + wall, 10.5 + wall + 14.5 * 3, 1])
rotate([45, 0, -90])
translate([0, -2, 0]) tank();
}
}
}
module fighters() {
union() {
translate([wall + 49, wall + 12, 10 - ep])
rotate([0, 0, 90])
linear_extrude(2 + ep)
text(text = "FIGHTERS", font = font, size = 8);
difference() {
color("Khaki") cube([fighterDims[0] + ep, fighterDims[1] + ep, fighterDims[2]]);
for (i = [0:9]) {
translate([wall + (i%5) * 8, 32 * floor(i/5) + wall, -ep])
cube([6, 30, 10 + 2*ep]);
}
}
if (inclPieces) {
for (i = [0:9]) {
translate([wall + 5 + (i%5) * 8, 32 * floor(i/5) + 17, 7])
rotate([-90, 0, 90])
fighterZero();
}
}
}
}
module subsAndTransports() {
union() {
if (inclFighter) {
translate([139, -wall - 4, 10 - ep])
rotate([0, 0, 90])
linear_extrude(2 + ep)
text(text = "SUBS", font = font, size = 8);
}
if (inclCarrier) {
translate([wall, 18, 10 - ep])
rotate([0, 0, -90])
linear_extrude(2 + ep)
text(text = "TPRT", font = font, size = 8);
}
difference() {
color("RoyalBlue") cube([subTprtDims[0], subTprtDims[1], subTprtDims[2]]);
for (i = [0:5]) {
translate([wall + 44 + 18 * i, wall + 4, 0]) rotate([0, -60, 0]) cylinder(r=4, h=30);
translate([wall + 36 + 18 * i, wall + 12, 0]) rotate([0, -60, 0]) cylinder(r=4, h=30);
}
}
if (inclPieces) {
for (i = [0:2]) {
translate([wall + 18 + 18 * i, wall + 3.5, 12.5]) rotate([0, 30, 0]) translate([-14, 0, 0]) transport();
translate([wall + 10 + 18 * i, wall + 10.5, 12.5]) rotate([0, 30, 0]) translate([-14, 0, 0]) transport();
}
for (i = [3:5]) {
translate([wall + 20 + 18 * i, wall + 2.5, 12.5]) rotate([90, 60, 180]) sub();
translate([wall + 16 + 18 * i, wall + 10.5, 12.5]) rotate([90, 60, 180]) sub();
}
}
}
}
module bombers() {
union() {
translate([wall, wall, 10 - ep])
linear_extrude(2 + ep)
text(text = "BOMBERS", font = font, size = 8);
difference() {
color("DarkSlateBlue") cube([bomberDims[0] + ep, bomberDims[1] + ep, bomberDims[2]]);
for (i = [0:2]) {
translate([wall, 10 + wall + i * 8, -ep]) cube([44, 6, 10 + 2*ep]);
}
}
if (inclPieces) {
for (i = [0:2]) {
translate([24, 13 + i * 8, 8.5]) rotate([-90, 0, 0]) b17Bomber();
}
}
}
}
module carriers() {
union() {
translate([wall, 17, 10 - ep])
rotate([0,0,-90])
linear_extrude(2 + ep)
text(text = "A.C." ,font = font, size = 8);
difference() {
color("LightCoral") union() {
cube([carrierDims[0] + ep, carrierDims[1] + ep, carrierDims[2]]);
translate([40, 0, -18]) rotate([0, -30, 0]) cube([55, 15 + 2*wall + ep, 20]);
translate([10, 0, -18]) rotate([0, -30, 0]) cube([55, 15 + 2*wall + ep, 20]);
}
translate([40, wall, -1]) rotate([0, -30, 0]) cube([55, 14, 6]);
translate([10, wall, -1]) rotate([0, -30, 0]) cube([55, 14, 6]);
translate([0, -ep, 20]) cube([carrierDims[0], carrierDims[1] + wall, carrierDims[2]]);
}
if (inclPieces) {
translate([51, 3, 25]) rotate([-30, 0, 90]) translate([0, 0, 0]) carrier();
translate([82, 3, 25]) rotate([-30, 0, 90]) translate([0, 0, 0]) carrier();
}
}
}
module battleships() {
union() {
translate([bttlshipDims[0] - 8 - wall, 26, 10 - ep])
rotate([0,0,-90])
linear_extrude(2 + ep)
text(text = "BSHP" ,font = font, size = 8);
difference() {
color("BurlyWood") union() {
cube([bttlshipDims[0] + ep, bttlshipDims[1] + ep, bttlshipDims[2]]);
for (i = [0:2]) {
translate([37 - 29 * (i%2), 6 * i + 1, -18])
rotate([0, -30, 0])
cube([55, 8 + 2*wall, 20]);
}
translate([8, wall/2, -18])
rotate([0, -30, 0])
cube([55, 16 + 4*wall, 20]);
}
for (i = [0:2]) {
translate([37 - 29 * (i%2), 6 * i + wall + 1, -1])
rotate([0, -30, 0])
cube([55, 8, 12]);
}
translate([0, 0, 20]) cube([bttlshipDims[0], bttlshipDims[1], 10]);
translate([-10 + ep, 0, -5]) cube([10, bttlshipDims[1], 10]);
translate([bttlshipDims[0] - 12, 0, 10]) cube([16, bttlshipDims[1], 20]);
}
if (inclPieces) {
for (i = [0:2]) {
translate([9 + (1 - (i%2))*30, 10.5 + i * 6.15, 0]) rotate([30, 0, -90]) battleship();
}
}
}
}
module tokens() {
difference() {
color("DarkSeaGreen") cube([tokenDims[0] + ep, tokenDims[1] + ep, tokenDims[2]]);
translate([wall, wall, 10])
rotate([0, 30, 0])
cube([tokenDims[0] / 1.5, tokenDims[1] - 2 * wall, 20]);
translate([tokenDims[0] - 16 - wall, wall, -ep]) cube([16, tokenDims[1] - 2 * wall, 20]);
}
}
module allPieceTrays() {
difference() {
union() {
if (inclSoldier) soldiers();
if (inclTank) translate([soldierDims[0] + tankDims[0], tankDims[1] + ep, 0]) tanks();
if (inclFighter) translate([soldierDims[0] - ep, tankDims[1] - wall, 0]) fighters();
if (inclSub) translate([0, innerSide - subTprtDims[1], 0]) subsAndTransports();
if (inclBomber) translate([soldierDims[0] - bomberDims[0], soldierDims[1], 0]) bombers();
if (inclCarrier) translate([0, soldierDims[1] + bomberDims[1], 0]) carriers();
if (inclBttlship) translate([0, soldierDims[1] + bomberDims[1] + carrierDims[1], 0]) battleships();
if (inclToken) translate([0, soldierDims[1], 0]) tokens();
}
// cut away anything below the tray bottoms
translate([0, 0, -30]) cube([side, side, 30]);
}
}
module tray() {
difference() {
union() {
if (inclBase) base();
translate([wall, wall, wall]) allPieceTrays();
}
// index cut for the lid
translate([0, side - 7.07, -10]) rotate([0, 0, 45]) cube([10, 10, 50]);
}
}
module lidBase() {
cube([side + 2, side + 2, wall + ep]);
//cube([side + 2*wall + 2, wall
}
module lid() {
color("LightSteelBlue")
translate([-1, -1, 36])
union() {
lidBase();
}
}
if (inclTray) tray();
if (inclLid) lid();

View File

@ -0,0 +1,30 @@
module triPrism(s = 2, h = 4) {
difference() {
cube([s, s, h]);
translate([0, 0, -0.5]) rotate([0, 0, 30]) cube([1.5 * s, 1.5 * s, h + 1]);
}
}
$fn=50;
ep = 0.01;
module industrialCenter() {
// smokestacks
sw = 2.5;
sh = 17;
translate([-1, sw / 2 - 0.1, 0]) cylinder(d=sw, 17);
translate([-1, -sw / 2 + 0.1, 0]) cylinder(d=sw, 17);
// base
bw = 8;
translate([0, -bw / 2, 0]) cube([15, bw, 8]);
// roof
for (i = [0:2]) {
translate([5 * i, bw / 2, 8 - ep]) rotate([90, 0, 0]) triPrism(s = 5, h = 8);
}
}
industrialCenter();

View 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();

View File

@ -0,0 +1,88 @@
/*skew takes an array of six angles:
*x along y
*x along z
*y along x
*y along z
*z along x
*z along y
*/
module skew(dims) {
matrix = [
[ 1, tan(dims[0]), tan(dims[1]), 0 ],
[ tan(dims[2]), 1, tan(dims[3]), 0 ],
[ tan(dims[4]), tan(dims[5]), 1, 0 ],
[ 0, 0, 0, 1 ]
];
multmatrix(matrix)
children();
}
//$fn=50;
module sub() {
difference() {
union() {
intersection() {
union() {
color("Grey")
translate([0, 0, 1.5])
skew([0, 0, 0, 65, 0, 0])
scale([2, 26, 0.75])
cylinder(d1 = 1.5, d2 = 1.25, h = 4, center = true);
color("Grey")
translate([0, -2.5, 0])
scale([1.25, 9.25, 1])
sphere(r=2);
}
color("LightGrey")
translate([0, 4.75, -82.75])
sphere(r=87);
color("LightGrey")
scale([1, 5.5, 1.5])
translate([0, 0.40, 0])
sphere(r=4);
}
intersection() {
color("Thistle")
translate([0, -17, 0.5])
cube([6, 3, 1], center=true);
color("FireBrick")
translate([0, -20, 0])
rotate([0, 0, 45])
cube(8, center=true);
}
color("LightGrey")
translate([0, 5, 2])
union() {
translate([0, 0, 0.5]) cube([1, 2, 5], center=true);
translate([0, 0, 0]) cube([2, 3, 4], center=true);
translate([0, 1.45, 0]) cylinder(r=1, h=4, center=true);
translate([0, -1.55, 0]) cylinder(r=1, h=4, center=true);
}
color("LightGrey")
translate([0, 0, 1.5])
union() {
cube([1, 2, 3.25], center=true);
cube([2, 1, 3.25], center=true);
}
color("LightGrey")
translate([0, 9, 1.5])
cylinder(r=1, h=3.25, center=true);
translate([0, 12, 1.5])
cylinder(r=1, h=3.25, center=true);
}
translate([0, 0, -3]) cube([6, 50, 6], center=true);
}
}
sub();

View File

@ -0,0 +1,2 @@
cube([60,20,10],center=true);
cube([30,20,10],center=true);

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 146 KiB