Lee Mac 发表于 2022-7-6 15:40:52

我想您可以将txtchanger变成一个子函数,并用text-style参数调用它,这样就可以进行多个样式更改:
 

(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))

 
希望这有帮助。。。

uddfl 发表于 2022-7-6 15:42:10

打败我吧。 
哦,这就是你一次过滤所有文本和多行文字的方式,这样你只需要做一次。
 
像往常一样编码很好,李。有一天你需要教我如何正确使用mapcar。

Lee Mac 发表于 2022-7-6 15:46:03

谢谢Udffl。。。mapcar并不难掌握-只要您记住它将函数应用于提供的列表中的每个元素,并将返回这样做的结果作为返回列表。。。
 
我过去常常纠结于mapcar和apply之间的差异。。。但是,通过认识到“应用”对整个列表执行函数并返回一个结果而不是结果列表,可以克服这一问题。。。
 
谢谢你一如既往的夸奖,我总是尽量让事情保持简洁。。
 
很好的信号。顺便说一句。让我笑了
 
干杯
 

Rsblades 发表于 2022-7-6 15:49:16

 
我做了这个程序,它很好地达到了正确的风格,但它不会改变高度和/或宽度。有人知道如何正确地将这些内容包括在这个例程中吗?

Lee Mac 发表于 2022-7-6 15:53:10

例如,将所有文字和多行文字更改为高度为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))

alanjt 发表于 2022-7-6 15:55:01

 
在编写和测试代码时,他本可以将变量定义为全局变量,但在例程中没有正确设置。当他重新启动autocad时,全局变量将不再设置,因此,当例程到达该点时,它无法继续。

CAB 发表于 2022-7-6 15:59:04

 
如果运行该例程一次,则所有多行文字对象都将分解,图形中不再有多行文字对象。
所以当你再次运行它时
(setq entities (ssget "X" '((0 . "MTEXT")))
       len   (sslength entities); <---<<fails here
       count 0
);setq

CAB 发表于 2022-7-6 16:00:06

驾驶室,
 
有没有更好的方法来表达下面这句话,以便在一个步骤中添加更多内容?
 
我试过使用mapcar,但没有用——但不知道为什么
 
谢谢
 

Lee Mac 发表于 2022-7-6 16:03:21

页: 1 [2]
查看完整版本: 更改所有文本