明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 34847|回复: 99

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

    [复制链接]
发表于 2012-6-9 23:45:22 | 显示全部楼层 |阅读模式
本帖最后由 print1985 于 2014-8-11 22:39 编辑

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


界面做了下小更新

本帖子中包含更多资源

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

x

点评

支持lock淡显需要加几句保存和恢复相关系统变量的语句。另外这类高频使用的程序,不要弄在一起还搞个DCL界面,实际用起来太没效率了,没人这样工作的。 这些功能几乎都已经定义好了极简的命令缩写或者快捷键。  发表于 2019-6-5 23:09
在2008上,被锁定的图层无法淡显!  发表于 2012-9-1 14:57

评分

参与人数 6明经币 +6 收起 理由
zhoupeng220 + 1 赞一个!
ucuc2003 + 1 很给力!
spp_wall + 1 赞一个!
669423907 + 1 很给力!
linshiyin2 + 1
革天明 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 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)
)

本帖子中包含更多资源

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

x
发表于 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)
)
发表于 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
发表于 2012-6-10 09:30:27 | 显示全部楼层
顶一下,建议继续增加物体隐藏,物体凸显等
发表于 2012-6-10 11:25:31 | 显示全部楼层
楼主辛苦了。
 楼主| 发表于 2012-6-10 13:07:28 | 显示全部楼层
gzxl 发表于 2012-6-10 09:30
顶一下,建议继续增加物体隐藏,物体凸显等

物体隐藏,物体凸显是神马神奇的东东啊,没用过惭愧
发表于 2012-6-10 13:20:00 | 显示全部楼层
print1985 发表于 2012-6-10 13:07
物体隐藏,物体凸显是神马神奇的东东啊,没用过惭愧

龙龙仔发布过,搜索下,有的
发表于 2012-6-10 13:38:36 | 显示全部楼层
本帖最后由 psdcdr 于 2012-6-10 13:39 编辑



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

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-6-10 14:48:21 | 显示全部楼层
gzxl 发表于 2012-6-10 13:20
龙龙仔发布过,搜索下,有的

太悲剧了,没找到,麻烦你发一个了,或者说说有什么功能,我看看是否有能力实现-水平确实太菜了,只能玩玩简单的
 楼主| 发表于 2012-6-10 14:49:11 | 显示全部楼层
psdcdr 发表于 2012-6-10 13:38
感谢分享无私分享,你辛苦了!能否加入给当前图层加入前缀的功能?谢谢

是当前图层还是全部图层呢?
类似的代码论坛很多吧
发表于 2012-6-10 15:07:27 | 显示全部楼层
gzxl 发表于 2012-6-10 09:30
顶一下,建议继续增加物体隐藏,物体凸显等

就是将指定的物体,隐藏起来。可鼠标指定或按颜色分类。将某种颜色的物体,隐藏起来。需要的时候,在屏幕上重新显示出来。
发表于 2012-6-10 17:15:26 | 显示全部楼层
好。支持源码.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 21:29 , Processed in 0.204903 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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