diff --git a/.gitignore b/.gitignore index 43d2280..a6133c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.3mf +*.csg /Generated diff --git a/.helperSmallWorld.sh b/.helperSmallWorld.sh new file mode 100755 index 0000000..96e594e --- /dev/null +++ b/.helperSmallWorld.sh @@ -0,0 +1,47 @@ +COLORSCAD="../colorscad/colorscad.sh" +FOLDER=Generated/SmallWorld + +echo "Rendering Small World"boardgame insert + +mkdir -p Generated +mkdir -p $FOLDER + +# ── Races ───────────────────────────────────────────────────────────── +mkdir -p $FOLDER/Race + +echo "Rendering Race-Box-Amazonen..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Amazonen.3mf" -i "./SmallWorld/Race-Box-Amazonen.scad" +echo "Rendering Race-Box-Elben..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Elben.3mf" -i "./SmallWorld/Race-Box-Elben.scad" +echo "Rendering Race-Box-Ghule..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Ghule.3mf" -i "./SmallWorld/Race-Box-Ghule.scad" +echo "Rendering Race-Box-Halblinge..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Halblinge.3mf" -i "./SmallWorld/Race-Box-Halblinge.scad" +echo "Rendering Race-Box-Hexenmeister..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Hexenmeister.3mf" -i "./SmallWorld/Race-Box-Hexenmeister.scad" +echo "Rendering Race-Box-Mensch..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Mensch.3mf" -i "./SmallWorld/Race-Box-Mensch.scad" +echo "Rendering Race-Box-Orks..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Orks.3mf" -i "./SmallWorld/Race-Box-Orks.scad" +echo "Rendering Race-Box-Skelette..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Skelette.3mf" -i "./SmallWorld/Race-Box-Skelette.scad" +echo "Rendering Race-Box-Rattenmenschen..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Rattenmenschen.3mf" -i "./SmallWorld/Race-Box-Rattenmenschen.scad" +echo "Rendering Race-Box-Riesen..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Riesen.3mf" -i "./SmallWorld/Race-Box-Riesen.scad" +echo "Rendering Race-Box-Trolle..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Trolle.3mf" -i "./SmallWorld/Race-Box-Trolle.scad" +echo "Rendering Race-Box-Untergegangene-Staemme..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Untergegangene-Staemme.3mf" -i "./SmallWorld/Race-Box-Untergegangene-Staemme.scad" +echo "Rendering Race-Box-Wassermaenner..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Wassermaenner.3mf" -i "./SmallWorld/Race-Box-Wassermaenner.scad" +echo "Rendering Race-Box-Zauberer..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Zauberer.3mf" -i "./SmallWorld/Race-Box-Zauberer.scad" +echo "Rendering Race-Box-Zwerge..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Box-Zwerge.3mf" -i "./SmallWorld/Race-Box-Zwerge.scad" + +echo "Rendering Race-Lid-Lower..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Lid-Lower.3mf" -i "./SmallWorld/Race-Lid-Lower.scad" + +echo "Rendering Race-Lid-Upper..." +"$COLORSCAD" -o "$FOLDER/Race/Race-Lid-Upper.3mf" -i "./SmallWorld/Race-Lid-Upper.scad" diff --git a/Polygon.scad b/Polygon.scad new file mode 100644 index 0000000..2b1b594 --- /dev/null +++ b/Polygon.scad @@ -0,0 +1,43 @@ +function vsub(a, b) = [a[0]-b[0], a[1]-b[1]]; +function vadd(a, b) = [a[0]+b[0], a[1]+b[1]]; +function vlen(v) = sqrt(v[0]*v[0] + v[1]*v[1]); +function vang(v) = atan2(v[1], v[0]); + +function norm_angle(a) = a < 0 ? a + 360 : a; + +function arc_points(c, p1, p2, steps=24, ccw=true) = + let( + a1 = norm_angle(vang(vsub(p1, c))), + a2 = norm_angle(vang(vsub(p2, c))), + r = vlen(vsub(p1, c)), + delta = + ccw + ? (a2 >= a1 ? a2 - a1 : a2 + 360 - a1) + : (a1 >= a2 ? a1 - a2 : a1 + 360 - a2), + dir = ccw ? 1 : -1 + ) + [ for (i = [0:steps]) + let(a = a1 + dir * delta * i / steps) + [ c[0] + r * cos(a), c[1] + r * sin(a) ] + ]; + +module loft_between(polya, polyb, z0=0, z1=20) { + n = len(polya); + assert(n == len(polyb), "Polygons must have same number of vertices"); + + pts = concat( + [ for (p = polya) [p[0], p[1], z0] ], + [ for (p = polyb) [p[0], p[1], z1] ] + ); + + side_faces = [ for (i = [0:n-1]) [i, (i+1)%n, n+(i+1)%n, n+i] ]; + + bottom_cap = [for (i = [n-1:-1:0]) i]; + top_cap = [for (i = [0:n-1]) n + i]; + + polyhedron( + points = pts, + faces = concat(side_faces, [bottom_cap], [top_cap]), + convexity = 10 + ); +} diff --git a/SmallWorld/Race-Box-Amazonen.scad b/SmallWorld/Race-Box-Amazonen.scad new file mode 100644 index 0000000..88a0aa0 --- /dev/null +++ b/SmallWorld/Race-Box-Amazonen.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(10, "Amazonen", 6); + + translate([ 5.5, 12.25, 2 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Elben.scad b/SmallWorld/Race-Box-Elben.scad new file mode 100644 index 0000000..eba1246 --- /dev/null +++ b/SmallWorld/Race-Box-Elben.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Elben", 5); + + translate([ 5.5, 12.25, 2 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Ghoule.scad b/SmallWorld/Race-Box-Ghoule.scad new file mode 100644 index 0000000..6b6c52a --- /dev/null +++ b/SmallWorld/Race-Box-Ghoule.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Ghule", 5); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Halblinge.scad b/SmallWorld/Race-Box-Halblinge.scad new file mode 100644 index 0000000..4b3c668 --- /dev/null +++ b/SmallWorld/Race-Box-Halblinge.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(10, "Halblinge", 6); + + translate([ 5.5, 15, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 15, 4 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 15, 4 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 15, 4 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 29, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 29, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 29, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 29, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Hexenmeister.scad b/SmallWorld/Race-Box-Hexenmeister.scad new file mode 100644 index 0000000..85d4bc0 --- /dev/null +++ b/SmallWorld/Race-Box-Hexenmeister.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(12, "Hexenmeister", 8); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Mensch.scad b/SmallWorld/Race-Box-Mensch.scad new file mode 100644 index 0000000..1980228 --- /dev/null +++ b/SmallWorld/Race-Box-Mensch.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Mensch", 5); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Orks.scad b/SmallWorld/Race-Box-Orks.scad new file mode 100644 index 0000000..9bfa748 --- /dev/null +++ b/SmallWorld/Race-Box-Orks.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Orks", 5); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Rattenmenschen.scad b/SmallWorld/Race-Box-Rattenmenschen.scad new file mode 100644 index 0000000..60360fc --- /dev/null +++ b/SmallWorld/Race-Box-Rattenmenschen.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(12, "Rattenmenschen", 8); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Riesen.scad b/SmallWorld/Race-Box-Riesen.scad new file mode 100644 index 0000000..e807f1c --- /dev/null +++ b/SmallWorld/Race-Box-Riesen.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Riesen", 5); + + translate([ 5.5, 12.25, 2 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Skelette.scad b/SmallWorld/Race-Box-Skelette.scad new file mode 100644 index 0000000..46b0efd --- /dev/null +++ b/SmallWorld/Race-Box-Skelette.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(12, "Skelette", 8); + + translate([ 5.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Trolle.scad b/SmallWorld/Race-Box-Trolle.scad new file mode 100644 index 0000000..4386ea4 --- /dev/null +++ b/SmallWorld/Race-Box-Trolle.scad @@ -0,0 +1,21 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(16, "Trolle", 10); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 15 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 15 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 15 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 15 ], anchor = [ -1, -1, -1 ]); + + translate([ 5.5, 7.25, 8 ]) cuboid([ 38, 38, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 50, 7.25, 8 ]) cuboid([ 38, 38, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 94.5, 7.25, 10 ]) cuboid([ 38, 38, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 16, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 16, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 16, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 16, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Untergegangene-Staemme.scad b/SmallWorld/Race-Box-Untergegangene-Staemme.scad new file mode 100644 index 0000000..763840a --- /dev/null +++ b/SmallWorld/Race-Box-Untergegangene-Staemme.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(12, "Untergegangene Stämme", 6); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Wassermaenner.scad b/SmallWorld/Race-Box-Wassermaenner.scad new file mode 100644 index 0000000..d766a0b --- /dev/null +++ b/SmallWorld/Race-Box-Wassermaenner.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Wassermänner", 5); + + translate([ 5.5, 12.25, 2 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Zauberer.scad b/SmallWorld/Race-Box-Zauberer.scad new file mode 100644 index 0000000..168dae4 --- /dev/null +++ b/SmallWorld/Race-Box-Zauberer.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(8, "Zauberer", 5); + + translate([ 5.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 4 ]) cuboid([ 28, 28, 9 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box-Zwerge.scad b/SmallWorld/Race-Box-Zwerge.scad new file mode 100644 index 0000000..8e52764 --- /dev/null +++ b/SmallWorld/Race-Box-Zwerge.scad @@ -0,0 +1,17 @@ +include +use <../Color.scad> +use + +difference () { + raceBox(6, "Zwerge", 3); + + translate([ 5.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 38.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 71.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + translate([ 104.5, 12.25, 2 ]) cuboid([ 28, 28, 11 ], anchor = [ -1, -1, -1 ]); + + translate([ 19.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 52.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 85.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); + translate([ 118.5, 26.25, -1 ]) cylinder(h = 14, r = 10, center = false); +} diff --git a/SmallWorld/Race-Box.scad b/SmallWorld/Race-Box.scad new file mode 100644 index 0000000..40a6b3c --- /dev/null +++ b/SmallWorld/Race-Box.scad @@ -0,0 +1,48 @@ +include +use <../Color.scad> +use <../Box.scad> + +raceBox(12, "Test", 8); + +module raceBox(z, name, fontSize) { + raceBoxHelper(138, 53.5, z, name, fontSize); + nameHelper(138, z, name, fontSize); +} + +module raceBoxHelper(x, y, z, name, fontSize) { + makeColor("yellow") difference() { + cuboid( + [ x, y, z], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + BOTTOM, + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + + translate([0, 0, z]) mirror([0, 0, 1]) sideCut(y); // left upper + translate([x, 0, z]) mirror([1, 0, 0]) mirror([0, 0, 1]) sideCut(y); // right upper + + translate([ x / 2, 1, z / 2 ]) rotate([ 90, 0, 0 ]) linear_extrude(height = 1.1) text( + name, + size = fontSize, + font = "Arial:style=Bold", + halign="center", + valign="center" + ); + } +} + +module nameHelper(x, z, name, fontSize) { + makeColor("white") translate([ x / 2, 1, z / 2 ]) rotate([ 90, 0, 0 ]) linear_extrude(height = 0.2) text( + name, + size = fontSize, + font = "Arial:style=Bold", + halign="center", + valign="center" + ); +} diff --git a/SmallWorld/Race-Lid-Lower.scad b/SmallWorld/Race-Lid-Lower.scad new file mode 100644 index 0000000..c7eb951 --- /dev/null +++ b/SmallWorld/Race-Lid-Lower.scad @@ -0,0 +1,99 @@ +include +use <../Color.scad> +use <../Polygon.scad> + +raceLidLower(131, 53.5, 3); + +module raceLidLower(x, y, z) { + makeColor("yellow") difference() { + cube([ x, y, z ], false); + + translate([ 24, 26.75, -1 ]) cylinder(h = 4, r = 10, center = false); + + translate([ 0, 0, 1 ]) linear_extrude(height=3) polygon(points=leftLower); + //translate([ 0, 0, 2 ]) hull() { + // linear_extrude(height=0.1) polygon(points=leftLower); + // translate([0,0,1.0]) linear_extrude(height=0.1) polygon(points=leftUpper); + //} + translate([ 0, 0, 2 ]) loft_between(leftLower, leftUpper, 0, 1.01); + translate([ 0, 0, -1 ]) linear_extrude(height=5) polygon(points=rightLower); + translate([ 0, 0, 1 ]) linear_extrude(height=3) polygon(points=rightUpper); + + translate([3.9, 0.9, -1]) rotate([ 0, 0, 45 ]) cuboid( + [ 3.2, 4.7, 5 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + translate([0.4, 50.1, -1]) rotate([ 0, 0, -45 ]) cuboid( + [ 3.2, 4.7, 5 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + translate([124.9, 2.9, -1]) rotate([ 0, 0, -45 ]) cuboid( + [ 3.2, 4.7, 5 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + translate([127.9, 46.9, -1]) rotate([ 0, 0, 45 ]) cuboid( + [ 3.2, 4.7, 5 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + } +} + +leftLower = concat( + arc_points([ 11.82, 11.82 ], [ 11.75, 3.8 ], [ 3.6, 11.75 ], steps=30, ccw=false), + arc_points([ 9.24, 44.26 ], [ 3.6, 44.25 ], [ 9.25, 49.5 ], steps=30, ccw=false), + [[ 39.46, 49.5 ]], + arc_points([ 25.7, 26.6 ], [ 40.15, 45.45 ], [ 43.75, 11.15 ], steps=30, ccw=false), + [[ 44.5, 3.8 ]] +); + +leftUpper = concat( + [[ 45.65, 2.8 ]], + arc_points([ 11.82, 11.82 ], [ 11.75, 2.8 ], [ 2.6, 11.75 ], steps=30, ccw=false), + arc_points([ 9.24, 44.26 ], [ 2.6, 44.25 ], [ 9.25, 50.5 ], steps=30, ccw=false), + [[ 40.3, 50.5 ]], + arc_points([ 25.7, 26.6 ], [ 41.09, 46 ], [ 44.78, 10.81 ], steps=30, ccw=false) +); + +rightLower = concat( + [[ 43.88, 47.5 ]], + arc_points([ 104.21, 26.67 ], [ 104.5, 47.5 ], [ 125.44, 26.75 ], steps=30, ccw=false), + arc_points([ 119.25, 11.75 ], [ 125.44, 11.75 ], [ 119.3, 5.8 ], steps=30, ccw=false), + [[ 48.36, 5.8 ]], + arc_points([ 28.22, 26.60 ], [ 47.84, 10.66 ], [ 44.09, 46.27 ], steps=30, ccw=true) +); + +rightUpper = concat( + [[ 41.7, 49.6 ]], + arc_points([ 104.21, 26.67 ], [ 104.5, 49.6 ], [ 127.44, 26.75 ], steps=30, ccw=false), + arc_points([ 119.25, 11.75 ], [ 127.44, 11.75 ], [ 119.3, 3.9 ], steps=30, ccw=false), + [[ 46.36, 3.9 ]], + arc_points([ 28.22, 26.60 ], [ 45.84, 10.66 ], [ 42.60, 45.30 ], steps=30, ccw=true) +); diff --git a/SmallWorld/Race-Lid-Upper.scad b/SmallWorld/Race-Lid-Upper.scad new file mode 100644 index 0000000..58742d9 --- /dev/null +++ b/SmallWorld/Race-Lid-Upper.scad @@ -0,0 +1,108 @@ +include +use <../Color.scad> +use <../Polygon.scad> +use <../Box-Lid.scad> + +raceLidUpper(138, 53.5, 3); + +module raceLidUpper(x, y, z) { + makeColor("yellow") { + translate([ 0, y, z ]) rotate([ 180, 0, 0 ]) { + difference() { + cube([ x, y, z], false); + + translate([ 3.5, 0, -1 ]) linear_extrude(height=5) polygon(points=leftLower); + translate([ 3.5, 0, 2 ]) loft_between(leftLower, leftUpper, 0, 1.01); + translate([ 3.5, 0, -1 ]) linear_extrude(height=5) polygon(points=rightLower); + translate([ 3.5, 0, 2 ]) loft_between(rightLower, rightUpper, 0, 1.01); + } + + translate([ 7.5, 1, -3 ]) rotate([ 0, 0, 45 ]) cuboid( + [ 3, 4.5, 3 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + BOTTOM, + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + translate([4, 50, -3]) rotate([ 0, 0, -45 ]) cuboid( + [ 3, 4.5, 3 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + BOTTOM, + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + translate([128.5, 3, -3]) rotate([ 0, 0, -45 ]) cuboid( + [ 3, 4.5, 3 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + BOTTOM, + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + translate([131.5, 47, -3]) rotate([ 0, 0, 45 ]) cuboid( + [ 3, 4.5, 3 ], + anchor = [ -1, -1, -1 ], + rounding = 1, + edges = [ + BOTTOM, + FRONT+LEFT, + FRONT+RIGHT, + BACK+LEFT, + BACK+RIGHT + ] + ); + } + + translate([ 0, 0 ,3 ]) cube([3, y, 3], false); + translate([ x - 3, 0 ,3 ]) cube([3, y, 3], false); + + translate([ 0, 0 ,3 ]) sideCut(y); + translate([ x, 0, 3 ]) mirror([ 1, 0, 0 ]) sideCut(y); + } +} + +leftLower = concat( + [[ 45.65, 2.8 ]], + arc_points([ 11.82, 11.82 ], [ 11.75, 2.8 ], [ 2.6, 11.75 ], steps=30, ccw=false), + arc_points([ 9.24, 44.26 ], [ 2.6, 44.25 ], [ 9.25, 50.5 ], steps=30, ccw=false), + [[ 40.3, 50.5 ]], + arc_points([ 25.7, 26.6 ], [ 41.09, 46 ], [ 44.78, 10.81 ], steps=30, ccw=false) +); + +leftUpper = concat( + [[ 45.65, 1.8 ]], + arc_points([ 11.82, 11.82 ], [ 11.75, 1.8 ], [ 1.6, 11.75 ], steps=30, ccw=false), + arc_points([ 9.24, 44.26 ], [ 1.6, 44.25 ], [ 9.25, 51.5 ], steps=30, ccw=false), + [[ 40.3, 51.5 ]], + arc_points([ 25.7, 26.6 ], [ 41.09, 46 ], [ 44.78, 10.81 ], steps=30, ccw=false) +); + +rightLower = concat( + [[ 43.88, 47.5 ]], + arc_points([ 104.21, 26.67 ], [ 104.5, 47.5 ], [ 125.44, 26.75 ], steps=30, ccw=false), + arc_points([ 119.25, 11.75 ], [ 125.44, 11.75 ], [ 119.3, 5.8 ], steps=30, ccw=false), + [[ 48.36, 5.8 ]], + arc_points([ 28.22, 26.60 ], [ 47.84, 10.66 ], [ 44.09, 46.27 ], steps=30, ccw=true) +); + +rightUpper = concat( + [[ 41.7, 49.6 ]], + arc_points([ 104.21, 26.67 ], [ 104.5, 49.6 ], [ 127.44, 26.75 ], steps=30, ccw=false), + arc_points([ 119.25, 11.75 ], [ 127.44, 11.75 ], [ 119.3, 3.9 ], steps=30, ccw=false), + [[ 46.36, 3.9 ]], + arc_points([ 28.22, 26.60 ], [ 45.84, 10.66 ], [ 42.60, 45.30 ], steps=30, ccw=true) +); diff --git a/makefile b/makefile index 9b734be..8160700 100644 --- a/makefile +++ b/makefile @@ -1,7 +1,10 @@ -# all +all: Small_World Heros_Keep_Out -HerosKeepOut: ./CardHolder.scad +Heros_Keep_Out: ./Box-Lid.scad ./Box.scad ./CardHolder.scad ./.helperHerosKeepOut.sh +Small_World: + ./.helperSmallWorld.sh + clean: - rm -r ./STL + rm -r ./Generated