Lee Mac 发表于 2022-7-6 15:42:44

别担心
 
很高兴这能节省一些时间
 
干杯
 

CarlB 发表于 2022-7-6 15:47:08

李-
 
通常的做法是在属性的“entmod”后面加上块名的“entupd”;这通常会更新更改,而无需重新生成。虽然我已经阅读了“entupd”,但在某些情况下仍然需要重新生成。

uddfl 发表于 2022-7-6 15:48:48

如果我正确理解了Lee的代码,那么他不使用entupd的原因是因为他没有停止获取块实体名称,而是直接指向属性。这就是他的例行公事多么简洁。李,对吗?

kam1967 发表于 2022-7-6 15:51:46

李,你会如何将entupd写入到你当时编写的例程中?我很好奇。

uddfl 发表于 2022-7-6 15:55:30

尝试在entmod函数之后添加(entupd aEnt),看看它是否有效。

Lee Mac 发表于 2022-7-6 16:00:10

我必须承认,我通常不会使用“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))

Lee Mac 发表于 2022-7-6 16:01:23

 
您还需要一个“progn”包装器,因为IF将包含多个要求值的语句

Lee Mac 发表于 2022-7-6 16:04:02

引用ACAD帮助文件:
 

kam1967 发表于 2022-7-6 16:08:25

谢谢你,李。我测试了你的例程,发现了一个额外的右括号错误。我拿走了右边的另外两个,现在效果很好。
 
(entmod(subst(cons 1 dNme)(assoc 1 aEntLst)aEntLst)))
(entupd e)
(setq aEnt(entnext aEntЮЮ)Ю)
(princ“\n未找到标题栏”))
;(命令“_regenall”)
(普林斯)
 
嗯,这是最有教育意义的。谢谢大家的意见!祝你今天愉快,好吗?也来点zZzZ!

uddfl 发表于 2022-7-6 16:11:16

呵呵。我不知道。在属性上使用entupd从来没有问题,但我会记住这一点。谢谢
页: 1 [2]
查看完整版本: 使用实际$