pfd8667 发表于 2004-9-27 19:53:00

[求助]能否一次实现只显示当前层,其它层关闭锁定.

在ET扩展工具中的图层工具没有一次实现只显示当前层,而关闭其它层,只让它暗淡显示,用起来并不方便.请教高手能否解决?

alin 发表于 2004-9-27 20:24:00

本帖最后由 作者 于 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)
)

xyp1964 发表于 2004-9-27 21:31:00

;;;*图层隔离<BR>(defun c:TCGL (/ s1 la)<BR>       (SETQ LA (getvar "clayer"))<BR>       (command "layer" "s" la "f" "*" "")<BR>       )

pfd8667 发表于 2004-9-28 17:58:00

谢谢二位版主热心帮助,马上给解决了,但由于我没把问题说清楚,就是如何又一次性恢复图层呢?不然的话,还是不方便,恳请版主再帮我编一下,再次表示谢谢祝节日愉快!

xyp1964 发表于 2004-9-28 21:51:00

;;;*图层恢复<BR>(defun c:TCHF(/ s1 la)<BR>       (setq LA (getvar "clayer"))<BR>       (command "layer" "s" la "T" "*" "")<BR>       (princ)<BR>       )

alin 发表于 2004-9-28 23:03:00

;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)
   )

pfd8667 发表于 2004-9-29 06:57:00

谢谢二位热心版主,二个都好用.
页: [1]
查看完整版本: [求助]能否一次实现只显示当前层,其它层关闭锁定.