可以在程式碼塊中建立函數,然後在 Dynamo 定義中的其他位置重新呼叫函數。此作業會在參數式檔案中建立另一個控制層,可視為自訂節點的文字版本。在此案例中,「父系」程式碼區塊可隨時存取,可在圖表中的任何位置找到。無需使用線路!
第一行包含關鍵字「def」,然後依次是函數名稱與輸入的名稱 (在括號中)。大括號定義函數的本體。使用「return =」傳回值。定義函數的程式碼區塊沒有輸入或輸出埠,因為會從其他程式碼區塊呼叫。
使用同一檔案中的其他程式碼區塊,只需提供名稱與相同數量的引數即可呼叫函數。其工作方式類似於資源庫中的現成節點。
按一下下方的連結下載範例檔案。
附錄中提供範例檔案的完整清單。
在本練習中,我們將進行根據輸入點清單建立圓球的一般定義。這些圓球的半徑由每個點的 Z 性質驅動。
接下來先建立介於 0 到 100 之間的一系列十個值。將這些值插入 Point.ByCoordinates 節點,以建立對角線。
建立 Code Block 並介紹我們的定義。
使用以下程式碼行:
inputPt 是我們為了表示驅動函數的點而提供的名稱。到現在為止,函數不會執行任何作業,但我們將在後續步驟中建置此函數。
加入 Code Block 函數後,我們加上註解和 sphereRadius 變數,它會查詢每個點的 Z 位置。請記住,inputPt.Z 是一個方法,不需要括號。這是 查詢 既有元素的性質,因此不需要任何輸入:
現在,我們呼叫在另一個 Code Block 中建立的函數。如果在圖元區上按兩下以建立新的 Code Block,然後鍵入 sphereB,我們發現 Dynamo 建議使用我們定義的 sphereByZ 函數。您的函數已加入 intellisense 資源庫!太酷了。
現在,我們呼叫函數,並建立一個稱為 Pt 的變數以插入先前步驟中建立的點:
我們看到輸出全部都是空值。為何會發生這種情況?定義函數時,我們會計算 sphereRadius 變數,但沒有定義函數應 傳回 哪些項目做為 輸出。我們可以在下一步修正此問題。
我們需要在 sphereByZ 函數中加入
return = sphereRadius;
行定義函數的輸出,這是重要的步驟。現在,我們可以看到程式碼區塊的輸出提供每個點的 Z 座標。
現在,我們要編輯 父系 函數以建立實際的圓球。
我們首先使用以下程式碼行定義圓球:
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
接下來,我們將傳回值變更為 sphere,而不是 sphereRadius:
return = sphere;
這會在 Dynamo 預覽中產生一些巨大的圓球!
1.若要調整這些圓球的大小,我們加入圓規來更新圓球半徑值:
sphereRadius = inputPt.Z/20;
現在,我們可以看到分開的圓球,並開始了解半徑與 Z 值之間的關係。
在 Point.ByCoordinates 節點上,透過將交織從「最短清單」變更為「笛卡兒積」,我們建立點的格線。sphereByZ 函數仍完全有效,因此所有點會建立半徑以 Z 值為基礎的圓球。
為了進行測試,我們將原始數字清單插入 Point.ByCoordinates 的 X 輸入。我們現在有一個立方塊的圓球。
注意:如果在您的電腦上需要花很長時間執行此計算,請嘗試將 #10 變更為諸如 #5 等數字。
請記住,我們建立的 sphereByZ 函數是一般函數,因此可以回顧先前課程中的螺旋線,並對其套用函數。
最後一步:運用使用者定義的參數驅動半徑比。若要執行,我們需要為函數建立新輸入,並使用參數取代除數 20。
將 sphereByZ 定義更新為:
在輸入
sphereByZ(Pt,ratio);
中加入 ratio 變數以更新子系 Code Block。將滑棒插入新建立的 Code Block 輸入,並根據半徑比變更半徑的大小。