第4章AutoCAD应用基础机械CAD2例机械CAD3机械CAD44.1二维标准图元创建4.2三维坐标与观测4.3三维建模基础4.4绘制弯管实例机械CAD54.5VisualLISP参数化程序设计传统的交互式绘图一般需要用精确的尺寸值定义几何元素,输入的每一条线都必须有确定的位置,图形一旦建立,即使结构相似但想改变图形大小尺寸,只能对图形进行重建。而工程设计中,一方面,新产品的设计不可避免地需要多次反复修改,需要进行零件结构和尺寸的综合协调、优化、另一方面,对同一种基本结构形式的零部件,其图形结构具有一定的相似性,往往只是尺寸的大小不同,其图形随尺寸参数的变化而相应变化。机械CAD6因此希望有一种比交互式绘图更方便、更高效、更适合结构相似图形绘制的方法。参数化设计方法比较好地解决了这一问题。机械CAD74.5.1参数化编程原理参数化编程是指对基本结构相似的零部件,利用该类零件的图形结构具有相似性的特点,采用编程的方法编制程序,当给出图形各个部分的控制参数时便可快速得到所需要的零件图形的绘图方法。完整地描述一个图形需提供以下几方面的信息:图形的几何参数(点的坐标等)图形的结构参数(如轴的长度和直径)几何参数和结构参数之间的关系图形的拓扑关系机械CAD8例几何参数结构参数参数间的关系拓扑关系机械CAD9参数化编程步骤1.分析图形的拓扑关系及其变化规律,结合图的工程意义提炼出图形结构参数2.建立图形结构参数与几何参数之间的关系,创建图形的参数化模型3.编写、调试图形程序机械CAD10控制参数的确定,应考虑:唯一性工程性优先考虑零件规格、性能的参数尽量减少参数的数量(文件或数据库存储标准件尺寸)机械CAD11机械CAD12轴径D键b键h轴t轮t18~10331.81.410~12442.51.812~175532.3……………75~85221495.4机械CAD13参数化图形库技术产品或工艺装备设计中,一般都要使用大量的标准件或成件,如螺钉、螺母、轴承等。它们都有国家标准、行业标准或企业自己的标准,供设计人员使用。这些标准件在图纸上经常重复出现。所以,好的绘图设计系统一般要求提供基本的标准件图形库,并提供用户比较方便的建立和调研企业标准件图形库的开发手段,这是提高交互绘图效率的重要途径。机械CAD14常用方法1)对于一些形状固定的图形,可以用图或符号的形式表示,对每一种具体规格的图形分别绘出,作为单独的子图或符号建立图库,单独调用。(相当于AutoCAD中的形和块)机械CAD152)对于标准件和通用件,可以利用参数化编程的方法,编制相应的标准件图形生成程序库。机械CAD163)利用参数化CAD系统交互式设计。机械CAD174.5.2AutoLISP语言概述垃圾回收国内的程序员大多是在Java语言中第一次感受到垃圾收集技术的巨大魅力的,许多人也因此把Java和垃圾收集看成了密不可分的整体。但事实上,垃圾收集技术早在Java语言问世前30多年就已经发展和成熟起来了,Java语言所做的不过是把这项神奇的技术带到了广大程序员身边而已。机械CAD18如果一定要为垃圾收集技术找一个孪生兄弟,那么,LISP语言才是当之无愧的人选。1960年前后诞生于MIT的LISP语言是第一种高度依赖于动态内存分配技术的语言:LISP中几乎所有数据都以“表”的形式出现,而“表”所占用的空间则是在堆中动态分配得到的。LISP语言先天就具有的动态内存管理特性要求,LISP语言的设计者必须解决堆中每一个内存块的自动释放问题(否则,LISP程序员就必然被程序中不计其数的free或delete语句淹没),这直接导致了垃圾收集技术的诞生和发展。机械CAD19知道了LISP语言与垃圾收集的密切关系,我们就不难理解,为什么垃圾收集技术的两位先驱者J.McCarthy和M.L.Minsky同时也是LISP语言发展史上的重要人物了。J.McCarthy是LISP之父,他在发明LISP语言的同时也第一次完整地描述了垃圾收集的算法和实现方式;M.L.Minsky则在发展LISP语言的过程中成为了今天好几种主流垃圾收集算法的奠基人。机械CAD20LISP是对现代软件开发技术贡献最大的语言。垃圾收集技术、数据结构技术、人工智能技术、并行处理技术、虚拟机技术、元数据技术以及程序员们耳熟能详的许多技术都起源于LISP语言。J.McCarthy于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如欧几里德对几何的贡献。他向我们展示了,在只给定几个简单的操作符和一个表示函数的记号的基础上,如何构造出一个完整的编程语言。McCarthy称这种语言为LISP,意为ListProcessing。机械CAD211.什么是AutoLISPAutoLISP=AutoCAD的绘图命令+CommonLISP的基本部分LISP(ListProcessingLanguage)是一种计算机表处理语言,它是美国麻省理工学院的研究人员提出并于1960年设计实现的。机械CAD222.AutoLISP语言特点(defunmycir()(setqr(getreal“输入圆半径:”)p(getpoint“输入圆心:”))(command“circle”pr)(setqp(*rrpi))(princ“\ntheareaofthecircleis:”)(princp)(princ))机械CAD231.表语言。AutoLISP程序一切构造的基本形式是表。表是由圆括号括起来的,用空格分隔的若干个元素形成的数据结构形式。是函数表的集合。2.描述性语言。适于处理变长类型数据,不用先说明后使用,变量本身没有类型,由赋予值来定。3.前缀表达式。第一项一般是函数名。4.扩展了图形处理功能,适于设计绘图一体化。机械CAD245.书写格式自由,不分大小写,元素之间由空格分隔,一个表可以写在多行上,也可以将多个表写在一行上,用分号作为注释符,括号需匹配。6.解释型求值语言,速度慢,难以保密。7.内嵌式不能脱离AutoCAD运行,只能在AutoCAD的command状态下先装入程序,再执行。调试麻烦。机械CAD253.数据类型AutoLISP主要有以下几种数据类型:整型数实型数字符串符号表机械CAD26*整型数由0~9、+、-字符组成。*实型数至少包含一位整数的带小数的数。用双精度浮点数表示。可以采用科学记数法。*字符串常数用一对双引号括起来的若干个字符。可以包含转义字符,如\n。*变量名和函数名统称为符号原子,简称符号。变量名由字母开头,除圆括号、引号、逗号、句号之外的可打印字符。不分大小写,变量类型不用预先定义或说明,由所赋的值决定。函数名函数名代表某种运算,包括内部函数名和用户自定义函数名。机械CAD28表表是指放在一对相匹配的左右括号中的一个或多个元素的有序集合。表中的每一个元素可以是任何类型的原子或表,元素与元素之间用空格隔开。表中的元素是有序的。每一个元素都有一个序号,从左向右,第一个元素序号为0,第二个元素序号为1,第i个元素序号为i-1。表的大小为表的长度,即表中顶层元素的个数。没有任何元素的表称为空表,用()或nil表示。nil既是原子又是表。机械CAD29表有两种基本类型:标准表和点对表。标准表是AutoLISP程序的基本结构型式,用于函数的调用,其中第一个元素必需是系统内部函数或用户自定义函数,其它的元素为该函数的参数。机械CAD304.求值(执行运算)过程1.对表中第一项元素求值应是函数名(*45)2.对表中各参数求值数,字符串,求值结果为本身符号原子则以当前约束值作为求值结果3.若标准表为多层嵌套,从最里层开始,最后返回顶层表的求值结果。(-(*32)1)机械CAD315.运行过程1.编辑任一文本编辑器,推荐VisualLISP2.装入和运行装入:(load“源文件名”)机械CAD32文件中没有自定义函数,全部是标准表。则返回最后一个标准表的求值结果。(+32)(*54)文件由用户自定义函数组成。则返回最后一个用户函数名,必须通过调用函数来执行。(defundtr(a)(*a(/pi180.0)))(load“mydt.lsp”)(dtr90)既有自定义函数,又有其它标准表。则自动执行自定义函数外的程序,并将自定义函数装入内存。机械CAD336.VisualLISP的使用VLISP是用来加速设计AutoLISP程序的软件工具。VLISP是一个集成的开发环境,它可以使AutoLISP程序中的源代码编辑、修改、程序测试与调试更加容易。机械CAD34不仅如此,VLISP还为AutoLISP增加了许多新函数,大大扩展了AutoLISP的能力。在对AutoCAD进行专业程序设计的应用范围内,已经比较接近ARX程序的能力,但程序的风险大大低于ARX,对编程者计算机专业知识的要求也大大低于ARX。机械CAD35VisualLISP的界面进入AutoCAD后,从Tools菜单的AutoLISP中的visualLISPeditor项,或在命令行输入VLISP或VLIDE即可以启动VisualLISP环境。机械CAD36装载和运行程序1.加载并运行程序片段:激活含有将要运行程序的文本窗口,选定要加载的源代码,按下工具条中的[加载选定代码]按钮,即可运行代码,并在控制台窗口显示最后一个表达式的结果。2.加载并运行整个程序:激活含有将要运行程序的文本窗口,按下工具条中的[加载活动编辑窗口]按钮,将在控制台窗口中显示一条信息,说明调入程序的结果。然后在控制提示符后键入函数名(可能需要括号)并回车执行。机械CAD37在VLISP将控制切换到AUTOCAD之前,如果AUTOCAD窗口已经被打开,将正常切换到AUTOCAD窗口。但如果AUTOCAD当前是最小化状态,将不会自动切换到AUTOCAD窗口,而是在VLISP中显示一个特殊的鼠标指针,此时必须手动切换。机械CAD38调试程序VLISP提供了许多有用的功能帮助调试程序。包括跟踪程序的执行;在程序执行中跟踪变量值;观察各个表达式的执行顺序检查在函数调用中的变量值中断程序的执行单步执行程序检查堆栈机械CAD394.5.3AutoLISP基本函数重点掌握:1.函数的功能和作用2.调用格式、函数名、参数个数及类型3.求值情况4.返回值类型机械CAD401.数值函数若参数多于两个,则从前到后依次运算,并自动转换数据类型。算术运算+-1+1-*/(+12)(+123)(+1(+23))(-1012)(-101.02)(-1)返回-1(1+5)(1-6)(*123)(/932)(/9.032)注意整数除法,整数值的范围机械CAD412.三角函数sincos角度用弧度表示,若是度,则要转化为弧度(sin(*(/PI180.0)45))sin45两个参数:返回数1除以数2的反正切值机械CAD423.类型转换fix截尾取整(fix2.3)2float转换为实型数机械CAD434.赋值与求值setq参数要求成对,奇数位上的参数必须是符号原子。奇数位不求值,偶数位求值。返回最后一个表达式的值。从左至右赋值。setq只是加一个内存地址指针,指向数据的内存结构。(setqx10)(setqy(+12))quote禁止求值简写为‘给表赋值:(setqa‘(124))机械CAD445.表处理(1)取表的内容(car表)顶层第一个元素(cdr表)除第一个元素外的表,点对表则返回第二个元素(car‘(xy))x(cdr‘(xy))(y)(car‘((ab)cd)(ab)(setqlista‘(xyz))(carlista)x(cadrlista)y(caddrlista)z(caddrL)----(car(cdr(cdrL)))?‘(abcde)求d机械CAD45(last表)顶层最后一个元素(last‘(ab(de)))(de)(nthn表)顶层第n个元素(从0开始)(nth3‘(abcd))d机械CAD46(2)构造表(cons表达式1表2)表达式2是引用表则将表达