明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4718|回复: 22

能不能使某个层上不能画东西?

  [复制链接]
发表于 2005-1-27 09:51 | 显示全部楼层 |阅读模式
各位高手,我建立一个专门的层,这个层上我不希望别人能在上面画东西,有没有办法?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2005-1-27 10:39 | 显示全部楼层
[建议]图层名:别在这层画东西
发表于 2005-1-27 10:51 | 显示全部楼层
锁定&冻结那个层就OK
发表于 2005-1-27 13:19 | 显示全部楼层
要这一层来干什么?
 楼主| 发表于 2005-1-27 14:15 | 显示全部楼层
我希望这个层,只有有权限的人才能画东西,如可以先设置密码等。
发表于 2005-1-27 14:46 | 显示全部楼层
Cadlock
 楼主| 发表于 2005-1-27 14:59 | 显示全部楼层
Cadlock是什么,怎么用啊?
发表于 2005-1-28 06:52 | 显示全部楼层
本帖最后由 作者 于 2005-1-28 18:44:14 编辑

1 设置系统变量反映器,当 clayer 为某以层时自动转到 0 层
2 监视新生成实体如果在 特定层,删除。
[Power=1]
;|
禁止在 ddd 图层绘制或将其他层实体修改至 ddd 层,
禁止将当前层设置为 ddd 层
禁止解锁 ddd 层
数据库对象监视只有在 commandended lispended commandcanced lispcanceled
后才触发.
|;
;;首先锁定 ddd 图层
(vla-put-lock
(vla-item (vlax-get-property
(vlax-get-property (vlax-get-acad-object) 'activedocument)
'layers
)
"ddd"
)
:vlax-true
)
;;数据库反应器,保存新加及修改的对象(包括 VBA 方法)
(vlr-acdb-reactor
"Ea-acdb-reactor"
'((:vlr-objectModified . SaveChangedLyr) ;修改
(:vlr-objectAppended . SaveChangedLyr) ;添加
)
) ;_ 结束vlr-acdb-reactor
;;编辑器反应器
(vlr-editor-reactor
nil
'((:vlr-commandended . DelAllNew) ;_检查绘制的新实体
(:vlr-commandcancelled . DelAllNew) ;_命令中断时检查是否有新实体
(:vlr-lispEnded . DelAllNew) ;_检查Lisp生成的新实体
(:vlr-lispCancelled . DelAllNew) ;_中断后是否有新实体
(:vlr-sysvarchanged . myResetSysvar) ;_防止修改 clayer
)
) ;_ 结束vlr-editor-reactor
;;设置当前图层,禁止设置为 ddd
(defun myResetSysvar (var1 var2)
(if (= (vlax-variant-value
(vla-GetVariable
(vla-get-activedocument (vlax-get-acad-object))
"clayer"
) ;_ 结束vla-GetVariable
) ;_ 结束vlax-variant-value
"ddd"
) ;_ 结束/=
(progn
(vla-setvariable
(vlax-get-property (vlax-get-acad-object) 'activedocument)
"clayer"
"0"
) ;_ 结束vla-setvariable
(vla-put-lock
(vla-item (vla-get-layers
(vlax-get-property (vlax-get-acad-object) 'activedocument)
)
"ddd"
)
:vlax-true
)
)
) ;_ 结束if
) ;_ 结束defun
;;删除所有新生成的 DDD层 空间实体
(defun DelAllNew (var1 var2 / lyrs item)
(setq lyrs (vla-get-layers
(vlax-get-property (vlax-get-acad-object) 'activedocument)
) ;_ 结束vla-get-layers
) ;_ 结束setq
(if HasChangedObject
(progn
(mapcar
'(lambda (item / name lyr lyrobj)
(setq objname (vla-get-objectname item))
(cond
((and (= name "AcDbLayerTableRecord")
(= (vla-get-name item) "ddd")
)
(vla-put-lock item :vlax-true)
);_检查图层,在工具条修改的没有反应,事后会后触发
(t
(IF (and (not (vlax-erased-p item))
(= (vl-catch-all-apply
'vlax-get-property
(list item 'layer)
)
"ddd"
)
)
(progn
(vla-put-lock (vla-item lyrs "ddd") :vlax-false);_只有解锁才可删除
(vl-catch-all-apply 'vla-delete (list item))
) ;_ 结束progn
) ;_ 结束if
)
)
) ;_ 结束lambda
(vl-remove nil
(mapcar 'vlax-ename->vla-object
HasChangedObject
) ;_ 结束mapcar
) ;_ 结束vl-remove
) ;_ 结束mapcar
(setq HasChangedObject nil)
) ;_ 结束progn
) ;_ 结束if
(if (tblsearch "layer" "ddd")
(vla-put-lock (vla-item lyrs "ddd") :vlax-true)
);_ 重新锁定
(setq HasChangedObject nil)
) ;_ 结束defun
;;acdb 回调函数, 保存修改或者新加的实体
;;不能直接删除,否则成为循环了,用其他条件触发
(defun SaveChangedlyr (var1 var2 /)
(if (not HasChangedObject)
(setq HasChangedObject (list (cadr var2)))
(setq HasChangedObject
(append (list (cadr var2)) HasChangedObject)
) ;_ 结束setq
) ;_ 结束if
)

[/Power]
 楼主| 发表于 2005-1-31 10:06 | 显示全部楼层
本帖最后由 作者 于 2005-1-31 10:58:25 编辑

真是谢谢EA大侠,大侠果然是反应器方面的专家。但是还有一个问题,就是可以通过图层的TOOLBAR下拉菜单解锁,不知有没有办法处理。还有能不能对特定的图层进行锁定而不是ddd层呢,不管如何谢谢EA贵宾。




本帖子中包含更多资源

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

x
发表于 2005-1-31 14:19 | 显示全部楼层
如果这个DWG文件被拷贝,而没有加载相应的处理程序,该怎么办?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-21 05:01 , Processed in 0.222517 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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