AutoCAD二次开发VBAWord文件下载.docx
《AutoCAD二次开发VBAWord文件下载.docx》由会员分享,可在线阅读,更多相关《AutoCAD二次开发VBAWord文件下载.docx(39页珍藏版)》请在冰豆网上搜索。

新工程可以在任何时候创建,这时它是一个独立、完整的工程。
用户可以将它保存到工程文件中,也可以将它嵌入到图形中。
建立新的工程步骤如下:
(1)“VBA管理器”对话框;
(2)单击【新建】按钮,建立新工程。
由于篇幅有限卸载工程、嵌入工程、提取工程以及宏的相关知识自行学习。
14.2VBAIDE开发环境
在AutoCAD中加载了工程,就可以使用VBA交互式开发环境VBAIDE来编辑宏工程的程序代码、窗体和部件引用等元素,也可以在VBAIDE中删除错误、调试和运行工程。
14.2.1打开VBAIDE
可以使用下面的二种方法之一打开VBAIDE开发环境:
(1)在命令提示行中输入“vbaide”命令;
(2)从AutoCAD的【工具】菜单中选择菜单【宏】→“VisualBasic编辑器”;
打开的VBAIDE编辑环境如图14-4所示,在VBAIDE中可以对所有已加载的工程进行编辑。
图14-4VBAIDE编辑环境
14.2.2工程元素
每个工程都由许多不同的元素构成的。
一个工程可以包含的元素有对象、窗体、标准模块、类模块和引用等。
◆对象。
对象元素是指VBA工程的程序代码将要存取的对象或者文件,例如,对AutoCADVBA工程而言,ThisDrawing对象代表的是当前的AutoCAD图形;
◆窗体。
窗体元素是放置其他对象的容器,它常常用于创建工程的自定义对话框;
◆标准模块。
标准模块也称为程序代码模块,或者简称模块。
程序代码模块中包含程序代码行和函数等;
◆类模块。
类模块元素是指所有包含本身的对象,这些对象被定义为类别;
◆引用。
引用元素是指对其他工程或者程序的使用参考。
在VBAIDE编辑环境可以进行添加新元素、导入元素和编辑元素,具体操作方法及步骤请自行学习。
14.3ActiveX基础
基于AutoCAD的VBA应用程序就是高级程序语言的计算功能与AutoCAD的绘图功能结合,使有VBA程序语句来控制对AutoCAD图形的操作。
要很好地使用VBA开发AutoCAD应用程序,就必须熟悉与要开发的应用程序类型相关的AutoCAD实体和对象集合、它们的属性和操作方法,以及都有哪些资源可以使用。
引外还需要了解ActiveX相关语法知识。
在本节学习过程中要注意理解ActiveX对象模型。
14.3.1AutoCAD对象模型
对象是AutoCADActiveX接口的主要单位,每一个开放的对象均代表一个AutoCAD的明确组件,VBA应用程序就是通过AutoCAD的这些对象来控制AutoCAD图形的。
AutoCADActiveX接口有以下五种类型的对象:
◆AutoCAD图形实体。
例如直线、椭圆、圆弧、文字与标注等;
◆AutoCAD非图形实体。
如线型、标注样式、文字样式、表格样式等;
◆AutoCAD结构实体。
如图层与图块等实体;
◆AutoCAD视图实体。
如视图和视口等;
◆图形和AutoCADVBA应用程序本身。
AutoCAD的对象是分层的,这个分层结构就是应用程序能够操作的对象模型,其中根对象是Application对象,对对象的操作是依对象模型的分层关系进行逐级操作的,对象分层结构如图14-5所示。
图14-5对象分层结构
14.3.1.1Application对象
Application对象是AutoCADActiveXAutomation对象模型的根对象,在Application对象中可以存取任何其他的对象,也可以设置对象的属性和使用方法。
此外,Application对象还可以通过Documents集合来访问AutoCAD图形,通过MenuBar和MenuGroups集合来访问AutoCAD菜单和工具条,以及通过VBA的属性来访问VBAIDE。
对象的结构如图14-6所示。
图14-6Application对象
14.3.1.2Document对象
Document对象也就是AutoCAD图形,用户可以通过它来引用AutoCAD的图形对象和非图形对象。
所有Document对象都属于Documents集合。
用户通过Documents集合可以存取所有图形对象,例如直线、圆和圆弧等,图形对象的存取是通过Documents集合下的ModelSpace和PaperSpace集合来实现的。
用户通过Documents集合也可以存取大部分的非图形对象,例如图层、线型和文字样式等,这些非图形对象的存取是通过Documents集合下的Layers、Linetypes和TextStyles等集合来实现的。
Documents集合的结构如图14-7所示。
14.3.1.3图形对象与非图形对象
图形对象也就是图形实体,是组成AutoCAD图形的主要元素,它在AutoCAD中是可以看到的对象,如直线、圆、圆弧文字等。
图14-7Documents集合
在VBA应用程序中创建这些图形对象,需要使用Add方法对象,例如创建一个新的直线对象,需要使用AddLine方法,创建一个圆弧对象,需要使用AddArc方法;
在VBA应用程序中编辑这些图形对象,可以使用对象本身的方法和属性,每一个图形对象都有方法可以让应用程序执行大部分的AutoCAD编辑命令,例如Move、Erase和Mirror方法等。
非图形对象属于AutoCAD图形的一部分,但是在绘图窗口中是不可见的,例如Layers、Linetypes和SelectionSets对象等。
在VBA应用程序中要创建这些非图形对象,需要使用上一级的Collection对象的Add方法。
另外,每一个非图形对象均有特殊用途的方法和属性,都有可以设置及存取扩展实体数据和删除自己的方法。
14.3.1.3Preferences、Plot和Utility对象
Preferences集合是AutoCAD对象模型下的一个重要对象集合,它的层结构如图14-8所示。
图14-8Preferences集合
Plot对象提供对AutoCAD中“页面设置”对话框设置值的存取,应用程序还能够通过该对象以不同的方法来打印图形。
Utility对象提供应用程序中使用的输入函数和转换函数,它在对象模型的层次结构如图14-9所示。
如图14-9Preference、Plot和Utility对象
14.3.2引用对象
引用对象是开发程序必需的工作。
可以直接引用对象,也可以先定义一个变量,然后通过变量来引用对象。
如果是直接引用对象,需要把对象引入到方法调用语句中。
例如,在模型空间中生成一条直线,需要首先定义直线的起点和终点坐标,然后调用AddLine方法来创建直线对象。
DimSpoint(0To2)AsDouble
DimEpoint(0To2)AsDouble
DimLineObjAsAcadLine
Spoint(0)=0
Spoint
(1)=0
Spoint
(2)=0
Epoint(0)=100
Epoint
(1)=100
Epoint
(2)=0
SetLineObj=ThisDrawing.ModelSpace.AddLine(Spoint,Epoint)
如果是通过变量来引用对象,需要把变量定义为所需的对象类型,然后将变量设置为适当的对象。
它的格式一般为:
DimVariablenameAsObjectType
SetVariablename=Thisdrawing.<
Object>
14.3.3存取Application对象
Thisdrawing对象提供了连接Document对象的功能,而根对象(Application对象)在对象模型结构层次中是位于Document对象之上的,因此如何存取根对象就成了一个主要问题。
这时需要用Document对象的一个名为Application的属性,可以用该属性引用Application对象。
14.3.4使用集合对象
集合对象是事先已经定义好的对象,它包含类似于对象的所有引用,也就是对象的所有引用的上一级对象,具有Collection对象的集合如表14-1所示。
表14-1具有Collection对象的集合
集合名称
描述
Documents
当前AutoCAD中打开的全部图形
ModelSpace
模型空间中的全部图形对象
PaperSpace
当前图纸空间布局中的全部图形对象
Block
特殊块内的全部实体
Blocks
图形中的全部块对象
Dictionaries
图形中的全部字典
DimStyles
图形中的全部标注样式
Groups
图形中的全部对象组
Hyperlinks
指定实体的全部超级链接
Layers
图形中的全部图层
Layouts
图形中的全部布局
MenuBar
当前显示在AutoCAD中的全部菜单
MenuGroups
当前已加载的全部菜单和工具栏
RegisteredApplications
图形中全部已注册的应用程序
SelectionSets
图形中的全部选择集
TextStyles
图形中的全部文字样式
UCSs
图形中的全部用户坐标系
Views
图形中的全部视图
Viewports
图形中的全部视口
14.3.4.1存取集合
几乎所有的集合对象都是通过Document对象来存取的。
Document对象包含每一个集合对象的属性,用户可以对这些属性进行编辑和使用。
例如,在下面的程序中定义了一个变量,然后将变量设置为当前图形的Layers集合,将来对该变量的使用,就是对AutoCAD当前图形所有图层的使用。
DimLayerCollectionAsAcadLayers
SetLayerCollection=ThisDrawing.Layers
例外的是,Documents、MenuBar、MenuGroups这几个集合对象是经过Application对象来存取的,Application对象同样包含了每一个集合的属性。
14.3.4.2向集合对象中添加新成员
要在集合对象中添加新成员,需要使用Add方法。
例如,在下面的程序中创建一个新图层并将它添加到Layers集合中。
DimNewLayerAsAcadLayer
SetNewLayer=ThisDrawing.Layers.Add("
新图层"
)
14.3.4.3删除集合对象中成员
要在集合对象中删除成员,需要使用Delete方法。
例如,在下面的程序中删除图层集合中的“新图层”。
NewLayer.Delete
14.4编写程序
要想能够快速、顺利地编写应用程序,需要自学掌握以下内容:
属性、方法和事件的概念;
掌握引用对象的方法(通过父对象依次引用);
数据类型的概念、创建方法及使用方法;
数组的定义与使用;
If...Then...Else语句;
For...Next语句;
Val()函数;
具备了上述基本知识就可以在VBAIDE环境中轻松编写应用程序了,在编写采矿应用程序时,要对图形进行分析,在AutoCAD二次开发过程中,针对固定式图形往往能够取得较好的效果,比如编写“巷道断面”应用程序,编写“采煤工作面布置图”应用程序等。
14.4.1新建图形
新建图形需要用到Documents对象的Add方法。
下面的程序使用Add方法,以默认的模板文件建立一个新的图形。
DimNewObjectAsAcadDocument
SetNewObject=ThisDrawing.Application.Documents.Add
14.4.2打开图形
要对已有的图形进行操作,必须先打开它。
需要使用到Documents对象的Open方法。
下面的程序使用Open方法来打开一个已有的图形文件“Mine.dwg”,其中VisualBasic的Dir函数用来在打开图形之前检查图形文件是否存在,如果不存在则显示警告信息。
使用此例子时应该改变图形文件的名称和路径,指定此图形文件在自己系统中存在的实际位置。
DimFileNameStrAsString
FileNameStr="
c:
\MyDocument\Mine.dwg"
IfDir(FileNameStr)<
>
"
"
Then
ThisDrawing.Application.Documents.OpenFileNameStr
Else
MsgBox"
文件"
&
FileNameStr&
不存在"
EndIf
14.4.2改变AutoCAD窗口的位置和尺寸
在VBA程序中,可以使用Application对象的WindowTop、WindowLeft、Width和Height属性来定位AutoCAD窗口在屏幕左上角的位置和宽度以及高度。
下面的程序将AutoCAD窗口定位在距屏幕左边和顶边均为10个像素的位置,并将窗口的宽度与高度均设置为500个像素。
ThisDrawing.Application.WindowTop=10
ThisDrawing.Application.WindowLeft=10
ThisDrawing.Application.Width=500
ThisDrawing.Application.Height=500
14.4.3最大化和最小化AutoCAD窗口
可以通过设置Application对象的WindowState属性来最大化或者最小化AutoCAD窗口。
该属性有三个可选值:
acMax、acMin、acNorm,分别对应AutoCAD窗口的最大状态、最小状态和正常状态。
ThisDrawing.Application.WindowState=acMax
ThisDrawing.Application.WindowState=acMin
ThisDrawing.Application.WindowState=acNorm
14.4.4计算和信息查询
使用Utility对象所提供的方法,可以快速地解决一些数学计算问题,或者计算出图形上的点。
使用Utility对象所提供的方法,可以进行如下工作:
◆AngleFromXAxis方法:
找出线与X轴的夹角;
◆AngleToString方法:
将字符串表示的角度转换为实数值;
◆DistanceToReal方法:
将由字符串表示的距离值转换为单精度的实数值;
◆CreateTypeArray方法:
建立包含整数阵列、浮点数阵列、单精度阵列等的Variant;
◆PolarPoint方法:
查找出与已知点成指定角度和距离的点;
◆TranslateCoordinates方法:
将某点从一个坐标系统转换为另一种坐标系统。
14.4.4.1计算点距离
点距离的计算在应用程序中使用很多,查两条平等直线之间的距离就需要通过点距离计算。
下面的程序使用了GetDistance方法来取得两点之间的距离,然后使用MsgBox函数将计算结果显示出来。
Dim TwoPDist As Double
Me.Hide
TwoPDist=ThisDrawing.Utility.GetDistance(,"
指定两个点"
MsgBox"
这两个点之间的距离为:
TwoPDist
14.4.4.2计算定义面积
在应用程序中计算面积,需要使用对象的Area属性,该属性可计算出圆弧、圆、椭圆、椭圆弧、面域、多段线或者封闭的区域的面积。
计算出来的面积会随查询对象的类型不同有所不同:
◆封闭的多段线和多边形:
对于有宽度的多段线或多边形,面积是以宽度的中心线为边界来计算的;
◆非封闭对象:
假设在非封闭对象的起点和终点间有一直线连接,所组成的封闭区域的面积即为非封闭的面积;
◆面域:
面域的面积等于面域中对象的共有部分的面积。
可以计算一个没有边界的封闭区域的面积,该区域由指定的二维或者三维点来定义,而这些点必须位于同一个平面上。
计算由指定点组成的区域面积的步骤如下:
(1)使用GetPoint方法取得用户的指定点;
(2)使用用户指定的点来创建无宽度的多段线,通常使用AddLightWeightPolyline方法创建无宽度的多段线;
(3)使用Area属性取得新建立的多段线的面积;
(4)使用Erase方法删除多段线。
下面的程序接受用户输入8个点,然后使用这8个点来创建封闭多段线。
再计算面积,将结果显示在信息框中。
DimP1AsVariant
DimP2AsVariant
DimP3AsVariant
DimP4AsVariant
DimP5AsVariant
DimP6AsVariant
DimP7AsVariant
DimP8AsVariant
'
提示输入点
P1=ThisDrawing.Utility.GetPoint(,vbCrLf&
第1点:
P2=ThisDrawing.Utility.GetPoint(,vbCrLf&
第2点:
P3=ThisDrawing.Utility.GetPoint(,vbCrLf&
第3点:
P4=ThisDrawing.Utility.GetPoint(,vbCrLf&
第4点:
P5=ThisDrawing.Utility.GetPoint(,vbCrLf&
第5点:
P6=ThisDrawing.Utility.GetPoint(,vbCrLf&
第6点:
P7=ThisDrawing.Utility.GetPoint(,vbCrLf&
第7点:
P8=ThisDrawing.Utility.GetPoint(,vbCrLf&
第8点:
根据这些点创建二维多段线
DimPolyObjAsAcadLWPolyline
DimPLPoint(0To15)AsDouble
PLPoint(0)=P1(0)
PLPoint
(1)=P1
(1)
PLPoint
(2)=P2(0)
PLPoint(3)=P2
(1)
PLPoint(4)=P3(0)
PLPoint(5)=P3
(1)
PLPoint(6)=P4(0)
PLPoint(7)=P4
(1)
PLPoint(8)=P5(0)
PLPoint(9)=P5
(1)
PLPoint(10)=P6(0)
PLPoint(11)=P6
(1)
PLPoint(12)=P7(0)
PLPoint(13)=P7
(1)
PLPoint(14)=P8(0)
PLPoint(15)=P8
(1)
SetPolyObj=ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoint)
PolyObj.Closed=True
ThisDrawing.Application.ZoomAll
这些点定义区域的面积为:
PolyObj.Area,,"
计算定义面积"
14.4.5用户输入
开发的应用程序在运行时,通常要用到用户输入的参数:
字符串、点坐标值、长度值等,或者是选项的关键字,例如上述需要用户指定的二维多段线的各点。
在获得了输入信息后,再进行下上步工作。
取得用户的输入需要用到Utility对象的一些方法和属性。
Utility对象的有关用户输入的方法主要有:
◆GetAngle:
取得角度值;
◆GetCornet:
取得对角点;
◆GetDistance:
取得两点间的距离;
◆GetEntity:
取得实体对象;
◆GetInput:
取得用户的输入;
◆GetInteger:
取得整数;
◆GetKeyword:
取得关键词;
◆GetOrientation:
取得方向;
◆GetPoint:
取得点坐标;
◆GetReal:
取得实数;
◆GetRemoteFile:
取得远程文件名;
◆GetString:
取得字符串;
◆GetSubEntity:
取得子对象。
下面就用以GetString方法和GetPoint方法分别编写应用程序。
1.GetString方法
GetString方法提示用户在AutoCAD的命令输入一个字符串。
该方法需要两