citykunan 发表于 2005-1-27 09:51:00

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

各位高手,我建立一个专门的层,这个层上我不希望别人能在上面画东西,有没有办法?

meflying 发表于 2005-1-27 10:39:00

[建议]图层名:别在这层画东西

BDYCAD 发表于 2005-1-27 10:51:00

锁定&冻结那个层就OK

lijiao 发表于 2005-1-27 13:19:00

要这一层来干什么?

citykunan 发表于 2005-1-27 14:15:00

我希望这个层,只有有权限的人才能画东西,如可以先设置密码等。

alin 发表于 2005-1-27 14:46:00

Cadlock

citykunan 发表于 2005-1-27 14:59:00

Cadlock是什么,怎么用啊?

Ea 发表于 2005-1-28 06:52:00

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

citykunan 发表于 2005-1-31 10:06:00

本帖最后由 作者 于 2005-1-31 10:58:25 编辑

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




lijiao 发表于 2005-1-31 14:19:00

如果这个DWG文件被拷贝,而没有加载相应的处理程序,该怎么办?
页: [1] 2 3
查看完整版本: 能不能使某个层上不能画东西?