块中的许多Attdribute标记
在我开始之前,这是一个很棒的网站,非常有用现在回答我的问题。
我有这个项目,我们正在使用客户区块。在需要编辑的块中,有许多属性有自己的“标签”。
例如:
块名称
ABC_123
标记值
AAAA级####
标记值
BBBB####
等等
我想给他们每个不同的值。在这种情况下,一个简单的查找和替换就可以了,但使用的每个块中都有相同的标记,我不想全部更新。
我想知道是否有一种方法可以根据标记名而不是值进行搜索和替换。就像搜索标记AAAA并将其值替换为4321一样,标记BBBB并将其值替换为8765。这些值将用于整个图形集。
有人能帮我解决这个问题吗?
你好
这是一个快捷方式
(defun c:setAtt (/ ent elst val ss tag)
(if
(and
(setq ent (car (nentsel "\nSelect the attribute: ")))
(setq elst (entget ent))
(= (cdr (assoc 0 elst)) "ATTRIB")
(setq val (getstring "\nNew value: "))
(princ "\nSelect blocks to be edited (Enter for all)")
(or
(setq
ss
(ssget (list '(0 . "INSERT") (assoc 2 (entget (cdr (assoc 330 elst))))))
)
(setq
ss
(ssget "_X"
(list '(0 . "INSERT") (assoc 2 (entget (cdr (assoc 330 elst)))))
)
)
)
(setq tag (cdr (assoc 2 elst)))
(setq n 0)
)
(progn
(while (setq ent (ssname ss n))
(SetAttValue ent tag val)
(setq n (1+ n))
)
)
(princ "\nInvalid input")
)
(princ)
)
;;; SetAttValue (gile)
;;; Sets a value to an attribute
;;;
;;; Arguments
;;; blk : block ename
;;; tag : attribute tag
;;; val : new value
(defun SetAttValue (blk tag val / lst loop)
(setq lst(entget (entnext blk))
loop (= "ATTRIB" (cdr (assoc 0 lst)))
)
(while loop
(if (= (strcase tag) (cdr (assoc 2 lst)))
(progn
(entmod (subst (cons 1 val) (assoc 1 lst) lst))
(setq loop nil)
(entupd blk)
)
(setq lst (entget (entnext (cdr (assoc -1 lst))))
loop (= "ATTRIB" (cdr (assoc 0 lst)))
)
)
)
) 给我,但我是lisp格式的新手。但当我运行它时,它给了我一个错误。
抱歉,出现错误,我编辑了代码。
试试新的。 几乎
哎呀,我明白了。我认为我的代码副本缺少最后一部分。
但它现在起作用了,非常感谢!
页:
[1]