在建立模型的過程中,經常要做許多基本模型的組合,而 OpenSCAD 呈現給你最後的運算結果,然而,有時左看右看,可能就是看不到自己想檢視的細節,也許是被另一個模型遮住了,也許是想知道某個部份到底是放了什麼模型,才會有這種結果,這該怎麼辦呢?
#
突顯模型
舉個例子來說,在〈布林運算與 hull 轉換〉看過怎麼建一個愛心:
radius = 10;
module heart(radius) {
rotated_angle = 45;
diameter = radius * 2;
$fn = 48;
rotate(-rotated_angle) union() {
circle(radius);
translate([0, -radius, 0])
square(diameter);
}
translate([cos(rotated_angle) * diameter, 0, 0])
circle(radius);
}
heart(radius);
這個模型是由一個正方形與兩個圓形組合而成,如果想分別檢視正方形或圓形,可以在模型的程式碼前頭放上個 #
,這會將模型以紅色突顯出來,例如:
radius = 10;
module heart(radius) {
rotated_angle = 45;
diameter = radius * 2;
$fn = 48;
rotate(-rotated_angle) union() {
#circle(radius);
#translate([0, -radius, 0])
square(diameter);
}
#translate([cos(rotated_angle) * diameter, 0, 0])
circle(radius);
}
heart(radius);
這樣你就會看到以下的畫面:
%
半透明檢視
在〈布林運算與 hull 轉換〉也談過怎麼建立中空球:
radius = 10;
thickness = 1;
module hollow_sphere(radius, thickness) {
$fn = 48;
inner_radius = radius - thickness;
difference() {
sphere(radius);
sphere(inner_radius);
}
}
hollow_sphere(radius, thickness);
不過模型建立出來後,你只能看到這樣的結果:
這是因為大球體遮住了小球體,如果你想檢視一下內外兩球體的差異,可以使用 %
,這會將被標示的模型以半透明顯示,例如:
...
difference() {
%sphere(radius);
sphere(inner_radius);
}
...
這樣就可以看出內外兩個球體了:
!
單獨顯示
有時候,你只想看看模型中某個子模型,例如,在〈布林運算與 hull 轉換〉中談過怎麼在一個球體上放一個字母:
character = "A";
font_size = 10;
thickness = 1;
module hollow_sphere(radius, thickness) {
$fn = 48;
inner_radius = radius - thickness;
difference() {
sphere(radius);
sphere(inner_radius);
}
}
module sphere_character(ch, font_size, thickness) {
font_offset = font_size / 2;
intersection() {
hollow_sphere(font_size, thickness);
linear_extrude(font_size * 2)
translate([-font_offset, -font_offset, 0])
text(ch, size = font_size);
}
}
sphere_character(character[0], font_size, thickness);
sphere(font_size - thickness, $fn = 48);
如果你只想看看其中這段的效果呢?
...
linear_extrude(font_size * 2)
translate([-font_offset, -font_offset, 0])
text(ch, size = font_size);
...
你可能會想要註解掉其他程式碼,這是個方式,不過有點麻煩,你只要在子模型前頭放上一個 !
就可以了:
...
!linear_extrude(font_size * 2)
translate([-font_offset, -font_offset, 0])
text(ch, size = font_size);
...
這樣你就只會看到子模型單獨顯示:
*
停用模型
有時候你會想要停用某個子模型,看看結果如何,比方說,在上頭的 sphere_character
模組中,想停用這個部份:
...
linear_extrude(font_size * 2)
translate([-font_offset, -font_offset, 0])
text(ch, size = font_size);
...
使用註解嗎?也可以,不過,得全部加上註解,像是:
...
// linear_extrude(font_size * 2)
// translate([-font_offset, -font_offset, 0])
// text(ch, size = font_size);
...
或者是這樣:
...
/*
linear_extrude(font_size * 2)
translate([-font_offset, -font_offset, 0])
text(ch, size = font_size);
*/
...
兩種方式都有點麻煩,最方便的方式是使用 *
,例如:
...
*linear_extrude(font_size * 2)
translate([-font_offset, -font_offset, 0])
text(ch, size = font_size);
...
這樣就可以停用整個子模型的運算了。
render() 強制繪製子模型
OpenSCAD 有時候預覽模型,會產生破圖的結果,例如在一個球體上放一個字母,會看到這種結果:
你是可以按下 F6 執行 Render,建立完整的模型資訊,就可以看到沒有破圖了,不過,有時只是某個子模型產生預覽破圖,卻要整個模型進行 Render,有點浪費時間,這時你可以單獨對某個子模型使用 render()
,強制它建立完整的模型資訊。例如:
...
#render() sphere_character(character[0], font_size, thickness);
sphere(font_size - thickness, $fn = 48);
這樣的話,就不會產生破圖了,為了突顯字母的部份,上頭的例子還加上了 #
對子模型做了突顯,你會看到以下的結果:
以上幾個檢視與除錯模型的方式,可以交相運用,在建立模型的過程中,會是很方便的輔助!