Узнать количество вставок блока на листе

Автор Тема: Узнать количество вставок блока на листе  (Прочитано 8490 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Возможно ли как то узнать не общее количество вставок блока, а на конкретном листе?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Совсем другое дело, если имеется задача найти объекты видимые во вьюпортах листа. Тоже можно. Но надо уточнить задачу.

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Допустим есть Id листа, как открыть PaperSpace листа?

Отмечено как Решение Павел55 27-08-2020, 11:41:07

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Есть альтернативный способ. Имея Layout.BlockTableRecordId для данного листа и BlockTableRecord для искомого блока, можнно воспользоваться методом BlockTableRecord.GetBlockReferenceIds для получения ObjectId для всех вставок блока. Ну и для каждой вставки блока проверить на равенство его OwnerId с Layout.BlockTableRecordId. Это для статических блоков. Для динамических чуть сложнее. Кроме BlockTableRecord.GetBlockReferenceIds нужно еще воспользоваться методом BlockTableRecord.GetAnonymousBlockIds для получения ObjectId BlockTableRecord анонимных блоков. С ними следует поступить так же как и с основной BlockTableRecord. Возможно этот способ будет более быстрым чем перебор всех объектов в листе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Допустим есть Id листа, как открыть PaperSpace листа?
Цитата: avc от 27-08-2020, 10:17:30

    Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.

Допустим есть Id листа, как открыть PaperSpace листа?
Id листа - это ObjectId для его Layout? Тогда  Layout.BlockTableRecordId даст ObjectId соответствующий PaperSpace (PaperSpace - это BlockTableRecord для листа)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
В качестве продолжения моего ответа посмотри эту статью: https://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение