AutoCAD二次开发(VBA)_第1页
AutoCAD二次开发(VBA)_第2页
AutoCAD二次开发(VBA)_第3页
AutoCAD二次开发(VBA)_第4页
AutoCAD二次开发(VBA)_第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 管理器 对话框如图 14 1 所示 图 14 1 VBA 管理器 对话框 可以在 AutoCAD 的菜单栏中选择菜单 工具 宏 VBA 管理器 来启动 VBA 管理器 也可以在 AutoCAD 命令提示中输入 vbrun 命令来启动 14 1 2 加载已有的工程加载已有的工程 当把工程加载到 AutoCAD 图形中时 所有的公用子程序也都成为可用的 内嵌在图形 中的工程当图形打开时也被加载 而保存在 dvb 文件中的工程则必须另外单独加载 加载 已有的 VBA 工程文件步骤如下 1 在 VBA 管理器 对话框中单击 加载 按钮 弹出 打开 VBA 工程 对话框 如 图 14 2 所示 图 14 2 打开 VBA 工程 对话框 2 在 打开 VBA 工程 对话框中选择想要加载的工程文件 在 VBA 管理器中只允许 要开有效的 dvb 文件 也可以在命令提示行输入 vbaload 命令来加载工程文件 该命令同样弹出 打开 VBA 工程 对话框 一个工程加载后 此工程要引用的其他所有工程也都会被自动加载 另外 AutoCAD 再次启动时 会自动加载名称为 acad dvb 的工程文件 每次加载工程时 都会显示启用或者禁用工程内程序代码的选项提示 作为防范 病毒的措施 如图 14 3 所示 如果启用了带病毒的宏 程序中的病毒就会开始 运行 如果禁用了该宏 工程仍然会被调入 但是该工程中的所有程序均不能执 行 图 14 3 工程加载提示 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 编辑环境如图 14 4 所示 在 VBA IDE 中可以对所有已加载的工程 进行编辑 图 14 4 VBA IDE 编辑环境 14 2 2 工程元素工程元素 每个工程都由许多不同的元素构成的 一个工程可以包含的元素有对象 窗体 标准 模块 类模块和引用等 对象 对象元素是指 VBA 工程的程序代码将要存取的对象或者文件 例如 对 AutoCAD VBA 工程而言 ThisDrawing 对象代表的是当前的 AutoCAD 图形 窗体 窗体元素是放置其他对象的容器 它常常用于创建工程的自定义对话框 标准模块 标准模块也称为程序代码模块 或者简称模块 程序代码模块中包含 程序代码行和函数等 类模块 类模块元素是指所有包含本身的对象 这些对象被定义为类别 引用 引用元素是指对其他工程或者程序的使用参考 在 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 接口有以下五种类型的对象 代码窗口 工程窗口 AutoCAD 图形实体 例如直线 椭圆 圆弧 文字与标注等 AutoCAD 非图形实体 如线型 标注样式 文字样式 表格样式等 AutoCAD 结构实体 如图层与图块等实体 AutoCAD 视图实体 如视图和视口等 图形和 AutoCAD VBA 应用程序本身 AutoCAD 的对象是分层的 这个分层结构 就是应用程序能够操作的对象模型 其中根对象是 Application 对象 对对象的操 作是依对象模型的分层关系进行逐级操作的 对象分层结构如图 14 5 所示 图 14 5 对象分层结构 14 3 1 1Application 对象 Application 对象是 AutoCAD ActiveX Automation 对象模型的根对象 在 Application 对 象中可以存取任何其他的对象 也可以设置对象的属性和使用方法 此外 Application 对 象还可以通过 Documents 集合来访问 AutoCAD 图形 通过 MenuBar 和 MenuGroups 集合 来访问 AutoCAD 菜单和工具条 以及通过 VBA 的属性来访问 VBA IDE 对象的结构如图 14 6 所示 图 14 6 Application 对象 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 中 是可以看到的对象 如直线 圆 圆弧文字等 在 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 7 Documents 集合 图 14 8 Preferences 集合 Plot 对象提供对 AutoCAD 中 页面设置 对话框设置值的存取 应用程序还能够通过 该对象以不同的方法来打印图形 Utility 对象提供应用程序中使用的输入函数和转换函数 它在对象模型的层次结构如 图 14 9 所示 如图 14 9 Preference Plot 和 Utility 对象 14 3 2 引用对象引用对象 引用对象是开发程序必需的工作 可以直接引用对象 也可以先定义一个变量 然后 通过变量来引用对象 如果是直接引用对象 需要把对象引入到方法调用语句中 例如 在模型空间中生成一条直线 需要首先定义直线的起点和终点坐标 然后调用 AddLine 方 法来创建直线对象 Dim Spoint 0 To 2 As Double Dim Epoint 0 To 2 As Double Dim LineObj As AcadLine Spoint 0 0 Spoint 1 0 Spoint 2 0 Epoint 0 100 Epoint 1 100 Epoint 2 0 Set LineObj ThisDrawing ModelSpace AddLine Spoint Epoint 如果是通过变量来引用对象 需要把变量定义为所需的对象类型 然后将变量设置为 适当的对象 它的格式一般为 Dim Variablename As ObjectType Set Variablename Thisdrawing 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 当前图形所有图层的使用 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 c MyDocument Mine dwg If Dir FileNameStr Then ThisDrawing Application Documents Open FileNameStr Else MsgBox 文件 FileNameStr 不存在 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 这两个点之间的距离为 TwoPDist 14 4 4 2 计算定义面积 在应用程序中计算面积 需要使用对象的 rea 属性 该属性可计算出圆弧 圆 椭圆 椭圆弧 面域 多段线或者封闭的区域的面积 计算出来的面积会随查询对象的类型不同 有所不同 封闭的多段线和多边形 对于有宽度的多段线或多边形 面积是以宽度的中心线 为边界来计算的 非封闭对象 假设在非封闭对象的起点和终点间有一直线连接 所组成的封闭区 域的面积即为非封闭的面积 面域 面域的面积等于面域中对象的共有部分的面积 可以计算一个没有边界的封闭区域的面积 该区域由指定的二维或者三维点来定义 而这些点必须位于同一个平面上 计算由指定点组成的区域面积的步骤如下 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 这些点定义区域的面积为 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 的命令输入一个字符串 该方法需要两个参数 第一个参数控制输入字符串的空格 如果设置为 0 表示不接受空格 一旦出现空格就可 以终止输入 如果设置为 1 则字符串可以包含空格 需要使用回车键来终止输入 第二 个参数是提示字符 下面的程序显示 请输入你的姓名 的提示 需要按下回车键来结束输入 输入的字 符串允许带有空格 输入的字符串存储在 InPutStr 变量中 并用信息框显示 Dim InPutStr As String Me Hide InPutStr ThisDrawing Utility GetString 1 vbCrLf 请输入你的姓名 MsgBox 输入的姓名是 InPutStr 2 GetPoint 方法 GetPoint 方法提示用户在 AutoCAD 的命令提示中输入点坐标 该方法需要用两个参数 起点坐标 可选 和提示字符串 如果有起点 AutoCAD 从该点到取得的点绘制一条伸缩 线 如果需要控制用户输入格式 则在使用该方法之前调用 InitializeUserInptu 方法 下面的程序提示输入两个点 然后使用这两个点作为起点和终点绘直线 Dim SP As Variant Dim EP As Variant Dim Hint1 As String Dim Hint2 As String Hint1 vbCrLf 输入直线起点 Hint2 vbCrLf 输入直线终点 Me Hide 取得第一点 基准点缺省 SP ThisDrawing Utility GetPoint Hint1 使用上面取得的输入点作为基准点 再取得一点 EP ThisDrawing Utility GetPoint SP Hint2 使用两点绘制一直线 ThisDrawing ModelSpace AddLine SP EP ThisDrawing 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 AcadPoint Dim pP 0 To 2 As Double 点的位置 pP 0 12 pP 1 12 pP 2 0 绘制点 Set PointObj ThisDrawing ModelSpace AddPoint pP 设置系统变量 设置点的样式与大小 ThisDrawing SetVariable pdmode 34 ThisDrawing SetVariable pdsize 4 14 4 7 2 绘制直线 直线是 AutoCAD 中最基本的对象 可以是单段线段 也可以是连续折线段 使用指定 坐标点的方式绘制直线较方便 默认的直线线型是 CONTINUOUS 但在实际图形中 许 多对象需要使用其他的线型 在编写应用程序时也可以设置线型 Dim LineObj As AcadLine Dim SP 0 To 2 As Double Dim EP 0 To 2 As Double 起点坐标 SP 0 0 SP 1 0 SP 2 0 终点坐标 EP 0 100 EP 1 50 EP 2 0 绘制直线 Set LineObj ThisDrawing ModelSpace AddLine SP EP 可以使用 LineObj 对象的 Linetype 属性改变线型 以满足编写应用程序需求 Dim LTname As String LTname Center 加载线型文件 acadiso lin acadDoc Linetypes Load LTname App Path acadiso lin LineObj Linetype Center LineObj LinetypeScale 5 LineObj Update 14 4 7 3 绘制圆 绘制圆需要使用 AddCircle 方法 该方法需要两个参数 第一个参数是设置圆的圆心坐 标 第二个参数设置圆的半径 下面的程序绘制一个圆心坐标为 10 10 0 半径为 100 的圆 Dim CenP 0 To 2 As Double Dim R As Double CenP 0 10 CenP 1 10 CenP 2 0 R 100 Call ThisDrawing ModelSpace AddCircle CenP R 14 4 7 4 绘制圆弧 绘制圆弧需要使用 AddArc 方法 该方法需要四个参数 第一个参数为圆心坐标 第 二个参数为圆弧半径 第三个参数为圆弧起始角度 第四个参数为圆弧的终止角度 下面的程序要绘制一个 1 4 圆 圆心坐标为 100 0 0 圆弧半径为 100 起始角度 为 0 终止角度为 90 这里需要注意的是 在编写应用程序给定角度时 需要按弧度给 变量赋值 Dim ArcObj As AcadArc Dim CenP 0 To 2 As Double Dim R As Double Dim SAng As Double Dim EAng As Double CenP 0 100 CenP 1 0 CenP 2 0 R 100 SAng 0 EAng 3 14159265 2 Set ArcObj ThisDrawing ModelSpace AddArc CenP R SAng EAng 14 4 7 5 绘制椭圆 绘制椭圆需要使用 AddEllipse 方法 该方法需要三个参数 第一个参数为椭圆中心坐 标 第二个参数为主轴上一点 第三个参数为椭圆两轴的半径比例 它是一个小于 1 的数 值 Dim CenP 0 To 2 As Double Dim MajAxisP 0 To 2 As Double Dim Radt As Double 定义椭圆参数 CenP 0 100 CenP 1 100 CenP 2 0 MajAxisP 0 130 MajAxisP 1 100 MajAxisP 2 0 Radt 0 6 Call 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 AcadLWPolyline Dim Pp 0 To 9 As Double Pp 0 10 Pp 1 10 Pp 2 20 Pp 3 20 Pp 4 30 Pp 5 30 Pp 6 40 Pp 7 40 Pp 8 50 Pp 9 50 Set LWPLinObj ThisDrawing ModelSpace AddLightWeightPolyline Pp 14 4 7 7 绘制样条曲线 样条曲线在 AutoCAD 中是绘制在世界坐标系 WCS 中的 XY 平面上的 这种曲线 在绘制煤层底板等高线及在编制煤矿瓦斯地质图中应用广泛 绘制样条曲线需要使用 AddSpline 方法 该方法需要三个参数 第一个参数为样条曲线顶点的坐标 第二个参数和 第三个参数分别是样条曲线起点和终点的切点坐标 下面的程序使用三点在模型空间中绘制样条曲线 其中样条曲线的起始相切点为 2 3 0 终点切点为 3 1 0 Dim SpLinObj As AcadSpline Dim STanP 0 To 2 As Double Dim ETanP 0 To 2 As Double Dim VetPoints 0 To 8 As Double STanP 0 2 STanP 1 3 STanP 2 0 ETanP 0 3 ETanP 1 1 ETanP 2 0 VetPoints 0 0 6 VetPoints 1 0 9 VetPoints 2 0 VetPoints 3 4 5 VetPoints 4 6 VetPoints 5 0 VetPoints 6 12 VetPoints 7 1 VetPoints 8 0 Set 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 方法时 第一个参数即是指定剖面线图案的类型 该参数有三个常数可选 AcHatchPatternTypePredefined 使用 AutoCAD 提供的定义在 acad pat 文件中的图 案 AchatchPatternTypeUserDefined 使用当前线型定义的剖面线的图案 AcHatchPatternTypeCustomDefined 使用用户定义的 PAT 文件中的图案 3 剖面线图案名称 在使用 AutoCAD 方法时 第二个参数即是指定剖面线图案的名称 该名称在所选的 图案类型中必须是有效的名称 14 4 7 9 定义剖面线边界 在创建了 Hatch 对象后 就可以添加剖面线的边界 剖面线的边界可以是直线 弧 圆 二维多段线等 以及多个对象的组合 第一个添加的边界必须是最外侧边界 它定义了剖面线的最外面范围 要加入最外侧 边界 需要使用剖面线对象的 AppendOuterLoop 方法 在定义最外侧边界线后 可以继续 加入内部世界 这时需要使用剖面线对象的 AppendInnerLoop 方法 AppendOuterLoop 方法和 AppendInnerLoop 方法均需要一个参数 该参数是构成回路 的图形对象数据矩阵 内部边界定义的是剖面线内孤立的对象 称为孤岛 Hatch 对象如 何处理这些岛是根据剖面线对象的 HatchStyle 属性的设置值而定 HatchStyle 属性可以设 置的值及描述如表 14 2 所示 表 14 2 剖面线样式 HatchStyle描述 Normal 指定标准样式或正常 此样式由最外面区域边界向内创建剖 面线 如果 AutoCAD 碰到内部边界 会关闭剖面线 直到 碰到另一个边界 Outer 填满最外面区域 此样式也是从区域最外边界向内创建剖面 线 但是一旦遇到内部边界即关闭剖面线 不再向里填充 Ignore忽略内部边界 此样式使剖面线通过所有的内部对象 当完成定义剖面线后 必须要先计算后才能显示 这需要执行 Evaluate 方法 下面的 应用程序是在模型空间中绘制关联的剖面线 Dim HatchObj As AcadHatch Dim PatternName As String Dim PatternType As Long Dim PolyObj2 0 To 0 As AcadEntity Dim VetPoint2 0 To 14 As Double 定义多段线顶点的图案名称 VetPoint2 0 50 VetPoint2 1 50 VetPoint2 2 0 VetPoint2 3 80 VetPoint2 4 50 VetPoint2 5 0 VetPoint2 6 80 VetPoint2 7 60 VetPoint2 8 0 VetPoint2 9 50 VetPoint2 10 60 VetPoint2 11 0 VetPoint2 12 50 VetPoint2 13 50 VetPoint2 14 0 PatternName solid PatternType 0 创建多段线 Set PolyObj2 0 ThisDrawing ModelSpace AddPolyline VetPoint2 创建剖面线对象 Set HatchObj ThisDrawing ModelSpace AddHatch PatternType PatternName True 给剖面线对象赋边界 HatchObj AppendOuterLoop PolyObj2 HatchObj Evaluate 14 4 8 编辑图形对象编辑图形对象 14 4 8 1 偏移对象 如果要偏移对象 需要使用 Offset 方法 对象的 Offset 方法需要一个重要的参数 距 离值 如果距离值为正值 则向外偏移绘制一个较大的曲线 即新对象的曲率半径比原对 象的大 如果距离是负值 那么 AutoCAD 会以原对象偏移绘制出一个 较小 的曲线 也就 是新对象曲率半径更小 如果距离值无效 则会返回一个错误 下面的程序先创建一条多段线和一个圆 然后偏移这两个对象 Dim CircleObj As AcadCircle Dim CenP 0 To 2 As Double Dim R As Double Dim PLineObj As AcadLWPolyline Dim PLPoints 0 To 11 As Double CenP 0 30 CenP 1 30 R 10 PLPoints 0 30 PLPoints 1 30 PLPoints 2 31 PLPoints 3 41 PLPoints 4 22 PLPoints 5 22 PLPoints 6 35 PLPoints 7 32 PLPoints 8 37 PLPoints 9 39 PLPoints 10 33 PLPoints 11 32 Set CircleObj ThisDrawing ModelSpace AddCircle CenP R Set PLineObj ThisDrawing ModelSpace AddLightWeightPolyline PLPoints PLineObj Closed True 偏移多段线和圆 Dim OffsetCircle As Variant Dim OffsetPline As Variant OffsetCircle CircleObj Offset 2 5 OffsetPline PLineObj Offset 1 14

温馨提示

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

评论

0/150

提交评论