ObjectARX如何锁定一个图层

news/2024/11/23 20:55:36/

一般来说,更改图层设置后需要重生成图纸,但是重生成时间开销太大。为了降低时间开销,可以采取以下两种方法。

一、通过设置LAYLOCKFADECTL避免重生成

找到需要锁定的图层,打开它,设置其为锁定状态。但是注意,使用该方式前必须设置LAYLOCKFADECTL系统变量为一个新值,设定图层锁定后再设回原值。

void SetLayLock()
{int iOldLockFade, iNewLockFade;struct resbuf buf;acedGetVar(_T("LAYLOCKFADECTL"), &buf);iOldLockFade = buf.resval.rint;iNewLockFade = iOldLockFade ? -iOldLockFade : 1;buf.resval.rint = iNewLockFade;acedSetVar(_T("LAYLOCKFADECTL"), &buf);	//这一步必不可少,否则不会暗显锁定图层的对象//提示用户选择一个实体ads_name ss;ads_point pt;if (RTNORM != acedEntSel(_T("请选择一个实体"), ss, pt))return;AcDbObjectId id;if (Acad::eOk == acdbGetObjectId(id, ss)){AcDbEntity* pEnt;if (Acad::eOk == acdbOpenObject(pEnt, id, AcDb::kForRead)){id = pEnt->layerId();pEnt->close();AcDbLayerTableRecord* pLyrRec;if (Acad::eOk == acdbOpenObject(pLyrRec, id, AcDb::kForWrite)){pLyrRec->setIsLocked(true);pLyrRec->close();}}}buf.resval.rint = iOldLockFade;acedSetVar(_T("LAYLOCKFADECTL"), &buf);//这一步必不可少
}

二、直接向CAD发送命令

这种方法同样不需要重生成图纸,但是并不推荐,首先是CAD命令行最多只能输入256个字符,当需要锁定多个图层(在ads_command的实参字符串中,每个图层名中用,隔开)时,ads_command实参字符串长度可能超过256;其次,图层名称中含有诸如#、.等通配符时需要特殊处理;最后,由于未知的原因,采用发送命令的方式无法锁定部分图层。

void SetLayLock2()
{//提示用户选择一个实体ads_name ss;ads_point pt;if (RTNORM != acedEntSel(_T("请选择一个实体"), ss, pt))return;CString sLayer;TCHAR* pszLayer;AcDbObjectId id;if (Acad::eOk == acdbGetObjectId(id, ss)){AcDbEntity* pEnt;if (Acad::eOk == acdbOpenObject(pEnt, id, AcDb::kForRead)){pszLayer= pEnt->layer();sLayer = pszLayer;acutDelString(pszLayer);pEnt->close();}}if (!sLayer.IsEmpty())ads_command(RTSTR, _T("-layer"), RTSTR, _T("lo"), RTSTR, sLayer, RTSTR, _T(""), RTNONE);
}

http://www.ppmy.cn/news/650087.html

相关文章

Photoshop脚本 锁定图层组所有图层

源自:http://coolketang.com/tutorials/menu4lesson16.php 本节将演示如何使用脚本,锁定某个图层组的所有图层。首先创建一个空白的脚本文档,并保存在硬盘上某个位置。 首先创建一个空白的脚本文档,并保存在硬盘上某个位置。 接…

“电脑登录界面显示引用的账户当前已锁定”解决办法

一、电脑登录界面显示引用的账户当前已锁定,解决办法: https://www.zhihu.com/question/400540089/answer/2159778869 具体步骤: 1.开机进BIOS系统(不同机型方法不同,具体可百度) 2.进入BIOS系统时间设定…

ArcSDE解除图层锁定

解决所有锁定的命令: sdemon -o kill -t all -p sde 再到Orcal中去查,就没有被锁定的记录了。 本文转自我也是个傻瓜51CTO博客,原文链接: http://www.cnblogs.com/liweis/p/6187338.html,如需转载请自行联系原作者

CAD锁定所有图层(网页版)

具体实现js代码如下: function LockeAllLayer() {//返回控件的数据库对象var database mxOcx.GetDatabase();//返回数据库中的层表对象var layerTable database.GetLayerTable();//创建一个遍历层表中所有图层的遍历器var iter layerTable.NewIterator();for (; …

ps去除图片中的文字、图层锁定不能解开问题

作为前端人,有时候也会切图,修改图中的一些东西,可能会遇到一些小问题,今天就先说一下这2个问题吧。 图层锁定怎么解锁 1.第一种是最常见的,打开一张图片,默认为背景,该背景图层通常都是锁定的…

PS学习-----------图层锁定的解决办法

1.普通情况下, 在ps中,为了有效的保护图层中的信息不被破坏,可以对图层进行锁定。锁定后的图层不能进行剪切、填充、移动等很多操作。 在图层面板中,点击十字架按钮或锁形按钮,可锁住图层,或解锁图层。 …

建筑CAD制图软件中如何快速锁定图层?

设计师在使用浩辰建筑CAD制图软件绘制CAD建筑施工图的过程中,如何选中CAD图纸中的某一对象从而锁定其所在图层呢?下面小编就来给大家介绍一下浩辰建筑CAD制图软件中使用锁定图层功能来实现以上操作的操作教程吧! 由于设计师对于图层的管理和设…

ps 条件动作添加 图层锁定和解锁

Photoshop CC 2014.2.2版本以上,新增加了锁定图层快捷键,让我们能更加方便快捷键的锁定图层 ctrl/, 两个键一起按会很麻烦,我们可以ctrlaltshiftk来调出ps键盘快捷键设置列表,如下图: 在图层里一直往下拉,…