Grasshopper :: ComponentをCreate (Part2)
前回は、コンポーネント作成の準備まで行いました。
今回は、いよいよコンポーネントの機能をコーディングしていきます。
- Part1:事前準備
- Part2:コーディング
- Part3:アイコン作成
Part2:コーディング
Grasshopperのテンプレートのおかげで、最低限コードを書けば良い箇所は”〇〇Component.cs”内の4箇所だけです(〇〇はコンポーネント名)。
それぞれみていきましょう。
1.〇〇Component()
まずは、〇〇Component()メソッド部分からです(〇〇はコンポーネント名)。
ここは、最初にGrasshopperのテンプレートを開いた際に入力したコンポーネント名やカテゴリを設定した箇所になります。
すでに入力済みなので、変更がある場合はこちらを書き換えてください。
2.RegisterInputParams(GH_Component…)
次に、コンポーネントの入力側のパラメーターの設定を、RegisterInputParams(GH_Component…)メソッド部分で編集します。
今回は、Pointのソートなので、
pManager.AddPointParameter("Points", "P", "The points to sort", GH_ParamAccess.list);
としました。
pManager.AddIntegerParameter("Key", "K", "The key to sort points", GH_ParamAccess.item);
引数は、(”パラメーター名”,”短縮名”,”パラメーターの説明”,アクセスタイプ)となっています。
3.RegisterOutputParams(GH_Component…)
Inputの後は、RegisterOutputParams(GH_Component…)メソッド部分で出力側の設定を行います。
出力側はソートされた点とインデックスとしたいので、
pManager.AddPointParameter("Points", "P", "The sorted points", GH_ParamAccess.list);
pManager.AddIntegerParameter("Indices", "I", "The index of sorted points", GH_ParamAccess.list);
としました。
Inputの時と同様Add〜の”〜”部分にデータタイプがきますが、コピペをする際はこの”〜”部分を変えるのを忘れずに。
ちなみに私は、出力側の”Indices”をAddPointParameterでビルドしてしまい、コンポーネントを使ったところ下図のようにエラー画面が出てちょっとはまりました。。
4.SolveInstance(IGH_DataAccess DA)
次はいよいよコンポーネントの機能を、SolveInstance(IGH_DataAccess DA)メソッド部分で設定します。
ここでは、点を任意の座標軸でソートするようにしています。
【参考:任意のCoordinateでSort Points】
コードは以下の通りです。
DA.GetDataList()メソッドで入力側のデータを取得し、DA.SetDataList()メソッドで出力側のデータを割り当てています。
DA.GetDataList()の引数は、(int(入力側パラメーターのインデックス), 事前に宣言した変数)となります。
ちなみに入力側がItem Accessの場合は、変数の前にrefをつける必要があります。
DA.SetDataList()の引数は、(int(出力側パラメーターのインデックス), 割り当てたい変数)となります。
ビルド
では、ここで一旦ビルドしてみましょう。
コードに問題がなければ、ビルドが正常に完了するはずです。
するとプロジェクトの保存先のbinフォルダ内に、ghaファイルが作成されています。
これをGrasshopperのCanvasにドラッグ&ドロップで、最初に指定したカテゴリ、サブカテゴリ内に、作成したコンポーネントが追加されます。
Canvasに置いてみると、アイコンはまだ無いですがコンポーネントとしては使える状態になっています。
今回はここまで。
次回はアイコンを作成&追加し、コンポーネント完成まで行きたいと思います。