77范文网 - 专业文章范例文档资料分享平台

CAD_vba开发手册(5)

来源:网络收集 时间:2019-04-23 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

非图形对象为不可见(指示性)对象,它们是图形的一部分,就如Layers(图层)、Linetypes(线型)、DimStypes(标注样式)、SelectionSets(选择集)等。创建这些对象,可在父集合对象中使用Add(添加)方法。而修改或查询这些对象,可使用对象自身的方法和属性。每一非图形对象均有其特殊的方法及属性以达到其目的;所有对象都有方法可以设定及返回扩展数据。

简要介绍Preferences(参数选择)、Plot(打印出图)和Utility(实用工具)对象

在参数选择(Preferences)对象下边为对象集,每一对象集都与选项对话框的一个选项卡相关。它们共同提供访问在选项对话框中所有的注册设置。图形设置包含在数据库参数选择(DatabasePreferences)对象中。你也可通过SetVariable和GetVariable方法来设定和修改选项(系统变量不是选项对话框的一部分)。设置选项的详细内容请参考“设定AutoCAD参数”。

打印出图(Plot)对象提供访问在打印对话框的设定,并且让其它程序可以使用不同的方法打印图形。图形打印的相关内容请参考“打印图形”。

实用工具(Utility)对象提供用户输入和转换功能。用户输入功能是在AutoCAD命令行中提示用户输入不同类型数据的方法,如输入字符串、整数、实数、点等。转换功能是操作AutoCAD特有数据类型的方法,如点和角度,另外还有字符串和数字的处理。用户输入功能的相关内容请参考“提示用户输入”。

第二节:访问对象层次

在VBA内部访问对象层次是非常容易的。这是因为VBA是运行在AutoCAD进程的内部,所以不必通过附加的步骤与应用程序进行连接。

VBA通过ThisDrawing对象链接到当前AutoCAD进程的活动图形。通过使用ThisDrawing直接获得访问当前文档对象和所有相关的方法和属性以及所有在该层次中的其它对象。

当使用全局工程,ThisDrawing通常指向AutoCAD中的活动文档。当用的是嵌入工程,ThisDrawing通常指向包含该工程的文档。例如,以下在全局工程中的代码行将保存当前AutoCAD中活动的图形:

thisDrawing.Save

在对象层次中引用对象

你可直接可通过用户定义变量引用对象。直接引用对象,应包括对象的层次。例如,以下语句增加一条直线到模型空间。注意到层次状态为ThisDrawing,然后是ModelSpace(模型空间)对象,最后才是AddLine方法:

Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As Double Dim LineObj as AcadLine

startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0

Set LineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)

通过用户定义变量引用对象,首先定义变量的类型,然后设定变量为适当的对象。例如,以下代码定义了一个类型为AcadModelSpace的变量(moSpace)并设定变量等于当前模型空间:

Dim moSpace As AcadModelSpace Set moSpace = ThisDrawing.ModelSpace

以下语句使用用户定义变量增加一条直线到模型空间:

Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As Double Dim LineObj as AcadLine

startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0 Set LineObj = moSpace.AddLine(startPoint,endPoint)

访问应用程序对象

因为ThisDrawing对象提供与文档对象的链接,你可能会觉得奇怪,在文档对象之上对象层次的根对象(应用程序对象)是怎样访问的。其实文档对象中有一称为应用程序的属性可提供与应用程序对象的链接。 例如,以下代码行更新应用程序:

ThisDrawing.Application.Update

第三节:通过集合对象操作

集合对象是预先定义的对象,它包含所有相似对象的实例(即这些对象的父对象)。集合对象有以下的对象:

文档(Documents)集合

包含所有在当前AutoCAD进程打开的文档。 模型空间(ModelSpace)集合

包含在模型空间中的所有图形对象(图元)。 图纸空间(PaperSpace)集合

包含在活动图纸空间布局中的所有图形对象(图元)。 图块(Block)对象

包含在指定图块定义中的所有图元。 图块(Blocks)集合

包含在图形中的所有图块。 字典(Dictionaries)集合

包含在图形中的所有字典。 标注样式(DimStyles)集合

包含在图形中的所有标注样式。 组合(Groups)集合

包含在图形中的所有组合。 超级链接(Hyperlinks)集合

包含提供图元的所有超级链接。 图层(Layers)集合

包含在图形中的所有图层。 布局(Layouts)集合

包含在图形中的所有布局。 线型(Linetypes)集合

包含在图形中的所有线型。 菜单条(MenuBar)集合

包含当前显示于AutoCAD的所有菜单。 菜单组(MenuGroups)集合

包含当前装载到AutoCAD中的所有菜单和工具栏。 注册应用程序(RegisteredApplications)集合

包含在图形中的所有注册的应用程序。 选择集(SelectionSets)集合

包含在图形中所有的选择集。

字型(TextStyles)集合

包含在图形中所有的文字样式。 UCSs 集合

包含在图形中所有的用户坐标系统(UCS)。 视图(Views)集合

包含在图形中所有的视图。 视口(Viewports)集合

包含在图形中所有的视口。 本节内容: 访问集合

添加新成员到集合对象 在集合对象中循环 删除集合对象中的成员 访问集合

大多数集合对象是通过文档对象来访问的。文档对象包含每个集合对象的属性。例如,以下代码定义一个变量并将其设定到当前图形的图层集合中:

Dim layerCollection as AcadLayers Set layerCollection = ThisDrawing.Layers

文档集合、菜单条集合和菜单组集合是通过应用程序对象进行访问。应用程序对象为这些集合的每一个集合包含一个属性。例如,以下代码定义了一个变量并且设定该变量为应用程序中的菜单组集合:

Dim MenuGroupsCollection as AcadMenuGroups

Set MenuGroupsCollection = ThisDrawing.Application.MenuGroups

添加新成员到集合对象

添加新成员到集合中使用的是Add方法。例如,以下代码创建一个新的图层并且将其添加到图层集合中:

Dim newLayer as AcadLayer

Set newLayer = ThisDrawing.Layers.Add(\

在集合对象中循环

选择集合对象中的一个指定成员,使用的是Item(项目)方法。Item方法需要一个标识符。该标识符可以是指定集合内部项目位置的索引号或者描述项目名称的字符串。 以下例子在集合中循环并显示集合中所有图层的名称: 在图层集合中循环

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 msg End Sub

以下例子使用Item方法查找名称为“ABC”的图层: 查找名称为“ABC”的图层

Sub Ch2_FindLayerABC()

' 使用Item方法查找名称为“ABC”的图层 On Error Resume Next

Dim ABCLayer As AcadLayer

Set ABCLayer = ThisDrawing.Layers.Item(\If Err <> 0 Then

MsgBox \图层“ABC”并不存在。\End If End Sub

注意:当使用For Each机制同时在集合循环时,不要在对象上使用图元编辑方法(复制、阵列、镜像等),你只能在完成循环之后才可试着去编辑对象,或者先创建一个临时的数组并且设定其与集合相等,然后才可以在该复制的阵列中循环并执行你的操作。 删除集合对象中的成员

删除指定的成员,可使用所找到成员对象的Delete(删除)方法。例如,以下代码删除图层ABC: Dim ABCLayer as AcadLayer

Set ABCLayer = ThisDrawing.Layers.Item(\ABCLayer.Delete

当对象被删除后,你再也不能试图用程序去访问该对象了。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库CAD_vba开发手册(5)在线全文阅读。

CAD_vba开发手册(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/621878.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: