Views Viewports
图形中的全部视图 图形中的全部视口
14.3.4.1存取集合
几乎所有的集合对象都是通过Document对象来存取的。Document对象包含每一个集合对象的属性,用户可以对这些属性进行编辑和使用。例如,在下面的程序中定义了一个变量,然后将变量设置为当前图形的Layers集合,将来对该变量的使用,就是对AutoCAD当前图形所有图层的使用。
Dim LayerCollection As AcadLayers Set LayerCollection = ThisDrawing.Layers
例外的是,Documents、MenuBar、MenuGroups这几个集合对象是经过Application对象来存取的,Application对象同样包含了每一个集合的属性。 14.3.4.2向集合对象中添加新成员
要在集合对象中添加新成员,需要使用Add方法。例如,在下面的程序中创建一个新图层并将它添加到Layers集合中。
Dim NewLayer As AcadLayer
Set NewLayer = ThisDrawing.Layers.Add(\新图层\14.3.4.3删除集合对象中成员
要在集合对象中删除成员,需要使用Delete方法。例如,在下面的程序中删除图层集合中的“新图层”。
Dim NewLayer As AcadLayer
Set NewLayer = ThisDrawing.Layers.Add(\新图层\NewLayer.Delete
14.4 编写程序
要想能够快速、顺利地编写应用程序,需要自学掌握以下内容: ? 属性、方法和事件的概念;
? 掌握引用对象的方法(通过父对象依次引用); ? 数据类型的概念、创建方法及使用方法; ? 数组的定义与使用; ? If...Then...Else 语句; ? For...Next 语句; ? Val()函数;
具备了上述基本知识就可以在VBA IDE环境中轻松编写应用程序了,在编写采矿应用程序时,要对图形进行分析,在AutoCAD二次开发过程中,针对固定式图形往往能够取得较好的效果,比如编写“巷道断面”应用程序,编写“采煤工作面布置图”应用程序等。
14.4.1新建图形
新建图形需要用到Documents对象的Add方法。下面的程序使用Add方法,以默认的模板文件建立一个新的图形。
Dim NewObject As AcadDocument
Set NewObject = ThisDrawing.Application.Documents.Add
14.4.2打开图形
要对已有的图形进行操作,必须先打开它。需要使用到Documents对象的Open方法。下面的程序使用Open方法来打开一个已有的图形文件“Mine.dwg”,其中Visual Basic的Dir函数用来在打开图形之前检查图形文件是否存在,如果不存在则显示警告信息。使用此例子时应该改变图形文件的名称和路径,指定此图形文件在自己系统中存在的实际位置。
Dim FileNameStr As String
FileNameStr = \If Dir(FileNameStr) <> \ Then
ThisDrawing.Application.Documents.Open FileNameStr Else
MsgBox \文件\不存在\End If
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 \这两个点之间的距离为:\14.4.4.2计算定义面积
在应用程序中计算面积,需要使用对象的Area属性,该属性可计算出圆弧、圆、椭圆、椭圆弧、面域、多段线或者封闭的区域的面积。计算出来的面积会随查询对象的类型不同有所不同:
? 封闭的多段线和多边形:对于有宽度的多段线或多边形,面积是以宽度的中心线为
边界来计算的;
? 非封闭对象:假设在非封闭对象的起点和终点间有一直线连接,所组成的封闭区域
的面积即为非封闭的面积;
? 面域:面域的面积等于面域中对象的共有部分的面积。
可以计算一个没有边界的封闭区域的面积,该区域由指定的二维或者三维点来定义,而这些点必须位于同一个平面上。计算由指定点组成的区域面积的步骤如下:
(1)使用GetPoint方法取得用户的指定点; (2)使用用户指定的点来创建无宽度的多段线,通常使用AddLightWeightPolyline方法创建无宽度的多段线;
(3)使用Area属性取得新建立的多段线的面积; (4)使用Erase方法删除多段线。
下面的程序接受用户输入8个点,然后使用这8个点来创建封闭多段线。再计算面积,将结果显示在信息框中。
Dim P1 As Variant Dim P2 As Variant Dim P3 As Variant Dim P4 As Variant Dim P5 As Variant Dim P6 As Variant Dim P7 As Variant Dim P8 As Variant Me.Hide '提示输入点
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点:\'根据这些点创建二维多段线
Dim PolyObj As AcadLWPolyline Dim PLPoint(0 To 15) As Double 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)
Set PolyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoint) PolyObj.Closed = True
ThisDrawing.Application.ZoomAll
MsgBox \这些点定义区域的面积为:\计算定义面积\
14.4.5用户输入
开发的应用程序在运行时,通常要用到用户输入的参数:字符串、点坐标值 、长度值等,或者是选项的关键字,例如上述需要用户指定的二维多段线的各点。在获得了输入信息后,再进行下上步工作。取得用户的输入需要用到Utility对象的一些方法和属性。Utility对象的有关用户输入的方法主要有:
? GetAngle:取得角度值; ? GetCornet:取得对角点;
? GetDistance:取得两点间的距离; ? GetEntity:取得实体对象; ? GetInput:取得用户的输入; ? GetInteger:取得整数; ? GetKeyword:取得关键词; ? GetOrientation:取得方向; ? GetPoint:取得点坐标; ? GetReal:取得实数;

