Grasshopper コンポーネントをダブルクリックした際に WindowsForm を呼ぶ方法
10 December, 2019 - 1 min read - Tags: CSharp,Grasshopper,Qiita
はじめに
この記事と同様に Galápagos のようなコンポーネントを作ろうとした際に、Grasshopper のコンポーネントから WindowsForm で作ったものを表示させたかったので、やり方を示します。
ちなみに、Rhino は Mac 版もあるので、どちらも対応したものを作成したい場合は、WindowsForm ではなく Rhino が対応しているクロスプラットフォームインターフェースのEtoを使ってください。
なおこの記事は、RhinocerosForum のこの質問の内容を参考に作っています。
完成品のイメージ
今日のもくもく会の成果
— hiron/6cores (@hiron_rgkr) June 29, 2019
GrasshopperのNumberSliderを、コンポーネントをダブルクリックして呼び出せるWindowsフォームのsliderから操作できました~ pic.twitter.com/tDEtHmxPA1
作り方
作成には GH_ComponentAttributes クラスを作り、コンポーネントをダブルクリックした際にウインドウが出てきて欲しいので、 GH_Attributes の RespondToMouseDoubleClick メソッド
を使います。これを使うことで、ダブルクリックした際に DisplayForm(別途作成している WinForm)を呼び出しています。
public class Attributes_Custom : GH_ComponentAttributes
{
public Attributes_Custom(IGH_Component ChangeNumSlider)
: base(ChangeNumSlider) { }
public override GH_ObjectResponse RespondToMouseDoubleClick(GH_Canvas sender, GH_CanvasMouseEvent e)
{
(Owner as ChangeNumSlider)?.DisplayForm();
return GH_ObjectResponse.Handled;
}
}
上で作成したアトリビュートをコンポーネントに適用したいので、GH_Component クラス の CreateAttributes メソッドをオーバーライドします。
public override void CreateAttributes()
{
m_attributes = new Attributes_Custom(this);
}
WindowsForm の使い方などはほかの記事の方が詳しいと思うので、ここでは割愛します。
ビルトした動くものを作りたい場合
ここで説明した内容はホタルアルゴリズムによる最適化コンポーネントを目指して作り出したホタルコンポーネントの一部です(モチベーションなくなってエタッてしまいました…)。
ホタルコンポーネントのリンク先の github の Develope ブランチをクローンしてビルトしてもらえば動く gh コンポーネントが作成されると思います。直接の部分はChangeNumSlider.cs の部分で、他はホタルアルゴリズムの実装を行っている箇所です。
Grasshopper 内の C#スクリプトコンポーネントでは WindowsForm を作るのが面倒なので、Visual Studio Community 2019 を使っています。
ちなみに
カスタムアトリビュートについては、公式の説明もあるので詳しく知りたい方はそちらも参照どうぞ。