Grasshopper :: ComponentをCreate (Part2)

前回は、コンポーネント作成の準備まで行いました。

今回は、いよいよコンポーネントの機能をコーディングしていきます。

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に置いてみると、アイコンはまだ無いですがコンポーネントとしては使える状態になっています。

 

今回はここまで。

次回はアイコンを作成&追加し、コンポーネント完成まで行きたいと思います。

【Part3へ続く】

 

参考サイト

コメントを残す