找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1763|回复: 1

[每日一码] ARX图层合并

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-10-10 08:15:05 | 显示全部楼层 |阅读模式

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

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

×
图层合并
将一个图层的所有对象转移到另一个图层,并删除原图层。



  1. AcDbObjectId eId;
  2. AcDbObject *pObj;
  3. AcDbEntity *pE;

  4. ads_name ss;
  5. ads_name ent;
  6. ads_point pt;
  7. long len;
  8. char * layer_tc1;
  9. char * layer_tc2;
  10. struct resbuf eb;
  11. struct resbuf blc;


  12. int rc = acedEntSel("\n选择被合并图层实体:",ent,pt);
  13. switch(rc)
  14. {
  15. case RTERROR :
  16.   acutPrintf("\n未选中实体! ");
  17. break;

  18. case RTCAN :
  19.   acutPrintf("\n取消! ");
  20. break;

  21. case RTNORM :   
  22.   acdbGetObjectId(eId,ent);
  23.   acdbOpenObject(pE, eId, AcDb::kForRead, false);
  24.   layer_tc1 = pE->layer();//查询实体所在的图层  
  25.   pE->close();

  26.   int rcc = acedEntSel("\n选择合并图层实体:",ent,pt);
  27.   switch(rcc)
  28.   {
  29.    case RTERROR :
  30.     acutPrintf("\n未选中实体! ");
  31.    break;

  32.    case RTCAN :
  33.     acutPrintf("\n取消! ");
  34.    break;

  35.    case RTNORM :      
  36.     acdbGetObjectId(eId,ent);
  37.     acdbOpenObject(pE, eId, AcDb::kForRead, false);
  38.     layer_tc2 = pE->layer();   
  39.     pE->close();

  40.     eb.restype = 8;//层名
  41.     eb.resval.rstring = layer_tc1;
  42.     eb.rbnext = NULL;
  43.     acedSSGet("X",NULL,NULL,&eb,ss);
  44.     free(eb.resval.rstring);

  45.     acedSSLength(ss,&len);
  46.     for(int i=0; i<len; i++)
  47.     {
  48.      acedSSName(ss,i,ent);
  49.      acdbGetObjectId(eId,ent);
  50.      acdbOpenObject(pE, eId, AcDb::kForWrite, false);
  51.      pE->setLayer(layer_tc2);
  52.      pE->close();  
  53.     }
  54.     acedSSFree(ss);

  55.     blc.restype = RTSTR;
  56.     blc.resval.rstring = "0";
  57.     acedSetVar("CLAYER",&blc);//设置当前图层为0层  


  58.     AcDbLayerTable * pLayerTbl;//定义层表指针
  59.     acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl, AcDb::kForWrite);
  60.      
  61.     AcDbLayerTableRecord * pLayerTblRcd; //定义层表记录指针
  62.     if ( Acad::eOk == pLayerTbl->getAt(layer_tc1 , pLayerTblRcd , AcDb::kForWrite))
  63.     {
  64.      pLayerTblRcd->erase(true);//删除图层
  65.     }   
  66.     pLayerTblRcd->close();
  67.     pLayerTbl->close();
  68.     free(layer_tc2);
  69.    break;
  70.   }
  71.   free(layer_tc);   
  72. break;
  73. }   

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

已领礼包: 1304个

财富等级: 财源广进

发表于 2016-10-10 09:02:45 | 显示全部楼层
啥也不说了,感谢楼主分享哇!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 01:04 , Processed in 0.200110 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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