Quotes/titleBlock.scad

157 lines
5.3 KiB
OpenSCAD

include <BOSL2/std.scad>
include <Typography/typo.scad>
A4_LANDSCAPE= [297,210];
title_block_debugging = false;
experimental = true;
module titleBlock(
project,
title = undef,
description = "",
textSize=6,
date="2025-01-01",
scale=1,
revision="1a",
rect=[90,30],
inset=10,
anchor=CENTER,
spin=0,
orient=UP,
color="Black",
strokeWidth = 0.5,
page="A4",
landscape = true,
//anchor=CENTER,spin=0,orient=LEFT
) {
w = rect[0];
h = rect[1];
interline = 7;
_inset = inset> 0 ? inset : h/20;
//path = rect([w,h], chamfer=0 /*, anchor=FRONT*/);
attachable(anchor,spin,orient, size=[w,h,50]) {
projection( cut = false ) recolor(color) union() {
// ************ Frame ***************
rect_tube(size=[w,h], wall=0.5, h=0.1);
l1 = h/2 - _inset;
l2 = l1 - interline- 2*_inset ;
// ************ Project ***************
translate([-w /2+_inset, l1 ])
linear_extrude(0.1)
text(project, size=textSize,halign="left",anchor=TOP,font="Saira Stencil One");
// ************ Scale ***************
translate([w/2-_inset, l1])
linear_extrude(0.1)
text(str("Scale: 1/",scale), size=textSize*2/5,halign="right",anchor=TOP);
// ************ Title ***************
//metrics = textmetrics(project, size=textSize, font="Saira Stencil One");
//l2 = l1 - metrics.size[1]- 2*_inset ;
if ( title )
translate([-w /2+_inset, l2 ])
linear_extrude(0.1) text( title, size=textSize*2/3,halign="left",anchor=TOP,font="Arial Black");
// ************ Description ***************
if ( description ) {
translate([ -8, l2 - _inset/2 ])
linear_extrude(0.1)
smartText(
description,
size=textSize*1/4,
halign="left",
font="Arial",
style="italic",
max_width = 51
);
}
h1 = h/2-2*_inset - interline;
translate([-w/2+_inset,h1,0]) cube([w-2*_inset,0.1,0.1]);
// ************ Vertical sep ***************
translate([10,interline-1*_inset/2,0]) cube([0.1,interline,0.1]);
// ************ Revision ***************
translate([-w /2+_inset+14, -h/2 + 2*_inset]) {
linear_extrude(0.1) text("Revision:", size=textSize*2/5, anchor = RIGHT, font = "Arial:style=Italic");
linear_extrude(0.1) text(str(revision), size=textSize*2/5, anchor = LEFT,font = "Arial:style=Bold");
}
// ************ Date ***************
translate([w/2-_inset-16, -h/2 + 2*_inset]) {
linear_extrude(0.1) text("Date:", size=textSize*2/5,halign="right", anchor = RIGHT, font = "Arial:style=Italic");
linear_extrude(0.1) text(str(date), size=textSize*2/5, anchor = LEFT,font = "Arial:style=Bold");
}
};
children();
};
}
module A4( margin = 10, landscape = true, onlyMargin = true, anchor=CENTER, spin=0, orient=UP, scale=1, strokeWidth=0.2 ){
w = A4_LANDSCAPE[0];
h = A4_LANDSCAPE[1];
marginW = w-2*margin;
marginH = h-2*margin;
attachable(anchor,spin, orient, size=[marginW,marginH,50]) {
projection( cut = false ) union(){
if (!onlyMargin)
color("Orange")
rect_tube(size=[w,h], wall=0.1, h=0.1);
color("Red")
rect_tube(size=[marginW,marginH], wall=0.1, h=0.1);
};
children();
}
}
module plan(
project,
title = undef,
description = "",
textSize = 6,
date = "2025-01-01",
scale = 1,
revision = "1a",
page = "A4"
)
{
A4( onlyMargin = false, anchor=LEFT+FWD, scale=2 ) {
//align(align=TOP+LEFT+FWD,spin=[0, 0, 0],inside=true)
//attach(LEFT+FWD,/*RIGHT,inside=true*/)
//align(LEFT,inside=true)
if (true) align( FWD+RIGHT,inside=true ) {
titleBlock(
project,
title = title,
description = description,
//textSize = 7,
rect = [90,30],
inset = 2
);
};
align(BACK+LEFT,inside=true) {
children();
}
}
}
if ( title_block_debugging ) {
//titleBlock("My First Project");
lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at rutrum magna. Donec auctor euismod nulla ut congue.";
plan(
"Title Block",
title="Sub title",
description=lorem,
) {
//projection( cut = false ) cube([100,100,100]);
}
}