AutoCAD二次开发(VBA)_第1页
AutoCAD二次开发(VBA)_第2页
AutoCAD二次开发(VBA)_第3页
AutoCAD二次开发(VBA)_第4页
AutoCAD二次开发(VBA)_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AutoCAD二次开发(VBA)第14章VBA开发在采矿CAD绘图中的应 用AutoCAD在不但提供了强大的绘图功能,同 时也提供了一个功能强大的集成开以工具 Microsoft Visual Basic for Applications(VBA)。VBA是一个AutoCAD应用集成开发 环境,它提供了高质量的用户化编程能力,能够 使AutoCAD数据与其它VBA应用程序,VBA 的加入扩展了 AutoCAD集成用户化工具的能 力,它集成了 AutoLISP , Visual LISP 和 ObjectARX API等工具。这样,就为用户访问 AutoCAD软件的多种技术框架提供了新的选择 和

2、新的开放机会,可以按用户所需求的工作方式 开发应用程序。VBA开发环境是一个可视化开发环境。使用 VBA可以通过拖拽图标的方法,简单而可视化 地建立用户界面。可以使用 AutoCAD工具栏, 也可以使用标准 VBA界面工具创建新的工具 栏。AutoCAD 软件中的 ActiveX Automation 对 象模型十分有用。Autodesk开放了每一个AutoCAD对象模型,这些对象模型显示了每一 个对象的方法和属性,并能够依用户的愿望去编 程或用户化AutoCAD软件。学习本章内容最好具有 Visual Basic6.0基础(主要是相关控件的使用方法与 Basic语言语法 结构知识),如没有相

3、关基础知识,可在学习本 章之前参考相关书籍或在学习本章内容过程中 同步使用相关参考书。通过本章的学习,应了解 和掌握以下内容:? 了解 VBA。? 了解AutoCAD对象模型。?掌握绘制AutoCAD图形对象方法。?掌握编辑图形对象方法。?掌握绘制文字方法。?掌握标注方法。?掌握创建块与插入块。14.1 VBA 基础14.1.1 VBA管理器在当前AutoCAD进程中加载的所有 VBA工 程都可以用“VBA管理器”对话框来管理。这是 一个AutoCAD的管理工具,可以使用它来加载、卸载、保存、新建、嵌入和提取VBA工程。“VBA 管理器”对话框如图141所示。国1管理看(? IX研&

4、口】扉人C程uE 工1W7耗位!S1*推也:f , 】幡5 1<> I -IDI八一<1品“二餐分器可臼|帮一一j图14-1 “VB婚理器”对话框可以在AutoCAD的菜单栏中选择菜单【工具】 一【宏】fVBA管理器】来启动“VBA管理 器;也可以在AutoCAD命令提示中输入“vbrun 命令来启动。14.1.2加载已有的工程当把工程加载到AutoCAD图形中时,所有的 公用子程序也都成为可用的。内嵌在图形中的工 程当图形打开时也被加载,而保存在*.dvb文件 中的工程则必须另外单独加载。加载已有的 VBA工程文件步骤如下:(1)在“VBA管理器”对话框中单击【加载】 按钮

5、,弹出“打开VBA工程”对话框,如图14一2所示。图14-2 “打开VBA工程”对话框(2)在“打开VBA工程”对话框中选择想要加载的工程文件。在VBA管理器中只允许要开有 效的dvb文件。也可以在命令提示行输入“vbaload”命令来加 载工程文件,该命令同样弹出“打开VBA工程” 对话框。一个工程加载后,此工程要引用的其他 所有工程也都会被自动加载。另外,AutoCAD 再次启动时,会自动加载名称为acad.dvb的工 程文件。每次加载工程时,都会显示启用或者禁用工程内程序代码的选项提示,作为防范病毒的 措施,如图143所示。如果启用了带病毒的宏,程序中的病毒就会开始运行;如果禁 用了该宏

6、,工程仍然会被调入,但是该工程 中的所有程序均不能执行。区区C :即甘ii署 整r>L守M白之卫士*X#弓宏可Q,牛匚寺等,侑叫 ,&口产0 j更长艮看法的,胃X式可能在士 3£叁纱葩.I 1杓E借圮.如_.F葡阡色-E的工厕门间1可r"用豆豆1启星定值j图14 3工程加载提示14.1.3创建新工程新工程可以在任何时候创建,这时它是一个独 立、完整的工程。用户可以将它保存到工程文件 中,也可以将它嵌入到图形中。建立新的工程步骤如下:(1) “VBA管理器”对话框;(2)单击【新建】按钮,建立新工程。由于篇幅有限卸载工程、嵌入工程、提取工程 以及宏的相关知识自行

7、学习。14.2 VBA IDE开发环境在AutoCAD中加载了工程,就可以使用VBA 交互式开发环境VBA IDE来编辑宏工程的程序 代码、窗体和部件引用等元素,也可以在 VBAIDE中删除错误、调试和运行工程14.2.1 打开 VBA IDE可以使用下面的二种方法之一打开 VBA IDE 开发环境:(1)在命令提示行中输入"vbaide命令;(2)从AutoCAD的【工具】菜单中选择菜单【宏】"Visual Basi嘛辑器”;打开的VBA IDE编辑环境如图144所示, 在VBA IDE中可以对所有已加载的工程进行编 辑。图144 VBA IDE编辑环境14.2.2工程元

8、素每个工程都由许多不同的元素构成的。一个 工程可以包含的元素有对象、窗体、标准模块、 类模块和引用等。对象。对象元素是指 VBA工程的程序代码 将要存取的对象或者文件,例如,对AutoCAD VBA 工程而言,ThisDrawing 对 象代表的是当前的AutoCAD图形;窗体。窗体元素是放置其他对象的容器, 它 常常用于创建工程的自定义对话框;标准模块。标准模块也称为程序代码模块,或者简称模块。程序代码模块中包含程序代 码行和函数等;类模块。类模块元素是指所有包含本身的对 象,这些对象被定义为类别;引用。引用元素是指对其他工程或者程序的 使用参考。在VBA IDE编辑环境可以进行添加新元 素

9、、导入元素和编辑元素,具体操作方法及步骤 请自行学习。14.3 ActiveX 基础基于AutoCAD的VBA应用程序就是高级 程序语言的计算功能与AutoCAD的绘图功能结 合,使有VBA程序语句来控制对 AutoCAD图 形的操作。要很好地使用 VBA开发AutoCAD 应用程序,就必须熟悉与要开发的应用程序类型 相关的AutoCAD实体和对象集合、它们的属性 和操作方法,以及都有哪些资源可以使用。引外 还需要了解ActiveX相关语法知识。在本节学习 过程中要注意理解ActiveX对象模型。14.3.1 AutoCAD 对象模型对象是AutoCAD ActiveX接口的主要单位, 每一个

10、开放的对象均代表一个 AutoCAD的明确 组件,VBA应用程序就是通过AutoCAD的这些 对象来控制 AutoCAD 图形的。AutoCAD ActiveX接口有以下五种类型的对象:AutoCAD图形实体。例如直线、椭圆、圆 弧、文字与标注等;AutoCAD非图形实体。如线型、标注样式、 文字样式、表格样式等;AutoCAD结构实体。如图层与图块等实体;AutoCAD视图实体。如视图和视口等; 图形和AutoCAD VBA应用程序本身。AutoCAD的对象是分层的,这个分层结构就是应用程序能够操作的对象模型,其中根 对象是Application对象)对对象的操作是 依对象模型的分层关系进行

11、逐级操作的,对 象分层结构如图145所示。I AutoCAD匝用程亭IT茶绽配置模型空(词3DF&:a3BPoLySDS&LidArcC i r d eLintDimAli gned.HatchMTsxtRegionTestSolidH及严国工1 口1块集与卜- 块子兵集合 卜- 字典尺寸样式集合一-尺寸样式阻案含卜-13层集合卜 层技型集合- 线型注册应用程序集合-注册应用程序集合跄择集集合-选择集爻本样式集合-文本样式ucsM 合- XS视区集合-视区出图使用程序图14- 5对象分层结构14.3.1.1 Application 对象Application 对象是 AutoC

12、AD ActiveX Automation对象模型的根对象)在 Application对象中可以存取任何其他的对象, 也可以设置对 象的属性和使用方法。此外,Application对象 还可以通过Documents集合来访问AutoCAD图 形)通过MenuBar和MenuGroups集合来访问 AutoCAD菜单和工具条,以及通过VBA的属性 来访问VBA IDE 。对象的结构如图146所示。kutoCAD Appl icat i onUqC5 mt £1 U axMenuGroups图 146 Application 对象14.3.1.2Document 对象Document对象

13、也就是IAutoCAD 图形,用户可 以通过它来引用 AutoCAD的图形对象和 非图形对象。所有 Document对象都属于 Documents集合。用户通 过 Documents 集合可以 存取所有图形对象,例如fflod&SpacfeDt ct ionanisLayerFLoC on£i 目ucati ons.sttrtdAppsSelectionS«t5TeKtStyleUCSsVLewjortEPLolUtility直线、圆和圆弧等,图形对象的存取是通过 Documents 集合下的 ModelSpace 和 PaperSpace 集合来实现的。用户通过

14、Documents集合也可 以存取大部分的非图形对象,例如图层、线型和 文字样式等,这些非图形对象的存取是通过 Documents 集合下的 Layers、 Linetypes 和 TextStyles等集合来实现的。Documents集合的 结构如图147所示。14.3.1.3图形对象与非图形对象图形对象也就是图形实体,是组成AutoCAD图形的主要元素,它在 AutoCAD中 是可以看到的对象,如直线、圆、圆弧文字等。在VBA应用程序中创建这些图形对象,需要 使用Add方法对象,例如创建一个新的直线对 象,需要使用AddLine方法,创建一个圆弧对 象,需要使用AddArc方法;在VBA应

15、用程序 中编辑这些图形对象,可以使用附象本身的方法 和属性,每一个图形对象都有方法可以让应用程 序执行大部分的AutoCAD编辑命令,例如 Move、Erase 和 Mirror 方法等。非图形对象属于AutoCAD图形的一部分,但 是在绘图窗口中是不可见的,例如 Layers、Linetypes 和 SelectionSets对象等。在VBA应用程序中要创建这些非图形对象, 需要使用上一级的Collection对象的Add方法。 另外,每一个非图形对象均有特殊用途的方法和 属性,都有可以设置及存取扩展实体数据和删除 自己的方法。14.3.1.3Preference$ Plot 和 Utili

16、ty 对象Preferences集合是AutoCAD对象模型下的一 个重要对象集合,它的层结构如图148所示。AutoCAD kppli cati tin I 1 Fr efer eaces,PrefersD i splayFreference sDra.ftin£Frefer«ncesFilePreference sOpenSavePreference iProfilePreferencesSelecti onPref erien.ce sSys temPrg £«««« slTserH 148 Preferences 集

17、合Plot对象提供对 AutoCAD中页面设置”对话框设置值的存取,应用程序还能够通过该对象以不同的方法来打印图形。Utility对象提供应用程序中使用的输入函数 和转换函数,它在对象模型的层次结构如图14一 9所不。Xut*虹 Appl L VE. Frafmt-h =D 口EGE?d £tfTOEL一 处n IJtLlaty如图 149 Preference、Plot 和 Utility 对象14.3.2 引用对象引用对象是开发程序必需的工作。 可以直接 引用对象,也可以先定义一个变量,然后通过变 量来引用对象。如果是直接引用对象,需要把对 象引入到方法调用语句中。例如,在模型空

18、间中 生成一条直线,需要首先定义直线的起点和终点 坐标,然后调用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) = 0SetLineObj=ThisDrawing.ModelSpace.AddLine(Spoint, Epoint)如果是通过变量来引用对象,需要把变量定 义为所需的对象类型,然后将

19、变量设置为适当的 对象。它的格式一般为:Dim Variablename As ObjectTypeSet Variablename = Thisdrawing.< Object >14.3.3 存取 Application 对象Thisdrawing 对象提供了连接 Document对 象的功能)而根对象(Application 对象)在对 象模型结构层次中是位于Document对象之上的,因此如何存取根对象就成了一个主要问题。 这时需要用 Document对象的一个名为 Application 的属性)可以用该属性引用Application 对象。14.3.4 使用集合对象集合

20、对象是事先已经定义好的对象, 它包含 类似于对象的所有引用,也就是对象的所有引用 的上一级对象,具有Collection对象的集合如表 14 一 1所不。表141具有Collection对象的集合集合名称描述Documents当前AutoCAD中打开的全部图形ModelSpace模型空间中的全部图形对象PaperSpace当前图纸空间布局中的全部图形对象Block特殊块内的全部实体Blocks图形中的全部块对象Dictionaries图形中的全部字典DimStyles图形中的全部标注样式Groups图形中的全部对象组Hyperlinks指定实体的全部超级链接Layers图形中的全部图层Layo

21、uts图形中的全部布局MenuBar当前显示在AutoCAD中的全部菜单MenuGroups当前已加载的全部菜单和工具栏RegisteredApplications图形中全部已注册的应用程序SelectionSets图形中的全部选择集TextStyles图形中的全部文字样式UCSs图形中的全部用户坐标系Views图形中的全部视图Viewports图形中的全部视口14.3.4.1 存取集合几乎所有的集合对象都是通过 Document对象来存取的。Document对象包含每一个集合对象 的属性,用户可以对这些属性进行编辑和使用。例如,在下面的程序中定义了一个变量,然后将 变量设置为当前图形的Lay

22、ers集合,将来对该 变量的使用,就是对AutoCAD当前图形所有图 层的使用。Dim LayerCollection As AcadLayersSet LayerCollection = ThisDrawing.Layers例外的是,Documents、 MenuBar、MenuGroups 这几个集合对象是经过 Application 对象来存取的,Application 对象同 样包含了每一个集合的属性。14.3.4.2 向集合对象中添加新成员要在集合对象中添加新成员,需要使用Add方法。例如,在下面的程序中创建一个新图层并 将它添加到Layers集合中。Dim NewLayer As

23、AcadLayerSet NewLayer = ThisDrawing.Layers.Add("新图层")14.3.4.3 删除集合对象中成员要在集合对象中删除成员,需要使用Delete方法。例如,在下面的程序中删除图层集合中的 新图层”。Dim NewLayer As AcadLayerSet NewLayer = ThisDrawing.Layers.Add(" 新图层")NewLayer.Delete14.4编写程序要想能够快速、顺利地编写应用程序,需要自 学掌握以下内容:?属性、方法和事件的概念;?掌握引用对象的方法(通过父对象依次引用);?数据

24、类型的概念、创建方法及使用方法;?数组的定义与使用;? IfThenElse语句;? For.Next 语句;? Val()函数;具备了上述基本知识就可以在 VBA IDE环 境中轻松编写应用程序了,在编写采矿应用程序 时,要对图形进行分析,在 AutoCAD二次开发 过程中,针对固定式图形往往能够取得较好的效 果,比如编写 巷道断面”应用程序,编写 采煤 工作面布置图”应用程序等。14.4.1 新建图形新建图形需要用到Documents对象的Add方 法。下面的程序使用 Add方法,以默认的模板 文件建立一个新的图形。Dim NewObject As AcadDocumentSetNewOb

25、ject=ThisDrawing.Application.Documents.Add14.4.2 打开图形要对已有的图形进行操作,必须先打开它。 需要使用到Documents对象的Open方法。下面 的程序使用Open方法来打开一个已有的图形文 件 “Mine.dwg:其中 Visual Basic 的 Dir 函数用 来在打开图形之前检查图形文件是否存在,如果 不存在则显示警告信息。使用此例子时应该改变 图形文件的名称和路径,指定此图形文件在自己 系统中存在的实际位置。Dim FileNameStr As StringFileNameStr="c:MyDocumentMine.dw

26、g"If Dir(FileNameStr) <> "" ThenThisDrawing.Application.Documents.Open FileNameStrElseMsgBox "文件"& FileNameStr & " 不 存在“End If14.4.2 改变AutoCAD 窗口的位置和尺寸在VBA程序中,可以使用Application对象的 WindowTop、WindowLeft、Width 和 Height 属 性来定位AutoCAD窗口在屏幕左上角的位置和 宽度以及高度。下面的程序将 Au

27、toCAD窗口定 位在距屏幕左边和顶边均为10个像素的位置, 并将窗口的宽度与高度均设置为 500个像素。ThisDrawing.Application.WindowTop = 10ThisDrawing.Application.WindowLeft = 10ThisDrawing.Application.Width = 500ThisDrawing.Application.Height = 50014.4.3 最大化和最小化 AutoCAD窗口可以通过设置 Application 对象的 WindowState 属性来最大化或者最小化AutoCAD 窗口。该属性有三个可选值:acMax、 a

28、cMin、acNorm)分别对应 AutoCAD 窗口的最 大状态、最小状态和正常状态。ThisDrawing.Application.WindowState = acMaxThisDrawing.Application.WindowState=acMinThisDrawing.Application.WindowState=acNorm14.4.4 计算和信息查询使用Utility对象所提供的方法,可以快速地解 决一些数学计算问题,或者计算出图形上的点。 使用Utility对象所提供的方法,可以进行如下 工作:AngleFromXAxis方法:找出线与X轴的夹角;AngleToString方

29、法:将字符串表示的角度转换为实数值;DistanceToReal方法:将由字符串表示的距离值转换为单精度的实数值;CreateTypeArray方法:建立包含整数阵列、浮点数阵列、单精度阵列等的 Variant ;PolarPoint方法:查找出与已知点成指定角度和距离的点;TranslateCoordinates 方法: 将某点从一个 坐标系统转换为另一种坐标系统。14.4.4.1 计算点距离点距离的计算在应用程序中使用很多,查两条 平等直线之间的距离就需要通过点距离计算。下面的程序使用了 GetDistance方法来取得两 点之间的距离,然后使用MsgBox函数将计算结 果显示出来。Dim

30、 TwoPDist As DoubleMe.HideTwoPDist = ThisDrawing.Utility.GetDistance(,"指定两个点")MsgBox "这两个点之间的距离为:"&TwoPDist14.4.4.2 计算定义面积在应用程序中计算面积,需要使用对象的A rea属性,该属性可计算出圆弧、圆、椭圆、椭 圆弧、面域、多段线或者封闭的区域的面积。计 算出来的面积会随查询对象的类型不同有所不同:封闭的多段线和多边形:对于有宽度的多段 线或多边形,面积是以宽度的中心线为边界 来计算的;非封闭对象:假设在非封闭对象的起点和终 点间

31、有一直线连接,所组成的封闭区域的面 积即为非封闭的面积;面域:面域的面积等于面域中对象的共有部 分的面积。可以计算一个没有边界的封闭区域的面积,该 区域由指定的二维或者三维点来定义,而这些点 必须位于同一个平面上。计算由指定点组成的区 域面积的步骤如下:(1)使用GetPoint方法取得用户的指定点;(2)使用用户指定的点来创建无宽度的多段线,通常使用AddLightWeightPolyline 方法创建 无宽度的多段线;(3)使用Area属性取得新建立的多段线的面 积;(4)使用Erase方法删除多段线。下面的程序接受用户输入8个点,然后使用这 8个点来创建封闭多段线。再计算面积,将结果显示

32、在信息框中DimP1AsVariantDimP2AsVariantDimP3AsVariantDimP4AsVariantDimP5AsVariantDimP6AsVariantDimP7AsVariantDimP8AsVariantMe.Hide提示输入点P1 = ThisDrawing.Utility.GetPoint(, vbCrLf& "第1点:")P2 = ThisDrawing.Utility.GetPoint(, vbCrLf& "第2点:")P3 = ThisDrawing.Utility.GetPoint(, vbCrL

33、f& "第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

34、.Utility.GetPoint(, vbCrLf& "第8点:")'根据这些点创建二维多段线DimPolyObj As AcadLWPolylineDimPLPoint(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

35、(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.AddLightWeightPolyl ine(PLPoint)PolyObj.Closed = TrueThisDrawing.Application.ZoomAllMsgBox "这些点定义区域的面积为:"& PolyObj.Area,"计算定义面积&

36、quot;14.4.5用户输入开发的应用程序在运行时,通常要用到用户输 入的参数:字符串、点坐标值 、长度值等,或 者是选项的关键字,例如上述需要用户指定的二 维多段线的各点。在获得了输入信息后,再进行 下上步工作。取得用户的输入需要用到Utility对象的一些方法和属性。Utility对象的有关用户 输入的方法主要有:GetAngle :取得角度值;GetCornet :取得对角点;GetDistance:取得两点间的距离;GetEntity :取得实体对象;GetInput :取得用户的输入;GetInteger :取得整数;GetKeyword :取得关键词;GetOrientation

37、 :取得方向;GetPoint:取得点坐标;GetReal:取得实数;GetRemoteFile :取得远程文件名;GetString :取得字符串;GetSubEntity :取得子对象。下面就用以GetString方法和GetPoint方法分 别编写应用程序。1 .GetString 方法GetString方法提示用户在 AutoCAD的命令 输入一个字符串。该方法需要两个参数,第一个 参数控制输入字符串的空格,如果设置为0,表示不接受空格,一旦出现空格就可以终止输入; 如果设置为1,则字符串可以包含空格,需要使 用回车键来终止输入;第二个参数是提示字符。下面的程序显示 请输入你的姓名:”

38、的提示, 需要按下回车键来结束输入,输入的字符串允许 带有空格,输入的字符串存储在 InPutStr变量 中,并用信息框显示:Dim InPutStr As StringMe.HideInPutStr = ThisDrawing.Utility.GetString(1, vbCrLf & "请输入你的姓名:")MsgBox "输入的姓名是:"& InPutStr2 .GetPoint 方法GetPoint方法提示用户在 AutoCAD的命令提 示中输入点坐标。该方法需要用两个参数:起点 坐标(可选)和提示字符串。如果有起点, AutoCA

39、D从该点到取得的点绘制一条伸缩线, 如果需要控制用户输入格式,则在使用该方法之 前调用 InitializeUserInptu 方法。下面的程序提示输入两个点,然后使用这两个 点作为起点和终点绘直线。DimSP As VariantDimEP As VariantDimHint1 As StringDimHint2 As StringHint1 = vbCrLf & " 输入直线起点:"Hint2 = vbCrLf & " 输入直线终点:"Me.Hide取得第一点,基准点缺省SP = ThisDrawing.Utility.GetPoin

40、t(, Hintl)'使用上面取得的输入点作为基准点,再取得 一占 八、EP = ThisDrawing.Utility.GetPoint(SP, Hint2)使用两点绘制一直线ThisDrawing.ModelSpace.AddLine SP, EP ThisDrawing.Application.ZoomAll14.4.6使用AutoCAD命令行进行设置AutoCAD环境或者绘图等其他操 作,最简单的方法是使用SendCommand方法将 命令传送到AutoCAD的命令提示行。SendCommand方法需要一个参数,该参数即 为要传送的命令字符串,该字符串里必须包含有 命令所需要的

41、参数,并且按照命令的执行顺序依 次排列。其中字符串中的空格相当于 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 &q

42、uot;_circle 20,22,0 5 "ThisDrawing.SendCommand "_text 20,30,0 5 30 采矿工程"使用SendCommand方法需要注意的是,在每 个字符串的结尾都有一个空格,这是相当于输入 命令以后,按下Enter键,开始执行命令。14.4.7基本图形绘制与直接使用 AutoCAD 一样,在 VBA应用程 序对图形的操作中,首先是绘制图形对象,只有 有了图形对象,才能进行其他的操作,例如编辑、 打印等。在VBA应用程序中,可以绘制和编辑几乎所 有的AutoCAD实体对象,从最简单的点和直线 到多段线和文字,以及关联的

43、剖面线对象等。可 以将实体对象添加到当前的模型空间中,也可以将实体对象创建在图纸空间或者块中。在直接使用AutoCAD绘图时,用户可以使用 几种不同的方法来绘制相同的实体对象,但是, 在ActiveX Automation中,绘制一个实体只有 一种方法。使用CreateObject或Dim和New关 键字绘制实体对象的VB和VBA方法只能用来 创建AutoCAD Application 对象,所有其他 AutoCAD实体对象都必须使用 AutoCAD环境 中提供的Add或Add<objectname>方式来绘制。所有的图形对象都是创建在ModelSpace集合、PaperSpace

44、集合或者Block集合上的对象, 这三个集合分别对应 AutoCAD的模型空间、图 纸空间和块。ModelSpace集合是由对象的 ModelSpace属性返回;而PaperSpace集合则是 由对象的PaperSpace属性返回。在这些空间上 绘制图形,用户可以直接使用这些集合对象, 这 时需要将实体对象设置到当前激活图层。14.4.7.1 绘制点对象1 .点样式点的样式以及点的大小是可以设置的。AutoCAD提供了 20种点样式,点的大小尺寸可 以是相对于屏幕坐标,也可以是相对于绝对坐 标。系统变量是PDMODE和PDSIZE用于控制点对象的样式和大小。2 .绘制点对象DimPointOb

45、jAsAcadPointDimpP(0 To 2)AsDouble'点的位置pP(0) = 12pP(1) = 12pP(2) = 0'绘制点Set PointObj =ThisDrawing.ModelSpace.AddPoint(pP)设置系统变量,设置点的样式与大小ThisDrawing.SetVariable "pdmode", 34ThisDrawing.SetVariable "pdsize", 414.4.7.2 绘制直线直线是AutoCAD中最基本的对象,可以是单 段线段,也可以是连续折线段。使用指定坐标点 的方式绘制直线

46、较方便。默认的直线线型是 CONTINUOUS ,但在实际图形中,许多对象需 要使用其他的线型,在编写应用程序时也可以设 置线型。Dim LineObj As AcadLineDimSP(0 To 2)AsDoubleDimEP(0 To 2)AsDouble起点坐标SP(0) = 0SP(1) = 0SP(2) = 0终点坐标EP(0) = 100EP(1) = 50EP(2) = 0'绘制直线Set LineObj =ThisDrawing.ModelSpace.AddLine(SP, EP)可以使用LineObj对象的Linetype属性改变 线型,以满足编写应用程序需求。Dim

47、 LTname As StringLTname = "Center"加载线型文件"acadiso.lin "acadDoc.Linetypes.Load LTname, App.Path& "acadiso.lin"LineObj.Linetype = "Center"LineObj.LinetypeScale = 5LineObj.Update14.4.7.3 绘制圆绘制圆需要使用AddCircle方法,该方法需要 两个参数。第一个参数是设置圆的圆心坐标, 第 二个参数设置圆的半径。下面的程序绘制一个圆心

48、坐标为(10, 10, 0)、半径为100的圆。Dim CenP(0 To 2) As DoubleDim R As DoubleCenP(0) = 10CenP(1) = 10CenP(2) = 0R = 100CallThisDrawing.ModelSpace.AddCircle(CenP, R) 14.4.7.4绘制圆弧绘制圆弧需要使用AddArc方法,该方法需要 四个参数。第一个参数为圆心坐标,第二个参数 为圆弧半径,第三个参数为圆弧起始角度,第四 个参数为圆弧的终止角度。下面的程序要绘制一个1/4圆,圆心坐标为(100, 0, 0),圆弧半径为100,起始角度为0°,终止

49、角度为90 o这里需要注意的是,在编写应 用程序给定角度时,需要按弧度给变量赋值。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 绘制椭圆绘制椭圆需要使用AddElli

50、pse方法,该方法需 要三个参数。第一个参数为椭圆中心坐标,第二 个参数为主轴上一点,第三个参数为椭圆两轴的 半径比例,它是一个小于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.6CallThisDrawing.ModelSpace.AddEllipse(CenP, MajAxisP,

51、 Radt)请自行运行程序查看程序运行结果。14.4.7.6 绘制多段线多段线是由多条线段组成的组合对象, 这些线 段可以是直线段,也可以是圆弧段。在 VBA程 序中,有两种方法绘制多段线对象:AddPolyline 和 AddLightWeightPolyline ,其中,AddPolyline 方法可以绘制二维或三维多段线,它的参数是一 个多段线顶点的三维坐标;AddLightWeightPolyline 方法只能绘制二维多段线,它的参数是多段线顶点的二维坐标。下面的程序是应用 AddLightWeightPolyline 方法,以二维坐标点(10, 10)、(20, 20)、(30, 3

52、0)、(40, 40)与(50, 50)为顶点绘制一条二 维多段线,在开发采矿工程专业图形时,通常使 用AddLightWeightPolyline 方法绘制二维多段 线。Dim LWPLinObj As AcadLWPolyline Dim 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.AddLightWe

53、ightPolyl ine(Pp)14.4.7.7 绘制样条曲线样条曲线在AutoCAD中是绘制在世界坐标系 (WCS)中的XY平面上的。这种曲线在绘制 煤层底板等高线及在编制煤矿瓦斯地质图中应 用广泛。绘制样条曲线需要使用 AddSpline方法,该方法需要三个参数。第一个参数为样条曲 线顶点的坐标,第二个参数和第三个参数分别是 样条曲线起点和终点的切点坐标。下面的程序使用三点在模型空间中绘制样条曲线。其中样条曲线的起始相切点为(2, 3, 0), 终点切点为(3, 1, 0)。DimSpLinObj AsAcadSplineDimSTanP(0 To 2)As DoubleDimETanP

54、(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.Mod

55、elSpace.AddSpline(VetPoints, STanP, ETanP) 14.4.7.8创建剖面线剖面线是以某种图案按一定的方式填充图形 中的指定区域的对象。在 VBA应用程序中创建 剖面线的过程通常是这样的:首先创建 Hatch 对象,然后为其指定外部回路,也就是剖面线最 外层边界;最后指定要绘制剖面线的区域。要创 建Hatch对象,需要使用AddHatch方法,该方 法需要三个参数,分别设置Hatch对象的图案类 型、图案名称和关联性。使用AddHatch方法最 重要的是构建一个封闭的边界,例如编写应用程 序绘制喷射混凝土支护巷道断面图”,其中喷射 混凝土的图示表示中需要使用

56、 Hatch方法,在构 建封闭区域时较为麻烦。1 .剖面线的关联性与直接使用AutoCAD绘制剖面线一样,用户 的VBA程序也可以创建关联式或者非关联式的剖面线。关联式剖面线与它们的边界是相互联系 的,在边界修改时剖面线也自动更新;而非关联式剖面线与边界是相互独立的。关联性是在剖面 线创建时设置的,一旦创建剖面线后,用户可以 删除关联性,但是不能再创建关联性。要创建关联式剖面线,需要在使用 AddHatch 方法时,将它的第三个参数(Associativity )设 置为TRUE ,如果要创建非关联式剖面线,则需 要将第三个参数设置为FLASE。2 .剖面线图案类型用图案填充区域可以使用 AutoCAD提供的实 体填充和标准的预定义的剖面线图案, 也可以使 用定制的图案。在使用AddHatch方法时,第一 个参数即是指定剖面线图案的类型。该参数有三 个常数可选:AcHatchPatternTypePredefined :使用 AutoCAD 提供的定义在acad.pat文件中的 图案;AchatchPatternTypeUserDefin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论