找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 958|回复: 3

[ARX函数]:请教:有没有创建图层的函数?

[复制链接]
发表于 2002-5-9 10:03:09 | 显示全部楼层 |阅读模式

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

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

×
在ARX程序中,我用layer命令来常见图层,单个Arx文件加载时没问题,但是我在别的Arx文件中加载它,并且同时加载几个Arx文件时就不能创建图层,为什么?有没有创建图层的Arx函数?谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-5-9 10:17:00 | 显示全部楼层
我看过一本书:AutoCAD2000ARX开发技术,清华大学出版社,刘良华,朱东海编著
117页,
把它做成一个函数包进来,我试过好用,您试试。
谢谢您以前的帮助
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-5-9 10:31:58 | 显示全部楼层

Re: [ARX函数]:请教:有没有创建图层的函数?

最初由 梦宁 发布
[B]在ARX程序中,我用layer命令来常见图层,单个Arx文件加载时没问题,但是我在别的Arx文件中加载它,并且同时加载几个Arx文件时就不能创建图层,为什么?有没有创建图层的Arx函数?谢谢 [/B]


把你的代码贴出来吧。

AUTOCAD的命令都是通过底层的ARX实现的,在AUTOCAD下,若ARX干不了的,其他什么都干不了了。

创建LAYER的,ARX库肯定不会提供方法,这都可以用ARX的方法组合实现,你创建一个新的AcDbLayerTableRecord记录添加到AcDbLayerTable里面就可以了,下面是XDRX_API的关于创建LAYER的C++库函数:


  1. [FONT=courier new]
  2. Acad::ErrorStatus
  3. XdDbUtils::addNewLayer(LPCTSTR layerName, AcDbDatabase* db)
  4. {
  5.                 // if layer already exists, then just return
  6.         AcDbLayerTable* layTbl = openLayerTable(AcDb::kForRead, db);
  7.         if (layTbl->has(layerName)) {
  8.                 layTbl->close();
  9.                 return(Acad::eOk);
  10.         }
  11.                 // upgrade to write
  12.         Acad::ErrorStatus es = layTbl->upgradeOpen();
  13.         if (es != Acad::eOk) {
  14.                 ASSERT(0);
  15.                 layTbl->close();
  16.                 return(es);
  17.         }
  18.                 // make sure the name gets set ok
  19.         AcDbLayerTableRecord* newRec = new AcDbLayerTableRecord;
  20.         es = newRec->setName(layerName);
  21.         if (es != Acad::eOk) {
  22.                 delete newRec;
  23.                 layTbl->close();
  24.                 return(Acad::eInvalidInput);
  25.         }
  26.                 // look up value for default linetype CONTINUOUS,
  27.                 // AcDbLayerTableRecord doesn't set this automatically
  28.         AcDbObjectId ltypeId;
  29.         if (XdDbUtils::nameToSymbolId(AcDbLinetypeTableRecord::desc(),
  30.                                         AcadString::continuous, ltypeId, db) == Acad::eOk) {
  31.                 newRec->setLinetypeObjectId(ltypeId);
  32.         }

  33.         es = layTbl->add(newRec);
  34.         if (es != Acad::eOk)
  35.                 delete newRec;
  36.         else
  37.                 newRec->close();

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

使用道具 举报

 楼主| 发表于 2002-5-9 21:43:11 | 显示全部楼层
代码如下:
#define layer_do(mode,layer_name){\
        if(acedCommand(RTSTR,"LAYER",RTSTR,mode,RTSTR,layer_name,RTSTR,"",0)\
           !=RTNORM) AfxMessageBox("图层操作失败!",MB_OK+MB_ICONWARNING);\
           }

void CreateLayer()//生成图层
{   
        acutPrintf("\n正在生成图层......\n");
        layer_do("M","GS");  //光栅图
        layer_do("M","BJ");  //背景
        layer_do("M","DL");  //道路
        layer_do("M","JZ");  //建筑
        layer_do("M","QC1"); //参与计算统计的器材
        layer_do("M","QC2"); //参与统计不参与计算的器材
        layer_do("M","QC3"); //其它器材
        layer_do("M","CT");  //出图用
        layer_do("M","BZ");  //标注层
        acutPrintf("\n生成图层完成\n");
}

单个加载可以,但是多个加载就会弹出"图层操作失败"对话框,我用的是的函数acedArxLoad加载它们,一次性加载了7、8个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 15:47 , Processed in 0.389423 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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