L
larry
Mon, Oct 12, 2026 9:50 PM
I managed to make a path from a projection using a python3 program
generated by ChatGTP, and want to extrude it such that it will be
rounded on the vertical edges and the top.
I tried offset_sweep, but was unable to get it working.
I can preview and render the 2D path.
Here's the first part of the polygon, but in case you need it, I've
attached the .scad file.
//
include <BOSL2/std.scad>
$fa=1;
$fs=1;
svg_shape();
module svg_shape() { // Generated from SVG using svg2scad.py
union() {
polygon(points=[
[8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
-69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
69.51286],[8.23194, -69.51107],[8.2466,include <BOSL2/std.scad>
$fa=1;
$fs=1;
svg_shape();
module svg_shape() { // Generated from SVG using svg2scad.py
union() {
polygon(points=[
[8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
-69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
69.51286],[8.23194, -69.51107],[8.2466,
//
Which sweep should I use?
Larry
I managed to make a path from a projection using a python3 program
generated by ChatGTP, and want to extrude it such that it will be
rounded on the vertical edges and the top.
I tried offset_sweep, but was unable to get it working.
I can preview and render the 2D path.
Here's the first part of the polygon, but in case you need it, I've
attached the .scad file.
//
include <BOSL2/std.scad>
$fa=1;
$fs=1;
svg_shape();
module svg_shape() { // Generated from SVG using svg2scad.py
union() {
polygon(points=[
[8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
-69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
69.51286],[8.23194, -69.51107],[8.2466,include <BOSL2/std.scad>
$fa=1;
$fs=1;
svg_shape();
module svg_shape() { // Generated from SVG using svg2scad.py
union() {
polygon(points=[
[8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
-69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
69.51286],[8.23194, -69.51107],[8.2466,
//
Which sweep should I use?
Larry
RW
Raymond West
Tue, Oct 13, 2026 1:07 PM
Hi Larry,
If your scad 2d is the shape you want to extrude and round then probably
the most succinct solution would be to use NopSCADlib.
Here is an example to do just that, if I understand your requirement
correctly.
Also, that 2d shape, could be generated in plain openscad, it looks like
a large circle with other small circles differenced around the
circumference.
Best wishes,
Ray
//
// NopSCADlib Copyright Chris Palmer 2018
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it
under the terms of the
// GNU General Public License as published by the Free Software
Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
along with NopSCADlib.
// If not, see https://www.gnu.org/licenses/.
//
include <../utils/core/core.scad>
use <../utils/round.scad>
module shape()
difference() {
square(40, center = true);
square([20, 20], center = true);
}
module rounds() {
linear_extrude(eps)
round(or = 4, ir = 2)
shape();
translate([50, 0])
round_3D(or = 4, ir = 2, chamfer_base = true, $fn = 16)
linear_extrude(40, center = true)
shape();
}
rounds();
On 12/10/2026 22:50, larry via Discuss wrote:
I managed to make a path from a projection using a python3 program
generated by ChatGTP, and want to extrude it such that it will be
rounded on the vertical edges and the top.
I tried offset_sweep, but was unable to get it working.
I can preview and render the 2D path.
Here's the first part of the polygon, but in case you need it, I've
attached the .scad file.
//
include <BOSL2/std.scad>
$fa=1;
$fs=1;
svg_shape();
module svg_shape() { // Generated from SVG using svg2scad.py
union() {
polygon(points=[
[8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
-69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
69.51286],[8.23194, -69.51107],[8.2466,include <BOSL2/std.scad>
$fa=1;
$fs=1;
svg_shape();
module svg_shape() { // Generated from SVG using svg2scad.py
union() {
polygon(points=[
[8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
-69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
69.51286],[8.23194, -69.51107],[8.2466,
//
Which sweep should I use?
Larry
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
Hi Larry,
If your scad 2d is the shape you want to extrude and round then probably
the most succinct solution would be to use NopSCADlib.
Here is an example to do just that, if I understand your requirement
correctly.
Also, that 2d shape, could be generated in plain openscad, it looks like
a large circle with other small circles differenced around the
circumference.
Best wishes,
Ray
//
// NopSCADlib Copyright Chris Palmer 2018
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it
under the terms of the
// GNU General Public License as published by the Free Software
Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../utils/core/core.scad>
use <../utils/round.scad>
module shape()
difference() {
square(40, center = true);
square([20, 20], center = true);
}
module rounds() {
linear_extrude(eps)
round(or = 4, ir = 2)
shape();
translate([50, 0])
round_3D(or = 4, ir = 2, chamfer_base = true, $fn = 16)
linear_extrude(40, center = true)
shape();
}
rounds();
On 12/10/2026 22:50, larry via Discuss wrote:
> I managed to make a path from a projection using a python3 program
> generated by ChatGTP, and want to extrude it such that it will be
> rounded on the vertical edges and the top.
>
> I tried offset_sweep, but was unable to get it working.
>
> I can preview and render the 2D path.
>
> Here's the first part of the polygon, but in case you need it, I've
> attached the .scad file.
>
> //
> include <BOSL2/std.scad>
> $fa=1;
> $fs=1;
>
> svg_shape();
>
> module svg_shape() { // Generated from SVG using svg2scad.py
> union() {
> polygon(points=[
> [8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
> -69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
> 69.51286],[8.23194, -69.51107],[8.2466,include <BOSL2/std.scad>
> $fa=1;
> $fs=1;
>
> svg_shape();
>
> module svg_shape() { // Generated from SVG using svg2scad.py
> union() {
> polygon(points=[
> [8.12935, -69.5236],[8.14401, -69.52181],[8.15866, -69.52002],[8.17332,
> -69.51823],[8.18797, -69.51644],[8.20263, -69.51465],[8.21729, -
> 69.51286],[8.23194, -69.51107],[8.2466,
> //
> Which sweep should I use?
>
> Larry
>
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
JB
Jordan Brown
Tue, Oct 13, 2026 8:20 PM
You want a more-or-less simple vertical extrusion, with round corners,
right?
So, given a shape like so:
you want something that looks like so:
Right?
rounded_prism() is your tool. It has a few more options for generating
different extrusions, but it fundamentally connects a polygon at the
bottom with a polygon with the same number of faces at the top, with
optional rounding.
If you want some other kind of extrusion, sweeping along a path, it's
not your tool.
https://github.com/BelfrySCAD/BOSL2/wiki/rounding.scad#functionmodule-rounded_prism
include <BOSL2/std.scad>
points = [
[0,0],
[20,0],
[7,7],
[0,20],
];
polygon(points);
right(25)
rounded_prism(points, height=5, joint_top=2, joint_bot=2, joint_sides=2);
You want a more-or-less simple vertical extrusion, with round corners,
right?
So, given a shape like so:
you want something that looks like so:
Right?
rounded_prism() is your tool. It has a few more options for generating
different extrusions, but it fundamentally connects a polygon at the
bottom with a polygon with the same number of faces at the top, with
optional rounding.
If you want some *other* kind of extrusion, sweeping along a path, it's
not your tool.
https://github.com/BelfrySCAD/BOSL2/wiki/rounding.scad#functionmodule-rounded_prism
include <BOSL2/std.scad>
points = [
[0,0],
[20,0],
[7,7],
[0,20],
];
polygon(points);
right(25)
rounded_prism(points, height=5, joint_top=2, joint_bot=2, joint_sides=2);
L
larry
Wed, Oct 14, 2026 8:24 AM
On Tue, 2026-10-13 at 13:20 -0700, Jordan Brown wrote:
You want a more-or-less simple vertical extrusion, with round
corners, right?
So, given a shape like so:
you want something that looks like so:
Right?
Yes, I need a flat bottom, but I can definitely manage that. I will be
putting this on a low cylinder, which can eat the rounded bottom
rounded_prism() is your tool. It has a few more options for
generating different extrusions, but it fundamentally connects a
polygon at the bottom with a polygon with the same number of faces at
the top, with optional rounding.
If you want some other kind of extrusion, sweeping along a path,
it's not your tool.
I was looking at something that looked like it extruded a star with a
rounded top. That was what I could not do with my path.
Thanks for the pointer!
include <BOSL2/std.scad>
points = [
[0,0],
[20,0],
[7,7],
[0,20],
];
polygon(points);
right(25)
rounded_prism(points, height=5, joint_top=2, joint_bot=2,
joint_sides=2);
On Tue, 2026-10-13 at 13:20 -0700, Jordan Brown wrote:
> You want a more-or-less simple vertical extrusion, with round
> corners, right?
>
> So, given a shape like so:
Yes that's about right.
> you want something that looks like so:
> Right?
Yes, I need a flat bottom, but I can definitely manage that. I will be
putting this on a low cylinder, which can eat the rounded bottom
>
> rounded_prism() is your tool. It has a few more options for
> generating different extrusions, but it fundamentally connects a
> polygon at the bottom with a polygon with the same number of faces at
> the top, with optional rounding.
Sounds good!
> If you want some *other* kind of extrusion, sweeping along a path,
> it's not your tool.
I was looking at something that looked like it extruded a star with a
rounded top. That was what I could not do with my path.
Thanks for the pointer!
> https://github.com/BelfrySCAD/BOSL2/wiki/rounding.scad#functionmodule-rounded_prism
>
>
> > include <BOSL2/std.scad>
> >
> > points = [
> > [0,0],
> > [20,0],
> > [7,7],
> > [0,20],
> > ];
> > polygon(points);
>
>
> > right(25)
> > rounded_prism(points, height=5, joint_top=2, joint_bot=2,
> > joint_sides=2);
>
JB
Jordan Brown
Wed, Oct 14, 2026 3:32 PM
On 10/14/2026 1:24 AM, larry wrote:
Yes, I need a flat bottom, but I can definitely manage that.
The joint_bot parameter controls the rounding on the bottom.
On 10/14/2026 1:24 AM, larry wrote:
> Yes, I need a flat bottom, but I can definitely manage that.
The joint_bot parameter controls the rounding on the bottom.
L
larry
Wed, Oct 14, 2026 4:59 PM
On Wed, 2026-10-14 at 08:32 -0700, Jordan Brown wrote:
On 10/14/2026 1:24 AM, larry wrote:
Yes, I need a flat bottom, but I can definitely manage that.
The joint_bot parameter controls the rounding on the bottom.
Figured that out from the code you sent, but I now have another
problem.
I get an error when I try to preview or render. It looks like the
points are messed up. As I mentioned, I used ChatGPT to convert from a
projection() to points, and in all likelihood it got that wrong.
I've attached the code I attempted. I don't really understand the error
message.
I don't mind building the path from a large circle, differenced with
small circles, but I have no idea how to make a polygon from that.
Larry
On Wed, 2026-10-14 at 08:32 -0700, Jordan Brown wrote:
> On 10/14/2026 1:24 AM, larry wrote:
> > Yes, I need a flat bottom, but I can definitely manage that.
>
> The joint_bot parameter controls the rounding on the bottom.
Figured that out from the code you sent, but I now have another
problem.
I get an error when I try to preview or render. It looks like the
points are messed up. As I mentioned, I used ChatGPT to convert from a
projection() to points, and in all likelihood it got that wrong.
I've attached the code I attempted. I don't really understand the error
message.
I don't mind building the path from a large circle, differenced with
small circles, but I have no idea how to make a polygon from that.
Larry
JB
Jordan Brown
Wed, Oct 14, 2026 5:21 PM
On 10/14/2026 9:59 AM, larry wrote:
I get an error when I try to preview or render. It looks like the
points are messed up. As I mentioned, I used ChatGPT to convert from a
projection() to points, and in all likelihood it got that wrong.
I've attached the code I attempted. I don't really understand the error
message.
I don't get an error previewing or rendering that file, on either
2021.01 or a development snapshot.
What message do you get?
I don't mind building the path from a large circle, differenced with
small circles, but I have no idea how to make a polygon from that.
A polygon, in the sense of a 2D shape, is easy: the result of the
difference is a polygon.
What you can't get from base OpenSCAD is a list of points, as would be
required for a sweep or rounded_prism().
BOSL2 can do 2D differences on its own, so you could do all of the
differencing "in user space" to yield a list of points.
Here's a demonstration, give or take the exact parameters.
include <BOSL2/std.scad>
$fa = 1;
$fs = 1;
bigR = 70;
smallCenter = 71;
smallR = 6;
nSmall = 15;
big = circle(r=bigR);
small = fwd(smallCenter, circle(r=smallR));
smalls = [ for (i = [0:nSmall-1]) zrot(i * 360/nSmall, small) ];
result = difference(big, smalls);
region(result);
Note that a BOSL2 "region" is a list of lists of points. (The result of
a difference needs to be such a list, because it might be multiple
shapes.) In this particular case, where we know that there's only one
shape, you could use polygon(result[0]);
On 10/14/2026 9:59 AM, larry wrote:
> I get an error when I try to preview or render. It looks like the
> points are messed up. As I mentioned, I used ChatGPT to convert from a
> projection() to points, and in all likelihood it got that wrong.
>
> I've attached the code I attempted. I don't really understand the error
> message.
I don't get an error previewing or rendering that file, on either
2021.01 or a development snapshot.
What message do you get?
> I don't mind building the path from a large circle, differenced with
> small circles, but I have no idea how to make a polygon from that.
A polygon, in the sense of a 2D shape, is easy: the result of the
difference *is* a polygon.
What you can't get from base OpenSCAD is a list of points, as would be
required for a sweep or rounded_prism().
BOSL2 can do 2D differences on its own, so you could do all of the
differencing "in user space" to yield a list of points.
Here's a demonstration, give or take the exact parameters.
include <BOSL2/std.scad>
$fa = 1;
$fs = 1;
bigR = 70;
smallCenter = 71;
smallR = 6;
nSmall = 15;
big = circle(r=bigR);
small = fwd(smallCenter, circle(r=smallR));
smalls = [ for (i = [0:nSmall-1]) zrot(i * 360/nSmall, small) ];
result = difference(big, smalls);
region(result);
Note that a BOSL2 "region" is a list of lists of points. (The result of
a difference needs to be such a list, because it might be multiple
shapes.) In this particular case, where we know that there's only one
shape, you could use polygon(result[0]);
L
larry
Wed, Oct 14, 2026 7:15 PM
On Wed, 2026-10-14 at 10:21 -0700, Jordan Brown wrote:
On 10/14/2026 9:59 AM, larry wrote:
I get an error when I try to preview or render. It looks like the
points are messed up. As I mentioned, I used ChatGPT to convert
from a
projection() to points, and in all likelihood it got that wrong.
I've attached the code I attempted. I don't really understand the
error
message.
I don't get an error previewing or rendering that file, on either
2021.01 or a development snapshot.
What message do you get?
I'm running OpenSCAD version 2026.08.03, and I get the attached.
I don't mind building the path from a large circle, differenced
with small circles, but I have no idea how to make a polygon from
that.
A polygon, in the sense of a 2D shape, is easy: the result of the
difference is a polygon.
What you can't get from base OpenSCAD is a list of points, as would
be required for a sweep or rounded_prism().
BOSL2 can do 2D differences on its own, so you could do all of the
differencing "in user space" to yield a list of points.
Here's a demonstration, give or take the exact parameters.
include <BOSL2/std.scad>
$fa = 1;
$fs = 1;
bigR = 70;
smallCenter = 71;
smallR = 6;
nSmall = 15;
big = circle(r=bigR);
small = fwd(smallCenter, circle(r=smallR));
smalls = [ for (i = [0:nSmall-1]) zrot(i * 360/nSmall, small) ];
result = difference(big, smalls);
region(result);
Note that a BOSL2 "region" is a list of lists of points. (The
result of a difference needs to be such a list, because it might be
multiple shapes.) In this particular case, where we know that
there's only one shape, you could use polygon(result[0]);
I'll have a look at this later.
Thanks Jordan.
On Wed, 2026-10-14 at 10:21 -0700, Jordan Brown wrote:
> On 10/14/2026 9:59 AM, larry wrote:
> > I get an error when I try to preview or render. It looks like the
> > points are messed up. As I mentioned, I used ChatGPT to convert
> > from a
> > projection() to points, and in all likelihood it got that wrong.
> > I've attached the code I attempted. I don't really understand the
> > error
> > message.
> I don't get an error previewing or rendering that file, on either
> 2021.01 or a development snapshot.
> What message do you get?
I'm running OpenSCAD version 2026.08.03, and I get the attached.
> > I don't mind building the path from a large circle, differenced
> > with small circles, but I have no idea how to make a polygon from
> > that.
>
> A polygon, in the sense of a 2D shape, is easy: the result of the
> difference *is* a polygon.
>
> What you can't get from base OpenSCAD is a list of points, as would
> be required for a sweep or rounded_prism().
>
> BOSL2 can do 2D differences on its own, so you could do all of the
> differencing "in user space" to yield a list of points.
>
> Here's a demonstration, give or take the exact parameters.
> > include <BOSL2/std.scad>
> >
> > $fa = 1;
> > $fs = 1;
> >
> > bigR = 70;
> > smallCenter = 71;
> > smallR = 6;
> > nSmall = 15;
> >
> > big = circle(r=bigR);
> > small = fwd(smallCenter, circle(r=smallR));
> > smalls = [ for (i = [0:nSmall-1]) zrot(i * 360/nSmall, small) ];
> > result = difference(big, smalls);
> > region(result);
> Note that a BOSL2 "region" is a list of lists of points. (The
> result of a difference needs to be such a list, because it might be
> multiple shapes.) In this particular case, where we know that
> there's only one shape, you could use polygon(result[0]);
I'll have a look at this later.
Thanks Jordan.
AM
Adrian Mariano
Wed, Oct 14, 2026 8:51 PM
It looks like you have a big point list and furthermore, it's full of
collinear points. You can use path_merge_collinear to clean that up. Most
processing in BOSL2 doesn't like collinear points. Also your point list
appears long. The rounded_prism() module is good when you have a polygon
with a few edges, like 10, say. When you have a more continuous path it's
better to use offset_sweep because rounded_prism will make hundreds of tiny
roundings between every single pair of line segments in your path. It also
looks like your code has an error that's making it think joint_bot is a
function, but I don't see your code here.
On Wed, Oct 14, 2026 at 15:18 larry via Discuss discuss@lists.openscad.org
wrote:
On Wed, 2026-10-14 at 10:21 -0700, Jordan Brown wrote:
On 10/14/2026 9:59 AM, larry wrote:
I get an error when I try to preview or render. It looks like the
points are messed up. As I mentioned, I used ChatGPT to convert
from a
projection() to points, and in all likelihood it got that wrong.
I've attached the code I attempted. I don't really understand the
error
message.
I don't get an error previewing or rendering that file, on either
2021.01 or a development snapshot.
What message do you get?
I'm running OpenSCAD version 2026.08.03, and I get the attached.
I don't mind building the path from a large circle, differenced
with small circles, but I have no idea how to make a polygon from
that.
A polygon, in the sense of a 2D shape, is easy: the result of the
difference is a polygon.
What you can't get from base OpenSCAD is a list of points, as would
be required for a sweep or rounded_prism().
BOSL2 can do 2D differences on its own, so you could do all of the
differencing "in user space" to yield a list of points.
Here's a demonstration, give or take the exact parameters.
include <BOSL2/std.scad>
$fa = 1;
$fs = 1;
bigR = 70;
smallCenter = 71;
smallR = 6;
nSmall = 15;
big = circle(r=bigR);
small = fwd(smallCenter, circle(r=smallR));
smalls = [ for (i = [0:nSmall-1]) zrot(i * 360/nSmall, small) ];
result = difference(big, smalls);
region(result);
Note that a BOSL2 "region" is a list of lists of points. (The
result of a difference needs to be such a list, because it might be
multiple shapes.) In this particular case, where we know that
there's only one shape, you could use polygon(result[0]);
It looks like you have a big point list and furthermore, it's full of
collinear points. You can use path_merge_collinear to clean that up. Most
processing in BOSL2 doesn't like collinear points. Also your point list
appears long. The rounded_prism() module is good when you have a polygon
with a few edges, like 10, say. When you have a more continuous path it's
better to use offset_sweep because rounded_prism will make hundreds of tiny
roundings between every single pair of line segments in your path. It also
looks like your code has an error that's making it think joint_bot is a
function, but I don't see your code here.
On Wed, Oct 14, 2026 at 15:18 larry via Discuss <discuss@lists.openscad.org>
wrote:
> On Wed, 2026-10-14 at 10:21 -0700, Jordan Brown wrote:
> > On 10/14/2026 9:59 AM, larry wrote:
> > > I get an error when I try to preview or render. It looks like the
> > > points are messed up. As I mentioned, I used ChatGPT to convert
> > > from a
> > > projection() to points, and in all likelihood it got that wrong.
> > > I've attached the code I attempted. I don't really understand the
> > > error
> > > message.
>
> > I don't get an error previewing or rendering that file, on either
> > 2021.01 or a development snapshot.
> > What message do you get?
>
> I'm running OpenSCAD version 2026.08.03, and I get the attached.
>
> > > I don't mind building the path from a large circle, differenced
> > > with small circles, but I have no idea how to make a polygon from
> > > that.
> >
> > A polygon, in the sense of a 2D shape, is easy: the result of the
> > difference *is* a polygon.
> >
> > What you can't get from base OpenSCAD is a list of points, as would
> > be required for a sweep or rounded_prism().
> >
> > BOSL2 can do 2D differences on its own, so you could do all of the
> > differencing "in user space" to yield a list of points.
> >
> > Here's a demonstration, give or take the exact parameters.
> > > include <BOSL2/std.scad>
> > >
> > > $fa = 1;
> > > $fs = 1;
> > >
> > > bigR = 70;
> > > smallCenter = 71;
> > > smallR = 6;
> > > nSmall = 15;
> > >
> > > big = circle(r=bigR);
> > > small = fwd(smallCenter, circle(r=smallR));
> > > smalls = [ for (i = [0:nSmall-1]) zrot(i * 360/nSmall, small) ];
> > > result = difference(big, smalls);
> > > region(result);
> > Note that a BOSL2 "region" is a list of lists of points. (The
> > result of a difference needs to be such a list, because it might be
> > multiple shapes.) In this particular case, where we know that
> > there's only one shape, you could use polygon(result[0]);
>
> I'll have a look at this later.
>
> Thanks Jordan.
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
JB
Jordan Brown
Wed, Oct 14, 2026 8:55 PM
On 10/14/2026 12:15 PM, larry via Discuss wrote:
I'm running OpenSCAD version 2026.08.03, and I get the attached.
Parsing design (AST generation)...
Saved backup file:
/home/larry/.local/share/OpenSCAD/backups/shape-backup-vBFevdAH.scad
Compiling design (CSG Tree generation)...
WARNING: Ignoring unknown function 'joint_bot' in file shape.scad, line 5
ERROR: Assertion '(top_collinear == [])' failed: "Top has collinear or
duplicated points at indices: [5, 10, 15, ... 19400]" in file
../../../../../../../../../home/larry/.local/share/OpenSCAD/libraries/BOSL2/rounding.scad,
line 2526
TRACE: called by 'rounded_prism' in file
../../../../../../../../../home/larry/.local/share/OpenSCAD/libraries/BOSL2/rounding.scad,
line 2438
The example you gave earlier just called polygon(); it didn't call
rounded_prism().
When I wrap a rounded_prism() around those points, I get that same
error. (Note that it's an error from BOSL2, not from OpenSCAD per se.)
I understand what it's saying: that there are duplicate or colinear
points. I don't immediately understand why it cares, though.
I don't know what the real limitations are, but the documentation for
rounded_prism() says:
Note that rounded_prism() is not well suited to rounding shapes that
have already been rounded, or that have many points. It works best
when the top and bottom are polygons with well-defined corners. When
the polygons have been rounded already, further rounding generates
tiny bezier patches patches that can more easily interfere, giving
rise to an invalid polyhedron. It's also slow because you get bezier
patches for every corner in the model.
You do have a lot of points. You could try dramatically reducing the
number of points.
On 10/14/2026 12:15 PM, larry via Discuss wrote:
> I'm running OpenSCAD version 2026.08.03, and I get the attached.
> Parsing design (AST generation)...
> Saved backup file:
> /home/larry/.local/share/OpenSCAD/backups/shape-backup-vBFevdAH.scad
> Compiling design (CSG Tree generation)...
> WARNING: Ignoring unknown function 'joint_bot' in file shape.scad, line 5
> ERROR: Assertion '(top_collinear == [])' failed: "Top has collinear or
> duplicated points at indices: [5, 10, 15, ... 19400]" in file
> ../../../../../../../../../home/larry/.local/share/OpenSCAD/libraries/BOSL2/rounding.scad,
> line 2526
> TRACE: called by 'rounded_prism' in file
> ../../../../../../../../../home/larry/.local/share/OpenSCAD/libraries/BOSL2/rounding.scad,
> line 2438
The example you gave earlier just called polygon(); it didn't call
rounded_prism().
When I wrap a rounded_prism() around those points, I get that same
error. (Note that it's an error from BOSL2, not from OpenSCAD per se.)
I understand what it's saying: that there are duplicate or colinear
points. I don't immediately understand why it cares, though.
I don't know what the real limitations are, but the documentation for
rounded_prism() says:
>
> Note that rounded_prism() is not well suited to rounding shapes that
> have already been rounded, or that have many points. It works best
> when the top and bottom are polygons with well-defined corners. When
> the polygons have been rounded already, further rounding generates
> tiny bezier patches patches that can more easily interfere, giving
> rise to an invalid polyhedron. It's also slow because you get bezier
> patches for every corner in the model.
>
You do have a lot of points. You could try dramatically reducing the
number of points.