diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..193a3a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ + +*.png~ +*.deps +*.stl +*.generated.scad diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1317654 --- /dev/null +++ b/Makefile @@ -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} diff --git a/main.json b/main.json new file mode 100644 index 0000000..23b6641 --- /dev/null +++ b/main.json @@ -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" + } + } +} diff --git a/main.scad b/main.scad new file mode 100644 index 0000000..c6edcb5 --- /dev/null +++ b/main.scad @@ -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); + + } +} +