在AutoLISP中使用ActiveX对象.ppt
《在AutoLISP中使用ActiveX对象.ppt》由会员分享,可在线阅读,更多相关《在AutoLISP中使用ActiveX对象.ppt(87页珍藏版)》请在三一办公上搜索。
1、第10章 在AutoLISP中使用ActiveX对象,ActiveX Automation是一种新的方法,通过它可以用编程的方式操作AutoCAD图形。在许多操作AutoCAD图形对象的实例中,ActiveX的速度比传统的AutoLISP函数要快。在某些情况下,例如在反应器回调函数中访问图形对象时,只能使用ActiveX。许多语言和环境可以使用ActiveX编程界面,如C+、Visual Basic、Java和Delphi等。在AutoLISP中使用ActiveX对象,其模型、属性和方法和在其他编程环境中使用的ActiveX对象完全相同。如果要在AutoLISP中使用ActiveX函数,必须首
2、先调用vl-load-com函数来初始化ActiveX环境。vl-load-com函数首先检查是否加载了ActiveX支持的函数,如果已加载,该函数不做任何工作,否则将加载ActiveX和其他Visual LISP扩展部分的函数。本章所有实例的前提是已调用了vl-load-com函数。,10.1 AutoCAD对象模型 对象是ActiveX应用程序的主要组成部分。例如,直线、圆弧、多义线和圆等都被称为图形对象。但在使用ActiveX时,以下AutoCAD概念也被称为对象:样式设置对象,如线型(linetype)、文本样式(style)和尺寸样式(dimstyle)等。组织结构对象,如图层(la
3、yer)和块(block)等。图形显示对象,如视图(view)和视口(viewport)。图形的模型空间(modelspace)和图纸空间(paperspace)。甚至连图形和AutoCAD本身都被认为是对象。AutoCAD用层次结构来组织它的对象。结构的根是应用程序对象,即AutoCAD本身。该层次结构被称为AutoCAD的对象模型,见图10-1。,图10-1 AutoCAD对象模型图,AutoCAD的所有对象都有一个或多个属性。属性用于描述对象。例如,圆具有半径、面积、线型等属性,通过半径、面积、线型等属性描述一个具体的圆。椭圆具有面积和线型属性,虽然没有半径这个属性,但可以用其长轴和短轴
4、的比例来描述它。下一级对象也是其上级对象的属性。AutoCAD的对象还包括方法,它们是为特定类型的对象所提供的操作。某些方法可应用于大多数图形对象,例如,Mirror(镜像)和Move(平移)方法。而另一些方法,如Offset(等距线)只能应用到圆弧、圆、椭圆和直线等少数几种图形对象。AutoCAD通过集合将所有对象进行分类,例如,块集合是由 AutoCAD图形中的所有块定义组成的,而模型空间集合则包括模型空间中的所有的图形对象(圆、直线、多义线等)。,10.2.1访问AutoCAD应用程序1.获取AutoCAD应用程序 AutoCAD应用程序即AutoCAD本身,是AutoCAD所有对象的根
5、对象,是访问所有AutoCAD对象的起点。获取AutoCAD应用程序对象,只能通过函数vlax-get-acad-object,格式如下:(setq myacad(vlax-get-acad-object)该函数没有参数,返回指向AutoCAD应用程序的指针#,返回值的数据类型为VLA,即VLISP ActiveX对象。该表达式将指向AutoCAD应用程序的指针赋给了变量myacad。,2.了解AutoCAD应用程序的属性和方法(vlax-dump-object VLA对象 T),该函数的功能是列出指定VLA对象的属性和方法,参数为VLA对象,如果未设置T,只列出指定VLA对象的属性。例如(v
6、lax-dump-object myacad t)返回;IAcadApplication:An instance of the AutoCAD application;Property values:;ActiveDocument=#;Application(RO)=#;Caption(RO)=AutoCAD 2006 Drawing1.dwg;Documents(RO)=#;FullName(RO)=C:Program FilesAutoCAD 2006acad.exe;Height=730;HWND(RO)=66224,;LocaleId(RO)=1033;MenuBar(RO)=#;Me
7、nuGroups(RO)=#;Name(RO)=AutoCAD;Path(RO)=C:Program FilesAutoCAD 2006;Preferences(RO)=#;StatusId(RO)=.Indexed contents not shown.;VBE(RO)=AutoCAD:Problem in loading VBA;Version(RO)=16.2s(LMS Tech);Visible=-1;Width=1020;WindowLeft=2;WindowState=1;WindowTop=2,;Methods supported:;Eval(1);GetAcadState();
8、GetInterfaceObject(1);ListArx();LoadArx(1);LoadDVB(1);Quit();RunMacro(1);UnloadArx(1);UnloadDVB(1);Update();ZoomAll(),;ZoomCenter(2);ZoomExtents();ZoomPickWindow();ZoomPrevious();ZoomScaled(2);ZoomWindow(2),在Property values(属性)部份列出了AutoCAD应用程序具有ActiveDocument(活动的文档)、Application(应用程序的指针)、Caption(标题)、
9、FullName(可执行文件名)等属性。其中标记为#的属性是VLA对象。例如,ActiveDocument(活动的文档)、Documents(一般文档)、MenuBar(菜单条)、MenuGroups(菜单组)和Preferences(设置)这些对象属于VLA对象,它们可以被继续访问,引出下一级ActiveX对象,了解它们的属性和方法。带有标记(RO)的属性是只读的,不能被修改,例如属性Caption(RO)=AutoCAD 2006 Drawing1.dwg,表示AutoCAD应用程序的标题是AutoCAD 2006 Drawing1.dwg,它是只读的,不能被修改。在Methods sup
10、ported(支持的方法)部份列出了可以对过AutoCAD应用程序施加Eval、GetAcadState、GetInterface Object等操作。,10.2.2访问其他AutoCAD对象 获取AutoCAD应用程序这个根对象之后,沿着AutoCAD对象模型图,就可以将其作为起点,逐级访问它的下一级VLA对象。获取AutoCAD应用程序之外的对象,是一个前缀为vla-get-的函数,格式如下:(vla-get-property object)参数object必须是VLA对象,property是object的VLA对象类型的属性。该属性可通过vlax-dump-object函数获得。假定本作
11、业依次绘制了一条起点为(10,20)终点为(60,20)的直线和圆心为(35,20)半径为25的一个圆。按照以下步骤,可以沿着AutoCAD对象模型图所示的AutoCAD应用程序活动文档模型空间图形对象的顺序,访问这条直线和这个圆。,1.获取AutoCAD应用程序对象(setq myacad(vlax-get-acad-object);返回AutoCAD应用程序的指针#,将其赋给变量myacad。2.了解AutoCAD应用程序的属性(vlax-dump-object myacad);返回的属性信息中有以下一行:;ActiveDocument=#。ActiveDocument是AutoCAD应用
12、程序的属性之一,也是AutoCAD应用程序的下一级VLA对象。3.获取活动文档程序对象(setq mydoc(vla-get-ActiveDocument myacad);返回活动文档的指针#,将其赋给变量mydoc。,4.了解活动文档的属性(vlax-dump-object mydoc)返回的属性信息中有以下一行:;ModelSpace(RO)=#。ModelSpace是活动文档的属性之一,也是活动文档的下一级VLA对象。5.获取模型空间对象(setq myms(vla-get-ModelSpace mydoc)返回模型空间的指针#,将其赋给变量myms。6.了解活动文档的属性和方法(vla
13、x-dump-object myms t)返回的属性信息中有以下一行:;Count(RO)=2。说明该模型空间当前有两个图形对象。返回的方法信息中有Add3Dface、Add3Dmesh、Add3Dpoly、AddArc、AddAttribute、AddBox、AddCircle、Item等许多方法。其中 Item是根据序号获取图形对象,第一个图形对象的序号为0。,7.获取模型空间的第一个图形对象(setq myline(vla-item myms 0)返回第一个图形对象,即这条直线的指针#,将其赋给变量myline。8.了解这条直线的属性和方法(vlax-dump-object myline
14、 t)返回有关这条直线属性的信息如下:;Property values:;Angle(RO)=0.0;Application(RO)=#;Delta(RO)=(50.0 0.0 0.0);Document(RO)=#;EndPoint=(60.0 20.0 0.0),;Handle(RO)=81;HasExtensionDictionary(RO)=0;Hyperlinks(RO)=#;Layer=0;Length(RO)=50.0;Linetype=ByLayer;LinetypeScale=1.0;Lineweight=-1;Normal=(0.0 0.0 1.0);ObjectID(RO
15、)=2129985160;ObjectName(RO)=AcDbLine;OwnerID(RO)=2129984760;PlotStyleName=ByLayer;StartPoint=(10.0 20.0 0.0);Thickness=0.0;TrueColor=#;Visible=-1,从以上有关这条直线属性的信息中,可以了解到这条直线与X轴正方向夹角为0、三个坐标的增量分别是(50.0 0.0 0.0)、终点坐标是(60.0 20.0 0.0)、句柄是81、所在图层的名字是0、长度为50.0、线型名是ByLayer、线型比例为1.0、线宽为-1(默认)、厚度方向为(0.0 0.0 1.0
16、)、打印样式名是ByLayer、起点坐标是(10.0 20.0 0.0)、厚度为 0.0。返回这条直线的有关方法的信息如下:;Methods supported:;ArrayPolar(3);ArrayRectangular(6);Copy();Delete();GetBoundingBox(2);GetExtensionDictionary(),;GetXData(3);Highlight(1);IntersectWith(2);Mirror(2);Mirror3D(3);Move(2);Offset(1);Rotate(2);Rotate3D(3);ScaleEntity(2);SetXD
17、ata(2);TransformBy(1);Update(),从以上有关这个圆有关方法的信息中,可以了解到对这个圆可以施加ArrayPolar(环形阵列)、ArrayRectangular(矩形阵列)、Copy(复制)、Delete(删除)、GetBoundingBox(包容盒)、GetExtensionDictionary(获取延长方向)、GetXData(获取扩展数据)、Highlight(高亮显示)、IntersectWith(交点)、Mirror(镜像)、Mirror3D(三维镜像)、Move(平移)、Offset(等距)、Rotate(旋转)、Rotate3D(三维旋转)、Scale
18、Entity(比例缩放)、SetXData(设置扩展数据)、TransformBy(变换)、Update(更新)这些操作。,9.获取模型空间的第二个图形对象(setq mycircle(vla-item myms 1)返回第二个图形对象,即圆的指针#,将其赋给变量myline。10.了解这个圆的属性和方法(vlax-dump-object mycircle t)返回有关这个圆的属性信息中大部分与直线相同,不同的部份有Area(面积)=1963.5、Center(圆心)=(35.0 20.0 0.0)、Circumference(周长)=157.08、Diameter(直径)=50.0和Radi
19、us(半径)=25.0。返回有关这个圆的方法信息中与直线完全相同。,10.2.3 使用检验工具了解AutoCAD对象的属性 上一节介绍了通过函数了解AutoCAD对象和这些对象的属性与方法,本节介绍利用检验工具了解AutoCAD对象的属性。按照上一节的顺序用检验工具了解AutoCAD应用程序、活动文档、模型空间和图形对象的步骤如下:1.获取AutoCAD应用程序对象(setq myacad(vlax-get-acad-object)返回AutoCAD应用程序的指针#,将其赋给变量myacad。,2.了解AutoCAD应用程序对象 要了解VLA对象的属性,首先选取择指向该对象的变量。选取myac
20、ad,然后单击按钮,将弹出图10-2 所示AutoCAD应用程序的检验窗口。,图10-2 AutoCAD应用程序的检验窗口,3.了解活动文档的属性 双击上图所示AutoCAD应用程序的检验窗口的Active Document属性,将弹出图10-3所示活动文档的检验窗口。,图10-3 活动文档的检验窗口,4.了解模型空间的属性 双击活动文档的检验窗口的ModelSpace属性,将弹出图10-4所示模型空间检验窗口。在该窗口可以看到属性Count的值为2,说明在模型空间当前有两个图形对象。,图10-4 模型空间检验窗口,5.了解直线的属性 由于模型空间的检验窗口没有直线的VLA对象,所以必须以下表
21、达式获取这条直线的VLA对象。(setq myacad(vlax-get-acad-object)(setq mydoc(vla-get-ActiveDocument myacad)(setq myms(vla-get-ModelSpace mydoc)(setq myline(vla-item myms 0)以上表达式获取了这条直线的VLA对象的指针,并将其赋给了myline变量。选取myline,然后单击按钮,将弹出图10-5所示这条直线的检验窗口。,图10-5 直线的检验窗口,6.了解圆的属性 同样的理由,必须以下表达式获取这个圆的VLA对象。(setq mycircle(vla-ite
22、m myms 1),图10-6 圆的检验窗口,以上表达式获取了这个圆的对象的指针,并将其赋给了mycircle变量。选取mycircle,然后单击按钮,将弹出图10-6所示这个圆的检验窗口。不难看出,用检验窗口显示有关VLA对象的属性,与10.2.1节通过vlax-dump-object函数显示有关VLA对象的属性基本相同。,10.2.4通过Help功能了解AutoCAD对象通过Help功能了解AutoCAD对象的步骤是:在VLISP环境下,按功能键F1;在随后显示的AutoCAD 2006 Help:Developer Documentation对话框的目录选项卡内双击;在展开的目录树上双击
23、;在Objects目录下双击AutoCAD图形对象,例如双击,即可显示图107所示有关直线对象方法和属性的信息。,图107有关直线对象方法和属性的帮助信息,以上帮助信息告诉用户创建一条直线用Addline方法,编辑直线用第一列显示的各种方法,第二列显示了直线的全部属性。至此已介绍了了解AutoCAD对象的属性通过帮助功能显示的不难看出,用检验窗口显示有关VLA对象的属性,与10.2节通过vlax-dump-object函数显示有关VLA对象的属性基本相同。10.3 在Visual LISP函数中使用ActiveX方法10.3.1通过Help功能详细了解AutoCAD图形对象的方法 上一节的帮助
24、功能和10.2节的vlax-dump-object函数都提供了AutoCAD图形对象的方法,但这只是一些方法的名称,下面以了解创建一条直线的Addline方法为例,介绍详细了解AutoCAD图形对象的方法。双击图107所示有关直线对象帮助信息中的蓝色带下划线的超文本Addline,显示有关创建直线的语法,见图108。,图108创建直线的语法,对于Visual LISP的用户来说,该语法很陌生,因为它是为Visual Basic用户定义的。在Visual Basic环境下,AddLine的语法定义如下:RetVal=object.AddLine(StarPoint,EndPoint)其中obje
25、ct是模型空间、图纸空间或图块对象的集合,StarPoint、EndPoint是Variant(3个双精度类型元素组成的变体)的数据类型,返回值是直线对象。因此确定Visual LISP函数的创建直线的方法还需要做以下两件事:(1)将Visual Basic环境下的语句改写为AutoLISP表达式。(2)将AutoLISP的数据转换为ActiveX所需类型的数据。,10.3.2 将Visual Basic环境下的语句改写为AutoLISP表达式 先分析Visual Basic环境下的语句:RetVal=object.AddLine(StartPoint,EndPoint)RetVal是返回值,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AutoLISP 使用 ActiveX 对象

链接地址:https://www.31ppt.com/p-5445153.html