- UID
- 10905
- 积分
- 114
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-10-9
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我在论坛上搜索了以前的帖子,在文章中心也拜读了你的相关文章,但是还是弄不明白.下面是我的一段代码例子.
void test()
{
// TODO: Implement the command
AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
ASSERT(pDb != NULL);
Acad::ErrorStatus es;
AcDbBlockTable* pTable=NULL;
es=pDb->getBlockTable(pTable,AcDb::kForRead);
if(es!=Acad::eOk)
{
acutPrintf("\n获取块表出错!");
return;
}
AcDbBlockTableRecord* pRec;
es=pTable->getAt(ACDB_MODEL_SPACE,pRec,AcDb::kForRead);
pTable->close();
if(es!=Acad::eOk)
{
acutPrintf("\n获取模型空间块记录出错!");
return;
}
AcDbObjectId exDictId=pRec->extensionDictionary();
pRec->close();
if(exDictId==AcDbObjectId::kNull)
{
acedAlert("第一次使用显示排序,请先使用一次随意draworder命令!");
return;
}
AcDbObjectIdArray objIds;
ads_name ss;
int rc = acedSSGet(NULL, NULL, NULL, NULL, ss);
if(rc != RTNORM)
return;
long length;
acedSSLength(ss, &length);
if(length == 0)
{
acedSSFree(ss);
return;
}
ads_name entName;
AcDbObjectId oId;
for(long i=0; i<length; i++)
{
acedSSName(ss, i, entName);
if(acdbGetObjectId(oId, entName)!=Acad::eOk)
{
acedSSFree(ss);
return;
}
objIds.append(oId);
}
acedSSFree(ss);
acutPrintf("\n%d",objIds.length());
AcDbDictionary *pDict;
es=acdbOpenObject(pDict,exDictId,AcDb::kForWrite);
AcDbSortentsTable* pSt;
es=pDict->getAt("ACAD_SORTENTS", (AcDbObject*&)pSt,
AcDb::kForWrite);
es=pSt->moveToTop(objIds);
es=pDict->close();
//pSt如何关闭呀,执行后没有效果
}
我又采用ads的方法读取AcDbSortents的值,代码如下:
AcDbObjectId stId;
es=pDict->getAt("ACAD_SORTENTS",stId);
es=pDict->close();
ads_name en;
es=acdbGetAdsName(en,stId);
resbuf* buf,*eb;
buf=acdbEntGet(en);
for (eb = buf; eb != NULL; eb = eb->rbnext)
printdxf(eb);
// Release the acdbEntGet() list.
acutRelRb(buf);
不知道可不可以采用acdbEntMod()的方法来进行排序,另外发现CAD的图形句柄是递增的,如果图形的显示顺序是新实体在前,旧实体在后,AcDbSortents中不会包含实体的名称句柄列表。 |
|