明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2102|回复: 23

改变多行文字的颜色为指定的颜色色号

[复制链接]
发表于 2023-6-12 10:06 | 显示全部楼层 |阅读模式
5明经币
本帖最后由 戏男 于 2023-6-12 10:25 编辑

如题,框选多行文字,改变多行文字的颜色为指定的颜色色号


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

发表于 2023-6-12 10:06 | 显示全部楼层
本帖最后由 liuhe 于 2023-6-21 17:39 编辑
  1. (prompt"作者:流河 QQ:859779429")
  2. (defun m1 (MTextString / regex s)
  3.   (setq regex (vlax-create-object "Vbscript.RegExp"))
  4.                                         ;引用正则表达式控件
  5.   (vlax-put-property regex "IgnoreCase" 0) ;不忽略大小写
  6.   (vlax-put-property regex "Global" 1)        ;匹配方式,全文字匹配
  7.   (setq s MTextString)
  8.   (vlax-put-property regex "Pattern" "(\\\\c|\\\\C)(.[^;]*);")
  9.   (setq s (vlax-invoke-method regex "Replace" s ""))
  10.   (vlax-release-object regex)
  11.   s
  12. )
  13. (defun c:tt (/ SS COR I E ENT MT)
  14.   (SETQ SS (SSGET '((0 . "MTEXT"))))
  15.   (IF (NOT SS)
  16.     (VL-EXIT-WITH-VALUE 0)
  17.   )
  18.   (if (or (not cor11) (<= cor11 0) (> cor11 256))
  19.     (setq cor11 1)
  20.   )
  21.   (SETQ COR NIL)
  22.   (WHILE (or (not cor) (<= cor 0) (> cor 256))
  23.   (IF
  24.     (NOT (SETQ
  25.            COR (GETINT (STRCAT "\n请输入颜色号<" (RTOS COR11 2 0) ">"))
  26.          )
  27.     )
  28.      (SETQ COR COR11)
  29.      (SETQ COR11 COR)
  30.   )
  31. )
  32.   (SETQ I 0)
  33.   (REPEAT (SSLENGTH SS)
  34.     (SETQ E   (SSNAME SS I)
  35.           ENT (ENTGET E)
  36.           MT  (CDR (ASSOC 1 ENT))
  37.           MT  (M1 MT)
  38.           i   (1+ I)
  39.     )
  40.     (setq ent (ENTMOD (SUBST (CONS 1 MT) (ASSOC 1 ENT) ENT))
  41.           ent (ENTMOD (SUBST (CONS 62 COR) (ASSOC 62 ENT) ENT))
  42.     )
  43.   )
  44.   (PRINC)
  45. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2023-6-12 11:53 | 显示全部楼层
553-G-01怎么组合到一块的呢?
回复

使用道具 举报

 楼主| 发表于 2023-6-12 13:31 | 显示全部楼层
loveu515 发表于 2023-6-12 11:53
553-G-01怎么组合到一块的呢?

是多行文字,多行文字可以弄两种以上的颜色
回复

使用道具 举报

发表于 2023-6-12 14:41 | 显示全部楼层

既然没要求语言,那就发个c#的
powered by ifox

  1. [CommandMethod(nameof(Test1), CommandFlags.UsePickSet)]
  2.     public static void Test1()
  3.     {
  4.         var sf = OpFilter.Build(e => e.Dxf(0) == "MTEXT");
  5.         PromptSelectionOptions pso = new PromptSelectionOptions() { MessageForAdding = "\n选择要修改颜色的多行文字", RejectObjectsOnLockedLayers = true };
  6.         var r1 = Env.Editor.GetSelection(pso, sf);
  7.         if (r1.Status != PromptStatus.OK)
  8.             return;
  9.         using var tr = new DBTrans();
  10.         var mtList1 = r1.Value.GetEntities<MText>(OpenMode.ForWrite);
  11.         if (!mtList1.Any())
  12.             return;
  13.         var r2 = Env.Editor.GetInteger("\n输入颜色号");
  14.         if (r2.Status != PromptStatus.OK)
  15.             return;
  16.         var colorIndex = Math.Abs(r2.Value) % 257;
  17.         foreach (var mt in mtList1)
  18.         {
  19.             mt.Contents = mt.Text;
  20.             mt.ColorIndex = colorIndex;
  21.         }
  22.     }

回复

使用道具 举报

 楼主| 发表于 2023-6-13 15:39 | 显示全部楼层
d1742647821 发表于 2023-6-12 14:41
既然没要求语言,那就发个c#的
powered by ifox

不会用这个,只会用LISP的
回复

使用道具 举报

发表于 2023-6-13 22:21 | 显示全部楼层
戏男 发表于 2023-6-13 15:39
不会用这个,只会用LISP的

那应该注明需要Lisp
回复

使用道具 举报

 楼主| 发表于 2023-6-14 08:10 | 显示全部楼层
d1742647821 发表于 2023-6-13 22:21
那应该注明需要Lisp

是啊,可以弄一个lisp的吗?谢谢
回复

使用道具 举报

 楼主| 发表于 2023-6-16 14:33 | 显示全部楼层
本帖最后由 戏男 于 2023-6-16 14:53 编辑

可以用了,谢谢
回复

使用道具 举报

发表于 2023-6-16 17:53 | 显示全部楼层

挺好用,改改对单行标注都能用
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 03:36 , Processed in 0.211078 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表