Enter使例程在最后选中的具有意外结果的项目上运行。
在我运行该程序后,我点击回车键再次运行该程序并拾取其他对象,但它不允许我拾取另一个实体,而是在第一组实体上再次运行该例程,并将它们推回原始层减去-F.(defun c:futlyr ( / i lyrname s x )
(prompt "\nSelect Object to Set to -F Construction Layer")
(setq s (ssget ":L" '((8 . "S*"))))
(repeat (setq i (sslength s))
(setq x (entget (ssname s (setq i (1- i))))
lyrname (cdr (assoc 8 x))
n (strcat (substr lyrname 1 (- (strlen lyrname) 0)) "-F") ;;(strlen old_suffix)))))
)
(if (not (tblsearch "layer" n))
(progn (setq e (entget (tblobjname "layer" lyrname)))
(entmake (subst (cons 2 n) (assoc 2 e) (subst '(62 . 1) (assoc 62 e) e)))
)
)
(entmod (subst (cons 8 n) (assoc 8 x) x))
)
(prompt "\nAll objects have been moved to -F construction layer")
(princ)
)
(c:futlyr)
**** Hidden Message ***** 它们在代码中没有任何东西可以将它们推回(错误处理?)。所有这些你都可以多次选择。以“layername-F-F-F”等图层结尾<br>添加了一个检查,以排除以“-F”结尾的图层上的项目<br>并给出了更改图层的数量。<br>(defun c:futlyr (/ s layname x n i)
(prompt "\nSelect Object to Set to -F Construction Layer")
(setq i 0)
(setq s (ssget ":L" '((8 . "S*"))))
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(if (and (setq layname (cdr (assoc 8 (setq x (entget ent))))) (/= (substr layname (- (strlen layname) 1)) "-F"))
(progn
(if (not (tblsearch "layer" (setq n (strcat layname "-F"))))
(progn
(setq e (entget (tblobjname "layer" layname)))
(entmake (subst (cons 2 n) (assoc 2 e) (subst '(62 . 1) (assoc 62 e) e)))
)
)
(entmod (subst (cons 8 n) (assoc 8 x) x))
(setq i (1+ i))
)
)
)
(prompt (strcat "\n" (itoa i) " objects moved to -F construction layer"))
(princ)
) 伙计,我的整个帖子都不靠谱。我写过一次关于多重f的问题。然后决定试着删除entmake部分作为测试,因为我不需要它把颜色改成红色。当我删除它,我得到了进入问题。
我之前忘记从帖子中删除该部分了。
(if (not (tblsearch "layer" n))
(progn (setq e (entget (tblobjname "layer" lyrname)))
(entmake (subst (cons 2 n) (assoc 2 e) (subst '(62 . 1) (assoc 62 e) e)))
)
)
感谢您添加支票。那天早些时候我也有过这种想法,但没有完成。 您也可以像这样直接过滤掉项目:
(defun c:futlyr (/ e i layname n s x)
(prompt "\nSelect Object to Set to -F Construction Layer")
(setq i 0)
;; Direct filter for layer that starts with S and does not end in -F
(if (setq s (ssget ":L" '((8 . "S*,") (8 . "~*-F"))))
(progn
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(if (setq layname (cdr (assoc 8 (setq x (entget ent)))))
(progn (if (not (tblsearch "layer" (setq n (strcat layname "-F"))))
(progn (setq e (entget (tblobjname "layer" layname)))
(entmake (subst (cons 2 n) (assoc 2 e) (subst '(62 . 1) (assoc 62 e) e)))
)
)
(entmod (subst (cons 8 n) (assoc 8 x) x))
(setq i (1+ i))
)
)
)
(prompt (strcat "\n" (itoa i) " objects moved to -F construction layer"))
)
)
(princ)
)
页:
[1]