ghq/ghq.scad
2024-12-05 01:06:32 +01:00

118 lines
2.7 KiB
OpenSCAD

$fs = 0.1;
eps = 0.01;
size = 15;
height = 3;
translate([0, 2] * 1.1 * size)
hq();
for(x = [1:5])
translate([x, 2] * 1.1 * size)
infantry();
for(x = [0:2])
translate([x, 1] * 1.1 * size)
infantry();
for(x = [3:5])
translate([x, 1] * 1.1 * size)
infantry_armored();
infantry_airborne();
for(x = [1:3])
translate([x, 0] * 1.1 * size)
artillery();
translate([4, 0] * 1.1 * size)
artillery_armored();
translate([5, 0] * 1.1 * size)
artillery_heavy();
module hq() {
linear_extrude(height)
scale(size / 4)
polygon([for(i = [0:10])
[(i % 2 + 1) * sin(36 * i),
(i % 2 + 1) * cos(36 * i)],
]);
}
module infantry() {
linear_extrude(height) {
polygon([
[0, -size / 2],
[size / 2, 0],
[-size / 2, 0]
]);
translate([- size / 4, -eps])
square(size / 2);
}
}
module infantry_armored() {
linear_extrude(height)
difference() {
polygon([
[0, -size / 2],
[size / 2, size / 2],
[-size / 2, size / 2]
]);
union() {
translate([0, size / 6])
circle(size / 15);
translate([0, size / 3])
circle(size / 15);
}
}
}
module infantry_airborne() {
linear_extrude(height) {
polygon([
[0, -size / 2],
[size / 2, 0],
[-size / 2, 0]
]);
polygon([
[size / 4, -eps],
[0, size / 2],
[-size / 4, -eps]
]);
}
}
module artillery() {
linear_extrude(height) {
translate([-size / 8, -size / 2])
square([size / 4, size - eps]);
translate([-size / 3, 0])
square([2 * size / 3, size / 2]);
}
}
module artillery_armored() {
linear_extrude(height)
difference() {
union() {
translate([-size / 8, -size / 2])
square([size / 4, size - eps]);
translate([-size / 3, 0])
square([2 * size / 3, size / 2]);
}
union() {
translate([0, size / 6])
circle(size / 15);
translate([0, size / 3])
circle(size / 15);
}
}
}
module artillery_heavy() {
linear_extrude(height) {
translate([-size / 8, -size / 2])
square([size / 4, size - eps]);
polygon([
[0, -size / 4],
[-size / 3, size / 4 + eps],
[size / 3, size / 4 + eps]
]);
translate([-size / 3, size / 4])
square([2 * size / 3, size / 4]);
}
}