乐筑天下

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

[编程交流] 帮助:只改变颜色

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:22:19 | 显示全部楼层
 
这最初是出于设计——我认为,如果用户有意对数字内容或数字内容周围的文本部分应用颜色覆盖,他们不会希望这种颜色被改变。
 
 
现在,我在下面的更新代码中包含了一个单独的参数,您可以使用该参数更改应用于数字内容的ACI颜色(6=洋红色)。
 
除少数边缘情况外,应成功执行以下操作:
  1. ;; Colour Numerical MText  -  Lee Mac
  2. (defun c:numcol ( / *error* col enx idx pat new rgx sel str )
  3.    (setq col 6 ;; ACI colour for numerical text
  4.          pat "(?:\\{\\\\C\\d+\\;(-?\\d+(?:\\.\\d)?\\d*)\\})|(?-?\\d+(?:\\.\\d)?\\d*)([^0-9;|]{1}))"
  5.          new (strcat "{\\C" (itoa col) ";$1$2}$3")
  6.    )
  7.    (defun *error* ( msg )
  8.        (if (and (= 'vla-object (type rgx)) (not (vlax-object-released-p rgx)))
  9.            (vlax-release-object rgx)
  10.        )
  11.        (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
  12.            (princ (strcat "\nError: " msg))
  13.        )
  14.        (princ)
  15.    )
  16.    
  17.    (if (setq sel (ssget "_:L" '((0 . "MTEXT") (1 . "*#*"))))
  18.        (if (setq rgx (vlax-get-or-create-object "vbscript.regexp"))
  19.            (progn
  20.                (vlax-put-property rgx 'global     actrue)
  21.                (vlax-put-property rgx 'ignorecase acfalse)
  22.                (vlax-put-property rgx 'multiline  actrue)
  23.                (vlax-put-property rgx 'pattern    pat)
  24.                (repeat (setq idx (sslength sel))
  25.                    (setq enx (entget (ssname sel (setq idx (1- idx))))
  26.                          str (assoc 1 enx)
  27.                    )
  28.                    (entmod (subst (cons 1 (vlax-invoke rgx 'replace (cdr str) new)) str enx))
  29.                )
  30.            )
  31.            (princ "\nUnable to interface with RegExp object.")
  32.        )
  33.    )
  34.    (*error* nil)
  35.    (princ)
  36. )
  37. (vl-load-com) (princ)

显示与现有多行文字格式兼容的快速演示:
 
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 19:25:23 | 显示全部楼层
 
嗨,李。感谢视频中的详细解释。
 
抱歉,但现在结果正好相反。当字母和数字颜色相同时,数字不能改变颜色。
 
只有当文本和数字的颜色不同时,它才会改变。
 
也许是沟通失误。
 
你最初的Lisp程序给出了我需要的结果(当数字/字母颜色相同时,数字会改变颜色),但我想选择其他颜色。
 
我只提到当数字/字母的颜色不同时数字不会改变的部分,因为我认为您创建了初始LISP以使数字能够改变,无论数字/字母的颜色是相同还是不同。
 
我的画实际上只由多行文字组成,字母和数字的颜色从一开始就相同。
 
希望你可以恢复到最初的Lisp程序,但可以像第二个Lisp程序一样选择颜色。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:26:54 | 显示全部楼层
请上传一张显示所需结果的图纸,以及您认为程序返回错误结果的情况。
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 19:29:29 | 显示全部楼层
 
嗨,李。
 
按要求附上。
 
 
仅更改数字LISP。图纸
194817apd9ejpyor9z620w.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:32:33 | 显示全部楼层
请尝试以下操作:
  1. ;; Colour Numerical MText  -  Lee Mac
  2. (defun c:numcol ( / *error* col idx pat new obj rgx sel )
  3.    (setq col 6 ;; ACI colour for numerical text
  4.          pat "(?:\\{\\\\C\\d+\\;(-?\\d+(?:\\.\\d)?\\d*)\\})|(?-?\\d+(?:\\.\\d)?\\d*)([^0-9;|]{1}|$))"
  5.          new (strcat "{\\C" (itoa col) ";$1$2}$3")
  6.    )
  7.    (defun *error* ( msg )
  8.        (if (and (= 'vla-object (type rgx)) (not (vlax-object-released-p rgx)))
  9.            (vlax-release-object rgx)
  10.        )
  11.        (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
  12.            (princ (strcat "\nError: " msg))
  13.        )
  14.        (princ)
  15.    )
  16.    
  17.    (if (setq sel (ssget "_:L" '((0 . "MTEXT") (-4 . "<OR") (1 . "*#*") (3 . "*#*") (-4 . "OR>"))))
  18.        (if (setq rgx (vlax-get-or-create-object "vbscript.regexp"))
  19.            (progn
  20.                (vlax-put-property rgx 'global     actrue)
  21.                (vlax-put-property rgx 'ignorecase acfalse)
  22.                (vlax-put-property rgx 'multiline  actrue)
  23.                (vlax-put-property rgx 'pattern    pat)
  24.                (repeat (setq idx (sslength sel))
  25.                    (vla-put-textstring
  26.                        (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))
  27.                        (vlax-invoke rgx 'replace (vla-get-textstring obj) new)
  28.                    )
  29.                )
  30.            )
  31.            (princ "\nUnable to interface with RegExp object.")
  32.        )
  33.    )
  34.    (*error* nil)
  35.    (princ)
  36. )
  37. (vl-load-com) (princ)

 
这个问题与文本的现有颜色无关,而是数字是字符串中的最后一个字符;我还更新了程序,以考虑跨多个DXF组的长文本内容的多行文字(感谢ronjonp的建议)。
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 19:37:11 | 显示全部楼层
 
嗨,李,
 
它现在工作得很好
 
谢谢你帮我解决这个问题。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:41:24 | 显示全部楼层
太好了,不客气
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 19:42:35 | 显示全部楼层
嗨,李,
 
我的数字前面有字母
 
例如,15A房间(客厅)
 
你能把Lisp程序调整成只包括数字旁边的字母吗
“15a房间(客厅)”>>>>“15a房间(客厅)”
 
谢谢
194819bowiwoi8ugqoouqa.jpg
仅用LISP语言更改数字旁边的字母。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:45:36 | 显示全部楼层
此类例外情况需要手动修改;我不打算在自愿时间进一步发展这个项目。
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 19:49:47 | 显示全部楼层
 
我理解李。
 
不过,谢谢你的帮助
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:27 , Processed in 0.856491 second(s), 72 queries .

© 2020-2025 乐筑天下

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