AutoCAD二次开发实用教程 郭秀娟 第12章 使用ActiveX
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
属性。百度文库
12.8 确定方法或属性是否适用于特定对象
如果使用不适于指定对象的方法或属性,将会 导致程序出错,所以在不能确定属性或方法是否应用 到某个对象时,最好用vlax-method-application-p 函数或vlax-property-available-p函数测试一下对象, 如果方法或特性可用,则函数返回T,否则返回nil。 1.函数vlax-method-application-p 2.函数vlax-property-available-p
第12章 使用ActiveX
ActiveX Automation是一种新的方法,通过它 可以用编程的方式操作AutoCAD图形。
Visual BASIC C++
Java
MS Word VBA
Delphi
AutoCAD VBA
Excel VBA
AutoCAD ActiveX Objects
AtuoCAD Application Drawing.dwy
12.5.3 将Visual Basic环境下的语句改写为AutoLISP 表达式 1. 先分析Visual Basic环境下的语句: RetVal = object.AddLine(StartPoint,EndPoint) 2.采用AutoLISP表达式为: (setq myline(vla-addline myms (vlax-3d-point '(10 20)) (vlax-3d-point '(80 30))))
对象是ActiveX应用程序的主要组成部分。例如,直线、圆 弧、多义线和圆等都被称为图形对象。但在使用ActiveX时,以 下AutoCAD本身及概念都被称为对象。 1. 样式设置对象,如线型(linetype)、文本样式(style)和尺寸 样式(dimstyle)等。 2. 组织结构对象,如图层(layer)和块(block)等。 3. 图形显示对象,如视图(view)和视口(viewport)。 4. 图形的模型空间(modelspace)和图纸空间(paperspace)。
第12章 使用ActiveX
许多语言和环境都可以使用ActiveX编程界面, 如C++、Visual Basic、Java和Delphi等。在 AutoLISP中使用ActiveX对象,与其模型、属性和 方法和在其他编程环境中使用的ActiveX对象完全 相同。
12.1 在AutoLISP中使用ActiveX对象
12.2.1 对象属性
AutoCAD对象模型中的所有对象都有一个或多个特 性,我们把这些特性称为属性。属性用于描述对象。例 如,圆具有半径、面积、线型等属性,通过半径、面积、 线型等属性描述一个具体的圆。椭圆具有面积和线型属 性,虽然没有半径这个属性,但可以用其长轴和短轴的 比例来描述它。通过ActiveX函数访问AutoCAD数据时 必须知道特性名称。
12.2.3 对象集合
AutoCAD通过集合将所有对象进行分类。虽然这些集 合包含了不同类型的数据,但是可以使用相似的技术来处理 它们。每一个集合都提供了向其中添加对象的方法。大多数 集合是通过 Add 方法完成的。但添加图元对象通常使用名为 Add<图元名> 的方法。例如,要添加直线,请使用 AddLine 方法。
该函数先检查是否已经加载了ActiveX函数,如 果已经加载,则该函数不做任何工作,如果尚未加载 ActiveX支持函数,vl-load-com函数将为AutoLISP 语言加载ActiveX以及其他Visual LISP扩展部分。
12.4 ActiveX对象访问
12.4.1 查看对象特性 查看AutoCAD应用程序对象的特性,可以选中
12.2 AutoCAD对象模型
AutoCAD对象是通过分层方式来组织的,应用程序 (Application)对象为根对象。这种分层结构的视图被归 结为对象模型。Application对象还提供指向AutoCAD图 形(通过Documents集合)、AutoCAD菜单和工具栏 (通过 MenuBa 和MenuGroup 集合)以及 VBA IDE (通过VBE特性)的链接。
1. 获取AutoCAD应用程序 2. AutoCAD应用程序的属性和方法
12.3.2 应用程序对象以下的其他ActiveX对象
沿着AutoCAD对象模型层次图,应用程序对象 的ActiveDocument特性将把用户带到文档对象,它 代表当前AutoCAD图形。
文档对象有许多特性。对非图形对象(如图层、 线型和组等)的访问是由名称相近的特性(如Layers、 Linetype和Groups等)提供的。
12.3.4 编程技巧
在编程中应避免反复调用AutoCAD应用程序、 活动文档和模型空间对象,因为它们降低程序的运行 速度,在编写程序时,用户应该让自己的应用程序一 次获取这些对象,然后在整个应用程序中都引用所获 取的对象指针。
12.3.5 在Visual LISP函数中使用 ActiveX
为访问ActiveX对象,Visual LISP给AutoLISP语言增 加了一些函数。 1. vla-函数和每个ActiveX方法相对应,可用这些函 数调用ActiveX方法(如vla-addCircle调用 addCircle方法)。 2. vla-get-函数和每个特性相对应,可获取ActiveX 特性的值(如vla-get-Color获取对象的Color特性)。 3. vla-put-函数和每个特性相对应,可设置ActiveX 特性的值(如vla- put –Color获取对象的Color特 性)。
12.3.3 过程总结
实现的功能是用ActiveX Automation在AutoCAD图 形中画一个圆对象,函数调用序列如下所示:
(vl-load-com) (setq acadObject(vlax-get-acad-object)) (setq acadDocument(vla-get-ActiveDocument acadObject)) (setq mSpace(vla-get-ModelSpace acadDocument)) (setq mycircle(vla-acadCircle mSpace(vlax-3d-point '(3.0 3.0 0.0))2.0))
12.4 ActiveX对象访问
12.4.5 通过Help功能了解AutoCAD对象 1.在VLISP环境下,按功能键F1。 2.在随后显示的AutoCAD 2007Help:Developer 3.Documentation对话框的目录选项卡内双击 。 4.在展开的目录树上双击 。 5.在Objects目录下双击AutoCAD图形对象。
12.5 在Visual LISP函数中使用ActiveX方法
12.5.4 转换数据类型为ActiveX型 实体类型是一种特殊的数据类型,实际上可以看
做是一种自定义的数据结构。可以含有不同类型的数 据,固定长度的字符串数据和用户定义的类型除外。 与数据一同存储的是数据类型的识别信息,这种自定 义的数据类型使得与ActiveX的数据交互可以很顺利, 因为它是基于多种程序设计语言都能够接受的数据结 构。
1. 用带有vla-put-前缀的函数 这类函数的调用语法如下: (vla-put-property VLA图形对象 新的属性值) 2.用函数vlax-put-property修改ActiveX对象属性 函数vlax-put-property的调用格式如下: (vlax-put-property VLA图形对象 property 新的属 性值)参数property为符号或字符串,标志要修改的
AutoCAD对象模型图,就可以将其作为起点,逐级 访问它的下一级VLA对象。
12.4 ActiveX对象访问
12.4.4 使用检验工具了解AutoCAD对象的属性 1. 获取AutoCAD应用程序对象 2. AutoCAD应用程序对象 3. 活动文档的属性 4. 模型空间的属性 5. 直线的属性 6. 圆的属性
12.3 访问AutoCAD对象
通过Document对象的Application特性可以访 问Application对象。在对象层次结构中, Application对象位于Document对象的上方。
如果要AutoLISP中使用ActiveX函数,用户必 须先加载支持代码来使这些函数可用。
12.3.1 访问AutoCAD应用程序
12.5 在Visual LISP函数中使用ActiveX方法
Visual LISP为AutoLISP提供了一系列操作ActiveX对 象的函数,这些函数可分为以下几种: 1)VLA-前缀的函数 2)VLA-Get前缀的函数 3)VLA-Put前缀的函数 4)VLAX-前缀的函数
12.5 在Visual LISP函数中使用ActiveX方法
该命令用addCircle方法向图形中添加圆,为绘制圆而 调用的函数是vla-addCircle。
12.4 ActiveX对象访问
Application对象是AutoCAD对象模型中的基础, 从Application对象可以访问其他任何对象,或是被 访问对象的特性或方法。如果要在AutoLISP中使用 ActiveX函数,必须先调用vl-load-com函数来加载 所有的ActiveX函数。
12.5.1查找所需要的函数 Visual LISP中ActiveX方法操作函数是一个非常
复杂的函数系列,如果要查找进行相应操作的函数, 可参考AutoCAD在线帮助中的“AutoCAD ActiveX and VBA references”部分(对应的AutoCAD安装 路径Help子目录下的acadauto.chm文件)。
12.5 在Visual LISP函数中使用ActiveX方法
12.5.2确定函数参数 确定了函数名,还需要进一步确定这个函数的参
数和数据类型,在“AutoCAD ActiveX and VBA references”中有使用ActiveX函数的详细信息。
12.5 在Visual LISP函数中使用ActiveX方法
12.6 AutoCAD实体名和VLA对象之间的转换
1.将AutoCAD实体名转换为VLA对象 2. 将VLA图形对象转换为AutoCAD实体名 (1)用带有vla-get前缀的函数 (2)用函数vlax-get-property获取任意ActiveX对 象的任意属性
12.7 修改图形对象的属性
12.2.2 对象方法
ActiveX对象也包括方法 ,它们是为特定类型的对象提 供的动作。某些方法可应用到大多数AutoCAD图形对象。
在Visual LISP中,ActiveX方法是用AutoLISP函数实现 的,在Visual LISP文档中,用户会看到许多关于ActiveX函数 的内容,但是应该清楚在ActiveX术语中,它们应被称为方法。
指向此对象的变量,然后选择“视图”→“检验”命 令,或者单击“视图”工具栏中的“检验”按钮。
12.4 ActiveX对象访问
12.4.2 访问图形对象 1. 获取AutoCAD应用程序
2. AutoCAD应用程序的属性和方法
12.4 ActiveX对象访问
12.4.3 访问其他AutoCAD对象 获取AutoCAD应用程序这个根对象之后,沿着
12.3.6 确定所需的Visual LISP函数
Visual LISP ActiveX函数实际上是提供了对ActiveX 方法的访问能力,如,在Visual LISP控制台提示下输入 下列AutoLISP语句: _$ (setq mycircle(vla-addCircle mSpace(vlax-3d-point '(3.0 3.0 0.0))2.0)) #<VLA-OBJECRT LAcadCircle03ad067c>
第12章 使用ActiveX
Visual LISP为AutoCAD提供了许多新的功能, 包括支持ActiveX对象的操作以及支持ActiveX与其 他程序的交互等。
ActiveX Automation技术使用户可以方便地使 用其他许多面向对象的高级语言来开发AutoCAD程 序,它的作用是面向对象的编程接口,程序可以据此 访问AutoCAD所有的绘图对象和非绘图对象。
12.8 确定方法或属性是否适用于特定对象
如果使用不适于指定对象的方法或属性,将会 导致程序出错,所以在不能确定属性或方法是否应用 到某个对象时,最好用vlax-method-application-p 函数或vlax-property-available-p函数测试一下对象, 如果方法或特性可用,则函数返回T,否则返回nil。 1.函数vlax-method-application-p 2.函数vlax-property-available-p
第12章 使用ActiveX
ActiveX Automation是一种新的方法,通过它 可以用编程的方式操作AutoCAD图形。
Visual BASIC C++
Java
MS Word VBA
Delphi
AutoCAD VBA
Excel VBA
AutoCAD ActiveX Objects
AtuoCAD Application Drawing.dwy
12.5.3 将Visual Basic环境下的语句改写为AutoLISP 表达式 1. 先分析Visual Basic环境下的语句: RetVal = object.AddLine(StartPoint,EndPoint) 2.采用AutoLISP表达式为: (setq myline(vla-addline myms (vlax-3d-point '(10 20)) (vlax-3d-point '(80 30))))
对象是ActiveX应用程序的主要组成部分。例如,直线、圆 弧、多义线和圆等都被称为图形对象。但在使用ActiveX时,以 下AutoCAD本身及概念都被称为对象。 1. 样式设置对象,如线型(linetype)、文本样式(style)和尺寸 样式(dimstyle)等。 2. 组织结构对象,如图层(layer)和块(block)等。 3. 图形显示对象,如视图(view)和视口(viewport)。 4. 图形的模型空间(modelspace)和图纸空间(paperspace)。
第12章 使用ActiveX
许多语言和环境都可以使用ActiveX编程界面, 如C++、Visual Basic、Java和Delphi等。在 AutoLISP中使用ActiveX对象,与其模型、属性和 方法和在其他编程环境中使用的ActiveX对象完全 相同。
12.1 在AutoLISP中使用ActiveX对象
12.2.1 对象属性
AutoCAD对象模型中的所有对象都有一个或多个特 性,我们把这些特性称为属性。属性用于描述对象。例 如,圆具有半径、面积、线型等属性,通过半径、面积、 线型等属性描述一个具体的圆。椭圆具有面积和线型属 性,虽然没有半径这个属性,但可以用其长轴和短轴的 比例来描述它。通过ActiveX函数访问AutoCAD数据时 必须知道特性名称。
12.2.3 对象集合
AutoCAD通过集合将所有对象进行分类。虽然这些集 合包含了不同类型的数据,但是可以使用相似的技术来处理 它们。每一个集合都提供了向其中添加对象的方法。大多数 集合是通过 Add 方法完成的。但添加图元对象通常使用名为 Add<图元名> 的方法。例如,要添加直线,请使用 AddLine 方法。
该函数先检查是否已经加载了ActiveX函数,如 果已经加载,则该函数不做任何工作,如果尚未加载 ActiveX支持函数,vl-load-com函数将为AutoLISP 语言加载ActiveX以及其他Visual LISP扩展部分。
12.4 ActiveX对象访问
12.4.1 查看对象特性 查看AutoCAD应用程序对象的特性,可以选中
12.2 AutoCAD对象模型
AutoCAD对象是通过分层方式来组织的,应用程序 (Application)对象为根对象。这种分层结构的视图被归 结为对象模型。Application对象还提供指向AutoCAD图 形(通过Documents集合)、AutoCAD菜单和工具栏 (通过 MenuBa 和MenuGroup 集合)以及 VBA IDE (通过VBE特性)的链接。
1. 获取AutoCAD应用程序 2. AutoCAD应用程序的属性和方法
12.3.2 应用程序对象以下的其他ActiveX对象
沿着AutoCAD对象模型层次图,应用程序对象 的ActiveDocument特性将把用户带到文档对象,它 代表当前AutoCAD图形。
文档对象有许多特性。对非图形对象(如图层、 线型和组等)的访问是由名称相近的特性(如Layers、 Linetype和Groups等)提供的。
12.3.4 编程技巧
在编程中应避免反复调用AutoCAD应用程序、 活动文档和模型空间对象,因为它们降低程序的运行 速度,在编写程序时,用户应该让自己的应用程序一 次获取这些对象,然后在整个应用程序中都引用所获 取的对象指针。
12.3.5 在Visual LISP函数中使用 ActiveX
为访问ActiveX对象,Visual LISP给AutoLISP语言增 加了一些函数。 1. vla-函数和每个ActiveX方法相对应,可用这些函 数调用ActiveX方法(如vla-addCircle调用 addCircle方法)。 2. vla-get-函数和每个特性相对应,可获取ActiveX 特性的值(如vla-get-Color获取对象的Color特性)。 3. vla-put-函数和每个特性相对应,可设置ActiveX 特性的值(如vla- put –Color获取对象的Color特 性)。
12.3.3 过程总结
实现的功能是用ActiveX Automation在AutoCAD图 形中画一个圆对象,函数调用序列如下所示:
(vl-load-com) (setq acadObject(vlax-get-acad-object)) (setq acadDocument(vla-get-ActiveDocument acadObject)) (setq mSpace(vla-get-ModelSpace acadDocument)) (setq mycircle(vla-acadCircle mSpace(vlax-3d-point '(3.0 3.0 0.0))2.0))
12.4 ActiveX对象访问
12.4.5 通过Help功能了解AutoCAD对象 1.在VLISP环境下,按功能键F1。 2.在随后显示的AutoCAD 2007Help:Developer 3.Documentation对话框的目录选项卡内双击 。 4.在展开的目录树上双击 。 5.在Objects目录下双击AutoCAD图形对象。
12.5 在Visual LISP函数中使用ActiveX方法
12.5.4 转换数据类型为ActiveX型 实体类型是一种特殊的数据类型,实际上可以看
做是一种自定义的数据结构。可以含有不同类型的数 据,固定长度的字符串数据和用户定义的类型除外。 与数据一同存储的是数据类型的识别信息,这种自定 义的数据类型使得与ActiveX的数据交互可以很顺利, 因为它是基于多种程序设计语言都能够接受的数据结 构。
1. 用带有vla-put-前缀的函数 这类函数的调用语法如下: (vla-put-property VLA图形对象 新的属性值) 2.用函数vlax-put-property修改ActiveX对象属性 函数vlax-put-property的调用格式如下: (vlax-put-property VLA图形对象 property 新的属 性值)参数property为符号或字符串,标志要修改的
AutoCAD对象模型图,就可以将其作为起点,逐级 访问它的下一级VLA对象。
12.4 ActiveX对象访问
12.4.4 使用检验工具了解AutoCAD对象的属性 1. 获取AutoCAD应用程序对象 2. AutoCAD应用程序对象 3. 活动文档的属性 4. 模型空间的属性 5. 直线的属性 6. 圆的属性
12.3 访问AutoCAD对象
通过Document对象的Application特性可以访 问Application对象。在对象层次结构中, Application对象位于Document对象的上方。
如果要AutoLISP中使用ActiveX函数,用户必 须先加载支持代码来使这些函数可用。
12.3.1 访问AutoCAD应用程序
12.5 在Visual LISP函数中使用ActiveX方法
Visual LISP为AutoLISP提供了一系列操作ActiveX对 象的函数,这些函数可分为以下几种: 1)VLA-前缀的函数 2)VLA-Get前缀的函数 3)VLA-Put前缀的函数 4)VLAX-前缀的函数
12.5 在Visual LISP函数中使用ActiveX方法
该命令用addCircle方法向图形中添加圆,为绘制圆而 调用的函数是vla-addCircle。
12.4 ActiveX对象访问
Application对象是AutoCAD对象模型中的基础, 从Application对象可以访问其他任何对象,或是被 访问对象的特性或方法。如果要在AutoLISP中使用 ActiveX函数,必须先调用vl-load-com函数来加载 所有的ActiveX函数。
12.5.1查找所需要的函数 Visual LISP中ActiveX方法操作函数是一个非常
复杂的函数系列,如果要查找进行相应操作的函数, 可参考AutoCAD在线帮助中的“AutoCAD ActiveX and VBA references”部分(对应的AutoCAD安装 路径Help子目录下的acadauto.chm文件)。
12.5 在Visual LISP函数中使用ActiveX方法
12.5.2确定函数参数 确定了函数名,还需要进一步确定这个函数的参
数和数据类型,在“AutoCAD ActiveX and VBA references”中有使用ActiveX函数的详细信息。
12.5 在Visual LISP函数中使用ActiveX方法
12.6 AutoCAD实体名和VLA对象之间的转换
1.将AutoCAD实体名转换为VLA对象 2. 将VLA图形对象转换为AutoCAD实体名 (1)用带有vla-get前缀的函数 (2)用函数vlax-get-property获取任意ActiveX对 象的任意属性
12.7 修改图形对象的属性
12.2.2 对象方法
ActiveX对象也包括方法 ,它们是为特定类型的对象提 供的动作。某些方法可应用到大多数AutoCAD图形对象。
在Visual LISP中,ActiveX方法是用AutoLISP函数实现 的,在Visual LISP文档中,用户会看到许多关于ActiveX函数 的内容,但是应该清楚在ActiveX术语中,它们应被称为方法。
指向此对象的变量,然后选择“视图”→“检验”命 令,或者单击“视图”工具栏中的“检验”按钮。
12.4 ActiveX对象访问
12.4.2 访问图形对象 1. 获取AutoCAD应用程序
2. AutoCAD应用程序的属性和方法
12.4 ActiveX对象访问
12.4.3 访问其他AutoCAD对象 获取AutoCAD应用程序这个根对象之后,沿着
12.3.6 确定所需的Visual LISP函数
Visual LISP ActiveX函数实际上是提供了对ActiveX 方法的访问能力,如,在Visual LISP控制台提示下输入 下列AutoLISP语句: _$ (setq mycircle(vla-addCircle mSpace(vlax-3d-point '(3.0 3.0 0.0))2.0)) #<VLA-OBJECRT LAcadCircle03ad067c>
第12章 使用ActiveX
Visual LISP为AutoCAD提供了许多新的功能, 包括支持ActiveX对象的操作以及支持ActiveX与其 他程序的交互等。
ActiveX Automation技术使用户可以方便地使 用其他许多面向对象的高级语言来开发AutoCAD程 序,它的作用是面向对象的编程接口,程序可以据此 访问AutoCAD所有的绘图对象和非绘图对象。