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

ADN Club => AutoCAD .NET API => Тема начата: Павел55 от 27-08-2020, 09:53:50

Название: Узнать количество вставок блока на листе
Отправлено: Павел55 от 27-08-2020, 09:53:50
Возможно ли как то узнать не общее количество вставок блока, а на конкретном листе?
Название: Re: Узнать количество вставок блока на листе
Отправлено: avc от 27-08-2020, 10:17:30
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Название: Re: Узнать количество вставок блока на листе
Отправлено: avc от 27-08-2020, 10:19:33
Совсем другое дело, если имеется задача найти объекты видимые во вьюпортах листа. Тоже можно. Но надо уточнить задачу.
Название: Re: Узнать количество вставок блока на листе
Отправлено: Павел55 от 27-08-2020, 10:33:59
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Допустим есть Id листа, как открыть PaperSpace листа?
Название: Re: Узнать количество вставок блока на листе
Отправлено: Александр Ривилис от 27-08-2020, 10:38:05
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Есть альтернативный способ. Имея Layout.BlockTableRecordId для данного листа и BlockTableRecord для искомого блока, можнно воспользоваться методом BlockTableRecord.GetBlockReferenceIds для получения ObjectId для всех вставок блока. Ну и для каждой вставки блока проверить на равенство его OwnerId с Layout.BlockTableRecordId. Это для статических блоков. Для динамических чуть сложнее. Кроме BlockTableRecord.GetBlockReferenceIds нужно еще воспользоваться методом BlockTableRecord.GetAnonymousBlockIds для получения ObjectId BlockTableRecord анонимных блоков. С ними следует поступить так же как и с основной BlockTableRecord. Возможно этот способ будет более быстрым чем перебор всех объектов в листе.
Название: Re: Узнать количество вставок блока на листе
Отправлено: Александр Ривилис от 27-08-2020, 10:40:50
Легко. Открываете PaperSpace этого листа и перебираете все его объекты ровно так же как внутри любого блока.
Допустим есть Id листа, как открыть PaperSpace листа?
Цитата: avc от 27-08-2020, 10:17:30

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

Допустим есть Id листа, как открыть PaperSpace листа?
Id листа - это ObjectId для его Layout? Тогда  Layout.BlockTableRecordId даст ObjectId соответствующий PaperSpace (PaperSpace - это BlockTableRecord для листа)
Название: Re: Узнать количество вставок блока на листе
Отправлено: Александр Ривилис от 27-08-2020, 10:45:58
В качестве продолжения моего ответа посмотри эту статью: https://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html