RhinoのGroupの図形を取得する

RhinoCommonで複数の図形をGroup化する場合、GUIDをリスト化してRhino.RhinoDocに追加します。

以下はRhino Developer Docsの引用です。リスト化してdoc.Groups.Add()でリストを追加すると、Groupのindexが返ってきます。このindexでGroupを識別することができるわけです。

List<Guid> ids = new List<Guid>();
for (int i = 0; i < go.ObjectCount; i++)
{
  ids.Add(go.Object(i).ObjectId);
}
int index = doc.Groups.Add(ids);
doc.Views.Redraw();

Group内の図形を取得する

ここで、Group化された図形を順に処理したい場合、次のように処理できるような気がするのですが。。。

System.Drawing.Color color = System.Drawing.Color.Black;
foreach(var obj in doc.Groups[index].Objects)//こういう書き方はできない
{
	obj.Attributes.ObjectColor = color;
}

そうはなっていなくて、FindByGroup()を使って次のように処理する。

foreach (var obj in doc.Objects.FindByGroup(index))
{
	obj.Attributes.ObjectColor = color;
}

Groupsから取得するんじゃないんだ、なんでってなるが、1つのオブジェクトが複数のGroupに所属することもできるようなので、そこら辺の都合もあってこうなっているのかな?よく分らないが。。。

なにか他にスマートな書き方があるかも。。。

動作環境

以下の環境で動作を確認しています。
Windows11 Pro(64bit, 21H2)
Visual Studio Professional 2022(17.0.5)
Rhino 7 SR17(7.17.22102.5001, 2022-04-12)


コメントを残す

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