




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AutoCAD 二次开发的研究学习二次开发的研究学习 学 院:机械与电子信息学院 专 业:机械设计制造及其自动化 姓 名: 班级序号: 指导老师: 二零一四年五月二十日 目录 第 1 章 AutoCAD 发展历程与研究现状 - 1 - 1.1 AutoCAD 简介 - 1 - 1.2 AutoCAD 二次开发 - 2 - 1.2.1 AutoCAD 二次开发简介 - 2 - 1.2.2 AutoCAD 二次开发发展历程 - 2 - 1.2.3 AutoCAD 二次开发发展现状 - 7 - 第 2 章 二次开发应用举例 - 9 - 2.1 AutoLISP - 9 - 2.1.1 AutoLISP 概述 - 9 - 2.1.2 举例 - 9 - 2.2 ADS - 15 - 2.2.1 ADS 概述 - 15 - 2.2.2 ADS 应用程序结构 - 15 - 2.2.3 举例 - 16 - 2.3 ARX - 19 - 2.3.1 ARX 概述 - 19 - 2.3.2 举例 - 19 - 2.4 Active X- 22 - 2.4.1 Active X 概述 - 22 - 2.4.2 举例 - 22 - 2.5 .NET- 26 - 第 3 章 AutoCA D 未来发展方向 - 27 - 3.1 AutoCAD 二次开发的必要性 - 27 - 3.2 AutoCAD 发展趋势 - 27 - 3.2.1 集成化与智能化 - 28 - 3.2.2 网络化与并行化 - 28 - 3.2.3 虚拟设计 - 28 - 3.2.4 规范化 - 29 - 3.3 二次开发的基本过程 - 29 - 3.4 二次开发中的关键技术 - 30 - 3.4.1 参数化图库的生成技术 - 30 - 3.4.2 用户化界面技术 - 30 - 3.4.3 二维工程图的自动生成技术 - 30 - 3.4.4 产品设计智能化开发技术 - 30 - 3.4.5 特征映射器的开发技术 - 31 - 结束语 - 32 - 参考文献 - 33 - 附 1: - 35 - 附 2: - 36 - 摘要:AutoCAD 技术发展至今已经日趋成熟,并已经广泛应用于机械、电子、 建筑、航空航天等领域,但仍有许多 CAD 软件还是单单建立在通用应用平台上。 要使 CAD 软件能针对专业领域方便地解决问题,增加一些特殊功能,就要应用 CAD 的二次开发技术。本文在对前人资料进行整理学习后,分别从 AutoCAD 二 次开发技术的发展历程及发展现状和未来的发展方向及研究重点进行介绍,并 举例说明二次开发技术所用的类型、方式、语言等。本文完成的主要工作有: 阐述了二次开发的基本理论,包括二次开发的概念、原则、过程和一些关键 技术;列举了几种常用的二次开发方法-面向对象法、利用组件技术方法 和利用 ActiveX 技术方法和 DLL 方法,介绍了它们的基本原理;举例说明 AutoLISP、ADS、ARX、ActiveX 在实际应用中的利用,写出相应的程序语言。 关键词:CAD 二次开发 方式类型 发展方向 例证说明 Abstract: The AutoCAD technology has been used widely in the filed of machinery, electronics, architecture and aerospace, however most CAD software is designed for general application. For that reason, the Re-develop technology of CAD is used to cater for the needs in professional design area. This article introduces the method, process and techniques of CAD, and its development. The followed works have been done in paper : 1.The basic theory of the further development was summarized, which include the definition, the general process, the rules and several key techniques. 2. Several current methods of the further development have been studied, such as Object Oriented method, component technique, ActiveX technique. 3. Gave some examples of AutoLISP、ADS、ARX、ActiveX . Key words: CAD; Re-develop; Type methods; Developing direction; Example 第 1 章 AutoCAD 发展历程与研究现状 1.1 AutoCAD 简介 AutoCAD(Auto Computer Aided Design)是美国 Auto desk 公司于 1982 年开发的自动计算机辅助设计软件,主要用于二维绘图、详细绘制、设计文档 和基本三维设计,用户可以创建、浏览、管理、打印、输出、共享及精确地复 用富含信息的设计图形,其现在已成为国际上主流的绘图工具之一。如机械 CAD 是指将计算机技术运用到机械设计的全过程中,利用计算机硬、软件系统 辅助人们对产品和工程进行分析计算、几何建模、仿真与试验、优化设计、绘 制图形、工程数据库的管理、生成设计文件等的方法和技术。AutoCAD 具有良 好的用户界面,通过交互菜单或命令行方式便可以进行各种操作。其完善的图 形绘制功能、强大的图形编辑功能以及可开发性和数据交换能力,使其支持多 种硬件设备和操作平台,具有广泛的适应性。 Autodesk 公司成立以来,在其近二十年的发展历程中,不断丰富和完善 AutoCAD 系统,并连续推出各个新的版本,每个新版本中都会加入一些更强大 的功能。 如 AutoCAD2000 增添了 AutoCAD 设计中心(ADC) 、多文档设计环境 (MDE) 、Internet 驱动、新的对象化捕捉功能、增强的编著功能以及局部打开 和局部加载的功能;AutoCAD2005 新增了图纸集功能和用于显示可能会在图形 生命周期中修改的数据的字段对象;AutoCAD2006 新增了动态块功能,动态块 中定义了一些自定义特性,可用于在位调整块,而无须重新定义该块或插入另 一个块;AutoCAD2008 增添了自动缩放注释及多重引线;AutoCAD2010 增强了 三维功能,更大的突破是参数化绘图功能,可以在图纸上建立对象之间的几何 关系及约束关系(参考文献 1) 。AutoCAD 系统在发展中不断完善,它的功能也 在不断增强,这使得 AutoCAD 由一个功能非常有限的绘图软件发展到了现在功 能强大、性能稳定、市场占有率位居世界第一的 CAD 系统,在城市规划、建筑、 测绘、机械、电子等许多行业中得到了广泛的应用。随着行业的发展,今后的 AutoCAD 软件也在原来的基础上朝着集成化、网络化、可视化、参数化、标准 化、智能化和多元化的方向发展,在工程制图、工业制图、电子设计、制造业 等方面将发挥不可取代的作用。 - 1 - 1.2 AutoCAD 二次开发 1.2.1 AutoCAD 二次开发简介 从“二次开发”本身的意思来理解,即在开发了一个大型的软件系统平台 的基础上,根据一些特殊需求,在该平台上进行第二次有针对性的开发。 AutoCAD 本身的功能集已足以协助用户完成各种设计工作,且因其很好的通用 性和开放性,在机械、电子、航空、船舶、建筑、服装等领域得到了极为广泛 的应用。但同时也因为它的通用性,使其专业性很差。因此,要最大限度的满 足用户的个性化需求,就必须给用户提供重新装置、修改及对软件进行二次开 发的功能。对 AutoCAD 二次开发主要是在其现有的几何处理库以及数据存储、 图形绘制、打印及操作机制上根据具体需求对用程序功能进行拓展,建立新业 务逻辑;对用户界面进行拓展,创建新的对话框,菜单以及面板等;对数据库 拓展,创建新的数据或实体对象。形成 LISP、ARX、VLX、ADS、DLL、以及 DCL 文件来完善和扩展 AutoCAD 主程序。CAD 开放的体系结构使其定制或者二次开 发成为可能,它允许用户和开发者采用高级编程语言对其进行扩充和修改(即 二次开发) ,大大方便了专业领域的应用,满足了具体行业的要求。 AutoCAD 的二次开发工具主要分为两大类:AutoCAD 的内部定制工具和 AutoCAD 的二次开发工具。定制是指按照 AutoCAD 提供的方法和文件格式,根 据用户的具体需求,通过编辑系统所支持的 ASCII 码标准功能文件或者建立同 类型新的 ASCII 码功能文件来设置 AutoCAD。通过定制 AutoCAD,可以构造出 符合用户习惯的 CAD 系统,提高工作效率。二次开发是指利用 AutoCAD 提供的 编程环境和开发工具,通过编写程序来实现对 AutoCAD 的开发。 1.2.2 AutoCAD 二次开发发展历程 AutoCAD 也一直把二次开发功能放在一个极其重要的位置,CAD 的开发随 着 CAD 的发展不断进行。从第一版 AutoCAD1982 年 11 月推出后,其二次开发 方式也在不断地涌现。最近二十年多来,AutoCAD 相继推出了四代开发工具: 第一代开发工具 AutoLISP,第二代开发工具 ADS,第三代开发工具 ARX,第四 代开发工具 ActiveX Automation 等等。不同的参考资料上略有不同,但本质 上是一致的。以下是以图表形式表示的开发方式时序图(开发方式时序见图 1- 1) 。 图 1-1 开发方式时序图 一、AutoLISP 第一篇关于 LISP 的参考文献是由 John McCarthy 在 1960 年 4 月的ACM 通讯中发表的。但实际上 AutoLISP 是 1986 年随 AutoCAD v2.18 提供的二次 开发工具,是简单易学而又功能强大的 LISP 编程语言。它是一种人工智能语 言,是嵌入 AutoCAD 内部的 COMMON LISP 的一个子集。在 AutoCAD 的二次开发 工具中,它是唯一的一种解释型语言,是低版本 AutoCAD 的首选编程语言。由 于 AutoCAD 具有内置 LISP 解释器,所以使用 AutoLISP 可直接调用几乎所有的 AutoCAD 命令。因此用户可以在命令行中输入 AutoLISP 代码,或者从外部文件 加载此代码。AutoLISP 应用程序还可以通过多种方式与 AutoCAD 交互。 Autodesk 公司提供 AutoLISP 的目的,就是为了帮助用户充分利用 CAD 强大的 功能,从而节省时间,提高工作效率。AutoLISP 最典型的应用之一是实现参数 化绘图程序设计,包括尺寸驱动和鼠标拖动程序等。在实际工程中,70%左右 的图形是通过修改已有的设计来完成的,而且多数都是修改设计参数来完成。 现在,已经有数以百计的第三方软件开发人员使用 AutoLISP 语言编制各 种应用程序软件包,例如,开发一个名为 SMLayout 的软件包,用它可以产生 各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、 圆柱、弯管接头、圆锥以及罐顶。在 AutoLISP 中,同样提供了编程以及数学 计算所需的大部分数学函数,你可以使用 AutoLISP 对数字进行加、减、乘、 除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。目前 社会上非常需要 AutoLISP 程序员为应用软件及客户菜单的开发提供顾问。 AutoLISP 具有以下优点:1、语言规则十分简单;2、直接针对 AutoCAD, 1986 AutoLISP 1987 1988 1989 ADS 1990 DCL 1991 1992 1993 ADS-RX 1994 1995 Object ARX 1996 ActiveX Automation 1997 VBA 1998 Visual LISP 1999 2000 - 3 - 易于交互;3、解释执行,立竿见影。但它也有自身无可避免的缺点:1、功能 单一,综合处理能力差;2、程序运行速度慢;3、缺乏很好的保护机制,源程 序保密性差;4、不能直接访问硬件设施、进行二进制文件的读写。它的这些 特点,使其仅适合于有能力的终端用户完成一些自己的开发任务。 二、ADS ADS 全称:AutoCAD Development System,是从 AutoCAD R11 开始引入的 基于 C 语言开发应用程序的系统,本质上是一组可以用 C 语言编写 AutoCAD 应 用程序的头文件和目标库。ADS 不是 C 语言的一个子集,也不是基于 C 语言而 编制的专用语言,但却包含了 C 语言的全部功能。它既利用了 AutoCAD 环境的 强大功能,又利用了 C 语言的结构化编程、运行效率高的优势,适合于高强度 的数据处理,如实际应用中的机械设计 CAD、工程分析 CAD、土木工程 CAD、化 学工程 CAD 等等。与 AutoLISP 相比,ADS 有其新加的功能和独特的优势:1、 具备错综复杂的大规模处理能力;2、编译成机器代码后执行速度快;3、编译 时可以检查出程序设计语言的逻辑错误;4、程序源代码的可读性比后者好。 而其不便之处在于:1、难以掌握;2、ADS 的隐藏错误往往导致 AutoCAD 系统 崩溃;3、要实现同样的功能时,前者比后者的代码要长很多。 早期国内常见的应用软件多是用 ADS 进行开发的,但 ADS 程序必须经过 AutoLISP 解释加载,因此 ADS 的各方面功能往往会受到一定的限制。同时,锁 着网络技术的迅速发展,面向过程的 ADS 有些“力不从心” ,所以,在 AutoCAD R13 中,提出了新的面向对象的开发工具 ARX。而从 R14 起,Autodesk 已经不 再支持和发展 ADS 程序设计模式,同时增加了 VLSP,以进一步提高 AutoLISP 的整体性能,同时用 ObjectARX 取代了 ADS。 三、Object ARX Object ARX 是从 AutoCAD R13 开始推出的一个全新的开发环境,是 AutoCAD 开发的第一个面向对象的开发工具,与前期的开发工具相比,它更注 重的是程序的智能性。它提供了以 C+为基础的应用程序接口,能真正快速访 问 AutoCAD 图形、数据库。Object ARX 支持面向对象编程方法,同时向下兼容 ADS。Object ARX 的核心是两组关键的 API,即 AcDb(AutoCAD 数据库)和 AcEd(AutoCAD 编译器) ,另外还有一些其他的重要组件。Object ARX 还可以 按需求加载应用程序,使用 Object ARX 进行应用开发还可以在同一水平上与 windows 系统集成,并与 windows 其他应用程序实现交互操作。ARX 程序在很 多方面与 ADS 程序和 AutoLISP 程序都是不相同的。最重要的一点是,ARX 程序 实质上是一个动态链接库,它和 AutoCAD 共享地址空间并且直接和 AutoCAD 进 行通讯。在 ARX 中,每个命令都有独立的入口。ARX 程序还可以创建新的类 (class),这些类可以为其他程序所共享,从而充分利用面向对象的编程的优 点.ARX 程序创建的实体和 AutoCAD 的内在实体几乎是完全等同的。 对于需要经常和 AutoCAD 通讯的应用程序来说,ARX 程序比 ADS 程序运行 速度更快,这里的运行速度主要指是访问 AutoCAD 数据库的速度。但 ARX 程序 崩溃通常会导致 AutoCAD 系统的崩溃。ARX 程序具有 ADS 程序和 AutoLISP 程序 所不具备的访问和控制 AutoCAD 的能力。ARX 程序可以监控和处理 AutoCAD 各 种事件,可以定义 AutoCAD 命令,包括可以透明执行的命令。这些命令可以像 AutoCAD 自身的命令一样被 AutoLISP 和 ADS 所调用。 四、Visual LISP Visual LISP,简称 VLISP,取代了 AutoLISP 成为 AutoCAD 中新一代的 LISP 语言,已经被完整地集成到 AutoCAD 2000中,它显著扩大了 AutoLISP 的 容量,为开发者提供了崭新的、增强的集成开发环境 IDE,包括编辑器、调试 器和其他工具,使开发者可以直接使用 AutoCAD 中的对象和反应器,进行更底 层的开发。它的研究内容主要有:1、是 AutoCAD 2000中默认的代码编辑工具, 提供源代码调试功能;2、用它开发 AutoLISP 程序的时间被大大地缩短,加速 其编程过程,并使其结构化,是程序增加了可读性;3、简化源代码的创建及 修改,程序的测试、编译及调试;4、能帮助大家使用 ActiveX 对象及其事件; 5、使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分 析 LISP 程序的运行情况。在 Visual LISP 中有新增的一些函数:如基于 AutoLISP 的 ActiveX/COM 自动化操作接口、用于执行基于 AutoCAD 内部事件的 LISP 程序的对象反应器、新增了能够对操作系统文件进行操作的函数等等。 它不仅提供了一个完整的集成开发环境,还提供了开发工具,课用于发布独立 的应用程序。 五、基于 ActiveX Automation 技术的 VBA 等开发工具 - 5 - ActiveX Automation 是一台微软标准,以前称为 OLE Automation 技术, 该标准允许通过外显的对象由一个 windows 应用程序控制另一个 windows 应用 程序,这也是面对对象编程技术的精髓所在。VBA 是自 R14开始嵌套在 AutoCAD 之中的程序设计方法,根据微软公司的规则,在每一个 Windows 下的 应用软件都必须具有的功能。ActiveX Automation 技术的完全面向对象化编程 的特点,使其开发环境具备了强大的开发能力和简单易用的优良特点,开发工 具的选择具有很大的灵活性。它可以很容易地使用 Windows 系统资源,使 AutoCAD 能容易地与其他 Windows 下的应用软件交互。VBA 对话框设计能力比 DCL 好得多,多图档环境下的应用程序也比也比 VLISP 提供了更多的支持。 但其也有很有不方便的地方,如:1、在设计过程模拟类的程序设计中, VBA 明显不如 AutoLISP 等 脱胎于人工智能语言的工具;2、VBA 虽然不是编译 运行,数据结构和程序写法却像 ARX 一样相当严格,不能像 VLISP 那样按照专 业设计要求去创建数据结构;3、VBA 是以对象作为数据处理的基本单元,在 VLISP 中堪称特色的 CAGD 程序设计技术,在 VBA 中则无法实现。因此,很多程 序设计就不能充分利用 AutoCAD 的操作技巧,从而会产生冗杂的程序;4、 扩 充 VBA 的功能可以用 VC+ / ARX 程序,但是相当复杂,对于初学者来说,很 难掌握。而对其完善和扩充,只能等待 Autodesk 的工作结果。故 VBA 也是备 受争议的一个开发工具。 六、AutoCAD .NET 从 AutoCAD2006开始,Autodesk 为其开发增加了一种.NET API,它提供了 一系列的外包类,是开发人员可在任何.NET 语言下对 AutoCAD 进行二次开发。 其优点是完全面向对象,在拥有与 C+相匹配的强大功能的同时,具有方便实 用的特点,同时它采用了垃圾回收机制,自行判断内存回收的时机并实行回收, 通过 Dispose 函数进行资源的自动释放,从而解决了内存泄露问题。是较理想 的二次开发工具。 各种开发工具能力对比如下表所示: 表1-1 LISP VB/VBA Object ARX .NET API 操作能力 高级用户界面 底层事件 高级 API 访问 完善的异常处理 64位/UNICODE 支持 垃圾回收 混合语言开发 difficult 混合 API 交互性 limited limited difficult 语法简洁 自定义实体 性能 1.2.3 AutoCAD 二次开发发展现状 目前,国内CAD技术的应用已逐步进入高级阶段,许多用户都针对本行的 特点对CAD进行二次开发,CAD二次开发技术几乎在各个行业中都有应用实例, 并已有许多商品化软件问世。但各行业CAD二次开发技术的发展水平存在较大 差距,机械、电子、建筑、航空航天等最早应用二次开发技术,其二次开发程 度也最高。开发出的CAD系统能够集计算、参数化画图、数据管理为一体,并 直接与计算机辅助制造(CAM)和计算机辅助工艺设计(cAPP)有机结合。 目前国内已开发成功一批符合工程需要的应用软件,逐渐形成了一批具有 较高素质的研究开发队伍。其他行业的CAD二次开发技术则相对落后,有的仅 仅是一小部分工程技术人员的个人行为,还没有形成专门从事CAD二次开发的 研究队伍。虽然也出现了一些CAD应用软件,但大多数仅仅针对某一类型的产 品或产品的一部份而开发的小型应用系统,解决的问题也比较有限。 国外成功的CAD技术开发企业为了加快CAD技术开发步伐,都选择了高起点 的CAD技术开发战略,印利用已有的技术成果,在此基础上二次开发自己的CAD 技术,而不是将人力物力浪费在低水平的重复开发上,这样既可以提高效率, 又能保证自己的产品具有较高的技术含量和水平。 现在,在一代代研究人员的努力下,越来越多的开发软件进入我们的生活, 已有许多二次开发的 CAD 系统在实际生产中的各个方面得到了应用,并且获得 了一定的成果。但不可避免的是软件开发还没有达到完美,在人类无止境的需 求面前,我们仍需进一步努力来完善我们的开发系统从而满足我们的要求。就 我国而言,软件开发仍处于手工作坊阶段,存在很多的问题,软件产业还没有 - 7 - 实现工厂化。CAD 的二次开发,是对软件自身的探索和挖掘,也是对时代的适 应和融合。在不断发展的今天,我们必须掌握这些基本的知识,并具备在其基 础上不断开发的能力,才能为以后的设计奠定坚实的基础。 第 2 章 二次开发应用举例 AutoCAD 的程序开发是通过 AutoCAD 应用程序接口( API) 来实现的。其 程序开发主要有五种基本形式: 2.1 AutoLISP 2.1.1 AutoLISP 概述 AutoLISP 语言是 Autodesk 公司在 AutoCAD 中提供给用户的主要的二次 开发工具。AutoLISP( AutoList Processing)是一种专用的 LISP 编辑语言,是 AutoCAD 固有的一部分。AutoLISP 程序储存于 ASCII 码文本文件中, 每当运 行它们时, AutoCAD 都将读取并解释他们, 尽管 AutoLISP 文件可以有任意的 名字和扩展名,但根据约定, AutoLISP 文件通常以.LSP 为扩展名( 与菜单相连 的 AutoLISP 文件除外,这些文件必须以.MNL 作为扩展名),用户可以用 AutoLISP 开发 AutoCAD 来适应自己的具体要求、自动执行重复的任务或生成 新的或修改 AutoCAD 命令, 用户即可编写自己的 AutoLISP 应用程序, 也可使 用第三方开发的共享程序。 2.1.2 举例 举例 1: 下面通过编写一个从上到下逐行写文本的小程序段来简要分析 AutoLISP 的开发过程。题目要求如下: 用户只需点击一个自定义工具按钮,系统即会提示用户输入首行文本所在 位置、相邻两行文本偏移量、文本高度这三个参数。其中,首行文本所在位置 由鼠标在屏幕上点击获得,文本高度默认值为 4。用户依次输入文本,回车表 示结束当行输入。 当所有文本输入结束后,按“Esc”键结束退出。AutoCAD 回到等待命令输 入状态下。 设计人员经常会遇到一些“填表”的工作,譬如在电力系统设计中,工作 人员现场测得各电力杆的间距,需要在 AutoCAD 中将其制成电子表格,在表格 中从上到下依次填制数据。传统的办法就是,先用“Array”或“Copy”给每 - 9 - 个空格都填上一个任意的数据,然后依次修改各个数据。使用这种方法填制数 据需要频繁地交叉使用鼠标和键盘输入,如果要填制的电力杆多达上千根,那 么设计人员的工作量将非常大。 如果编制出该控件,那么用户除输入三个必要参数外,只需依次输入各行 数据即可,并且如果能够保证输入数据的准确性,设计人员甚至可以不看屏幕, 只需看着记录文本即可实现快速录入,从而大大简化工作、压缩工作量、提高 工作效率。 需要说明的是,在从 AutoCAD2005 始,软件中已增加了表格的功能,因此 上述所提的困难主要是针对老版本 AutoCAD 的。但是考虑到本文仅仅是浅要剖 析 AutoLISP 二次开发的过程,采取该程序例题作探讨仍然是合适的。 本例流程图如下所示: 图 2-1 流程图 在 AutoCAD 的环境变量中,cmdecho 是控制命令回显的参数,将 cmdecho 设置为“0”后,可以屏蔽命令回显。由于程序执行时,其实是在后台频繁调 用各种 CAD 命令进行制图,如果不屏蔽,则调用的各种命令都将在 CAD 主窗台 下面的命令栏里滚动显示,造成命令行频繁刷屏,虽然没有影响,但却属于无 用信息,因此需给予屏蔽。环境变量 osmode 是控制捕捉的参数,将 osmode 置 “0”后,捕捉状态即被屏蔽。如果没有屏蔽捕捉状态,当用户用鼠标点取文 本起始位置时,往往会误捕捉到附近的交点、端点等等地方,造成不便。另外, 这两个变量只能在该程序段中置零,程序执行完必需予以还原,否则程序执行 完之后,将存在没有命令回显和捕捉开关必须重设的麻烦。在初始化环境变量 后,就必需依次输入三个重要参数:起始位置、行距、文字高度。其中起始位 置由用户在 CAD 主窗口用鼠标点取,而行距和文字高度,由用户键盘输入,在 这文字高度问题上,当程序从键盘上可以获得一有效数字时,即将其设为文字 高度,如果用户在该部分直接回车跳过,那么系统将默认文字高度为 4。同理, 该方法对行距调整也可适用。在初始化及提供参数结束的情况下,用户可以逐 行输入文本,回车表示结束一行文本录入,当一行文本输入结束后,程序对该 行文本进行分析,如果发现所获得的文本不为空,则输出该行文本,并重新回 到等待输入的状态下,等待新的输入。而当程序分析所获文本内容为空,则结 束循环,将 AutoCAD 的环境变量还原并退出程序。 以下即为本例程序代码: (defunc: text t() (set qoldcmdecho (getvar “cmdecho“);环境变量, 用于屏蔽命令回显 (setvar “cmdecho“ 0) ;将系统参数 cmdecho 置 0 (setq oldosmode (getvar “osmode“) ;环境变量,用 于关闭捕捉状态 (setvar “osmode“ 0) ;将系统参数 osmode 置 0 (setq p1 (getpoint “请输入起始点n“) ) (setqd (getreal “n 请输入相邻两行文本之间距离 :“) (setqh (getreal “n 请输入文本高度 “) (setqs (getstring “n 请输入文本内容:(回车结束 - 11 - 输入)“) (if(=hnil)(setqh4)(while(/=s“) (progn (command “text“ “j“ “bc“ p1h “0“s “); 在指定坐标处输出文本 (setq p1 (list (car p1) (+ (cadr p1) d) ;获取下一点 平面坐标 (setqs (getstring “n 请输入文本内容:(回车结束 输入)“) ) ) (setvar “cmdecho“ oldcmdecho) ;还原系统 环境变量 (setvar “osmode“oldosmode)(princ) ) 调试: 程序编辑完保存后,点击 Visual LISP 主窗口上的“工具”菜单,在其下 拉菜单中选“加载编辑器中的文字” ,然后在 Visual LISP 控制台中输入用户 所编程序的程序名,如果有错误,控制台中会有错误提示,如果程序没有错误, 则在控制台中显示程序运行结果。 在 CAD 工具栏处右键,选“自定义” ,在弹出的对话框中,选“用户定义” , 将出现的“用户定义的按钮” ,拖放到工具栏上,则会出现一个没有任何定义 的空白工具按钮。不要关闭刚才的弹出对话框,此时点击该新增空白按钮,会 弹出该按钮的特性对话框,用户在该对话框中可对此按钮进行设置,按钮名称 和说明由用户个人设定,在“宏”定义中,填入“(load “d:/lsp/filename.lsp”) programname”(仅供示例,需对照修改)即可。其 中“d:/lsp/filename.lsp”为被编辑原代码文件的带地址文件名,而 programname 则为用户自定义的程序名。修改好之后,即可按下“应用”按钮 并退出。该工具按钮定制结束后,在 AutoCAD 的 “工具”菜单的下拉菜单 “AutoLISP”中选 “加载”命令,将所开发的二 AutoLISP 程序文件进行加 载,即完成本次全部开发。 举例 2: AutoCAD 是当今最流行的二维绘图软件,在化工管道绘图中也被充分利用。 AutoCAD 为用户提供了许多开放式接口,提供了很强的二次开发语言支持,主要 的开发工具有三种,分别是: 使用 C/C + + 的 ARX ,ADS(即 Auto CAD 开发系统), 以及 AutoLISP/VisualLISP 开发工具。综合各方面比较以上三种开发工具, AutoLISP/VisualLISP 用其开发小的绘图工具软件,不仅能够满足要求,而且易 学易用,非常适合工程设计人员的。采用 AutoLISP 开发工具,并结合管道绘 图设计的特点,开发具有自动统计功能的二次开发程序。 程序编写: 尺寸数目统计与求和计算程序清单 ( defunc: total ( / ssetmlnssettempmll total ) ( graph scr ) ( prompt “ n Select dimension to add “) ( set qsset ( ssget ) ) ( progn ( set qml ( mlengths set ) ) ( set qnsset ( ssadd ) ) ( while ( ml0 ) ( set qtemp ( ssnamesset ( set qml ( 1- ml ) ) ) ) ( if ( = ( cdr( assoc0 ( ent get temp ) ) ) “ DIM EN S IO N “) ( ssaddtempnsset ) ) ) ( set qml ( mlengthnsset ) ) ( print ml ) ( princ “ dimension are founded. “ ) ( set qtotal0) ( set qmllml ) - 13 - ( while ( ml 0 ) ( set qtemp( ssnamensset( setqml ( 1- ml ) ) ) ) ( set qnumber( cdr ( assoc42 ( entgettemp ) ) ) ) ( i f ( = 0 number ) ( set qmll ( 1- mll ) ) ( set qtotal( + totalnumber ) ) ) ) ( princ “ n t h e To t al d i mens i o n i s “) ( princ total ) ( princ “of the“ ) ( princ mll ) ( princ“ number n “) ( princ) ) ) 图块的数目统计清单 ( defunc : nb ( ) ( graph scr ) ( set q b1 ( cdr ( ass oc2( ent get ( car ent sel ) ) ) ) b2 ( ss l eng t h ( ssget “ x “ ( list ( ass oc2 ( en t g et ( ca r ent sel ) ) ) ) ) ) ( princ “ n Total number of block “ ) ( princ b1 ) ( princ “ is “) ( princ b2) ( princ ) 为了方便设计使用,程序采用自动加载。按照叙述的方法 , 在 AutoCAD 根目录下创建 acad1.ls p(或 acad.mnl)文件,那么在启动 Auto CA D 时,将自 动执行 acad .lsp 或 acad.mnl。格式: ( load “ e : / lis p /to tal ” ) ( pr inc)进入 AutoCAD 后,已经实现 total 程序文件的加载,在 AutoCAD 就 可作为一般命令使用。注意: 预先要将图块和程序放在同一目录下面,建议使 用 wblock 命令建立的图块,这样图块可以在不同的图纸和不同的计算机上使 用。加载程序后,选择 27.6 和 37.6 两个尺寸后 , 命令行中显示的摘录: 命令: total Select numbers to add 选择对象: 找到 1 个 选择对象: 找到 1 个 , 总计 2 个 选择对象: 2 dimensio nare founded. the Total dimension is 60 . 2 105 注: 程序在 WindowsXP 和 AutoCAD2004 平台上运行成功。数值 60.2105 的 小数位数是由系统的精确度而定,化工管道的设计精确到毫米已经能够满足设 计要求,所以系统内设的精确度对整个设计来说没有影响。 2.2 ADS 2.2.1 ADS 概述 ADS 是编写与 AutoCAD 一起工作的 C 程序的最初方法。ADS 在完成计算量 较大的任务时比 AutoLISP 应用程序要快,且提供了对操作系统的低层访问, 但 编写起来更复杂一些, 用 C 语言编写的 ADS 应用程序经编译后, 成为 AutoCAD 可直接加载的二进制文件,且每次加载不必再解释他们。ADS 程序必须为每一平 台编译,ADS 程序在 Window s 中以. EXE 为扩展名, 在 AutoCADR14 以后的版本 已废止了用 ADS 进行程序开发, 但仍可运行 ADS 开发的应用程序。 2.2.2 ADS 应用程序结构 ADS 与 AutoCAD 的通信是通过 AutoLISP 来完成的,也就是说,ADS 函数是 由 AutoLISP 来调用的,因此每个 ADS 应用程序都必须支持以 ADS 环境所定义 - 15 - 的 AutoLISP 的接口,以接口需要应用程序调用某些 ADS 函数库函数,并按特 定顺序来使用某种值,ADS 与 AutoLISP 的通信过程为 ADS 首先通过调用 ads- ini t( )来初始化并与 AutoLISP 建立联系;ADS 应用程序使用一个 RSRSLT 应 用程序结果码来调用 ad s-link( ),以在 AutoLISP 中处理一个请求; AutoLISP 通过 RQX LOAD 请求码而从 ad s- link( )调用中返回;通过调用 ads-de-fun( ),定义 ADS 外部函数;应用程序使用一个 RSRSLT 结果码再次调 用 ads-link( ),除非它遇到一个错误,此情况下它返回 RTERR;通过 RQSUBR 请求码调用 ADS 函数;处理完此 ADS 函数后,使用 RSRSLT 结果码再调用 ads- link( )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 燃气管道接入与分配系统优化方案
- 智能建筑空调系统设计、安装及能源管理服务合同
- 夫妻共同财产分割与离婚诉讼子女抚养费支付合同
- 房屋建筑工程施工现场废料管理与利用方案
- 脑出血护理测试题及答案
- 钢结构全寿命周期管理方案
- 道路工程课程的教学改革与虚拟实践模式
- 农林大学复试真题及答案
- 2025年中级轮胎测评题库及答案
- 4.3.1呼吸道对空气的处理(一)说课稿2023-2024学年人教版生物七年级下册
- 医院诊断证明书word模板
- 混凝土防渗墙单元工程施工质量验收评定表
- 人工智能介绍课件:人工智能与生活
- 初中数学:《一元二次方程》大单元教学设计
- 大连理工大电力系统继电保护实验实验报告
- 健康社会决定因素课件
- 我国主要城市历年降水量
- 国际贸易采购合同(中英文)
- 《管理运筹学》课后习题答案
- 2021北京重点校初二(上)期中物理汇编:物态变化章节综合3
- LY/T 2267-2014林业基础信息代码编制规范
评论
0/150
提交评论