136 lines
2.8 KiB
OpenSCAD
136 lines
2.8 KiB
OpenSCAD
/* [Main design variables] */
|
|
variant = "stamp"; // ["stamp", "stencil"]
|
|
// Set the text size to match the width.
|
|
textsize = 36; // [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",
|
|
"Depot Filled: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;
|
|
|
|
// 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()
|
|
{
|
|
stamp_base(width, height, base_thickness_stencil, base_rounding_stamp);
|
|
|
|
for (i = [0 : 1 : len(lines)])
|
|
{
|
|
line = lines[(len(lines)-1)-i];
|
|
translate(v = [width/2, linespacing/2 +border + i*linespacing, 0])
|
|
linear_extrude(height = base_thickness_stencil+0.01)
|
|
text(line, font = font, halign="center", valign="center", size=textsize);
|
|
}
|
|
}
|
|
}
|
|
|