discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Fwd: Twisted Torus

DM
doug moen
Wed, Sep 26, 2018 2:32 AM

There is no "rotate_extrude_with_a_twist" in OpenSCAD, and there's no way
to define new CSG operators with this kind of behaviour from inside the
OpenSCAD language. So you are left with building the model by assembling a
large number of small pieces. An expert would use polyhedron(), as Ezra
said, and then it will be fast.

I make these kinds of models using Curv, which has a richer set of CSG
operators, including "twist" and "bend". Here's my standard twisted torus
in Curv. Note that this has a square cross section. It works by making a
tall skinny box, twisting it around the Z axis, then bending it around 360°
into a torus.

let
twisted_torus(d1, d2, ntwists) =
box(d1,d1,d2)

twist (90ntwistsdeg/d2)
rotate {angle: 90*deg, axis: Y_axis}
bend {};

in
twisted_torus(1, 10, 4)

which looks like this:

Your design has a semi-circle as a cross section. I'd make that by starting
with a cylinder, cutting away half the cylinder so that it has a
semi-circle cross section, then twist and bend as before.

let
twisted_torus(d1, d2, ntwists) =
difference( cylinder{d: d1, h: d2}, box{xmin: 0} )

twist (360ntwistsdeg/d2)
rotate {angle: 90*deg, axis: Y_axis}
bend {};

in
twisted_torus(25, 50, 1)

Curv works differently from OpenSCAD. Shapes are represented internally as
mathematical functions, not as triangle meshes, and curved surfaces are
rendered on the screen at "infinite" resolution. You don't get a triangle
mesh until you export an STL file. This representation makes Curv good for
curved organic shapes, and non-affine transformations like twist and bend
are easier to implement.

You should be aware that Curv is a one-man hobby project on github. Mac and
Linux only (no Windows), and you build your own executable by following the
build instructions. https://github.com/doug-moen/curv

Doug Moen

There is no "rotate_extrude_with_a_twist" in OpenSCAD, and there's no way to define new CSG operators with this kind of behaviour from inside the OpenSCAD language. So you are left with building the model by assembling a large number of small pieces. An expert would use polyhedron(), as Ezra said, and then it will be fast. I make these kinds of models using Curv, which has a richer set of CSG operators, including "twist" and "bend". Here's my standard twisted torus in Curv. Note that this has a square cross section. It works by making a tall skinny box, twisting it around the Z axis, then bending it around 360° into a torus. let twisted_torus(d1, d2, ntwists) = box(d1,d1,d2) >> twist (90*ntwists*deg/d2) >> rotate {angle: 90*deg, axis: Y_axis} >> bend {}; in twisted_torus(1, 10, 4) which looks like this: Your design has a semi-circle as a cross section. I'd make that by starting with a cylinder, cutting away half the cylinder so that it has a semi-circle cross section, then twist and bend as before. let twisted_torus(d1, d2, ntwists) = difference( cylinder{d: d1, h: d2}, box{xmin: 0} ) >> twist (360*ntwists*deg/d2) >> rotate {angle: 90*deg, axis: Y_axis} >> bend {}; in twisted_torus(25, 50, 1) Curv works differently from OpenSCAD. Shapes are represented internally as mathematical functions, not as triangle meshes, and curved surfaces are rendered on the screen at "infinite" resolution. You don't get a triangle mesh until you export an STL file. This representation makes Curv good for curved organic shapes, and non-affine transformations like twist and bend are easier to implement. You should be aware that Curv is a one-man hobby project on github. Mac and Linux only (no Windows), and you build your own executable by following the build instructions. https://github.com/doug-moen/curv Doug Moen