第四节:理解属性和方法
每一对象都关联着属性和方法。属性描述着单个对象的外观,而方法是一种可在单个对象上执行的行为。当对象创建后,你就可通过属性和方法查询和编辑对象。
例如,一个圆对象有圆心属性。该属性以三维世界坐标系统的坐标描述了圆的圆心。更改圆的圆心,你只要简单地将该属性设定为新的坐标。圆对象也有称为偏移(Offset)的方法。该方法可在相对于现存圆的指定偏移距离创建一个新的对象。关于圆对象所有属性和方法的列表,请参考AutoCAD ActiveX和VBA参考中的圆对象。
第五节:理解父对象
每一个对象都有其永远不变的父对象。所有对象都源于称为根对象的单个父对象。你可以通过从根对象链接到子对象的方法访问所有在界面中的对象。还有,所有对象都有称为应用程序的属性以直接链接回根对象。
AutoCAD界面的根对象为AutoCAD应用程序。
第六节:定位类型库
通过自动操作对象暴露的对象、属性和方法都包含在类型库中。类型库是一个文件或一个文件的一部分,它描述一个或多个对象的类型。类型库并不保存对象;它们只保存信息。通过访问类型库,应用程序和浏览器可确定对象的特征,如对象支持的界面和每一界面成员的名称和地址。
在使用通过应用程序暴露出来的自动操作对象,你必须引用其类型库。该引用已由AutoCAD VBA自动设定好。而在其它的交互开发环境中你必须创建这个引用。
你可以在没有引用应用程序类型库的情况下使用应用程序对象。然而,由于以下理由,可考虑增加类型库引用:
全局可访问函数可无条件直接访问。
调用函数、属性和方法可在编译时检查其正确性,这样可以在运行时有更快的速度。 有可能的话可声明定义在库中的变量类型,这样可增加运行时的可靠性和可读性。
第七节:在数据库中返回第一个图元
以下例子返回模型空间中的第一个图元对象。对于图纸空间中的图元,代码略有不同: 返回模型空间中的第一个图元
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 + _ \是在模型空间中的第一个图元。\Else
MsgBox \在模型空间中没有对象存在。\End If End Sub
第八节:在方法和属性中使用变体
AutoCAD ActiveX自动操作是使用变体传递数组数据。尽管这对于初学者来说有点弄不懂,但只要你有点基础知识就不会觉得困难。另外,AutoCAD ActiveX自动操作提供了帮助你转换数据类型的工具。 本节内容: 什么是变体?
在数组数据中使用变体 转换数组为变体 解释变体数组 什么是变体?
变体是一种特殊的数据类型,它可包含除固定长度字符串数据和用户定义类型外的其它任何类型的数据。变体也可包含特殊的值,如Empty、Error、Nothing和NULL。你可通过VarType或TypeName这样的Visual Basic函数来确定变体中数据。
你可使用变体数据类型来放置大多数的任何数据类型,来使工作途径更灵活。 在数组数据中使用变体
变体是用于传递数组数据进和出AutoCAD ActiveX自动操作。也就是说你的数组必须为变体以由AutoCAD ActiveX自动操作的方法和属性所接受。另外,从AutoCAD ActiveX自动操作中输出的数组数据必须处理为变体。
注意:在AutoCAD,VBA中输入数组会自动转换为变体。也就是说你在VBA中使用的数组不必将其转换为变体数组后才输入ActiveX自动操作的方法和属性。然而,所有输出的数组将是变体的形式,所以请记住要进行适当的处理。 转换数组为变体
AutoCAD ActiveX自动操作提供了实用方法以转换数组中的数据为变体。该方法为CreatTypedArray方法,它创建包含整数、浮点数、双精数等数组的变体。你可传递这些结果的变体到任何接受作为变体的数据数值的AutoCAD方法或属性。
CreatTypedArray方法接受在数组中输入的数值类型,和转换的数组数据。它返回数组数值为变体。以下代码使用CreateTypedArray转换有三个数组:样条曲线的拟合点坐标、样条曲线的起点切点和终点切点。然后传递这些变体到AddSpline方法以创建样条曲线。 使用CreateTypedArray方法创建样条曲线 Sub Ch2_CreateSplineUsingTypedArray()
' 这个例子在模型空间中利用CreateTypedArray方法 ' 创建样条曲线。
Dim splineObj As AcadSpline Dim startTan As Variant Dim endTan As Variant Dim fitPoints As Variant Dim noOfPoints As Integer
Dim utilObj As Object ' 然后绑定在实用工具对象 Set utilObj = ThisDrawing.Utility
' Define the Spline Object 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 noOfPoints = 3
Set splineObj = ThisDrawing.ModelSpace.AddSpline _ (fitPoints, startTan, endTan)
' 缩放查看该新创建的样条曲线 ZoomAll End Sub 解释变体数组
从AutoCAD ActiveX自动操作传递回的数组信息是以变体的方式传递回。如果你知道数组中的数据类型,你可以简单地将变体作为数组访问。如果你不知道包含在变体中的数据类型,可使用VBA函数VarType或Typename来处理。这两个函数返回在变体中的数据类型。如果你需要在数组中循环,你可使用VBA的For Each语句。
以下代码示范了计算由用户输入的两点的距离。在该例中,数据类型已经知道,因为所有坐标均为双精度。三维坐标是双精度的三元素数组,而二维坐标是双精度的二元素数组。 计算两点之间的距离
Sub Ch2_CalculateDistance() Dim point1 As Variant Dim point2 As Variant
' 由用户提供点
point1 = ThisDrawing.Utility.GetPoint _ (, vbCrLf & \第一点: \
point2 = ThisDrawing.Utility.GetPoint _ (point1, vbCrLf & \第二点: \
' 计算点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 \两点之间的距离为: \& dist, , \个计算单位\End Sub
第九节:使用其它程序语言
本指南和AutoCAD ActiveX及VBA参考是为VBA编程语言所编写的。所以程序中的例子和示例应用程序都在VBA中编写。如果要将这些代码用于其它编辑环境,你必须将其更新到所选择的环境中。 本节内容:
转换VBA代码到VB中
转换VBA代码到VB中
更新代码示例以用于VB中,你必须首先引用AutoCAD类型库。在VB中,可从工程菜单中选择引用项弹出引用对话框。从引用对话框中,选择AutoCAD Release 15类型库并按确定。
下一步,在代码示例中使用引用活动文档的用户指定变量替换所有引用的ThisDrawing。要做到这一点,可定义AutoCAD应用程序变量(acadApp)和当前文档变量(acadDoc)。然后,设定应用程序变量到当前AutoCAD应用程序。
如果AutoCAD正在运行,用GetObject方法返回AutoCAD应用程序对象。如果AutoCAD没有运行,则会捕获到一个错误发生(对于本例),然后清除它。接下来用CreateObject方法试图创建AutoCAD应用程序对象。如果成功,则会启动AutoCAD;如果失败,则会弹出一信息框显示出错的内容。以下代码示例使用了Err的Clear和Description属性。如果你的代码环境不支持这些属性,你需要适当修改示例。 从Visual Basic中连接到AutoCAD Sub Ch2_ConnectToAcad() Dim acadApp As AcadApplication On Error Resume Next
Set acadApp = GetObject(, \If Err Then Err.Clear
Set acadApp = CreateObject(\If Err Then
MsgBox Err.Description Exit Sub End If End If
MsgBox \现在运行 \\版本号 \End Sub
下一步,设定文档变量到AutoCAD应用程序中的文档对象。文档对象是由应用程序对象的ActiveDocument属性返回的。 Dim acadDoc as AcadDocument
Set acadDoc = acadApp.ActiveDocument
通过以上操作,使acadDoc变量引用当前AutoCAD图形。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库CAD_vba开发手册(6)在线全文阅读。
相关推荐: