1 / 50

第 9 章 二次开发及 AutoLISP

第 9 章 二次开发及 AutoLISP. ▪ AutoCAD 二次开发在化工制图中的应用 ▪ AutoLISP 语言基础 ▪ Visual LISP 基础 ▪ DCL 基础. 本章目录. AutoCAD 二次开发在化工制图中的应用. 二次开发的目的及必要性 几种主要的二次开发语言简介 化工 AutoCAD 二次软件开发的思路及步骤. AutoCAD 二次开发在化工制图中的应用. 二次开发的目的及必要性

addison
Download Presentation

第 9 章 二次开发及 AutoLISP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第9章 二次开发及AutoLISP ▪AutoCAD 二次开发在化工制图中的应用 ▪AutoLISP语言基础 ▪ Visual LISP 基础 ▪DCL基础

  2. 本章目录 AutoCAD 二次开发在化工制图中的应用

  3. 二次开发的目的及必要性 • 几种主要的二次开发语言简介 • 化工AutoCAD二次软件开发的思路及步骤

  4. AutoCAD二次开发在化工制图中的应用 二次开发的目的及必要性 AutoCAD软件作为CAD工业的旗帜产品,以其强大的功能得到广大用户的青睐。它具有精确的坐标系,能够完成各种图形的精确绘制、任意缩放和修改,支持数字化仪的精确输入。尽管如此,由于AutoCAD是作为一个通用的绘图软件而设计开发的,但各行各业都有自己的行业和专业标准,许多单位也有自己的技术规格和企业标准,化工行业也不例外,有着大量的各种图纸设计标准,因而,AutoCAD不可能完全满足每一用户的具体应用要求。但是,AutoCAD具有开放的体系结构,它允许用户和开发者在几乎所有方面对其进行扩充和修改,同时可以利用多种开发语言,开发可以自动完成某一绘制任务的软件,可大大提高绘制速度,改善工作效率。以上工作可称之为AutoCAD的二次开发技术。也就说AutoCAD二次开发技术主要包括两个方面:一方面是对它的功能进行扩充和修改,如修改或增加菜单、进行各种定制工作;另一方面是利用开发工具编写能够完成特殊任务的自动绘制软件,如下面将介绍的通过人机交互界面输入必要的数据后,系统自动完成法兰的绘制,就属于这一类型,在化工绘图中,我们需要的也是有关这一方面的开发软件,它能最大限度地满足用户的特殊需要,通过调用各种已经开发好的专用零件图绘制软件,加快绘制速度,提高工作效率。尤其重要的是,可以将大量的计算工作交给计算机去完成。这样,不仅提高了绘图速度,同时也提高了绘制精度,避免了人为的计算错误。

  5. AutoCAD二次开发在化工制图中的应用 目前很多化工技术人员对AutoCAD的使用一般还仅限于它自身的各种绘图功能,使用鼠标手工绘制各种图件,对其强大的二次开发功能还没有进行深入使用。如果能使用AutoCAD的二次开发技术开发出一套软件,让AutoCAD自动绘制我们目前使用的各种图件,就可以大大提高作图效率,发挥出AutoCAD的强大图形编辑、修改功能,对图件中的各种元素进行任意修改,满足各种不同的图件格式和绘图标准,由此可见,对于一个化工技术人员来说,学会自己开发AutoCAD二次应用软件显得十分必要,因为这将大大减少具体的绘制工作,而可以将主要精力集中到设备的设计中去,从而加快化工设备的开发速度。 近几年来,随着计算机软、硬件技术的飞速发展及其应用的普及,也带来了化工领域使用计算机的浪潮。首先是各课程教学使用了CAI课件,学生们可以清楚地看到各种物质的具体颜色,并可以看到动画反应,让学生们能够形象生动地上课。然后是各种实验仿真软件的出现,让学生们不用亲自下到工厂,也不用浪费任何原料,在没有危险的情况下就可以完成对实验过程或者是生产流程的学习和实习。同时计算机可以对反应进行模拟,对实验数据的拟合都大大方便了化工工作者。随之诞生的各种化工专用软件,给化学工业的发展注入了新鲜血液,使化学工业的发展如虎添翼。

  6. AutoCAD二次开发在化工制图中的应用 目前,随着化学工业的进一步向前发展,各种新的机械设备被人们设计和制造,这些设备的工程图都是一件很大的工程。比如一个完整热交换器图纸,就需要一个专人1~2天的工夫才能完成。利用AutoCAD的二次开发技术,可以编出对热交换器的图进行批处理的程序,只需通过简单的人机会话,计算机能自动绘制出图纸,这也是化工技术人员学习掌握AutoCAD二次开发技术的目的之所在。随着化学工业的不断日新月异,对设备图纸绘制的速度要求也将越来越快,利用AutoCAD二次开发技术开发而成的软件直接绘制各种设备的技术将在化学工业中得到更加广泛的应用,其开发技术必将伴着化学工业一起发展。

  7. AutoCAD二次开发在化工制图中的应用 几种主要的二次开发语言简介 ⑴AutoLISP AutoLISP语言是AutoCAD所支持的一种内嵌式语言,它由美国Autodesk公司开发,其目的是使用户十分方便地利用AutoLISP编程语言对AutoCAD进行二次开发,它采用了与LISP语言中的Common LISP最近的语法和习惯约定,同时又针对AutoCAD增加了许多新的功能,使用户可以直接调用几乎全部的AutoCAD命令,因此它既具有一般高级语言的基本结构和功能,又具有AutoCAD强大的图形处理能力,是目前计算机辅助设计和绘图中较广泛采用的语言之一。 ⑵Visual LISP Visual LISP(简称VLISP)是为加速AutoLISP程序开发而设计的强有力的工具。它提供了一个完整的集成开发环境(包括编译器、调试器及其他工具,它可以显著地提高自定义AutoCAD的效率)。Visual LISP提供的主要工具有:文本编辑器、格式编排器、语法检查器、源代码调试器、检验和监视工具、文件编译器、工程管理系统/快捷相关帮助与自动匹配功能和智能化控制台等。 Visual LISP克服了AutoLISP一直以来开发中所存在的诸多不便和某些局限性。从语言方面看,Visual LISP对AutoLISP语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。同时,通过实现事件反应器函数,还扩展了AutoLISP响应事件的能力。 VisualLISP已经被完整地集成到AutoCAD中。

  8. AutoCAD二次开发在化工制图中的应用 ⑶VBA VBA(Visual Basic for Application)最早是建立在Office 97中的标准宏语言,由于它在开发方面的易用性且功能强大,许多软件开发商都将其嵌入自己的应用程序中,作为一种开发工具提供给用户使用。而AutoCAD VBA就是集成在AutoCAD中的Visual Basic开发环境,与VB的主要区别是VBA在与AutoCAD相同的进程空间中运行,提供了与AutoCAD关联的快捷的编程环境,程序设计直观快捷。它还提供了与其它可使用VBA应用程序集成的能力,可以作为其它应用程序如Word或Excel的自动化控制器。可以看出,VBA是其中编程很为快捷方便的一种,对于非计算机专业而更多熟悉VB编程语言的人来说,可以很快就掌握它。 ⑷ADS ADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。

  9. AutoCAD二次开发在化工制图中的应用 ⑸ObjectARX ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2005,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。 ⑹ActiveX Automation ActiveX技术来源于 OLE(Object Linking and Embedding)技术。OLE最初是对象链接与嵌入,后来发展成为复合文档技术,包括文字、图片、声音、动画片和视频等媒体可以共同存在于一个文档中。它们可以由不同的应用程序产生,同时也可以在该文档中编辑。如果应用程序支持OLE文档,则在不同应用程序之间的切换由OLE自动完成。OLE技术和其它技术共同作用,从而实现不同应用程序之间的无缝链接。 自动化技术(Automation)允许一个应用程序驱动另外一个程序。驱动程序被称为自动化客户,另一个为自动化服务器。自动化技术后来发展成为ActiveX Automation。

  10. AutoCAD二次开发在化工制图中的应用 ⑺Visual Java Java是最早由Sun公司创建的一种颇具魅力的程序设计语言,她是针对嵌入系统而设计的。像许多开发语言一样,Java是一组实时库的集合,可为软件开发者提供多种工具来创建软件、管理用户接口、进行网络通讯、发布应用程序等。对AutoCAD用户和开发者而言,Java代表着新一代的编程语言,它主要用于开发出全新的优秀产品。

  11. AutoCAD二次开发在化工制图中的应用 化工AutoCAD二次软件开发的思路及步骤 化工AutoCAD二次软件的开发和其它软件的开发一样,均需遵循一定的规律。一般来说,一个完善的AutoCAD二次软件开发过程可以分成4个阶段的内容,它们分别是系统规划、系统开发、系统运行与维护、系统更新。而系统规划又可以分成3个方面的内容,它们分别是战略规划、需求分析、资源分配。在这个阶段,我们主要任务是确定所需要开发软件的目的、使用对象、使用者的要求、开发者目前的能力及拥有的资源。软件开发的第二阶段是系统开发,它包括系统分析、系统设计、系统实施。这时的主要任务根据第一阶段已经做的工作基础上,提出所开发软件的逻辑方案、确定系统开发中每一步的内容和任务,在此基础上,再进行系统总体结构设计,提出系统总体布局的方案。至此,软件开发工作还停留在逻辑开发状态,尚未进入具体的编码工作。 软件开发完成第二阶段的系统设计后,就进入了实质性的编码工作,也就是说进入了系统的实施阶段,这时要完成各种编码工作,完善系统各个接口之间的联络,改善界面的友好程度,对整个软件进行组装及调试,最后完成交付使用前的各项工作。如该保密的部分需要进行封装;可以公开的部分需要做好友善的人机界面。

  12. AutoCAD二次开发在化工制图中的应用 软件开发的第三阶段是运行和维护阶段,一般对于规模较小的软件,对这方面的考虑就比较少。比如我们自己经常开发一些小软件来解决一些实际问题,就较少考虑以后的维护,一般只要满足目前的应用就可以了。但对于一个完善的软件来说,就需要考虑实际运行过程中出现的各种情况,并有解决方案及维护方法。这样,就会使得一个看上去较小的软件,也会变得复杂起来,但这种复杂为使用和维护带来了方便,提高了软件对付外来情况的能力,提高了软件的使用寿命,实际上等于节约了软件使用成本。 任何一个软件,总有它更新的时候,此时,进入了软件开发的第4阶段,即系统更新阶段,在新的情况下,对原有的系统进行更新开发。

  13. 本章目录 AutoLISP语言基础

  14. 基本运算 • 基本函数 • 编程中常用的分支及条件判断函数 • 常用的绘图命令 • AutoLISP命令调用过程

  15. AutoLISP语言基础 ⑴加法 格式:(+ <数> <数> …) 功能:求出所列数的总和 实例:(+ 20 30) 结果为50 (+ 15 -10) 结果为5 ⑵减法 格式:(- <数> <数> …) 功能:求出第一个数逐次减去后面数的差 实例:(- 120 30 50) 结果为40 (- 15 -10) 结果为25 ⑶乘法 格式:(* <数> <数> …) 功能:求出所列数的乘积 实例:(* 20 30) 结果为600 (* 1.5 -10 2) 结果为-30 ⑷除法 格式:(/ <数> <数> …) 功能:求出第一个数逐次除以后面数的商 实例:(/ 20 ) 结果为20 (/ 130 2) 结果为65 (/ 3 30) 由于表中的两个元素均为整型数,结果也为整型数,故结果为0 (/ 3.0 30) 结果为0.1 (/ 30 (/ 6 9)) 系统显示被0除,原因在于表(/ 6 9)的值为0 基 本 运 算

  16. AutoLISP语言基础 ⑸自然数求幂 格式:(exp <数> ) 功能:求e的<数>次幂值,e=2.71828 实例:(exp 2.0 ) 结果为7.3890561 (exp 0) 结果为1 ⑹普通数求幂 格式:(expt <底数> <幂> ) 功能:求<底数>的 <幂>次方值 实例:(expt 2 3) 结果为8 ⑺求自然对数 格式:(log <数> ) 功能:求<数>的自然对数,要求<数>必须大于零 实例:(log 10.0) 结果为2.3025851 ⑻求平方根 格式:(sqrt <数> ) 功能:求<数>的平方根,要求<数>必须大于零 实例:(sqrt 4.0) 结果为2.0 基 本 运 算

  17. AutoLISP语言基础 ⑼求绝对值 格式:(abs <数> ) 功能:求<数>的绝对值 实例:(abs -3) 结果为3 ⑽求最大值 格式:(max <数1> <数2> …) 功能:求<数1>,<数2> …的最大值 实例:(max 2 3 4 10) 结果为10 ⑾求余数 格式:(rem <数1> <数2> …) 功能:求<数1>整除<数2>的余数,若参数多于两个,则将<数1>整除<数2>后的余数再整除<数3>,求出余数,以此类推。 实例:(rem 50 9 4) 结果为1 基 本 运 算

  18. AutoLISP语言基础 ⑴正弦函数SIN 格式:(sin <角度> ) ,其中 <角度>用弧度表示 功能:求<角度>的正弦值 实例:(sin (/ pi 2)) 结果为1 ⑵余弦函数COS 格式:(cos <角度> ) ,其中 <角度>用弧度表示 功能:求<角度>余弦值 实例:(cos (/ pi 2)) 结果为0 ⑶正切TAN 格式:(tan <角度> ) ,其中 <角度>用弧度表示 功能:求<角度>正切值 实例:(tan (/ pi 4)) 结果为1 ⑷反正切函数ATAN 格式:(atan <数> ) 功能:求<数>反正切值,单位为弧度,为[-π/2,π/2] 实例:(atan (1)) 结果为0.785398 , 即(π/4) 实例:(cos (/ pi 2)) 结果为0 基 本 函 数

  19. AutoLISP语言基础 ⑸取整函数FIX 格式:(fix <数> ) 功能:求<数>的整数部分,相当于高级语言中的“INT(数)”语句。 实例:(fix 7.8) 结果为7 (fix -7.8) 结果为-7 (fix 9) 结果为9 ⑹实型化函数FLOAT 格式:(float <数> ) 功能:求<数>转化为实型数,不考虑该数原来的类型 实例:(float 3) 结果为3.0 (float 3.3) 结果为3.3 ⑺赋值函数SETQ 格式:(setq <变量1> <表达式1> [<变量2> <表达式 2>]…) 功能:将表达式的值赋给变量,变量和表达式需成对出现 实例:(setq a 10) 结果 a=10 (setq s “it” ) 结果 s=“it” (setq b 123 c 10 d 45) 结果 b=123 c=10 d=45 (setq t (+ 34 45)) 结果 t=79 (setq P1‘( 34 45)) (setq p1 '(30 40)) //确定点P1的坐标 (setq p2 '(300 400)) //确定点P2的坐标 (command “line” p1 p2 “”) //绘制从P1点到P2点的直线 基 本 函 数

  20. AutoLISP语言基础 ⑻取表中第一元素CAR函数 格式:(car <表> ),表必须为引用表而非标准表,但可以是简单表,也 可以是嵌套表。 功能:提取<表>的顶层第一个元素 实例:(car ‘(1 3 5)) 结果为1 (car ‘((1 3)6 5)) 结果为(1 3) ⑼取表中除第一元素外其它元素的CDR函数 格式:(cdr <表> ),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。 功能:提取<表>的除顶层第一个元素外的其它元素 实例:(cdr ‘(1 3 5)) 结果为(3 5) (cdr ‘((1 3)6 5)) 结果为(6 5) ⑽CAR和CDR的组合函数 CAR和CDR可以任意组合,其组合深度可达4层,执行时从右到左依次执行,若搞错次序,其结果必然出错。4个层次的组合形式为CAR、CXXR、CXXXR、CXXXXR,其中X既可以是A也可以是D,例如: (cadr '(2 (1 2 3) 34 )) 结果为(1 2 3) (caadr '(2 ((11 6) 2 3) 34 )) 结果为(11 6) (caaadr '(2 ((11 6) 2 3) 34 )) 结果为11 (caaddr '(2 ((11 6) 2 3) (3 4) )) 结果3 基 本 函 数

  21. AutoLISP语言基础 ⑾LAST函数 格式:(last <表> ),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。 功能:提取<表>的顶层中最后一个元素 实例:(last '(1 2 3)) 结果为3 (last ‘(12 3 (4 5))) 结果为(4 5) ⑿NTH函数 格式:(nth <序号> <表> ),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。 功能:提取<表>中第<序号>个元素,注意第一个元素的序号为0号,以此类推。 实例:(nth 2 '(2 3 (4 5) 5)) 结果为(4 5) (nth 3 '(2 3 (4 5) 5)) 结果为5 ⒀LIST函数 格式:(list <表达式1> <表达式2>…… ) 功能:将所有的<表达式>按原位置构成新表,可用于确定点的坐标位置。 实例:(list 2 3 '(5 6)) 结果为(2 3 (5 6)) (list 2 3) 结果为(2 3) 下面是一个利用list确定点的位置,绘制圆的小程序: (setq p1 (list 222 33)) (setq p2 (list 200 300)) (command "circle" p2 160) (command "circle" p1 160) 基 本 函 数

  22. AutoLISP语言基础 ⒁ATOF函数 格式:(atof <数字串> ) 功能:将<数字串>转换成实型数,返回实型数 实例:(atof "23") 返回结果为23.0 ⒂ASCII函数 格式:(ascii <字符串> ) 功能:将<字符串>中第一个字符转换成ASCII码,并返回该值 实例:(ascii "b c") 返回结果为98 ⒃CHR函数 格式:(chr <整数> ) 功能:将ASCII码为<整数>的转换成相应字符,并返回该字符 实例:(chr 69) 返回结果为"E" (chr 80) 返回结果为"P“ ⒄ITOA函数 格式:(itoa <整数> ) 功能:将<整数>转换成整数字符串 实例:(itoa 5) 返回结果为"5“ 基 本 函 数

  23. AutoLISP语言基础 ⒅ATOI函数 格式:(atoi <数字串> ) 功能:将<数字串>转换成整数,返回值截去小数部分 实例:(atoi "45.4") 返回结果为45 (atoi "-5.6") 返回结果为-5 (atoi "7") 返回结果为7 (atoi "34.6ac") 返回结果为34 (atoi "df43")45 返回结果为0 说明:当数字串中有非数字字符时,则转换到第一个非数字原子时终止。 ⒆STRCAT函数 格式:(strcat <字符串1> <字符串2> …… ) 功能:将<字符串>按先后顺序头尾相连起来,组成一个新的字符串。 实例:(strcat "bc" "etr" "ty") 返回结果为"bcetrty" 基 本 函 数

  24. AutoLISP语言基础 (20)SUBSTR函数 格式: (substr <字符串> < 起点>[<长度>] 功能:从<字符串>中提取一个子串,该子串从起点的字符位置开始,由连续<长度>个字符组成,若<长度>缺省,则到字符串结束。 实例: (substr "b212c" 2 3) 返回结果为"212" (substr "b2er12c" 2) 返回结果为"2er12c“ (21)READ函数 格式: (read <字符串> ) 功能:将<字符串>转化成表或原子,文件处理时经常使用 实例:(read "ad") 返回结果为AD (read "b") 返回结果为B (read "(a b)") 返回结果为(A B) (read "(3 4)") 返回结果为(3 4) 基 本 函 数

  25. AutoLISP语言基础 编程中常用的分支及条件判断函数 在程序编写中经常会用到一些条件判断函数及循环函数,没有这些函数,就难以完成一个理想的程序,下面将一些在编程中使用程度较高的函数介绍一下。 ⑴关系运算函数 关系运算函数是编程中分支及条件判断函数的基础,它对数值型表达式的大小进行比较,表达式可以是两个或两个以上,其返回值是逻辑变量。比较运算成立,则返回T;不成立则返回nil,常作为条件用于条件判断语句和循环判断语句中,这一点将在下面讲解中提到。AutoLISP共有6种关系运算函数,它们分别是“=”等于、“/=”不等于、“<”小于、“>”大于、“<=”小于等于、“>=”大于等于。其中等于的关系函数,其表达式只能两个,下面是6种关系函数的实际例子: (< 2 4 5 6) 返回结果T (< 2 4 5 3) 返回结果nil,全程比较 (> 8 7 3 9)返回结果nil,全程比较 (> 8 7 3 1)返回结果T (= 2 2)返回结果T (= "s" "b") 返回结果nil (/= 1 2 3)返回结果T (/= 1 1 3)返回结果nil,只比较前面两个表达式 (<= 3 3 5)返回结果T (>= 5 5 1)返回结果T

  26. AutoLISP语言基础 ⑵逻辑运算函数 AutoLISP共有3种逻辑运算函数,分别是逻辑和AND、逻辑或OR、逻辑非NOT,下面通过实例说明其应用。 (and a d c 3) 返回结果nil,只要有一个表达式为假,则返回nil (and d c) 返回结果nil (setq a 3 b 4) 返回结果4,返回最后一个赋值 (and a b) 返回结果T,由于前面给a、b赋了值 (and (< 2 3) (+ 1 3) (> 3 5)) 返回结果nil (or 1 2 a b) 返回结果T,只要有一个表达式为真,则返回T (or (> 4 2) (< 4 2)) 返回结果T (not 2) 返回结果nil (not (> 6 9)) 返回结果T ⑶二分支条件函数IF 格式:(if <测试表达式> <成立表达式> <非表达式>) 功能:对<测试表达式>进行运算,若<测试表达式>成立,则执行<成立表达式>,否则,执行<非表达式>,两者必居其一,所以称之为二分支条件函数,是在编程中经常用到的条件判断函数。下面是几个实际例子: (if (= 1 3) 3 5) 测试式不成立,执行第二个表达式,第二个表达式为原子,返回5 (if (< 1 3) (setq a 2) (setq a 9)) 测试式成立,执行第一个表达式,返回2 (if (= 1 3) "yes") 测试式不成立,但无第二个表达式,返回nil (if 1 "yes" "no") 测试表达式为1,虽然不为T,但也不为nil,仍执行第一表达式,返回“yes”

  27. AutoLISP语言基础 ⑷多分支条件函数COND 前面二分支条件函数只能解决两种结果中选一种的条件判断,若有多个条件中选一,则需用COND函数。 格式:(cond (<测试表达式1> <结果表达式1> ) (<测试表达式2> <结果表达式2> ) : : (<测试表达式n> <结果表达式n> ) ) 该函数的参数为任意数目的表,每个表有两个元素,第一个元素为测试式,第二个元素为结果。 功能:对每一个支表中的<测试表达式>依次进行运算,若<测试表达式>成立,则执行该支表对应的<结果表达式>,停止后面的测试工作;否则,继续执行<测试表达式>,直到最后一个分支条件。

  28. AutoLISP语言基础 ⑸顺序控制函数PROGN 常和IF函数一起使用,使其在某一条件下,顺序执行多个表达式。 格式:(progn <表达式1> <表达式2> : : ) 功能:按顺序执行多个表达式,并返回最后表达式求值结果,表达式需为标准表。 ⑹常见测试函数 ZEROP函数用于判断测试项是否为零,若为零,则返回T,否则返回nil。MINUSP函数用于判断测试项是否为负,若为负,则返回T,否则返回nil。NUMBERP函数用于判断测试项是否为数,若为数,则返回T,否则返回nil。ATOM函数用于判断测试项是否为原子,若为原子数,则返回T,否则返回nil。LISTP函数用于判断测试项是否为表,若为表,则返回T,否则返回nil。

  29. AutoLISP语言基础 ⑺循环函数 在各种程序编写中,循环语句是不可缺少的,AutoLISP的两种主要循环函数是WHILE函数和REPEAT函数,下面分别介绍之。 ①WHILE函数 格式:(while <测试表达式 > [标准表1] [标准表2] : ) 功能:先对测试表达式进行测试,若其值不为nil,则依次执行下面的各个 [标准表],执行完各 [标准表]后,再返回来对测试表达式进行测试,直至测试表达式为nil,停止循环执行。 ②REPEAT函数 格式:(repeat <次数 > [标准表1] [标准表2] : ) 功能:按该定的次数进行循环计算式为nil,停止循环执行。

  30. AutoLISP语言基础 常用的绘图命令 ⑴常用的交互命令 在程序编写中经常要用到一些交互式命令,通过交互命令,可提高程序的人机对话能力。AutoLISP也提供了一些常见的交互命令,下面分别介绍。 ①输入整型数GETINT 格式:(getint[提示]) 功能:该函数提示用户输入一个整型数,并返回该数,常和赋值函数SETQ合用 实例:(setq n (getint“n=”)) //等待用户输入一个整型数,并将该数赋值给n。 ②输入实型数GETREAL 格式:(getreal[提示]) 功能:该函数提示用户输入一个整型数,并返回该数,常和赋值函数SETQ合用 实例:(setq a(getreal“a=”)) //等待用户输入一个实型数,并将该数赋值给a。 ③输入字符串GETSTRING 格式:(getstring[提示]) 功能:该函数提示用户输入一个字符串,并返回该数,常和赋值函数SETQ合用 实例:(setq m (getstring“your name”)) //等待用户输入一个字符串,并将该字符串赋值给m,若输入xiaodong ,返回“xiaodong”。需要注意的是输入字符串时,千万别用空格键,否则只把空格键以前的内容作为输入的字符串。

  31. AutoLISP语言基础 ④输入点GETPOINT 格式:(getpoint[基点] [提示]) 功能:该函数提示用户输入一个点,若有基点,这将从基点到输入的点之间画一条直线拖动直线,但命令执行过后消失。 实例:(setq P1 (getpoint ‘(40 50) “第二点”)) //等待用户从键盘输入点或用光标选点。 ⑤输入距离值GETDIST 格式:(getdist [提示]) 功能:该函数提示用户输入一个距离值。 实例:(setq tspac (getdist “输入距离”)) //等待用户从键盘输入某一数值。 ⑵点的确定 确定点的位置,是进行各种绘制工作的基础,除了前面介绍的用getpoint函数外,还可以用下面几种方法确定点(通过绘制直线的小程序加以说明验证)。 实例:(setq p1 '(30 40)) //用禁止求值表,确定P1点的位置 (setq p2 '(300 400)) (command "line" p1 p2 "") ⑶直线的绘制LINE 格式:(command “line” P1 P2 P3…………[条件]) 功能:将P1、P2、P3…….等点用直线连接起来,其中[条件]可缺省,若条件中输入“c“,则绘制的将是封闭曲线。

  32. AutoLISP语言基础 ⑷多义线绘制 格式:(command “pline” <起点> “w” <起点线宽> <末点线宽> <第二点> ……<末点> [条件]) 功能:将P1、P2、P3…….等点用各种曲线连接起来,其中[条件]可缺省,若条件中输入“c“,则绘制的将是封闭曲线。 ⑸矩形绘制 格式:(command“rectang” [倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W)] < 指定另一个角点> [尺寸(D)] < 指定另一个角点> ) 功能:绘制符合格式中定义的矩形。 ⑹圆的绘制 格式:(command“circle” [三点(3P)/两点(2P)/相切、相切、半径(T)]<圆心< 半径 > ) 功能:绘制符合格式中定义的圆,默认的输入方式是圆心、半径,其它输入方式需根据具体选定的形式而定。 ⑺交点的确定 格式:(inters <端点1> <端点2> <端点3> <端点4> [<任选项>]) 功能:求<端点1>和<端点2>所确定的直线和<端点3>和<端点4>所确定的直线的交点,若存在则返回交点,若不存在,则返回nil。如果有任选项,且该项为nil,则可求延长线的交点。

  33. AutoLISP语言基础 ⑻图层的设置 格式:(command “layer” “m”<图层名> “c”<图层颜色> “l”<图层线型> “lw” <图层线宽> "" ) 功能: 设置和格式中描述相符合的图层,除图层名为不可缺省外,其它均可采用默认值,当调用图层时,可只采用格式中的前4项。 ⑼剖面线绘制 格式:(command “batcht” <填充图案模式> [<比例>] [<角度>] <填充对象>) 功能:将<填充对象> 按格式中定义的要求进行填充,其中[<比例>]和[<角度>]可默认,<填充对象>有多种获取方法,如果是填充刚绘制好的实体,则可用entlast命令。 ⑽尺寸标注 格式:(command “dim” <标注模式> <标注起点> <标注终点> <标注线位置中点>)[<标注内容> ]) 功能:<标注起点>和 <标注终点>之间按标注模式标注尺寸,若标注内容缺省,则按默认方式标注。 ⑾文本书写 格式:(command “text” [<起点类型>] <起点> <字高> <字旋转角度4> <文字内容>) 功能:将文字内容按格式中的定义书写出来,如缺省[<起点类型>]则以左下角为起点。

  34. AutoLISP语言基础 AutoLISP命令调用过程 首先将AUTOLISP的程序用任何一种ASCII码文本编辑器来编辑,在DOS环境下可采用EDIT编辑,在WINDOWS环境下可用附件中的记事本编辑,并注意在保存时以.LSP为后缀,一般的调用过程如下。 ①用编辑器编写好,以*.LSP存盘。 ②在AutoCAD中的命令中输入: (Load“盘符/子目录/文件名”),回车。 ③输入: (文件名、参数1、参数2 ……)[注意参数和参数之间不要加逗号],回车。 ④在AutoCAD的界面上自动生成图。

  35. 本章目录 Visual LISP 基础

  36. 安装 • 启动 • 编辑 • 调试

  37. Visual LISP 基础 安装 Visual LISP无需单独安装,我们在安装AutoCAD 2004时已经将其捆绑按安装在一起,只要在使用时调用它即可,这为我们省了不少安装软件过程中的麻烦,同时也使得该软件和AutoCAD之间的关系更加紧密。尤其是Visual LISP中的部分Auto LISP程序几乎可以移植到任何版本的AutoCAD中,而不受版本先后的影响。

  38. Visual LISP 基础 启动 启动Visual LISP有两种方法,但都需首先启动AutoCAD软件。第一种方法是从AutoCAD菜单中选择“工具”>>“AutoLisp”>>“Visual Lisp编辑器”;第二中方法是在AutoCAD命令行中输入“vlisp”,启动Visual Lisp编辑器。

  39. Visual LISP 基础 编辑 Visual LISP的程序在编辑窗口进行编辑,编辑时,系统会自动进行一些识别,并将其显示成不同的颜色。如括号是红色;函数是蓝色,如果想输的是各种函数,一般为表中第一项,但输完后系统没有自动变成蓝色,则说明你输错了;双引号内的绘图命令为粉红色,包括双引号本身;各种变量是黑色;数字是绿色。掌握这些规律对减少编程中的错误很有帮助。在编程过程中,如果遇到一些较为生疏的函数,可以通过系统的帮助功能加以解决。

  40. Visual LISP 基础 调试 调试是编程工作中一项十分重要又非常繁重的工作。在没有Visual LISP之前,Auto LISP程序的调试是十分困难的,常常找不到问题之所在。幸好有了Visual LISP,使调试工作有了质的飞跃。利用其提供的调试工具和专用工具,一般可以较快地找到问题。系统调试中最常见的错误是缺少括号或有多余括号;其次是错误函数或命令,常常是绘图命令输错,因为若函数错误,在编写中可以根据颜色判断;还有列表缺陷,被零除及函数被取消。对函数被取消这种现象有点特殊,因为它并不是当前所编的程序有问题,而是在上一次调试过程中,所编程序存在缺陷,使的AutoCAD处于命令等待状态。这时,需要通过视图转换,激活AutoCAD,取消命令等待状态,就可以了。根据我们自己开发程序的经验,认为调试工作需和整个软件的开发工作结合起来。在程序开发的步骤上考虑到调试工作问题,以采用从下到上的程序编程工作为佳,结合该方法,作者推荐如下的编程调试步骤。 ①将整个软件分解成功能相对独立的功能块,再将功能块分解成若干个小程序。

  41. Visual LISP 基础 ②将小程序中的每一个语句,按照先后次序进行编辑。在编辑过程中首先利用颜色的改变,纠正一些明显的错误,如果对某一语句把握不大,可直接加载该语句,判断系统能否通过。关于加载运行可通过选中需要加载的语句,点击专用工具中栏中的第二个工具,一般情况下,以编完相对较完整的一段语句后,再将这段进行加载运行较好,如所有的赋值语句。一段语句编写完成,加载运行结果正确,则进入下一段语句的编写。如正确,但根据错误提示可明显找到问题的,则修改后再加载运行;如无法根据错误提示找到问题的,则可以采用调试工具栏中的各种方法进行错误查找,如仍无法查到,则需逐句加载,但在逐句加载中,需要补充对加载语句中所需变量值的设定工作。通过以上工作,将小程序全局调通,并进行封装。 ③将同一功能的小程序进行组装,并进行调试,调试完成,将功能程序进行封装。 ④将不同功能的功能程序进行组装,并进行全局调试,调试通过,完成软件基本开发工作。 ⑤根据客户应用的各种情况,对软件进行各种测试,对发现问题进行修改,最后得到完善软件,并将其封装。

  42. 本章目录 DCL基础

  43. 定义 • 控件 • 程序编辑 • 软件调试及加载

  44. DCL基础 定义 对话框是人机交互的主要界面之一,它具有良好的视觉效果,操作方便、直观,输入数据与顺序无关。当我们编写好程序,需要通过外界输入数据时,对话框是一种首选的交互工具。对话框可以用DCL(Dialog Control Language,即对话框控制语言)来编写。DCL本身可直接在Visual LISP的编辑框中按规律编写,并进行调试和预览工作,编辑完成后,将其后缀取为“.dcl”保存,然后在主程序中用Visual LISP语句调用即可。可向用户提供图形的交互环境,使操作更为方便和直观。DCL文件由ASCII码组成,后缀为“.dcl”。

  45. DCL基础 控件 控件是DCL中的主要组成部分,编写对话框主要就是编写各种控件,对各种控件的属性进行定义,常见的控件主要有Button(按钮)、Edit_box(编辑框)、Image_button(图像按钮)、List_box(列表框)、Popup_list(可下拉列表框)、Radio_button(单选按钮)、Slider(滑动条)、Toggle(复选框)、Text_part(文本控件的一部分)。每一个控件有具有不同的属性,其中控件的典型属性有以下几种。 ①Label 指定显示在控件中的文字,该属性为一带引号的字符串。 ②Edit_limit 指定在编辑框中允许输入的最大字符数个数,缺省值为132。 ③Edit_width 以平均字符宽度为单位指定Edit_box控件中编辑或输入框的文本宽度,该属性值可以是一个整型或实型数值。 ④Fixed_height 布尔型数值,制定控件的高度是否可以占据整个可用空间。缺省值为False,如果属性值为True,则控件的高度保持固定,不会占据由于布局或对齐操作而留出的可用空间。 ⑤Fixed_width 布尔型数值,制定控件的宽度是否可以占据整个可用空间。缺省值为False,如果属性值为True,则控件的宽度保持固定,不会占据由于布局或对齐操作而留出的可用空间。

  46. DCL基础 ⑥Key 指定一个ASCII码名称,应用程序可以通过该属性引用指定的控件,该属性为一带引号的字符串,没有缺省值。对话框中各控件的Key值必须是惟一的。注意:Key值区分大小写。 ⑦Value 指定控件的初始值。该属性值为一个带引号的字符串,无缺省值。其中编辑框的Value值为缺省时的数值,可以不用加引号。 ⑧Aspect_ratio 指定图像的宽高比。如果属性值为0.0则图像大小占据整个控件。 ⑨column 控件按钮纵向排列,注意需从整体上观察。 ⑩row 控件水平排列,同样需丛整体上观察。

  47. DCL基础 程序编辑 下面通过一个较典型的对话框来说明对话框程序的编写过程。首先来观察一下这个对话框的结构,从大范围来看,是一个大列,列中共有5大行组成,其中第二行又是一个框型列,而第三行是一个框型行,需要进行重新定义。另外在第一大行和第二大行之间留一个空白。 图9-9 对话框逻辑位置示意图 图9-10 具体对话框示意图

  48. DCL基础 软件调试及加载 软件编写好后,先将文件以后缀“.dcl”保存,将会发现除了程序中最前面的对话框名称dialogboxstructure是黑色以外,其它都是有颜色的。如果还发现有黑色的字符在控件名称或属性说明中出现,请先检查修改之,等程序满足颜色要求后,点击菜单栏中的“工具”,选择其中的“界面工具”,再点击“预览编辑器中的DCL”。如果所编程序正确的话,系统就会弹出正确的对话框;反之,系统会弹出出错信息,并说明错误在第几行。用户需根据系统提示的问题进行修改,直至在预览中获取正确的对话框。对话框程序编写好后,在具体应用时,尚需编写调用程序。

  49. 本章目录 实例开发 详见教材

  50. 第1章 AutoCAD软件概述 第2章 化工制图基本知识 第3章 化工设备零件图绘制 第4章 化工容器绘制 第5章 热交换设备系列绘制 第6章 塔设备绘制 第7章 管道布置图绘制 第8章 工艺流程图绘制 第9章 二次开发及AutoLISP

More Related