AutoCAD与易语言交互开发指南 下载本文

前 言 前 言

易语言是一门计算机程序语言。以“易”著称,以中文作为程序代码表达的语言形式。易语言的创始人是吴涛。早期版本的名字为E语言。易语言最早的版本的发布可追溯至2000年9月11日。可以说,创造易语言的初衷是进行用中文来编写程序的实践。从2000年至今,易语言已经发展到一定的规模:功能上、用户数量上都十分可观。

易语言提供对OCX控件、类型库、API函数、COM协议等一系列接口的支持,并开放其支持库接口技术文档供第三方使用,这为AutoCAD与易语言交互开发提供了良好的技术支持。易语言与AutoCAD交互开发全中文编程可以摆脱英语的瓶颈,宜于理解和交流,在很短的时间就可以掌握编程操作AutoCAD的关键技术。学习和掌握AutoCAD与易语言交互开发技术,对于非专业的AutoCAD二次开发人员,是个不错的选择。

作者:石头也疯狂 QQ:58530494

声明:本教材部分内容来源于互联网,这部分内容版权归其作业所有。本教材只用于交流严禁转载!

1

文本目录 目 录

第一章 AutoCAD与易语言交互开发基础 ....................................................... 3

1.1AutoCAD与易语言交互开发环境 ................................................. 3 1.2 Hello word练习示例 .................................................................. 7

第二章 理解AutoCAD对象操作基础 ............................................................. 10

2.2访问对象层次 ............................................................................ 15 2.3集合对象操作 ............................................................................ 15 2.4理解属性和方法 ......................................................................... 18 2.5理解父对象 ................................................................................ 18 2.6引用类型库 ................................................................................ 18 2.7在数据库中返回第一个图元 ....................................................... 19 2.8使用变体 ................................................................................... 19

第三章 控制AutoCAD环境 ........................................................................... 22

3.1打开、保存和关闭图形 .............................................................. 22

2

第一章 AutoCAD与易语言交互开发基础

第一章 AutoCAD与易语言交互开发基础

本章将为你介绍AutoCAD与易语言交互开发基础知识

1.1AutoCAD与易语言交互开发环境

1.1.1环境平台

AutoCAD与易语言交互开发使,首先要确定你的目标平台, 获得适当的开发环境。 如果你是在 AutoCAD 2007 平台上开发,你就需要具备下面的工具和软件:

AutoCAD 2007 中文版。 易语言5.0。

本节将要介绍开发环境的构建,包括开发类库的获得、开发类库的组成部分、AutoCAD类库的安装。

你也可以采用本节的方法以其他AutoCAD版本未平台构建开发环境,目前常用的版本为AutoCAD 2004和AutoCAD2007,最高版本为AutoCAD2011。一般来说,开发类库的版本和 AutoCAD 的版本是对应的。AutoCAD2004、AutoCAD2005和AutoCAD2006类库版本为16,AutoCAD2007、AutoCAD2008和AutoCAD2009类库版本为17, AutoCAD2010、AutoCAD2011类库版本为18。

1.1.2构建步骤

你可以使用易语言“类型库及OCX组件”工具定义、汉化、安装AutoCAD自带的类型库,构建开发环境,以AutoCAD2007为例,步骤如下:

1.在工具菜单中选择【类型库或OCX组件->支持库】,弹出标题为“请选择欲包装的OCX组件或类型库”的对话框。

3

第一章 AutoCAD与易语言交互开发基础

图1.2.1

2.向下拖动滚动条,可以看到一个类型库的分类,在类型库分类中选中类型库

“AutoCAD 2007 Type Library 版本1.0”。

图1.2.2

3.点击【下一步】,会看到一个类似我们使用过的OCX注册那样的窗口,可以在这里对这个类型库进行汉化操作。

4

第一章 AutoCAD与易语言交互开发基础

图1.2.3

4.选中AutoCAD,点击【保存】,弹出通用对话框,选择保存目录,保存类型库文件,文件名为“acax17chs.npk”。

图1.2.4

5. 保存完成后,会有提示信息提示你是否要把我们注册好的类型库保存到“易语言”目录中去,选择【是】会提示安装成功。

5

第一章 AutoCAD与易语言交互开发基础

6.运行“易语言”,在工具→支持库配置,将AutoCAD2007类库前面打“√”,设为所需要使用的支持库,在工具夹的支持库里就会看到我们刚才注册的类型库,见图1.2.5。用同样的方法可以添加“AutoCAD/ObjectDBX Common 17.0 Type Library”类型库,保存类型库文件,文件名为“axdb17chs.npk”。

图1.2.5

至此AutoCAD 2007 版本的两个类型库“AutoCAD 2007 Type Library 版本1.0”类型库(以下简称AutoCAD类库)和“AutoCAD/ObjectDBX Common 17.0 Type Library”类型库(以下简称ObjectDBX类库)安装成功了。 1.2.3环境类库

对比安装的AutoCAD类库和ObjectDBX类库发现两个类型库会发现很多函数命令都是一样的,两者均可以对AutoCAD对象进行操作,但两者是有所区别的,AutoCAD类库类库命令必须打开“*.dwg”图形文件”然后对文件中中对象进行操作。ObjectDBX类库不需要打开“*.dwg”图形文件,可直接对*.dwg文件中的文件中对象进行操作。

ObjectDBX类库比AutoCAD类库少了一些类库命令:

1.DBX类库中没有Application对象,也就是说没有应用程序对象,所以一切与该对象有关的属性方法都不可用。

3.DBX类库中没有打印项,但有打印配置。 4.DBX类库中没有选择集。 5.DBX类库中没有菜单和工具栏项。 6

第一章 AutoCAD与易语言交互开发基础

6.DBX类库中没有Utility(实用工具)项,也就是说该项中的各种数据的输入方法都不可用。

7.DBX中没有设置当前标注样式、字体样式、图层、布局、线型、视口、选择集等项。

8.由于DBX类库中的SaveAs方法只能另存为当前版本的DWG文件, 没有Export和Import方法,所以增加了DXFIn和DXFOut两个方法来输入和输出DXF文件。

9.DBX类库中没有保存SetVariable和读取GetVariable系统变量的方法。 10.DBX类库中没有EndUndoMark、LoadShapeFile、PurgeAll、Regen、SendCommand、StartUndoMark 、WBlock 方法。

相比每张图形文件都在CAD程序中打开操作而言, DBX无疑是效率高很多的,目前CAD免费提供的DBX并不是ObjectDBX的全部,完整版的ObjectDBX可以完全脱离AutoCAD程序操作dwg文件,但完全版需购买才能获得。

1.2 Hello word练习示例

本节介绍一个简单的“Hello World”的练习示例,虽然它很简单,但是用来描述程序的基本结构却非常合适。

程序所要展示的效果非常简单:当用户点击按钮【Hello,word】时,启动AutoCAD应用程序,在命令行中输入Hello并按下Enter键,AutoCAD会在命令行提示显示“Hello World” 。

启动易语言程序,新建windows窗口程序,在窗体添加按钮1,设置按钮1的标题为“Hello World”,如图1.2.6所示。

7

第一章 AutoCAD与易语言交互开发基础

图1.2.6

双击按钮1进入窗口程序集1编写如下代码:

程序运行显示效果见图1.2.7

图1.2.7

当程序运行完成后,你可看到在命令行中出现有“Hello World”的提示文本。

8

第二章 理解ActiveX自动操作基础

第二章 理解AutoCAD对象操作基础

2.1理解AutoCAD对象模型

一个对象就是AutoCAD界面里的一个主要功能组成单元。每一对象均描绘了AutoCAD的一个主要功能的精确部分。在AutoCAD界面里中有许多不同类型的对象。例如:图形对象,如线、圆、文本、多段线、三维面和标注等对象;样式设置,如线型和文字样式、标注样式均为对象;组织结构,如图层、组合和图块也是对象;图形显示,如视图和视口都是对象;甚至图形和AutoCAD应用程序本身也是对象。各个对象之间是通过分层方式来组织的,应用程序对象为根对象。这种分层结构的视图被归结为对象模型。对象模型提供了你访问按层次排列的每一个对象的途径。

2.1.1应用程序(Application)对象

应用程序对象是AutoCAD对象模型的根对象。通过应用程序对象,你可访问其它的每一个对象,并指派对象的属性和方法。应用程序对象的其它属性提供你访问应用程序指定的数据,如应用程序的名称和版本、还有AutoCAD的窗口大小、位置和可见性等。应用程序对象的方法执行应用程序指定的动作,如列出、装载、卸载ADS和ARX应用程序,还有退出AutoCAD。

应用程序对象也提供通过文档 (Documents)集合链接到AutoCAD图形、通过菜单栏(MenuBar)和菜单组(MenuGroups)集合链接到AutoCAD菜单和工具栏。

10

第二章 理解ActiveX自动操作基础

应用程序对象也是AutoCAD界面的全局对象。也就是说应用程序对象的所有方法和属性在全局名称空间都是有效的。

11

第二章 理解ActiveX自动操作基础

2.2.2文档 (Document)对象

文档对象,实际上就是AutoCAD图形,它可以在文档集合 (Documents)中找到,它提供访问所有图形还有大部分非图形的AutoCAD对象。通过提供的 模型空间(ModelSpace)和图纸空间 (PaperSpace)访问图形对象(线、圆、弧等),通过提供的如Layers(图层)、Linetypes(线型)和TextStyles(文字样式)这样名称的集合访问非图形对象(如图层、线型、字型等)。文档 (Document)对象也提供访问打印出图 (Plot)和实用工具 (Utility)对象。

12

第二章 理解ActiveX自动操作基础

2.2.3集合 (Collection)对象

AutoCAD组合大部分的对象在集合中。尽管这些集合包含不同类型的数据,但它们是通过相似的技术进行处理。每一集合都有添加对象到集合中的方法。大多数集合使用“添加 (Add)”方法添加集合成员对象。不同的是,图元对象通常使用标头为“Add+图元对象名称”这样的方法来进行添加。例如,添加一条直线你必须使用Addline方法。为便于理解,类库中翻译为“创建直线”,直译应为添加直线。

集合也拥有共用的一些其它方法和属性。“成员数(Count)”属性可用于获取集合中对象的数目。“取成员(Item)”方法可用于获取集合中的对象。 2.2.4图形和非图形对象

图形对象,也称为图元,它是构成图形的可见对象(如直线、圆、光栅图像等)。创建这些对象,可用在模型空间或图纸空间对象中创建。修改或查询这些对象,可使用对象自身的方法和属性。每一图形对象都有方法允许应用程序执行大部分的AutoCAD编辑命令,如复制、删除、移动、还有镜像等。这些对象也有相应方法可以设定及返回扩展数据(xdata)、高亮和更新、返回对象的边框范围等。图形对象具有如图层、线型、颜色和句柄这样典型的属性。它们也有其特殊的依赖于这些对象类型的属性,如圆心、半径和面积等。

非图形对象为不可见(指示性)对象,它们是图形的一部分,就如图层 (Layers)、线型 (Linetypes)、标注样式 (DimStypes)、选择集 (SelectionSets)等。创建这些对象,可在父集合对象中使用添加 (Add)方法。而修改或查询这些对象,可使用对象自身的方法和属性。每一非图形对象均有其特殊的方法及属性以实现某种功能;所有对象都有方法可以设定及返回扩展数据。

13

第二章 理解ActiveX自动操作基础

2.2.5参数选择 (Preferences)、打印出图 (Plot)和实用工具 (Utility)对象

在参数选择(Preferences)对象下边为对象集,每一对象集都与选项对话框的一个选项卡相关。它们共同提供访问在选项对话框中所有的注册设置。图形设置包含在数据库参数选择(DatabasePreferences)对象中。你也可通过SetVariable和GetVariable方法来设定和修改选项(系统变量不是选项对话框的一部分)。设置选项的详细内容请参考“设定AutoCAD参数”。

打印出图(Plot)对象提供访问在打印对话框的设定,并且让其它程序可以使用不同的方法打印图形。图形打印的相关内容请参考“打印图形”。

实用工具(Utility)对象提供用户输入和转换功能。用户输入功能是在AutoCAD命令行中提示用户输入不同类型数据的方法,如输入字符串、整数、实数、点等。转换功能是操作AutoCAD特有数据类型的方法,如点和角度,另外还有字符串和数字的处理。用户输入功能的相关内容请参考“提示用户输入”。

14

第二章 理解ActiveX自动操作基础

2.2访问对象层次

用易语言与AutoCAD应用程序进行连接并访问其对象是非常容易的。通过在易语言中定义变量引用AutoCAD对象,然后用定义的变量链接到当前AutoCAD进程并获取其活动图形。通过使用定义的变量可以直接获得访问当前文档对象和所有相关的方法和属性以及所有在该层次中的其它对象。

在对象层次中引用对象

你可直接可通过用户定义变量引用对象。直接引用对象,应包括对象的层次。例如,以下语句创建一条直线到模型空间。注意到层次状态为文档(Document),然后是模型空间 (ModelSpace)对象,最后才是创建直线(AddLine)方法:

通过用户定义变量引用对象,首先定义变量的类型,然后设定变量为适当的对象。例如,以下代码定义一个类型为模型空间(AcadModelSpace)的变量“模型空间1”,设定变量等于“文档1”的模型空间:

以下语句使用用户定义变量增加一条直线到“文档1”的模型空间中

访问应用程序对象

文档对象之上对象层次为根对象(应用程序对象) ,以下代码为“文档1”对象链接到“应用程序”变量“AuCAD2007程序”的活动文档。

2.3集合对象操作

集合对象是预先定义的对象,它包含所有相似对象的实例(即这些对象的父对象)。集合对象有以下的对象:

15

第二章 理解ActiveX自动操作基础

文档(Documents)集合 包含所有在当前AutoCAD进程打开的文档。 模型空间(ModelSpace)集合 包含在模型空间中的所有图形对象(图元)。 图纸空间(PaperSpace)集合 包含在活动图纸空间布局中的所有图形对象(图元)。 图块(Block)对象 包含在指定图块定义中的所有图元。 图块(Blocks)集合 字典(Dictionaries)集合 标注样式(DimStyles)集合 组合(Groups)集合 超级链接(Hyperlinks)集合 图层(Layers)集合 布局(Layouts)集合 线型(Linetypes)集合 菜单栏(MenuBar)集合 包含在图形中的所有图块。 包含在图形中的所有字典。 包含在图形中的所有标注样式。 包含在图形中的所有组合。 包含提供图元的所有超级链接。 包含在图形中的所有图层。 包含在图形中的所有布局。 包含在图形中的所有线型。 包含当前显示于AutoCAD的所有菜单。 菜单组(MenuGroups)集合 包含当前装载到AutoCAD中的所有菜单和工具栏。 注册应用程序包含在图形中的所有注册的应用程序。 包含在图形中所有的选择集。 包含在图形中所有的文字样式。 包含在图形中所有的用户坐标系统(UCS)。 视图(Views)集合 视口(Viewports)集合 16

包含在图形中所有的视图。 包含在图形中所有的视口。 (RegisteredApplications)集合 选择集(SelectionSets)集合 文字样式(TextStyles)集合 UCSs 集合 第二章 理解ActiveX自动操作基础

2.3.1访问集合

大多数集合对象是通过文档对象来访问的。文档对象包含每个集合对象的属性。例如,以下代码定义一个变量“图层集1”并将设定该变量为“文档1”的图形的图层集合中:

文档集合、菜单条集合和菜单组集合是通过应用程序对象进行访问。应用程序对象为这些集合的每一个集合包含一个属性。例如,以下代码定义了一个变量“菜单组1”并且设定该变量为应用程序中的菜单组集合:

2.3.2添加新成员到集合对象

添加新成员到集合中使用的是“添加(Add)”方法。例如,以下代码创建一个新的图层1并且将其添加到“图层集1”集合中:

2.3.3在集合对象中循环

选择集合对象中的一个指定成员,使用的是“取成员 (Item)”方法。“取成员”方法需要一个标识符。该标识符可以是指定集合内部项目位置的索引或者描述项目名称的字符串。需要注意的是索引号是从0开始的,比如集合有3个成员,则索引号分别为0,1,2。

以下例子在信息框中显示集合中所有图层的名称:

17

第二章 理解ActiveX自动操作基础

注意:当在集合循环时,不要在对象上使用图元编辑方法(复制、阵列、镜像等),你只能在完成循环之后才可试着去编辑对象,或者先创建一个临时的数组并且设定其与集合相等,然后才可以在该复制的阵列中循环并执行你的操作。 2.3.4删除集合对象中的成员

删除指定的成员,可使用所找到成员对象的删除(Delete)方法。例如,以下代码删除“图层1”:

图层1=文档1.取图层集合().取成员(“图层1”) 图层1.删除

当对象被删除后,你再也不能试图用程序去访问该对象了。

2.4理解属性和方法

每一对象都有其属性、方法和事件。属性描述该对象的特性,而方法是一种可在该对象上执行的行为,事件在该对象被修改时触发。当对象创建后,你就可通过属性和方法查询和编辑对象。

例如,一个圆对象有圆心属性。该属性以三维世界坐标系统的坐标描述了圆的圆心。更改圆的圆心,你只要简单地将该属性设定为新的坐标。圆对象也有称为偏移(Offset)的方法。该方法可在相对于现存圆的指定偏移距离创建一个新的对象。关于对象所有属性和方法,可参见类库命令。

2.5理解父对象

每一个对象都有其永远不变的父对象。所有对象都源于称为根对象的单个父对象。你可以通过从根对象链接到子对象的方法访问所有在界面中的对象。还有,所有对象都有称为应用程序的属性以直接链接回根对象。

AutoCAD界面的根对象为AutoCAD应用程序。

2.6引用类型库

通过自动操作对象暴露的对象、属性和方法都包含在类型库中。类型库是一个文件或一个文件的一部分,它描述一个或多个对象的类型。类型库并不保存对象;它们只保存信息。通过访问类型库,应用程序和浏览器可确定对象的特征,如对象支持的界面和每一界面成员的名称和地址。

18

第二章 理解ActiveX自动操作基础

在使用通过应用程序暴露出来的自动操作对象,你必须引用其类型库。该引用已由易语言程序中创建,见1.1节内容。

你也可以在没有引用应用程序类型库的情况下使用应用程序对象。然而,由于以下理由,可考虑增加类型库引用:

1.全局可访问函数可无条件直接访问。

2.调用函数、属性和方法可在编译时检查其正确性,这样可以在运行时有更快的速度。

3.有可能的话可声明定义在库中的变量类型,这样可增加运行时的可靠性和可读性。

2.7在数据库中返回第一个图元

以下例子返回模型空间中的第一个图元对象。对于图纸空间中的图元,代码略有不同:

返回模型空间中的第一个图元

2.8使用变体

AutoCAD 对象操作是使用变体传递数组数据。AutoCAD为对象操作提供了帮助你转换数据类型的工具。 2.8.1什么是变体?

变体是一种特殊的数据类型,它可包含除固定长度字符串数据和用户定义类型外的其它任何类型的数据。变体也可包含特殊的值,如Empty、Error、Nothing和NULL。你可通过易语言中数据类型的“变体型”和“变体类型”中的函数命令来确定变体中数据。

19

第二章 理解ActiveX自动操作基础

2.8.2在数组数据中使用变体

变体是用于传递数组数据进和出对象操作。也就是说你的数组必须为变体以由AutoCAD 对象的方法和属性所接受。另外,从AutoCAD对象操作中输出的数组数据必须处理为变体。 2.8.3转换数组为变体

AutoCAD对象操作提供了实用方法以转换数组中的数据为变体。该方法为“创建变体(CreatTypedArray)”的方法,它创建包含整数、浮点数、双精数等数组的变体。你可传递这些结果的变体到任何接受作为变体的数据数值的AutoCAD方法或属性。

“创建变体”方法接受在数组中输入的数值类型,和转换的数组数据。它返回数组数值为变体。以下代码使用“创建变体”转换有两个个数组:直线的起点坐标和终点坐标。然后传递这些变体到“创建直线”方法以创建直线。 使用创建变体的方法创建直线

2.8.4解释变体数组

从AutoCAD 对象操作传递回的数组信息是以变体的方式传递回。如果你知道数组中的数据类型,你可以简单地将变体作为数组访问。如果你不知道包含在变体中的数据类型,可使用易语言变体型函数“取类型”来处理。这个函数返回在变体中的数据类型。如果你需要在数组中循环,你可使用易语言的循环语句。

以下代码示范了计算由用户输入的两点的距离。在该例中,数据类型已经知道,因为所有坐标均为双精度。三维坐标是双精度的三元素数组,而二维坐标是双精度的二元素数组。

20

第二章 理解ActiveX自动操作基础

计算两点之间的距离

21

第十章-高级绘图与组织技术

第三章 控制AutoCAD环境

本章将详述在AutoCAD中开发应用程序时的基础知识。它介绍了怎样控制AutoCAD环境及怎样有效地工作于该环境中。 3.1打开、保存和关闭图形

“文档集合 (Documents)”和“文档 (Document)”对象提供了访问AutoCAD文件的功能。

创建一个新的图形,或打开现存的图形,应使用“文档集合 (Documents)”中的方法。“添加 (Add)”方法创建一个新的文档并将该文档添加到“文档集合 (Documents)”中。“打开 (Open)”方法打开一个现存的图形。在“文档集合 (Documents)”中也有一“关闭 (Close)”方法以关闭在AutoCAD中打开的所有图形。

保存、输入、输出图形,可使用“文档 (Document)”对象的保存(Save), 另存为(SaveAs),导入(Import)和输出(Export)方法。 1.打开图形

本例使用“打开Open”方法打开一个现存的图形。你可更改文件的名称和路径为你系统中存在的AutoCAD图形文件。

2.保存图形

可使用“保存(Save)”或“另存为(SaveAs)”方法保存图形。 保存活动的图形

以下示例以当前名称保存活动图形然后再以新的名称保存该图形。

22

第十章-高级绘图与组织技术

当然你会想到去检查活动图形是否存在有未保存的更改。在退出AutoCAD进程之前或开始一新的图形之前这样做是一种好的习惯。使用“已保存Saved”属性可以确定当前图形是否包含未保存的更改。

测试图形是否有未保存的更改内容

本例检查图形是否有未保存的更改并由用户确定是否保存图形(如果取消,则直接跳到结束处)。如果确定的话,使用Save方法保存当前图形:

23