関数は Code Block ノード内で作成することができ、Dynamo 定義の任意の場所から呼び出すことができます。これにより、パラメトリック ファイル内に新しいコントロール レイヤーが追加されます。Code Block ノードは、テキストベースのカスタム ノードとしてみなすことができます。この場合、「親」コード ブロックに簡単にアクセスすることができます。親コード ブロックは、グラフ上の任意の場所に配置することができます。ワイヤは必要ありません。
最初の行に、キーワードの「def」と関数名を続けて入力し、入力データの名前を括弧で囲んで記述します。関数の本文を定義する場合は、波括弧 {} を使用します。値を返す場合は、「return =」を指定します。関数を定義する Code Block ノードは他の Code Block ノードから呼び出されるため、入力ポートと出力ポートはありません。
関数を呼び出すには、同じファイル内で別の Code Block ノードを使用して、呼び出す関数の名前と、親 Code Block ノードで定義されているものと同じ数の引数を指定します。これは、ライブラリ内に用意されているノードと同様に動作します。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプルファイルの一覧については、付録を参照してください。
この演習では、点の入力リストから球体を生成する一般的な定義を作成します。これらの球体の半径は、各点の Z プロパティによってコントロールされます。
最初に、0 から 100 までの範囲内で 10 個の数値を作成しましょう。これらの数値を Point.ByCoordinates ノードに接続し、斜線を作成します。
Code Block ノードを作成して、定義を追加します。
次のコード行を使用します。
inputPt は、関数をコントロールする点を表す名前です。この時点では、この関数はまだ機能しませんが、これ以降の手順でこの関数を設定していきます。
Code Block ノードを使用して、この関数にコメントと sphereRadius 変数を入力します。この変数により、各点の Z 位置のクエリーが実行されます。inputPt.Z はメソッドであるため、引数を指定するための括弧は必要ありません。これは既存の要素のプロパティの クエリー であるため、入力は必要ありません。
ここで、別の Code Block ノードで作成した関数を呼び出してみましょう。キャンバスをダブルクリックして新しい Code Block ノードを作成し、sphereB と入力すると、既に定義されている sphereByZ 関数が候補として表示されます。これにより、前の手順で作成した関数が IntelliSense ライブラリに追加されていることがわかります。
関数を呼び出して Pt という変数を作成して、前の手順で作成した点を接続します。
出力されたリストを確認すると、値がすべて NULL になっていることがわかります。なぜでしょうか。これは、この関数を定義するときに sphereRadius 変数は計算しましたが、この関数が何を 出力 として 返す のかを定義しなかったためです。これについては、次の手順で修正します。
sphereByZ 関数に
return = sphereRadius;
というコード行を追加して、関数の出力を定義する必要があります。これは重要な手順です。Code Block ノードの出力は、各点の Z 座標です。
親 関数を編集して、実際に球体を作成してみましょう。
まず、次のコード行で球体を定義します。
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
次に、戻り値が sphereRadius から sphere となるように
return = sphere;
と記述します。これにより、Dynamo プレビューで非常に大きな球体が表示されます。
1.これらの球体のサイズを調整するには、
sphereRadius = inputPt.Z/20;
という除数を追加して sphereRadius 値を更新します。これで、各球体が離れて表示され、半径と Z 値との関係がわかるようになります。
Point.ByCoordinates ノードでレーシングを[最短リスト]から[直積]に変更して、点のグリッドを作成します。sphereByZ 関数により、すべての点で Z 値に基づいた半径の円が作成されます。
次に、Point.ByCoordinates ノードの X 入力に元の数値のリストを接続してみます。この操作により、球体によって構成される立方体が作成されます。
注: この処理に時間がかかる場合は、#10 を #5 などの値に変更してください。
ここで作成した sphereByZ 関数は汎用的な関数であるため、前の演習で作成したらせん構造を呼び出して、この関数を適用することができます。
最後に、半径の比をユーザ設定のパラメータでコントロールしてみましょう。これを行うには、関数に対して新しい入力を作成し、除数の 20 をパラメータで置き換える必要があります。
sphereByZ 関数の定義を、次のように更新します。
sphereByZ(Pt,ratio);
のように、子の Code Block ノードの入力に ratio 変数を追加して更新します。次に、新しく作成した Code Block ノードの入力に Number Slider ノードを接続し、半径の比に基づいて半径のサイズを変更します。