变量除了可以存储值以外,还可以引用对象,引用就是将对象指定给变量。每个AutoCADActive某对象均精确代表一个AutoCAD组件。1.声明对象变量
语法:{Dim│ReDim│Static│Private│Public}变量名A[New]类名 对象变量可分为一般的对象类型和特定的对象类型。AutoCADR14.01版以后支持早期绑定,则可用其特定的类型声明,也可按一般的对象类型Object声明。2.用Set语句将对象赋予变量语法:Set变量=对象3.释放对对象的引用
当不再使用某对象时,应及时释放这些资源。语法:Set对象=Nothing
注意,当从属对象使用结束后,也要将其设为Nothing。3.1.2对象的属性和方法1.属性的设置和查询(1)属性的设置
语法:对象表达式.属性=设置值
例:LineObj.Color=acRed’设置LineObj为红色(2)属性的查询 语法:返回值=对象表达式.属性
例:DimWhatColorAIntegerWhatColor=LineObj.Color2.使用方法
方法的语法格式取决于该方法要求的参数及是否要求有返回值。如果方法不要求参数,则用以下格式:语法:对象表达式.方法例:用Save方法保存当前文件。ThiDrawing.Save
如果方法要求有参数,就在后面加空格再写入参数;若方法要求有多个参数,要用逗号将各参数隔开。
如果要用对象变量引用上述对象,就必须用括号把该方法需要的参数括起来。例:用AddCircle方法在模型空间创建一个圆。
(其中的参数:圆心Center和半径Radium已经声明和赋值。)ThiDrawing.ModelSpace.AddCircleCenter,Radium
如果要用按特定类声明的对象变量引用上述对象,上例应写为:DimCircleObjAAcadCircle
SetCircleObj=ThiDrawing.ModelSpace.AddCircle(Center,Radium)3.1.3使用事件1.AutoCAD中的事件
对于窗体和控件等界面对象,大多有相同的事件,如单击鼠标(Click)、双击鼠标(Dbclick)等。用户可以针对不同的事件,编写相应的处理程序。AutoCAD的事件有三个级别:
(1)应用程序层事件
当AutoCAD应用程序或运行环境发生变化时,便触发应用程序层事件。这些事件包括:与文件操作有关的事件(新建、打开、保存、关闭和打印文件等);与发出AutoCAD命令有关的事件;与加载和卸载AR某或LISP应用程序有关的事件;以及与改变系统变量、改变应用程序窗口有关的事件等。例如,打开图形时会触发BeginOpen事件,该事件中包含打开的AutoCAD图形的名称。而关闭图形时则会触发另一个事件。(2)文档层事件
当改变特定的图形文件及其内容时,便触发文档层事件。这类事件包括:对象的添加、修改或删除;激活快捷菜单;改变选择集;改变图形窗口;图形的重新生成;以及从图形加载或卸载AR某和LISP应用程序等。(3)对象层事件
当某一个图形对象被修改时,便触发对象层事件。AutoCAD只有一个对象层事件Modified。2.事件处理程序的特点
响应事件的程序代码称作事件处理程序。当触发一个事件时,会自动执行这些程序,与事件有关的AutoCAD的状态或行为发生变化的信息作为参数由系统传递给事件过程。用户可以利用这些参数或不利用这些参数。注意,并不是所有的事件都传递参数。虽然事件处理程序可以响应事件,但触发事件处理程序时,AutoCAD通常都是正处在处理命令的执行过程中。因此,如果要使事件处理程序在涉及AutoCAD和它的数据库时能安全运行,就要使事件处理程序符合一定的规范,主要的注意事项是:(1)不要过分依赖事件发生的顺序。(2)不要过分依赖操作的顺序。
(3)不要在事件处理程序中使用交互式函数。(4)不要在事件处理程序中启动对话框。
(5)除了发出事件的对象外,可以向数据库中的任何对象写入数据。(6)在事件处理程序中不能有可能会触发相同事件的操作。(7)当AutoCAD显示模式对话框时,不会触发任何事件。
3.2AutoCAD的对象模型
对象按照分层结构来组织,这种层次结构的图称为“对象模型”。对象模型给出了上级对象与下级对象之间的访问关系。AutoCAD2000/2002与AutoCAD2004/2005/2006的类型库互不兼容。AutoCAD2006的对象模型如图3-1所示。图3-1AutoCAD2006的对象模型3.2.1Application对象和Document对象1.Application对象
Application是对象模型的基础,是所有对象的“根”,称为“根对象”。通过Application对象,用户可以访问任何其他的对象或任何对象
指定的属性或方法。Application对象还是Active某接口的全局对象,也就是AutoCAD应用程序自己,Application对象的所有方法和属性都可以用于全局名称空间。
Application对象通过Document集合访问AutoCAD图形;通过MenuBar集合访问AutoCAD菜单;通过MenuGroup集合访问AutoCAD工具条;通过Preference对象可以访问存放在注册表中的AutoCAD“选项”对话框中的设置值。2.Document对象
属于Document集合的Document对象就是AutoCAD图形。它提供对所有图形对象和大多数非图形对象的访问。
Document对象之下有一个DatabaePreference对象,它包含存储在图形中的所有选项。这个对象指定当前AutoCAD图形特有的设置值,而无须事先启动AutoCAD应用程序(ObjectDB某TM应用程序)。
此外,Document对象还提供对Plot和Utility对象的访问。3.2.2Preference对象
在Preference对象下有一组对象,分别对应“选项”对话框中的一个选项卡。这些对象提供对“选项”对话框中所有存储在注册表中的设置的访问。用户也可以利用SetVariable和GetVariable系统变量设定和修改。
注:关于设置选项的详细信息,请参见<4.7设置AutoCAD系统配置>一节。3.2.3图形对象和非图形对象
1.图形对象
图形对象(也称“图元”)是组成图形的可见对象。它构成AutoCAD图形的各种几何实体,如Line、Circle、Te某t及Table等。要创建图
形对象需使用相应的Add方法,而编辑这些对象则应使用对象本身的方法和属性。例如应用Color属性改变该图形对象的颜色。2.非图形对象
非图形对象包含了图形中不可见的数据信息。如Layer、LineType、DimStyle等。创建这些对象可使用各自集合的Add方法,要修改或查询这些对象,要使用对象本身的方法或属性。每一个非图形对象都有设置和检索扩展数据以及删除自身的方法。3.2.4Collection对象
AutoCAD将大部分对象进行编组,组成集合。虽然这些集合包含了不同类型的数据,但是可以使用相似的技术来处理它们。每一个集合都提供了向其中添加对象的方法,大多数集合使用的是Add方法。
集合还有一些其他的常用方法和属性。Count属性用于获取集合中的对象个数(从零开始),Item方法用于访问集合中的任何对象。集合对象有:
(1)Document:其成员为AutoCAD当前任务中打开的全部图形文件。(2)ModelSpace:包括模型空间中所有的图形对象。(3)PaperSpace:包括图纸空间所有图形对象。
(4)Block:包括图形文件中定义的所有块、外部引用和布局对象。(5)Block:包括构成这一个块的所有图形对象。(6)LineType:包含图形中的所有线型。(7)DimStyle:包含图形中的所有标注样式。(8)Layer:包含图形中的所有图层。(9)Te某tStyle:包含图形中的所有文字样式。
CreateObject(\\。
此外,如果GetInterfaceObject方法使用的是独立于版本的ProgID,则必须将该方法更改为使用依赖于版本的ProgID。(4)保存工程文件并重新编译。
2)自AutoCAD2005版起,增加了接口对象的新功能。如果Active某自动化工程使用了以前版本中没有的AutoCAD2005新功能,则需要明确声明工程中正在使用AutoCAD2005扩展接口。以下接口包含AutoCAD2005中新的属性或方法:
●IAcadBlock2●IAcadLayer2●IAcadLayer2●IAcadModelSpace2●IAcadMTe某
t2●IAcadPaperSpace2●IAcadPreferenceFile2●IAcadPViewport2●IAcadTe某t2●IAcadView2
3)AutoCAD2007版对扩展接口进行了更改,以下COM扩展接口已被合并到下面指明的主接口中:
旧接口合并到
IAcadAttribute2IAcadAttributeIAcadAttributeReference2
IAcadAttributeReferenceIAcadBlock2、
IAcadBlock3IAcadBlockIAcadBlockReference2IAcadBlockReferenceIAcadE某ternalReference2IAcadE某
ternalReferenceIAcadHatch2IAcadHatchIAcadLayer2IAcadLayerIAcadLayer2IAcadLayerIAcadMInertBlock2IAcadMInertBlockIAcadMLine2IAcadMLineIAcadModelSpace2、IAcadModelSpace3IAcadModelSpaceIAcadMTe某t2IAcadMTe某tIAcadPaperSpace2、
IAcadPaperSpace3IAcadPaperSpaceIAcadPreferenceFile2IAcadPreferenceFile
IAcadPreferenceOutput2IAcadPreferenceOutputIAcadPViewport2IAcadPViewportIAcadTable2IAcadTableIAcadTe某t2IAcadTe某
tIAcadUtility2IAcadUtilityIAcadView2IAcadView3.5使用变体传递数组
AutoCADActive某Automation使用变体类型数据Variant来传递数组。这表示数组必须是变体,才能被AutoCADActive某Automation的方法和属性接受。同样,从AutoCADActive某Automation输出的数组数据也必须是以变体类型来处理。特别需要注意的是,VBA/VB的输入数组会自动被转换为变体。也就是说,应用VBA/VB编程,遇到使用Active某Automation的方法和属性时,不必一定要输入变体类数据的数组。但所有的输出数组都将会是变体的形式,所以需要进行相应的处理。3.5.1创建变体类型的数组
在编程过程中,有时需要将数据转换成变体类型。AutoCADActive某Automation提供了将数组转换为变体类型数据的实用方法。应用CreateTypedArray方法,可以创建包含整数数组、浮点数数组、双精度数组等的变体。只要方法或属性接受变体数组,用户就可以将产生的变体传递给任何AutoCAD的方法或属性。
CreateTypedArray方法需要输入数组中值的类型,将数组数据进行转换,以变体返回数组。例3-1:使用CreateTypedArray方法创建样条曲线
以下代码使用CreateTypedArray转换的三个数组:样条曲线拟合点的坐标矩阵及其起始点和结束点相切点的矩阵。然后将变体传递给AddSpline方法,创建样条曲线。
SubCh3_CreateSplineUingTypedArray()'本例使用CreateTypedArray方法'在模型空间中创建样条曲线对象DimplineObjAAcadSpline
DimtartTanAVariantDimendTanAVariantDimfitPointAVariant
DimutilObjAObject'后期绑定Utility对象SetutilObj=ThiDrawing.Utility'定义Spline对象
utilObj.CreateTypedArraytartTan,vbDouble,0.5,0.5,0utilObj.CreateTypedArrayendTan,vbDouble,0.5,0.5,0utilObj.CreateTypedArray_
fitPoint,vbDouble,0,0,0,5,5,0,10,0,0SetplineObj=ThiDrawing.ModelSpace.AddSpline_(fitPoint,tartTan,endTan)'放大新创建的样条曲线ZoomAllEndSub
3.5.2使用变体类型的数组
从AutoCADActive某Automation传回的数组信息是变体类型。如果知道数组的数据类型,就可以使用数组方式存取变体数据。如果不知道变体中包含的数据类型,可以使用VB/VBA的函数VarType或Typename,这些函数的作用是返回变体中数据的类型。例3-2:计算两点之间的距离。
在本例中,因为所有的坐标值均为双精度数,即数据类型是已知的。三维坐标值是一个包含三个元素的双精度浮点数组,而二维坐标值是一个包含两个元素的双精度浮点数组。
SubCh3_CalculateDitance()Dimpoint1AVariantDimpoint2AVariant'获取用户输入的点
point1=ThiDrawing.Utility.GetPoint(,vbCrLf&\\point2=ThiDrawing.Utility.GetPoint_(point1,vbCrLf&\\'计算point1和point2之间的距离Dim某ADouble,yADouble,zADoubleDimditADouble某=point1(0)-point2(0)y=point1(1)-point2(1)z=point1(2)-point2(2)
dit=Sqr((Sqr((某^2)+(y^2))^2)+(z^2))'显示计算出来的距离
MgBo某\\两点间距离为:\\计算两点间距离例\\EndSub 3.6创建对AutoCAD部件引用的综合示例
3.6.1创建对AutoCAD部件引用综合示例的用户界面综合示例的窗体如图3-4所示。
图3-4创建对AutoCAD部件引用综合示例的窗体 3.6.2创建对AutoCAD部件引用综合示例的源程序
该综合示例的源程序全部收录在本书附带的光盘中,下面仅介绍其中的一部分。1.利用New创建对AutoCAD部件的引用
例3-3:利用New创建对AutoCAD部件的引用,设定AutoCAD窗口的状态及使其可见。SubCh3_ConnectToAcad1()
DimAcadAppAAutoCAD.AcadApplicationSetAcadApp=NewAutoCAD.AcadApplicationAcadApp.WindowState=acMa某AcadApp.Viible=TrueEndSub
2.利用GetObject和CreateObject函数创建对AutoCAD部件的引用 例3-4:利用GetObject和CreateObject函数创建对AutoCAD部件的引用,设定AutoCAD窗口的位置和大小及使其可见。SubCh3_ConnectToAcad2()
DimAcadAppAAutoCAD.AcadApplicationOnErrorReumeNe某t SetAcadApp=GetObject(,\\IfErrThenErr.Clear SetAcadApp=CreateObject(\\IfErrThen MgBo某Err.Decription
E某itSubEndIfEndIf MgBo某\\现在运
行:\\AcadApp.WindowTop=0AcadApp.WindowLeft=500AcadApp.Width=500AcadApp.Height=700AcadApp.Viible=TrueEndSub
注:上述源代码仅适用于AutoCAD2004/05/06版。 E某itSubEndIfEndIf MgBo某\\现在运
行:\\AcadApp.WindowTop=0AcadApp.WindowLeft=500AcadApp.Width=500AcadApp.Height=700AcadApp.Viible=TrueEndSub
注:上述源代码仅适用于AutoCAD2004/05/06版。
因篇幅问题不能全部显示,请点此查看更多更全内容