图层控制-源码,VL函数,非command,非修改组码
本帖最后由 print1985 于 2014-8-11 22:39 编辑今天学习了下VL的图层类函数,做了个小玩意,恳请各位高手指导,与各位新手共同学习进步
界面参考了贱人工具箱,用到了xiaoquansb兄台的代码格式化工具,谢谢各位作者
界面做了下小更新
反向隐藏,把全部都隐藏了,不知道要改哪里呢?
;[隐藏物体(反)]
(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)
)
反向隐藏可以了,再次感谢各位
;[隐藏物体(反)] 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)
)
无意间闪过灵感,解锁图层后淡显恢复可以通过变通的方式实现。
在解锁图层的代码段加入下面两行代码即可。
;[图层全部解锁]
(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 static/image/common/back.gif
顶一下,建议继续增加物体隐藏,物体凸显等
物体隐藏,物体凸显是神马神奇的东东啊,没用过惭愧 print1985 发表于 2012-6-10 13:07 static/image/common/back.gif
物体隐藏,物体凸显是神马神奇的东东啊,没用过惭愧
龙龙仔发布过,搜索下,有的 本帖最后由 psdcdr 于 2012-6-10 13:39 编辑
感谢分享无私分享,你辛苦了!能否加入给当前图层加入前缀的功能?谢谢 gzxl 发表于 2012-6-10 13:20 static/image/common/back.gif
龙龙仔发布过,搜索下,有的
太悲剧了,没找到,麻烦你发一个了,或者说说有什么功能,我看看是否有能力实现-水平确实太菜了,只能玩玩简单的 psdcdr 发表于 2012-6-10 13:38 static/image/common/back.gif
感谢分享无私分享,你辛苦了!能否加入给当前图层加入前缀的功能?谢谢
是当前图层还是全部图层呢?
类似的代码论坛很多吧 gzxl 发表于 2012-6-10 09:30 static/image/common/back.gif
顶一下,建议继续增加物体隐藏,物体凸显等
就是将指定的物体,隐藏起来。可鼠标指定或按颜色分类。将某种颜色的物体,隐藏起来。需要的时候,在屏幕上重新显示出来。 好。支持源码.