Skip to content

Instantly share code, notes, and snippets.

@ednisley
Created July 6, 2025 19:39
Show Gist options
  • Save ednisley/d529f86123f6e2a82ef3408df99357ec to your computer and use it in GitHub Desktop.
Save ednisley/d529f86123f6e2a82ef3408df99357ec to your computer and use it in GitHub Desktop.
OpenSCAD source code: Table riser blocks for CNC-3018 gantry mill
// CNC 3018 table riser blocks
// Ed Nisley - KE4ZNU
// 2025-06-29
include <BOSL2/std.scad>
Layout = "Show"; // [Show,Build,Outlines]
/* [Hidden] */
HoleWindage = 0.2;
Protrusion = 0.1;
BlockOA = [40.0,30.0,10.0]; // riser block size
SlotBlock = [8.0,BlockOA.y,3.0]; // alignment in slot
BoltOD = 6.0 + HoleWindage; // central bolt
LogoFont = "Fira Sans Condensed:style=SemiBold";
LogoSize = 7.5;
LogoColor = "Red";
LogoThick = 0.4;
//----------
// Define Shapes
module Riser(thick=1,matl="Block") {
LogoText = format_fixed(thick,1);
if (matl == "Text" || matl == "All")
right(BlockOA.x/4) zrot(90)
color(LogoColor)
up(thick + SlotBlock.z + ((matl == "All") ? 0.01 : 0))
text3d(LogoText,LogoThick + ((matl == "All") ? 0.01 : 0),LogoSize,LogoFont,
anchor=TOP,atype="ycenter");
if (matl == "Block" || matl == "All")
difference() {
cuboid(SlotBlock,$fn=8*3,anchor=BOTTOM,rounding=2.0,except=[BOTTOM,TOP]) position(TOP)
cuboid(BlockOA,$fn=8*3,anchor=BOTTOM,rounding=2.0,except=[BOTTOM,TOP]);
down(Protrusion)
zrot(180/6)
cyl(2*BlockOA.z,d=BoltOD,$fn=6,anchor=BOTTOM,circum=true);
}
}
//----------
// Build things
if (Layout == "Show")
down(SlotBlock.z)
Riser(BlockOA.z,matl="All");
if (Layout == "Outlines") {
projection(cut=false)
Riser(BlockOA.z,matl="Block");
}
if (Layout == "Build") {
up(BlockOA.z + SlotBlock.z) xrot(180)
Riser(BlockOA.z,matl="Block");
up(BlockOA.z + SlotBlock.z) xrot(180)
Riser(BlockOA.z,matl="Text");
}
@ednisley
Copy link
Author

ednisley commented Jul 6, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment