【发布时间】:2022-07-12 19:19:32
【问题描述】:
在 OpenSCAD 中获得真正的圆角 3D 立方体似乎并不容易(或可能?)。我用hull() 和球体尝试了一些东西,但没有正常工作。然后我尝试在每个平面上用圆形外壳制作一些东西,然后与所有 3 个平面相交。边缘很好,但角落不光滑。我知道每个边缘的线性挤压是问题,因为它不会遵循在另一个平面上定义的曲线。我还没有完全理解minkowski() 函数,但它看起来也不能解决问题。
那么有没有希望让它正常工作?
到目前为止,这是我的代码:
// Lengths in X, Y, Z dimension
dx = 10;
dy = 20;
dz = 5;
// Corner radius on XY plane (from origin clockwise around positive Z axis)
rxy = [1, 1, 3, 1];
// Corner radius on YZ plane (from origin clockwise around positive X axis)
ryz = [1, 1, 1, 1];
// Corner radius on XZ plane (from origin clockwise around positive Y axis)
rxz = [1, 1, 2, 1];
intersection()
{
// XY plane
linear_extrude(dz)
hull()
{
for (ix = [0:1], iy = [0:1])
{
i = [0, 1, 3, 2][ix * 2 + iy];
r = rxy[i] == 0 ? 0.0001 : rxy[i];
x = ix == 0 ? r : dx - r;
y = iy == 0 ? r : dy - r;
translate([x, y, 0])
circle(r, $fn=40);
}
}
// YZ plane
translate([0, 0, dz])
rotate([0, 90, 0])
linear_extrude(dx)
hull()
{
for (iy = [0:1], iz = [0:1])
{
i = [1, 0, 2, 3][iy * 2 + iz];
r = ryz[i] == 0 ? 0.0001 : ryz[i];
y = iy == 0 ? r : dy - r;
z = iz == 0 ? r : dz - r;
intersection()
{
translate([z, y, 0])
circle(r, $fn=40);
square([dz, dy]);
}
}
}
// XZ plane
translate([0, dy, 0])
rotate([90, 0, 0])
linear_extrude(dy)
hull()
{
for (ix = [0:1], iz = [0:1])
{
i = [0, 3, 1, 2][ix * 2 + iz];
r = rxz[i] == 0 ? 0.0001 : rxz[i];
x = ix == 0 ? r : dx - r;
z = iz == 0 ? r : dz - r;
intersection()
{
translate([x, z, 0])
circle(r, $fn=40);
square([dx, dz]);
}
}
}
}
角落看起来像这样:
一个应用程序是这样的形状:https://www.printables.com/model/62314-cable-clamp#preview 它到处都有轻微的圆角,并且恰好在一个边缘有一个大圆角。
【问题讨论】:
标签: openscad