找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 761|回复: 0

[弹指神通]:[弹指神通]一个图层合并程序。

[复制链接]

已领礼包: 3532个

财富等级: 富可敌国

发表于 2004-5-19 20:01:05 | 显示全部楼层 |阅读模式

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

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

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

  1.   [FONT=courier new]
  2. AcDbObjectId eId;
  3. AcDbObject *pObj;
  4. AcDbEntity *pE;

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


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

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

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

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

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

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

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

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

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


  59.                                 AcDbLayerTable * pLayerTbl;//定义层表指针
  60.                                 acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl, AcDb::kForWrite);
  61.                                        
  62.                                 AcDbLayerTableRecord * pLayerTblRcd; //定义层表记录指针
  63.                                 if ( Acad::eOk == pLayerTbl->getAt(layer_tc1 , pLayerTblRcd , AcDb::kForWrite))
  64.                                 {
  65.                                         pLayerTblRcd->erase(true);//删除图层
  66.                                 }                               
  67.                                 pLayerTblRcd->close();
  68.                                 pLayerTbl->close();
  69.                                 free(layer_tc2);
  70.                         break;
  71.                 }
  72.                 free(layer_tc);                       
  73.         break;
  74. }                       
  75.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-21 18:55 , Processed in 0.278853 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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