明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1524|回复: 1

[求助]各位高手帮帮忙:(扩展字典问题)

[复制链接]
发表于 2005-4-1 20:30:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2005-4-8 12:03:49 编辑

我想为各个层添加扩展字典,来记录层上的一些信息,下面是我的函数(我把层名作为字典的名字)
CreateDictionary()
{

AcDbObjectId pCurLayerId;
pCurLayerId=acdbHostApplicationServices()->workingDatabase()->clayer();
AcDbLayerTableRecord* pTRec;
acdbOpenObject(pTRec,pCurLayerId,AcDb::kForWrite);
pTRec->createExtensionDictionary();
AcDbObjectId dictObjId,xrecObjId;
AcDbXrecord *pXrec = new AcDbXrecord;
AcDbDictionary* pDict;
dictObjId=pTRec->extensionDictionary();
pTRec->close();
acdbOpenObject(pDict,dictObjId,AcDb::kForWrite);
pDict->setAt(pCLname,pXrec,xrecObjId);
pDict->close();

resbuf* head;
head=acutBuildList(AcDb::kDxfText,name,AcDb::kDxfReal,area,AcDb::kDxfReal,
RLength,AcDb::kDxfReal,RWidth,AcDb::kDxfInt16,num,RTNONE);
pXrec->setFromRbChain(*head);
pXrec->close();
acutRelRb(head);
}//其中name、area、length、Width、num分别为CString double double double int型
为了验证扩展字典的正确性,我编写了下面的函数进行验证
ReadDictionary(CString name)
{
AcDbLayerTable *pLayer;
AcDbLayerTableRecord *pRec;
AcDbObjectId dictObjId;
AcDbDictionary *pDict;
AcDbXrecord *pXrec; acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pLayer,AcDb::kForRead);
pLayer->getAt(name,pRec,AcDb::kForRead);
pLayer->close();
dictObjId=pRec->extensionDictionary();
pRec->close();
acdbOpenObject(pDict,dictObjId,AcDb::kForRead);
pDict->getAt(name,(AcDbObject*&)pXrec,AcDb::kForRead);
pDict->close();
struct resbuf* pRbList;
pXrec->rbChain(&pRbList);
pXrec->close();
pRbList->rbnext;//从第二个数据开始输出 acedPrintf("area=%f\n",pRbList->resval.rreal);
pRbList->rbnext;
acedPrintf("length=%f\n",pRbList->resval.rreal);
pRbList->rbnext;
acedPrintf("width=%f\n",pRbList->resval.rreal);
pRbList->rbnext;
acedPrintf("num=%f\n",pRbList->resval.rint);
acutRelRb(pRbList);
}
编译运行都没有问题,可就是得不到我输入的结果,请问各位高手,我的程序哪里有问题;还是不可以为层添加扩展词典
 楼主| 发表于 2005-4-8 12:12:00 | 显示全部楼层
问题解决了,这是一个愚蠢而低级的错误出错的地方我已经做了标注,下面是改进后的代码,希望大家不要犯和我类似的错误 resbuf *pRbList;
resbuf *pTemp;
pXrec->rbChain(&pRbList);
pTemp=pRbList;
pXrec->close();
pTemp=pTemp->rbnext;
acedPrintf("area=%f\n",pRbList->resval.rreal);
pTemp=pTemp->rbnext;
acedPrintf("length=%f\n",pRbList->resval.rreal);
pTemp=pTemp->rbnext;
acedPrintf("width=%f\n",pRbList->resval.rreal);
pTemp=pTemp->rbnext;
acedPrintf("num=%f\n",pRbList->resval.rint);
acutRelRb(pRbList);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 08:44 , Processed in 0.165682 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表