




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14 章 VBA开发在采矿CAD绘图中的应用AutoCAD在不但提供了强大的绘图功能,同时也提供了一个功能强大的集成开以工具Microsoft Visual Basic for Applications(VBA)。VBA是一个AutoCAD应用集成开发环境,它提供了高质量的用户化编程能力,能够使AutoCAD数据与其它VBA应用程序,VBA的加入扩展了AutoCAD集成用户化工具的能力,它集成了AutoLISP,Visual LISP和ObjectARX API等工具。这样,就为用户访问AutoCAD软件的多种技术框架提供了新的选择和新的开放机会,可以按用户所需求的工作方式开发应用程序。VBA开发环境是一个可视化开发环境。使用VBA可以通过拖拽图标的方法,简单而可视化地建立用户界面。可以使用AutoCAD工具栏,也可以使用标准VBA界面工具创建新的工具栏。AutoCAD软件中的ActiveX Automation对象模型十分有用。Autodesk开放了每一个AutoCAD对象模型,这些对象模型显示了每一个对象的方法和属性,并能够依用户的愿望去编程或用户化AutoCAD软件。学习本章内容最好具有Visual Basic6.0基础(主要是相关控件的使用方法与Basic语言语法结构知识),如没有相关基础知识,可在学习本章之前参考相关书籍或在学习本章内容过程中同步使用相关参考书。通过本章的学习,应了解和掌握以下内容: 了解VBA。 了解AutoCAD对象模型。 掌握绘制AutoCAD图形对象方法。 掌握编辑图形对象方法。 掌握绘制文字方法。 掌握标注方法。 掌握创建块与插入块。14.1 VBA基础14.1.1VBA管理器在当前AutoCAD进程中加载的所有VBA工程都可以用“VBA管理器”对话框来管理。这是一个AutoCAD的管理工具,可以使用它来加载、卸载、保存、新建、嵌入和提取VBA工程。“VBA管理器”对话框如图141所示。图141 “VBA管理器”对话框可以在AutoCAD的菜单栏中选择菜单【工具】【宏】【VBA管理器】来启动“VBA管理器;也可以在AutoCAD命令提示中输入“vbrun”命令来启动。14.1.2加载已有的工程当把工程加载到AutoCAD图形中时,所有的公用子程序也都成为可用的。内嵌在图形中的工程当图形打开时也被加载,而保存在*.dvb文件中的工程则必须另外单独加载。加载已有的VBA工程文件步骤如下:(1)在“VBA管理器”对话框中单击【加载】按钮,弹出“打开VBA工程”对话框,如图142所示。图142 “打开VBA工程”对话框(2)在“打开VBA工程”对话框中选择想要加载的工程文件。在VBA管理器中只允许要开有效的dvb文件。也可以在命令提示行输入“vbaload”命令来加载工程文件,该命令同样弹出“打开VBA工程”对话框。一个工程加载后,此工程要引用的其他所有工程也都会被自动加载。另外,AutoCAD再次启动时,会自动加载名称为acad.dvb的工程文件。u 每次加载工程时,都会显示启用或者禁用工程内程序代码的选项提示,作为防范病毒的措施,如图143所示。如果启用了带病毒的宏,程序中的病毒就会开始运行;如果禁用了该宏,工程仍然会被调入,但是该工程中的所有程序均不能执行。图143 工程加载提示14.1.3创建新工程新工程可以在任何时候创建,这时它是一个独立、完整的工程。用户可以将它保存到工程文件中,也可以将它嵌入到图形中。建立新的工程步骤如下:(1)“VBA管理器”对话框;(2)单击【新建】按钮,建立新工程。由于篇幅有限卸载工程、嵌入工程、提取工程以及宏的相关知识自行学习。14.2 VBA IDE开发环境在AutoCAD中加载了工程,就可以使用VBA交互式开发环境VBA IDE来编辑宏工程的程序代码、窗体和部件引用等元素,也可以在VBA IDE中删除错误、调试和运行工程。14.2.1打开VBA IDE可以使用下面的二种方法之一打开VBA IDE开发环境:(1)在命令提示行中输入“vbaide”命令;(2)从AutoCAD的【工具】菜单中选择菜单【宏】“Visual Basic编辑器”;打开的VBA IDE编辑环境如图144所示,在VBA IDE中可以对所有已加载的工程进行编辑。代码窗口工程窗口图144 VBA IDE编辑环境14.2.2工程元素每个工程都由许多不同的元素构成的。一个工程可以包含的元素有对象、窗体、标准模块、类模块和引用等。u 对象。对象元素是指VBA工程的程序代码将要存取的对象或者文件,例如,对AutoCAD VBA工程而言,ThisDrawing对象代表的是当前的AutoCAD图形;u 窗体。窗体元素是放置其他对象的容器,它常常用于创建工程的自定义对话框;u 标准模块。标准模块也称为程序代码模块,或者简称模块。程序代码模块中包含程序代码行和函数等;u 类模块。类模块元素是指所有包含本身的对象,这些对象被定义为类别;u 引用。引用元素是指对其他工程或者程序的使用参考。在VBA IDE编辑环境可以进行添加新元素、导入元素和编辑元素,具体操作方法及步骤请自行学习。14.3 ActiveX基础基于AutoCAD的VBA应用程序就是高级程序语言的计算功能与AutoCAD的绘图功能结合,使有VBA程序语句来控制对AutoCAD图形的操作。要很好地使用VBA开发AutoCAD应用程序,就必须熟悉与要开发的应用程序类型相关的AutoCAD实体和对象集合、它们的属性和操作方法,以及都有哪些资源可以使用。引外还需要了解ActiveX相关语法知识。在本节学习过程中要注意理解ActiveX对象模型。14.3.1AutoCAD对象模型对象是AutoCAD ActiveX接口的主要单位,每一个开放的对象均代表一个AutoCAD的明确组件,VBA应用程序就是通过AutoCAD的这些对象来控制AutoCAD图形的。AutoCAD ActiveX接口有以下五种类型的对象:u AutoCAD图形实体。例如直线、椭圆、圆弧、文字与标注等;u AutoCAD非图形实体。如线型、标注样式、文字样式、表格样式等;u AutoCAD结构实体。如图层与图块等实体;u AutoCAD视图实体。如视图和视口等;u 图形和AutoCAD VBA应用程序本身。AutoCAD的对象是分层的,这个分层结构就是应用程序能够操作的对象模型,其中根对象是Application对象,对对象的操作是依对象模型的分层关系进行逐级操作的,对象分层结构如图145所示。图145 对象分层结构14.3.1.1Application对象Application对象是AutoCAD ActiveX Automation对象模型的根对象,在Application对象中可以存取任何其他的对象,也可以设置对象的属性和使用方法。此外,Application对象还可以通过Documents集合来访问AutoCAD图形,通过MenuBar和MenuGroups集合来访问AutoCAD菜单和工具条,以及通过VBA的属性来访问VBA IDE。对象的结构如图146所示。图146 Application对象14.3.1.2Document对象Document对象也就是AutoCAD图形,用户可以通过它来引用AutoCAD的图形对象和非图形对象。所有Document对象都属于Documents集合。用户通过Documents集合可以存取所有图形对象,例如直线、圆和圆弧等,图形对象的存取是通过Documents集合下的ModelSpace和PaperSpace集合来实现的。用户通过Documents集合也可以存取大部分的非图形对象,例如图层、线型和文字样式等,这些非图形对象的存取是通过Documents集合下的Layers、Linetypes和TextStyles等集合来实现的。Documents集合的结构如图147所示。14.3.1.3图形对象与非图形对象 图形对象也就是图形实体,是组成AutoCAD图形的主要元素,它在AutoCAD中是可以看到的对象,如直线、圆、圆弧文字等。图147 Documents集合在VBA应用程序中创建这些图形对象,需要使用Add方法对象,例如创建一个新的直线对象,需要使用AddLine方法,创建一个圆弧对象,需要使用AddArc方法;在VBA应用程序中编辑这些图形对象,可以使用对象本身的方法和属性,每一个图形对象都有方法可以让应用程序执行大部分的AutoCAD编辑命令,例如Move、Erase和Mirror方法等。非图形对象属于AutoCAD图形的一部分,但是在绘图窗口中是不可见的,例如Layers、Linetypes和SelectionSets对象等。在VBA应用程序中要创建这些非图形对象,需要使用上一级的Collection对象的Add方法。另外,每一个非图形对象均有特殊用途的方法和属性,都有可以设置及存取扩展实体数据和删除自己的方法。14.3.1.3Preferences、Plot和Utility对象Preferences集合是AutoCAD对象模型下的一个重要对象集合,它的层结构如图148所示。图148 Preferences集合Plot对象提供对AutoCAD中 “页面设置”对话框设置值的存取,应用程序还能够通过该对象以不同的方法来打印图形。Utility对象提供应用程序中使用的输入函数和转换函数,它在对象模型的层次结构如图149所示。如图149 Preference、Plot和Utility对象14.3.2引用对象引用对象是开发程序必需的工作。可以直接引用对象,也可以先定义一个变量,然后通过变量来引用对象。如果是直接引用对象,需要把对象引入到方法调用语句中。例如,在模型空间中生成一条直线,需要首先定义直线的起点和终点坐标,然后调用AddLine方法来创建直线对象。Dim Spoint(0 To 2) As DoubleDim Epoint(0 To 2) As DoubleDim LineObj As AcadLineSpoint(0) = 0Spoint(1) = 0Spoint(2) = 0Epoint(0) = 100Epoint(1) = 100Epoint(2) = 0Set LineObj = ThisDrawing.ModelSpace.AddLine(Spoint, Epoint)如果是通过变量来引用对象,需要把变量定义为所需的对象类型,然后将变量设置为适当的对象。它的格式一般为:Dim Variablename As ObjectTypeSet Variablename = Thisdrawing.14.3.3存取Application对象Thisdrawing对象提供了连接Document对象的功能,而根对象(Application对象)在对象模型结构层次中是位于Document对象之上的,因此如何存取根对象就成了一个主要问题。这时需要用Document对象的一个名为Application的属性,可以用该属性引用Application对象。14.3.4使用集合对象集合对象是事先已经定义好的对象,它包含类似于对象的所有引用,也就是对象的所有引用的上一级对象,具有Collection对象的集合如表141所示。表141 具有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当前图形所有图层的使用。Dim LayerCollection As AcadLayersSet LayerCollection = ThisDrawing.Layers例外的是,Documents、MenuBar、MenuGroups这几个集合对象是经过Application对象来存取的,Application对象同样包含了每一个集合的属性。14.3.4.2向集合对象中添加新成员要在集合对象中添加新成员,需要使用Add方法。例如,在下面的程序中创建一个新图层并将它添加到Layers集合中。Dim NewLayer As AcadLayerSet NewLayer = ThisDrawing.Layers.Add(新图层)14.3.4.3删除集合对象中成员要在集合对象中删除成员,需要使用Delete方法。例如,在下面的程序中删除图层集合中的“新图层”。Dim NewLayer As AcadLayerSet NewLayer = ThisDrawing.Layers.Add(新图层)NewLayer.Delete14.4 编写程序要想能够快速、顺利地编写应用程序,需要自学掌握以下内容: 属性、方法和事件的概念; 掌握引用对象的方法(通过父对象依次引用); 数据类型的概念、创建方法及使用方法; 数组的定义与使用; If.Then.Else 语句; For.Next 语句; Val()函数;具备了上述基本知识就可以在VBA IDE环境中轻松编写应用程序了,在编写采矿应用程序时,要对图形进行分析,在AutoCAD二次开发过程中,针对固定式图形往往能够取得较好的效果,比如编写“巷道断面”应用程序,编写“采煤工作面布置图”应用程序等。14.4.1新建图形新建图形需要用到Documents对象的Add方法。下面的程序使用Add方法,以默认的模板文件建立一个新的图形。Dim NewObject As AcadDocumentSet NewObject = ThisDrawing.Application.Documents.Add14.4.2打开图形要对已有的图形进行操作,必须先打开它。需要使用到Documents对象的Open方法。下面的程序使用Open方法来打开一个已有的图形文件“Mine.dwg”,其中Visual Basic的Dir函数用来在打开图形之前检查图形文件是否存在,如果不存在则显示警告信息。使用此例子时应该改变图形文件的名称和路径,指定此图形文件在自己系统中存在的实际位置。Dim FileNameStr As StringFileNameStr = c:MyDocumentMine.dwgIf Dir(FileNameStr) Then ThisDrawing.Application.Documents.Open FileNameStrElse MsgBox 文件 & FileNameStr & 不存在End If14.4.2改变AutoCAD窗口的位置和尺寸在VBA程序中,可以使用Application对象的WindowTop、WindowLeft、Width和Height属性来定位AutoCAD窗口在屏幕左上角的位置和宽度以及高度。下面的程序将AutoCAD窗口定位在距屏幕左边和顶边均为10个像素的位置,并将窗口的宽度与高度均设置为500个像素。ThisDrawing.Application.WindowTop = 10ThisDrawing.Application.WindowLeft = 10ThisDrawing.Application.Width = 500ThisDrawing.Application.Height = 50014.4.3最大化和最小化AutoCAD窗口 可以通过设置Application对象的WindowState属性来最大化或者最小化AutoCAD窗口。该属性有三个可选值:acMax、acMin、acNorm,分别对应AutoCAD窗口的最大状态、最小状态和正常状态。ThisDrawing.Application.WindowState = acMaxThisDrawing.Application.WindowState = acMinThisDrawing.Application.WindowState = acNorm14.4.4计算和信息查询使用Utility对象所提供的方法,可以快速地解决一些数学计算问题,或者计算出图形上的点。使用Utility对象所提供的方法,可以进行如下工作:u AngleFromXAxis方法:找出线与X轴的夹角;u AngleToString方法:将字符串表示的角度转换为实数值;u DistanceToReal方法:将由字符串表示的距离值转换为单精度的实数值;u CreateTypeArray方法:建立包含整数阵列、浮点数阵列、单精度阵列等的Variant;u PolarPoint方法:查找出与已知点成指定角度和距离的点;u TranslateCoordinates方法:将某点从一个坐标系统转换为另一种坐标系统。14.4.4.1计算点距离点距离的计算在应用程序中使用很多,查两条平等直线之间的距离就需要通过点距离计算。下面的程序使用了GetDistance方法来取得两点之间的距离,然后使用MsgBox函数将计算结果显示出来。DimTwoPDist As DoubleMe.HideTwoPDist = ThisDrawing.Utility.GetDistance(, 指定两个点)MsgBox 这两个点之间的距离为: & TwoPDist14.4.4.2计算定义面积在应用程序中计算面积,需要使用对象的rea属性,该属性可计算出圆弧、圆、椭圆、椭圆弧、面域、多段线或者封闭的区域的面积。计算出来的面积会随查询对象的类型不同有所不同:u 封闭的多段线和多边形:对于有宽度的多段线或多边形,面积是以宽度的中心线为边界来计算的;u 非封闭对象:假设在非封闭对象的起点和终点间有一直线连接,所组成的封闭区域的面积即为非封闭的面积;u 面域:面域的面积等于面域中对象的共有部分的面积。可以计算一个没有边界的封闭区域的面积,该区域由指定的二维或者三维点来定义,而这些点必须位于同一个平面上。计算由指定点组成的区域面积的步骤如下:(1)使用GetPoint方法取得用户的指定点;(2)使用用户指定的点来创建无宽度的多段线,通常使用AddLightWeightPolyline方法创建无宽度的多段线;(3)使用Area属性取得新建立的多段线的面积;(4)使用Erase方法删除多段线。下面的程序接受用户输入8个点,然后使用这8个点来创建封闭多段线。再计算面积,将结果显示在信息框中。Dim P1 As VariantDim P2 As VariantDim P3 As VariantDim P4 As VariantDim P5 As VariantDim P6 As VariantDim P7 As VariantDim P8 As VariantMe.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 AcadLWPolylineDim PLPoint(0 To 15) As DoublePLPoint(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 = TrueThisDrawing.Application.ZoomAllMsgBox 这些点定义区域的面积为: & PolyObj.Area, , 计算定义面积14.4.5用户输入开发的应用程序在运行时,通常要用到用户输入的参数:字符串、点坐标值 、长度值等,或者是选项的关键字,例如上述需要用户指定的二维多段线的各点。在获得了输入信息后,再进行下上步工作。取得用户的输入需要用到Utility对象的一些方法和属性。Utility对象的有关用户输入的方法主要有:u GetAngle:取得角度值;u GetCornet:取得对角点;u GetDistance:取得两点间的距离;u GetEntity:取得实体对象;u GetInput:取得用户的输入;u GetInteger:取得整数;u GetKeyword:取得关键词;u GetOrientation:取得方向;u GetPoint:取得点坐标;u GetReal:取得实数;u GetRemoteFile:取得远程文件名;u GetString:取得字符串;u GetSubEntity:取得子对象。下面就用以GetString方法和GetPoint方法分别编写应用程序。1.GetString方法GetString方法提示用户在AutoCAD的命令输入一个字符串。该方法需要两个参数,第一个参数控制输入字符串的空格,如果设置为0,表示不接受空格,一旦出现空格就可以终止输入;如果设置为1,则字符串可以包含空格,需要使用回车键来终止输入;第二个参数是提示字符。下面的程序显示“请输入你的姓名:”的提示,需要按下回车键来结束输入,输入的字符串允许带有空格,输入的字符串存储在InPutStr变量中,并用信息框显示:Dim InPutStr As StringMe.HideInPutStr = ThisDrawing.Utility.GetString(1, vbCrLf & 请输入你的姓名:)MsgBox 输入的姓名是: & InPutStr2.GetPoint方法GetPoint方法提示用户在AutoCAD的命令提示中输入点坐标。该方法需要用两个参数:起点坐标(可选)和提示字符串。如果有起点,AutoCAD从该点到取得的点绘制一条伸缩线,如果需要控制用户输入格式,则在使用该方法之前调用InitializeUserInptu方法。下面的程序提示输入两个点,然后使用这两个点作为起点和终点绘直线。Dim SP As VariantDim EP As VariantDim Hint1 As StringDim Hint2 As StringHint1 = vbCrLf & 输入直线起点:Hint2 = vbCrLf & 输入直线终点:Me.Hide取得第一点,基准点缺省SP = ThisDrawing.Utility.GetPoint(, Hint1)使用上面取得的输入点作为基准点,再取得一点EP = ThisDrawing.Utility.GetPoint(SP, Hint2)使用两点绘制一直线ThisDrawing.ModelSpace.AddLine SP, EPThisDrawing.Application.ZoomAll 14.4.6使用AutoCAD命令行进行设置AutoCAD环境或者绘图等其他操作,最简单的方法是使用SendCommand方法将命令传送到AutoCAD的命令提示行。SendCommand方法需要一个参数,该参数即为要传送的命令字符串,该字符串里必须包含有命令所需要的参数,并且按照命令的执行顺序依次排列。其中字符串中的空格相当于ASCII码,表示在键盘上按下了Enter键。与AutoLISP环境不同,在VBA程序中,如果调用SendCommand,但没有参数是无效的。下面的程序先在点(10,10,0)和点(20,22,0)之间绘制一直线,然后以点(20,22,0)为圆心,绘制一个半径为5的圆,最后以点(20,30,0)为起点,以字高为5,倾斜30绘制文字。ThisDrawing.SendCommand _line 10,10,0 20,22,0 ThisDrawing.SendCommand _circle 20,22,0 5 ThisDrawing.SendCommand _text 20,30,0 5 30 采矿工程使用SendCommand方法需要注意的是,在每个字符串的结尾都有一个空格,这是相当于输入命令以后,按下Enter键,开始执行命令。14.4.7基本图形绘制与直接使用AutoCAD一样,在VBA应用程序对图形的操作中,首先是绘制图形对象,只有有了图形对象,才能进行其他的操作,例如编辑、打印等。在VBA应用程序中,可以绘制和编辑几乎所有的AutoCAD实体对象,从最简单的点和直线到多段线和文字,以及关联的剖面线对象等。可以将实体对象添加到当前的模型空间中,也可以将实体对象创建在图纸空间或者块中。在直接使用AutoCAD绘图时,用户可以使用几种不同的方法来绘制相同的实体对象,但是,在ActiveX Automation中,绘制一个实体只有一种方法。使用CreateObject或Dim和New关键字绘制实体对象的VB和VBA方法只能用来创建AutoCAD Application对象,所有其他AutoCAD实体对象都必须使用AutoCAD环境中提供的Add或Add方式来绘制。所有的图形对象都是创建在ModelSpace集合、PaperSpace集合或者Block集合上的对象,这三个集合分别对应AutoCAD的模型空间、图纸空间和块。ModelSpace集合是由对象的ModelSpace属性返回;而PaperSpace集合则是由对象的PaperSpace属性返回。在这些空间上绘制图形,用户可以直接使用这些集合对象,这时需要将实体对象设置到当前激活图层。14.4.7.1绘制点对象1.点样式点的样式以及点的大小是可以设置的。AutoCAD提供了20种点样式,点的大小尺寸可以是相对于屏幕坐标,也可以是相对于绝对坐标。系统变量是PDMODE和PDSIZE用于控制点对象的样式和大小。2.绘制点对象Dim PointObj As AcadPointDim pP(0 To 2) As Double点的位置pP(0) = 12pP(1) = 12pP(2) = 0绘制点Set PointObj = ThisDrawing.ModelSpace.AddPoint(pP)设置系统变量,设置点的样式与大小ThisDrawing.SetVariable pdmode, 34ThisDrawing.SetVariable pdsize, 414.4.7.2绘制直线直线是AutoCAD中最基本的对象,可以是单段线段,也可以是连续折线段。使用指定坐标点的方式绘制直线较方便。默认的直线线型是CONTINUOUS,但在实际图形中,许多对象需要使用其他的线型,在编写应用程序时也可以设置线型。Dim LineObj As AcadLineDim SP(0 To 2) As DoubleDim EP(0 To 2) As Double起点坐标SP(0) = 0SP(1) = 0SP(2) = 0终点坐标EP(0) = 100EP(1) = 50EP(2) = 0绘制直线Set LineObj = ThisDrawing.ModelSpace.AddLine(SP, EP)可以使用LineObj对象的Linetype属性改变线型,以满足编写应用程序需求。Dim LTname As StringLTname = Center加载线型文件“acadiso.lin” acadDoc.Linetypes.Load LTname, App.Path & acadiso.lin LineObj.Linetype = Center LineObj.LinetypeScale = 5 LineObj.Update14.4.7.3绘制圆绘制圆需要使用AddCircle方法,该方法需要两个参数。第一个参数是设置圆的圆心坐标,第二个参数设置圆的半径。下面的程序绘制一个圆心坐标为(10,10,0)、半径为100的圆。Dim CenP(0 To 2) As DoubleDim R As DoubleCenP(0) = 10CenP(1) = 10CenP(2) = 0R = 100Call ThisDrawing.ModelSpace.AddCircle(CenP, R)14.4.7.4绘制圆弧绘制圆弧需要使用AddArc方法,该方法需要四个参数。第一个参数为圆心坐标,第二个参数为圆弧半径,第三个参数为圆弧起始角度,第四个参数为圆弧的终止角度。下面的程序要绘制一个1/4圆,圆心坐标为(100,0,0),圆弧半径为100,起始角度为0,终止角度为90。这里需要注意的是,在编写应用程序给定角度时,需要按弧度给变量赋值。Dim ArcObj As AcadArcDim CenP(0 To 2) As DoubleDim R As DoubleDim SAng As DoubleDim EAng As DoubleCenP(0) = 100CenP(1) = 0CenP(2) = 0R = 100SAng = 0EAng = 3.14159265 / 2Set ArcObj = ThisDrawing.ModelSpace.AddArc(CenP, R, SAng, EAng)14.4.7.5绘制椭圆绘制椭圆需要使用AddEllipse方法,该方法需要三个参数。第一个参数为椭圆中心坐标,第二个参数为主轴上一点,第三个参数为椭圆两轴的半径比例,它是一个小于1的数值。Dim CenP(0 To 2) As DoubleDim MajAxisP(0 To 2) As DoubleDim Radt As Double定义椭圆参数CenP(0) = 100CenP(1) = 100CenP(2) = 0MajAxisP(0) = 130MajAxisP(1) = 100MajAxisP(2) = 0Radt = 0.6Call ThisDrawing.ModelSpace.AddEllipse(CenP, MajAxisP, Radt)请自行运行程序查看程序运行结果。14.4.7.6绘制多段线多段线是由多条线段组成的组合对象,这些线段可以是直线段,也可以是圆弧段。在VBA程序中,有两种方法绘制多段线对象:AddPolyline和AddLightWeightPolyline,其中,AddPolyline方法可以绘制二维或三维多段线,它的参数是一个多段线顶点的三维坐标;AddLightWeightPolyline方法只能绘制二维多段线,它的参数是多段线顶点的二维坐标。下面的程序是应用AddLightWeightPolyline方法,以二维坐标点(10,10)、(20,20)、(30,30)、(40,40)与(50,50)为顶点绘制一条二维多段线,在开发采矿工程专业图形时,通常使用AddLightWeightPolyline方法绘制二维多段线。Dim LWPLinObj As AcadLWPolylineDim Pp(0 To 9) As DoublePp(0) = 10: Pp(1) = 10Pp(2) = 20: Pp(3) = 20Pp(4) = 30: Pp(5) = 30Pp(6) = 40: Pp(7) = 40Pp(8) = 50: Pp(9) = 50Set LWPLinObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pp)14.4.7.7绘制样条曲线样条曲线在AutoCAD中是绘制在世界坐标系(WCS)中的XY平面上的。这种曲线在绘制煤层底板等高线及在编制煤矿瓦斯地质图中应用广泛。绘制样条曲线需要使用AddSpline方法,该方法需要三个参数。第一个参数为样条曲线顶点的坐标,第二个参数和第三个参数分别是样条曲线起点和终点的切点坐标。下面的程序使用三点在模型空间中绘制样条曲线。其中样条曲线的起始相切点为(2,3,0),终点切点为(3,1,0)。Dim SpLinObj As AcadSplineDim STanP(0 To 2) As DoubleDim ETanP(0 To 2) As DoubleDim VetPoints(0 To 8) As DoubleSTanP(0) = 2STanP(1) = 3STanP(2) = 0ETanP(0) = 3ETanP(1) = 1ETanP(2) = 0VetPoints(0) = 0.6VetPoints(1) = 0.9VetPoints(2) = 0VetPoints(3) = 4.5VetPoints(4) = 6VetPoints(5) = 0VetPoints(6) = 12VetPoints(7) = 1VetPoints(8) = 0Set SpLinObj = ThisDrawing.ModelSpace.AddSpline(VetPoints, STanP, ETanP)14.4.7.8创建剖面线剖面线是以某种图案按一定的方式填充图形中的指定区域的对象。在VBA应用程序中创建剖面线的过程通常是这样的:首先创建Hatch对象,然后为其指定外部回路,也就是剖面线最外层边界;最后指定要绘制剖面线的区域。要创建Hatch对象,需要使用AddHatch方法,该方法需要三个参数,分别设置Hatch对象的图案类型、图案名称和关联性。使用AddHatch方法最重要的是构建一个封闭的边界,例如编写应用程序绘制“喷射混凝土支护巷道断面图”,其中喷射混凝土的图示表示中需要使用Hatch方法,在构建封闭区域时较为麻烦。1.剖面线的关联性与直接使用AutoCAD绘制剖面线一样,用户的VBA程序也可以创建关联式或者非关联式的剖面线。关联式剖面线与它们的边界是相互联系的,在边界修改时剖面线也自动更新;而非关联式剖面线与边界是相互独立的。关联性是在剖面线创建时设置的,一旦创建剖面线后,用户可以删除关联性,但是不能再创建关联性。要创建关联式剖面线,需要在使用AddHatch方法时,将它的第三个参数(Associativity)设置为TRUE,如果要创建非关联式剖面线,则需要将第三个参数设置为FLASE。2.剖面线图案类型用图案填充区域可以使用AutoCAD提供的实体填充和标准的预定义的剖面线图案,也可以使用定制的图案。在使用AddHatch方法时,第一个参数即是指定剖面线图案的类型。该参数有三个常数可选:u AcHatchPatternTypePredefined:使用AutoCAD提供的定义在acad.pat文件中的图案;u AchatchPatternTypeUserDefined:使用当前线型定义的剖面线的图案;u AcHatchPatternTypeCustomDefined:使用用户定义的PAT文件中的图案。3.剖面线图案名称在使用AutoCAD方法时,第二个参数即是指定剖面线图案的名称。该名称在所选的图案类型中必须是有效的名称。14.4.7.9定义剖面线边界在创建了Hatch对象后,就可以添加剖面线的边界。剖面线的边界可以是直线、弧、圆、二维多段线等,以及多个对象的组合。第一个添加的边界必须是最外侧边界,它定义了剖面线的最外面范围。要加入最外侧边界,需要使用剖面线对象的AppendOuterLoop方法。在定义最外侧边界线后,可以继续加入内部世界,这时需要使用剖面线对象的AppendInnerLoop方法。AppendOuterLoop方法和AppendInnerLoop方法均需要一个参数,该参数是构成回路的图形对象数据矩阵。内部边界定义的是剖面线内孤立的对象,称为孤岛。Hatch对象如何处理这些岛是根据剖面线对象的HatchStyle属性的设置值而定。HatchStyle属性可以设置的值及描述如表142所示。表142 剖面线样式HatchStyle描述Normal指定标准样式或正常。此样式由最外面区域边界向内创建剖面线。如果AutoCAD碰到内部边界,会关闭剖面线,直到碰到另一个边界。Outer填满最外面区域。此样式也是从区域最外边界向内创建剖面线,但是一旦遇到内部边界即关闭剖面线,不再向里填充。Ignore忽略内部边界。此样式使剖面线通过所有的内部对象。当完成定义剖面线后,必须要先计算后才能显示,这需要执行Evaluate方法。下面的应用程序是在模型空间中绘制关联的剖面线。Dim HatchObj As AcadHatchDim PatternName As StringDim PatternType As LongDim PolyObj2(0 To 0) As AcadEntityDim VetPoint2(0 To 14) As Double定义多段线顶点的图案名称VetPoint2(0) = 50VetPoint2(1) = 50VetPoint2(2) = 0VetPoint2(3) = 80VetPoint2(4) = 50VetPoint2(5) = 0VetPoint2(6) = 80VetPoint2(7) = 60VetPoint2(8) = 0VetPoint2(9) = 50VetPoint2(10) = 60VetPoint2(11) = 0VetPoint2(12) = 50VetPoint2(13) = 50VetPoint2(14) = 0PatternName = solidPatternType = 0创建多段线Set PolyObj2(0) = ThisDrawing.ModelSpace.AddPolyline(VetPoint2)创建剖面线对象Set HatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, PatternName, True)给剖面线对象赋边界HatchObj.AppendOuterLoop (PolyObj2)HatchObj.Evaluate14.4.8编辑图形对象14.4.8.1偏移对象如果要偏移对象,需要使用Offset方法。对象的Offset方法需要一个重要的参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年主管护师考试复习方案及试题与答案
- 2025年心脏病学专题知识竞赛答案及解析
- 2025年全国维修电工技师职业技能考试笔试试题含答案
- 2025年生物质能发电技术创新与市场潜力报告
- 2025年经济师考试金融高级经济实务试题及解答
- 2025年(初级)保育员考试题库及答案
- 新能源微电网2025:储能技术与智能电网融合研究报告
- 2025年大学社会体育指导与管理专业题库- 社会体育普及推广方案
- 2025年大学华文教育专业题库- 环境教育在大学语文教学中的应用
- 2025年大学科学教育专业题库- 大学生科学实践能力的提升
- 大米委托加工合同范本
- 学校物品捐赠协议书
- 2025-2030国内地热能行业市场发展现状及竞争格局与投资发展前景研究报告
- 《财务报表分析课件》
- 《科研经费的使用与管理》课件
- 超市售后服务管理制度
- 贵州省考试院2025年4月高三年级适应性考试数学试题及答案
- 钢筋修复方案
- 人工智能在生活中的应用课件
- 7.1.1 两条直线相交(教学设计)-(人教版2024)
- 销售技巧培训(完整)
评论
0/150
提交评论