C#によるGrasshopperコンポーネントの開発 -2.コーディングとビルド-

今回はいよいよコーディングです。

コーディング

例として,線分の中点を出してくれるコンポーネントをつくってみます。

画像1

デフォルトの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ファイルが入っているかと思います。

画像2

このghaファイルをコピーして,GrasshopperのLibrariesフォルダに貼り付けます。Librariesフォルダは,Grasshopperの一番上のタブ「File」→「Special Folders」→「Components Folder」から開くことができます。

画像3

ghaファイルをこのフォルダに貼り付けたら,RhinocerosとGrasshopperを再起動しましょう。つくったコンポーネントがGrasshopperのタブに表示されます。


今回は簡単なコンポーネントの作り方を紹介しました。
次回はアイコンの設定方法と,ビルドから先の省力化を紹介します。

この記事が気に入ったらサポートをしてみませんか?