// nameplate based on work by Revar //outside frame width ofw=240; //outside frame height ofh=100; //frame thickness oft=10; //total frame depth tfd=10; // frame outside corner radius ofr=30; // base depth bdh=5; // name text="KEN"; //font font ="Liberation Sans:style=Bold"; //font size fs=50; // profile angle tpa=10; //fillet radius fr=3; ///////////////////////////////////// module rrect(size, r ) { hull() { for (x = [-1,1], y = [-1,1]) translate([x*(size.x/2-r), y*(size.y/2-r)]) circle(r=r); } } module plate(size, r, wall, base, height, fillet, ang=3) { $fa=0.2; linear_extrude(height=height) { difference() { rrect(size, r); rrect(size-2*[wall,wall], r-wall); } } minkowski() { translate([0,0,base-0.1]) { linear_extrude(height=0.1) { difference() { rrect(size-1.9*[wall,wall], r-0.95*wall); rrect(size-2*[wall,wall], r-wall); } } } trumpet_horn(fillet, height, ang); } linear_extrude(height=base) { rrect(size, r); } minkowski(){ linear_extrude(height=0.1){ difference(){ rrect(size,r); rrect( size=[size.x-0.1,size.y-0.1],r); } } cylinder(h=height+.1,d1=height*tan(ang),d2=0.1); } } module trumpet_horn(fillet, hght, ang=3) { height=hght-bdh; n=fillet/0.2; // $fn=80; tanx = fillet / cos(ang); xoff = (height-fillet) * tan(ang); cp = [tanx+xoff, fillet]; path = [ [0,height], for (i = [0:1:n]) let( a = 180 + ang + (90-ang) * (i/n) ) cp + fillet * [cos(a),sin(a)], [0,0] ]; rotate_extrude() polygon(path); } module name(text, fillet, height, ang=3) { $fn=fillet*10; translate([0,0,bdh-2]) minkowski() { translate([0,0,-0.1]) { linear_extrude(height=0.1, center=false) text(text, font =font, size=fs, valign="center",halign="center",$fn=80); echo(font); } trumpet_horn(fillet, height, ang); } } module plaque(text, height, fillet, ang=3) { intersection(){ translate([-5000,-5000,0])cube([10000,10000,height]); cube(10000,true); union() { translate([0,0,2]) name(text=text, fillet, height, ang); plate(size=[ofw,ofh], r=ofr, wall=oft, base=bdh, height=10, fillet=fillet, ang=ang); } } } plaque(text, height=tfd, fillet=fr, ang=tpa); translate([0,-ofh*.65,0]) rotate([-90,0,0]) difference(){ intersection(){ translate([-1000,0,-10])cube(2000); plaque(text, height=tfd, fillet=fr, ang=tpa); } translate([-1000,1,-10])cube(2000); }