Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: igrik от 16-05-2022, 16:41:51
-
Добрый день.
Допиливаю первый свой плагин на C#.NET под Автокад 2019
Возник вопрос: как отсортировать коллекцию вхождений блока по определённому атрибуту?
Т.е. уже есть коллекция блоков (IEnumerable<ObjectId> blockRefIds) полученная из модели.
Все вхождения только одного блока, допустим с названием TestBlock (это блок-рамка листа). Блок динамический. У этого блока есть атрибут PAGE (номер листа).
Не могу понять как получить этот атрибут и отсортировать коллекцию, например по возрастанию. Нужна помощь.
-
Это коллекция объектов ObjectId. То есть, это только идентификаторы объектов в БД чертежа. Чтобы какие-то данные получать из объектов, надо их открывать и читать свойства открытых объектов. Поэтому, открывайте объекты, ищите внутри него атрибуты, открывайте их и ищите тот, который с нужным тегом. У такого атрибута читайте значение. Потом по этому значению сортируйте.
Как вариант, можно это объединить с получением данной коллекции. Скорее всего, когда её формировали, блок уже открывали. Вот в этот момент можно читать ещё и значение атрибута. И формировать коллекцию не IEnumerable<ObjectId>, а что-то типа IEnumerable<BlockData>, где BlockData - структура, у которой два свойства: Id блока и значение нужного атрибута. Потом такую коллекцию легко будет отсортировать с помощью Linq-метода OrderBy.
Как прочитать значение атрибута блока - легко гуглится. Пример: https://forums.autodesk.com/t5/net/get-the-value-of-an-attribute-in-c/m-p/9061469#M63987
-
Пример помог разобраться с получением атрибутов блока.
Вопрос решён! Спасибо.