Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
透過在三維空間中明確指出 x、y、z 座標,可以建立某些幾何圖形物件。但是,我們更常對物件本身或對其基本的 CoordinateSystem 使用幾何轉換,將幾何圖形移動到最終位置。
最簡單的幾何轉換是平移,亦即將一個物件沿著 x、y、z 方向移動指定的單位數。
在 Dynamo 中,雖然可以在物件名稱的結尾附加 .Translate 方法平移所有物件,但是還有更複雜的轉換需要將物件從一個基本的 CoordinateSystem 轉換到新的 CoordinateSystem。例如,若要讓物件繞 x 軸旋轉 45 度,我們要使用 .Transform 方法,將物件從其既有無旋轉的 CoordinateSystem,轉換到一個已經繞 x 軸旋轉 45 度的 CoordinateSystem:
除了平移和旋轉,也可以用調整比例或切變方式建立 CoordinateSystem。CoordinateSystem 可以使用 .Scale 方法調整比例:
在 CoordinateSystem 建構函式中輸入非正交的向量可以建立切變的 CoordinateSystem。
比起旋轉和平移,調整比例和切變是相對比較複雜的幾何轉換,所以並非每個 Dynamo 物件都能經過這些轉換。下表概述哪些 Dynamo 物件可以有非等比例調整的 CoordinateSystem,以及切變的 CoordinateSystem。
Dynamo 標準幾何圖形資源庫中最簡單的幾何圖形物件是一個點。所有幾何圖形都是使用稱作建構函式的特殊函數建立的,每個建構函式都會傳回一個該特定幾何圖形類型的新實體。在 Dynamo 中,建構函式以物件類型的名稱 (在此案例中為 Point) 為開頭,後接建構的方法。若要建立一個以 x、y、z 直角座標指定的三維點,請使用 ByCoordinates 建構函式:
Dynamo 中的建構函式通常以「By」字首指定,呼叫這些函數會傳回該類型新建立的物件。這個新建立的物件以等號左邊命名的變數儲存。
大多數物件都有許多不同的建構函式,我們可以使用 BySphericalCoordinates 建構函式,指定圓球的半徑、第一個旋轉角度和第二個旋轉角度 (以度為單位指定) 建立一個圓球上的點:
點可以用來建構更高維度的幾何圖形,例如直線。我們可以使用 ByStartPointEndPoint 建構函式在兩個點之間建立一個 Line 物件:
同樣的,直線也可以用來建立更高維度的曲面幾何圖形,例如使用 Loft 建構函式,用一系列直線或曲線,在這之間內插一個曲面。
曲面也可以用來建立更高維度的實體幾何圖形,例如把曲面加厚指定的距離。許多物件都會附加稱為方法的函數,程式設計師可以對該特定物件執行指令。所有幾何圖形都通用的方法包括 Translate 和 Rotate,分別將幾何圖形平移 (移動) 和旋轉指定的量。曲面有一個 Thicken 方法,它採用一個單一的數字輸入,指定曲面的新厚度。
Intersection 指令可以從較高維度的物件萃取出較低維度的幾何圖形。在建立、萃取和重新建立幾何圖形的循環過程中,萃取出的較低維度幾何圖形可以形成較高維度幾何圖形的基礎。在此範例中,我們使用產生的實體 (Solid) 來建立一個曲面 (Surface),並使用曲面 (Surface) 來建立一條曲線 (Curve)。
計算設計中經常會使用曲線和曲面做為後續建構幾何圖形的基礎。為了讓這個早期的幾何圖形能夠做為後期幾何圖形的基礎,腳本必須要能夠萃取品質,例如物件整個區域的位置和方位。曲線與曲面兩種都支援這類萃取,這就是所謂的參數化。
一條曲線上所有的點都可以視為在 0 到 1 的範圍內具有唯一的參數。如果我們根據幾個控制點或內插點建立 NurbsCurve,第一個點的參數會是 0,最後一個點的參數會是 1。我們無法事先知道所有中間點的確切參數是多少,這聽起來像是很嚴重的限制,不過透過一系列的公用程式函數,這個狀況會減輕許多。曲面的參數化與曲線類似,但是有兩個分別稱為 u 和 v 的參數,而不是一個。如果我們要建立一個包含以下幾點的曲面:
p1 會有 u = 0 v = 0 的參數,p9 會有 u = 1 v = 1 的參數。
決定用來產生曲線的點時,參數化並不是特別好用,它的主要用途是決定由 NurbsCurve 和 NurbsSurface 建構函式所產生的中間點的位置。
曲線 (Curve) 有一個 PointAtParameter 方法,採用 0 到 1 之間的一個雙精確度引數,並傳回位於該參數的 Point 物件。例如,此腳本會找出參數 0、.1、.2、.3、.4、.5、.6、.7、.8、.9 和 1 的點 (Point):
同樣的,曲面 (Surface) 有一個 PointAtParameter 方法,採用兩個引數:產生的點的 u 和 v 參數。
在萃取曲線和曲面上的各個點時雖然很好用,但是腳本通常需要知道位於某個參數的特定幾何特性,例如曲線或曲面是朝向哪個方向。CoordinateSystemAtParameter 方法不只會找出位置,也會找出位於曲線或曲面的參數處有方向的 CoordinateSystem。例如,以下腳本會沿著一個迴轉的曲面 (Surface) 萃取出有方向的 CoordinateSystem,並使用 CoordinateSystem 的方位產生插在曲面法線方向上的線條:
如先前所述,參數化在整個曲線或曲面的長度不一定都是均勻的,這表示參數 0.5 不一定會永遠對應到曲線或曲面的中點,0.25 不一定會永遠對應到曲線或曲面四分之一的點。若要避開這種限制,曲線還有另外一組參數化指令,可讓您沿著曲線找出位於特定長度的點。
計算設計中的物件很少會以其最終的位置和形狀明確建立,幾乎都是以既有的幾何圖形為基礎,將它們經過平移、旋轉,或以其他任何方式放在適當位置。向量數學是一種以幾何搭建鷹架的方式,對幾何圖形提供方向和方位,並且將整個 3D 空間的移動概念化而不提供視覺表現法。
從最基礎來說,一個向量代表 3D 空間中的一個位置,而且通常視為從位置 (0,0,0) 到該位置的一個箭頭終點。向量可以使用 ByCoordinates 建構函式建立,採用新建立的向量物件的 x、y、z 位置。請注意,向量物件不是幾何物件,不會出現在 Dynamo 視窗中。但是在主控台視窗中可以列印出新建立或修改過的向量的相關資訊:
向量物件定義了一組數學運算,讓您可以在 3D 空間中相加、相減、相乘,或以其他任何方式移動物件,就像您在 1D 空間中的數線上移動實數一樣。
向量相加是定義為兩個向量的分量總和,可以視為是兩個分量的向量箭頭以尖端接著尾端的方式放置而得到的向量。 向量相加是使用 Add 方法執行,以左圖表示。
同樣的,兩個向量物件可以使用 Subtract 方法相減。向量相減可以視為是從第一個向量到第二個向量的方向。
向量相乘可以視為將一個向量的終點沿著自己的方向移動給定的比例係數。
如果要調整一個向量的大小,讓產生的向量長度完全等於調整的量,就經常會這樣做。只要先將一個向量正規化,也就是將向量的長度設定為等於 1,就可以輕鬆達成目標。
c 還是指向與 (1, 2, 3) 相同的方向,但是現在長度等於 5。
向量數學中還有其他兩個與 1D 數學無關的方法,分別是外積和內積。外積是一種從兩個既有向量產生一個與這兩個向量成正交 (90 度) 的向量的方法。例如,x 軸和 y 軸的外積是 z 軸,不過兩個輸入向量不必然要互相正交。外積向量是透過 Cross 方法計算。
向量數學另外一個更進階的函數是內積。二個向量的內積是一個與兩個向量之間的角度有關但不是完全相同的一個實數 (不是 Vector 物件)。內積一個有用的性質是,如果兩個向量互相垂直,則兩個向量之間的內積將為 0。內積使用 Dot 方法計算。
NurbsCurve 的二維類比是 NurbsSurface,就像自由形式的 NurbsCurve,您可以使用兩種基本方法建構 NurbsSurface:一個是輸入一組基準點,讓 Dynamo 在這些點之間內插,另一個是明確指定曲面的控制點。就像自由形式的曲線,如果設計師很清楚知道要產生的曲面形狀,或如果設計需要曲面通過約束點,內插的曲面會很好用。相反地,如果是要探索各種平滑程度的設計,透過控制點建立的曲面就比較有用。
若要建立內插的曲面,只要產生一些近似曲面形狀的二維點即可。這些點必須是矩形,亦即不是鋸齒狀。NurbsSurface.ByPoints 方法會從這些點建構一個曲面。
指定曲面的基本控制點,也可以建立自由形式的 NurbsSurface。就像 NurbsCurve 一樣,控制點可以視為是代表一個有直線段的四邊形網格,這會根據曲面的次數,平滑化成最終的曲面形狀。若要使用控制點來建立 NurbsSurface,請在 NurbsSurface.ByPoints 中包含另外兩個參數,指出基本曲線在曲面兩個方向的次數。
我們可以增加 NurbsSurface 的次數,來變更產生的曲面幾何圖形:
就像我們可以在一組輸入點之間內插來建立 Surface,也可以在一組基準曲線之間內插來建立 Surface。這稱為斷面混成。使用 Surface.ByLoft 建構函式可以建立斷面混成的曲線,一組輸入曲線是唯一的參數。
迴轉的曲面是另外一種曲面類型,環繞一個中心軸掃掠一條基準曲線可以建立這種曲面。如果內插曲面是內插曲線的二維類比,則迴轉的曲面就是圓和弧的二維類比。
迴轉的曲面是由基準曲線 (代表曲面的「邊緣」)、軸原點 (曲面的基準點)、軸方向 (中央「核心」方向)、掃掠起始角度和掃掠結束角度指定。這些是用來做為 Surface.Revolve 建構函式的輸入。
雖然 Dynamo 能夠建立各種複雜幾何形狀,但是簡單的幾何基本型是構成任何計算設計的骨架:無論是以最終設計的形式直接表示,或是用來做為產生更複雜幾何圖形的鷹架。
雖然 CoordinateSystem 嚴格來說不算是一個幾何圖形,但卻是建構幾何圖形的一個重要工具。一個 CoordinateSystem 物件可以同時追蹤位置和幾何的轉換,例如旋轉、切變和調整比例。
建立一個中心點位於 x=0,y=0,z=0 的 CoordinateSystem (沒有旋轉、調整比例或切變轉換),只需要呼叫 Identity 建構函式:
具有幾何轉換的 CoordinateSystem 超出本章節的範圍,不過有另一個建構函式 CoordinateSystem.ByOriginVectors 可以讓您在特定的點建立座標系統:
最簡單的幾何基本型是一個點 (Point),代表三維空間中的一個零維位置。如先前所述,在特定座標系統中建立一個點有幾種不同的方式:Point.ByCoordinates 以指定的 x、y、z 座標建立一個點;Point.ByCartesianCoordinates 在特定座標系統中以指定的 x、y、z 座標建立一個點;Point.ByCylindricalCoordinates 在有半徑、旋轉角度和高度的圓柱上建立一個點;Point.BySphericalCoordinates 在有半徑和兩個旋轉角度的圓球上建立一個點。
本範例會顯示在各種座標系統建立的點:
下一個較高維度的 Dynamo 基本型是線段,代表兩個端點之間有無限個點。使用 Line.ByStartPointEndPoint 建構函式明確指出兩個邊界點,或使用 Line.ByStartPointDirectionLength 建構函式指定起點、方向和沿著該方向的長度,可以建立直線。
Dynamo 有幾個物件,代表三維的幾何基本型的最基本類型:使用 Cuboid.ByLengths 建立的立方體 (Cuboid);使用 Cone.ByPointsRadius 和 Cone.ByPointsRadii 建立的圓錐 (Cone);使用 Cylinder.ByRadiusHeight 建立的圓柱 (Cylinder);以及使用 Sphere.ByCenterPointRadius 建立的圓球 (Sphere)。
在 Dynamo 中有兩種基本方法可以建立自由形式的曲線:指定一些點,讓 Dynamo 在這些點之間插出一條平滑的曲線,另一個比較低階的方法是指定某個次數的曲線的基本控制點。如果設計師很清楚知道要產生的線條形狀,或如果設計有一些特定的約束讓曲線可以或無法通過,內插的曲線會很好用。透過控制點指定的曲線實際上是一系列的直線段,演算法會將這些線段平滑產生一條最終的曲線形狀。如果是要探索各種不同平滑程度的曲線形狀,或者當曲線段之間的平滑連續性很重要時,透過控制點指定曲線就很好用。
若要建立內插的曲線,只要將一些點傳入 NurbsCurve.ByPoints 方法即可。
產生的曲線會分別與每個輸入點相交,從第一個點開始,在最後一個點結束。這裡可以使用一個選擇性的週期性參數,用來建立一條週期性的封閉曲線。Dynamo 會自動填入缺少的線段,因此不需要複製終點 (與起點相同)。
NurbsCurve 以幾乎相同的方式產生,輸入點代表直線段的端點,第二個參數稱為次數,指定平滑化曲線的量和類型。* 1 次的曲線沒有平滑化;它是一條聚合線。
2 次的曲線會平滑化讓曲線相交,而且會與聚合線線段的中點相切:
Dynamo 支援最高到 20 次的 NURBS (非均勻的有理 B 雲形線) 曲線,以下腳本說明增加平滑程度對曲線造型的影響:
請注意,至少要比曲線的次數多一個控制點。
透過控制頂點來建構曲線的另一個好處是,能夠在個別的曲線段之間維持相切。只要萃取出最後兩個控制點之間的方向,然後讓後續曲線的前兩個控制點繼續沿著此方向即可。以下範例會建立兩條獨立的 NURBS 曲線,不過這兩條曲線如一條曲線般平滑:
*這是一個非常簡化的 NURBS 曲線幾何圖形說明,如需更準確更詳細的討論,請參閱參考資料中的 Pottmann, et al, 2007。
在本節中,您將會學習一系列如何使用 DesignScript 建立幾何圖形的課程。請將範例 DesignScript 複製到 Dynamo 程式碼區塊逐步進行。
類別 | 非等比例調整的 CoordinateSystem | 切變的 CoordinateSystem |
---|---|---|
Arc
否
否
NurbsCurve
是
是
NurbsSurface
否
否
Circle
否
否
Line
是
是
Plane
否
否
Point
是
是
Polygon
否
否
Solid
否
否
Surface
否
否
Text
否
否
以下 Python 指令碼會為多個範例產生點陣列。請將這些指令碼貼至 Python Script 節點,如下所示:
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
到目前為止,許多範例都將重點放在從較低維度的物件建構較高維度的幾何圖形。交集的方法允許這種較高維度的幾何圖形產生較低維度的物件,而修剪和選取修剪的指令則允許腳本在建立幾何圖形後大幅修改幾何形狀。
Dynamo 針對所有幾何圖形都定義了 Intersect 方法,表示理論上,任何幾何圖形部分都可以與其他任何幾何圖形部分相交。某些交集本來就沒有意義,例如牽涉到點 (Point) 的交集,因為產生的物件永遠都是輸入點本身。下表概述物件之間其他可能的交集組合。下表概述各種交集運算的結果:
下面這個非常簡單的範例示範一個平面與一個 NurbsSurface 的交集。交集產生一個 NurbsCurve 陣列,可以像任何其他 NurbsCurve 一樣使用這個陣列。
Trim 方法與 Intersect 方法非常類似之處在於幾乎是針對每個幾何圖形定義。不過,Trim 的限制遠比 Intersect 還多。
請注意,Trim 方法一定要有「選取」點,這個點決定要捨棄哪個幾何圖形,要保留哪些部份。Dynamo 會找出並捨棄最接近選取點且經過修剪的幾何圖形。
Intersect、Trim 和 SelectTrim 主要是用在較低維度的幾何圖形 (例如點、曲線和曲面)。而立體幾何圖形則有額外的一組方法,可以透過類似 Trim 的方法減去材料,然後將元素合併在一起形成較大的元素,在建構幾何圖形後修改形狀。
Union 方法使用兩個實體物件,從兩個物件都涵蓋到的空間建立單一實體物件。物件之間重疊的空間會合併成最終的形狀。此範例將一個圓球和一個立方體合併成一個單一的立體圓球-立方塊造型:
Difference 方法與 Trim 類似,從基準實體減去輸入工具實體的內容。在此範例中,我們從一個圓球切掉一個小凹口:
Intersect 方法傳回兩個實體輸入之間重疊的實體。在以下範例中,Difference 已變成 Intersect,產生的實體是一開始切掉不見的空洞:
使用: Point
Curve
Plane
Surface
Solid
對: Curve
是
否
否
否
否
Polygon
-
否
是
否
否
Surface
-
是
是
是
是
Solid
-
-
是
是
是
與:
Surface
Curve
Plane
Solid
Surface
Curve
Point
Point、Curve
Surface
Curve
Point
Point
Point
Curve
Plane
Curve
Point
Curve
Curve
Solid
Surface
Curve
Curve
Solid