找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 544|回复: 2

[求助]:如何让acedSSGet函数不选择锁定层上的实体?

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2002-10-12 23:56:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-13 10:17:26 | 显示全部楼层

Re: [求助]:如何让acedSSGet函数不选择锁定层上的实体?

最初由 LoveArx 发布
[B]如题 [/B]


  1. 在你使用acedSSGet获得选择集后,可以处理下选择集,把锁定层上的实体从选择集移走就可以了。给你贴个函数:

  2. [FONT=courier new]
  3. void ssNoLock (ads_name & tss)
  4. {
  5.         AcDbObjectId objId=AcDbObjectId::kNull;
  6.         AcDbEntity *pEnt=NULL;
  7.        
  8.         AcDbObjectId layerId=AcDbObjectId::kNull ;
  9.         AcDbLayerTableRecord  *pLtblr=NULL;

  10.         ads_name eName;
  11.         long i=0;

  12.         if ( RTNORM == acedSSLength(tss,&i))
  13.         {

  14.                 /*        go through the selection set to get layerid and
  15.                         delete the entities on the locked layer from selection
  16. set*/

  17.                 for(long j=i-1;j >= 0;)
  18.                 {
  19.                        
  20.                         if (RTNORM == acedSSName(tss,j--,eName))
  21.                         {
  22.                                 if (Acad::eOk == acdbGetObjectId (objId ,
  23. eName))
  24.                                 {
  25.                                         if (Acad::eOk ==
  26. acdbOpenAcDbEntity(pEnt,objId, AcDb::kForNotify,Adesk::kFalse))
  27.                                         {
  28.                                                 layerId = pEnt->layerId();
  29.                                                 if (Acad::eOk ==
  30. acdbOpenObject(pLtblr,layerId,AcDb::kForRead,Adesk::kFalse))
  31.                                                 {
  32.                                                         if ( pLtblr->isLocked())

  33.                                                         {
  34.                                                                 //delete locked
  35. entity from selection set
  36.                                                                
  37.                                                                 if(RTNORM !=
  38. acedSSDel(eName,tss))
  39.                                                                        
  40. acutPrintf("\nFailed to delete entity from selection set");

  41.                                                                 //close layer
  42. block table
  43.                                                                 if (Acad::eOk !=
  44. pLtblr->close())
  45.                                                                        
  46. acutPrintf("\nFailed to close layer table record");
  47.                                                         }
  48.                                                 }       
  49.                                                 else
  50.                                                         acutPrintf("\nFailed to
  51. open layer table record");
  52.                                                                                 //close entity
  53.                                                 if (Acad::eOk != pEnt->close())
  54.                                                         acutPrintf("\nFailed to
  55. close entity");
  56.                                                                                
  57.                        
  58.                                         }
  59.                                         else
  60.                                                 acutPrintf("\nFailed to open
  61. entity");
  62.                                        
  63.                                 }
  64.                                 else
  65.                                         acutPrintf("\nFailed to open object");
  66.                         }

  67.                 } //for loop
  68.         }
  69. }

  70. //下面是上面函数的用法

  71. void mysel()
  72. {
  73.         ads_name ss;

  74.         if(acedSSGet(NULL,NULL,NULL,NULL,ss) != RTNORM)
  75.                 return;

  76.         ssNoLock(ss);

  77.         long len;
  78.         acedSSLength(ss,&len);

  79.         acutPrintf("\nGot %d entities",len);
  80.         acedSSFree(ss);
  81. }
  82. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-13 10:32:36 | 显示全部楼层

Re: [求助]:如何让acedSSGet函数不选择锁定层上的实体?

最初由 LoveArx 发布
如题


1.遍历层表,取锁定层的层名列表
2.构造过滤条件,直接过滤即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-26 02:37 , Processed in 0.416726 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表