[求助]能否一次实现只显示当前层,其它层关闭锁定.
在ET扩展工具中的图层工具没有一次实现只显示当前层,而关闭其它层,只让它暗淡显示,用起来并不方便.请教高手能否解决? 本帖最后由 作者 于 2004-9-27 20:46:41 编辑(defun C:Test(/ doc Layers)
(setq doc (vla-get-activeDocument (vlax-get-acad-object)))
(setq Layers (vla-get-layers doc))
(vlax-for Layer Layers
(if (= (vla-get-name layer) (getvar "CLAYER"))
(progn
(vla-put-layerOn Layer :vlax-true)
(vla-put-Lock Layer :vlax-false)
)
(progn
(vla-put-layerOn Layer :vlax-false)
(vla-put-Lock Layer :vlax-true)
)
)
)
(vlax-release-object doc)
(vlax-release-object Layers)
(princ)
) ;;;*图层隔离<BR>(defun c:TCGL (/ s1 la)<BR> (SETQ LA (getvar "clayer"))<BR> (command "layer" "s" la "f" "*" "")<BR> ) 谢谢二位版主热心帮助,马上给解决了,但由于我没把问题说清楚,就是如何又一次性恢复图层呢?不然的话,还是不方便,恳请版主再帮我编一下,再次表示谢谢祝节日愉快! ;;;*图层恢复<BR>(defun c:TCHF(/ s1 la)<BR> (setq LA (getvar "clayer"))<BR> (command "layer" "s" la "T" "*" "")<BR> (princ)<BR> ) ;By ALIN 适用于acad2004;;;隔离当前图层
(defun C:ICL(/ app doc Layers)
(setqapp (vlax-get-acad-object)
doc (vla-get-activeDocument app)
Layers (vla-get-layers doc)
)
(if (member "NewLayState" (GetLayStateList app doc))
(DelLayState "NewLayState" app doc)
)
(LayerStateSave "NewLayState" app doc)
(vlax-for Layer Layers
(if(= (vla-get-name layer) (getvar "CLAYER"))
(progn
(vla-put-layerOn Layer :vlax-true)
(vla-put-Lock Layer :vlax-false)
)
(progn
(vla-put-layerOn Layer :vlax-false)
(vla-put-Lock Layer :vlax-true)
)
)
)
(mapcar 'vlax-release-object (list app doc Layers))
(princ)
)
;;恢复所有图层先前状态
(defun C:RES (/ app doc)
(setqapp (vlax-get-acad-object)
doc (vla-get-activeDocument app)
)
(if (member "NewLayState" (GetLayStateList app doc))
(LayerStateRestore "NewLayState" app doc)
(alert "Cannot find \"NewLayState\"!")
)
(mapcar 'vlax-release-object (list app doc))
(princ)
)
;;------------------------------------------------------------
(defun DelLayState (LSMName app doc / LayStateList oLSMDict)
(setqoLSMDict
(vla-item (vla-getExtensionDictionary (vla-get-layers doc))
"ACAD_LAYERSTATES"
)
)
(vla-delete (vla-item oLSMDict LSMName))
(vlax-release-object oLSMDict)
)
;;------------------------------------------------------------
(defun GetLayStateList (app doc / LayStateList oLSMDict)
(setqoLSMDict
(vla-item (vla-getExtensionDictionary (vla-get-layers doc))
"ACAD_LAYERSTATES"
)
)
(vlax-for each oLSMDict
(setq LayStateList (cons (vla-get-name each) LayStateList))
)
(vlax-release-object oLSMDict)
(reverse LayStateList)
)
;;------------------------------------------------------------
(defun LayerStateSave (LSMName app doc / oLSM)
(setqoLSM
(vla-getinterfaceobject app "AutoCAD.AcadLayerStateManager.16")
)
(vla-setdatabase oLSM (vla-get-database doc))
(vla-save oLSM LSMName acLsAll)
(vlax-release-object oLSM)
)
;;------------------------------------------------------------
(defun LayerStateRestore (LSMName app doc / oLSM)
(setqoLSM
(vla-getinterfaceobject app "AutoCAD.AcadLayerStateManager.16")
)
(vla-setdatabase oLSM (vla-get-database doc))
(vla-restore oLSM LSMName)
(vlax-release-object oLSM)
) 谢谢二位热心版主,二个都好用.
页:
[1]