AutoLISP Visual LISP教程《第十章》
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图10-1 AutoCAD
对象模型图
AutoCAD的所有对象都有一个或多个属性。属性用于描述对象。 例如,圆具有半径、面积、线型等属性,通过半径、面积、线型 等属性描述一个具体的圆。椭圆具有面积和线型属性,虽然没有 半径这个属性,但可以用其长轴和短轴的比例来描述它。
下一级对象也是其上级对象的属性。
10.2.2访问其他AutoCAD对象
获取AutoCAD应用程序这个根对象之后,沿着AutoCAD对象模 型图,就可以将其作为起点,逐级访问它的下一级VLA对象。 获取AutoCAD应用程序之外的对象,是一个前缀为vla-get-的 函数,格式如下:
(vla-get-property object)
; ListArx ()
; LoadArx (1) ; LoadDVB (1)
; Quit ()
; RunMacro (1) ; UnloadArx (1) ; UnloadDVB (1) ; Update () ; ZoomAll ()
在Property values(属性)部份列出了AutoCAD应用程序具 有ActiveDocument(活动的文档)、Application(应用程序的 指针)、Caption(标题)、FullName(可执行文件名)等属性。 其中标记为 #<VLA-OBJECT „ >的属性是VLA对象。例如 , ActiveDocument(活动的文档)、Documents (一般文档)、 MenuBar (菜单条)、MenuGroups (菜单组)和Preferences (设置) 这 些 对 象 属 于 VLA 对 象 , 它 们 可 以 被 继 续 访 问 , 引 出 下 一 级 ActiveX对象,了解它们的属性和方法。
图形显示对象,如视图(view)和视口(viewport)。 图形的模型空间(modelspace)和图纸空间(paperspace)。 甚至连图形和AutoCAD本身都被认为是对象。 AutoCAD用层次结构来组织它的对象。结构的根是应用程 序对象,即AutoCAD本身。该层次结构被称为AutoCAD的对象 模型,见图10-1 。
10.1 AutoCAD对象模型
对象是ActiveX应用程序的主要组成部分。例如,直线、圆 弧、多义线和圆等都被称为图形对象。但在使用ActiveX时,以 下AutoCAD概念也被称为对象: 样式设置对象,如线型(linetype)、文本样式(style)和尺 寸样式(dimstyle)等。
组织结构对象,如图层(layer)和块(block)等。
5. 获取模型空间对象
(setq myms(vla-get-ModelSpace mydoc)) 返回模型空间的指针#<VLA-OBJECT IAcadModelSpace 011c1e04>,将其赋给 变量myms。 6.了解活动文档的属性和方法 (vlax-dump-object myms t) 返回的属性信息中有以下一行:
AutoCAD的对象还包括方法,它们是为特定类型的对象所提供 的操作。某些方法可应用于大多数图形对象,例如,Mirror(镜 像)和Move(平移)方法。而另一些方法,如Offset(等距线) 只能应用到圆弧、圆、椭圆和直线等少数几种图形对象。 AutoCAD通过集合将所有对象进行分类,例如,块集合是由 AutoCAD图形中的所有块定义组成的,而模型空间集合则包括 模型空间中的所有的图形对象(圆、直线、多义线等)。
行 :;ActiveDocument=#<VLA-OBJECT IAcadDocument 01165340> 。 ActiveDocument是AutoCAD应用程序的属性之一,也是AutoCAD应用程 序的下一级VLA对象。
3. 获取活动文档程序对象
(setq mydoc(vla-get-ActiveDocument myacad)); 返 回 活 动 文
1. 获取AutoCAD应用程序对象 (setq myacad (vlax-get-acad-object))
;返回AutoCAD应用程序的指针#<VLA-OBJECT IAcadApplication 00b5e51c>,
将其赋给变量myacad 。
2. 了解AutoCAD应用程序的属性 (vlax-dump-object myacad); 返 回 的 属 性 信 息 中 有 以 下 一
; Count (RO) = 2。说明该模型空间当前有两个图形对象。
返 回 的 方 法 信 息 中 有 Add3Dface 、 Add3Dmesh 、 Add3Dpoly 、 AddArc 、 AddAttribute、 AddBox、AddCircle、„、Item等许多方法。
其中 Item是根据序号获取图形对象,第一个图形对象的序号为0。
; HWND (RO) = 66224
; LocaleId (RO) = 1033 ; MenuBar (RO) = #<VLA-OBJECT IAcadMenuBar 011bdf94> ; MenuGroups (RO) = #<VLA-OBJECT IAcadMenuGroups 003d3aa0> ; Name (RO) = "AutoCAD" ; Path (RO) = "C:\\Program Files\\AutoCAD 2006" ; Preferences (RO) = #<VLA-OBJECT IAcadPreferences 011bdf6c> ; 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
档 的 指 针 #<VLA-OBJECT IAcadDocument 01165340> , 将 其 赋 给 变 量 mydoc。
4. 了解活动文档的属性 (vlax-dump-object mydoc) 返回的属性信息中有以下一行: ;ModelSpace (RO) = #<VLA-OBJECT IAcadModelSpace 011c1e04> 。 ModelSpace是活动文档的属性之一,也是活动文档的下一级VLA对象。
10.2.1访问AutoCAD应用程序
1. 获取AutoCAD应用程序
AutoCAD应用程序即AutoCAD本身,是AutoCAD所有对象的根
对象,是访问所有AutoCAD对象的起点。获取AutoCAD应用程序
对象,只能通过函数vlax-get-acad-object,格式如下: (setq myacad(vlax-get-acad-object)) 该函数没有参数,返回指向AutoCAD应用程序的指针 #<VLA-OBJECT IAcadApplication 00b5e51c> ,返回值的数 据类型为VLA,即VLISP ActiveX对象。该表达式将指向 AutoCAD应用程序的指针赋给了变量myacad。
带 有 标 记 (RO) 的 属 性 是 只 读 的 , 不 能 被 修 改 , 例 如 属 性 Caption (RO) = "AutoCAD 2006 – [Drawing1.dwg]" , 表 示 AutoCAD应用程序的标题是"AutoCAD 2006 – [Drawing1.dwg]", 它是只读的,不能被修改。 在Methods supported (支持的方法)部份列出了可以对过 AutoCAD应用程序施加Eval、GetAcadState、GetInterface Object等操作。
2. 了解AutoCAD应用程序的属性和方法 (vlax-dump-object VLA对象 [T]),该函数的功能是列出指 定VLA对象的属性和方法,参数为VLA对象,如果未设置T,只列 出指定VLA对象的属性。例如 (vlax-dump-object myacad t)返回
; IAcadApplication: An instance of the AutoCAD application ; Property values: ; ActiveDocument = #<VLA-OBJECT IAcadDocument 01165340> ; Application (RO) = #<VLA-OBJECT IAcadApplication 00b5e51c> ; Caption (RO) = "AutoCAD 2006 – [Drawing1.dwg]" ; Documents (RO) = #<VLA-OBJECT IAcadDocuments 011b9ba0> ; FullName (RO) = "C:\\Program Files\\AutoCAD 2006\\acad.exe" ; Height = 730
; Methods supported: ; Eval (1) ; GetAcadState () ; GetInterfaceObject (1)
; ZoomCenter (2) ; ZoomExtents () ; ZoomPickWindow () ; ZoomPrevious () ; ZoomScaled (2) ; ZoomWindow (2)
; Property values:
; Angle (RO) = 0.0
; Application (RO) = #<VLA-OBJECT IAcadApplication 00b5e51c> ; Delta (RO) = (50.0 0.0 0.0)
; Document (RO) = #<VLA-OBJECT IAcadDocument 01165340>
第10章
在AutoLISP中使用ActiveX对象
ActiveX Automation是一种新的方法,通过它可以用编程的 方式操作AutoCAD图形。在许多操作AutoCAD图形对象的实例中, ActiveX的速度比传统的AutoLISP函数要快。在某些情况下,例 如在反应器回调函数中访问图形对象时,只能使用ActiveX。 许多语言和环境可以使用ActiveX编程界面,如C++、Visual Basic、Java和Delphi等。在AutoLISP中使用ActiveX对象,其 模型、属性和方法和在其他编程环境中使用的ActiveX对象完全象
(setq myline(vla-item myms 0)) 返 回 第 一 个 图 形 对 象 , 即 这 条 直 线 的 指 针 #<VLA-OBJECT IAcadLine 011b9e74>,将其赋给变量myline。 8.了解这条直线的属性和方法 (vlax-dump-object myline t) 返回有关这条直线属性的信息如下:
如果要在AutoLISP中使用ActiveX函数,必须首先调用vlload-com函数来初始化ActiveX环境。vl-load-com函数首先检 查是否加载了ActiveX支持的函数,如果已加载,该函数不做任 何工作,否则将加载ActiveX和其他Visual LISP扩展部分的函 数。本章所有实例的前提是已调用了vl-load-com函数。
参数object必须是VLA对象,property是object的VLA对象类 型的属性。该属性可通过vlax-dump-object函数获得。 假定本作业依次绘制了一条起点为(10,20)终点为(60,20)的 直线和圆心为(35,20)半径为25的一个圆。按照以下步骤,可以 沿着AutoCAD对象模型图所示的AutoCAD应用程序活动文档 模型空间图形对象的顺序,访问这条直线和这个圆。