乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 7|回复: 0

救命啊!克隆人点头不起作用。

[复制链接]

3

主题

13

帖子

1

银币

初来乍到

Rank: 1

铜币
25
发表于 2009-1-20 20:35:22 | 显示全部楼层 |阅读模式
嗨,大家好,
我正在创建自定义对象,其样式存储在NOD中。
我的自定义对象的结构如下:
类 DLLIMPEXP KMTPIPELINE : public AcDbCurve {
protected:
static Adesk::UInt32 kCurrentVersionNumber ;
公共:
...
AcDbHardPointerId : m_PipeTypeId;
.....
}
其中m_PipeTypeId是AcDbdictionary中的自定义对象存储,其中包含一些用于绘制PipeLinew的属性,布局如下:
KMT_PIPE_TYPES
TYPE1
TYPE2
TYPE3
....
管道类型自定义对象内部包含一些硬指针。
我的问题是,当我将管道复制到其他图形(使用ClipCopy,ClipPaste)时,如果目标图形不包含任何KMT_PIPE_TYPES则它完全按照我想要的方式工作。但是,如果目标绘图在字典中已经具有KMT_PIPE_TYPES,它将添加名称为*A1,*A2...并且管道类型存储在此 NOD 中。
我已经过度使用了wblockconlone来转售这个问题,但它不起作用。
任何人都可以帮忙吗?
我的 wblock clone 如下所示:
Acad::ErrorStatus KMTPIPETYPE::wblockClone (AcRxObject *pOwnerObject, AcDbObject *&pClonedObject, AcDbIdMapping &idMap, Adesk::Boolean isPrimary) const {
//assertReadEnabled () ;
pClonedObject = NULL;
AcDbDatabase *pDest, *pOrig;
idMap.destDb(pDest);
idMap.origDb(pOrig);
if (pDest == pOrig)
return (AcDbObject::wblockClone (pOwnerObject, pClonedObject, idMap, isPrimary)) ;
bool isPrim = false;
如果 (isPrimary)
isPrim = true;
AcDbObjectId DestObjId;
// 在 dest 字典中获取 NOD 中的样式名称,
// 如果存在,则返回 dicId,如果不返回 NULL
KMTArxUtils_GetDictionaryObjectId(DestObjId,m_Name,_T(“KMT_PIPE_TYPES”),pDest);
如果 (!DestObjId){
KMTPIPETYPE *pClone = (KMTPIPETYPE*)isA()->create();
if (pClone != NULL)
pClonedObject = pClone;
else
return Acad::eOutOfMemory;
AcDbWblockCloneFiler filer;
dwgOut(&filer);
filer.seek(0L, AcDb::kSeekFromStart);
pClone->dwgIn(&filer);
DestObjId=KMTArxUtils_SaveToDict(_T(“KMT_PIPE_TYPE”),pClone,pDest);
idMap.assign(AcDbIdPair(objectId(), DestObjId, Adesk::kTrue,
isPrim, (Adesk::Boolean)(pOwnerObject != NULL) ));
pClone->setAcDbObjectIdsInFlux();
AcDbObjectId id;
while (filer.getNextHardObject(id)) {
AcDbObject *pSubObject;
AcDbObject *pClonedSubObject;
如果 (id == NULL)
继续;
acdbOpenAcDbObject(pSubObject, id, AcDb::kForRead);
if (pSubObject->database() != database()) {
pSubObject->close();
继续;
}
pClonedSubObject = NULL;
if (pSubObject->ownerId() == objectId()) {
pSubObject->wblockClone(pClone,
pClonedSubObject,
idMap, Adesk::kFalse);
} else {
pSubObject->wblockClone(pClone->database(),
pClonedSubObject,
idMap, Adesk::kFalse);
}
pSubObject->close();
if (pClonedSubObject != NULL)
pClonedSubObject->close();
}
}
else{
idMap.assign(AcDbIdPair(objectId(), DestObjId, Adesk::kTrue,
isPrim, (Adesk::Boolean)(pOwnerObject != NULL) ));
}
返回 Acad::eOk;
}

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 04:07 , Processed in 0.663111 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表