该程序似乎在我的环境中按预期运行;锁定的图层不会影响其操作,同样,如果图层已冻结,则只需解冻即可。唯一会影响冻结操作的是,如果冻结时图层是当前图层,则也可以使用简单的条件来检查图层与CLAYER系统变量的设置:
- (defun c:a1 nil (FreezeThawLayer "Arch - Niveau 1"))
- (defun c:a2 nil (FreezeThawLayer "Arch - Niveau 2"))
- (defun c:a3 nil (FreezeThawLayer "Arch - Niveau 3"))
- (defun FreezeThawLayer ( layer / dx en in ss )
- (if (null (setq en (tblobjname "LAYER" layer)))
- (entmake
- (list
- '(0 . "LAYER")
- '(100 . "AcDbSymbolTableRecord")
- '(100 . "AcDbLayerTableRecord")
- (cons 2 layer)
- '(70 . 0)
- )
- )
- (if
- (and
- (not (eq (strcase (getvar 'CLAYER)) (strcase layer)))
- (setq en (entget en)
- dx (assoc 70 en)
- en (entmod (subst (cons 70 (boole 6 1 (cdr dx))) dx en))
- )
- (setq ss (ssget "_X" (list (cons 8 layer))))
- )
- (repeat (setq in (sslength ss))
- (entupd (ssname ss (setq in (1- in))))
- )
- )
- )
- (princ)
- )
|