更改属性层和颜色
正在更新近 400 个区块。我必须更改图层并覆盖一个属性的颜色。我对第一个块的测试失败了。已经有一段时间了,我不记得我错过了什么。我尝试更改第一个:
(progn
(setq e (car (entsel ))
d (entget e)
n_e (entnext e)
n_d (entget n_e)))
un_d (subst (cons 8 "SYM") (assoc 8 n_d) n_d)
un_d (append un_d (list un_d (cons 62 141)))
)
(entmod un_d)
(entupd (cdr (assoc 330 un_d)))
)我也试过:
(command "_.attsync" "_select" n_e "" )"_Yes")
注意:当我逐步检查块实体时,我将测试以确保我有正确的块:
(and
(= (cdr (assoc 0 n_d)) "ATTRIB")
(= (cdr (assoc 2 n_d)) "SIZE")
(/= (cdr (assoc 8 n_d)) "SYM"
)
如果您只想使用名称更改 1 个块,无论块在哪里,都可以使用块编辑,BEDIT 这将全部更新。
我会使用 VL 代码,使用 get & put 来更改内容会更容易一些。
您应该使用此块发布 dwg。
通过下面的代码,我越来越接近我需要的东西。如果我双击该块,则属性层已更新。但是当我检查块定义时,它保持不变。
注释掉的 attsyncs 并没有解决问题。
(progn
(defun get_ents ( ss / ents ss1 l cnt)
(setq ents (list )
ss1 ss
l (sslength ss1)
cnt0
)
(while (< cnt l)
(setq ent (ssname ss1 cnt)
ents (append ents (list ent))
cnt (1+ cnt)
)
)
ents
)
(setq ss01 (ssget "x" (list (cons 0 "INSERT")))
ents (get_ents ss01)
)
(foreach line ents
(setq head_e line
head_d (entget head_e)
name (cdr (assoc 2 head_d))
)
(if (cdr (assoc 66 head_d))
(progn
(setq e (entnext head_e)
d (entget e)
)
(if (and
(= (cdr (assoc 0 d)) "ATTRIB")
(= (cdr (assoc 2 d)) "SIZE")
(/= (cdr (assoc 8 d)) "SYM")
)
(progn
(setq d (subst (cons 8 "SYM")(assoc 8 d) d))
(entmod d)
(entupd (cdr (assoc 330 d)))
(entupd (cdr (last (tblsearch "block" name))))
;(command "_attsync" "S" (cdr (last (tblsearch "block" name))) "Y")
;(command "_attsync" "S" head_e "Y")
)
)
)
)
)
)
我和VL没有很多前任。我有大约 400 个不同的块,每个块都需要进行相同的更新,所以我不确定 bedit 是否可以在这里工作。
但我会调查一下。谢谢你。
尝试以下操作,代码的后半部分可以通过调用 ATTSYNC 替换,但请记住,这样的调用会导致所有属性的属性恢复为块定义中定义的属性,这可能是不可取的。
[*]
(defun c:fixatts ( / d e i s x )
(while (setq d (tblnext "block" (null d)))
(if (= 2 (logand 2 (cdr (assoc 70 d))))
(progn
(setq e (tblobjname "block" (cdr (assoc 2 d))))
(while (setq e (entnext e))
(if (and (setq x (entget e))
(= "ATTDEF" (cdr (assoc 0 x)))
(= "SIZE" (cdr (assoc 2 x)))
)
(entmod (cons (cons -1 e) '((8 . "SYM") (62 . 141))))
)
)
)
)
)
(if (setq s (ssget "_X" '((0 . "INSERT") (66 . 1))))
(repeat (setq i (sslength s))
(setq e (entnext (ssname s (setq i (1- i))))
x (entget e)
)
(while (= "ATTRIB" (cdr (assoc 0 x)))
(if (= "SIZE"(cdr (assoc 2 x)))
(entmod (cons (cons -1 e) '((8 . "SYM") (62 . 141))))
)
(setq e (entnext e)
x (entgete)
)
)
)
)
(princ)
)
这正是我需要的一切!
谢谢楼上的,你真棒!
很高兴听到 - 谢谢你的赞美!
非常感谢那个代码,你让我免于痛苦。
页:
[1]