




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 ActiveX Automation 基础知识要想有效地使用 AutoCAD ActiveX Automation,应该熟悉与要开发的应用程序类型相关的 AutoCAD 图元、对象和功能。对对象的图形和非图形特性了解得越多,通过 AutoCAD ActiveX Automation 来操作这些特性就越简单。请记住,只需按 F1 键即可访问 AutoCAD ActiveX Automation 帮助文件。如果在使用某个特定对象、方法或特性时遇到问题,请在 VBA IDE 中亮显该对象、方法或特性,然后按 F1 键。3.1 了解 AutoCAD 对象模型 对象为 AutoCAD ActiveX 接口的主要构件。每一个显露的对象均精确代表一个 AutoCAD 组件。AutoCAD ActiveX 接口中有许多不同类型的对象。例如:直线、圆弧、文字和标注等图形对象都是对象。 线型与标注样式等样式设置都是对象。 图层、编组和块等组织结构都是对象。 视图与视口等图形显示都是对象。 甚至图形和 AutoCAD 应用程序本身也是对象。 对象按照分层结构来组织,其根是 Application 对象。这种层次结构的视图称为“对象模型”。对象模型给出了上级对象与下级对象之间的访问关系。3.1.1 Application 对象Application 对象是 AutoCAD ActiveX Automation 对象模型的根对象。通过 Application 对象,用户可以访问任何其他的对象或任何对象指定的特性或方法。例如,Application 对象具有 Preferences 特性,该特性可以返回 Preferences 对象。通过此对象可以访问“选项”对话框中存储在注册表中的设置。(DatabasePreferences 对象包含存储在图形中的设置,稍后将会讨论这些内容。) 通过 Application 对象的其他特性,用户可以访问与应用程序相关的数据,例如应用程序的名称和版本,以及 AutoCAD 大小、位置和可见性。Application 对象的方法可以执行与应用程序相关的操作,例如列表显示、加载和卸载 ADS 与 ARX 应用程序,以及退出 AutoCAD。Application 对象还提供指向 AutoCAD 图形(通过 Documents 集合)、AutoCAD 菜单和工具栏(通过 MenuBar 和 MenuGroups 集合)以及 VBA IDE(通过 VBE 特性)的链接。Application 对象还是 ActiveX 接口的全局对象, 这表示 Application 对象的所有方法和特性都可以用于全局名称空间。3.1.2 Document 对象Document 对象(实际上就是 AutoCAD 图形)可以在 Documents 集合中找到,通过它,可以访问所有图形和大部分非图形 AutoCAD 对象。通过 ModelSpace 和 PaperSpace 集合可以访问图形对象(直线、圆、圆弧等),而通过具有类似名称的集合(例如 Layers、Linetypes 和 TextStyles)则可以访问非图形对象(图层、线型、文本样式等)。通过 Document 对象还可以访问 Plot 和 Utility 对象。要访问图形特性,请使用 Document 对象的 SummaryInfo 特性。3.1.3集合对象AutoCAD 将大部分对象进行编组,组成集合。虽然这些集合包含了不同类型的数据,但是可以使用相似的技术来处理它们。每一个集合都提供了向其中添加对象的方法。大多数集合是通过 Add 方法完成的。但添加图元对象通常使用名为 Add 的方法。例如,要添加直线,请使用 AddLine 方法。集合还有一些其他的常用方法和特性。Count 特性用于获取集合中的对象个数(3.1.4图形对象和非图形对象图形对象(也称为图元)是组成图形的可见对象(例如直线、圆、光栅图像等)。要创建这些对象,请使用相应的 Add 方法。要修改或查询这些对象,请使用对象本身的方法或特性。每一个图形对象都拥有允许应用程序执行大部分 AutoCAD 编辑命令(例如复制、删除、移动、镜像等)的方法。这些对象还提供了一些方法,用来设置和检索对象的扩展数据,亮显和更新对象,以及检索对象边框。图形对象具有诸如 Layer、Linetype、Color 和 Handle 之类的典型特性。还具有一些特有的特性,它们因对象类型不同而有所不同,例如 Center、Radius 和 Area。非图形对象是指属于图形的一部分但不可见的(提示性的)对象,例如 Layers、Linetypes、DimStyles、SelectionSets 等。要创建这些对象,请使用其上级集合对象的 Add 方法。要修改或查询这些对象,请使用对象本身的方法或特性。每一个非图形对象都有用于特定目的的方法和特性,都有设置和检索扩展数据以及删除自己的方法。3.1.5 Preferences、Plot 和 Utility 对象在 Preferences 对象下有一组对象,分别对应“选项”对话框中的一个选项卡。这些对象提供对“选项”对话框中所有存储在注册表中的设置的访问。DatabasePreferences 对象包含存储在图形中的设置。还可以利用 SetVariable 和 GetVariable 方法设置和修改选项(以及不属于“选项”对话框的系统变量)。关于设置选项的详细信息,请参见设置 AutoCAD 系统配置。可以通过 Plot 对象访问“打印”对话框中的设置,而且应用程序可以通过此对象使用各种方法打印图形。关于打印的详细信息,请参见打印图形。Utility 对象提供用户输入和转换函数。用户输入函数是提示用户在 AutoCAD 命令行中输入各种类型的数据(例如字符串、整数、实数、点等)的方法。转换函数是操作 AutoCAD 特有的数据类型(例如点和角度)以及处理字符串和数值的方法。关于用户输入函数的详细信息,请参见提示用户输入。3.1.6使用新增 AutoCAD 功能如果 Automation 工程使用了早期 AutoCAD 版本不具有的功能,则必须明确地声明要在工程中使用的 AutoCAD 接口。如果 Automation 工程包含接口的明确声明,并且这些接口是 AutoCAD 特定版本中的新增接口,请勿在 AutoCAD 的较早版本中使用该工程。3.2访问对象层次结构从 VBA 内访问对象层次结构比较容易, 因为 VBA 与当前的 AutoCAD 任务在同一个进程内运行,所以不需要使用额外的步骤将其连接到应用程序。VBA 通过 ThisDrawing 对象提供指向当前 AutoCAD 任务中活动图形的链接。使用 ThisDrawing,用户可以快速访问当前的 Document 对象及其所有方法和特性,还可以访问层次结构中的所有其他对象。ThisDrawing 用于全局工程时,通常是指 AutoCAD 中的活动文档。ThisDrawing 用于内嵌工程时,通常是指包含该工程的文档。例如,全局工程中的以下代码行将保存 AutoCAD 中当前活动的所有图形:ThisDrawing.Save3.2.1引用对象层次结构中的对象用户可以直接或通过自己定义的变量来引用对象。要直接引用对象,请将对象包含在调用层次结构中。例如,下列语句在模型空间中添加一条直线。请注意,层次结构从 ThisDrawing 开始,再转到 ModelSpace 对象,然后调用 AddLine 方法:Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As DoubleDim LineObj as AcadLinestartPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0Set LineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)要通过用户定义的变量引用对象,请首先将变量定义为所需类型,然后设置为相应的对象。例如,以下代码定义类型为 AcadModelSpace 的变量 (moSpace) 并将其设置为等于当前的模型空间:Dim moSpace As AcadModelSpaceSet moSpace = ThisDrawing.ModelSpace以下语句利用该用户定义的变量将直线添加到模型空间中:Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As DoubleDim LineObj as AcadLinestartPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0Set LineObj = moSpace.AddLine(startPoint,endPoint)检索模型空间中的第一个图元本例返回模型空间中的第一个图元对象, 类似的代码还可以用来检索图纸空间中的第一个图元。注意:可以将所有的图形对象定义为 AcadEntity 对象:Sub Ch2_FindFirstEntity() 本例返回模型空间中的第一个图元 On Error Resume Next Dim entity As AcadEntity If ThisDrawing.ModelSpace.count 0 Then Set entity = ThisDrawing.ModelSpace.Item(0) MsgBox entity.ObjectName + _ is the first entity in model space. Else MsgBox There are no objects in model space. End IfEnd Sub3.2.2访问 Application 对象通过 Document 对象的 Application 特性可以访问 Application 对象。在对象层次结构中,Application 对象位于 Document 对象的上方。通过 ThisDrawing 对象可以访问 Document 对象。例如,以下代码行可以更新应用程序:ThisDrawing.Application.Update3.3集合对象集合对象是一种预定义的对象,包含相似对象的所有实例(即它是相似对象所有实例的上级对象)。以下是集合对象列表:集合包含当前 AutoCAD 任务中打开的所有文档。ModelSpace 集合包含模型空间中的所有图形对象(图元)。PaperSpace 集合包含活动图纸空间布局中的所有图形对象(图元)。Block 对象包含特定块定义中的所有图元。Blocks 集合包含图形中的所有块。Dictionaries 集合包含图形中的所有词典。DimStyles 集合包含图形中的所有标注样式。FileDependencies 集合包含“文件依赖性”列表中的所有项。Groups 集合包含图形中的所有编组。Hyperlinks 集合包含给定图元的所有超链接。Layers 集合包含图形中的所有图层。Layouts 集合包含图形中的所有布局。Linetypes 集合包含图形中的所有线型。MenuBar 集合包含 AutoCAD 中当前显示的所有菜单。MenuGroups 集合包含 AutoCAD 当前加载的所有菜单和工具栏。PlotConfigurations 集合包含图形中的命名打印设置。RegisteredApplications 集合包含图形中所有注册的应用程序。SelectionSets 集合包含图形中的所有选择集。TextStyles 集合包含图形中的所有文字样式。UCSs 集合包含图形中的所有用户坐标系 (UCS)。Views 集合包含图形中的所有视图。Viewports 集合包含图形中的所有视口。3.3.1访问集合大部分的集合对象都是通过 Document 对象访问的。对于每一个集合对象,Document 对象都包含一个相应的特性。例如,以下代码定义一个变量,并将其设置为当前图形的 Layers 集合:Dim layerCollection as AcadLayersSet layerCollection = ThisDrawing.LayersDocuments、MenuBar 和 MenuGroups 集合都可以通过 Application 对象来访问。对于这些集合,Application 对象都包含相应的特性。例如,以下代码定义一个变量,并将其设置为应用程序的 MenuGroups 集合:Dim MenuGroupsCollection as AcadMenuGroupsSet MenuGroupsCollection = ThisDrawing.Application.MenuGroups3.3.2向集合对象中添加新的成员要向集合中添加新的成员,请使用 Add 方法。例如,以下代码创建一个新图层,并将其添加到 Layers 集合中:Dim newLayer as AcadLayerSet newLayer = ThisDrawing.Layers.Add(MyNewLayer)3.3.3遍历集合对象要选择集合对象的特定成员,请使用 Item 方法。Item 方法需要一个标识符,该标识符既可以是指定集合内项目位置的索引号,也可以是代表项目名称的字符串。Item 方法是集合的默认方法。如果引用集合时未指定方法名称,将使用 Item 方法。以下语句作用相同:ThisDrawing.Layers.Item(ABC)ThisDrawing.Layers(ABC)注意请勿在使用 For Each 机制遍历集合的同时对任意对象使用图元编辑方法(例如复制、阵列、镜像等)。请在遍历完成后再尝试编辑集合中的对象,或者创建临时数组并将其设置为等于该集合, 然后遍历复制的数组并执行所需的编辑操作。遍历 Layers 集合本例遍历集合,并显示集合中所有图层的名称:Sub Ch2_IterateLayer() 遍历集合 On Error Resume Next Dim I As Integer Dim msg As String msg = For I = 0 To ThisDrawing.Layers.count - 1 msg = msg + ThisDrawing.Layers.Item(I).Name + vbCrLf Next MsgBox msgEnd Sub查找名为 MyLayer 的图层本例引用名为 MyLayer 的图层,如果图层不存在,则发出消息:Sub Ch2_FindLayer() 使用 Item 方法查找名为 MyLayer 的图层 On Error Resume Next Dim ABCLayer As AcadLayer Set ABCLayer = ThisDrawing.Layers(MyLayer) If Err 0 Then MsgBox The layer MyLayer does not exist. End IfEnd Sub3.3.4删除集合对象的成员要删除特定的标注样式,请使用成员对象的 Delete 方法。例如,以下代码删除图层 ABC:Dim ABCLayer as AcadLayerSet ABCLayer = ThisDrawing.Layers.Item(ABC)ABCLayer.Delete删除某个对象后,不能在程序中再试图访问该对象。3.4了解特性和方法每个对象都具有关联的特性和方法。特性描述一个对象的各个方面,方法指可以在对象上执行的操作。创建对象之后,用户可以通过其特性和方法来查询和编辑该对象。例如,Circle 对象具有 Center 特性。此特性代表圆心处的三维世界坐标系坐标。要更改圆心,只需将此特性设置为新坐标即可。Circle 对象还具有 Offset 方法。使用此方法可以在距离现有圆的指定偏移距离处创建一个新对象。要查看 Circle 对象的所有特性和方法列表,请参见 AutoCADActiveX and VBA Reference中的 Circle 对象。3.5了解上级对象每一个对象都有一个永久链接的上级对象。所有的对象都是从一个称为根对象的上级对象中产生的。沿着从根对象到子对象的链接,用户可以访问接口中的所有对象。另外,这些对象具有称为 Application 的特性,该特性直接链接回根对象。AutoCAD 接口的根对象为 AutoCAD 应用程序。3.6定位类型库类型库包含通过 Automation 对象显示的对象、特性和方法。类型库是一个文件或是文件的一部分,用于描述一个或多个对象的类型。类型库不存储对象,只存储信息。通过访问类型库,应用程序和浏览器可以确定对象的特征,例如对象支持的接口以及每个接口成员的名称和地址。在使用由应用程序显示的 Automation 对象之前,必须先引用其类型库。VBA IDE 中自动设置了此引用。对于其他交互式开发环境,则必须创建 AutoCAD 类型库文件“acax17enu.tlb”的引用,该文件位于“C:Program FilesCommon FilesAutodesk Shared”目录中。要在 VBA IDE 或其他环境中访问图纸集管理器对象,则必须创建 AcSmComponents17 1.0 类型库文件“AcSmComponents17.tlb”的引用,该文件位于“C:Program FilesCommon FilesAutodesk Shared”目录中。可以在未引用应用程序的类型库的情况下使用应用程序的对象。不过,最好还是添加类型库引用,原因如下: 可以直接访问全局访问函数而无需验证。 可以在编译时检查函数、特性和方法调用的正确性,从而在运行时更快地执行。 可以声明库中已定义类型的变量,提高运行时可靠性和可读性。 3.7在方法和特性中使用变量ActiveX Automation 使用变量来传递数组数据。这可能会使初学者感到困惑,但在了解基础知识之后,应该变得容易一些。另外,AutoCAD ActiveX Automation 还提供了帮助用户转换数据类型的实用程序。3.7.1什么是变量?变量是一种特殊的数据类型,可以包含任何类型的数据,固定长度的字符串数据和用户定义的类型除外。变量还可以包含特殊值 Empty、Error、Nothing 和 NULL。可以使用 VarType 或 TypeName VBA 函数来确定如何处理变量中的数据。使用变量数据类型替换大部分的数据类型,可以更加灵活地处理数据。3.7.2使用变量作为数组数据变量用于和 AutoCAD ActiveX Automation 传递数组数据。这表示数组必须是变量,才能被 AutoCAD ActiveX Automation 方法和特性接受。此外,从 AutoCAD ActiveX Automation 输出的数组数据也必须作为变量处理。注意在 AutoCAD 中,VBA 输入数组会自动被转换为变量。也就是说,在 VBA 中使用 ActiveX Automation 方法和特性时,不必向其输入变量数组。但所有的输出数组都将采用变量的形式,所以请记得进行相应的处理。3.7.3将数组转换为变量AutoCAD ActiveX Automation 提供了将数组数据转换为变量的实用程序方法。这个方法是 CreateTypedArray 方法,它可以创建包含整数数组、浮点数数组、双精度数组等的变量。用户可以将产生的变量传递给任何 AutoCAD 方法或特性,只要这些方法或特性接受数值数组作为变量。CreateTypedArray 方法需要输入数组中值的类型,并将数组数据进行转换。以变量返回值的数组。使用 CreateTypedArray 方法创建样条曲线以下代码使用 CreateTypedArray 转换三个数组:样条曲线的拟合点坐标及样条曲线的起点切向和端点切向。然后将变量传递给 AddSpline 方法,创建样条曲线。Sub Ch2_CreateSplineUsingTypedArray() 本例使用 CreateTypedArray 方法 在模型空间中创建样条曲线对象。 Dim splineObj As AcadSpline Dim startTan As Variant Dim endTan As Variant Dim fitPoints As Variant Dim utilObj As Object 后期绑定 Utility 对象 Set utilObj = ThisDrawing.Utility 定义 Spline 对象 utilObj.CreateTypedArray _ startTan, vbDouble, 0.5, 0.5, 0 utilObj.CreateTypedArray _ endTan, vbDouble, 0.5, 0.5, 0 utilObj.CreateTypedArray _ fitPoints, vbDouble, 0, 0, 0, 5, 5, 0, 10, 0, 0 Set splineObj = ThisDrawing.ModelSpace.AddSpline _ (fitPoints, startTan, endTan) 放大新创建的样条曲线 ZoomAllEnd Sub3.7.4解释变量数组从 AutoCAD ActiveX Automation 传回的数组信息是以变量传回的。如果知道数组的数据类型,可以使用数组方式访问变量。如果不知道变量中包含的数据类型,请使用 VBA 函数 VarType 或 Typename。这些函数返回变量中数据的类型。如果需要遍历数组,可以使用 VBA 的 For Each 语句。计算两点之间的距离以下代码示范如何计算用户输入的两点之间的距离。在本例中,数据类型是已知的,因为所有的坐标值均为双精度数。三维坐标值是一个包含三个元素的双精度数组,而二维坐标值是一个包含两个元素的双精度数组。Sub Ch2_CalculateDistance() Dim point1 As Variant Dim point2 As Variant 获取用户输入的点 point1 = ThisDrawing.Utility.GetPoint _ (, vbCrLf & First point: ) point2 = ThisDrawing.Utility.GetPoint _ (point1, vbCrLf & Second point: ) 计算 point1 和 point2 之间的距离 Dim x As Double, y As Double, z As Double Dim dist As Double x = point1(0) - point2(0) y = point1(1) - point2(1) z = point1(2) - point2(2) dist = Sqr(Sqr(x 2) + (y 2) 2) + (z 2) 显示计算出来的距离 MsgBox The distance between the points is: _ & dist, , Calculate DistanceEnd Sub3.8使用其他编程语言本手册是专为 VBA 编程语言编写的。编程样例和示例应用程序均以 VBA 编写。如果要在其他编程环境中使用这些代码,用户必须更新代码以适合选择的环境。可以使用开发环境的文档来帮助转换代码样例。注意AutoCAD 2007 的 COM 应用程序访问注册表键为“AutoCAD.Application.17”。3.8.1 将 VBA 代码转换为 VB要更新代码样例以在 VB 中使用,必须先引用 AutoCAD 类型库。要在 VB 中完成此操作,请从“工程”菜单中选择“引用”选项,启动“引用”对话框。在“引用”对话框中,选择 AutoCAD 类型库,然后单击“确定”。然后在代码样例中,将所有对 ThisDrawing 的引用替换为引用活动文档、用户指定的变量。要完成这项操作,请为 AutoCAD 应用程序 (acadApp) 和当前的文档 (acadDoc) 定义变量。然后,将应用程序变量设置为当前的 AutoCAD 应用程序。如果 AutoCAD 正在运行,指定 AutoCAD 版本号时,VB GetObject 函数将检索 AutoCAD Application 对象。如果 AutoCAD 没有运行,发生的错误(本例中)会被捕获然后清除。CreateObject 函数接着会试图创建一个 AutoCAD Application 对象。如果创建成功,会启动 AutoCAD;如果失败,则会显示一个消息框,说明发生的错误。同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。关于验证 GetObject 所返回任务的详细信息,请参见 Microsoft VBA 文档中的运行对象表 (ROT) 和 GetObject 函数。要显示 AutoCAD 图形窗口,必须将 AutoCAD 应用程序的 Visible 特性设置为 TRUE。如果 GetObject 创建了一个新的 AutoCAD 实例(即调用 GetObject 时 AutoCAD 没有运行),没有将 Visible 设置为 TRUE 会导致 AutoCAD 应用程序不可见,甚至 AutoCAD 不在 Windows 任务栏上显示。注意使用依赖于版本的 ProgID。如果 CreateObject 或 GetObject 函数使用的是独立于版本的 ProgID,则将函数更改为使用依赖于版本的 ProgID。例如,如果使用的是 CreateObject,请将 CreateObject (AutoCAD.Application) 更改为 CreateObject (AutoCAD.Application.17)。此外,如果 GetInterfaceObject 方法使用的是独立于版本的 ProgID,则必须将该方法更改成使用依赖于版本的 ProgID。通过 Visual Basic 6 连接至 AutoCAD本例使用 Err 的 Clear 和 Description 特性。如果用户编码环境不支持这些特性,则需要适当修改样例:Sub Ch2_ConnectToAcad() Dim acadApp As AcadApplication On Error Resume Next Set acadApp = GetObject(, AutoCAD.Application.17) If Err Then Err.Clear Set acadApp = CreateObject(AutoCAD.Application.17) If Err Then MsgBox Err.Description Exit Sub End If End If MsgBox Now running + acadApp.Name + _ version + acadApp.Version
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客服管家考试题及答案
- 绞盘机司机数字化技能考核试卷及答案
- 井矿盐制盐工专项考核试卷及答案
- 多维地理信息采集员知识考核试卷及答案
- 旅游团队领队晋升考核试卷及答案
- 静脉抽血考试题及答案
- 河北石家庄市42中7年级下册数学期末考试专项练习试题(含答案解析)
- 琴身箱体制作工数字化技能考核试卷及答案
- 课件文本自动换行设置
- 强化地板备料工突发故障应对考核试卷及答案
- 中国多发性骨髓瘤诊治指南(2024年修订)解读课件
- 果树栽培工专业技能考核试卷及答案
- 空调电费知识培训内容课件
- 2025排污许可条例试题及答案
- 2025年秋期新教材部编人教版三年级上册道德与法治教学计划+进度表
- 水工结构理论知识培训课件
- 粮库业务知识培训课件
- 医师临床“三基”训练综合试卷(含答案)
- 2025至2030年中国综合能源服务市场竞争策略及行业投资潜力预测报告
- 土地要素保障课件教学
- 《建筑基坑工程监测技术标准》(50497-2019)
评论
0/150
提交评论