I'm hoping to create a simple pattern for a casting a couple of brass
nameplates. I would like to produce it as an stl for fdm printing. There
are a few problems. 1) I've created a 3d design approximating to the
desired size, but when extruding, there needs to be a draft angle of
about 3 degrees for each letter and the frame. 2) there needs to be a
fillet at the base of each character for easy pattern removal. 3)
ideally, it would be nice to individually adjust the width of the
strokes of the letters. The code, so far, is listed below.
As the lettering is simple, then I am wondering if it may be easier to
create a profile for a cross section, including the fillet, and extrude
a length, cut up and rotate and place accordingly. (it would be ten
pieces and the frame). I think that I could create the fillets, if I
could get the draft angle on the eletter strokes, by differencing into a
cube, and applying Minkowski with a small sphere, and differencing back
again.
Machining from solid is simpler, I use a profiled round-ended cutter to
get the draft angle and fillet in one pass, I could almost write the
g-code by hand for that....
Any suggestions? (being a bit of a Luddite, I am not going to be using
bos2l 😳 )
Best wishes,
Ray
////////////////////////////////////////////////////////////////////////////////////
// ken
module name(){
text ("KEN",font="Liberation
Sans:style=Bold",size=50,valign="center",halign="center");
}
module inround(){
difference(){
d=40;
r=20;
square(d,true);
translate([-r,-r])circle(d=d);
translate([-r,+r])circle(d=d);
translate([+r,-r])circle(d=d);
translate([+r,+r])circle(d=d);
}
}
module inframe(){
difference(){
square([220,80],true);
translate([-110,-40])inround();
translate([-110,+40])inround();
translate([+110,-40])inround();
translate([+110,+40])inround();
}
}
module frame(){
difference(){
offset(r=10) inframe();
inframe();
}
}
module base(){
linear_extrude(5){
offset(r=10) inframe();
}
}
base();
linear_extrude(10){
frame();
name();
}
You can always minkowski the text with a pseudo traffic-cone shape.
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) {
linear_extrude(height=height) {
difference() {
rrect(size, r);
rrect(size-2*[wall,wall], r-wall);
}
}
linear_extrude(height=base) {
rrect(size, r);
}
}
module trumpet_horn(fillet, height, ang, n) {
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, n) {
minkowski() {
translate([0,0,-0.1]) {
linear_extrude(height=0.1, center=false)
text(text, font="Liberation Sans:style=Bold", size=50, valign="center",halign="center");
}
trumpet_horn(fillet, height, ang, n);
}
}
module plaque(text, height, fillet, ang) {
union() {
translate([0,0,2])
name(text=text, fillet, height, ang, n=3);
plate(size=[220,90], r=20, wall=10, base=2, height=10);
}
}
plaque("KEN", height=10, fillet=3, ang=3);

On May 2, 2024, at 2:46 PM, Raymond West via Discuss discuss@lists.openscad.org wrote:
I'm hoping to create a simple pattern for a casting a couple of brass nameplates. I would like to produce it as an stl for fdm printing. There are a few problems. 1) I've created a 3d design approximating to the desired size, but when extruding, there needs to be a draft angle of about 3 degrees for each letter and the frame. 2) there needs to be a fillet at the base of each character for easy pattern removal. 3) ideally, it would be nice to individually adjust the width of the strokes of the letters. The code, so far, is listed below.
As the lettering is simple, then I am wondering if it may be easier to create a profile for a cross section, including the fillet, and extrude a length, cut up and rotate and place accordingly. (it would be ten pieces and the frame). I think that I could create the fillets, if I could get the draft angle on the eletter strokes, by differencing into a cube, and applying Minkowski with a small sphere, and differencing back again.
Machining from solid is simpler, I use a profiled round-ended cutter to get the draft angle and fillet in one pass, I could almost write the g-code by hand for that....
Any suggestions? (being a bit of a Luddite, I am not going to be using bos2l 😳 )
Best wishes,
Ray
////////////////////////////////////////////////////////////////////////////////////
// ken
module name(){
text ("KEN",font="Liberation Sans:style=Bold",size=50,valign="center",halign="center");
}
module inround(){
difference(){
d=40;
r=20;
square(d,true);
translate([-r,-r])circle(d=d);
translate([-r,+r])circle(d=d);
translate([+r,-r])circle(d=d);
translate([+r,+r])circle(d=d);
}
}
module inframe(){
difference(){
square([220,80],true);
translate([-110,-40])inround();
translate([-110,+40])inround();
translate([+110,-40])inround();
translate([+110,+40])inround();
}
}
module frame(){
difference(){
offset(r=10) inframe();
inframe();
}
}
module base(){
linear_extrude(5){
offset(r=10) inframe();
}
}
base();
linear_extrude(10){
frame();
name();
}
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
I realized after posing that the the plate itself needed filleting:
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, n=3) {
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.95wall);
rrect(size-2[wall,wall], r-wall);
}
}
}
trumpet_horn(fillet, height-base, ang, n);
}
linear_extrude(height=base) {
rrect(size, r);
}
}
module trumpet_horn(fillet, height, ang=3, n=3) {
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, n=3) {
minkowski() {
translate([0,0,-0.1]) {
linear_extrude(height=0.1, center=false)
text(text, font="Liberation Sans:style=Bold", size=50, valign="center",halign="center");
}
trumpet_horn(fillet, height, ang, n);
}
}
module plaque(text, height, fillet, ang=3) {
union() {
translate([0,0,2])
name(text=text, fillet, height, ang, n=3);
plate(size=[220,90], r=20, wall=10, base=2, height=10, fillet=fillet, ang=ang);
}
}
plaque("KEN", height=10, fillet=3, ang=3);

On May 2, 2024, at 2:46 PM, Raymond West via Discuss discuss@lists.openscad.org wrote:
I'm hoping to create a simple pattern for a casting a couple of brass nameplates. I would like to produce it as an stl for fdm printing. There are a few problems. 1) I've created a 3d design approximating to the desired size, but when extruding, there needs to be a draft angle of about 3 degrees for each letter and the frame. 2) there needs to be a fillet at the base of each character for easy pattern removal. 3) ideally, it would be nice to individually adjust the width of the strokes of the letters. The code, so far, is listed below.
As the lettering is simple, then I am wondering if it may be easier to create a profile for a cross section, including the fillet, and extrude a length, cut up and rotate and place accordingly. (it would be ten pieces and the frame). I think that I could create the fillets, if I could get the draft angle on the eletter strokes, by differencing into a cube, and applying Minkowski with a small sphere, and differencing back again.
Machining from solid is simpler, I use a profiled round-ended cutter to get the draft angle and fillet in one pass, I could almost write the g-code by hand for that....
Any suggestions? (being a bit of a Luddite, I am not going to be using bos2l 😳 )
Best wishes,
Ray
////////////////////////////////////////////////////////////////////////////////////
// ken
module name(){
text ("KEN",font="Liberation Sans:style=Bold",size=50,valign="center",halign="center");
}
module inround(){
difference(){
d=40;
r=20;
square(d,true);
translate([-r,-r])circle(d=d);
translate([-r,+r])circle(d=d);
translate([+r,-r])circle(d=d);
translate([+r,+r])circle(d=d);
}
}
module inframe(){
difference(){
square([220,80],true);
translate([-110,-40])inround();
translate([-110,+40])inround();
translate([+110,-40])inround();
translate([+110,+40])inround();
}
}
module frame(){
difference(){
offset(r=10) inframe();
inframe();
}
}
module base(){
linear_extrude(5){
offset(r=10) inframe();
}
}
base();
linear_extrude(10){
frame();
name();
}
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
Thanks Revar,
Just what I needed. I realise now that I created a sort of x y problem
for myself, having always used a sphere for rounding edges with
Minkowski, I'd completely forgotten that other solids were possible,
never mind hull for corner rounded squares. 🙁
Best wishes,
Ray
On 03/05/2024 01:16, Revar Desmera wrote:
I realized after posing that the the plate itself needed filleting:
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, n=3) {
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-base, ang, n);
}
linear_extrude(height=base) {
rrect(size, r);
}
}
module trumpet_horn(fillet, height, ang=3, n=3) {
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, n=3) {
minkowski() {
translate([0,0,-0.1]) {
linear_extrude(height=0.1, center=false)
text(text, font="Liberation Sans:style=Bold",
size=50, valign="center",halign="center");
}
trumpet_horn(fillet, height, ang, n);
}
}
module plaque(text, height, fillet, ang=3) {
union() {
translate([0,0,2])
name(text=text, fillet, height, ang, n=3);
plate(size=[220,90], r=20, wall=10, base=2, height=10,
fillet=fillet, ang=ang);
}
}
plaque("KEN", height=10, fillet=3, ang=3);
Screenshot 2024-05-02 at 5.15.50 PM.png
On May 2, 2024, at 2:46 PM, Raymond West via Discuss
discuss@lists.openscad.org wrote:
I'm hoping to create a simple pattern for a casting a couple of brass
nameplates. I would like to produce it as an stl for fdm printing.
There are a few problems. 1) I've created a 3d design approximating
to the desired size, but when extruding, there needs to be a draft
angle of about 3 degrees for each letter and the frame. 2) there
needs to be a fillet at the base of each character for easy pattern
removal. 3) ideally, it would be nice to individually adjust the
width of the strokes of the letters. The code, so far, is listed below.
As the lettering is simple, then I am wondering if it may be easier
to create a profile for a cross section, including the fillet, and
extrude a length, cut up and rotate and place accordingly. (it would
be ten pieces and the frame). I think that I could create the
fillets, if I could get the draft angle on the eletter strokes, by
differencing into a cube, and applying Minkowski with a small sphere,
and differencing back again.
Machining from solid is simpler, I use a profiled round-ended cutter
to get the draft angle and fillet in one pass, I could almost write
the g-code by hand for that....
Any suggestions? (being a bit of a Luddite, I am not going to be
using bos2l 😳 )
Best wishes,
Ray
////////////////////////////////////////////////////////////////////////////////////
// ken
module name(){
text ("KEN",font="Liberation
Sans:style=Bold",size=50,valign="center",halign="center");
}
module inround(){
difference(){
d=40;
r=20;
square(d,true);
translate([-r,-r])circle(d=d);
translate([-r,+r])circle(d=d);
translate([+r,-r])circle(d=d);
translate([+r,+r])circle(d=d);
}
}
module inframe(){
difference(){
square([220,80],true);
translate([-110,-40])inround();
translate([-110,+40])inround();
translate([+110,-40])inround();
translate([+110,+40])inround();
}
}
module frame(){
difference(){
offset(r=10) inframe();
inframe();
}
}
module base(){
linear_extrude(5){
offset(r=10) inframe();
}
}
base();
linear_extrude(10){
frame();
name();
}
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
I made it parametric, with customizer, and did a quick test print. -
On 03/05/2024 10:33, Raymond West via Discuss wrote:
Thanks Revar,
Just what I needed. I realise now that I created a sort of x y
problem for myself, having always used a sphere for rounding edges
with Minkowski, I'd completely forgotten that other solids were
possible, never mind hull for corner rounded squares. 🙁
Best wishes,
Ray
Normally if you are casting, sharp corners will always create problem.
Draft and fillets needs to be provided to avoid scoring, sticking and metal
filling issues.
For one off castings maybe fine though.
Regards
On Sat, 4 May, 2024, 1:07 am Raymond West via Discuss, <
discuss@lists.openscad.org> wrote:
I made it parametric, with customizer, and did a quick test print. -
On 03/05/2024 10:33, Raymond West via Discuss wrote:
Thanks Revar,
Just what I needed. I realise now that I created a sort of x y problem
for myself, having always used a sphere for rounding edges with Minkowski,
I'd completely forgotten that other solids were possible, never mind hull
for corner rounded squares. 🙁
Best wishes,
Ray
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org