第3章AutoCADActiveX对象.docx
- 文档编号:6995670
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:6
- 大小:19.04KB
第3章AutoCADActiveX对象.docx
《第3章AutoCADActiveX对象.docx》由会员分享,可在线阅读,更多相关《第3章AutoCADActiveX对象.docx(6页珍藏版)》请在冰豆网上搜索。
第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版。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AutoCADActiveX 对象