Grasshopperコンポーネントの自作方法 -その2-

C#

前回のその1

前回ではGrasshopperのTemplateをコンパイルして,Grasshopperにインストールする方法について説明しました。今回は,Componentを成すプログラムがどのように構成されるかについて,見ていきたいと思います。

概略

1つのコンポーネントは,C#上ではクラスとして扱われ、クラスには次の関数が存在しているはずです。

  • コンストラクタ
  • RegisterInputParam関数
  • RegisterOutPutParam関数
  • SolveInstance関数

また,次のようなメンバ変数の上書きも発生しています。ただし,これらについては,デフォルトのままでも計算には影響ありません。

  • System.Drawing.Bitmap Icon
    • 作成したコンポーネントのアイコンを設定できる。
  • Guid ComponentGuid
    • コンポーネントのGUIDを返す。この値は同じプロジェクトのほかのコンポーネントと必ず異なったものでないといけない。

RegisterInputParam関数

これはコンポーネントにInputする値を設定します。例えば

protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
    pManager.AddCurveParameter("Curve", "C", "ClosedCurve", 
    GH_ParamAccess.item); //Curve の入力
    // 一つ目の引数は名前, 二つ目の引数は名前の省略形, 三つ目のは説明文
    // 四つ目の引数は、単一のオブジェクトを渡す場合はこんな感じ。
    pManager.AddPointParameter("Pos","p", "point List", 
    GH_OaramAccess.List); //点を渡す場合、
    // リストで渡す場合は4つ目の引数がこのように変化する。
 pManager.AddNumberParameter("Number","n","Number",GH_ParamAccess.item, 0.0)//5つ目の引数が渡せる型がある。この場合はデフォルト値
}

こんな感じでしょうか。pManager.Add***で様々な形の関数が用意されています。このあたりはRhinoのAPIにくわしくかいてるので見てもらうとよいと思われます。

RhinoAPIのInputParamManager

RegisterOutputParam関数

ここもRegisterInputParam関数とほぼ同じですね。

protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
    pManager.AddTextParameter("Log", "L", "hogehoge", 
    GH_ParamAccess.item); //文字列を書き出す場合
    pManager.AddIntegerParameter("Val","v","fugafuga", 
    GH_ParamAccess.item); //整数を書き出す場合
}

これも、様々な関数が用意されていますが,基本的には出したい型に合わせて関数を選択するだけです。

SolveInstance関数

ここで,コンポーネント内の計算部分を記述します。記述内容は、コンポーネントにさせたいことによって変化するので一般的に書くことは難しいですが、上記の、RegisterInput/Outputに値を格納する方法だけ書いておきます。

        protected override void SolveInstance(IGH_DataAccess DA)
        {
            //変数の宣言、関数内でもクラスのメンバ変数にしてもOK
            Curve myCrv;
            List<Point3d> pts = new List<Point3d>();
            double val;

       //入力の場合
            DA.GetData("Curve", ref myCrv);
            DA.GetDataList("Pos", pts);
            DA.GetData("Number", ref val);
       
       //--- 省略 ---

            //出力の場合
            DA.SetData("Log", txt);
            DA.SetData("Val", val);

        }

Grasshopperコンポーネント自作方法 -その0-

Grasshopperコンポーネント自作方法 -その1-

コメント

タイトルとURLをコピーしました