Сортировка коллекции вхождений блока по определённому атрибуту

Автор Тема: Сортировка коллекции вхождений блока по определённому атрибуту  (Прочитано 335 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн igrikАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 1
Добрый день.
Допиливаю первый свой плагин на C#.NET под Автокад 2019

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

Т.е. уже есть коллекция блоков (IEnumerable<ObjectId> blockRefIds) полученная из модели.
Все вхождения только одного блока, допустим с названием TestBlock (это блок-рамка листа). Блок динамический. У этого блока есть атрибут PAGE (номер листа).
Не могу понять как получить этот атрибут и отсортировать коллекцию, например по возрастанию. Нужна помощь.

Отмечено как Решение Александр Ривилис 17-05-2022, 21:25:36

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2514
  • Карма: 724
Это коллекция объектов 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

Оффлайн igrikАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 1
Пример помог разобраться с получением атрибутов блока.

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