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
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.
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
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
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
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 ? 10sin(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");
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
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 ? 10sin(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");
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