“反向隐藏”达不到‘反向’的效果
;;;阿甘兄弟的代码,前面两个命令“隐藏物体”和“恢复隐藏”挺好用的,;;;但是“反向隐藏”没有达到反向的效果,执行后全部都隐藏了,恳请帮忙诊断能达到反向的效果。。
;[隐藏物体]
(defun c:yc (/ AcadObject AcadDocument LayersObj ss n i ent ob 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 n (sslength ss))
(setq i (- n 1))
(repeat n
(setq ent (ssname ss i)
ob (vlax-ename->vla-object ent)
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
(setq i (1- i))
);end repeat
(princ "\n已隐藏选择物体" )
));end if
(princ)
);end defun
;[恢复隐藏]
(defun c:xs (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay lay-tn)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
LayersObj (vla-get-layers AcadDocument)
);end setq
(if (setq ss (ssget "x" '((60 . 1))))
(progn
(setq n (sslength ss))
(setq i (- n 1))
(repeat n
(setq ent (ssname ss i)
ob (vlax-ename->vla-object ent)
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-true)
(if (= lay-tn :vlax-true)
(vla-put-lock vlay :vlax-true)
);end if
(setq i (1- i))
);end repeat
(princ "\n已显示隐藏物体" )
);end progn
(princ "\n本图无隐藏物体" )
);end if
;(vla-regen AcadDocument AcAllViewPorts) 图形较大有时需要重生成才显示 可把这句加上
(princ)
);end defun
;[隐藏物体(反)]
(defun c:yf (/ 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)
);end defun
(princ "\n[隐藏物体-yc]/[恢复隐藏-xs]/[隐藏物体(反)-yf]" ) 谢谢大神,牛牛牛牛!!! ;[隐藏物体(反)]
(defun c:yf (/ 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"))
(repeat (setq i (sslength ss))
(ssdel (ssname ss (setq i (1- i))) ss2)
);end repeat
(sssetfirst nil ss2)
(repeat (setq i (sslength ss2))
(setq ent (ssname ss2 (setq i (1- i)))
ob (vlax-ename->vla-object ent)
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 repeat
(princ "\n已隐藏非选择物体" )
));end if
(sssetfirst nil nil)
(princ)
);end defun
嘿嘿,顶一个哈 非常好用,谢谢 ymcui 发表于 2015-10-13 10:06 static/image/common/back.gif
非常好用,谢谢
大哥能否把你的lsp发一个啊,我的合并代码后,反隐藏没有反应啊,谢谢了 本帖最后由 ivde 于 2015-10-13 10:26 编辑
(defun c:yf (/ ss s sl e)
(if (and (progn
(setq ss (ssget))
(vl-cmdf ".select" "all" "r" ss "")
(setq s (ssget "P")
)
)
)
(progn
(setvar "cmdecho" 0)
(layerstate-save "tmpHide")
(vl-cmdf ".layer" "U" "*" "")
(setq sl (sslength s))
(while (setq e (ssname s (setq sl (1- sl))))
(entmod (append (entget e) '((60 . 1))))
)
(layerstate-restore "tmpHide")
(layerstate-delete "tmpHide")
)
)
(princ)
)
ZZXXQQ 发表于 2015-10-13 08:47 static/image/common/back.gif
隐藏了反向,那怎么再把隐藏后的显示出来呢? lingduwx 发表于 2015-10-13 10:10 static/image/common/back.gif
大哥能否把你的lsp发一个啊,我的合并代码后,反隐藏没有反应啊,谢谢了
我就用的,ZZXXQQ 的程序. qmqyqj 发表于 2015-10-13 10:57 static/image/common/back.gif
隐藏了反向,那怎么再把隐藏后的显示出来呢?
;[恢复隐藏]
(defun c:xs (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay lay-tn)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
LayersObj (vla-get-layers AcadDocument)
);end setq
(if (setq ss (ssget "x" '((60 . 1))))
(progn
(setq n (sslength ss))
(setq i (- n 1))
(repeat n
(setq ent (ssname ss i)
ob (vlax-ename->vla-object ent)
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-true)
(if (= lay-tn :vlax-true)
(vla-put-lock vlay :vlax-true)
);end if
(setq i (1- i))
);end repeat
(princ "\n已显示隐藏物体" )
);end progn
(princ "\n本图无隐藏物体" )
);end if
;(vla-regen AcadDocument AcAllViewPorts) 图形较大有时需要重生成才显示 可把这句加上
(princ)
);end defun
哎,不知道咋回事就是不行,我自己也无语了
页:
[1]
2