20230818更老帖再进化--多行文字排版
本帖最后由 wzg356 于 2023-8-18 21:15 编辑20230818更
;多行文字排版,删除字体、字高、字宽为统一默认+缩进行距处理
;需要"通用参数输入dcl.lsp"里的函数TYdataset 支持
(defun c:mtaa( / dl1 dl2 dl30 dl31 getdclns getinfstr mte mstr lsn).......
............
主函数已函数化,方便同学们使用扩展修改
本次更新后,扩展功能均可独立增加,即参数表中各元素可有可无nil,只是其中元素意义顺序固定的---lsp里面有详细说明
具体扩展功能见图片
运行试用不断体验更好理解
功能基本差不多了,mtext控制符太复杂,介绍的资料也不多,考虑不了那么多,正则也只董点点,有精通的高手提点意见
"通用参数输入dcl.lsp"里的函数TYdataset有些复杂,但很通用,我的程序基本全部直接使用,不重复写对话框了,具体介绍见http://bbs.mjtd.com/thread-187061-1-1.html这个帖子收币下载,这儿也收起,否则对不住老帖下载的
另外,这里也对"通用参数输入dcl.lsp"的使用实现扩展(新发现功能)-- 不退出对话框实现-类似控件名称的切换
=================老帖======
贴出的代码为多行文字删除字体、字高、字宽为统一默认----可以单独有效运行
;正则表达式字符串替换
;lst: (list(list n1 o1)(list n2 o2))
(defun Replacestr(str lst / regex)
(setq regex(vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
(vlax-put-property regex "IgnoreCase" 0) ;不忽略大小写
(vlax-put-property regex "Global" 1) ;匹配方式,全文字匹配
(foreach x lst
(vlax-put-property regex "Pattern" (cadr x))
(setq str(vlax-invoke-method regex "Replace" str (car x)));匹配替换
)
(vlax-release-object regex)str
)
;多行文字删除字体、字高、字宽为统一默认
(defun c:mtaa( / MTe)
(while(and(setq MTe(Car(entsel"\n选择多行文字:")))
(wcmatch(Cdr(Assoc 0 (entget MTe)))"MTEXT")
)
(setq MTe(vlax-ename->vla-object MTe))
(Vlax-put MTe 'TextString
(Replacestr (Vlax-Get MTe 'TextString) '(
("" "(\\\\F|\\\\f|\\\\H|\\\\W)(.[^;]*);");删除字体、字高、字宽
("\\H0.7x;\\S$1;\\H1.4286x;" "\\\\S(.[^;]*);");恢复堆叠字高
))
)
)
)
本帖最后由 桃花源 于 2023-7-25 15:51 编辑
谢谢分享。有个问题想求教, ("" "(\\\\F|\\\\f|\\\\H|\\\\W)(.[^;]*)("\\H0.7x;\\S$1;\\H1.4286x;" "\\\\S(.{1,4});")中\\SS代表什么呢?我见过一些返回值,\\H \\W我了解,\\S 可能代表堆叠\\f可能是字体但是诸如 \\C\\A都代表哪些内容呢?希望得到指点。有时候大括号前面会有<>,又代表什么呢?
桃花源 发表于 2023-7-25 15:45
谢谢分享。有个问题想求教, ("" "(\\\\F|\\\\f|\\\\H|\\\\W)(.[^;]*)("\\H0.7x;\\S$1;\\H1.4286x;" "\\\ ...
\\C颜色\\A对齐
wzg356 发表于 2023-7-25 16:03
\\C颜色\\A对齐
感谢您的回复 大佬高产,谢谢分享原码。 谢谢分享:loveliness: 谢谢楼主的分享源码~
学习一下! 感谢大佬分享 方法值得学习借鉴。 谢谢楼主分享!
页:
[1]
2