找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 533|回复: 1

[教学]:文字分解为多段线

[复制链接]
发表于 2005-10-31 11:40:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
Option Explicit

Sub ExplodeText()
    '输出WMF文件*****************************************
    '选择文字
    Dim objText As AcadText
    Dim objMtext As AcadMText
    Dim ptMin, ptMax        '文字限制框的角点
   
    Dim objEnt As AcadEntity
    Dim pt As Variant
   
    On Error Resume Next
Retry:
    ThisDrawing.Utility.GetEntity objEnt, pt, "选择要分解的文字:"
   
    If Err <> 0 Then        '错误处理
        Err.Clear
        GoTo Retry
    End If
   
    '获得文字的限制框角点
      If objEnt.ObjectName = "AcDbText" Then
        Set objText = objEnt
        objText.GetBoundingBox ptMin, ptMax
    ElseIf objEnt.ObjectName = "AcDbMText" Then
        Set objMtext = objEnt
        objMtext.GetBoundingBox ptMin, ptMax
    Else
        MsgBox "所选择的实体不是文字或者多行文字对象!", vbCritical
        Exit Sub
    End If
   
    '为了提高分辨率,保证对象完全在当前视口中,进行缩放操作
    ZoomWindow ptMin, ptMax
    'ZoomScaled 0.9, acZoomScaledRelative
   
   
    '创建选择集
    Dim SSet As AcadSelectionSet
    If Not IsNull(ThisDrawing.SelectionSets.item("this")) Then
        Set SSet = ThisDrawing.SelectionSets.item("this")
        SSet.Delete
    End If
    Set SSet = ThisDrawing.SelectionSets.Add("this")
    Dim item(0) As AcadEntity
    Set item(0) = objEnt
    SSet.AddItems item
   
    '输出WMF文件
    ThisDrawing.Export "C:\temp", "WMF", SSet
   
    '输入WMF文件*****************************************
    '当前视口的高宽
    Dim height As Double, width As Double   '当前图形窗口的宽、高
    height = ThisDrawing.GetVariable("ViewSize")    '返回当前视口的高度(图形单位)
    Dim dblScale As Variant     '高宽比例
    dblScale = ThisDrawing.GetVariable("ScreenSize")    '该系统变量返回当前视口的像素单位(x和y值)
    width = (dblScale(0) / dblScale(1)) * height
   
    '视图中心点的绝对坐标
    Dim ptCen, ptTemp
    Dim ucsName As String
    ucsName = ThisDrawing.GetVariable("UCSNAME")    '该系统变量返回当前UCS的名称
    If ucsName <> "" Then
        Dim objUcs As AcadUCS
        Set objUcs = ThisDrawing.ActiveUCS
        ptTemp = ThisDrawing.GetVariable("viewctr")     '返回当前视口的中心点(UCS坐标)
        ptCen = ThisDrawing.Utility.TranslateCoordinates(ptTemp, acUCS, acWorld, False)
    ElseIf ucsName = "" Then
        ptCen = ThisDrawing.GetVariable("viewctr")
    End If
   
    '视图左上角点的坐标(即WMF图形插入的基点)
    Dim ptBase(0 To 2) As Double
    ptBase(0) = ptCen(0) - width / 2: ptBase(1) = ptCen(1) + height / 2: ptCen(2) = 0
   
        
    '输入文件
    If Dir("C:\temp.wmf") <> "" Then    '判断文件是否存在
        ThisDrawing.Import "C:\temp.wmf", ptBase, 2
        Kill ("c:\temp.wmf")    '删除临时文件
    Else
        MsgBox "程序使用的临时文件不存在,请重新运行程序!", vbCritical
        Exit Sub
    End If
   
    '分解得到的块参照************************************
    Dim blkRef As AcadBlockReference
    Dim element As AcadEntity
    Set element = ThisDrawing.ModelSpace.item(ThisDrawing.ModelSpace.Count - 1)
    If TypeOf element Is AcadBlockReference Then
        Set blkRef = element
        blkRef.Explode
        blkRef.Delete
    End If
   
    objEnt.Delete   '删除原来的文字对象
    SSet.Delete
   
    '缩放图形,返回原来的视图
    ZoomPrevious
    'ZoomPrevious
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-1-13 13:58:37 | 显示全部楼层
这个怎么用的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-19 07:50 , Processed in 0.401012 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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