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

ADN Club => AutoCAD .NET API => Тема начата: valtur1983 от 12-11-2021, 17:34:32

Название: Создание блока в другом чертеже
Отправлено: valtur1983 от 12-11-2021, 17:34:32
Всем доброго вечера!

Макрос запускается в одном чертеже. Необходимо вставить в этот чертеж все элементы из другого чертежа. Порыскав на просторах инета понял, что проще всего вставлять один элемент (блок состоящий из всех элементов другого чертежа), а потом его взорвать. Вопрос в том, как можно создать определение блока, в который будут входить все примитивы другого чертежа), не открывая его вручную.
Название: Re: Создание блока в другом чертеже
Отправлено: Александр Ривилис от 12-11-2021, 18:20:22
Порыскав на просторах инета понял, что проще всего вставлять один элемент (блок состоящий из всех элементов другого чертежа), а потом его взорвать.
Нет. Проще и правильнее всего использовать Database.WblockCloneObjects
Название: Re: Создание блока в другом чертеже
Отправлено: Александр Ривилис от 12-11-2021, 18:21:24
Вопрос в том, как можно создать определение блока, в который будут входить все примитивы другого чертежа), не открывая его вручную.
Он уже создан - это блок ModelSpace
Название: Re: Создание блока в другом чертеже
Отправлено: valtur1983 от 12-11-2021, 18:32:05
Что то не пойму.

Я инженер по автокаду, с прошлым программным знанием, но по элементам автокада чуть больше чем ноль. и для меня блок это определение блока и вставка блока.

ModelSpace, как я понял, это пространство модели со всеми примитивами.

Мне надо вставить все примитивы в определенную точку.

Не сочтите за наглость, но можно ли ссылку или часть кода как реализовать это в моем макросе
Название: Re: Создание блока в другом чертеже
Отправлено: valtur1983 от 12-11-2021, 18:34:35
WblockCloneObjects я как раз таки и использую, но для этот надо сформировать определение блока из всех примитивов чертежа донора
Название: Re: Создание блока в другом чертеже
Отправлено: Александр Ривилис от 12-11-2021, 19:02:28
ModelSpace, как я понял, это пространство модели со всеми примитивами.
И она же является определением блока (класс BlockTableRecord)
Название: Re: Создание блока в другом чертеже
Отправлено: Александр Ривилис от 12-11-2021, 19:55:09
WblockCloneObjects я как раз таки и использую, но для этот надо сформировать определение блока из всех примитивов чертежа донора
Зачем? Достаточно в коллекцию (ObjectIdCollection) добавить все примитивы из ModelSpace и выполнить  WblockCloneObjects с указанием нового владельца ModelSpace второго чертежа.
Название: Re: Создание блока в другом чертеже
Отправлено: valtur1983 от 13-11-2021, 06:02:05
Спасибо Александр, все получилось!

Меня, как инженера, все время сбивает с толку слово Block в процедурах и свойствах. Я интерпретирую его в понятие блока автокада. Так и с методом WblockCloneObjects. Думал он клонирует именно блок.

Следующий вопрос. Можно ли задать стартовую точку (смещение по X, Y) вставляемых элементов?
Название: Re: Создание блока в другом чертеже
Отправлено: Александр Ривилис от 13-11-2021, 06:41:46
Следующий вопрос. Можно ли задать стартовую точку (смещение по X, Y) вставляемых элементов?
Один вопрос - одна тема.