第3章AutoCADActiveX对象.docx

上传人:b****5 文档编号:6995670 上传时间:2023-01-15 格式:DOCX 页数:6 大小:19.04KB
下载 相关 举报
第3章AutoCADActiveX对象.docx_第1页
第1页 / 共6页
第3章AutoCADActiveX对象.docx_第2页
第2页 / 共6页
第3章AutoCADActiveX对象.docx_第3页
第3页 / 共6页
第3章AutoCADActiveX对象.docx_第4页
第4页 / 共6页
第3章AutoCADActiveX对象.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

第3章AutoCADActiveX对象.docx

《第3章AutoCADActiveX对象.docx》由会员分享,可在线阅读,更多相关《第3章AutoCADActiveX对象.docx(6页珍藏版)》请在冰豆网上搜索。

第3章AutoCADActiveX对象.docx

第3章AutoCADActiveX对象

第3章AutoCADActiveX对象

变量除了可以存储值以外,还可以引用对象,引用就是将对象指定给变量。

每个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版。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1