乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: migs

[编程交流] 更改所有文本

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:40:52 | 显示全部楼层
我想您可以将txtchanger变成一个子函数,并用text-style参数调用它,这样就可以进行多个样式更改:
 
  1. (defun txtchng (sNme / ss)
  2. (vl-load-com)
  3. (if (and (tblsearch "STYLE" sNme)
  4.       (setq ss (ssget "X" (list (cons 0 "TEXT,MTEXT")
  5.             (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
  6.                (cons 67 (- 1 (getvar "TILEMODE"))))))))
  7.    (progn
  8.      (setq ss (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  9.      (foreach e ss
  10.    (entmod (subst (cons 7 sNme) (assoc 7 e) e))))
  11.    (princ "\n<!> No Text Found or Verdana Style Doesn't Exist <!>")))
  12. (defun c:test ()
  13. (txtchng "VERDANA")
  14. (princ))

 
希望这有帮助。。。
回复

使用道具 举报

0

主题

119

帖子

119

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 15:42:10 | 显示全部楼层
打败我吧。 
哦,这就是你一次过滤所有文本和多行文字的方式,这样你只需要做一次。
 
像往常一样编码很好,李。有一天你需要教我如何正确使用mapcar。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

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

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 15:49:16 | 显示全部楼层
 
我做了这个程序,它很好地达到了正确的风格,但它不会改变高度和/或宽度。有人知道如何正确地将这些内容包括在这个例程中吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:53:10 | 显示全部楼层
例如,将所有文字和多行文字更改为高度为4.5的Verdana:
 
  1. (defun txtchng (sNme Ht / ss)
  2. (vl-load-com)
  3. (if (and (tblsearch "STYLE" sNme)
  4.       (setq ss (ssget "X" (list (cons 0 "TEXT,MTEXT")
  5.             (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
  6.                (cons 67 (- 1 (getvar "TILEMODE"))))))))
  7.    (progn
  8.      (setq ss (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
  9.      (foreach e ss   
  10.        (entmod (subst (cons 7 sNme) (assoc 7 e) (subst (cons 40 Ht) (assoc 40 e) e)))))
  11.    (princ "\n<!> No Text Found or Verdana Style Doesn't Exist <!>"))
  12. (princ))
  13. (defun c:test ()
  14. (txtchng "VERDANA" 4.5)
  15. (princ))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 15:55:01 | 显示全部楼层
 
在编写和测试代码时,他本可以将变量定义为全局变量,但在例程中没有正确设置。当他重新启动autocad时,全局变量将不再设置,因此,当例程到达该点时,它无法继续。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 15:59:04 | 显示全部楼层
 
如果运行该例程一次,则所有多行文字对象都将分解,图形中不再有多行文字对象。
所以当你再次运行它时
  1. (setq entities (ssget "X" '((0 . "MTEXT")))
  2.        len     (sslength entities)  ; <---<<  fails here
  3.        count 0
  4. );setq
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 16:00:06 | 显示全部楼层
驾驶室,
 
有没有更好的方法来表达下面这句话,以便在一个步骤中添加更多内容?
 
我试过使用mapcar,但没有用——但不知道为什么
 
谢谢
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:03:21 | 显示全部楼层
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 21:18 , Processed in 0.326285 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表