カスタムコンポーネントとValue-Listを同時に配置する

Image by StockSnap from Pixabay

カスタムコンポーネントでオプションの指定や値の範囲を制限したInputがあると一緒に入力用のコンポーネントを配置したいことてないですか?

図のようにNo.の入力用にValue-Listをセットで配置できたら便利そうです。

カスタムコンポーネントの配置処理

GH_Componentクラスには、ドキュメントにコンポーネントが追加された際に呼び出されるAddedToDocument()メソッドが用意されています。このメソッドをオーバーライドして、コンポーネントの配置処理を追加します。

以下の例ではValue-Listコンポーネントの配置処理を追加します。

public override void AddedToDocument(GH_Document document)
{
    base.AddedToDocument(document);

    int no = 0;
    // Add a Value-List component.
    Grasshopper.Kernel.Parameters.Param_Integer input = Params.Input[no] as Grasshopper.Kernel.Parameters.Param_Integer;
    if (input == null || input.SourceCount > 0 || input.PersistentDataCount > 0) return;
    Attributes.PerformLayout();
    int x1 = (int)input.Attributes.Pivot.X - 300;
    int y1 = (int)input.Attributes.Pivot.Y - 10;
    Grasshopper.Kernel.Special.GH_ValueList valList = new Grasshopper.Kernel.Special.GH_ValueList();
    valList.CreateAttributes();
    valList.Attributes.Pivot = new PointF(x1, y1);
    valList.Attributes.ExpireLayout();
    valList.ListItems.Clear();

    List<Grasshopper.Kernel.Special.GH_ValueListItem> materials = new List<Grasshopper.Kernel.Special.GH_ValueListItem>()
        {
            new Grasshopper.Kernel.Special.GH_ValueListItem("Option-1","1"),
            new Grasshopper.Kernel.Special.GH_ValueListItem("Option-2","2"),
            new Grasshopper.Kernel.Special.GH_ValueListItem("Option-3","3"),
            new Grasshopper.Kernel.Special.GH_ValueListItem("Option-4","4"),
            new Grasshopper.Kernel.Special.GH_ValueListItem("Option-5","5"),

        };
    valList.ListItems.AddRange(materials);
    document.AddObject(valList, false);
    input.AddSource(valList);
}

この例ではValue-Listコンポーネントを追加していますが、同じ方法でPanelとかその他のコンポーネントも追加できます。

参考

Rhinoceros Forumのこちらの投稿を参考にしました。
c#_Create Value List GH Component for Custom GH Plugin

動作環境

以下の環境で動作を確認しています。

  • Windows11 Pro(64bit, 23H2)
  • Rhinoceros 8 SR6
  • Visual Studio Professional 2022(17.9.3)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です