Open varalgit opened 1 year ago
And it can be fixed with the change of one line:
offset(n2*sqrt(sq(r2)-sq(i/fn*r2))-n2*r2){
should be:
offset(n2*sqrt(sq(r2)-sq((i+1)/fn*r2))-n2*r2){
Example (I added coloring so you can see the layers):
extrudeWithRadius(5,r1=2,r2=2,fn=10)
offset(r = 5)
offset(delta = -5)
polygon([[0,0],[20,0],[20,20]]);
module extrudeWithRadius(length,r1=0,r2=0,fn=30){
n1=sign(r1);n2=sign(r2);
r1=abs(r1);r2=abs(r2);
# translate([0,0,r1]){
linear_extrude(length-r1-r2){
children();
}
}
for(i=[0:fn-1]){
color(c=[0,(i+1)/fn,0])
translate([0,0,i/fn*r1]){
linear_extrude(r1/fn+0.01){
offset(n1*sqrt(sq(r1)-sq(r1-i/fn*r1))-n1*r1){
children();
}
}
}
color(c=[0,(fn-i)/fn,0])
translate([0,0,length-r2+i/fn*r2]){
linear_extrude(r2/fn+0.01){
offset(n2*sqrt(sq(r2)-sq((i+1)/fn*r2))-n2*r2){
children();
}
}
}
}
}
function sq(x)=x*x;
I closed this issue, but the code has not changed so it probably should stay open. Sorry about this.
You can also change it the other way round, which I like better:
$fn=72;
extrudeWithRadius(5,r1=2,r2=2,fn=10)
offset(r = 5)
offset(delta = -5)
polygon([[0,0],[20,0],[20,20]]);
module extrudeWithRadius(length,r1=0,r2=0,fn=30){
n1=sign(r1);n2=sign(r2);
r1=abs(r1);r2=abs(r2);
# translate([0,0,r1]){
linear_extrude(length-r1-r2){
children();
}
}
for(i=[0:fn-1]){
color(c=[0,(i+1)/fn,0])
translate([0,0,i/fn*r1]){
linear_extrude(r1/fn+0.01){
offset(n1*sqrt(sq(r1)-sq(r1-(i+1)/fn*r1))-n1*r1){
children();
}
}
}
color(c=[0,(fn-i)/fn,0])
translate([0,0,length-r2+i/fn*r2]){
linear_extrude(r2/fn+0.01){
offset(n2*sqrt(sq(r2)-sq(i/fn*r2))-n2*r2){
children();
}
}
}
}
}
function sq(x)=x*x;
If you specify the same radius for top and bottom, the rendered shape is different for the top and the bottom. The top and bottom layers seem to be shifted by 1 layer. Example (see picture):