refactor-i_aecdbxequipment-copyfrom #84

Merged
gjm merged 1 commits from refactor-i_aecdbxequipment-copyfrom into main 2026-10-27 13:53:23 +08:00
@@ -245,15 +245,6 @@ Acad::ErrorStatus AecDbXEquipment::copyFrom(const AcRxObject* pSrc)
AssertWriteEnabled(); AssertWriteEnabled();
AecDbXEquipment *pSrcEqu = AecDbXEquipment::cast(pSrc); AecDbXEquipment *pSrcEqu = AecDbXEquipment::cast(pSrc);
if (!pSrcEqu) return Acad::eInvalidInput; if (!pSrcEqu) return Acad::eInvalidInput;
// 基类链通过 CopyObject(dwgOut -> dwgIn) 深拷参数,dwgInFields 内会重建 m_pImpl
Acad::ErrorStatus es = AecDbBDPipeBase::copyFrom(pSrc);
if (es != Acad::eOk) return es;
if (!m_pImpl)
m_pImpl = createParamEquImpl(GetType(), false);
// 放在重建之后:工厂里的 getInterfaces 可能覆盖读进来的管嘴
m_interfaces = pSrcEqu->m_interfaces; m_interfaces = pSrcEqu->m_interfaces;
return Acad::eOk; return Acad::eOk;
} }
@@ -268,10 +259,11 @@ Acad::ErrorStatus AecDbXEquipment::copyFrom2(const AcRxObject* pSrc)
// 先克隆成功再替换:cloneImpl 在源对象没有 impl 时返回 NULL // 先克隆成功再替换:cloneImpl 在源对象没有 impl 时返回 NULL
XEquipmentImplBase *pNewImpl = pSrcEqu->cloneImpl(&m_mapSpecXData); XEquipmentImplBase *pNewImpl = pSrcEqu->cloneImpl(&m_mapSpecXData);
DELETE_PTR(m_pImpl); if (pNewImpl)
m_pImpl = pNewImpl; {
if (!m_pImpl) DELETE_PTR(m_pImpl);
m_pImpl = createParamEquImpl(GetType(), false); m_pImpl = pNewImpl;
}
return Acad::eOk; return Acad::eOk;
} }