WPerciful 发表于 2022-10-14 21:25:16

更改属性层和颜色

正在更新近 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"
)



BIGAL 发表于 2022-10-14 21:39:05

如果您只想使用名称更改 1 个块,无论块在哪里,都可以使用块编辑,BEDIT 这将全部更新。
我会使用 VL 代码,使用 get & put 来更改内容会更容易一些。
您应该使用此块发布 dwg。

WPerciful 发表于 2022-10-14 21:42:37

通过下面的代码,我越来越接近我需要的东西。如果我双击该块,则属性层已更新。但是当我检查块定义时,它保持不变。
注释掉的 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")
    )
   )
)
)
)
)

WPerciful 发表于 2022-10-14 21:54:24

我和VL没有很多前任。我有大约 400 个不同的块,每个块都需要进行相同的更新,所以我不确定 bedit 是否可以在这里工作。
但我会调查一下。谢谢你。

Lee Mac 发表于 2022-10-14 22:00:16

尝试以下操作,代码的后半部分可以通过调用 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)
)


WPerciful 发表于 2022-10-14 22:15:52

这正是我需要的一切!
谢谢楼上的,你真棒!

Lee Mac 发表于 2022-10-14 22:16:56

很高兴听到 - 谢谢你的赞美!

imoze 发表于 2022-10-14 22:26:45

非常感谢那个代码,你让我免于痛苦。

页: [1]
查看完整版本: 更改属性层和颜色