Добрый день!
Вопрос заключается в необходимости хранить идентификаторы объектов, которые являются вложенными в данный; к примеру -- грани солида (Faces).
Зачем это надо? Объясняю - есть необходимость обрабатывать данные чертежа в другом ПО и вернуть их же + доп. параметры, которые потом назначить этим элементам. В настоящем примере - материалы для граней тела.У них [дочерних элементов] отсутствует ObjectId, у которого можно было бы получить Handle, а наличествующий SubentityId не имеет нужного представления.
Вариант с генерацией FullSubentityPath
https://adn-cis.org/podsvetka-segmenta-polilinii.html тоже не совсем подходит, так как для этого придется создавать дополнительную структуру типа словаря/дерева во время нового перебора граней солидов (во время которого заново находить этот FullSubentityPath, преобразовать в строку и искать по ключу в созданной коллекции). С позиции работы с памятью не очень хорошо .... хоть наверное так пока и поступлю.
Аналогично вместо FullSubentityPath могу использовать "строковый кортеж" типа $"{Solid.Handle}_{Face.Index}".
Также я намеревался использовать в качестве идентификатора грани её центроид (усредненную сумму координат по X,Y,Z) - то есть в целом
3 варианта решения всё равно сводятся к необходимости создания коллекции с сопоставлением ключ:доп. параметры солида, а хотелось бы имея некое строчное представления идентификатора как Handle получать его представление в БД чертежа и производить с ним манипуляции без необходимости сопоставления с чем-либо вспомогательным.
Надеюсь, мысль донёс корректно ....
P.S. Хотя вот что интересно - а этот набор будет упорядочен всегда в рамках текущего состояния солида (не изменяя его) и после перезапуска чертежа (solid_id - это ObjectId солида)
List < Autodesk.AutoCAD.BoundaryRepresentation.Face > faces = new Brep(new FullSubentityPath(new ObjectId[1] { solid_id }, new SubentityId(SubentityType.Null, IntPtr.Zero))).Faces.ToList();