|
我想为各个层添加扩展字典,来记录层上的一些信息,下面是我的函数(我把层名作为字典的名字)
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);
}
编译运行都没有问题,可就是得不到我输入的结果,请问各位高手,我的程序哪里有问题;还是不可以为层添加扩展词典
|
|