[OpenSCAD] Functional OpenSCAD, working with vertex data
Parkinbot
rudolf at parkinbot.com
Tue Jan 30 10:42:27 EST 2018
thehans wrote
> Here is a quick implementation of the rounded cube concept which I
> made as a module, since this version *does* still require one hull
> operation.
> https://gist.github.com/thehans/2c96601af4e5c8c2d232e50252dd37b1
let me annote that hull() itself is not the problem. To avoid a time
consuming CGAL round trip, don't use (implicit) unions inside a hull(). If
you implement rounded_cube() more explicitely, rendering is fast (seconds).
$fa = 0.1;
$fs = 0.1;
rounded_cube_([4, 20, 5], r=1, center=[1,1,1]);
module rounded_cube_(size, r=0, center=false)
{
sz = size[0]==undef?[size, size, size]:size;
ce = center[0]==undef?[center, center, center]:center;
r_ = min(abs(r), abs(size.x/2), abs(size.y/2), abs(size.z/2)); // correct
r
translate([ce.x?-sz.x/2:0,ce.y?-sz.y/2:0, ce.z?-sz.z/2:0])
if(r)
hull()
{
translate([r_, r_, r_]) sphere(r_);
translate([r_, r_, sz.z-r_]) sphere(r_);
translate([r_, sz.y-r_, r_]) sphere(r_);
translate([r_, sz.y-r_, sz.z-r_]) sphere(r_);
translate([sz.x-r_, r_, r_]) sphere(r_);
translate([sz.x-r_, r_, sz.z-r_]) sphere(r_);
translate([sz.x-r_, sz.y-r_, r_]) sphere(r_);
translate([sz.x-r_, sz.y-r_, sz.z-r_]) sphere(r_);
}
else
cube(size);
}
in contrast the following call of hull will take minutes.
hull()
for(x=[r_,size.x-r_], y=[r_,size.y-r_], z=[r_,size.z-r_])
translate([x,y,z]) sphere(r_);
However, rounded_cube_ is currently a typical libary module. I wouldn't add
it to the core language unless cylinder(), linear_extrude() and maybe hull()
also get a r parameter.
--
Sent from: http://forum.openscad.org/
More information about the Discuss
mailing list