找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 149|回复: 0

[每日一码] ARX图层合并

[复制链接]

0

主题

0

回帖

28

积分

管理员

积分
28
发表于 2024-3-14 20:01:36 | 显示全部楼层 |阅读模式
图层合并
将一个图层的所有对象转移到另一个图层,并删除原图层。
  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. }   
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 05:31 , Processed in 0.116811 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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