C#によるGrasshopperコンポーネントの開発 -2.コーディングとビルド-
今回はいよいよコーディングです。
コーディング
例として,線分の中点を出してくれるコンポーネントをつくってみます。
デフォルトのGrasshopperだと,「Point on curve」コンポーネントで中心を設定するような状態にあたります。
コード全体はこのようになっています。
using System;
using System.Collections.Generic;
using Grasshopper.Kernel;
using Rhino.Geometry;
namespace LineCenter
{
public class LineCenterComponent : GH_Component
{
public LineCenterComponent()
: base("LineCenter", "LC",
"find center point of a line",
"MyComponent", "test1")
{
}
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
pManager.AddLineParameter("Line", "L", "input line", GH_ParamAccess.list);
}
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
pManager.AddPointParameter("Center", "C", "center point", GH_ParamAccess.list);
}
protected override void SolveInstance(IGH_DataAccess DA)
{
var line = new List<Line>();
DA.GetDataList(0, line);
var center = new List<Point3d>();
for (int i = 0; i < line.Count; i++)
{
double ix = line[i].FromX;
double iy = line[i].FromX;
double iz = line[i].FromX;
double jx = line[i].ToX;
double jy = line[i].ToX;
double jz = line[i].ToX;
double cx = (ix + jx) / 2;
double cy = (iy + jy) / 2;
double cz = (iz + jz) / 2;
center.Add(new Point3d(cx, cy, cz));
}
DA.SetDataList(0, center);
}
protected override System.Drawing.Bitmap Icon
{
get
{
return null;
}
}
public override Guid ComponentGuid
{
get { return new Guid("cf6f66f7-db8c-4689-8c3b-3c6d4c8688fe"); }
}
}
}
詳しく見ていきましょう。
インプット・アウトプット
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
pManager.AddLineParameter("Line", "L", "input line", GH_ParamAccess.list);
}
↑ Input の登録では,「pManager」を使い,「AddLineParameter」で線のパラメータを追加します。Lineの他にも,PointやBrep,Integerなど様々なパラメータを追加することが出来ます。「pManager.」まで書くと,候補がたくさん出てくるのでここで確認できます。
引数は,「名前」「ニックネーム」「説明」「アクセス形式」「初期値(任意」の順で書きます。
アクセス形式は「item」「list」「tree」の3つがあり,必要に応じて変化させます。
Output のパラメータも同様です。
ソルバー
protected override void SolveInstance(IGH_DataAccess DA)
{
///変数の設定とインプットからの取得
var line = new List<Line>();
DA.GetDataList(0, line);
///アウトプットに使用するための変数の設定
var center = new List<Point3d>();
///中点を求める
for (int i = 0; i < line.Count; i++)
{
double ix = line[i].FromX;
double iy = line[i].FromX;
double iz = line[i].FromX;
double jx = line[i].ToX;
double jy = line[i].ToX;
double jz = line[i].ToX;
double cx = (ix + jx) / 2;
double cy = (iy + jy) / 2;
double cz = (iz + jz) / 2;
center.Add(new Point3d(cx, cy, cz));
}
///アウトプットの設定
DA.SetDataList(0, center);
}
↑ SolveInstanceです。
まず,Inputからの情報を入れる変数を設定して,GetDataで情報を格納します。GetDataの引数は「Inputパラメータ番号(0からスタート) or 名前」「格納先の変数」となります。
Lineの型だと,始点に関する「From~」と終点に関する「To~」があるので,そこから座標の値を取得します。
そして最後に,SetDataで中点の情報を入れた変数をアウトプットに設定します。
その他
protected override System.Drawing.Bitmap Icon
{
get
{
return null;
}
}
public override Guid ComponentGuid
{
get { return new Guid("cf6f66f7-db8c-4689-8c3b-3c6d4c8688fe"); }
}
↑ アイコンとGuidの設定です。アイコンに関してはまた次回説明します。
ビルドとGrasshopperへの適用
コーディングが終わり,エラー(赤の波線)が出なくなったら,ビルドしてみましょう。
Visual Studio一番上のタブ「ビルド(B)」から,「〇〇(プロジェクト名)のビルド(U)」を選択します。これでビルドされghaファイルが作成されます。
デフォルトですと,
C:\Users\(ユーザー名)\source\repos\(プロジェクト名)\(プロジェクト名)\bin
にghaファイルが入っているかと思います。
このghaファイルをコピーして,GrasshopperのLibrariesフォルダに貼り付けます。Librariesフォルダは,Grasshopperの一番上のタブ「File」→「Special Folders」→「Components Folder」から開くことができます。
ghaファイルをこのフォルダに貼り付けたら,RhinocerosとGrasshopperを再起動しましょう。つくったコンポーネントがGrasshopperのタブに表示されます。
今回は簡単なコンポーネントの作り方を紹介しました。
次回はアイコンの設定方法と,ビルドから先の省力化を紹介します。
この記事が気に入ったらサポートをしてみませんか?