很高兴这能节省一些时间
干杯
李 李-
通常的做法是在属性的“entmod”后面加上块名的“entupd”;这通常会更新更改,而无需重新生成。虽然我已经阅读了“entupd”,但在某些情况下仍然需要重新生成。 如果我正确理解了Lee的代码,那么他不使用entupd的原因是因为他没有停止获取块实体名称,而是直接指向属性。这就是他的例行公事多么简洁。李,对吗? 李,你会如何将entupd写入到你当时编写的例程中?我很好奇。 尝试在entmod函数之后添加(entupd aEnt),看看它是否有效。 我必须承认,我通常不会使用“entupd”来更新ATT,因为它有时似乎会导致错误,但请尝试以下方法:
(defun c:dwgupd (/ ss eLst dNme aEnt aEntLst)
(vl-load-com)
(if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 "TITLE") (cons 66 1)
(if (getvar "CTAB")
(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
dNme (vl-filename-base (getvar "DWGNAME")))
(foreach e eLst
(setq aEnt (entnext e))
(while (not (eq "SEQEND" (cdadr (setq aEntLst (entget aEnt)))))
(if (= "DRAWINGNAME" (cdr (assoc 2 aEntLst)))
(progn
(entmod (subst (cons 1 dNme)(assoc 1 aEntLst) aEntLst))
(entupd e)))
(setq aEnt (entnext aEnt)))))
(princ "\n<!> No Title Blocks Found <!> "))
(princ))
您还需要一个“progn”包装器,因为IF将包含多个要求值的语句 引用ACAD帮助文件:
谢谢你,李。我测试了你的例程,发现了一个额外的右括号错误。我拿走了右边的另外两个,现在效果很好。
(entmod(subst(cons 1 dNme)(assoc 1 aEntLst)aEntLst)))
(entupd e)
(setq aEnt(entnext aEntЮЮ)Ю)
(princ“\n未找到标题栏”))
;(命令“_regenall”)
(普林斯)
嗯,这是最有教育意义的。谢谢大家的意见!祝你今天愉快,好吗?也来点zZzZ! 呵呵。我不知道。在属性上使用entupd从来没有问题,但我会记住这一点。谢谢
页:
1
[2]