你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
VBA在AutoCAD2000中对文本的操作
 

  : 通过对AutoCAD文本操作二次开发几种方式的分析和比较,本文使用了VBAAutoCAD中文本操作的二次开发技术。

关键词: VBA  二次开发  文本

 

AutoCAD二次开发的技术有多种,如LispVisual Lisp语言、ADSObjectArxVisual Basic语言以及镶嵌在AutoCAD内部的VBA,等。这几种方式对AutoCAD的二次开发各有自己的优、缺点。一般来讲,对于短小的二次开发采用VBA技术是十分方便可行的。由于它是以Visual Basic语言的语法为基础的,对于大多数熟悉Visual Basic语言的人员采用VBA技术也是一种切实可行的方式。基于以上原因,本文在对AutoCAD2000中的文本操作时就采用了该技术来完成的。

对文本需要的操作主要有两种:对文本的写入和修改。本文就是针对这两个方面来考虑的。在AutoCAD中对文本的读写操作的命令十分有限且功能简单。因此,本文开发了一种功能更强的文本操作工具。它不仅能完成对一般文本的写操作,而且还提供了控制文本在写入时的角度、宽度以单个字符的高度的功能;在对文本的修改时,首先选取需要修改的文本以获得它的相关属性,并读取这些属性到窗体上对应的属性的文本框,然后通过改变这些属性来实现对文本的相应的修改。

为此,在编程的窗体设计时首先应有两个选择按扭,用于确定为文本的写入或修改操作,写入文本内容的文本框(strTxt),以及包含文本宽度(strWidTxt)、旋转角度(strRotTxt)、字符高度(strHeiTxt)的文本框。为了修改文本的位置,设计了向上(CmdUp)、向下(CmdDow)、向左(CmdLeft)、向右(CmdRight)的四个按扭。

设计对文本的操作窗体如下:


 

1文本操作

 

1.文本的写入

文本的写入主要是借助VBAAddMTextInsertionPoint, 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插入点的动态修改

点击窗体上修改插入点位置的四个按扭,可以动态的修改文本插入点向上、向下、向左及向右的位置。它是通过动态修改文本插入点的XY坐标来实现的。相应的代码为(以向右为例):

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          '定义常量

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089