在做CAD开发的时候我们很多时候会碰到把很多实体从新复制一份放到另外一个地方。今天工作中遇到了这种情况,琢磨了一上午找到了复制实体的方式。
ARX的实体基类AcDbObject 提供了几种复制实体的方法,deepClone, wblockClone, virtual AcRxObject *clone() const, copyFrom等方法,其中我选择了用clone这个方法,应为用法简单,只要定义一个AcDbObject的实体,AcRxObject *pObject = pEnt->clone(); 用运行时AcDbEntity *pOtherEnt = AcDbEntity::cast(pObject);升级运行时。将实体添加到模型空间中即可。
for (long i = 0; i < setFloors.Length(); i++)
{
ent = setFloors[i];
OPENOBJ_BEGIN(ent, AcDb::kForRead, AcDbEntity, pEnt);
if (!pEnt)
{
continue;
}
AcRxObject *pObject = pEnt->clone();
if (pObject != NULL)
{
AcDbEntity *pOtherEnt = AcDbEntity::cast(pObject);
if (pOtherEnt != NULL)
{
AddToModelSpace(pOtherEnt);
}
}
OPENOBJ_END();
}