discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Sweep-ish question

JB
Jon Bondy
Fri, Jan 9, 2026 12:01 AM

I am trying to reverse-engineer the spiral parts from this:

https://www.printables.com/model/108183-tenspiral-defeating-gravity

The bulk of the part is a simple spiral, but at top and bottom, the
spiral sneaks in from the outside to end up in the center of the
spiral.  I can re-create the spiral easily enough using a variety of
BOSL2 facilities, but I am not sure how to stitch together the main part
of the spiral with the two ends.

Thoughts?

Thanks!

Jon

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

I am trying to reverse-engineer the spiral parts from this: https://www.printables.com/model/108183-tenspiral-defeating-gravity The bulk of the part is a simple spiral, but at top and bottom, the spiral sneaks in from the outside to end up in the center of the spiral.  I can re-create the spiral easily enough using a variety of BOSL2 facilities, but I am not sure how to stitch together the main part of the spiral with the two ends. Thoughts? Thanks! Jon -- This email has been checked for viruses by AVG antivirus software. www.avg.com
JB
Jordan Brown
Fri, Jan 9, 2026 1:04 AM

Come up with a function that you like for the path along the centerline,
and then sweep a circle (or whatever) along that path.

Come up with a function that you like for the path along the centerline, and then sweep a circle (or whatever) along that path.
JJ
jon jonbondy.com
Fri, Jan 9, 2026 1:56 AM

Forgive me, but I don't think it is that simple.  It is the "come up
with a function" part that is stumping me.  I can get various parts OK,
but merging them smoothly is not simple or obvious to me.  It is not
even clear to me how to concatenate two paths. Using "+" compiles, but
the result is not what I would have expected.

Jon

// Tensegrity Spiral

include <BOSL2/std.scad>

eps = 0.01;
slop = 0.2;
$fa = 3;
$fs = 0.2;
inches = 25.4;

*spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120);

spiral = helix(turns=0.25, h=100, r1=50, r2 = 5);
path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50);
path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural");

path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural");

On 1/8/2026 8:04 PM, Jordan Brown wrote:

Come up with a function that you like for the path along the
centerline, and then sweep a circle (or whatever) along that path.

Forgive me, but I don't think it is that simple.  It is the "come up with a function" part that is stumping me.  I can get various parts OK, but merging them smoothly is not simple or obvious to me.  It is not even clear to me how to concatenate two paths. Using "+" compiles, but the result is not what I would have expected. Jon // Tensegrity Spiral include <BOSL2/std.scad> eps = 0.01; slop = 0.2; $fa = 3; $fs = 0.2; inches = 25.4; *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120); spiral = helix(turns=0.25, h=100, r1=50, r2 = 5); path_sweep(circle(r = 5, $fn = 6), spiral, method="natural"); spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50); path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural"); path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural"); On 1/8/2026 8:04 PM, Jordan Brown wrote: > Come up with a function that you like for the path along the > centerline, and then sweep a circle (or whatever) along that path.
AM
Adrian Mariano
Fri, Jan 9, 2026 2:07 AM

You may be able to join paths with concat() or with BOSL2 path_join().

On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com via Discuss <
discuss@lists.openscad.org> wrote:

Forgive me, but I don't think it is that simple.  It is the "come up
with a function" part that is stumping me.  I can get various parts OK,
but merging them smoothly is not simple or obvious to me.  It is not
even clear to me how to concatenate two paths. Using "+" compiles, but
the result is not what I would have expected.

Jon

// Tensegrity Spiral

include <BOSL2/std.scad>

eps = 0.01;
slop = 0.2;
$fa = 3;
$fs = 0.2;
inches = 25.4;

*spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120);

spiral = helix(turns=0.25, h=100, r1=50, r2 = 5);
path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50);
path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural");

path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural");

On 1/8/2026 8:04 PM, Jordan Brown wrote:

Come up with a function that you like for the path along the
centerline, and then sweep a circle (or whatever) along that path.


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

You may be able to join paths with concat() or with BOSL2 path_join(). On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com via Discuss < discuss@lists.openscad.org> wrote: > Forgive me, but I don't think it is that simple. It is the "come up > with a function" part that is stumping me. I can get various parts OK, > but merging them smoothly is not simple or obvious to me. It is not > even clear to me how to concatenate two paths. Using "+" compiles, but > the result is not what I would have expected. > > Jon > > > > // Tensegrity Spiral > > include <BOSL2/std.scad> > > eps = 0.01; > slop = 0.2; > $fa = 3; > $fs = 0.2; > inches = 25.4; > > *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120); > > spiral = helix(turns=0.25, h=100, r1=50, r2 = 5); > path_sweep(circle(r = 5, $fn = 6), spiral, method="natural"); > > spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50); > path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural"); > > path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural"); > > > On 1/8/2026 8:04 PM, Jordan Brown wrote: > > Come up with a function that you like for the path along the > > centerline, and then sweep a circle (or whatever) along that path. > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org
JB
Jon Bondy
Fri, Jan 9, 2026 2:26 AM

Thanks.  I did look for a facility like path_join(), but could not find
it anywhere relating to paths.

On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote:

You may be able to join paths with concat() or with BOSL2 path_join().

On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com
https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=
via Discuss discuss@lists.openscad.org wrote:

 Forgive me, but I don't think it is that simple.  It is the "come up
 with a function" part that is stumping me.  I can get various
 parts OK,
 but merging them smoothly is not simple or obvious to me.  It is not
 even clear to me how to concatenate two paths. Using "+" compiles,
 but
 the result is not what I would have expected.

 Jon



 // Tensegrity Spiral

 include <BOSL2/std.scad>

 eps = 0.01;
 slop = 0.2;
 $fa = 3;
 $fs = 0.2;
 inches = 25.4;

 *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120);

 spiral = helix(turns=0.25, h=100, r1=50, r2 = 5);
 path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

 spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50);
 path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural");

 path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral,
 method="natural");


 On 1/8/2026 8:04 PM, Jordan Brown wrote:

Come up with a function that you like for the path along the
centerline, and then sweep a circle (or whatever) along that path.

 _______________________________________________
 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

Thanks.  I did look for a facility like path_join(), but could not find it anywhere relating to paths. On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote: > You may be able to join paths with concat() or with BOSL2 path_join(). > > > On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com > <https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=> > via Discuss <discuss@lists.openscad.org> wrote: > > Forgive me, but I don't think it is that simple.  It is the "come up > with a function" part that is stumping me.  I can get various > parts OK, > but merging them smoothly is not simple or obvious to me.  It is not > even clear to me how to concatenate two paths. Using "+" compiles, > but > the result is not what I would have expected. > > Jon > > > > // Tensegrity Spiral > > include <BOSL2/std.scad> > > eps = 0.01; > slop = 0.2; > $fa = 3; > $fs = 0.2; > inches = 25.4; > > *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120); > > spiral = helix(turns=0.25, h=100, r1=50, r2 = 5); > path_sweep(circle(r = 5, $fn = 6), spiral, method="natural"); > > spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50); > path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural"); > > path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, > method="natural"); > > > On 1/8/2026 8:04 PM, Jordan Brown wrote: > > Come up with a function that you like for the path along the > > centerline, and then sweep a circle (or whatever) along that path. > _______________________________________________ > 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
JB
Jon Bondy
Fri, Jan 9, 2026 2:29 AM

concat() works;

path_join() throws an error (for path_join(spiral,  spiral))

ERROR: Assertion '(badpath == [])' failed: "Entries in paths are not
valid paths: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]" in file , line 884

TRACE: called by 'path_join' in file Tensegrity Spiral.scad, line 23

On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote:

You may be able to join paths with concat() or with BOSL2 path_join().

On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com
https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=
via Discuss discuss@lists.openscad.org wrote:

 Forgive me, but I don't think it is that simple.  It is the "come up
 with a function" part that is stumping me.  I can get various
 parts OK,
 but merging them smoothly is not simple or obvious to me.  It is not
 even clear to me how to concatenate two paths. Using "+" compiles,
 but
 the result is not what I would have expected.

 Jon



 // Tensegrity Spiral

 include <BOSL2/std.scad>

 eps = 0.01;
 slop = 0.2;
 $fa = 3;
 $fs = 0.2;
 inches = 25.4;

 *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120);

 spiral = helix(turns=0.25, h=100, r1=50, r2 = 5);
 path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

 spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50);
 path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural");

 path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral,
 method="natural");


 On 1/8/2026 8:04 PM, Jordan Brown wrote:

Come up with a function that you like for the path along the
centerline, and then sweep a circle (or whatever) along that path.

 _______________________________________________
 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

concat() works; path_join() throws an error (for path_join(spiral,  spiral)) ERROR: Assertion '(badpath == [])' failed: "Entries in paths are not valid paths: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]" in file , line 884 TRACE: called by 'path_join' in file Tensegrity Spiral.scad, line 23 On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote: > You may be able to join paths with concat() or with BOSL2 path_join(). > > > On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com > <https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=> > via Discuss <discuss@lists.openscad.org> wrote: > > Forgive me, but I don't think it is that simple.  It is the "come up > with a function" part that is stumping me.  I can get various > parts OK, > but merging them smoothly is not simple or obvious to me.  It is not > even clear to me how to concatenate two paths. Using "+" compiles, > but > the result is not what I would have expected. > > Jon > > > > // Tensegrity Spiral > > include <BOSL2/std.scad> > > eps = 0.01; > slop = 0.2; > $fa = 3; > $fs = 0.2; > inches = 25.4; > > *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120); > > spiral = helix(turns=0.25, h=100, r1=50, r2 = 5); > path_sweep(circle(r = 5, $fn = 6), spiral, method="natural"); > > spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50); > path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural"); > > path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, > method="natural"); > > > On 1/8/2026 8:04 PM, Jordan Brown wrote: > > Come up with a function that you like for the path along the > > centerline, and then sweep a circle (or whatever) along that path. > _______________________________________________ > 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
JB
Jordan Brown
Fri, Jan 9, 2026 2:31 AM

On 1/8/2026 5:56 PM, jon jonbondy.com wrote:

Forgive me, but I don't think it is that simple.  It is the "come up
with a function" part that is stumping me.  I can get various parts OK,
but merging them smoothly is not simple or obvious to me.  It is not
even clear to me how to concatenate two paths. Using "+" compiles, but
the result is not what I would have expected.

concat(spiral2, spiral) is how to concatenate two lists.  (+ does a
vector addition, adding a[0] to b[0], a[1] to b[1], et cetera.)

I would think of something along these lines.  The formulas for a, r,
and z are the key things.  Somebody with a more intuitive understanding
of how mathematical functions relate to shapes than I have would
probably have better ideas.  Note that if you set r to a constant you
get a helix.

include <BOSL2/std.scad>

function pos(i) =
let(a = i12)
let(r = i < 90 ? 10
sin(i) : 10)
let(z = i)
[
sin(a)*r,
cos(a)*r,
z
];

spiral = [ for (i=[0:0.1:200]) pos(i) ];
path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

On 1/8/2026 5:56 PM, jon jonbondy.com wrote: > Forgive me, but I don't think it is that simple.  It is the "come up > with a function" part that is stumping me.  I can get various parts OK, > but merging them smoothly is not simple or obvious to me.  It is not > even clear to me how to concatenate two paths. Using "+" compiles, but > the result is not what I would have expected. concat(spiral2, spiral) is how to concatenate two lists.  (+ does a vector addition, adding a[0] to b[0], a[1] to b[1], et cetera.) I would think of something along these lines.  The formulas for a, r, and z are the key things.  Somebody with a more intuitive understanding of how mathematical functions relate to shapes than I have would probably have better ideas.  Note that if you set r to a constant you get a helix. include <BOSL2/std.scad> function pos(i) = let(a = i*12) let(r = i < 90 ? 10*sin(i) : 10) let(z = i) [ sin(a)*r, cos(a)*r, z ]; spiral = [ for (i=[0:0.1:200]) pos(i) ]; path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");
JJ
jon jonbondy.com
Fri, Jan 9, 2026 2:40 AM

Is there any way to move a path once you create it.  For example, if I generate a helix() and I try to apply translate() or up(), I get error messages.

Sorry.  This seems so fundamental.

On 1/8/2026 9:26 PM, Jon Bondy via Discuss wrote:

Thanks.  I did look for a facility like path_join(), but could not find it anywhere relating to paths.

On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote:
You may be able to join paths with concat() or with BOSL2 path_join().

On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.comhttps://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e= via Discuss <discuss@lists.openscad.orgmailto:discuss@lists.openscad.org> wrote:
Forgive me, but I don't think it is that simple.  It is the "come up
with a function" part that is stumping me.  I can get various parts OK,
but merging them smoothly is not simple or obvious to me.  It is not
even clear to me how to concatenate two paths. Using "+" compiles, but
the result is not what I would have expected.

Jon

// Tensegrity Spiral

include <BOSL2/std.scad>

eps = 0.01;
slop = 0.2;
$fa = 3;
$fs = 0.2;
inches = 25.4;

*spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120);

spiral = helix(turns=0.25, h=100, r1=50, r2 = 5);
path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50);
path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural");

path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural");

On 1/8/2026 8:04 PM, Jordan Brown wrote:

Come up with a function that you like for the path along the
centerline, and then sweep a circle (or whatever) along that path.


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

[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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&e=


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

Is there any way to move a path once you create it. For example, if I generate a helix() and I try to apply translate() or up(), I get error messages. Sorry. This seems so fundamental. On 1/8/2026 9:26 PM, Jon Bondy via Discuss wrote: Thanks. I did look for a facility like path_join(), but could not find it anywhere relating to paths. On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote: You may be able to join paths with concat() or with BOSL2 path_join(). On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com<https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=> via Discuss <discuss@lists.openscad.org<mailto:discuss@lists.openscad.org>> wrote: Forgive me, but I don't think it is that simple. It is the "come up with a function" part that is stumping me. I can get various parts OK, but merging them smoothly is not simple or obvious to me. It is not even clear to me how to concatenate two paths. Using "+" compiles, but the result is not what I would have expected. Jon // Tensegrity Spiral include <BOSL2/std.scad> eps = 0.01; slop = 0.2; $fa = 3; $fs = 0.2; inches = 25.4; *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120); spiral = helix(turns=0.25, h=100, r1=50, r2 = 5); path_sweep(circle(r = 5, $fn = 6), spiral, method="natural"); spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50); path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural"); path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural"); On 1/8/2026 8:04 PM, Jordan Brown wrote: > Come up with a function that you like for the path along the > centerline, and then sweep a circle (or whatever) along that path. _______________________________________________ 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> [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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&e=> _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to discuss-leave@lists.openscad.org<mailto:discuss-leave@lists.openscad.org>
JJ
jon jonbondy.com
Fri, Jan 9, 2026 2:41 AM

Thanks.  Now all I need to do is figure out the formula that I need.

On 1/8/2026 9:31 PM, Jordan Brown wrote:
On 1/8/2026 5:56 PM, jon jonbondy.com wrote:

Forgive me, but I don't think it is that simple.  It is the "come up
with a function" part that is stumping me.  I can get various parts OK,
but merging them smoothly is not simple or obvious to me.  It is not
even clear to me how to concatenate two paths. Using "+" compiles, but
the result is not what I would have expected.

concat(spiral2, spiral) is how to concatenate two lists.  (+ does a vector addition, adding a[0] to b[0], a[1] to b[1], et cetera.)

I would think of something along these lines.  The formulas for a, r, and z are the key things.  Somebody with a more intuitive understanding of how mathematical functions relate to shapes than I have would probably have better ideas.  Note that if you set r to a constant you get a helix.

include <BOSL2/std.scad>

function pos(i) =
let(a = i12)
let(r = i < 90 ? 10
sin(i) : 10)
let(z = i)
[
sin(a)*r,
cos(a)*r,
z
];

spiral = [ for (i=[0:0.1:200]) pos(i) ];
path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

Thanks. Now all I need to do is figure out the formula that I need. On 1/8/2026 9:31 PM, Jordan Brown wrote: On 1/8/2026 5:56 PM, jon jonbondy.com wrote: Forgive me, but I don't think it is that simple. It is the "come up with a function" part that is stumping me. I can get various parts OK, but merging them smoothly is not simple or obvious to me. It is not even clear to me how to concatenate two paths. Using "+" compiles, but the result is not what I would have expected. concat(spiral2, spiral) is how to concatenate two lists. (+ does a vector addition, adding a[0] to b[0], a[1] to b[1], et cetera.) I would think of something along these lines. The formulas for a, r, and z are the key things. Somebody with a more intuitive understanding of how mathematical functions relate to shapes than I have would probably have better ideas. Note that if you set r to a constant you get a helix. include <BOSL2/std.scad> function pos(i) = let(a = i*12) let(r = i < 90 ? 10*sin(i) : 10) let(z = i) [ sin(a)*r, cos(a)*r, z ]; spiral = [ for (i=[0:0.1:200]) pos(i) ]; path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");
AM
Adrian Mariano
Fri, Jan 9, 2026 2:47 AM

Yes, any bosl2 movement command will move a path, e.g. newpath =
move([3,4], oldpath);  or newpath = up(4, oldpath);  You can also move a
path with path_join, which was why I suggested it, since it specifically
moves a path to start at the tail of the previous path.

On Thu, Jan 8, 2026 at 9:41 PM jon jonbondy.com via Discuss <
discuss@lists.openscad.org> wrote:

Is there any way to move a path once you create it.  For example, if I
generate a helix() and I try to apply translate() or up(), I get error
messages.

Sorry.  This seems so fundamental.

On 1/8/2026 9:26 PM, Jon Bondy via Discuss wrote:

Thanks.  I did look for a facility like path_join(), but could not find it
anywhere relating to paths.

On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote:

You may be able to join paths with concat() or with BOSL2 path_join().

On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com
https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=
via Discuss discuss@lists.openscad.org wrote:

Forgive me, but I don't think it is that simple.  It is the "come up
with a function" part that is stumping me.  I can get various parts OK,
but merging them smoothly is not simple or obvious to me.  It is not
even clear to me how to concatenate two paths. Using "+" compiles, but
the result is not what I would have expected.

Jon

// Tensegrity Spiral

include <BOSL2/std.scad>

eps = 0.01;
slop = 0.2;
$fa = 3;
$fs = 0.2;
inches = 25.4;

*spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120);

spiral = helix(turns=0.25, h=100, r1=50, r2 = 5);
path_sweep(circle(r = 5, $fn = 6), spiral, method="natural");

spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50);
path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural");

path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural");

On 1/8/2026 8:04 PM, Jordan Brown wrote:

Come up with a function that you like for the path along the
centerline, and then sweep a circle (or whatever) along that path.


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

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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&e=
<#m_-4170570757885704656_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

Yes, any bosl2 movement command will move a path, e.g. newpath = move([3,4], oldpath); or newpath = up(4, oldpath); You can also move a path with path_join, which was why I suggested it, since it specifically moves a path to start at the tail of the previous path. On Thu, Jan 8, 2026 at 9:41 PM jon jonbondy.com via Discuss < discuss@lists.openscad.org> wrote: > Is there any way to move a path once you create it. For example, if I > generate a helix() and I try to apply translate() or up(), I get error > messages. > > Sorry. This seems so fundamental. > > > On 1/8/2026 9:26 PM, Jon Bondy via Discuss wrote: > > Thanks. I did look for a facility like path_join(), but could not find it > anywhere relating to paths. > > > On 1/8/2026 9:07 PM, Adrian Mariano via Discuss wrote: > > You may be able to join paths with concat() or with BOSL2 path_join(). > > > On Thu, Jan 8, 2026 at 8:57 PM jon jonbondy.com > <https://urldefense.proofpoint.com/v2/url?u=http-3A__jonbondy.com&d=DwMFaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=AsrE-c7ZR7B2Kyr3qgfvvppkCEBVsNmwEMndcrRSuOI&m=oWL9tHotnLAEu1OeTPZ6zlyxXQgAGZfwyf3F9EfIL2fjdcMnQiVuEZUvLtDnLEkr&s=xURLOy4M6FDARcWv3Q1n-Wz3070JSPg96FgdbhMlVXk&e=> > via Discuss <discuss@lists.openscad.org> wrote: > >> Forgive me, but I don't think it is that simple. It is the "come up >> with a function" part that is stumping me. I can get various parts OK, >> but merging them smoothly is not simple or obvious to me. It is not >> even clear to me how to concatenate two paths. Using "+" compiles, but >> the result is not what I would have expected. >> >> Jon >> >> >> >> // Tensegrity Spiral >> >> include <BOSL2/std.scad> >> >> eps = 0.01; >> slop = 0.2; >> $fa = 3; >> $fs = 0.2; >> inches = 25.4; >> >> *spiral_sweep(circle(r = 5, $fn = 6), h=200, r=50, turns=1, $fn=120); >> >> spiral = helix(turns=0.25, h=100, r1=50, r2 = 5); >> path_sweep(circle(r = 5, $fn = 6), spiral, method="natural"); >> >> spiral2 = helix(turns=0.75, h=100, r1=50, r2 = 50); >> path_sweep(circle(r = 5, $fn = 6), spiral2, method="natural"); >> >> path_sweep(circle(r = 5, $fn = 6), spiral2 + spiral, method="natural"); >> >> >> On 1/8/2026 8:04 PM, Jordan Brown wrote: >> > Come up with a function that you like for the path along the >> > centerline, and then sweep a circle (or whatever) along that path. >> _______________________________________________ >> 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 > > > > <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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&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=nuBvgDxFxjW_Wv7U5Dr22IS3vUTnL2RChS7067Bec0ZgVK-Y1qhToiyGOn0PNCRX&s=0TeO6OX4ijslQoqhdxEzGa3cE5LceM6uDmI9dpdejkM&e=> > <#m_-4170570757885704656_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