- UID
- 739618
- 积分
- 526
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2014-10-22
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2016-10-20 19:35:15
|
显示全部楼层
//向图形数据库添加一个有名字典并添加记录
void CCreatEnt::YTMaddNameDict(CString appName,CString recName,CString data)
{
// 锁定当前文档
//acDocManager->lockDocument(acDocManager->curDocument(), AcAp::kWrite, NULL, NULL, true);
//得到命名对象词典指针
AcDbDictionary *pNamedobj, *pDict;
Acad::ErrorStatus es=acdbHostApplicationServices()->workingDatabase()->getNamedObjectsDictionary(pNamedobj, AcDb::kForWrite);
if(es!=Acad::eOk)
{
//文档解锁
acDocManager->unlockDocument(acDocManager->curDocument());
}
// 检查是否已有关键字为“设计信息”的词典,如没有,则创建
if (pNamedobj->getAt(appName, (AcDbObject*&) pDict,AcDb::kForWrite) == Acad::eKeyNotFound)
{
pDict = new AcDbDictionary;
AcDbObjectId DictId;
pNamedobj->setAt(appName, pDict, DictId);
}
if(pNamedobj!=NULL)
{
pNamedobj->close();
}
//创建AcDbXrecord对象,并添加到扩展词典
AcDbXrecord *pXrec = new AcDbXrecord;
AcDbObjectId xrecObjId;
pDict->setAt(recName, pXrec, xrecObjId);
if(pDict!=NULL)
{
pDict->close();
}
//为AcDbXrecord对象创建resbuf链表
struct resbuf *pHead;
pHead = acutBuildList(AcDb::kDxfText,data,RTNONE);
// 为AcDbXrecord对象设置链表
pXrec->setFromRbChain(*pHead);
acutRelRb(pHead);
if(pXrec!=NULL)
{
pXrec->close();
}
// 运行完解锁文档
//acDocManager->unlockDocument(acDocManager->curDocument());
}
//从图形数据库获取一个有名字典并获取记录
void CCreatEnt::YTMgetNameDict(CString appName,CString recName,CString& data)
{
AcDbDictionary *pNamedobj;
Acad::ErrorStatus es=acdbHostApplicationServices()->workingDatabase()->getNamedObjectsDictionary(pNamedobj, AcDb::kForRead);
if(es!=Acad::eOk)
{
//文档解锁
acDocManager->unlockDocument(acDocManager->curDocument());
}
//得到关键字为"设计信息"的词典
AcDbDictionary *pDict;
if(pNamedobj->getAt(appName, (AcDbObject*&)pDict,AcDb::kForRead)== Acad::eKeyNotFound)
{
pNamedobj->close();
acutPrintf(_T("\n未找到用户字典!"));
return;
}
if(pNamedobj!=NULL)
{
pNamedobj->close();
}
//得到关键字为"设计者"的AcDbXrecord对象
AcDbXrecord *pXrec;
if(pDict->getAt(recName, (AcDbObject*&) pXrec,AcDb::kForRead)== Acad::eKeyNotFound)
{
pDict->close();
acutPrintf(_T("\n未找到指定记录!"));
return;
}
if(pDict!=NULL)
{
pDict->close();
}
struct resbuf *pRbList;
pXrec->rbChain(&pRbList);
if(pXrec!=NULL)
{
pXrec->close();
}
//返回的结果缓存的处理参考示例工程
//vector<CString> secret;
//acutPrintf(_T("\n%s"),pRbList->resval.rstring);
//vecStr.push_back(pRbList->resval.rstring);
if(pRbList!=NULL)
{
data=pRbList->resval.rstring;
}
else
{
acutPrintf(_T("\n未找到用户字典!"));
}
acutRelRb(pRbList);
}
以上代码为我最终使用的代码,没有用智能指针,当前代码未再出现崩溃的情况,多谢@Highflybird的悉心指点!
程序主要的思路是打开一个dwg时,检查有无数据(保存在命名字典中),若有的话读取此数据,然后……当程序结束时,无论数据是否修改,还保存到对应的字典项中(新建或覆盖)
|
评分
-
查看全部评分
|