fillet 與 chamfer
November 26, 2021使用 OpenSCAD、CadQuery 這類 Code + CAD 方案,建模的對象多半是硬表面物件,也就是模型最後多半稜角分明,若想建立「軟」一點的物件,會是一個挑戰,我的 OpenSCAD 作品,就嘗試過不少的「軟」類型。
在 OpenSCAD 的領域,針對物件的稜角修飾,fillet 與 chamfer 是常見的需求,fillet 是稜角具有圓弧外觀,chamfer 是讓稜角可以成為「倒角」,也就是像是多做了一次切面。
基本使用
Workplane
針對 3D 實體,提供了 fillet
與 chamfer
方法,來看看它們最基本的用法:
import cadquery as cq
box = cq.Workplane().box(3, 3, 3)
filleted = box.fillet(radius = .5)
chamfered = box.chamfer(length = .5)
show_object(box)
show_object(filleted.translate((4, 0)))
show_object(chamfered.translate((8, 0)))
fillet
要指定圓弧半徑,chamfer
要指定建立倒角的邊距,一個邊會兩個邊距,預設第二個邊距會與第一個邊距相同,結果會顯示如下:
fillet
與 chamfer
的對象是邊,可以選取特定的邊後再執行方法,例如:
import cadquery as cq
box = cq.Workplane().box(3, 3, 3)
filleted = box.edges('>Z').fillet(radius = .5)
chamfered = box.edges('<Y').chamfer(length = .5)
show_object(box)
show_object(filleted.translate((4, 0)))
show_object(chamfered.translate((8, 0)))
這會顯示以下的結果:
併用 fillet、chamfer
當然,必要時可以併用:
import cadquery as cq
wired_box = (cq.Workplane()
.box(3, 3, 3)
.edges('>Z').fillet(radius = .5)
.edges('>X and <Z').chamfer(.25, 1)
.edges('<Y').chamfer(.25)
.edges('<Y').fillet(radius = .5)
)
以上的組合是隨意的,純示範邊的選取、fillet
與 chamfer
間可以併用罷了,這會建立以下的模型:
因為 fillet
與 chamfer
是針對邊,也可以如下:
import cadquery as cq
frame = (cq.Workplane()
.box(5, 5, 5)
.faces('>X or <X')
.shell(-1)
)
filleted = (frame.faces('>X')
.edges('not(>Y or <Y or >Z or <Z)')
.fillet(.5)
)
chamfered = (frame.faces('>X')
.edges('not(>Y or <Y or >Z or <Z)')
.chamfer(.5)
)
show_object(frame)
show_object(filleted.translate((0, 6)))
show_object(chamfered.translate((0, 12)))
這會建立以下的結果: