discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

rounding an edge

JB
Jon Bondy
Fri, Dec 26, 2025 9:39 PM

Is there an easy way to round the internal top edge of this shape?  I
looked at BOSL2 but gave up.  Code is below.

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

module DishShape2D()
    hull() {
        scale([1, sc])
            circle(d = dw);
        translate([-dw/2, 0])
            square([dw, dd - sc*dw/2]);
        }

linear_extrude(dh, convexity = 20)
    difference() {
        DishShape2D();
        offset(ds) offset(-ds) offset(-ds)
            DishShape2D();
        }

--
This email has been checked for viruses by AVG antivirus software.
www.avg.com

Is there an easy way to round the internal top edge of this shape?  I looked at BOSL2 but gave up.  Code is below. $fn = 120; bw = 60; bd = 100; ds = 5; dw = bw + 2*ds; dd = bd + 20; dh = 25; sc = 0.5; module DishShape2D()     hull() {         scale([1, sc])             circle(d = dw);         translate([-dw/2, 0])             square([dw, dd - sc*dw/2]);         } linear_extrude(dh, convexity = 20)     difference() {         DishShape2D();         offset(ds) offset(-ds) offset(-ds)             DishShape2D();         } -- This email has been checked for viruses by AVG antivirus software. www.avg.com
DP
Dan Perry
Fri, Dec 26, 2025 10:39 PM

The short answer is to use path_sweep with mask2d_roundover().  But there's
more to it as you can see below.
Dan

include <BOSL2/std.scad>

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

DishShape2D = union(
scale([1, sc], circle(d = dw)),
translate([-dw/2, 0], square([dw, dd - sc*dw/2]))
);

difference() {
linear_extrude(dh, convexity = 20)
region(difference(
DishShape2D,
offset(
offset(
offset(DishShape2D, delta=-ds, closed=true),
delta=-ds, closed=true),
delta=ds, closed=true)
));
up(dh) path_sweep(
mask2d_roundover(r=1, spin=180), DishShape2D, closed=true);

}

On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss <
discuss@lists.openscad.org> wrote:

Is there an easy way to round the internal top edge of this shape?  I
looked at BOSL2 but gave up.  Code is below.

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

module DishShape2D()
hull() {
scale([1, sc])
circle(d = dw);
translate([-dw/2, 0])
square([dw, dd - sc*dw/2]);
}

linear_extrude(dh, convexity = 20)
difference() {
DishShape2D();
offset(ds) offset(-ds) offset(-ds)
DishShape2D();
}

http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
Virus-free.www.avg.com
http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
<#m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

The short answer is to use path_sweep with mask2d_roundover(). But there's more to it as you can see below. Dan include <BOSL2/std.scad> $fn = 120; bw = 60; bd = 100; ds = 5; dw = bw + 2*ds; dd = bd + 20; dh = 25; sc = 0.5; DishShape2D = union( scale([1, sc], circle(d = dw)), translate([-dw/2, 0], square([dw, dd - sc*dw/2])) ); difference() { linear_extrude(dh, convexity = 20) region(difference( DishShape2D, offset( offset( offset(DishShape2D, delta=-ds, closed=true), delta=-ds, closed=true), delta=ds, closed=true) )); up(dh) path_sweep( mask2d_roundover(r=1, spin=180), DishShape2D, closed=true); } On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss < discuss@lists.openscad.org> wrote: > Is there an easy way to round the internal top edge of this shape? I > looked at BOSL2 but gave up. Code is below. > > > > $fn = 120; > > bw = 60; > bd = 100; > > ds = 5; > dw = bw + 2*ds; > dd = bd + 20; > dh = 25; > > sc = 0.5; > > module DishShape2D() > hull() { > scale([1, sc]) > circle(d = dw); > translate([-dw/2, 0]) > square([dw, dd - sc*dw/2]); > } > > linear_extrude(dh, convexity = 20) > difference() { > DishShape2D(); > offset(ds) offset(-ds) offset(-ds) > DishShape2D(); > } > > > > <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > Virus-free.www.avg.com > <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > <#m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org
AM
Adrian Mariano
Fri, Dec 26, 2025 11:24 PM

I would do this using BOSL2 offset_sweep, which I think is going to be
easier than using path_sweep.

On Fri, Dec 26, 2025 at 5:39 PM Dan Perry via Discuss <
discuss@lists.openscad.org> wrote:

The short answer is to use path_sweep with mask2d_roundover().  But
there's more to it as you can see below.
Dan

include <BOSL2/std.scad>

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

DishShape2D = union(
scale([1, sc], circle(d = dw)),
translate([-dw/2, 0], square([dw, dd - sc*dw/2]))
);

difference() {
linear_extrude(dh, convexity = 20)
region(difference(
DishShape2D,
offset(
offset(
offset(DishShape2D, delta=-ds, closed=true),
delta=-ds, closed=true),
delta=ds, closed=true)
));
up(dh) path_sweep(
mask2d_roundover(r=1, spin=180), DishShape2D, closed=true);

}

On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss <
discuss@lists.openscad.org> wrote:

Is there an easy way to round the internal top edge of this shape?  I
looked at BOSL2 but gave up.  Code is below.

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

module DishShape2D()
hull() {
scale([1, sc])
circle(d = dw);
translate([-dw/2, 0])
square([dw, dd - sc*dw/2]);
}

linear_extrude(dh, convexity = 20)
difference() {
DishShape2D();
offset(ds) offset(-ds) offset(-ds)
DishShape2D();
}

http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
Virus-free.www.avg.com
http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
<#m_-5390212294840308511_m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

I would do this using BOSL2 offset_sweep, which I think is going to be easier than using path_sweep. On Fri, Dec 26, 2025 at 5:39 PM Dan Perry via Discuss < discuss@lists.openscad.org> wrote: > The short answer is to use path_sweep with mask2d_roundover(). But > there's more to it as you can see below. > Dan > > > include <BOSL2/std.scad> > > $fn = 120; > > bw = 60; > bd = 100; > > ds = 5; > dw = bw + 2*ds; > dd = bd + 20; > dh = 25; > > sc = 0.5; > > DishShape2D = union( > scale([1, sc], circle(d = dw)), > translate([-dw/2, 0], square([dw, dd - sc*dw/2])) > ); > > difference() { > linear_extrude(dh, convexity = 20) > region(difference( > DishShape2D, > offset( > offset( > offset(DishShape2D, delta=-ds, closed=true), > delta=-ds, closed=true), > delta=ds, closed=true) > )); > up(dh) path_sweep( > mask2d_roundover(r=1, spin=180), DishShape2D, closed=true); > > } > > On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss < > discuss@lists.openscad.org> wrote: > >> Is there an easy way to round the internal top edge of this shape? I >> looked at BOSL2 but gave up. Code is below. >> >> >> >> $fn = 120; >> >> bw = 60; >> bd = 100; >> >> ds = 5; >> dw = bw + 2*ds; >> dd = bd + 20; >> dh = 25; >> >> sc = 0.5; >> >> module DishShape2D() >> hull() { >> scale([1, sc]) >> circle(d = dw); >> translate([-dw/2, 0]) >> square([dw, dd - sc*dw/2]); >> } >> >> linear_extrude(dh, convexity = 20) >> difference() { >> DishShape2D(); >> offset(ds) offset(-ds) offset(-ds) >> DishShape2D(); >> } >> >> >> >> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> >> Virus-free.www.avg.com >> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> >> <#m_-5390212294840308511_m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >> _______________________________________________ >> OpenSCAD mailing list >> To unsubscribe send an email to discuss-leave@lists.openscad.org > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org
TA
Todd Allen
Sat, Dec 27, 2025 2:13 AM

It was easy for me to do this with hull_join() which I have been discussing
in another thread.  Here I'm using a new helper module based on minkowski
which eliminates the need to calculate scaling parameters for precise join
size and shape.
[image: dish.png]

include <hull_join.scad>

$fn = 120;
eps = 0.001;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;
rounding = 3;

module DishShape2D()
hull() {
scale([1, sc])
circle(d = dw);
translate([-dw/2, 0])
square([dw, dd - sc*dw/2]);
}

module DishCore() {
linear_extrude(dh+2*eps, convexity = 20)
offset(ds) offset(-ds) offset(-ds) DishShape2D();
}

module RoundedDishCore() {
// a plate on top of DishCore() with a rounded join
hull_join(iterations=24, children=true) {
translate([-dw,-bd0.5,dh])
hj_minkowski_cube(2
rounding)
cube([dw2,bd2,1]);    // A plate significantly bigger
than DishCore()
hj_minkowski_cube(2*rounding) DishCore();
}
}

difference() {
linear_extrude(dh, convexity = 20) DishShape2D();
translate([0,0,-eps]) RoundedDishCore();
}

// ******************************  hull_join.scad


/*
Hulled joining of children objects
Hulls child pairs limited to intersections of each child with scaled partner

Each child object needs hj_scale(scale_vector, center_point=[0,0,0])
or hjt_scale() as a parent to control its scaling for the hull_join()
operation.

Scale vector and optional center point of scaling passed to
hj_scale() or hjt_scale() of each child control the size and angle of
joints.

When used with BOSL2:
After an object producing module invocation to which we want to apply
hull_join()
use let(child_t=transform()) to capture transformations produced by
parameters such
as anchor, spin and orient.  When reproducing this object as a child of
hull_join()
suppress transformation generating parameters as they will be applied in
hjt_scale()
by passing it the captured transformation matrix as shown in the examples.

pairs = specifies which pairs of children to join
"chain" : [0,1], [1,2], [2,3], ... [n-2, n-1]
"loop" : [0,1], [1,2], [2,3], ... [n-2, n-1], [n-1, 0]
"first" : [0,1], [0,2], [0,3], ... [0, n-1]
"all" : all pairs
*/
$hj_scale=0;
function get_pairs_chain(n) = [for(i=[0:n-2]) [i,i+1]];
function get_pairs_loop(n) = [for(i=[0:n-2]) [i,i+1], [n-1,0]];
function get_pairs_first(n) = [for(i=[1:n-1]) [0,i]];
function get_pairs_all(n) = [for(i=[0:n-2]) for(j=[i+1:n-1]) [i,j]];
module hull_join(iterations=1, pairs="chain", children=false) {
assert($children > 1, "hull_join() requires 2 or more children");
union() {
if(children)
children();
pairlist =
pairs=="chain" ? get_pairs_chain($children) :
pairs=="loop" ? get_pairs_loop($children) :
pairs=="first" ? get_pairs_first($children) :
pairs=="all" ? get_pairs_all($children) :
assert(false,"hulled_join(): invalid pairs parameter.");
for(si=[0:1:iterations-1]) for(pair = pairlist) hull() {
intersection() {
children(pair[0], $hj_scale=0);
children(pair[1], $hj_scale=(si+1)/iterations);
}
intersection() {
children(pair[0], $hj_scale=(iterations-si)/iterations);
children(pair[1], $hj_scale=0);
}
}
}
}

// returns a scale vector to resize something of a given size by an offset
// assumes scaling about a center point, thus 2.0offset to offset in each
direction
function hj_get_scale_for_offset(size, offset) = [
1.0 + 2.0
offset.x/size.x,
1.0 + 2.0offset.y/size.y,
1.0 + 2.0
offset.z/size.z
];

// controlled scaling about a center point of a child of hulled_join()
module hj_scale(scale_vector, center_point=[0,0,0]) {
if ($hj_scale) {
sv = [
1+$hj_scale*(scale_vector.x-1),
1+$hj_scale*(scale_vector.y-1),
1+$hj_scale*(scale_vector.z-1)
];
if(center_point.x || center_point.y || center_point.z)
// optimizable to a single translation?
translate(center_point) scale(sv) translate(-1*center_point)
children();
else
scale(sv) children();
}
else children();
}

module hj_minkowski_sphere(r) {
if ($hj_scale) {
minkowski() {
sphere($hj_scale*r);
children();
}
}
else children();
}

module hj_minkowski_cube(size) {
if ($hj_scale) {
minkowski() {
cube($hj_scale*size,center=true);
children();
}
}
else children();
}

function transform() = $transform;

// controlled scaling about a center point of a BOSL2 child of hulled_join()
module hjt_scale(transform, scale_vector, center_point=[0,0,0]) {
if ($hj_scale) {
s = [
1+$hj_scale*(scale_vector.x-1),
1+$hj_scale*(scale_vector.y-1),
1+$hj_scale*(scale_vector.z-1)
];
scaled = (center_point.x || center_point.y || center_point.z) ?
transform * move(center_point) * scale(s) * move(-center_point)
:
transform * scale(s);
multmatrix(scaled) children();
}
else multmatrix(transform) children();
}

On Fri, Dec 26, 2025 at 5:25 PM Adrian Mariano via Discuss <
discuss@lists.openscad.org> wrote:

I would do this using BOSL2 offset_sweep, which I think is going to be
easier than using path_sweep.

On Fri, Dec 26, 2025 at 5:39 PM Dan Perry via Discuss <
discuss@lists.openscad.org> wrote:

The short answer is to use path_sweep with mask2d_roundover().  But
there's more to it as you can see below.
Dan

include <BOSL2/std.scad>

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

DishShape2D = union(
scale([1, sc], circle(d = dw)),
translate([-dw/2, 0], square([dw, dd - sc*dw/2]))
);

difference() {
linear_extrude(dh, convexity = 20)
region(difference(
DishShape2D,
offset(
offset(
offset(DishShape2D, delta=-ds, closed=true),
delta=-ds, closed=true),
delta=ds, closed=true)
));
up(dh) path_sweep(
mask2d_roundover(r=1, spin=180), DishShape2D, closed=true);

}

On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss <
discuss@lists.openscad.org> wrote:

Is there an easy way to round the internal top edge of this shape?  I
looked at BOSL2 but gave up.  Code is below.

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

module DishShape2D()
hull() {
scale([1, sc])
circle(d = dw);
translate([-dw/2, 0])
square([dw, dd - sc*dw/2]);
}

linear_extrude(dh, convexity = 20)
difference() {
DishShape2D();
offset(ds) offset(-ds) offset(-ds)
DishShape2D();
}

http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
Virus-free.www.avg.com
http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
<#m_-4568529398012529332_m_-5390212294840308511_m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

It was easy for me to do this with hull_join() which I have been discussing in another thread. Here I'm using a new helper module based on minkowski which eliminates the need to calculate scaling parameters for precise join size and shape. [image: dish.png] include <hull_join.scad> $fn = 120; eps = 0.001; bw = 60; bd = 100; ds = 5; dw = bw + 2*ds; dd = bd + 20; dh = 25; sc = 0.5; rounding = 3; module DishShape2D() hull() { scale([1, sc]) circle(d = dw); translate([-dw/2, 0]) square([dw, dd - sc*dw/2]); } module DishCore() { linear_extrude(dh+2*eps, convexity = 20) offset(ds) offset(-ds) offset(-ds) DishShape2D(); } module RoundedDishCore() { // a plate on top of DishCore() with a rounded join hull_join(iterations=24, children=true) { translate([-dw,-bd*0.5,dh]) hj_minkowski_cube(2*rounding) cube([dw*2,bd*2,1]); // A plate significantly bigger than DishCore() hj_minkowski_cube(2*rounding) DishCore(); } } difference() { linear_extrude(dh, convexity = 20) DishShape2D(); translate([0,0,-eps]) RoundedDishCore(); } // ****************************** hull_join.scad ****************************** /* Hulled joining of children objects Hulls child pairs limited to intersections of each child with scaled partner Each child object needs hj_scale(scale_vector, center_point=[0,0,0]) or hjt_scale() as a parent to control its scaling for the hull_join() operation. Scale vector and optional center point of scaling passed to hj_scale() or hjt_scale() of each child control the size and angle of joints. When used with BOSL2: After an object producing module invocation to which we want to apply hull_join() use let(child_t=transform()) to capture transformations produced by parameters such as anchor, spin and orient. When reproducing this object as a child of hull_join() suppress transformation generating parameters as they will be applied in hjt_scale() by passing it the captured transformation matrix as shown in the examples. pairs = specifies which pairs of children to join "chain" : [0,1], [1,2], [2,3], ... [n-2, n-1] "loop" : [0,1], [1,2], [2,3], ... [n-2, n-1], [n-1, 0] "first" : [0,1], [0,2], [0,3], ... [0, n-1] "all" : all pairs */ $hj_scale=0; function get_pairs_chain(n) = [for(i=[0:n-2]) [i,i+1]]; function get_pairs_loop(n) = [for(i=[0:n-2]) [i,i+1], [n-1,0]]; function get_pairs_first(n) = [for(i=[1:n-1]) [0,i]]; function get_pairs_all(n) = [for(i=[0:n-2]) for(j=[i+1:n-1]) [i,j]]; module hull_join(iterations=1, pairs="chain", children=false) { assert($children > 1, "hull_join() requires 2 or more children"); union() { if(children) children(); pairlist = pairs=="chain" ? get_pairs_chain($children) : pairs=="loop" ? get_pairs_loop($children) : pairs=="first" ? get_pairs_first($children) : pairs=="all" ? get_pairs_all($children) : assert(false,"hulled_join(): invalid pairs parameter."); for(si=[0:1:iterations-1]) for(pair = pairlist) hull() { intersection() { children(pair[0], $hj_scale=0); children(pair[1], $hj_scale=(si+1)/iterations); } intersection() { children(pair[0], $hj_scale=(iterations-si)/iterations); children(pair[1], $hj_scale=0); } } } } // returns a scale vector to resize something of a given size by an offset // assumes scaling about a center point, thus 2.0*offset to offset in each direction function hj_get_scale_for_offset(size, offset) = [ 1.0 + 2.0*offset.x/size.x, 1.0 + 2.0*offset.y/size.y, 1.0 + 2.0*offset.z/size.z ]; // controlled scaling about a center point of a child of hulled_join() module hj_scale(scale_vector, center_point=[0,0,0]) { if ($hj_scale) { sv = [ 1+$hj_scale*(scale_vector.x-1), 1+$hj_scale*(scale_vector.y-1), 1+$hj_scale*(scale_vector.z-1) ]; if(center_point.x || center_point.y || center_point.z) // optimizable to a single translation? translate(center_point) scale(sv) translate(-1*center_point) children(); else scale(sv) children(); } else children(); } module hj_minkowski_sphere(r) { if ($hj_scale) { minkowski() { sphere($hj_scale*r); children(); } } else children(); } module hj_minkowski_cube(size) { if ($hj_scale) { minkowski() { cube($hj_scale*size,center=true); children(); } } else children(); } function transform() = $transform; // controlled scaling about a center point of a BOSL2 child of hulled_join() module hjt_scale(transform, scale_vector, center_point=[0,0,0]) { if ($hj_scale) { s = [ 1+$hj_scale*(scale_vector.x-1), 1+$hj_scale*(scale_vector.y-1), 1+$hj_scale*(scale_vector.z-1) ]; scaled = (center_point.x || center_point.y || center_point.z) ? transform * move(center_point) * scale(s) * move(-center_point) : transform * scale(s); multmatrix(scaled) children(); } else multmatrix(transform) children(); } On Fri, Dec 26, 2025 at 5:25 PM Adrian Mariano via Discuss < discuss@lists.openscad.org> wrote: > I would do this using BOSL2 offset_sweep, which I think is going to be > easier than using path_sweep. > > On Fri, Dec 26, 2025 at 5:39 PM Dan Perry via Discuss < > discuss@lists.openscad.org> wrote: > >> The short answer is to use path_sweep with mask2d_roundover(). But >> there's more to it as you can see below. >> Dan >> >> >> include <BOSL2/std.scad> >> >> $fn = 120; >> >> bw = 60; >> bd = 100; >> >> ds = 5; >> dw = bw + 2*ds; >> dd = bd + 20; >> dh = 25; >> >> sc = 0.5; >> >> DishShape2D = union( >> scale([1, sc], circle(d = dw)), >> translate([-dw/2, 0], square([dw, dd - sc*dw/2])) >> ); >> >> difference() { >> linear_extrude(dh, convexity = 20) >> region(difference( >> DishShape2D, >> offset( >> offset( >> offset(DishShape2D, delta=-ds, closed=true), >> delta=-ds, closed=true), >> delta=ds, closed=true) >> )); >> up(dh) path_sweep( >> mask2d_roundover(r=1, spin=180), DishShape2D, closed=true); >> >> } >> >> On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss < >> discuss@lists.openscad.org> wrote: >> >>> Is there an easy way to round the internal top edge of this shape? I >>> looked at BOSL2 but gave up. Code is below. >>> >>> >>> >>> $fn = 120; >>> >>> bw = 60; >>> bd = 100; >>> >>> ds = 5; >>> dw = bw + 2*ds; >>> dd = bd + 20; >>> dh = 25; >>> >>> sc = 0.5; >>> >>> module DishShape2D() >>> hull() { >>> scale([1, sc]) >>> circle(d = dw); >>> translate([-dw/2, 0]) >>> square([dw, dd - sc*dw/2]); >>> } >>> >>> linear_extrude(dh, convexity = 20) >>> difference() { >>> DishShape2D(); >>> offset(ds) offset(-ds) offset(-ds) >>> DishShape2D(); >>> } >>> >>> >>> >>> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> >>> Virus-free.www.avg.com >>> <http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> >>> <#m_-4568529398012529332_m_-5390212294840308511_m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>> _______________________________________________ >>> OpenSCAD mailing list >>> To unsubscribe send an email to discuss-leave@lists.openscad.org >> >> _______________________________________________ >> OpenSCAD mailing list >> To unsubscribe send an email to discuss-leave@lists.openscad.org > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org
JB
Jon Bondy
Sat, Dec 27, 2025 12:57 PM

Thank you, Dan.  That works quite well.

However, what I wanted was to round the interior, not the exterior.  I
looked at the documentation for mask2d_roundover() and did not see a way
to apply it differently to my "hollow" shape.

Jon

On 12/26/2025 5:39 PM, Dan Perry via Discuss wrote:

The short answer is to use path_sweep with mask2d_roundover().  But
there's more to it as you can see below.
Dan

include <BOSL2/std.scad>

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

DishShape2D = union(
    scale([1, sc], circle(d = dw)),
    translate([-dw/2, 0], square([dw, dd - sc*dw/2]))
);

difference() {
linear_extrude(dh, convexity = 20)
    region(difference(
        DishShape2D,
        offset(
            offset(
                offset(DishShape2D, delta=-ds, closed=true),
                delta=-ds, closed=true),
            delta=ds, closed=true)
    ));
    up(dh) path_sweep(
        mask2d_roundover(r=1, spin=180), DishShape2D, closed=true);

}

On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss
discuss@lists.openscad.org wrote:

 Is there an easy way to round the internal top edge of this
 shape?  I looked at BOSL2 but gave up.  Code is below.



 $fn = 120;

 bw = 60;
 bd = 100;

 ds = 5;
 dw = bw + 2*ds;
 dd = bd + 20;
 dh = 25;

 sc = 0.5;

 module DishShape2D()
     hull() {
         scale([1, sc])
             circle(d = dw);
         translate([-dw/2, 0])
             square([dw, dd - sc*dw/2]);
         }

 linear_extrude(dh, convexity = 20)
     difference() {
         DishShape2D();
         offset(ds) offset(-ds) offset(-ds)
             DishShape2D();
         }


 <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=>
 	Virus-free.www.avg.com
 <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=>


 <#m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
 _______________________________________________
 OpenSCAD mailing list
 To unsubscribe send an email to discuss-leave@lists.openscad.org

OpenSCAD mailing list
To unsubscribe send an email todiscuss-leave@lists.openscad.org

--
This email has been checked for viruses by AVG antivirus software.
www.avg.com

Thank you, Dan.  That works quite well. However, what I wanted was to round the interior, not the exterior.  I looked at the documentation for mask2d_roundover() and did not see a way to apply it differently to my "hollow" shape. Jon On 12/26/2025 5:39 PM, Dan Perry via Discuss wrote: > The short answer is to use path_sweep with mask2d_roundover().  But > there's more to it as you can see below. > Dan > > > include <BOSL2/std.scad> > > $fn = 120; > > bw = 60; > bd = 100; > > ds = 5; > dw = bw + 2*ds; > dd = bd + 20; > dh = 25; > > sc = 0.5; > > DishShape2D = union( >     scale([1, sc], circle(d = dw)), >     translate([-dw/2, 0], square([dw, dd - sc*dw/2])) > ); > > difference() { > linear_extrude(dh, convexity = 20) >     region(difference( >         DishShape2D, >         offset( >             offset( >                 offset(DishShape2D, delta=-ds, closed=true), >                 delta=-ds, closed=true), >             delta=ds, closed=true) >     )); >     up(dh) path_sweep( >         mask2d_roundover(r=1, spin=180), DishShape2D, closed=true); > > } > > On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss > <discuss@lists.openscad.org> wrote: > > Is there an easy way to round the internal top edge of this > shape?  I looked at BOSL2 but gave up.  Code is below. > > > > $fn = 120; > > bw = 60; > bd = 100; > > ds = 5; > dw = bw + 2*ds; > dd = bd + 20; > dh = 25; > > sc = 0.5; > > module DishShape2D() >     hull() { >         scale([1, sc]) >             circle(d = dw); >         translate([-dw/2, 0]) >             square([dw, dd - sc*dw/2]); >         } > > linear_extrude(dh, convexity = 20) >     difference() { >         DishShape2D(); >         offset(ds) offset(-ds) offset(-ds) >             DishShape2D(); >         } > > > <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=> > Virus-free.www.avg.com > <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=> > > > <#m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email todiscuss-leave@lists.openscad.org -- This email has been checked for viruses by AVG antivirus software. www.avg.com
JJ
jon jonbondy.com
Sat, Dec 27, 2025 1:16 PM

Never mind.  Got it.  Make another shape for the interior and do the path_sweep() with a spin of 270.

On 12/27/2025 7:57 AM, Jon Bondy via Discuss wrote:

Thank you, Dan.  That works quite well.

However, what I wanted was to round the interior, not the exterior.  I looked at the documentation for mask2d_roundover() and did not see a way to apply it differently to my "hollow" shape.

Jon

On 12/26/2025 5:39 PM, Dan Perry via Discuss wrote:
The short answer is to use path_sweep with mask2d_roundover().  But there's more to it as you can see below.
Dan

include <BOSL2/std.scad>

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

DishShape2D = union(
scale([1, sc], circle(d = dw)),
translate([-dw/2, 0], square([dw, dd - sc*dw/2]))
);

difference() {
linear_extrude(dh, convexity = 20)
region(difference(
DishShape2D,
offset(
offset(
offset(DishShape2D, delta=-ds, closed=true),
delta=-ds, closed=true),
delta=ds, closed=true)
));
up(dh) path_sweep(
mask2d_roundover(r=1, spin=180), DishShape2D, closed=true);

}

On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss <discuss@lists.openscad.orgmailto:discuss@lists.openscad.org> wrote:

Is there an easy way to round the internal top edge of this shape?  I looked at BOSL2 but gave up.  Code is below.

[cid:part1.g7wB0TBw.ieqzOv8z@jonbondy.com]

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

module DishShape2D()
hull() {
scale([1, sc])
circle(d = dw);
translate([-dw/2, 0])
square([dw, dd - sc*dw/2]);
}

linear_extrude(dh, convexity = 20)
difference() {
DishShape2D();
offset(ds) offset(-ds) offset(-ds)
DishShape2D();
}

[https://s-install.avcdn.net/ipm/preview/icons/icon-envelope-tick-green-avg-v1.png]https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=      Virus-free.www.avg.comhttps://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.orgmailto:discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.orgmailto:discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.orgmailto:discuss-leave@lists.openscad.org

Never mind. Got it. Make another shape for the interior and do the path_sweep() with a spin of 270. On 12/27/2025 7:57 AM, Jon Bondy via Discuss wrote: Thank you, Dan. That works quite well. However, what I wanted was to round the interior, not the exterior. I looked at the documentation for mask2d_roundover() and did not see a way to apply it differently to my "hollow" shape. Jon On 12/26/2025 5:39 PM, Dan Perry via Discuss wrote: The short answer is to use path_sweep with mask2d_roundover(). But there's more to it as you can see below. Dan include <BOSL2/std.scad> $fn = 120; bw = 60; bd = 100; ds = 5; dw = bw + 2*ds; dd = bd + 20; dh = 25; sc = 0.5; DishShape2D = union( scale([1, sc], circle(d = dw)), translate([-dw/2, 0], square([dw, dd - sc*dw/2])) ); difference() { linear_extrude(dh, convexity = 20) region(difference( DishShape2D, offset( offset( offset(DishShape2D, delta=-ds, closed=true), delta=-ds, closed=true), delta=ds, closed=true) )); up(dh) path_sweep( mask2d_roundover(r=1, spin=180), DishShape2D, closed=true); } On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss <discuss@lists.openscad.org<mailto:discuss@lists.openscad.org>> wrote: Is there an easy way to round the internal top edge of this shape? I looked at BOSL2 but gave up. Code is below. [cid:part1.g7wB0TBw.ieqzOv8z@jonbondy.com] $fn = 120; bw = 60; bd = 100; ds = 5; dw = bw + 2*ds; dd = bd + 20; dh = 25; sc = 0.5; module DishShape2D() hull() { scale([1, sc]) circle(d = dw); translate([-dw/2, 0]) square([dw, dd - sc*dw/2]); } linear_extrude(dh, convexity = 20) difference() { DishShape2D(); offset(ds) offset(-ds) offset(-ds) DishShape2D(); } [https://s-install.avcdn.net/ipm/preview/icons/icon-envelope-tick-green-avg-v1.png]<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=> Virus-free.www.avg.com<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=> _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to discuss-leave@lists.openscad.org<mailto:discuss-leave@lists.openscad.org> _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to discuss-leave@lists.openscad.org<mailto:discuss-leave@lists.openscad.org> _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to discuss-leave@lists.openscad.org<mailto:discuss-leave@lists.openscad.org>
AM
Adrian Mariano
Sat, Jan 3, 2026 1:02 AM

Here's how to do it using offset_sweep:

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

function DishShape2D() =
hull_region(concat(
yscale(sc, circle(d = dw)),
rect([dw, dd - sc*dw/2],anchor=FWD)
)
);

inside = offset(offset(DishShape2D(),-ds*2),r=ds);

difference() {
linear_sweep(DishShape2D(),height=dh);
offset_sweep(inside, height=dh, top=os_circle(r=-3),extra=1);
}

On Sat, Dec 27, 2025 at 8:17 AM jon jonbondy.com via Discuss <
discuss@lists.openscad.org> wrote:

Never mind.  Got it.  Make another shape for the interior and do the
path_sweep() with a spin of 270.

On 12/27/2025 7:57 AM, Jon Bondy via Discuss wrote:

Thank you, Dan.  That works quite well.

However, what I wanted was to round the interior, not the exterior.  I
looked at the documentation for mask2d_roundover() and did not see a way to
apply it differently to my "hollow" shape.

Jon

On 12/26/2025 5:39 PM, Dan Perry via Discuss wrote:

The short answer is to use path_sweep with mask2d_roundover().  But
there's more to it as you can see below.
Dan

include <BOSL2/std.scad>

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

DishShape2D = union(
scale([1, sc], circle(d = dw)),
translate([-dw/2, 0], square([dw, dd - sc*dw/2]))
);

difference() {
linear_extrude(dh, convexity = 20)
region(difference(
DishShape2D,
offset(
offset(
offset(DishShape2D, delta=-ds, closed=true),
delta=-ds, closed=true),
delta=ds, closed=true)
));
up(dh) path_sweep(
mask2d_roundover(r=1, spin=180), DishShape2D, closed=true);

}

On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss <
discuss@lists.openscad.org> wrote:

Is there an easy way to round the internal top edge of this shape?  I
looked at BOSL2 but gave up.  Code is below.

$fn = 120;

bw = 60;
bd = 100;

ds = 5;
dw = bw + 2*ds;
dd = bd + 20;
dh = 25;

sc = 0.5;

module DishShape2D()
hull() {
scale([1, sc])
circle(d = dw);
translate([-dw/2, 0])
square([dw, dd - sc*dw/2]);
}

linear_extrude(dh, convexity = 20)
difference() {
DishShape2D();
offset(ds) offset(-ds) offset(-ds)
DishShape2D();
}

https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=
Virus-free.www.avg.com
https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=
<#m_8367091939175187422_m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

Here's how to do it using offset_sweep: $fn = 120; bw = 60; bd = 100; ds = 5; dw = bw + 2*ds; dd = bd + 20; dh = 25; sc = 0.5; function DishShape2D() = hull_region(concat( yscale(sc, circle(d = dw)), rect([dw, dd - sc*dw/2],anchor=FWD) ) ); inside = offset(offset(DishShape2D(),-ds*2),r=ds); difference() { linear_sweep(DishShape2D(),height=dh); offset_sweep(inside, height=dh, top=os_circle(r=-3),extra=1); } On Sat, Dec 27, 2025 at 8:17 AM jon jonbondy.com via Discuss < discuss@lists.openscad.org> wrote: > Never mind. Got it. Make another shape for the interior and do the > path_sweep() with a spin of 270. > > > On 12/27/2025 7:57 AM, Jon Bondy via Discuss wrote: > > Thank you, Dan. That works quite well. > > However, what I wanted was to round the interior, not the exterior. I > looked at the documentation for mask2d_roundover() and did not see a way to > apply it differently to my "hollow" shape. > > Jon > > > On 12/26/2025 5:39 PM, Dan Perry via Discuss wrote: > > The short answer is to use path_sweep with mask2d_roundover(). But > there's more to it as you can see below. > Dan > > > include <BOSL2/std.scad> > > $fn = 120; > > bw = 60; > bd = 100; > > ds = 5; > dw = bw + 2*ds; > dd = bd + 20; > dh = 25; > > sc = 0.5; > > DishShape2D = union( > scale([1, sc], circle(d = dw)), > translate([-dw/2, 0], square([dw, dd - sc*dw/2])) > ); > > difference() { > linear_extrude(dh, convexity = 20) > region(difference( > DishShape2D, > offset( > offset( > offset(DishShape2D, delta=-ds, closed=true), > delta=-ds, closed=true), > delta=ds, closed=true) > )); > up(dh) path_sweep( > mask2d_roundover(r=1, spin=180), DishShape2D, closed=true); > > } > > On Fri, Dec 26, 2025 at 1:39 PM Jon Bondy via Discuss < > discuss@lists.openscad.org> wrote: > >> Is there an easy way to round the internal top edge of this shape? I >> looked at BOSL2 but gave up. Code is below. >> >> >> >> $fn = 120; >> >> bw = 60; >> bd = 100; >> >> ds = 5; >> dw = bw + 2*ds; >> dd = bd + 20; >> dh = 25; >> >> sc = 0.5; >> >> module DishShape2D() >> hull() { >> scale([1, sc]) >> circle(d = dw); >> translate([-dw/2, 0]) >> square([dw, dd - sc*dw/2]); >> } >> >> linear_extrude(dh, convexity = 20) >> difference() { >> DishShape2D(); >> offset(ds) offset(-ds) offset(-ds) >> DishShape2D(); >> } >> >> >> >> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=> >> Virus-free.www.avg.com >> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.avg.com_email-2Dsignature-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dlink-26utm-5Fcampaign-3Dsig-2Demail-26utm-5Fcontent-3Demailclient&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=GAJ5LInnmHEgVmQRgvm9H2NTOGectG4oO-7uWPjf1jKyrFn9beAAPB6-xLV6sRoV&s=HdfDDHEQxJ2JcW932SFLu81aJtRxXdBIKz3vvgIQCb0&e=> >> <#m_8367091939175187422_m_-3217382146105684572_m_-3516739280469875608_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >> _______________________________________________ >> OpenSCAD mailing list >> To unsubscribe send an email to discuss-leave@lists.openscad.org > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org