1、第 1 页第一章 绪 论第一节 土木工程CAD 的历史与发展CAD技术是把计算机的快速、准确、直观与设计者的逻辑思维能力、综合分析能力及设计经验结合起来融为一体的高科技产物,可以起到加快工程或产品设计过程、缩短设计周期,提高设计质量和效率、降低工程造价等作用。在我国,CAD技术已经广泛地应用于建筑、机械、电子、航空及轻工业等各个行业,获得了良好的社会效益和经济效益。一、计算机与计算机绘图的发展1946年世界上研制出了第一台电子计算机ENIAC,它的主要任务是用来进行高速度的数值计算。其后,随着基本元件的不断换代,其性能也以惊人的速度发展。到了50年代,计算的应用范围便扩展到了诸如辅助事务处理、
2、数学定理证明、语言翻译等领域。计算机绘图技术的发展是与计算机及其外围设备的发展密切相关的。早期的图形显示器是基于阴极射线管的示波器。如MIT于1950年研制的旋风1号计算机,就配置了这种用示波器改造的图形显示器,而笔式绘图仪是在xy函数记录仪的基础上发展而成的,较早的有美国CALCOMP公司1958年研制的滚筒式绘图仪和GERBER公司研制的平板式绘图仪。在硬件设备的基础上,计算绘图的软件技术也得到长足的发展。1962年,Ivan I Sutherland首次提出了交互式计算机绘图的概念,并发表了博士论文Sketchpad:一个人机通信的图形系统。1963年,在美国的计算机联合大会(NCC)上
3、,MIT 的小组推出了CAD的项目并发表了5篇论文,给工程技术界以很大震动。1963年,DougEnSelb8n在斯坦福研究所制造出了第一个木制鼠标器,他的思想极大地影响了以的交互式绘图技术的发展。70年代初,Xerox公司发明了第一个数字化鼠标器,并在1975年宣布了鼠标器的规范。1983年,Microson公司生产出了鼠标器的背后一代产品 总线型鼠标器,它连接在一块装有Intel 8255芯片的插件板上。1984年,Microson设计出了串行口鼠标器,它不需要独立的电源,CMOS处理器可以从RS。232 口中获得足够的动力。在随后的 3年中,Microson 公司陆续推出了他的第二代、第
4、三代鼠标器,分辨率大大提高,可以连接在串行口上或PS机器的接口上。今天的鼠标器不但有机械式的,还有光电式的,它的重要性已不亚于键盘。20世纪70年代中期出现的光栅扫描图形显示器,能以更高的频率对屏幕图形刷新,分辨率不断得以提高,使得计算机交互式绘图技术得以更快的发展。同时,高速高精度的绘图仪也相继问世,平板式、滚筒式、笔式、喷墨式、单色和彩色绘图仪相继出现,性能不断提高,价格不断下降。二、CAD在土木工程领域的应用和发展计算机的出现到现在不过50多年的历史,但随着计算机硬件和软件技术的飞速发展,它本身及它所影响的CAD领域产生了迅猛的变化。这体现从20世纪60年代简单的人机交互式绘图技术发展到
5、了如今大规模集成化CAD系统。计算机图形技术和CAD对土木工程领域传统的人工计算手工绘图的设计方式产生了深刻的变革和影响。由于电子计算技术的不断发展,其对单凭铅笔、图板、计算器等工具做结构设计的传统手段,正在进行着重大的改革。尤其是高速、高精度绘图仪的出现,以及相应系统软件的发展,计算己不再只是一种单纯的高效率计算工具,而是越来越成为人们进行创造性活动的得力助手。因此,自20世纪60年代以来,逐渐形成了一门新兴学科计算机辅助设计。CAD技术首先应用于汽车工业,通用汽车公司首先将其用于设计汽车外形及车身结构。随后,逐渐扩展到其他国家和其他部门。20世纪70年代,CAD技术在生产实际中的应用有了飞
6、速的发展。到了20世纪70年代,计算机在我国结构计算中的应用已有了一定规模。但由于计算机的数量有限,加上价格昂贵、操作繁琐、不易维护等多种原因,计算机应用基本上还是处于少数专门人员用以解决手算不能解决的大题、难题的状况。对一般工程师来说,尽管他们学习过算法语言,也曾经将电算应用于结构设计,但计算机对他们来说依然是神秘和陌生的;每天所完成的设计任务仍然是依赖于图表、手册和计算器等。而在计算机绘图方面,当时国内还是一片穿白。我国CAD的应用基本上始于20世纪80年代。在开始阶段,主要依靠外国引进的通用或专用第 2 页图形软件包在屏幕上作交互式图形设计,与结构计算和构件设计没有结合,参与者主要是长期
7、与计算机打交道的专门人员。可以说,一直到20世纪80年代末,土木工程CAD才有了真正的发展和较广泛的应用,而这一时期各单位大量购进国产和进口的廉价性能微机,又在很大程度上促进了CAD软件的开发和应用第二节 CAD的基本概念一、CAD的基本概念CAD(Computer Aided Design)是计算机辅助设计的简称。计算机辅助设计( CAD),就是利用计算机系统来辅助完成工程设计领域中的各项工作。由于计算机应用领域的不断扩展,今天人们常就的CAD已不再局限于辅助设计工程的个别阶段和部分,而是将计算机技术有机地应用到设计的每个阶段和所有环节,尽可能地应用计算机去完成那些重复性高、劳动量大以及某些
8、单纯靠人难以完成的工作,使工程师有更多的时间和精力去从事更高一层的创造性劳动。 CAD目前应用的领域非常广泛,其中主要有航天航空工业、汽车工业、机械设计建筑设计、工程结构设计、集成电路设计等等。一般认为CAD所应具备的主要功能有:1、几何造型和图形处理;2、工程计算和对设计对象的模拟、检验以及优化等;3、计算机绘图与文档编辑;4、工程信息的合理输出与存储;5、人工智能。交互式图形编辑和自动绘图是CAD的主要特点,也是现今大多数CAD系统的主要功能。工程设计中通常都要处理大量的图形信息,而且绘图工作量也很大。利用计算机的图形显示功能以及彩色、浓淡、阴影、动画等特殊技巧常可收到手工难以达到的效果。
9、例如辅助建筑设计,飞机、汽车等复杂模型设计等。利用计算机绘图,不但可以减轻劳动强度和加快出图速度,而且还能提高图面质量和减少工程图纸的常见差错。二、CAD与计算机绘图的内涵有人以为CAD就是计算机绘图,其实计算机绘图只是CAD的一个组成部分。但计算机绘图是CAD 的重要组成部分,它包括图形信息的输入、输出,图形的生成、变换,图形之间的运算,人机交互式作图等方面。计算机绘图技术除了在CAD领域应用最为活跃和广泛外,还在其他领域得到了广泛应用。这是因为现代的“绘图”一词其含义已不再是传统意义上的“在纸上画图”,已扩展为在显示屏上显示图形、在打印机上打印图形、人机交互式绘图或用程序自动生成图形文件等
10、等。除了在二维空间绘图外,甚至还在三维空间“绘图”,例如控制刀具按既定程序切削出三维型体。其典型的应用领域有:1、自动化办公系统中的图形图表制作。2、管理工作中的图形,如工作规划图、生产进度图、统计图(扇形图、直方图)、分布图等等。直观明了的图形能使管理人员或决策人员对所涉及的事物一目了然。3、勘测图形,如气象卫星云图、矿物分布图、人口密度分布图、航测地形图、水文资料图、环境污染监测图等等。 4、数值信息图形可视化。如应力场分布、应变分布等,常用“彩云图”通过颜色的深浅反映场中不同位置处量值的大小,将数值可视化。5、商业广告及影响动画制作,甚至包括数字摄影中画面配景、编辑等后期制作的应用。6、
11、过程控制中的图像辅助功能以及三维型体的全自动加工切削。7、计算机辅助教学和仿真模拟。例如,我们可以在屏幕上模拟一根钢筋混凝土梁从加载到开裂直至破坏的全过程,而无需学生亲临试验室去做试验。学生可以在计算机上自由设置梁的尺寸、配筋的多少和加荷的大小。8、计算机辅助设计中的图形生成和图形输出。主要可分为交互式绘图和非交互式绘图。前者通过人机对话,输入绘图的基本信息生成图形,例如工程师通过人机交互输入建筑平面图,然后由计算程序自动生成剖面图和立面图;后者主要是对于那些量大面广、又具有规律性和重复性的图形,程序根据少量的控制参数,自动生成图形。例如钢筋混凝土连续梁的结构施工图,就可以仅根据少量原始信息,
12、由程序进行力学计算、自动配筋构造设计直至自动生成全部施工第 3 页图。可见,计算机绘图不仅是CAD的重要组成部分,也是其他应用领域的重要组成部分。土木工程CAD的内容很多,同时,又与许多环节紧密配合。在计算机应用高速发展的今天,每个环节、每个阶段的部分或全部可借助计算来完成。例如工程结构CAD,它主要内容包括结构计算、构件设计和绘制结构施工图三部分:1、结构计算。结构计算要求计算机完成的工作是:对结构计算简图进行静力、动力、线性、非线性等力学分析;按规范要求进行内力和荷载组合,找出截面最不利内力值;截面和构件的强度设计,即计算截面所需钢筋面积;依据规范对各分析阶段作可行性判断及优化处理等。随着
13、CAD 软件技术的发展和硬件设备的提高,结构计算的前后处理程序的开发和应用也有较大的进展。2、构造设计。构造设计是整个CAD系统技术难度较大的一部分,主要任务是根据结构计算的结构,完成构件和截面的选配筋等构件设计。如框架结构中的梁、柱选取配筋和楼板钢筋布置等。构件选配筋设计不但要使各截面满足内力包络图的强度要求,而且整个构件中的主筋、箍筋和其它构造筋都必须符合有关的规范规定和设计习惯。3、绘制施工图。结构施工图的绘制可以分为成图(几何图形构成)和绘图(图形输出)两部分。尽管CAD的成图过程有多种形式,但通常都需经过将几何图形转换成点的坐标和图形符号的步骤。绘图则是将成图后的信息经绘图机(或其他
14、图形输出设备)处理后,以线条和符号的形式表示在图纸上,构成一张完整的施工图。考虑篇幅以及大家前期所学内容,本书仅讨论计算机绘图的相关内容。三、土木工程CAD涉及的知识领域土木工程CAD的开发和研究是一个多学科综合应用领域,涉及数学、力学、计算机图形学、软件工程以及各专业设计理论(如桥梁结构工程、线路工程、地下工程、岩土工程、房屋工程、给排水工程、暖通工程等等),还与工程经济、工程管理、工程决策等知识有关。对于集成CAD系统和智能CAD系统,还涉及数据库理论和人工智能理论,以及专家系统、人工神经网络等技术。因此,土木工程CAD 软件的开发是一件技术难度大、工程浩繁的工作,需要科技人员付出极大的劳
15、动和代价。特别是开发土木工程CAD系列软件,牵涉的面更大,需要大量的人力、财力和物力。第三节 CAD在土木工程中的应用CAD在土木工程中的应用非常广泛,主要有以下几个方面:一、建筑与规划设计国内的建筑与规划设计CAD软件大多是以AutoCAD 为图形支撑平台作二次开发的系统。这些软件一般能进行建筑和桥梁的造型设计,从二维的平、立、剖面到三维的透视图甚至渲染效果图都能生成。目前国内流行的建筑设计软件主要有天正TARCH、House、德克赛诺ARCH-T 、中国建筑研究院的APM 、 ABD、匈牙利 GRAHPISOFT公司的ARCHICAD等二、结构设计在结构设计方面,一些基于微机的较成熟的CA
16、D软件,目前正在各设计单位发挥着积极的作用。这些软件的特点是:以微机为主要开发机型;符合我国现行规范要求和设计习惯;能与人们所熟悉的计算机程序有机结合;自动化程度高,操作简便;有一定的人机交互功能,可适应不同层次的人员使用。就其功能来说,它们基本上能完成从结构计算到绘制结构施工图的全部或大部分工作,从而使传统的结构设计方式发生了根本的变化。另一方面,由于计算能力和图形功能的加强等原因,过去人们所熟悉的结构计算方法,即有限单元法分析程序部分,在CAD系统中也大为改观。在系统中由于具备功能齐全而又灵活方便的前期处理功能,大大提高了使用者的工作效率,减少了出错机会和查错时间。更为重要的是,灵活多样的
17、菜单、图形等交互式工作方式使现代CAD系统的操作既简单又方便,使其真正成为每个工程师自己的有力工具。在土木工程结构CAD系统设计中,一般采用两种方法来处理结构分析问题。一种方法是为工程结构开发专用的分析系统,这类分析系统能有效地处理指定的工程结构,具有分析速度快、第 4 页数据量少、能很好地与CAD系统中其它模块集成等优点。另一类方法是采用当今世界上著名的结构分析软件包,如ANSYS、ADINA、SAP等等,由这类系统来对指定结构进行分析,开发CAD系统与分析系统之间的专门接口以及进行前期处理等等。有限元方法等更深的知识,请参阅有关专著。目前国内流行的结构CAD软件主要有:中国建筑研究院的PK
18、、PM、 TBSA、TAT、SATWE 、TBSA-F、LT 、PLATE、BOX、EF、JCCAD、ZJ等等;湖南大学的HBCAD、FBCAD 、BSAD、BENTCAD 、FDCAD、NDCAD、SBSIA;BRCAD、BGCAD、SLABCAD等:交通部公路科学研究所的桥梁设计软件QXCAD、GQJS、SBCC、STR 等:西南交通大学的桥梁设计软件BSAS:清华大学的TUS,北京市建筑设计院的BICAD;德克赛诺的AUTO-FLOOR、AUTO-LINK。三、给排水设计目前国内流行的给排水设计软件主要有:WPM、PLUMBING、GPS等等。四、暖通设计目前国内流行的暖通设计软件主要有
19、:HPM、 CPM、 HAVC、THAVC、SPRING、AEDOT 、COMBINE 等等。五、建筑电气设计目前国内流行的建筑电气设计软件主要有:TELEC、ELECTRIC 、EPM、EES、INTER-DQ等等。总之,CAD是一门应用非常广泛的技术,在土木工程的各个领域都占有很重要的地位,因此,它是门很重要的技术基础课,同学们应认真地学习,努力掌握CAD的基本原理和应用技巧,为今后的工作和学习打下扎实的基础。第四节 CAD系统的学习使用方法一、领会CAD系统的总体结构及操作流程在学习使用一个CAD软件之前,认真地领会该CAD 系统的总体结构及操作流程是非常必要的,它对于快速顺利地使用软件
20、有很大的帮助。因此应该首先仔细阅读使用说明书,着重弄清它的结构流程和来龙去脉。CAD系统的形式主要以系统是否具有人机交互功能而分成交互式和非交互式两大类。交互式系统是指它的全部或大部分作业过程要在人的直接参与下,以人机对话的交互作业方式进行工作。所以这种系统仍然是以人为中心的。这种系统适应于目标难以用目标函数和其他数学过程来定量描述的设计问题。例如建筑设计、产品造型设计等。非交互式系统是指不以人机对话方式为主的系统。它的作业勿需人的直接参与或只要很少的人工参与,机器便能根据已编制好的程序自动完成各个设计步骤。这种以机器为中心的设计系统常称为自动设计(Automated Design)系统,简称
21、AD。它适应于设计目标能用明确的目标函数来定量描述的问题。应该指出的是,随着CAD软件的不断更新和提高,加上计算机内部处理能力和图形交互能力的增强,使得过去某些必须通过许多人机对话操作步骤才能完成的工作现在已可交由计算机去自动完成。近年来,国内外些有影响的CAD软件系统都已将交互式和非交互式两者有机地结合起来,使各自的优点都得以充分发挥,从而进一步方便了用户的使用和提高了软件的适应能力。而且这已成为CAD软件开发的一种新趋势。二、结合相关专业设计规范和理论进行学习CAD是一个与工程实际结合十分紧密的科技领域,与各专业设计理论和设计规范密切相关。因此,应结合本专业教科书和规范进行学习。第 5 页
22、希望同学们能根据本专业进行编程,通过同学们亲自动手编制一些小型程序,了解CAD软件的内部结构,掌握一些CAD 软件开发的基本概念和方法。对CAD软件开发有兴趣的同学还可以在课余学习一些更深的程序设计理论和编程技术。程序设计要使用专门的程序语言,土木工程CAD程序设计主要采用C、C+ 、Quick-BASIC 和FORTRAN语言。要编制一个好的程序系统并没有一种绝对的规则,就像工程设计也没有一种绝对的规则一样。但对于程序设计的好坏现在已逐渐形成了一套评价的客观标准,这些标准大致分为以下几个主要方面:1、易于调试与维护;2、正确性与可靠性;3、使用方便且效率高;4、软件的可移植性;5、程序的可读
23、性。像开发任何其它专业软件一样,要开发一个优秀的土木工程CAD软件,除采用科学的软件工程方法外,还需要有科学工作者的优良组合和他们长期不懈的努力。程序设计强调程序结构化和整体功能的优化。关于程序的设计编写与调试的一套方法论,其要点可归纳为以下几方面,1、编程结构化。结构化程序由三种结构单元(或称为块)所构成,它们是顺序结构、分支选择结构和循环结构。编程结构化又称为程序设计,它可使编写的程序层次分明,逻辑清楚,容易阅读。2、分层处理技术。为了解决现实世界中的许多复杂问题,人们往往需要根据问题的内在联系将其分割成有层次的一系列问题来分别求解。对于一个大型程序系统设计来说也需采用分层的办法来处理,在
24、每一层里集中解决一个问题,并为下一层的执行作好准备。分层处理技术的主要内容是将程序划分为多个层次的若干模块。3、为了保证模块的独立性,各模块之间只能通过接口与其他模块。另外,对于一个较大的软件系统要由多人合作才能完成,模块化也为此提供了较好的合作条件。4、避免过多使用goto语句,特别是逆转的 goto语句。这是结构化程序设计的标志之一。应当指出,程序设计方法论仍在发展控索之中,千万不能把上述有关内容当作绝对正确的教条套用,而应当通过实践来发展和丰富其内容。然而程序设计发展今天,已经打下了很多必要的理论基础。我们正在达到一个可以谈论程序设计是一门科学而不仅仅是一种技巧的阶段。同学们可以通过学习
25、CAD程序设计,综合运用所学的基础知识和专业知识,使自己对这门科学掌握达到更高的层次。第 6 页第二章 AutoLISP 简介人们通常认为 AutoCAD 是一个作图程序:用户使用 AutoCAD 在屏幕上画线,然后再通过绘图仪把这些线转绘到绘图纸上。从这种观点出发,AutoCAD 就是一种提高生产率并避免无谓重复的工具。然而,AutoCAD 实际是一种强有力的工作环境,用于处理图中使用的图形和非图形的符号和对象。在 AutoCAD 中,画图和编辑是处理这类图形符号的最常用手段。使用 AutoCAD 处理已画出的对象的方法还有很多:可以建立自己的菜单,也可以设置 AutoCAD 的众多系统变量
26、。但是调整 AutoCAD 这种环境的最有力机制,还是 AutoCAD 的内部程序设计语言 AutoLISP。第一节 AutoLISP 的基本概念AutoLISP 是一种易于使用的语言。当然,对这种真正的程序语言来说,我们还必须通过实践才能够有效地使用它。学习 AutoLISP 程序设计的方法很多,可以通过教材学习,也可以通过研读别人的程序学习。读者可以选择最适于自己的方法。本书对这两种方法都进行了尝试,既给出一部分教学材料,又给出大量的程序清单。本书有一些程序适用于教学,有一些程序则可以直复制、直接使用。总之,当程序足够简单的时候,所用的名字可按意义全部拼出并加以注释,以便于读者理解。对于长
27、且复杂的程序,我们一般使用简短的函数名和符号名。这是一种优化,可使函数执行得更快。具体原因,可参阅第四章的内容。1、适应 AutoLISP掌握计算机语言并不象人们想象的那样困难。例如,计算机语言 Logo 就是 60 年代发展起来的简易语言,供小学生学习计算机程序设计。Logo 是一种基于 LISP 的符号处理语言,其中包括了使 LISP 独树一帜的全部概念特征,但没有象 LISP 那样大量使用括号。了解少年儿童轻松使用 Logo 的情况后,我们对学习 LISP 语言就不会感到紧张了。学习Logo 的儿童,头脑中没有任何预先建立的概念,十分喜爱用 Logo 编制程序。具有一定编程经验的成年人,
28、考虑问题时常从函数、数学公式等出发,不是从符号处理的角度去思考。发生这种情况的时候,我们将确实感到难以进入 LISP 的符号处理领域。但是不必灰心,只要认真实践,使用 LISP 的时候,我们也会象儿童使用 Logo 那样轻松自如。使用 AutoLISP 时,我们必须先暂时遗忘自己已经了解的程序设计知识。读者可能已经利用从 BASIC、Pascal 或 C 语言中学到的技术编写过一些程序,但是随着逐步适应 LISP,会认为符号处理反而更简单一些。使用 C 这类语言的时候,必须先“说明”各种变量、常量、函数等等,然后才能使用它们。所有内容在使用前都必须是确定的。在这方面,LISP 语言大不相同,所
29、有内容都不必在使用前预先说明就可以直接命名符号并使用。LISP 使用的大量括号,确实容易使人混淆不清。在 LISP 中,括号指出一个表(1ist )的开始和结束。实际上,LISP 这个名字本身也隐含着该语言的基本用途。LISP 是英文 LISt Processing 的缩写,意思是表处理。为了将表互相分隔开,必须使用某种机构,而括号就特别适合这种用途。在 LISP 中,区分表达式的分隔符只有括号和空白符号。空白符号可以是空格、回车、换行和制表符的任意组合。其它语言中的分隔符同样可能产生混淆。以 C 语言为例,我们必须考虑分号、大括号、中括号等等,同时还要考虑空白和括号。这些符号都有其特殊意义,
30、使我们得以紧凑表达自己编制的程序。C 语言不是 LISP 这类高级语言,它主要用于编制独立于机器、便于理解、便于调试的高效程序,而不是去处理表结构。例如,我们可以用 C 语言编写 LISP 的求值程序,但绝不会用 LISP 编制 C 语言的编译程序。初学者的问题是理解众多括号的意义(我们将给出解决问题的一些技巧) 。但随着实际经验的逐步取得,这个问题将变得越来越简单。使用 LISP 的时候,我们毕竟只需要考虑括号这一种分隔符。 与 C 或 Pascal 相比,AutoLISP 的速度不快,大量使用函数时尤其如此。人们用专门测试计算机语言的浮点数学运算的基准测试程序测试了 AutoLISP 语言
31、,它的速度很慢,结果今人失望。但是当 AutoLISP 作为-符号处理语言时,结果却大不相同。用一段子程序在由 1000 个符号组成第 7 页的表中搜索特定符号时,AutoLISP 在一秒钟内就完成了任务。低水平的编程技术是程序运行速度慢的另一个原因。虽然正确使用时,新的扩充 AutoLISP本身就能加速 AutoLISP 程序的运行,但是仔细编制的高效代码运行得更快。第三章有一些编制高效 AutoLISP 程序十分有益的建议,读者可以参考。AutoLISP 是编写 CAD 系统的理想语言。CAD 系统是用计算机处理图形符号(此处符号是指 LISP 意义上的符号,不要与字符、记号等混淆)的环境
32、,而 AutoLISP 恰恰是符号处理语言。由于用途一致,AutoCAD 和 AutoLISP 自然是和谐的一对。LISP 通常是求值而不是解释或编译执行的。解释语言逐行读入源程序文本、逐行变换为机器指令代码并逐行执行,因此速度很慢。编译语言在编译时,一次将全部源程序变换为机器码,生成一个全新的高效程序,其中一切内容都是大大缩短的机器语言形式,因此编译后的程序运行速度很快。求值语言介于二者之间。求值程序第一次遇到一个代码块时,会将它变换为紧凑代码。在同一程序的运行中再次遇到这个代码块时,求值程序立即运行相应的紧凑代码。这一过程比解释快但比编译慢。虽然我们可以得到几个市售的 LISP 编译程序,
33、但对 AutoLISP 程序进行编译时可能会限制该语言某些固有的灵活性。我们看以下事实就可以了解以上说法的原因。AutoLISP 不区分数据和程序,因此我们可编写一段 AutoLISP 程序。这段程序在某些情况下可以不断修改其自身,从而每次运行时,程序的行为都可能不同。利用这种技巧,我们可以编制学习程序、自适应程序等等。从程序的编译执行过程可以知道,编译确实限制了 LISP 固有的灵活性。AutoCAD 的严肃用户,都能够从学习 AutoLISP 中获益匪浅。如果某个人用三天时间编写了一个 AutoLISP 程序,该程序每天可为他节约半小时用 AutoCAD 制图的时间,显然他的付出只用一个多
34、月就“赚回来”了。另外,我们还能根据自己的工作习惯修改应用软件包,从而不必严格按别人设立的方式工作。学习 AutoLISP 将要做出艰苦的努力,但由此却提高了工作效率,确实值得一试。第二节 AutoLISP 的基本原理AutoLISP 是 CommonLISP 的一个子集。CommonLISP 是 John McCarthy 在 50 年代为人工智能研究开发的一种程序设计语言,是至今仍在使用的最早期计算机语言中的一种。LISP 是十分灵活、特别容易扩充的语言。随着时光的流逝,许多新特性进入了 LISP,使它适应于多种不同的应用领域。AutoLISP 新增加了一些专门处理 AutoCAD 图形的
35、特殊函数。由于 AutoLISP 是一个成熟语言的真正子集并继续支持原始语言的概念和结构,所以它本身就是一种真正的程序设计语言,并不仅仅是一种宏程序设计语言。LISP(LISt Processing,表处理语言)与大多数程序设计语言的不同之处在于:LISP 处理的对象是符号而不是数,LISP 是面向对象的语言而不是面向过程的语言;LISP 是求值的语言而不是解释或编译的语言。这三个特征使人们选择了 LISP 作为 CAD 环境中的编程语言。一、AutoLISP 怎样工作LISP 语言处理符号(symbol)构成的表,不是处理数值数据。其它多数语言则主要处理数值数据。FORTRAN 和 BASI
36、C 之类的语言都是面向数学运算(或称数值运算)的,主要用于处理数。在这类语言中,一个“字”本身没有意义它只是字符组成的串,而字符本身又是数。1、符号简单地说,符号代表了意义。在自然语言中,字就是一种在人们中间传达某种意义的符号。以汉语的“江”为例,它代表了字典中的相应定义,而其定义又由代表其定义的字(符号)构成的表组成。在新华字典中查找“江” ,我们发现“大河的通称” 。如果我们不懂“河”的意义,还需要查找“河”的定义“水道的通称” 。如果还不懂“道”的意义,我们还可以连续查找,直至完全理解“江”的意义为止。 用 LISP 语言表示,对“江”这个字(符号)可定义如下:(setq 江 ( 大河的
37、通称) )或写成:(setq jiang, (大河的通称) )第 8 页字 setq 是一个 LISP 函数,它使计算机把符号 jiang 的意义设为下一个元素的意义(定义) 。现在我们键入! jiang ,LISP 将打出:(大河的通称)虽然以上只是把值赋予符号的简单例子,但确实说明了 LISP 中最基本的操作。每种语言都有实现赋值的独特方法把信息从一个“容器”转移到另一个“容器”中。在 AutoLISP 中使用setq,在 BASIC 和 C 语言中用等号(=) ,在 Pascal 中用冒号和等号(:=) 。使用 AutoLISP 的时候,了解怎样赋值后,就可以把信息从一个表转移到另一个表
38、。2、作为对象的符号除了字以外,可以持有一定意义的东西基本上都可以作为符号符号只是指向其它东西的东西而已。例如,从代表一把椅子的意义上说,一幅椅子的图和“椅子”这两个字都是符号。可视形象与打印出来的字虽然并非同种媒体,但作用是完全一样的。这种作用就是在人们中间传播有价值的信息。只有人们在生活中了解“椅子”这两个字代表一种可以坐在上面休息的客体(对象)之后,这种客体(椅子)的属性才与“椅子”这两个字发生联系。同样,一幅椅子的图形也只是一种视觉抽象(只是一个符号) ,我们不能象使用真正的椅子那样使用这种图形(比如不能坐在上面办公,也不能坐在上面在办公桌上写字) 。3、AutoCAD 怎样使用符号在
39、西方语言中,字母表中本身毫无意义的字母被组成可识别的单词(已具有意义) ,单词又被组成可以辨识的句子(意义更多) ,句子又被组成段落(很有意义) 。与此相似,AutoCAD 中直线、弧、圆、点、多边形和其它实体是制图者的字母表。我们从中选取内容并将所选内容安排成可识别的模式,再将这些模式组合起来构成图形符号(如代表椅子的符号) 。构成椅子的制图符号之后,就可以将这一幅图(由线和弧组成)作为一个图块保存起来,并命名为椅子(chair) 。在以后作图时;每当需要椅子符号时,我们都可以插入符号 chair。4、符号的多义性把自己定义的椅子符号给别人看的时候,可能会出现一些新的问题。别人可能认为这是一
40、把椅子,也可能认为这只不过是一堆拼凑起来的线段和圆弧,无法理解其含义,这便是多义性。图形符号和文字符号一样,依上下文不同,也会产生多义性。排除椅子符号多义性的途径有两个。其一,详细画出椅子符号,直到不会产生任何误解时为止;其二,用文字描述向椅子符号增加属性信息,如将一把椅子的图形和文字描述结合起来,形成多义性很小的、代表一把椅子的对象。从某种意义上讲,这个对象只不过是加入自身定义的符号。定义椅子的属性可以很简单,也可能很复杂。例如可以是“椅子” 、或者是“售价 500 元的蓝色扶手转椅” 等等。我们可以将这一对象看作 AutoCAD 环境中对一把椅子的仿真。这时的椅子对象 chair 仍然只能
41、代表一把椅子,但包含的实质性内容已经比仅用线段画出的椅子图形多得多了。5、在作图中使用属性我们以具体实例说明怎样在 AutoCAD 中处理对象。假设有一张住房的平面图,要求为它安排家具。按传统的方法,我们先画出一幅令人满意的家具布置草图,清点并列出家具的清单,然后再计算造价。这种作法可能既费时又不准,另一种方法,是通过建立“家具对象”的途径,用 AutoCAD 产生高效而准确的结果。其中每个家具对象(AutoCAD 称之为图块)可以包括这件家具的详细属性信息。属性信息可以包括式样、分类号以及价格等等。我们只需要在平面图上布置并移动这些家具对象,直到满意为止。我们得到的不是别人看作一处住房的家具
42、布置图中的一大堆线段,而是包括一系列描述各种家具的对象的房间。我们可以使用简单的 AutoCAD 程序(AutoLISP 程序)向其中任意房间查询,如询问“你的房间里都有什么东西?”被询问房间将回答“我这里有 16 把椅子和 5 张桌子,总价值 4000 元。 ”二、面向对象的程序设计同人们认识世界的一般规律一样,面向对象方法学认为:客观世界是由许多各种各样的对象所组成的,每种对象都有各自的内部状态和运动规律,不同对象间的相互作用和联系就构成第 9 页了各种不同的系统,构成了我们所面对的五彩缤纷的世界。面向对象方法学追求的目标是使解决问题的方法空间同客观世界的问题空间结构达到一致,已经成为当代
43、软件开发的主流方法。1、面向对象技术的历史、现状和发展一般认为,面向对象方法起源于 60 年代末出现的 Simula 语言。在这个语言中引入了数据抽象和类的概念,但真正为面向对象程序设计奠定基础的是 Smalltalk 语言, “面向对象”这个词也是 Smalltalk 首先采用的。在 Smalltalk 中一切都是对象, Smalltalk 的目标是使得软件尽可能以“自治”的单元来设计。Smalltalk 不仅仅是一门语言,更是一个完整的程序设计环境,其中包括四个部分:程序设计语言的核心,包括语言的语法和语义;程序设计风格,使用核心生成软件系统的方法,这是和面向对象程序设计结合最密切的部分;
44、程序设计系统,是对象和类的集合,为编程提供方便;用户界面模型,提供对象和类结合的样式。Smalltalk 被认为是第一个真正的面向对象程序设计语言,直到今天仍被认为是最纯的面向对象语言之一。Smalltalk80 的发布引起了人们广泛的关注,导致了在 80 年代早期到中期其它面向对象语言的蓬勃发展,有的是对传统语言的扩充,有的是新开发的面向对象语言,其中最有代表性的包括 Objective-C( 1986 年) ,C+(1986 年) ,Self(1987 年) ,Eiffel(1987 年) ,CLOS(1986 年) ,以及 Object oriented Pascal 等等。面向对象的应
45、用也被广泛地扩大了。 1986年,Grady Booch 首先提出了 “面向对象设计”的概念,从那以后,越来越多的人投入到面向对象的研究领域。一方面,面向对象方法向软件开发的前期阶段发展,包括面向对象分析、面向对象设计;另一方面,面向对象技术在越来越广泛的软硬件领域得以发展,如面向对象数据库、面向对象操作系统、面向对象软件开发环境、面向对象的智能程序设计、面向对象的计算机体系结构等等。在上世纪 90 年代,面向对象技术在更深、更广、更高的方向上取得了很大进展:更深的方向,如面向对象技术的理论基础和形式化描述、用面向对象的概念设计操作系统等;更广的方向,如面向对象的知识表示、面向对象的仿真系统、
46、面向对象的多媒体系统等;更高的方向,如从思维科学的高度来丰富面向对象方法学的本质属性,突破面向对象技术的一些局限,研究统一的面向对象范型(Paradigm) 。2、一些基本概念在继续深人讨论面向对象方法之前,让我们首先了解一些基本概念。(1)对象对象一词,应用广泛,场合不同,含义各异。一般来说,客观世界中任何有确定边界、可触摸、可感知的事物,包括概念(如速度、时间等)均可看作对象。任何事物,均有其各自的属性和行为。当考察其某些属性和行为并进行研究时,它才成为对我们有意义的对象。因此,在系统分析和系统构造中,对象是对客观世界事物的一种抽象,是由数据(属性)及其上操作(行为)组成的封装体。对象具有
47、如下主要特点:自治性 对象的自治性是指对象具有一定的独立计算能力。即对于给定的输入,经过状态转换,对象能产生输出。其中,对象自身的状态变化是不直接受外界干预的,外界只有通过发送消息对它产生影响,从这个意义上说,对象具有自治性。封闭性 对象的封闭性是指对象具有信息隐蔽的能力。具体地说,外界不能直接改变对象的状态,只能通过向该对象发送消息来对它施加作用。对象隐蔽了其中的数据及操作的实现方法,对外可见的只是该对象所提供的接口一操作。通信性 对象的通信性是指对象具有与其它对象通信的能力,即对象能够接收其它对象发来的消息,也能向其它对象发送消息。通信性反映了不同对象间的联系,通过这种联系,若干对象可协同
48、完成某项任务。上述特点分别刻画了对象的不同方向性质。自治性反映了对象独立计算的能力,封闭性和通信性说明对象是一个既封闭又开放的相对独立体。第 10 页(2)类具有相同属性和服务的对象的集合。类作为模板,为属于该类的所有对象提供了相同的结构、相同的操作(集) 、对其它对象具有相同的关系和相同的语义。对象是类的实例。(3)属性每一对象的属性是一些有着确定值的、用于描述对象状态信息的数据。(4)服务为了完成某一任务,一个对象所提供的、并体现其责任的操作。属于同一类的所有对象共享相同的服务。(5)消息一个对象为实现其责任而与其它对象的通信。在面向对象方法中,对象之间只能通过消息进行通信。(6)继承表达
49、类之间相似性的一种机制,即在已有的类的基础之上增量构造新的类,前者称为父类(或超类) ,后者称为子类。子类除自动拥有父类的全部属性和服务外,还可以进一步定义新的属性和服务。如果子类只从一个父类继承,则称为单继承;如果子类从一个以上父类继承,则称为多继承。3、同结构化方法的比较结构化方法强调过程抽象和模块化,将现实世界映射为数据流和加工,加工之间通过数据流进行通信,数据作为被动的实体被主动的操作所加工,是以过程(或操作)为中心来构造系统和设计程序的。面向对象方法把世界看成是独立对象的集合,对象将数据和操作封装在一起,提供有限的外部接口,其内部的实现细节、数据结构及对它们的操作是外部不可见的,对象之间通过消息相互通信,当一个对象为完成其功能需要请求另一个对象的服务时,前者就向后者发出一条消息,后者在接收到这条消息后,识别该消息并按照自身的适当方式予以响应。面向对象方法和结构化方法相比,具有以下一些特点:(1)面向对象方法强调把问题域的概念直接映射到对象以及对象之间的接口,符合人们通常的思维方式,减少了结构化方法从问题域到分析阶段的映射误差;(2)面向对象方法从分析到设计再到编码采用一致的模型表示,后一阶段可以直接复用前一阶段的工作成果,弥合了结构化方法从数据流图到模块结构图转换的鸿沟,减少了工作量和映射误差;