print1985 发表于 2012-6-9 23:45:22

图层控制-源码,VL函数,非command,非修改组码

本帖最后由 print1985 于 2014-8-11 22:39 编辑

今天学习了下VL的图层类函数,做了个小玩意,恳请各位高手指导,与各位新手共同学习进步
界面参考了贱人工具箱,用到了xiaoquansb兄台的代码格式化工具,谢谢各位作者


界面做了下小更新

669423907 发表于 2018-11-17 15:00:10

反向隐藏,把全部都隐藏了,不知道要改哪里呢?
;[隐藏物体(反)]
(defun GL:yfwt (/ AcadObject AcadDocument LayersObj ssObj ss ob n i ent ob ss2 ss3 lay vlay lay-tn)
(setq AcadObject (vlax-get-acad-object)
            AcadDocument (vla-get-ActiveDocument AcadObject)
            LayersObj (vla-get-layers AcadDocument)
);end setq
(princ "\n请选择不需要隐藏的物体" )
(if (setq ss (ssget))
               (progn
                      (setq ss2 (ssget "x" ))
                      (setq n (sslength ss))
                      (setq i (- n 1))
                      (repeat n
                           (setq ent (ssname ss i))
                           (if (setq ss3 (ssdel ent ss2))
                                    (setq ss2 ss3)
                            );end if
                           (setq i (1- i))
                     );end repeat
                      (sssetfirst nil ss2)
                      (setq ssObj (vla-get-ActiveSelectionSet AcadDocument))
                      (vlax-for ob ssObj
                           (setq lay (vla-get-layer ob)
                                    vlay (vla-item LayersObj lay)
                            );end setq
                           (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true)
                                    (vla-put-lock vlay :vlax-false)
                            );end if
                           (vla-put-visible ob :vlax-false)
                           (if (= lay-tn :vlax-true)
                                    (vla-put-lock vlay :vlax-true)
                            );end if
                     );end vlax-for
                      (princ "\n已隐藏非选择物体" )
));end if
(sssetfirst nil nil)
(princ)
)

669423907 发表于 2018-11-17 16:30:44

反向隐藏可以了,再次感谢各位
;[隐藏物体(反)] edata 20181117改
(defun GL:yfwt (/ acaddocument acadobject ent1 ent2 lay lay-tn layersobj ob ss ss2 vlay)
(setq        AcadObject   (vlax-get-acad-object)
        AcadDocument (vla-get-ActiveDocument AcadObject)
        LayersObj    (vla-get-layers AcadDocument)
)                                        ;end setq
(princ "\n请选择不需要隐藏的物体")
(if (setq ss (ssget))
    (progn
      (setq ss2 (ssget "x"))
      (while (setq ent1 (ssname ss 0))
        (ssdel ent1 ss2)
        (ssdel ent1 ss)
      )                                        ;end while 1
      (while (setq ent2 (ssname ss2 0))
        (setq ob (vlax-ename->vla-object ent2))
        (setq lay(vla-get-layer ob)
              vlay (vla-item LayersObj lay)
        )                                ;end setq
        (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true)
          (vla-put-lock vlay :vlax-false)
        )                                ;end if
        (vla-put-visible ob :vlax-false)
        (if (= lay-tn :vlax-true)
          (vla-put-lock vlay :vlax-true)
        )                                ;end if
        (ssdel ent2 ss2)
      )                                        ;end while 2
      (princ "\n已隐藏非选择物体")
    )
)                                        ;end if
(princ)
)

sammy 发表于 2023-6-5 11:57:35

无意间闪过灵感,解锁图层后淡显恢复可以通过变通的方式实现。
在解锁图层的代码段加入下面两行代码即可。

;[图层全部解锁]
(defun GL:tcqbjs (/ AcadObject AcadDocument LayersObj vlay tuise)
       (setq AcadObject (vlax-get-acad-object)
            AcadDocument (vla-get-ActiveDocument AcadObject)
            LayersObj (vla-get-layers AcadDocument)
       );end setq
       (vlax-for vlay LayersObj
            (vla-put-lock vlay :vlax-false)
       );end vlax-for
                                 (setq tuise (getvar "LAYLOCKFADECTL"))
      (setvar "LAYLOCKFADECTL" (* tuise -1))
                                 (vla-regen AcadDocument AcAllViewPorts)
                                 (setvar "LAYLOCKFADECTL" tuise)
       (command "-layer" "");------新加
       (command "regen");------新加
       (princ "\n已解锁全部图层" )
       (princ)
);end defun

gzxl 发表于 2012-6-10 09:30:27

顶一下,建议继续增加物体隐藏,物体凸显等

smartstar 发表于 2012-6-10 11:25:31

楼主辛苦了。

print1985 发表于 2012-6-10 13:07:28

gzxl 发表于 2012-6-10 09:30 static/image/common/back.gif
顶一下,建议继续增加物体隐藏,物体凸显等

物体隐藏,物体凸显是神马神奇的东东啊,没用过惭愧

gzxl 发表于 2012-6-10 13:20:00

print1985 发表于 2012-6-10 13:07 static/image/common/back.gif
物体隐藏,物体凸显是神马神奇的东东啊,没用过惭愧

龙龙仔发布过,搜索下,有的

psdcdr 发表于 2012-6-10 13:38:36

本帖最后由 psdcdr 于 2012-6-10 13:39 编辑



感谢分享无私分享,你辛苦了!能否加入给当前图层加入前缀的功能?谢谢

print1985 发表于 2012-6-10 14:48:21

gzxl 发表于 2012-6-10 13:20 static/image/common/back.gif
龙龙仔发布过,搜索下,有的

太悲剧了,没找到,麻烦你发一个了,或者说说有什么功能,我看看是否有能力实现-水平确实太菜了,只能玩玩简单的

print1985 发表于 2012-6-10 14:49:11

psdcdr 发表于 2012-6-10 13:38 static/image/common/back.gif
感谢分享无私分享,你辛苦了!能否加入给当前图层加入前缀的功能?谢谢

是当前图层还是全部图层呢?
类似的代码论坛很多吧

vlisp2012 发表于 2012-6-10 15:07:27

gzxl 发表于 2012-6-10 09:30 static/image/common/back.gif
顶一下,建议继续增加物体隐藏,物体凸显等

就是将指定的物体,隐藏起来。可鼠标指定或按颜色分类。将某种颜色的物体,隐藏起来。需要的时候,在屏幕上重新显示出来。

zhongys 发表于 2012-6-10 17:15:26

好。支持源码.
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 图层控制-源码,VL函数,非command,非修改组码