/* [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); } }