cloneSameOwnerObjects
2.2 clone() 和deepClone()
AcRxObject::clone() 函数仅仅克隆单一实体。AcDbObject::deepClone() 函数克隆该对象以及该对象拥有的其他对象。AcDbObject::deepClone()还会转换被克隆对象的引用关系。通常,deepClone函数更加安全。
2.3 关键概念
2.3.1 克隆和存档
深度克隆和wblock克隆操作都使用对象存档来复制(克隆)对象。创建一个新对象(即克隆对象)后,使用dwgOut()将原始对象存档到内存中。最后,使用dwgIn()将数据存到到到新的克隆对象中。
2.3.2 克隆和所有权
对象关系作为一个AcDbObjectId成员变量存在对象当中。在对象中存在四种不同关系类型——硬拥有者、软拥有者、硬指针、软指针。比如,如果你创建了一个需要文本样式的实体,这个实体对象应当会有一个AcDbObjectId类型的数据成员,指向某个AcDbTextStyleTableRecord对象;它应当会被作为硬指针被存档。这个AcDbObjectId成员被存档的方式决定了deepClone和wblock使用它的方式。
深克隆处理所有硬所有权和软所有权连接;wblock写块操作处理所有硬所有权和硬指针连接。
2.3.3 克隆和ID映射
ID映射是追踪克隆操作的一种机制。映射包含对象的ID对——源对象的ID(被称作"Key ID")和克隆对象或者目标对象ID(被称为"value ID")。ID映射也包含额外的ID对,在ID转换时需要这些