Lee Mac 发表于 2022-7-6 08:49:04

这看起来与LISP无关,而是与之相关。净额;当然不是由我的简单代码引起的。。。

Troispistols 发表于 2022-7-6 08:52:03

仅在一张图纸中执行此操作
尝试了audit命令,但不起作用

Troispistols 发表于 2022-7-6 08:57:22

好的,谢谢你的回答。
 
有一个愉快的周末

SLW210 发表于 2022-7-6 08:58:55

请编辑帖子#1以包含代码标签。

Troispistols 发表于 2022-7-6 09:04:22

你好
 
当我加载autocad时,是否可能加载我的DWG,如果图层已冻结,则该命令不会执行任何操作?我必须首先解冻每个层,命令才能工作。。。有什么想法吗?
 
-编辑-
或在我尝试时,当我运行命令(“a1”)时,即使我解冻层,它也不会做任何事情。。。与lisp冲突的是我的图层被锁定。当我打开它时,它融化了。。。再说一遍,你知道吗?
 
谢谢

Lee Mac 发表于 2022-7-6 09:06:38

该程序似乎在我的环境中按预期运行;锁定的图层不会影响其操作,同样,如果图层已冻结,则只需解冻即可。唯一会影响冻结操作的是,如果冻结时图层是当前图层,则也可以使用简单的条件来检查图层与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)
)
页: 1 [2]
查看完整版本: LISP for:如果图层冻结