用 OpenSCAD 繪製一個圓角正方體

前言

個人覺得 OpenSCAD 入門還算很快的, 語法非常接近 C 語言。

相比常用的工業建模軟體 SolidWorks 而言,
它可以用程式碼去描述工件外觀和大小。具有參數化和可移植性的特點。 非常適合改來改去

話不多説, 立刻開始。

圓角正方體的平面構成

我們這裡説的不是通常意義上的 八個邊圓角 的那種, 一個立方體有8個邊嘛
而是 四個邊圓角 的類型, 即 與底面垂直的四個邊 是圓角。
img

而我們在矢量圖形中一般是使用 圓形矩形 取並集去拼合圓角矩形。
img
當然你也可以直接透過繪製四個 1/4 Arc 來達到目的。

那麽在 OpenSCAD 中我們也有差不多的東西,
我們可以使用 hull() 來取得對象集合在空間上的極限邊距, 同時抛棄對象集合内部所有的頂點。
擺爛了, 隨便把樣子搞出來, 然後丟掉

嘗試畫一個

理解這些理論知識之後, 我們可以開始試著畫一個了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// for high definition curves
// so set factor to 0.1
$fs = 0.1;

translate ([0, 0, 0]) {
// get bounding box
hull() {
// translate object to [0, 0, 0]
// draw a cylinder with height 5, radius 0.5
translate([0, 0, 0]) cylinder(5, 0.5, 0.5);
translate([5, 0, 0]) cylinder(5, 0.5, 0.5);
translate([0, 5, 0]) cylinder(5, 0.5, 0.5);
translate([5, 5, 0]) cylinder(5, 0.5, 0.5);
}
}

然後我們就能得到一個
img

然後可以包裝一下成爲一個模塊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
module squircle (size = [1, 1, 1], r = 0.5, center = false) {
$fs = 0.1;
x = size[0] - r * 2;
y = size[1] - r * 2;
z = size[2];

translate(center ? [-(x / 2), -(y / 2), 0] : [r, r, 0])
hull() {
translate([0, 0, 0]) cylinder(z, r = r);
translate([x, 0, 0]) cylinder(z, r = r);
translate([0, y, 0]) cylinder(z, r = r);
translate([x, y, 0]) cylinder(z, r = r);
}
}

僅僅幾行代碼就能生成一個圓角正方體,
以後只需要簡單地修改參數, 我們就能得到不同尺寸的圓角正方體了。
這可比 SolidWorks 改草稿的效率要高很多。

用 OpenSCAD 繪製一個圓角正方體

https://blog.awa.moe/2022/06/02/openscad/draw-squircle-cube/

Author

TheSnowfield

Posted on

2022-06-02

Updated on

2024-03-17

Licensed under