(defun txtchng (sNme / ss)
(vl-load-com)
(if (and (tblsearch "STYLE" sNme)
(setq ss (ssget "X" (list (cons 0 "TEXT,MTEXT")
(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE"))))))))
(progn
(setq ss (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach e ss
(entmod (subst (cons 7 sNme) (assoc 7 e) e))))
(princ "\n<!> No Text Found or Verdana Style Doesn't Exist <!>")))
(defun c:test ()
(txtchng "VERDANA")
(princ))
希望这有帮助。。。 打败我吧。
哦,这就是你一次过滤所有文本和多行文字的方式,这样你只需要做一次。
像往常一样编码很好,李。有一天你需要教我如何正确使用mapcar。 谢谢Udffl。。。mapcar并不难掌握-只要您记住它将函数应用于提供的列表中的每个元素,并将返回这样做的结果作为返回列表。。。
我过去常常纠结于mapcar和apply之间的差异。。。但是,通过认识到“应用”对整个列表执行函数并返回一个结果而不是结果列表,可以克服这一问题。。。
谢谢你一如既往的夸奖,我总是尽量让事情保持简洁。。
很好的信号。顺便说一句。让我笑了
干杯
李
我做了这个程序,它很好地达到了正确的风格,但它不会改变高度和/或宽度。有人知道如何正确地将这些内容包括在这个例程中吗? 例如,将所有文字和多行文字更改为高度为4.5的Verdana:
(defun txtchng (sNme Ht / ss)
(vl-load-com)
(if (and (tblsearch "STYLE" sNme)
(setq ss (ssget "X" (list (cons 0 "TEXT,MTEXT")
(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE"))))))))
(progn
(setq ss (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach e ss
(entmod (subst (cons 7 sNme) (assoc 7 e) (subst (cons 40 Ht) (assoc 40 e) e)))))
(princ "\n<!> No Text Found or Verdana Style Doesn't Exist <!>"))
(princ))
(defun c:test ()
(txtchng "VERDANA" 4.5)
(princ))
在编写和测试代码时,他本可以将变量定义为全局变量,但在例程中没有正确设置。当他重新启动autocad时,全局变量将不再设置,因此,当例程到达该点时,它无法继续。
如果运行该例程一次,则所有多行文字对象都将分解,图形中不再有多行文字对象。
所以当你再次运行它时
(setq entities (ssget "X" '((0 . "MTEXT")))
len (sslength entities); <---<<fails here
count 0
);setq 驾驶室,
有没有更好的方法来表达下面这句话,以便在一个步骤中添加更多内容?
我试过使用mapcar,但没有用——但不知道为什么
谢谢
李
页:
1
[2]