摘 要: 通过对AutoCAD文本操作二次开发几种方式的分析和比较,本文使用了VBA对AutoCAD中文本操作的二次开发技术。
关键词: VBA 二次开发 文本
对AutoCAD二次开发的技术有多种,如Lisp或Visual Lisp语言、ADS、ObjectArx、Visual Basic语言以及镶嵌在AutoCAD内部的VBA,等。这几种方式对AutoCAD的二次开发各有自己的优、缺点。一般来讲,对于短小的二次开发采用VBA技术是十分方便可行的。由于它是以Visual Basic语言的语法为基础的,对于大多数熟悉Visual Basic语言的人员采用VBA技术也是一种切实可行的方式。基于以上原因,本文在对AutoCAD2000中的文本操作时就采用了该技术来完成的。
对文本需要的操作主要有两种:对文本的写入和修改。本文就是针对这两个方面来考虑的。在AutoCAD中对文本的读写操作的命令十分有限且功能简单。因此,本文开发了一种功能更强的文本操作工具。它不仅能完成对一般文本的写操作,而且还提供了控制文本在写入时的角度、宽度以单个字符的高度的功能;在对文本的修改时,首先选取需要修改的文本以获得它的相关属性,并读取这些属性到窗体上对应的属性的文本框,然后通过改变这些属性来实现对文本的相应的修改。
为此,在编程的窗体设计时首先应有两个选择按扭,用于确定为文本的写入或修改操作,写入文本内容的文本框(strTxt),以及包含文本宽度(strWidTxt)、旋转角度(strRotTxt)、字符高度(strHeiTxt)的文本框。为了修改文本的位置,设计了向上(CmdUp)、向下(CmdDow)、向左(CmdLeft)、向右(CmdRight)的四个按扭。
设计对文本的操作窗体如下:
图1文本操作
1.文本的写入
文本的写入主要是借助VBA中AddMText(InsertionPoint, Width, Text)方法来实现的,该方法的三个参数分别用于控制写入文本的位置、宽度和文本的内容。另外通过对写入对象的Rotate属性的操作即可控制写入文本的旋转角度。文本写入定义的子程序为:
其中hasInsP为是否已有插入点的Boolean类型标记。
Public Sub StrWri()
If (strTxt.text = "") Then
insPot = ThisDrawing.Utility.GetPoint(, "请选择插入点:")
hasInsP = True
Else
'''如没有选择插入点则选择插入点
If (hasInsP = False) Then insPot = ThisDrawing.Utility.GetPoint(, "请选择插入点:")
'''插入文本字符操作
Set txtObj = ThisDrawing.ModelSpace.AddMText(insPot, insWid, strTxt.text)
txtObj.Rotate insPot, insRot
txtObj.Update
hasInsP = False '取消插入点标记的设置
End If
End Sub
2.文本的修改
2.1 文本修改
对文本的修改需要有被修改的文本,因此首先通过在屏幕上选取所需的文本对象后,才能进行相应的修改操作。即主要是读取该文本的相应属性到窗体对应的文本框,这时对文本框中的内容进行修改即在改变所选文本的相应属性。修改完毕确定即可完成修改操作。相应的程序代码为:
Public Sub StrMod()
If (strTxt = "") Then
Dim selObj As AcadObject, selPnt As Variant ' 定义选择实体的临时变量
'在屏幕上选择实体
RETRY:
On Error Resume Next
ThisDrawing.Utility.GetEntity selObj, selPnt, "在屏幕上选择文本>"
If (selObj.EntityName = "AcDbMText") Then
Set txtObj = selObj
strTxt = txtObj.textString '读取所选文本的字符内容
insPot = txtObj.insertionPoint '读取所选文本的插入点
strHeiTxt = txtObj.Height '读取所选文本的高度
strWidTxt = txtObj.width '读取所选文本的宽度
strRotTxt = txtObj.Rotation * 180 / PI '读取所选文本的角度
Else
MsgBox "您选择的为非Mtext文本.", , "文本选择"
GoTo RETRY
End If
Else
txtObj.insertionPoint = insPot '修改所选择文本的插入点
txtObj.width = strWidTxt '修改所选择文本的宽度
txtObj.Height = strHeiTxt '修改所选择文本的高度
txtObj.textString = strTxt '修改所选择文本的字符内容
txtObj.Rotate insPot, insRot '修改所选择文本的角度
txtObj.Update
End If
End Sub
2.2插入点的动态修改
点击窗体上修改插入点位置的四个按扭,可以动态的修改文本插入点向上、向下、向左及向右的位置。它是通过动态修改文本插入点的X、Y坐标来实现的。相应的代码为(以向右为例):
Private Sub CmdRight_Click()
insPot(0) = insPot(0) + 1 '插入点X坐标加 1
txtObj.insertionPoint = insPot
txtObj.Update
End Sub
3.程序的初始化的设置
窗体的设计如图1,其它通用变量如下:
'定义文本实体的字符内容、插入点、字符宽度及旋转角度等属性
Dim txtStr As String, insPot As Variant, insWid As Double, insRot As Double
Dim txtObj As AcadMText '定义被插入的字符串实体
Dim hasInsP As Boolean '定义是否已选择插入点的标记
Const PI = 3.1415926 '定义常量
|