カスタムコンポーネントでオプションの指定や値の範囲を制限した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)