Тема: Перенос примитива из Model space в другой блок

Люди!
Как можно поместить указанные пользователем примитивы из  любой другой блок?
При попытке добавить такой примитив к созданному мной блоку происходит ошибка.
Примитивы, созданные заново добавляются без проблем.
Спасибо!!

Re: Перенос примитива из Model space в другой блок

Примитивы, которые уже содержатся в MODAL_SPACE уже имеют своего "владельца" и их нельзя добавить в другой блок. Добавлять в другой блок следует копии примитивов, которые получаются при помощи методов clone() или deepClone()
Смотри пример samples\database\clones

Re: Перенос примитива из Model space в другой блок

Описка - не MODAL_SPACE, а  MODEL_SPACE

Re: Перенос примитива из Model space в другой блок

Еще одно небольшое дополнение. Если понимать под словом перенос не просто копирование, а копирование с удалением в MODEL_SPACE (т.е. что-то по аналогии с MOVE, а не COPY), то существует более элегантный метод, связанный с использованием метода AcDbBlockTableRecord::assumeOwnershipOf
Внимательно (!!!) посмотри описание этого метода в документации. Возможно он тебе подойдет лучше. Им можно перенести напрямую из MODEL_SPACE (и вообще из любого блока в пределах одного чертежа) в необходимый тебе блок примитивы, которые не имеют подпримитивов (subentity). Не забудь выполнить после этого регенерацию чертежа.

Re: Перенос примитива из Model space в другой блок

Огромное спасибо Александр!
действительно получился способ
AcDbBlockTableRecord::assumeOwnershipOf(..)

Re: Перенос примитива из Model space в другой блок

Пожалуйста! smile
Откопал еще один способ - он пожалуй самый правильный - использовать AcDbDatabase::deepCloneObjects()
Пример в samples\database\clones, функция clone2. Единственная разница для тебя - это то, что blockId должен ссылаться не на MODEL_SPACE, а на AcDbObjectId твоего блока (AcDbBlockTableRecord)
Преимущество в том, что нет ограничений на типы примитивов (т.е. сложные примитивы копируются целиком).
Недостаток - старые примитивы, если они не нужны, придется удалять используя метод erase() - и сам примитив и все его подпримитивы.