16,551
社区成员
发帖
与我相关
我的任务
分享
pTempPoint = pSrc->m_pHeadPoint;
while(pTempPoint!=NULL)
{
CNcPoint *pLsPoint;
pLsPoint = new CNcPoint;
pLsPoint->r = pTempPoint->r;
pLsPoint->x = pTempPoint->x;
pLsPoint->y = pTempPoint->y;
pLsPoint->m_nType = pTempPoint->m_nType;
if(pTempPoint == pSrc->m_pHeadPoint)
{
pReturn->m_pHeadPoint = pLsEndPoint = pLsPoint;
}
else
{
pLsEndPoint->m_pNextPoint = pLsPoint;
pLsPoint->m_pForePoint = pLsEndPoint;
pLsEndPoint = pLsPoint;
}
pTempPoint=pTempPoint->m_pNextPoint;
}
//基类中的复制对象函数
// 声明:
// 复制相同的实体
// virtual CNcEntity *CopyEntity(CNcEntity *pSrc);
CNcEntity *CNcEntity::CopyEntity(CNcEntity *pSrc)
{
if( pSrc == NULL )
return NULL;
if( !pSrc->IsKindOf(RUNTIME_CLASS(CNcEntity)) )
return NULL;
CNcEntity *pReturn = NULL;
switch( pSrc->m_nEntityType )
{
case ENTITY_TYPE_OUT:
{
pReturn = new COutEntity;
}
break;
case ENTITY_TYPE_HOLE:
{
pReturn = new CHoleEntity;
}
break;
case ENTITY_TYPE_MARKINGDATA:
{
pReturn = new CMarkingData;
}
break;
case ENTITY_TYPE_STRINGDATA:
{
pReturn = new CStringEntity;
}
break;
case ENTITY_TYPE_BLASTING:
{
pReturn = new CBlastingData;
}
break;
case ENTITY_TYPE_STARTHOOK: //起割线
{
pReturn = new CStartHook;
}
break;
case ENTITY_TYPE_ENDHOOK: //终割线
{
pReturn = new CEndHook;
}
break;
case ENTITY_TYPE_GEOMETRY: //几何数据
{
pReturn = new CGeometryData;
}
break;
case ENTITY_TYPE_IDLE: //空程
{
pReturn = new CIdleData;
}
break;
case ENTITY_TYPE_MARKINGSHAPEDATA: //MARKINGSHAPE
{
pReturn = new CMarkingShapeData;
}
break;
case ENTITY_TYPE_LABELTEXT : //标签
{
pReturn = new CLabelTextData;
}
break;
case ENTITY_TYPE_LABELSYMBOL: //符号
{
pReturn = new CLabelSymbolData;
}
break;
case ENTITY_TYPE_GSD: //GSD
{
pReturn = new CGSDData;
}
break;
case ENTITY_TYPE_AUXILIARY_FUNCTION: //辅助功能
{
pReturn = new CAuxiliaryFunctionData;
}
break;
case ENTITY_TYPE_TAPE: //后处理信息
{
pReturn = new CTapeData;
}
break;
case ENTITY_TYPE_UNDEFINE:
case ENTITY_TYPE_UNKOWN:
default:
{
pReturn = new CNcEntity;
}
break;
}
CNcPoint *pTempPoint = NULL,*pLsEndPoint = NULL;
pReturn->m_nEntityType = pSrc->m_nEntityType;
pReturn->m_bVisible = pSrc->m_bVisible;
pTempPoint = pSrc->m_pHeadPoint;
while(pTempPoint!=NULL)
{
CNcPoint *pLsPoint;
pLsPoint = new CNcPoint;
pLsPoint->r = pTempPoint->r;
pLsPoint->x = pTempPoint->x;
pLsPoint->y = pTempPoint->y;
pLsPoint->m_nType = pTempPoint->m_nType;
if(pTempPoint == pSrc->m_pHeadPoint)
{
pReturn->m_pHeadPoint = pLsEndPoint = pLsPoint;
}
else
{
pLsEndPoint->m_pNextPoint = pLsPoint;
pLsPoint->m_pForePoint = pLsEndPoint;
pLsEndPoint = pLsPoint;
}
pTempPoint=pTempPoint->m_pNextPoint;
}
return pReturn;
}
//子类中的复制对象方法
CNcEntity *CStringEntity::CopyEntity(CNcEntity *pSrc)
{
if( pSrc == NULL )
return NULL;
if( !pSrc->IsKindOf(RUNTIME_CLASS(CStringEntity) ) )
return NULL;
if( pSrc->m_nEntityType != ENTITY_TYPE_STRINGDATA)
return NULL;
CStringEntity *pReturn = (CStringEntity *)(CNcEntity::CopyEntity(pSrc));
CStringEntity *pOSrc = (CStringEntity *)pSrc;
pReturn->m_dAngle = pOSrc->m_dAngle;
pReturn->m_dHeight = pOSrc->m_dHeight;
pReturn->m_dPosX = pOSrc->m_dPosX;
pReturn->m_dPosY = pOSrc->m_dPosY;
pReturn->m_string = pOSrc->m_string;
pReturn->m_stringType = pOSrc->m_stringType;
return (CNcEntity *)pReturn;
}