满足楼主的要求,程序有二,如下:
- (defun c:ea () ;仅显示所选多个图层(也可一个)
- (prompt "\n请选择要保留的图层,要显示所有图层请直接按右键:")
- (setq ss (ssget))
- (if (/= ss nil)
- (progn
- (setq num (sslength ss))
- (setq n 0)
- (command "layer" "off" "*" "y" on "" "")
- (repeat num
- (setq entlist (entget (ssname ss n)))
- (setq lname (cdr (assoc 8 entlist)))
- (command "layer" "on" lname "")
- (setq n (+ n 1))
- )
- (prompt (itoa num))
- )
- (command "layer" "on" "*" "")
- )
- )
- (defun c:sd ();锁定所选多个图层(也可一个)以外的图层
- (vl-load-com)
- (setq acadObject (vlax-get-acad-object))
- (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
- (setq LayersObj (vla-get-layers acadDocument))
- (defun js (key) ;key为true则锁定所有图层,否则解锁所有图层
- (vl-load-com)
- (setq acadObject (vlax-get-acad-object))
- (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
- (setq LayersObj (vla-get-layers acadDocument))
- (setq n (vla-get-count layersobj)) ;图层的数量
- (if (= key 1)
- (progn
- (setq i 0)
- (repeat n
- (setq layvla (vla-item LayersObj i))
- (vla-put-lock layvla :vlax-true)
- (setq i (+ i 1))
- )
- )
- (progn
- (setq i 0)
- (repeat n
- (setq layvla (vla-item LayersObj i))
- (vla-put-lock layvla :vlax-false)
- (setq i (+ i 1))
- )
- )
- )
- )
- (prompt "\n请选取不要锁定的实体,要全部解锁请直接按右键: ")
- (setq layselect (ssget))
- (if (/= layselect nil) ;如果选中了对象
- (progn
- (setq num (sslength layselect)) ;选择集的数量
- (js 1) ;锁定所有图层
- (setq i 0)
- (repeat num
- (setq layent (ssname layselect i))
- (setq layentvla (vlax-ename->vla-object layent))
- (setq laystr (vla-get-layer layentvla))
- (setq layvla (vla-item LayersObj laystr))
- (setq laylock (vla-get-lock layvla))
- (if (= laylock :vlax-true)
- (progn
- (vla-put-lock layvla :vlax-false)
- (princ (strcat "\n" laystr " 层已解锁"))
- )
- )
- (setq i (+ i 1))
- )
- )
- (js 2) ;解锁所有图层
- )
- (princ)
- )
|