ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Основы глубокого клонирования


Глубокие функции клона копируют объект и его ссылки монопольного использования. Любые ссылки указателя игнорируются. Копируют функции клона wblock жесткие владельцы и жесткие указатели и игнорируют мягкие ссылки. В дополнение к копированию этой иерархии находящихся в собственности объектов, и глубокие функции клона и функции клона wblock также обрабатывают ссылки клонированного объекта, трансляция ссылок, чтобы указать на новые объекты в случае необходимости.

Чтобы инициализировать операцию имитации, используйте одну из следующих функций:

AcDbDatabase:: deepCloneObjects ()

AcDbDatabase:: wblock ()

AcDbDatabase:: insert()

AcDbDatabase:: deepCloneObjects () только поддерживает клонирование в пределах единственной{*отдельной*} базы данных. Если Вы должны клонировать объекты между базами данных, использовать или wblock (), вставьте (), или комбинация,  и (типа wblock () к временной базе данных, и затем вставьте () что базу данных в существующую базу данных адресата).

При использовании AcDbDatabase:: вставка (), только вставляют к базам данных адресата, которые уже были сформированы. Вы можете получить полностью сформированный (и возможно полностью заполняемый) базу данных адресата,  используя текущий рисунок, чтобы формировать новую базу данных с параметром конструктора Adesk:: kTrue или,  создавая пустую новую базу данных, используя параметр конструктора Adesk:: kFalse и затем вызывая AcDbDatabase:: readDwgFile () на этом, чтобы заполнить это.

Вообще, чтобы использовать AcDbDatabase:: deepCloneObjects (), AcDbDatabase:: wblock (), или AcDbDatabase:: вставка () функции в вашем коде, Вы не должны знать того, как карта объекта ID заполнена или точно, что случается в течение каждой стадии глубокого клонирования. Если Вы создаете новый класс, и Вы хотите перегрузить AcDbObject:: deepClone () или AcDbObject:: wblockClone () функции, вы будете должны быть знакомыми с подробностями тех функций, которые описаны в “ Реализация deepClone () для Классов пользователя ” на странице 476.

AcDbObject:: deepClone () и AcDbObject:: wblockClone () функции не должен быть вызван{*назван*} непосредственно на заказном объекте в прикладном коде. Они только вызваны как часть цепочки от операции клонирования более высокого уровня.



Содержание раздела