找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1516|回复: 2

[ARX函数]:已知当前层表中有个“LayerName”的图层,怎样才能获得该图层的ID

[复制链接]
发表于 2005-9-21 11:03:46 | 显示全部楼层 |阅读模式

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

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

×
已知当前层表中有个“LayerName”的图层,
怎么能获得该图层的ID ?
用ads_command吗?
我用的程序如下:

AcDbLayerTableRecord *pLayerTblRcd= new AcDbLayerTableRecord;
pLayerTbl->getAt(LayerName, pLayerTblRcd, AcDb::kForWrite);
AcDbObjectId layerId=pLayerTbl->objectId();  
pLayerTblRcd->close();
pLayerTbl->close();
acdbHostApplicationServices()->workingDatabase()->setClayer(layerId);

可是错误的?:( 能给个建议吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-22 10:15:13 | 显示全部楼层
从你的程序看,你的ARX简直还没有入门,还需要多多努力。
“LayerName”图层只是层表下的一条记录,所以只需要获取当前图形的层表指针,就可以根据层表记录名(图层名称)获得该图层的ID。

AcDbLayerTable *pLayerTable;
acdbCurDwg()->getLayerTable(pLayerTable, AcDb::kForRead);

AcDbObjectId layerId;
pLayerTable->getAt("LayerName", layerId);

如果不能肯定图层中一定含有"LayerName"图层,还应加上判断语句:

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

使用道具 举报

 楼主| 发表于 2005-9-22 15:45:34 | 显示全部楼层
多谢指教,您说的是:::
其实问题我已解决,来这里总结一下:
                AcDbLayerTable *pLayerTbl;
                acdbHostApplicationServices()->workingDatabase()
                              ->getSymbolTable(pLayerTbl, AcDb::kForWrite);
                           //获得当前层表以便写入

                acutPrintf("\n%s:",LayerName);
                acutPrintf("图层已经存在!");     
//第一种
                AcDbLayerTableRecord *pLayerTblRcd;       
                int re = pLayerTbl->getAt(LayerName, pLayerTblRcd, AcDb::kForWrite);
                                     //acutPrintf("\n re的值是%d:",re);         
                AcDbObjectId layerId=pLayerTblRcd->objectId();
                                    //acutPrintf("\n layerId的值是%d:",layerId);
                pLayerTblRcd->close();       
                pLayerTbl->close();
                acdbHostApplicationServices()->workingDatabase()->setClayer(layerId);

//楼上的方法
                acdbCurDwg()->getLayerTable(pLayerTbl, AcDb::kForRead);
                AcDbObjectId layerId;
                pLayerTbl->getAt("LayerName", layerId);
                pLayerTbl->close();
                acdbHostApplicationServices()->workingDatabase()->setClayer(layerId);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 14:47 , Processed in 0.400321 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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