设置实体的扩展数据,扩展数据是一个链表,可以设置多个数据
virtual Mcad::ErrorStatus setXData(const struct resbuf* xdata);
参数 |
说明 |
const struct resbuf* xdata |
扩展数据链表指针,在不使用时调用Mx::mcutRelRb释放链表 |
如果成功返回Mcad::eOk
例如:sampleeditedit.sln中的例子
void CTestCommands::WirteExData() { ads_name entName; ads_point pt; if(acedEntSel(_T("选择定义扩展数据的实体:"),entName,pt) != RTNORM) { return; } AcDbObjectId objId; if(acdbGetObjectId(objId,entName) != Acad::eOk) return; AcDbObjectPointer<AcDbEntity> spEnt(objId,AcDb::kForWrite); if(spEnt.openStatus() != Acad::eOk) return; CString sAppName = _T("TestExData"); int iValue = 999; acdbRegApp(sAppName); struct resbuf* pExDataRb = acutBuildList(1001,sAppName,AcDb::kDxfXdInteger16,iValue,0); spEnt->setXData(pExDataRb); acutRelRb(pExDataRb); acutPrintf(_T("n 写扩展数据成功")); }
删除名为sAppName的扩展数据 struct resbuf* pExDataRb = acutBuildList(1001,sAppName,0); spEnt->setXData(pExDataRb);
删除所有的扩展数据 resbuf* Append(IN OUT resbuf *&rb, resbuf *rb1) { resbuf* pReturn = rb; resbuf* rb_tep; if(rb == NULL) { rb = rb1; return rb1; } else { for(rb_tep = rb; rb_tep->rbnext != NULL; rb_tep = rb_tep->rbnext); rb_tep->rbnext = rb1; } return pReturn; } BOOL DelAlL(AcDbObject* pObj,CString sAppName) { resbuf *pResbuf, *pRbSet = NULL; CString sPattern = sAppName.IsEmpty()?_T("*"):sAppName; sPattern.MakeUpper(); ArxDbgRbList spRb = pObj->xData(); pResbuf = spRb.data(); while(pResbuf != NULL) { resbuf *pTmp; if (pResbuf ->restype == 1001) { sAppName = pResbuf->resval.rstring; sAppName.MakeUpper(); if (acutWcMatchEx(sAppName,sPattern,false) == RTNORM) { pTmp = acutNewRb(1001); acutNewString(pResbuf->resval.rstring,pTmp->resval.rstring); Append(pRbSet,pTmp); } } pResbuf = pResbuf->rbnext; } if(pRbSet != NULL) { pObj->setXData(pRbSet) == Acad::eOk; acutRelRb(pRbSet); } return TRUE; }