Add skull faceplate/grille raised over the speaker opening

This commit is contained in:
zyphlar
2026-09-08 22:40:42 -07:00
parent 9f119d6997
commit de047b813b
3 changed files with 27130 additions and 9959 deletions
+2
View File
@@ -0,0 +1,2 @@
<!-- Skull: "death-skull" by sbed, from game-icons.net - CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/). Background rect removed. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#fff" d="M255.997 16.004c-120 0-239.997 60-239.997 149.998C16 226.002 61 256 61 316c0 45-15 45-15 75 0 14.998 48.01 32.002 89.998 44.998v60h239.997v-60s90.567-27.957 90-45c-.933-27.947-15-30-15-74.998 0-30 45.642-91.42 44.998-149.998 0-90-119.998-149.998-239.996-149.998zm-90 179.997c33.137 0 60 26.864 60 60 0 33.136-26.863 60-60 60C132.863 316 106 289.136 106 256c0-33.136 26.862-60 59.998-60zm179.998 0c33.136 0 60 26.864 60 60 0 33.136-26.864 60-60 60-33.136 0-60-26.864-60-60 0-33.136 26.864-60 60-60zm-89.998 105c15 0 45 60 45 75 0 29.998 0 29.998-15 29.998h-60c-15 0-15 0-15-30 0-15 30-74.998 45-74.998z"/></svg>

After

Width:  |  Height:  |  Size: 837 B

+61
View File
@@ -103,5 +103,66 @@ module hookBaseInside()
speakerRetainer();
}
//---------------------------------------------------------------
// Skull faceplate / grille
// A round faceplate, raised proud of the front face, that fully
// overlaps the 45mm speaker opening and fuses to the solid front
// wall around it. A skull face is cut through it as the speaker
// grille - eye sockets and nasal opening come straight from the
// icon, plus a row of added tooth slots in the jaw.
// skull.svg: "death-skull" by sbed / game-icons.net - CC BY 3.0
// https://game-icons.net/1x1/sbed/death-skull.html
//---------------------------------------------------------------
plateDia = 50; // faceplate diameter (> 45mm opening -> fused rim)
plateRaise = 2.6; // mm proud of the front face
plateEmbed = 1.5; // mm the plate sinks into the front wall (weld)
skullFaceW = 46; // skull width across the plate
skullMaskD = 44; // opened-up disc around the skull -> the grille voids
frontOuterX = shellInsideLength + 2*wallThickness; // X of the outer front face
speakerYc = 27; // speaker opening centre (Y)
speakerZc = 28.6; // speaker opening centre (Z)
// skull.svg imports at ~180.6mm wide (512-unit viewBox at 72dpi)
skullImportW = 180.6;
module skullArt() { import("skull.svg", center = true); }
// The faceplate is a solid disc. The grille is the skull's negative
// space: inside a centre disc, everything that is NOT skull bone is
// opened up - eye sockets, nasal opening and the crescent gaps around
// the cranium and jaw. The bone itself stays as plate material, so the
// disc is never cut through and the skull reads by its voids.
module grille2D()
{
difference()
{
circle(d = plateDia, $fn = 160);
difference()
{
circle(d = skullMaskD, $fn = 150);
scale(skullFaceW / skullImportW) skullArt();
}
// teeth: a row of slots cut into the jaw for extra grille area
for (i = [-2 : 2])
translate([i * 4.4, -15.5]) square([2.2, 7], center = true);
}
}
module skullFaceplate()
{
// hookBaseOutside() shares the inner-corner origin:
// global = hookCoord + [wallThickness, wallThickness, basePlaneThickness]
translate([-wallThickness, -wallThickness, -basePlaneThickness])
translate([frontOuterX - plateEmbed, speakerYc, speakerZc])
rotate([90, 0, 90]) // 2D x->Y, 2D y->Z, extrude->+X
linear_extrude(plateRaise + plateEmbed)
grille2D();
}
module hookBaseOutside()
{
skullFaceplate();
}
showOrientation = true;
YAPPgenerate();
+27067 -9959
View File
File diff suppressed because it is too large Load Diff