Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: igrik от 16-05-2022, 16:41:51

Название: Сортировка коллекции вхождений блока по определённому атрибуту
Отправлено: igrik от 16-05-2022, 16:41:51
Добрый день.
Допиливаю первый свой плагин на C#.NET под Автокад 2019

Возник вопрос: как отсортировать коллекцию вхождений блока по определённому атрибуту?

Т.е. уже есть коллекция блоков (IEnumerable<ObjectId> blockRefIds) полученная из модели.
Все вхождения только одного блока, допустим с названием TestBlock (это блок-рамка листа). Блок динамический. У этого блока есть атрибут PAGE (номер листа).
Не могу понять как получить этот атрибут и отсортировать коллекцию, например по возрастанию. Нужна помощь.
Название: Re: Сортировка коллекции вхождений блока по определённому атрибуту
Отправлено: Дмитрий Загорулькин от 16-05-2022, 20:22:25
Это коллекция объектов 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
Название: Re: Сортировка коллекции вхождений блока по определённому атрибуту
Отправлено: igrik от 17-05-2022, 13:51:39
Пример помог разобраться с получением атрибутов блока.

Вопрос решён! Спасибо.