CAD二次开发教程(AUTOLISP).ppt

上传人:牧羊曲112 文档编号:6502526 上传时间:2023-11-07 格式:PPT 页数:26 大小:717KB
返回 下载 相关 举报
CAD二次开发教程(AUTOLISP).ppt_第1页
第1页 / 共26页
CAD二次开发教程(AUTOLISP).ppt_第2页
第2页 / 共26页
CAD二次开发教程(AUTOLISP).ppt_第3页
第3页 / 共26页
CAD二次开发教程(AUTOLISP).ppt_第4页
第4页 / 共26页
CAD二次开发教程(AUTOLISP).ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《CAD二次开发教程(AUTOLISP).ppt》由会员分享,可在线阅读,更多相关《CAD二次开发教程(AUTOLISP).ppt(26页珍藏版)》请在三一办公上搜索。

1、Cad二次开发-AUTOLISP 入门,一、LISP编程语言概述,AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的ACM通讯中发表的。除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是 LISP却生下来,并且已经成为人工智能(AI)的首选 程序序言。AutoLISP解释程序位于AutoCAD软件包中,然而AutoCAD R2.17及更低版本中并不包含 AutoLISP解释程序,这样,只有通过AutoCAD 2.18及更高

2、版本才可以使用AutoLISP语言。AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。,二、基本语法,1、一个表达式必须使用配对的括号。2、数学运算1.加法 格式(+num1 num2 num3.)此函数()计算加号()右边所有数字的和(+num1 num2 num3.)2.减法 格式(-n

3、um1 num2 num3.)此函数()从第一个数中减去第二个数(num1-num2)4.除法 格式(/num1 num2 num3)此函数()用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所有数的乘积num1/(num2 num3.),3、关系表达式1.等于 格式(=atom1 atom2)该函数(=)检查两个元素是否相等。若相等,条件为真,函数返回。同样,若指定的元素不相等,条件为假,函数返回nil2.不等于 格式(=atom1 atom2)该函数(=)检查两个元素是否不相等。若不相等,条件为真,函数返回。同样,若指定的元素相等,条件为假,函数返回nil。3.小于 格式(at

4、om1 atom2)该函数()检查第一个元素(atom)是否小于第个元素(atom)。若为真,函数返回,否则返回nil。4.小于等于 格式(=atom1 atom2.)该函数(=)检查第一个元素(atom1)是否小于等于第二个元素(atom2),若是,函数返回,否则返回nil。,5.大于 格式(atom1 atom2)该函数()检查第一个元素(atom1)是否大于第二个元素(atom2)。若是,函数返回,否则返回nil。6.大于等于 格式(=atom1 atom2)该函数(=)检查第一个元素(atom1)的值是否大于等于第二个元素(atom2)。若是,函数返回,否则返回nil。,三、基本函数,

5、1.defun函数 defun函数用于在AutoLISP程序中定义函数,其格式为:(defun nameargument)其中name函数名 argument参数列表 示例:(defun ADNUM(),定义了一个函数ADNUM,此函数无参数,也无局部变量(Local symbols)。这就意味着程序中用到所有变量均为全局变量。全局变量的值在程序结束时不会丢失。(defun ADNUM(b c),定义了一个含有三个参数、和c的函数ADNUM。变量、从程序外部获取它们的值。(defun ADNUM(/),定义了一个含有两个局部变量和的函数ADNUM。局部变量在程序的执行期间保留其值,而且只能在它

6、所在的程序中使用。,(defun:ADNUM(),在函数名前加上:后,此函数就可以通过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有使用:,函数名则必须置于圆括号中。注意 AutoLISP包含一些内置函数,不要使用其中的任一名称作为函数名或变量名,以下是一些AutoLISP内置函数的保留名称列表。2.setq函数 setq函数用于给变量赋值,其格式如下:(setq name valueName value)其中Name变量名 value赋予变量的值 赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。若该值为字符串,其长度不可超过10

7、0个字符。Command:(setq 12)Command:(setq 8.5 12),3、Command函数 Command函数用于在AutoLISP程序内部执行标准的AutoCAD命令。AutoCAD命令名及命令选项必须置于双引号内。Command函数的格式为:(Command“Commandname”)其中CommandAutoLISP函数 CommandnameAutoCAD命令 示例:(Command“line”Pt1 Pt2“”)“line”AutoCAD 命令 Pt1第一点 Pt2第二点“”用于返回,相当于“回车”键,4.getpoint函数 getpoint函数暂停程序的运行,

8、允许用户输入一个点的、坐标或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。getpoint函数的格式为:(getPointPointPrompt)其中point输入一个点,或选择一个点 prompt将显示在屏幕上的提示 示例:(setq Pt1(getpoint)(setq Pt1(getPoint“选择第一点”)有上面几个函数就可以开始编程了:例1 编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出如三角形。本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以生成该三角形的处理过程为:由P1到P2、由P2到P3、到P3到P1各画一条直线。弄清这三部分就会使编程过程

9、更清晰。,;该程序提示输入三点,1;提示选取点进可以是在屏幕上点取,也可以是输入坐标 2;程序将依此三点画出一个三角形 3 4(defun:triang1()5(setq P1(getPoint“选择第一点:”)6(setq 2(getPoint“选择第二点:”7(setq 3(getPoint“选择第三点:”)8(Command“line”P1 P2 P3“”)9)10说明 第13行 前三行为注释行,用于描述程序中的函数。这几行很重要因为有它们,编辑程序会变得简单一些。可以在任何必要的时候使用注释。所有的注释行都必须以分号(;)开头,当程序装入时这些行会被忽略。第4行:行为空行,用于分隔程序

10、与注释部分。空行还可以用来分隔程序的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。,第5行:(defun C:triang1()本行中,defun为一个AutoLISP函数,它定义了函数TRIANG1。TRIANG1为该函数的函数名。由于此函数名前带有:,因此该函数可以像AutoCAD命令一样被执行。若没有:,TRIANG1命令只能置于圆括号中执行(TRIANG1)。此函数带有三个全局变量(P1,P2,P3)。第一次编写AutoLISP程序时,保持变量为全局变量是个好习惯。这是因为装入并运行程序后,可以通过在AutoCAD命令提示行中输人感叹号(!)并在其后输入变量名来检查变量的值

11、(Command:!P1)。一旦程序通过测试并运行正常,就应该使它们成为局部变量(defun:TRIANG1(P1 P2 P3)第6行:(setq P1(getpoint“Enter first Point triangle:)本行中,getpoint函数暂停程序的运行,允许用户输入三角形的第一个点。提示信息Enter first Point of triangle显示在屏幕的提示区内。可以通过键盘输入该点的坐标,也可以用屏幕光标选择该点。随后setq函数将这些坐标赋予变量P1。的作用是回车,其后的表达式将被打印在下一行上(“”代表“),第行和第8行:(setq 2(getpoint“Ente

12、r second Point of triangle:”)及(setq 3(getpoint“Enter third Point of triangle:”)这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把这些坐标赋予2和3。的作用是回车,因此输入提示显示在下一行中。第9行:(Command“line”P1 P2 P3“”)本行中,Command函数用来输入AutoCAD的line命令,然后从P1到P2,P2到P3各画一条直线。“”(表示“”选项)把最后一点3与第一点P1连接起来。所有的AutoCAD命令及选项在AutoLISP程序中使用时都必须置于双引号内。变量P1、2.3之间用空格

13、分隔。第10行 本行仅包含一个用于表明函数TRIANG1定义完成的右括号。该括号也可以写在上一行中。把它单独放在一行是一个好习惯,因为这样做任何程序员都可以很容易的确定定义已结束。然而某些程序中,同一程序内的多个定义及模块需要明确区分开。括号及空行有助于明确定义或程序段的起始和结束。,再增加几个函数,SSGET格式:(ssget sel-method pt1 pt2 pt-list filter-list)格式解释:sel-method:字符串,指定对象选择方法Pt1,pt2 选择方法相关的点Pt-list,点表filter-list,过滤器,Sslength用法:求出一个选择集中的对象(图元

14、)数目,并将其作为一个整数返回格式:(sslength ss)格式说明:ss,选择集名称Ssname用法:提取选择集 中指定图元的图元名格式:(ssname ss index)格式说明:ss 选择集名,index:整数,表示选择集的第几个图元,第一个是(ssname ss 0),以此类推,Repeat用法:对循环体中的每一个表达式进行指定次数的求值计算格式:(repeat int expr.)格式说明:Int:整数,表示 循环的次数Expr:表达式,所要进行循环的表达式,案例1:凤凰城J区,测量队送来的地籍图门墩没有填充,门墩数量808个,但做小宗地图门墩必须用白色实心填充。思路:构造算法,算

15、法1、利用CAD本身的命令建立选择集逐个填充 算法2、利用图元组码生成填充第一算法要简单一些,采用第一个步骤:1、建立选择集 2、提取单个图元用命令进行填充(defun c:tch(/en n en_n)(setqen(ssget);建立选择集n 0;初始化计数器)(repeat(sslength en);进入循环(setq en_n(ssname en n);提取图元名 n(1+n);计数器加1,为提取下一 选择对象做准备)(command-bhatch p solid s en_n);调入CAD命令,执行操作);退出循环),更高一层:图元组码,一、组码概述:组码也就是DXF码,是以数据形式

16、标记CAD图形的一种形式。任何CAD图元都由特定的组码来标记。对组码的详细说明CAD开发者帮助有详细的说明,二、常用图元组码:0 图元类型 5 句柄 8 图层名 6 线型名称(如果线型不为“BYLAYER”,此群码值会出现)48 线型比例(选择性)60 对象可见性,0=可见,1=不可见 67 值为空或0时即指对象在模型空间,如果为1指在图形空间,“text”文字图元组码,TEXT 组码(-1.)(0.TEXT)(330.)(5.88)(100.AcDbEntity)(67.0)(410.Model)(8.0)(100.AcDbText)(10 526.763 238.788 0.0)(40.2

17、.5)(1.abc)(50.0.0)(41.1.0)(51.0.0)(7.Standard)(71.0)(72.0)(11 0.0 0.0 0.0)(210 0.0 0.0 1.0)(100.AcDbText)(73.0)说明:39 线宽,默认值=0 10 第一对齐点40 文字高度1 文字内容50 文字旋转角度(默认值=0)41 宽度比例 系数(默认值=1)51 倾斜角度(默认值=0)7 文字字型名称(默认值=STANDARD)71 文字产生标志(默认值=0)2 文字是反向的(即在X方向镜射)4 文字是上下颠倒(即在Y方向镜射),72 水平文字对正类型(默认值=0)整数码(非位码)0 左1 中

18、心2 右3 对齐(如果垂直对齐=0)4 中央(如果垂直对齐=0)5 拟合(如果垂直对齐=0)0 与群码73组合对齐 方式请参考下表73 垂直文字对正类型(默认值=0)为整数值非位码0 基准线1 下2 中央3 下0 与群码72组合对齐方式请参考下表,;LISP实例详解;2009年1月13日;对字符串加前缀(defun c:jqz(/str ss1)(setq str(getstring t n请输入要增加的前缀:);引入前缀字符串(setqss1(ssget(list(cons 0*text);建立选择集,加过滤器)(en_jqj ss1);调入转换函数(princ n转换成功);成功提示),;

19、获取图元组码并进行加前缀操作(defun en_jqj(ss1/n en_n data tex1 tex2)(setq n 0);初始化n(repeat(sslength ss1);开始选择集循环(setq en_n(ssname ss1 n);提取第一个选择集图元名 data(entget en_n);获取文字图元组码)(setq tex1(assoc 1 data);查找文字的内容tex2(cons 1(strcat str(cdr tex1);建立替代的文字内容 n(1+n);选择集计数器加1,为循环做准备)(setq data(subst tex2 tex1 data);替换原来的文字

20、内容,达到增加前缀的目的(entmod data);更新图元显示,使结果能在屏幕在看到),编辑器的使用,编辑器的功能:1、编辑代码“检查编辑器中的文字”,用于检查基本的语法错误。“设置编辑器中的文字格式”,用于整理格式,使代码更易于阅读与修改主。,编辑器的调试功能:1、加载(工具加载编辑器中的文字)调试”工具栏中包含了几个工具。默认情况下,该工具栏附着在“视图”和“工具”工具栏上,看起来就象一个 VLISP 工具栏。“调试”工具栏包括最左边的那几个图标。该工具栏上的大多数项目在平时都处于禁用状态,只有在调试模式(例如定义了一个或几个断点)下运行程序时它们才会变为可用状态。如果您尚未将“调试”工

21、具栏从屏幕顶部拖下来,那您现在可以试试。要拖动它,只需用鼠标点中工具栏最左边的两个竖条并拖动即可。用这种拖动方法可以将 VLISP 的任何工具栏拖到屏幕的任意位置,以满足工作的需要。,“调试”工具栏上的按钮分为三组,每组包括三个按钮。在调试模式下运行程序时,该工具栏如下图所示:前面三个按钮让您单步执行程序代码。接下来的三个按钮用来确定在断点处暂停或因错误而暂停时,下一步该如何继续。接下来的三个按钮用来设置或删除断点、添加监视以及跳转到程序代码中的最近一次运行暂停处。“调试”工具栏上的最后一个按钮是“单步调试指示器”。它不执行任何操作,但提供了一个直观的指示器,用于在单步执行代码时指示光标的位置。不是运行在调试模式下时,该按钮显示为空白.,THE ENDTHANKS!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号