AutoLISP在CASS绘图软件中的应用Word文档格式.docx
《AutoLISP在CASS绘图软件中的应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《AutoLISP在CASS绘图软件中的应用Word文档格式.docx(44页珍藏版)》请在冰点文库上搜索。
通过AutoCAD的二次开发语言进行编程,用来实现大量数据的整体更改;
用二次开发的程序进行复杂的大量的曲线的自动绘制;
用二次开发的程序进行相关专业的大量数据的统计与计算;
用二次开发的程序进行绘制设计图纸的自动的标注等等,二次开发的程序的应用越来越多的被用来解决许多复杂的、重复的工作,其方便的快捷的使用过程开辟了AutoCAD的二次开发的新天地。
当今社会,各个专业的各个人士,一提到绘图与设计软件,AutoCAD这个词语立即就会脱口而出,AutoCAD已经不仅只是一个简单软件了,它已经完全成为了现时下各行业人士最为熟悉与认可的一个工程绘图设计软件了。
说道绘图制图,AutoCAD一定会被人们提及,形成这种的局面的原因除了Atuodesk公司的大幅度的宣传之外,恐怕所有的功能都要归功于这个软件的强大的绘图与编辑功能,以及它强大的二次开发功能的运用。
如今的AutoCAD的发展已经深深的渗入了各个专业的各个领域与环节了,它不仅适用于某些专业的二维平面图形的绘制和设计,更是可以满足一些行业对三维立体工作的要求,这说明了AutoCAD的功能已经不仅局限于二维平面图形的绘制,它对于三维建模也同样可以拥有其巨大的能量。
如果这样说来,AutoCAD的功能已经足够强大了,那么二次开发的发展是不是就不太需要了呢?
恰恰相反,AutoCAD的二次开发不但不是多余之举,反而是更是大大加强了AutoCAD的各种功能。
比如测绘行业,因为测绘行业所进行的相关领域的工作都是大范围的测量与地形图的绘制,为完成这些工作就得进行大量的数据处理和大量的公式运算以及通过野外测得许多数据点进行地形绘制。
在使用这些点进行地物绘制时,如果单纯使用AutoCAD的自带选项功能进行处理就会十分繁琐与麻烦,但是如果假设通过AutoCAD的二次开发功能够开发出一系列的程序,用来处理测量中的这些数据的处理和其公式的运算并进行等高线的绘制,它不仅在很大程度上省下人力物力、方便该专业的相关工作的进行,而在另一个角度上,它也推动了该专业在该领域的发展与进步。
2AutoLISP语言
2.1AutoLISP语言的简介及特点
AutoLISP是(ListProcessingLanguage)是一种计算机的表处理语言,是在人工智能学科领域广泛应用的一种计算机程序设计开发语言。
AutoLISP语言嵌套在AutoCAD的内部,是LISP语言和AutoCAD有机结合的产物。
在1987年6月份,AutoCAD添加了三维模式绘图的功能,并且研发出了二次开发的汇编语言——AutoLISP。
用户可以运用这种汇编语言,在AutoCAD的开发平台进行AutoCAD的二次开放,这种二次开发的功能突破赋予了AutoCAD注入了新的血液。
用户不但可以进行相关功能的二次开发,也可以继续扩充AutoCAD的功能,为AutoCAD占领整个绘图专业的相关领域提供了巨大的能量。
AutoLISP是开发AutoCAD的重要工具之一。
它可以直接调用AutoCAD的命令,它不但具备一般高级语言的基本结构和功能,又具有一些高级语言所不能完成的强大的图形处理功能,是当今世界用于AutoCAD二次开发中的最广泛使用的编程语言之一。
美国AutoDesk公司把AutoLISP内嵌于AutoCAD,就是为了使广大用户更加方便的利用AutoLISP进行二次开发:
实现直接增加和修改AutoCAD的命令,随意更改图形编辑的功能,开发CAD相关的功能软件等等。
AutoLISP语言最显著的功能就是参数化绘图的程序设计过程,实现图形的自动绘制以及进行图形的自行修改等功能。
AutoLISP语言一个最大的优点就是可以采用递归方式处理问题,这样一来,不仅可以节省大量的时间,也使得程序简单明了。
2.2AutoLISP的运行环境与内存分配
AutoLISP对于运行环境有一定的要求,主要是对处理器、存储器以及输入、输出设备的要求:
1.对处理器的要求:
(1)至少应为386型计算机,计算机应配有协处理器,即CPU386+387;
(2)最好CPU为486或者是586。
2.对存储器的要求
(1)内存:
AutoLISPR2.6~R10,有1MB以上的内存即可;
AutoLISPR11以上版本,有4MB以上的内存即可,最好8MB内存。
(2)硬盘:
AutoLISPR2.6~R10,有10MB以上的空闲硬盘空间即可;
AutoLISPR11以上版本,至少要35MB的空闲硬盘空间。
3.对输入、输出设备的要求
(1)应配有鼠标或数字化仪,以便于输入;
(2)应配有打印机或绘图仪,以便于图形的输出;
(3)彩色的显示器,分辨率在640×
400像素以上;
(4)应配有高密软驱,以用于软件的安装。
AutoLISPDE内存分配主要是为其变量、用户定义函数和系统函数提供计算机
的存储空间。
当运行AtuoLISP程序时,它需要两个很大的内存区域。
(1)heap(堆区域),它存储所有的函数和变量,因此,程序使用的函数和变量越多,或者函数越为的复杂,则他的堆区域占用的空间也就越多。
(2)stack(栈区域),它存储的函数的变量和局部结果,因此“嵌套”的函数越为的复杂与丰富,或者函数的执行的递归次数越多,那么所用的栈空间内存也就越多。
AutoLISP默认的堆空间和栈空间的大小为:
Heap为25000B,Stack为20000B
在AutoCAD下运行AutoLISP不能扩展它的堆和栈空间,如果用户定义的函数和变量太多太复杂,以致占用了所有的堆空间,AutoLISP将会显示下列信息:
Insufficientnodespace,并且会终止正在执行的函数的运行,如果在执行AutoCAD时,没有足够的内存装入AutoLISP,则显示下列信息:
Insuffcientmemory-AutoLISPdisabled,直到有足够的内存后AutoCAD重新启动时,AutoLISP所需要的堆栈区域占有内存量。
2.3AutoLISP的数据类型
AutoLISP语言的数据类型和其他的高级编程语言十分的相似,但是它又有自己的特殊的数据类型,它主要包括:
符号(SYM)、字符串(STR)、表(及用户定义的函数)(LIST)、文件描述符(FILE)、AutoLISP的内部函数(SUBR)、AutoCAD的选择集(PICKSET)、AutoCAD的实体名(ENAME)和函数分页表(PAGETB)。
AutoLISP的前五种数据类型,前四种被成为原子(ATOM),它主要包括数字原子、符号原子和串原子。
而AutoLISP语言最基本的数据类型是原子和表。
2.3.1原子
原子主要包括整数、实型数、符号和字符串。
整数是由0、1、2……9、+、-等字符组成。
实型数用双精度浮点数表示,并且至少有14的精度,即是整数后面的小数点的个数。
实型数的范围是-1.797693×
10308~1.797693×
10308,从这个范围来看,它的范围十分的庞大,几乎不会超界。
符号(symbol)包括除“(”、“)”、“、”、“.”、“;
”之外的所有打印字符,它的长度没有任何限制,但是用户使用时最好控制在6个以内,以免因占用多余的内存,而造成运行速度的降低,另外,在AutoLISP中,字符的大小写是不区分的,如:
AubVTx-8-u@fx
都是合法的。
在AutoLISP中,所有字符都是有值的,所以每一个符号都是要赋予一定的值,一般用赋值函数来完成这个工作。
字符串是指在一对双引号中所包含的所有字符,如:
“ABC”“135”“blancebeam”“”。
字符串包括任何可打印的字符,当然,在字符串中的字母的大小写以及空格的个数都是具有一定的意义的。
此外,字符串对于长度有一定的限制,一般来说最多不能超过100个字符,超出这个界限,超出的字符都是无效的。
如果字符串中没有任何字符,则作为空串处理,即“”。
2.3.2表和点对
1.表
在autollisp语言中,表有两种类型,即标准表和引用表。
标准表:
它是AutoLISP语言中的基本的构成形式,AutoLISP程序就是由标准表构成的。
它可以用来处理函数的调用,其中第一个元素应是系统定义的内部函数或者是用户定义的函数,而其他的元素则为该函数的参数,
引用表:
这种表区别于标准表的不同就是它不作为函数调用,而是用来处理数据的,很容易想象的出,用它处理关于坐标方面的数据十分简单。
2.点对
点对也是一种表,这个表中有且仅有两个元素,它的书写格式要求十分严格,即两个元素的中间为一个圆点“·
”,且圆点与元素中间必须用空格分开,如
(A·
B)
就是一个点对的例子,这个点对中A、B与圆点均有空格隔开,其中第一个元素A为这个点对的左元素,理所当然,第二个B即为其右元素。
点对可以任意嵌套,只要嵌套时注意它的书写要求,则不会出现错误。
点对常被用来构造连接表。
2.4AutoLISP程序的执行
有些AutoLISP程序十分简短,仅仅只有几句语言组成,那么它就可以使用defun函数定义简单的用户函数进行运算,同样也可以在AutoCAD环境中的command:
提示符下直接输入命令即可,运算的结果则会直接在文本屏幕中显示。
对于AutoLISP程序,需要先在文本编辑器上进行语言程序的编写,编辑器可以任意选取,但是最好是使用AutoLISP自带的编辑器进行编写,因为它自带的编辑器对函数和变量会有不同的显示颜色,方便检查错误。
2.4.1AutoLISP文件的加载
一般说来,通过AutoLISP语言编辑的LISP文件,需要经过加载才能够进行使用。
加载AutoLISP文件有以下三种方法:
1.命令行输入加载方式
当回到AutoCAD环境下,用load函数进行装载就可以执行。
如果程序中没有defun函数,系统就会边装载边运行,若有,装载后只需在command:
提示符下键入defun的函数即可运行相对应的函数。
加载文件的格式为:
Command:
(load“驱动器:
\\路径\\文件名”)
2.用对话框的方式加载
首先在“工具”栏的下拉菜单找到“AutoLISP”选项,然后在子菜单中选择“加载”选项,对话框如图2.2所示。
图2.2“加载/卸载应用程序”对话框
然后选取需要加载的LISP文件,选择加载。
命令行可以看到如下图2-3所示的成功加载信息,如下图2.3所示。
3.自动加载方式
在AutoCAD的工作目录下有一个ACAD.LSP文件,它是当系统启动时、新建文件、打开文件时自动装载的AutoLISP程序,用户可以通过它实现程序自动的加载。
在使用时,如果程序出现错误,则剩余的文件不会被继续加载,并提示错误,若有部分函数调用成功,则返回加载文件的最后那个表达式的值。
2.4.2运行AutoLISP程序
装载完成后,我们就可以在命令行command:
键入函数名即可执行这个程序段,系统将执行程序,运行出结果。
概括来说AutoLISP的运行过程为:
首先,用户编写相关语言程序,在此时,系统会为用户使用的变量和内存分配内存,当用户编写完程序之后,加载程序,如果程序正确,则返回表达式的值,如果运行错误,则停止程序的加载。
装载完后,用户就可以使用AutoLISP语言中defun定义的函数了。
3AutoLISP的函数
AutoLISP函数就是在进行AutoLISP语言编写时,所用来计算问题所需要的算法。
AutoLISP的函数十分丰富,接下来介绍一些常用的函数。
3.1数值函数
计算函数中,最常用的包括加函数、减函数、乘函数、除函数、平方根函数和正负判断函数。
1.加函数+
(+<
num1>
<
num2>
……)
即(+<
数1>
数2>
本函数计算之后所返回的值就是所有的<
数>
的和。
其中的数可以是整型数和实型数。
如果所有的数都是整型数,则它的返回值也是一个整型数;
如果有其中的一个数是实型,那么它的返回值则是一个实型数;
如果只提供一个数,系统将会默认是与0相加,返回与0相加的结果;
如果没有提供一个数,则系统返回值为0。
例如:
命令:
(+123.0)
6.0
2.减函数–
(-<
即(-<
此函数是用第一个数减去以后所有数的和,并返回所求值的结果。
若只给一个数目则是返回0减去这个数的结果;
若不提供任何数目,则返回0;
此函数对函数中数的类型的规则与加函数是相同的。
(-531.0)
1.0
3.乘函数*
(*<
即(*<
本函数返回所有<
的乘积,其返回值同样取决于这些数值的类型,如果函数只提供了一个数,那么不同加减函数的是,函数返回值是这个数乘以1所得到的值,若不提供数,则是返回0.
(*1234.0)
24.0
4.除函数/
(/<
即(/<
本函数返回值则是第一个数除以第二个数,依次除以第三……的数的值,如果只提供一个数,则是返回除以1所得到的值,如果没有提供任何数目,则返回0。
这个函数返回值的类型同样取决于各个数的类型,如果其中一个数是实型,那么它的返回值则也是实型。
(/9(/2.03))
13.5
5.平方根函数sqrt
(sqrt<
num>
)
该函数返回的值是<
的平方根,其数据类型总为实型数值,函数的使用中,要注意这个数的取值范围。
(sqrt(/42.0))
1.41421
3.2逻辑运算函数
逻辑运算函数,是用来进行逻辑关系的运算,它主要包括逻辑与、逻辑或和逻辑非的运算。
1.逻辑与AND
(and<
expr>
这个函数的返回值是表达式逻辑与的运算结果,如果这个函数运算每一个的表达式的结果都是nil,那么这个函数将停止运算,并返回nil,否则返回T。
(setqa103bnilc“string”)
(and1.4ab)
nil
2.逻辑或OR
(or<
这个函数所返回的运算结果值是返回表达式逻辑或(OR)的运算结果,or函数运算表达式是从左往右一次运算,找到一个非nil的表达式,一旦找到,就会停止运算,并返回T,如果表达式中没有一个非nil的表达式,那么函数会返回or。
(ornilT)
T
3.逻辑非NOT
(not<
这个函数的是对表达式进行逻辑非(NOT)的运算,如果表达式的值为nil,则返回值为T;
否则,则返回nil。
3.3三角函数
三角函数主要是用来计算数学中角度的问题,AutoLISP中的三角函数主要有正弦函数、余弦函数和反正切函数。
1.正弦函数sin
(sin<
angle>
该函数运行的结果返回值是为<
的正切值,其中<
是用弧度制表示的角度。
(sin1.0)
0.81471
2.余弦函数cos
(cos<
这个函数的返回值是<
的余弦值,其中<
为弧度制。
(cos1)
0.540302
3.反正切函数atan
(atan[<
][<
])
该函数返回值是一个数的反正切值,且是以弧度制表示,<
和<
也可以作为坐标系内的坐标值,从而判断取值,所返回的角度范围是-pi至+pi之间的弧度。
命令:
(atan3.02.0)
0.982794
3.4字符串处理函数
在工程绘图中,文字注记十分重要。
在处理大量的文本数字注记时,如果单纯使用AutoCAD自身的编辑功能,就会十分繁琐。
因此在AutoLISP中,系统提供相关的字符串处理函数,其中最常用的几个字符串处理函数是求字符串长度函数和字符串连接函数等。
1.求字符串长度函数strlen(stringlength)
(strlen[(string)]……)
这个函数是用来求一个字符串的长度,也就是求字符的个数,并把这个值作为函数值返回。
(stelen“surveying”“and”“mapping”)
19
2.字符串连接函数strcat(stringcatenation)
(strcat<
string1>
[<
string2>
]……)
这个函数首先是把多个变元所提供的字符串连接在一起,然后把连接而成的新的字符串作为函数返回值返回。
(strcat“Auto”“LISP”)
“AutoLISP”
3.5条件与循环函数
为简化程序,循环结构必不可少,而对于逻辑判断,条件运算又是必备手段。
所以程序结构中分支结构和循环结构尤为重要,那么条件函数和循环函数的地位就更是不言而喻了。
1.条件函数
条件函数通常用来测试表达式的值,然后根据测试的结果进行相应的运算,AutoLISP的条件函数是if和cond。
1.单一条件的两分支结构i