Compare commits

...

3 commits

Author SHA1 Message Date
7f8d98ca0a tweaks, add makefile 2026-02-03 14:33:38 +01:00
49bdada671 update stamp logic 2026-02-03 13:49:04 +01:00
cc8fa6bf23 add initial text stamp/stencil generator 2026-02-03 13:19:51 +01:00
4 changed files with 184 additions and 0 deletions

5
.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
*.png~
*.deps
*.stl
*.generated.scad

23
Makefile Normal file
View file

@ -0,0 +1,23 @@
# TARGETS=$(shell sed '/^module [a-z0-9_-]*().*make..\?me.*$$/!d;s/module //;s/().*/.stl/' main.scad)
GENERATED_FILES = $(wildcard *.deps) \
$(wildcard *.stl) \
$(wildcard *.png) \
$(wildcard *.generated.scad)
.phony: all clean
# all: ${TARGETS}
include $(wildcard *.deps)
%.stl: main.scad main.json Makefile
flatpak run org.openscad.OpenSCAD --enable textmetrics -p main.json -P $(basename $@) -DFN=64 -D "MODELVER=\"$(shell git rev-parse --short=6 HEAD)\"" -m make -o $@ -d $@.deps $<
%.png:
flatpak run org.openscad.OpenSCAD --enable textmetrics -p main.json -P $(basename $@) -DFN=32 --render --imgsize 1600,1200 -o $@ main.scad
clean:
rm -rf ${GENERATED_FILES}

19
main.json Normal file
View file

@ -0,0 +1,19 @@
{
"fileFormatVersion": "1",
"parameterSets": {
"t4t": {
"base_rounding_stamp": "4",
"base_rounding_stencil": "2",
"base_thickness_stamp": "1",
"base_thickness_stencil": "0.40000000000000002",
"border": "3",
"font_index": "0",
"font_manual": "LT Effervescent:style=Regular",
"font_set": "4",
"line": "t4t",
"stamp_depth": "1.5",
"textsize": "36",
"variant": "stamp"
}
}
}

137
main.scad Normal file
View file

@ -0,0 +1,137 @@
/* [Main design variables] */
variant = "stamp"; // ["stamp", "stencil"]
// Set the text size to match the width.
textsize = 24; // [10:36]
font_set = 4; // [0:"linux", 1:"windows", 2:"custom", 3:"stencil", 4:"manual"]
font_manual = "Ubuntu:style=Bold";
font_index = 0;
line = "lorem ipsum";
/* [common technical vars] */
border = 3;
/* [stamp technical vars] */
base_thickness_stamp = 1;
base_rounding_stamp = 4;
stamp_depth = 1.5;
/* [stencil technical vars] */
base_thickness_stencil = 0.4;
base_rounding_stencil = 2;
/* [fonts] */
fonts_linux = [
];
fonts_windows = [
];
fonts_custom = [
"Anonymous Pro Minus:style=Bold",
"Anonymous Pro Minus",
"Kings:style=Regular",
"CAT FrankenDeutsch:style=Regular",
"Bounded:style=Medium",
"LT Effervescent:style=Regular"
];
fonts_stencil = ["Depot:style=Regular",
"Allerta Stencil:style=Regular",
"Stardos Stencil:style=Regular",
"Stardos Stencil:style=Bold",
"Stencilia\\-A:style=Regular",
"Stencilia\\-Bold:style=Regular"
];
/* [hidden] */
fonts_manual = [font_manual];
font_sets = [fonts_linux, fonts_windows, fonts_custom, fonts_stencil, fonts_manual];
font = font_sets[font_set][font_index];
if (font == undef)
{
assert(false, "Font index out of range");
}
tm = textmetrics(line, size=textsize, font=font);
width = tm.size[0];
height = tm.size[1];
base_position = tm.position;
echo();
echo(str("model size is x:", width, " y:", height));
echo("");
// All variables are set, make main
main();
module main()
{
if (variant == "stamp")
{
scale([-1,1,1])
stamp();
translate([40,0,0])
%stamp();
}
else if (variant == "stencil")
{
stencil();
}
else
{
assert(false, "Invalid object variant");
}
}
module stamp_base(x, y, z, rounding)
{
hull()
{
for(i = [0+rounding,x-rounding])
{
for(j = [0+rounding,y-rounding])
{
translate([i,j,0])
cylinder(h = z, r = rounding);
}
}
}
}
module stamp()
{
union()
{
translate(base_position)
translate([-border,-border,0])
stamp_base(x = width+2*border, y = height+2*border, z = base_thickness_stamp, rounding = base_rounding_stamp);
color("white")
linear_extrude(height = base_thickness_stamp+stamp_depth)
text(line, font = font, size=textsize);
}
}
module stencil()
{
difference()
{
translate(base_position)
translate([-border,-border,0])
stamp_base(width+2*border, height+2*border, base_thickness_stencil, base_rounding_stamp);
linear_extrude(height = base_thickness_stencil+0.01)
text(line, font = font, size=textsize);
}
}