コード ブロックを使用すると、Dynamo の核となる DesignScript というプログラミング言語を詳しく理解することができます。予備的な設計ワークフローをサポートするためにまったく新しく開発された DesignScript は、簡潔で理解しやすい言語です。短いコードを迅速に変更することも、大規模で複雑な相互作用に対応することもできます。DesignScript は、Dynamo 内部のほとんどの要素を駆動するエンジンの中核でもあります。Dynamo ノード内のほぼすべての機能と相互作用について、スクリプト言語に対する 1 対 1 の関係が存在するため、ノードベースの相互作用とスクリプトを柔軟に切り替えることができます。これは、Dynamo 独自の機能です。
操作に慣れていない初級ユーザのために、ノードを自動的にテキスト構文に変換する機能が用意されています。これにより、DesignScript の理解をサポートしたり、グラフの大きな部分のサイズを簡単に小さくすることができます。この操作は、「ノードをコード化」という処理を使用して実行されます。この処理については、「DesignScript 構文」のセクションで詳しく説明します。操作に慣れている上級ユーザは、コード ブロックで各種の標準的なコードのパラダイムを使用して、既存の機能とユーザ定義の関係を組み合わせてカスタマイズすることができます。初心者ユーザと上級ユーザの間に位置する中級ユーザについては、設計作業をすばやく行うためのさまざまなショートカットやコード スニペットが用意されています。プログラミング経験のないユーザにとって、「コード ブロック」という言葉は難しそうに感じるかもしれませんが、使用方法も簡単で、安定して動作します。初級ユーザは、最小限のコードを記述してコード ブロックを効率的に使用でき、上級ユーザは、Dynamo 定義内の任意の場所で呼び出すことのできるスクリプト定義を作成することができます。
コード ブロックとは、一言でいうと、ビジュアル スクリプティング環境内で使用するテキスト スクリプティング インタフェースです。コード ブロックは、数値、文字列、式などのデータ タイプとして使用することができます。コード ブロックは Dynamo 専用に設計されているため、コード ブロック内で任意の変数を定義することができます。定義した変数は、自動的にノードの入力に追加されます。
コード ブロックを使用すると、入力値の指定方法を柔軟に決定することができます。(10, 5, 0) という座標の基本的な点を作成するには、次のようにいくつかの方法があります。
ライブラリ内の使用可能な各種の関数に慣れてくると、「Point.ByCoordinates」と入力する方が、ライブラリ内を検索して目的のノードを探すよりも早いということがわかるようになります。「Point.」と入力すると、点に対して適用できる関数のリストが表示されます。これにより、直感的にスクリプトを作成することができ、Dynamo で関数を適用する方法を理解することができます。
Code Block ノードは、[Core] > [Input] > [Actions] > [Code Block] で使用することができます。または、キャンバス上でダブルクリックするだけで Code Block ノードが表示されます。この方が簡単です。Code Block ノードは頻繁に使用されるため、キャンバス上でダブルクリックするだけで Code Block ノードが表示されるようになっています。
Code Block ノードを使用すると、データ タイプについても柔軟に操作することができます。Code Block ノードを使用して、数値、文字列、式をすばやく定義し、目的の値を出力することができます。
次の図を見ると、値を定義するための従来の方法(左側の方法)は少し冗長であることがわかります。この方法では、インタフェース内で目的のノードを検索してキャンバスに追加し、データを入力する必要があります。Code Block ノードを使用すると、キャンバス上でダブルクリックするだけで Code Block ノードを表示し、基本的な構文で正しいデータ タイプを入力することができます。
Code Block ノードと比べた場合、Number、String、Formula の各ノードは旧式のノードということができます。
従来の方法
コード ブロック
Code Block にはデータ管理を 大幅に 容易にする基本的な省略表記方法がいくつかあります。ここでは基本の概要を示し、この省略表記をデータの作成とクエリーの両方に使用する方法を説明します。
基本的な省略表記を組み合わせることで、範囲とシーケンスを設定することができます。下記の画像を「..」構文のガイドとして参照し、Code Block を使用して数値データのリストを設定してみましょう。この表記に慣れると、数値データを効率的に作成できるようになります。
この例では、数値範囲を
beginning..end..step-size;
の基本的な Code Block 構文で置き換えて設定します。数値で表すと、0..10..1;
になります。構文
0..10..1;
は0..10;
と同等です。ステップサイズの 1 は、省略表記の既定値です。つまり、0..10;
はステップサイズが 1 であるシーケンス 0 から 10 を表しています。シーケンス の例も同様です。ただし、「#」を使用して、15 までの値を含むリストではなく、15 個の値を含むリストを指定しています。このケースでは、
beginning..#ofSteps..step-size:
を定義しています。シーケンスの実際の構文は0..#15..2
です。今度は前の手順の「#」を構文の step-size 部分に配置してみましょう。これで、数値範囲 は beginning から end に設定され、これらの 2 つの間の値が step-size 表記に指定された値で均等に分割されます:
beginning..end..#ofSteps
高度な範囲を作成すると、リストのリストを簡単な方法で使用できます。次の例では、メイン範囲の表記から変数を分離して、このリストに別の範囲を作成します。
1.ネストされた範囲を作成して、「#」が指定されている表記と指定されていない表記とを比較してみましょう。ロジックは基本的な範囲と同じですが、多少複雑になります。
2.サブ範囲はメイン範囲内の任意の場所に設定できます。また、2 つのサブ範囲を設定することもできます。
3.範囲内の「end」値をコントロールすることにより、長さが異なる範囲を追加で作成できます。
ロジックの演習として上記の 2 つの省略表記を比較し、サブ範囲 と # 表記が出力をどのようにコントロールしているかを読み解いてください。
リストは省略表記を使用して作成できる他、すばやく作成することも可能です。これらのリストには幅広い要素タイプを含めることができ、クエリーを実行することも可能です(リストはリスト自体がオブジェクトです)。簡単に言うと、Code Block でブラケット(角括弧)を使用してリストを作成し、リスト内の項目のクエリーを実行します。
1.文字列を使用してリストをすばやく作成し、項目のインデックスを使用してクエリーを実行します。
2.変数を使用してリストを作成し、範囲の省略表記を使用してクエリーを実行します。
ネストされたリストを管理するプロセスは同様です。リストの順番に配慮し、複数の角括弧のセットを使用します。
1.リストのリストを設定します。
2.1 つの角括弧の表記を使用してクエリーを実行します。
3.2 つの角括弧の表記を使用して項目のクエリーを実行します。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプル ファイルの一覧については、付録を参照してください。
この演習では、新しい省略表記のスキルを使用して範囲と式を設定し、一風変わった卵型のサーフェスを作成します。この演習では、Code Block と既存の Dynamo ノードを並行して使用する方法を学習します。Dynamo ノードを視覚的に配置して設定を確認しながら、Code Block を使用して大きなデータを処理します。
まず上記のノードを接続してサーフェスを作成します。数値ノードを使用して幅と長さを設定する代わりに、キャンバスをダブルクリックして、Code Block に 100;
と入力します。
Code Block に
0..1..#50
と入力して、0 から 1 の範囲を 50 個に分割するように設定します。範囲を Surface.PointAtParameter ノードに接続します。これは 0 から 1 の範囲内にある u と v の値を取得してサーフェス全体に設定します。Surface.PointAtParameter ノードを右クリックし、レーシングを[外積]に変更します。
この手順では、最初の関数を適用して、グリッドを Z の正の向きに移動します。このグリッドは基盤となる関数に基づいて生成されるサーフェスをコントロールします。下図に示すように、新しいノードを追加します。
式ノードを使用する代わりに、Code Block を使用して
(0..Math.Sin(x*360)..#50)*5;
を指定します。この式を簡単に分割して説明するために、式内に範囲を設定します。この式は正弦関数です。正弦関数は Dynamo で角度(度)入力を受け取ります。このため、完全な正弦波を取得するには、x 値(0 から 1 までの入力範囲)を 360 で乗算します。次に、各行のコントロール グリッドの点と同じ数だけ分割するため、#50 を指定して 50 個のサブディビジョンを設定します。最後に、Dynamo プレビューで効果を確認できるようにするため、累乗の指数に 5 を指定して変換の振幅を大きくします。
以前の Code Block は正常に動作しましたが、完全にパラメータではありませんでした。動的にパラメータをコントロールするため、前の手順の行を
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;
に置き換えます。こうすることで、これらの値を入力に基づいて設定できるようになります。
スライダ(範囲 0 から 10)を変更して、どのような結果が生じるか確認します。
数値範囲を転置することにより、カーテン ウェーブの方向を反転します:
transposeList = List.Transpose(sineList);
。
sineList と tranposeList を追加すると、歪曲した卵型のサーフェスが生成されます:
eggShellList = sineList+transposeList;
。
以下に指定するスライダの値を変更して、このアルゴリズムをなだらかにします。
最後に、Code Block を使用して、データの一部のクエリーを実行しましょう。特定の範囲の点を指定してサーフェスを再生成するには、Geometry.Translate ノードと NurbsSurface.ByPoints ノードの間に上記の Code Block ノードを追加します。sineStrips[0..15..1];
が指定されています。これにより、50 行の最初の 16 行の点が選択されます。サーフェスを再作成すると、点のグリッドの一部が分離されて生成されていることがわかります。
最後の手順では、この Code Block をよりパラメトリックなものにするため、範囲 0 から 1 のスライダを使用してクエリーをコントロールします。これは、次のコード行で行います。
sineStrips[0..((List.Count(sineStrips)-1)*u)];
わかりにくいかもしれませんが、このコード行により、リストの長さを乗数 0 から 1 の値を使用してすばやくスケールできます。
スライダに 0.53
の値を設定すると、グリッドの中央をわずかに超えるサーフェスが作成されます。
想定どおり、スライダを 1
に設定すると、すべての点のグリッドを使用してサーフェスが作成されます。
ビジュアル プログラムを参照する際、Code Block をハイライト表示して Code Block ノードの各関数を確認できます。
1.最初の Code Block ノードは Number ノードを置き換えます。
2.2 番目の Code Block ノードは Number Range ノードを置き換えます。
3.3 番目の Code Block ノードは Formula ノード(および List.Transpose、List.Count、Number Range の各ノード)を置き換えます。
4.4 番目の Code Block ノードはリストのリストのクエリーを実行し、List.GetItemAtIndex ノードを置き換えます。
コード ブロックは、ビジュアル プログラミング環境をテキストベースの環境に動的にリンクさせる、Dyanamo 独自の機能です。コード ブロックでは、1 つのノードですべての Dynamo ノードにアクセスし、グラフ全体を定義することができます。コード ブロックは Dynamo の基本的な要素です。この章をよく読んで、コード ブロックを理解してください。
Dynamo のノード名に共通の形式があることにお気付きでしょうか。各ノードはスペースなしの「.」構文を使用しています。これは、各ノードの最上部にあるテキストがスクリプトの実際の構文を表しており、「.」(ドット表記)が呼び出し可能なメソッドと要素を区切っています。これにより、ビジュアル スクリプトから文字ベースのスクリプトに簡単に変換することができます。
ドット表記の一般的な使用例として、apple (リンゴ)というパラメータが Dynamo でどのように処理されるか見てみましょう。以下は、リンゴを食べる前にリンゴに対して実行するいくつかのメソッドを示しています。(注: これらは Dynamo の実際のメソッドではありません)。
説明 | ドット表記 | 出力 |
---|
読者がどう思われるかはわかりませんが、上記の表の出力から判断すると、私にはおいしいリンゴのように見えます。Apple.eat() を実行しようと思います。
リンゴの例を念頭に置きながら、Point.ByCoordinates で Code Block を使用して点を作成する方法を見てみましょう。
Code Block ノードの構文 Point.ByCoordinates(0,10);
は、Dynamo の Point.ByCoordinates ノードと同じ結果を生成します。ただし、1 つのノードを使用して点を作成できるという違いがあります。x 入力と y 入力に異なるノードを接続する必要がないため、より効率的です。
Code Block で Point.ByCoordinates を使用することにより、初期設定のままのノード (x,y) と同じ順番で入力を指定します。
ライブラリ内の通常のノードは、Code Block を通じて呼び出すことができます。ただし、特別なユーザ インタフェース機能を持つ特別な UI ノード は呼び出すことができません。たとえば、Circle.ByCenterPointRadius を呼び出すことはできますが、Watch 3D ノードを呼び出すことは意味がありません。
通常の(ライブラリのほとんどの)ノードは一般的に 3 つのタイプに分けられます。ライブラリはこれらのカテゴリに基づいて編成されています。これらの 3 つのタイプのメソッド(ノード)では、Code Block で呼び出されるときの処理がそれぞれ異なります。
Create - 何かを作成(または構築)します
Action - 何かに対してアクションを実行します
Query - 既に存在する何かのプロパティを取得します
[Create]カテゴリはジオメトリを一から構築します。Code Block には値を左から右に入力します。これらの入力の順番は、上から下に入力するノードの入力の順序と同じです。
Line.ByStartPointEndPoint ノードと、Code Block 内の対応する構文とでは、同じ結果が生成されます。
このタイプのオブジェクトに対してはアクションを行います。Dynamo は(多くのコーディング言語で一般的な) ドット表記 を使用して、対象に対してアクションを適用します。対象とするオブジェクトを決めたら、ドットに続けてアクション名を入力します。Action タイプのメソッドの入力は、Create タイプのメソッドと同様、括弧で囲んで指定されます。ただし、対応するノードの最初の入力を指定する必要はありません。代わりに、アクションの実行対象の要素を指定します。
Point.Add ノードは Action タイプのノードであるため、構文の動作が多少異なります。
入力は(1) point と、(2)その点に追加する vector の 2 つです。Code Block では、点(対象)に「pt」という名前を付けています。*“vec” *という名前のベクトルを「pt」に追加するには、pt.Add(vec)、つまり「対象、ドット、アクション」の形式で書き込みます。Add アクションの入力は 1 つのみであるか、または Point.Add ノードの最初の入力を除くすべての入力になります。Point.Add ノードの最初の入力は点自体です。
Query タイプのメソッドはオブジェクトのプロパティを取得します。オブジェクト自体が入力であるため、入力を指定する必要はありません。括弧は必要ありません。
ノードを使用するレーシングと、Code Block を使用するレーシングとは少々異なります。ノードを使用する場合、ユーザはノードを右クリックして、実行するレーシング オプションを選択します。Code Block を使用する場合、ユーザはデータを構築する方法をより詳しくコントロールできます。Code Block の省略表記では、複製ガイド を使用して、複数の 1 次元リストをペアリングする方法を設定します。山括弧「<>」内の数値(<1>、<2>、<3> など)は、生成するネストされたリストの階層を設定します。
この例では、省略表記で 2 つの範囲を設定します(省略表記については、この章の次のセクションで詳しく説明します)。つまり、
0..1;
は{0,1}
に相当し、-3..-7
は{-3,-4,-5,-6,-7}
に相当します。この結果、2 つの x 値と 5 つの y 値のリストが返されます。このような範囲が一致していないリストを持つ複製ガイドを使用しない場合は、2 つの点が含まれるリストが返され、リストの長さは短い方の長さになります。複製ガイドを使用すると、2 つの値と 5 つの値を組み合わせたすべての座標(または外積)を表示できます。構文 Point.ByCoordinates
(x_vals<1>,y_vals<2>);
を使用すると、それぞれ 5 つの項目を含む 2 つのリストが生成されます。構文 Point.ByCoordinates
(x_vals<2>,y_vals<1>);
を使用すると、それぞれ 2 つの項目を含む 5 つのリストが生成されます。
この表記では、5 つの項目を持つ 2 つのリストと 2 つの項目を持つ 5 つのリストのどちらを優先リストにするか指定することもできます。例では、複製ガイドの順番を変更することにより、グリッドの点の行のリストまたは列のリストを生成できます。
Code Block を使用する上記の方法を使用するには多少の慣れが必要ですが、Dynamo には処理を容易にする[ノードをコード化]という機能があります。この機能を使用するには、Dynamo グラフでノードの配列を選択し、キャンバスを右クリックして、[ノードをコード化]を選択します。Dynamo はこれらのノードを、すべての入力と出力を含め、1 つの Code Block に統合します。このツールは Code Block の学習に役立つだけでなく、より効率的でパラメトリックな Dynamo グラフの使用を可能にします。次の演習では最後に[ノードをコード化]を使用します。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプル ファイルの一覧については、付録を参照してください。
Code Block の性能を紹介するため、既存のアトラクタ フィールドの設定を Code Block の形式に変換します。既存の設定を使用することにより、Code Block がビジュアル スクリプトとどのように関連付けられているかを確認し、DesignScript 構文について学習します。
まず、上記の画像の設定を再作成します(またはサンプル ファイルを開きます)。
Point.ByCoordinates ノードのレーシングが 外積 に設定されていることに注目してください。
グリッド内の各点は、参照点までの距離に基づいて Z の正の向きに移動します。
サーフェスが再作成されて厚みが付けられ、参照点までの距離を基準にしてジオメトリ内にふくらみが作成されます。
まず、参照点 Point.ByCoordinates
(x,y,0);
を定義します。参照点ノードの最上部で指定したものと同じ Point.ByCoordinates 構文を使用します。Code Block に変数 x と y が挿入され、スライダを使用してこれらを動的に更新できます。
-50 から 50 までの範囲の スライダ をいくつか Code Block ノードの入力に追加します。これにより、既定の Dynamo グリッド全体を使用できます。
Code Block ノードの 2 行目で、数値シーケンス ノードを置き換える省略表記を定義します。
coordsXY = (-50..50..#11);
これについては、次のセクションで詳しく説明します。ここでは、この省略表記がビジュアル スクリプトの Number Sequence ノードに相当していることを確認してください。
次に、coordsXY シーケンスから点のグリッドを作成します。これを行うには Point.ByCoordinates 構文を使用します。ただし、ビジュアル スクリプトで実行した場合と同様、リストにある 外積 を作成する必要もあります。これを行うには、行(
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);
)を入力します。山括弧は外積参照を意味します。Watch3D ノードには Dynamo のグリッド全体に点のグリッドが表示されます。
少し難しくなってきますが、ここで、点のグリッドを参照点までの距離に基づいて上方向に移動する必要があります。まず新しい点のセット transPts を呼び出しましょう。変換は既存の要素に対するアクションであるため、
Geometry.Translate...
ではなくgridPts.Translate
を使用します。キャンバス上の実際のノードから、3 つの入力があることが読み取れます。変換するジオメトリは既に宣言されています。この要素に対して、gridPts.Translate を使用してアクションを実行しているためです。残りの 2 つの入力は関数 direction と distance の括弧内に挿入されます。
方向の指定は簡単です。
Vector.ZAxis()
を使用して垂直方向に移動します。参照点と各グリッド間の距離は計算する必要があります。これは同様に、参照点に対するアクションとして実行します:
refPt.DistanceTo(gridPts)
。最後のコード行は、変換された点を示します:
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
。
これで適切なデータ構造を持つ点のグリッドを使用して NURBS サーフェスを作成できます。
srf = NurbsSurface.ByControlPoints(transPts);
を使用してサーフェスを作成します。
最後に、サーフェスに深さを追加するため、
solid = srf.Thicken(5);
を使用してソリッドを構築します。ここではコードで 5 単位を指定して厚みを付けますが、これを変数として(thickness などの名前を付けて)宣言し、スライダを使用して値をコントロールすることも可能です。
[ノードをコード化]機能を使用すると、先ほど終了した演習全体を、ボタンをクリックするだけで自動化できます。このツールはカスタム設定や再利用可能な Code Block の作成に優れているだけでなく、Dynamo でスクリプトを作成する方法を学習するのにも役立ちます。
まず、この演習の手順 1 で使用したビジュアル スクリプトを操作してみます。すべてのノードを選択し、キャンバスを右クリックして、[ノードをコード化]を選択します。非常に簡単です。
Dynamo はビジュアル グラフ、レーシングなどの文字ベースのバージョンを自動化しています。これをビジュアル スクリプトでテストして、Code Block の性能をお試しください。
データ タイプ
標準 Dynamo
Code Block の同等表記
数値
文字列
シーケンス
範囲
インデックスでの項目の取得
リストの作成
文字列の連結
条件ステートメント
ノード
Code Block の同等表記
注
演算子(+、&&、>=、Not など)
+、&&、>=、! など
「Not」は「!」になりますが、「Factorial」(階乗)と区別するためにノードは「Not」と呼ばれます
ブールの True
true;
小文字を使用します
ブールの False
false;
小文字を使用します
リンゴは何色ですか? | Apple.color | red |
リンゴは熟していますか? | Apple.isRipe | true |
リンゴの重さはどのくらいですか? | Apple.weight | 6 oz |
リンゴはどこで生まれましたか? | Apple.parent | tree |
リンゴは何を作りますか? | Apple.children | seeds |
このリンゴは地元で育てられましたか? | Apple.distanceFromOrchard | 60 mi. |
関数は 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 ノードを接続し、半径の比に基づいて半径のサイズを変更します。