[OpenSCAD] more sweep() issues
Parkinbot
rudolf at parkinbot.com
Fri Jan 5 14:08:34 EST 2018
Jon,
let me remark some things before giving you advice.
1. your code produces self-intersection. Check this with F12. It will never
pass CGAL
<http://forum.openscad.org/file/t887/jon1.png>
2. I have noticed that current dev snapshots have a bug concerning the use
of rotated polygons as start/end shapes of sweeps. Unavoidable non-planarity
leads to CGAL-errors. https://github.com/openscad/openscad/issues/2246
3. some years ago I have played with the version of sweep you are currently
using, but felt finally that its implicit restriction to using a certain
basic shape is too restrictive for my purposes. Therefore I developed my own
version, which you should know. It expects a vector of polygons placed in 3D
and skins it, just like skin().
4. here a simple animation showing a bulb walking through a pipe.
Uncommenting the first call showes, how the polygons are constructed and
placed in 3D space. Uncommenting the second call and enabling animation
(e.g. 10/100) shows the animation of a bubble wandering through a pipe.
use <Naca_sweep.scad> // https://www.thingiverse.com/thing:900137
w = 40;
// sweep(trajectory(10), showslices = true); // view polygons as slices
// w = $t*90-10; animated();
module animated()
{
difference()
{
sweep(trajectory(10));
sweep(trajectory(9, 14));
}
}
function trajectory(r0 = 10, r1=15, N = 20) = [for(i=[0:N-1])
let(angle = 90/N*i)
let(r = max(r0, bulb(r1, 1.9, w-angle)))
Ry_(angle, Tx_(100, vec3D(circle(r))))];
function circle(r, N=20) = [for(i=[0:N-1]) r*[sin(360/N*i), cos(360/N*i)]];
function bulb(r, scale=1, x) = abs(x)<r?scale*sqrt(r*r-x*x):0;
--
Sent from: http://forum.openscad.org/
More information about the Discuss
mailing list