明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1481|回复: 1

如何统一MTEXT的文字格式

[复制链接]
发表于 2009-2-11 13:21:00 | 显示全部楼层 |阅读模式

在CAD中,有很多MTEXT的shx不一样,有txt.shx,有HZTXT.SHX,KHZTEX.SHX

如何将他们统一为hztx.shx

发表于 2009-3-26 02:22:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-26 2:23:19 编辑

先建立字体为hztx.shx的文字样式,并应用到所有多行文字。

特性栏-文字-内容,如果多行文字带有复杂格式,可应用以下vba程序,基本可以解决问题:

Option Explicit

' 拾取多行文字,获得其文字内容,并进行替换
Public Sub GetAndReplaceMTextString()
  Dim SSet As AcadSelectionSet
  Set SSet = ThisDrawing.PickfirstSelectionSet
  If SSet.Count = 0 Then
    MsgBox "未选择对象"
    Exit Sub
  End If
  Dim objMText As AcadEntity
  Dim ptMin As Variant, ptMax As Variant
  Dim ptCenter(0 To 2) As Double
  Dim radius As Double
  For Each objMText In SSet
    If TypeOf objMText Is AcadMText Then
      objMText.TextString = GetMTextUnformatString(objMText.TextString)
    End If
  Next
  ThisDrawing.Regen True
End Sub

Public Function GetMTextUnformatString(MTextString As String) As String
    Dim s As String
    Dim RE As Object
    ' 获取Regular Expressions组件
    Set RE = ThisDrawing.Application.GetInterfaceObject("Vbscript.RegExp")
    ' 忽略大小写
    RE.IgnoreCase = True
    ' 搜索整个字符串
    RE.Global = True
    s = MTextString
   
    '替换\\字符
    RE.Pattern = "\\\\"
    s = RE.Replace(s, Chr(1))
    '替换\{字符
    RE.Pattern = "\\{"
    s = RE.Replace(s, Chr(2))
    '替换\}字符
    RE.Pattern = "\\}"
    s = RE.Replace(s, Chr(3))
   
    '删除段落缩进格式
    RE.Pattern = "\\pi(.[^;]*);"
    s = RE.Replace(s, "")
    '删除制表符格式
    RE.Pattern = "\\pt(.[^;]*);"
    s = RE.Replace(s, "")
'    '删除堆迭格式
'    RE.Pattern = "\\S(.[^;]*)(\^|#|\\)(.[^;]*);"
'    s = RE.Replace(s, "$1$3")
    '删除字体、颜色、字高、字距、倾斜、字宽、对齐格式
    RE.Pattern = "(\\F|\\C|\\H|\\T|\\Q|\\W|\\A)(.[^;]*);"
    s = RE.Replace(s, "")
    '删除下划线、删除线格式
    RE.Pattern = "(\\L|\\O|\\l|\\o)"
    s = RE.Replace(s, "")
    '删除不间断空格格式
    RE.Pattern = "\\~"
    s = RE.Replace(s, " ")
    '删除换行符格式
    RE.Pattern = "\\P"
    s = RE.Replace(s, "")
    '删除换行符格式(针对Shift+Enter格式)
    RE.Pattern = vbLf
    s = RE.Replace(s, "")
    '删除{}
    RE.Pattern = "({|})"
    s = RE.Replace(s, "")
   
    '替换回\\,\{,\}字符
    RE.Pattern = "\x01"
    s = RE.Replace(s, "\")
    RE.Pattern = "\x02"
    s = RE.Replace(s, "{")
    RE.Pattern = "\x03"
    s = RE.Replace(s, "}")
   
    Set RE = Nothing
   
    GetMTextUnformatString = s
End Function

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

本版积分规则

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

GMT+8, 2024-11-26 07:50 , Processed in 0.146402 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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