[OpenSCAD] more sweep() issues

jon jon at jonbondy.com
Fri Jan 5 12:21:20 EST 2018

I want to make horns similar to those shown in the first screen capture, 

I started out with sweep() but could not see how to incorporate scaling 
into that approach.  I hacked the sweep.scad module so that the global 
shape() function was called inside sweep() (rather than passing the 
output of shape() into sweep() as a parameter), so that I could return 
shapes which scaled during the sweep.

That approach (although ugly/hacky) worked to some extent.  But since 
what I really wanted was a hollow horn, things fell apart when I tried 
to create two horns with different scales, so that I could subtract the 
inner from the outer.  With only one global shape() function available, 
the only way I could see to make this work was to duplicate the sweep() 
code so that I could use two global shape() functions.  I felt as if I 
was heading towards hacking hell.  Simple use of scale() failed because 
I need the path to remain unscaled while the object that is being swept 
is scaled.

I tried to use Ronaldo's sweep-with-easing approach (although I never 
understood what "easing" was).  The result is unacceptable because the 
shapes used are always horizontal: they do not rotate to stay orthogonal 
to the path.  Perhaps this is due to errors in my approach (code is below).

In addition, I was unable to get the horn shapes to have caps on the ends.

I gave up on hollow horns, and made them solid, figuring that I would be 
able to hollow them out with MeshMixer (annoying, but acceptable).  But 
the STLs created were so damaged that neither MeshMixer nor NetFabb were 
able to repair them.

I feel as if I am flailing about randomly.  Perhaps one of you can point 
me in a more productive direction.



use <sweep.scad>
use <scad-utils/transformations.scad>
use <scad-utils/shapes.scad>

bottom_w = 120;
top_w = 3;
height = 120;
steps = 360;

pathstep = height/steps;
delt = top_w - bottom_w;

square_points = square(1);
circle_points = circle(r=0.5, $fn=60);

sweep(circle_points, my_path);

my_path = [ for (i=[0:steps])
     translation([18*sin(i), 18-18*cos(i*0.7),     36*sin(i/2)]) *
     scaling([11 * (1.2 - i/steps), 11 * (1.2 - i/steps), 1]) *
     rotation([0,0, steps]) ];

Sent from my desktop computer.
I do not receive emails while away from my desk,
nor do I receive texts on my main phone number
(which is a land line).
If you know that I am on the road, please text me.
If you know that I am home, please email me.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscad.org/pipermail/discuss_lists.openscad.org/attachments/20180105/18b1912c/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cajeplmoagikdifl.png
Type: image/png
Size: 56639 bytes
Desc: not available
URL: <http://lists.openscad.org/pipermail/discuss_lists.openscad.org/attachments/20180105/18b1912c/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jeiboandnhdkpfdo.png
Type: image/png
Size: 44943 bytes
Desc: not available
URL: <http://lists.openscad.org/pipermail/discuss_lists.openscad.org/attachments/20180105/18b1912c/attachment-0001.png>

More information about the Discuss mailing list