- UID
- 1
- 积分
- 16111
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
发表于 2002-10-13 10:17:26
|
显示全部楼层
Re: [求助]:如何让acedSSGet函数不选择锁定层上的实体?
最初由 LoveArx 发布
[B]如题 [/B]
- 在你使用acedSSGet获得选择集后,可以处理下选择集,把锁定层上的实体从选择集移走就可以了。给你贴个函数:
- [FONT=courier new]
- void ssNoLock (ads_name & tss)
- {
- AcDbObjectId objId=AcDbObjectId::kNull;
- AcDbEntity *pEnt=NULL;
-
- AcDbObjectId layerId=AcDbObjectId::kNull ;
- AcDbLayerTableRecord *pLtblr=NULL;
- ads_name eName;
- long i=0;
- if ( RTNORM == acedSSLength(tss,&i))
- {
- /* go through the selection set to get layerid and
- delete the entities on the locked layer from selection
- set*/
- for(long j=i-1;j >= 0;)
- {
-
- if (RTNORM == acedSSName(tss,j--,eName))
- {
- if (Acad::eOk == acdbGetObjectId (objId ,
- eName))
- {
- if (Acad::eOk ==
- acdbOpenAcDbEntity(pEnt,objId, AcDb::kForNotify,Adesk::kFalse))
- {
- layerId = pEnt->layerId();
- if (Acad::eOk ==
- acdbOpenObject(pLtblr,layerId,AcDb::kForRead,Adesk::kFalse))
- {
- if ( pLtblr->isLocked())
- {
- //delete locked
- entity from selection set
-
- if(RTNORM !=
- acedSSDel(eName,tss))
-
- acutPrintf("\nFailed to delete entity from selection set");
- //close layer
- block table
- if (Acad::eOk !=
- pLtblr->close())
-
- acutPrintf("\nFailed to close layer table record");
- }
- }
- else
- acutPrintf("\nFailed to
- open layer table record");
- //close entity
- if (Acad::eOk != pEnt->close())
- acutPrintf("\nFailed to
- close entity");
-
-
- }
- else
- acutPrintf("\nFailed to open
- entity");
-
- }
- else
- acutPrintf("\nFailed to open object");
- }
- } //for loop
- }
- }
- //下面是上面函数的用法
- void mysel()
- {
- ads_name ss;
- if(acedSSGet(NULL,NULL,NULL,NULL,ss) != RTNORM)
- return;
- ssNoLock(ss);
- long len;
- acedSSLength(ss,&len);
- acutPrintf("\nGot %d entities",len);
- acedSSFree(ss);
- }
- [/FONT]
复制代码 |
|