我正在尝试在openscad中创建一个风扇管道,将管道从圆形展平为椭圆形。有没有办法在openscad中这样做?如果没有,是否有任何其他编程方式来生成这种类型的3D模型?
由于 丹尼斯
答案 0 :(得分:7)
假设'椭圆'表示椭圆,则下面会创建从圆形到椭圆形的实心渐变:
Delta=0.01;
module connector (height,radius,eccentricity) {
hull() {
linear_extrude(height=Delta)
circle(r=radius);
translate([0,0,height - Delta])
linear_extrude(height=Delta)
scale([1,eccentricity])
circle(r=radius);
}
}
connector(20,6,0.6);
您可以通过减去较小的版本来制作电子管:
module tube(height, radius, eccentricity=1, thickness) {
difference() {
connector(height,radius,eccentricity);
translate([0,0,-(Delta+thickness)])
connector(height + 2* (Delta +thickness) ,radius-thickness, eccentricity);
}
}
tube(20,8,0.6,2);
但壁厚不均匀。要制作统一的墙,请使用minkowski添加墙:
module tube(height, radius, eccentricity=1, thickness) {
difference() {
minkowski() {
connector(height,radius,eccentricity);
cylinder(height=height,r=thickness);
}
translate([0,0,-(Delta+thickness)])
connector(height + 2* (Delta +thickness) ,radius, eccentricity);
}
}
tube(20,8,0.6,2);
答案 1 :(得分:4)
使用linear_extrude()的“scale”参数还有另一种方法。它“在挤出的高度上通过该值缩放2D形状。比例可以是标量或矢量“(Documentation)。使用带有x和y比例因子的向量,您可以得到修改:
d = 2; // height of ellipsoid, diameter of bottom circle
t = 0.25; // wall thickness
w = 4; // width of ellipsoid
l = 10; // length of extrusion
module ellipsoid(diameter, width, height) {
linear_extrude(height = height, scale = [width/diameter,1]) circle(d = diameter);
}
difference() {
ellipsoid(d,w,l);
ellipsoid(d-2*t,w-2*t,l);
}
答案 2 :(得分:2)
我喜欢 Chris Wallace 的回答,但 Minkwoski 中有一个错误,它应该是 h=Delta
。
module tube(height, radius, eccentricity=1, thickness) {
difference() {
minkowski() {
connector(height,radius,eccentricity);
cylinder(h=Delta,r=thickness);
}
translate([0,0,-(Delta+thickness)])
connector(height + 2* (Delta +thickness) ,radius, eccentricity);
}
}
tube(20,8,0.6,2);
答案 3 :(得分:1)
我不知道如何直接进行此操作,但我可以想象用一系列堆叠切片来近似它。
从一个圆圈开始,并有一个循环,当您将切片添加到堆栈时,会将比例因子从圆圈平滑地更改为椭圆形。这会给你一个阶梯表面。如果这是用于3D打印应用程序,如果您将切片厚度设置为与图层高度相同,则可能甚至没有注意到。