CAD二次开发教程AUTOLIS_第1页
CAD二次开发教程AUTOLIS_第2页
CAD二次开发教程AUTOLIS_第3页
CAD二次开发教程AUTOLIS_第4页
CAD二次开发教程AUTOLIS_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Cad二次开发-AUTOLISP入门,一、LISP编程语言概述,AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是ListProcessor的缩写)。第一篇关于LISP的参考文献是由JohnMcCarthy在1960年4月的ACM通讯中发表的。除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD软件包中,然而AutoCADR2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD2.18及更高版本才可以使用AutoLISP语言。AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。,二、基本语法,1、一个表达式必须使用配对的括号。2、数学运算1.加法格式(+num1num2num3.)此函数()计算加号()右边所有数字的和(+num1num2num3.)2.减法格式(-num1num2num3.)此函数()从第一个数中减去第二个数(num1-num2)4.除法格式(/num1num2num3)此函数()用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所有数的乘积num1/(num2num3.),3、关系表达式1.等于格式(=atom1atom2)该函数(=)检查两个元素是否相等。若相等,条件为真,函数返回。同样,若指定的元素不相等,条件为假,函数返回nil2.不等于格式(=atom1atom2)该函数(=)检查两个元素是否不相等。若不相等,条件为真,函数返回。同样,若指定的元素相等,条件为假,函数返回nil。3.小于格式(atom1atom2)该函数()检查第一个元素(atom)是否小于第个元素(atom)。若为真,函数返回,否则返回nil。4.小于等于格式(=atom1atom2.)该函数(=)检查第一个元素(atom1)的值是否大于等于第二个元素(atom2)。若是,函数返回,否则返回nil。,三、基本函数,1.defun函数defun函数用于在AutoLISP程序中定义函数,其格式为:(defunnameargument)其中name函数名argument参数列表示例:(defunADNUM(),定义了一个函数ADNUM,此函数无参数,也无局部变量(Localsymbols)。这就意味着程序中用到所有变量均为全局变量。全局变量的值在程序结束时不会丢失。(defunADNUM(bc),定义了一个含有三个参数、和c的函数ADNUM。变量、从程序外部获取它们的值。(defunADNUM(/),定义了一个含有两个局部变量和的函数ADNUM。局部变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。,(defun:ADNUM(),在函数名前加上:后,此函数就可以通过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有使用:,函数名则必须置于圆括号中。注意AutoLISP包含一些内置函数,不要使用其中的任一名称作为函数名或变量名,以下是一些AutoLISP内置函数的保留名称列表。2.setq函数setq函数用于给变量赋值,其格式如下:(setqnamevalueNamevalue)其中Name变量名value赋予变量的值赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。若该值为字符串,其长度不可超过100个字符。Command:(setq12)Command:(setq8.512),3、Command函数Command函数用于在AutoLISP程序内部执行标准的AutoCAD命令。AutoCAD命令名及命令选项必须置于双引号内。Command函数的格式为:(Command“Commandname”)其中CommandAutoLISP函数CommandnameAutoCAD命令示例:(Command“line”Pt1Pt2“”)“line”AutoCAD命令Pt1第一点Pt2第二点“”用于返回,相当于“回车”键,4.getpoint函数getpoint函数暂停程序的运行,允许用户输入一个点的、坐标或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。getpoint函数的格式为:(getPointPointPrompt)其中point输入一个点,或选择一个点prompt将显示在屏幕上的提示示例:(setqPt1(getpoint)(setqPt1(getPoint“选择第一点”)有上面几个函数就可以开始编程了:例1编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出如三角形。本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以生成该三角形的处理过程为:由P1到P2、由P2到P3、到P3到P1各画一条直线。弄清这三部分就会使编程过程更清晰。,;该程序提示输入三点,1;提示选取点进可以是在屏幕上点取,也可以是输入坐标2;程序将依此三点画出一个三角形34(defun:triang1()5(setqP1(getPoint“选择第一点:”)6(setq2(getPoint“选择第二点:”7(setq3(getPoint“选择第三点:”)8(Command“line”P1P2P3“”)9)10说明第13行前三行为注释行,用于描述程序中的函数。这几行很重要因为有它们,编辑程序会变得简单一些。可以在任何必要的时候使用注释。所有的注释行都必须以分号(;)开头,当程序装入时这些行会被忽略。第4行:行为空行,用于分隔程序与注释部分。空行还可以用来分隔程序的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。,第5行:(defunC:triang1()本行中,defun为一个AutoLISP函数,它定义了函数TRIANG1。TRIANG1为该函数的函数名。由于此函数名前带有:,因此该函数可以像AutoCAD命令一样被执行。若没有:,TRIANG1命令只能置于圆括号中执行(TRIANG1)。此函数带有三个全局变量(P1,P2,P3)。第一次编写AutoLISP程序时,保持变量为全局变量是个好习惯。这是因为装入并运行程序后,可以通过在AutoCAD命令提示行中输人感叹号(!)并在其后输入变量名来检查变量的值(Command:!P1)。一旦程序通过测试并运行正常,就应该使它们成为局部变量(defun:TRIANG1(P1P2P3)第6行:(setqP1(getpoint“EnterfirstPointtriangle:)本行中,getpoint函数暂停程序的运行,允许用户输入三角形的第一个点。提示信息EnterfirstPointoftriangle显示在屏幕的提示区内。可以通过键盘输入该点的坐标,也可以用屏幕光标选择该点。随后setq函数将这些坐标赋予变量P1。的作用是回车,其后的表达式将被打印在下一行上(“”代表“),第行和第8行:(setq2(getpoint“EntersecondPointoftriangle:”)及(setq3(getpoint“EnterthirdPointoftriangle:”)这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把这些坐标赋予2和3。的作用是回车,因此输入提示显示在下一行中。第9行:(Command“line”P1P2P3“”)本行中,Command函数用来输入AutoCAD的line命令,然后从P1到P2,P2到P3各画一条直线。“”(表示“”选项)把最后一点3与第一点P1连接起来。所有的AutoCAD命令及选项在AutoLISP程序中使用时都必须置于双引号内。变量P1、2.3之间用空格分隔。第10行本行仅包含一个用于表明函数TRIANG1定义完成的右括号。该括号也可以写在上一行中。把它单独放在一行是一个好习惯,因为这样做任何程序员都可以很容易的确定定义已结束。然而某些程序中,同一程序内的多个定义及模块需要明确区分开。括号及空行有助于明确定义或程序段的起始和结束。,再增加几个函数,SSGET格式:(ssgetsel-methodpt1pt2pt-listfilter-list)格式解释:sel-method:字符串,指定对象选择方法Pt1,pt2选择方法相关的点Pt-list,点表filter-list,过滤器,Sslength用法:求出一个选择集中的对象(图元)数目,并将其作为一个整数返回格式:(sslengthss)格式说明:ss,选择集名称Ssname用法:提取选择集中指定图元的图元名格式:(ssnamessindex)格式说明:ss选择集名,index:整数,表示选择集的第几个图元,第一个是(ssnamess0),以此类推,Repeat用法:对循环体中的每一个表达式进行指定次数的求值计算格式:(repeatintexpr.)格式说明:Int:整数,表示循环的次数Expr:表达式,所要进行循环的表达式,案例1:凤凰城J区,测量队送来的地籍图门墩没有填充,门墩数量808个,但做小宗地图门墩必须用白色实心填充。思路:构造算法,算法1、利用CAD本身的命令建立选择集逐个填充算法2、利用图元组码生成填充第一算法要简单一些,采用第一个步骤:1、建立选择集2、提取单个图元用命令进行填充(defunc:tch(/ennen_n)(setqen(ssget);建立选择集n0;初始化计数器)(repeat(sslengthen);进入循环(setqen_n(ssnameenn);提取图元名n(1+n);计数器加1,为提取下一选择对象做准备)(command-bhatchpsolidsen_n);调入CAD命令,执行操作);退出循环),更高一层:图元组码,一、组码概述:组码也就是DXF码,是以数据形式标记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)(10526.763238.7880.0)(40.2.5)(1.abc)(50.0.0)(41.1.0)(51.0.0)(7.Standard)(71.0)(72.0)(110.00.00.0)(2100.00.01.0)(100.AcDbText)(73.0)说明:39线宽,默认值=010第一对齐点40文字高度1文字内容50文字旋转角度(默认值=0)41宽度比例系数(默认值=1)51倾斜角度(默认值=0)7文字字型名称(默认值=STANDARD)71文字产生标志(默认值=0)2文字是反向的(即在X方向镜射)4文字是上下颠倒(即在Y方向镜射),72水平文字对正类型(默认值=0)整数码(非位码)0左1中心2右3对齐(如果垂直对齐=0)4中央(如果垂直对齐=0)5拟合(如果垂直对齐=0)0与群码73组合对齐方式请参考下表73垂直文字对正类型(默认值=0)为整数值非位码0基准线1下2中央3下0与群码72组合对齐方式请参考下表,;LISP实例详解;2009年1月13日;对字符串加前缀(defunc:jqz(/strss1)(setqstr(getstringtn请输入要增加的前缀:);引入前缀字符串(setqss1(ssget(list(cons0*text);建立选择集,加过滤器)(en_jqjss1);调入转换函数(princn转换成功);成功提示),;获取图元组码并进行加前缀操作(defunen_jqj(ss1/nen_ndatatex1tex2)(setqn0);初始化n(repeat(sslengthss1);开始选择集循环(setqen_n(ssnamess1n);提取第一个选择集图元名data(entgeten_n);获取文字图元组码)(setqtex1(assoc1data);查找文字的内容tex2(cons1(strcatstr(cdrtex1);建立替代的文字内容n(1+n);选择集计数器加1,为循环做准备)(setqdata(substtex2tex1data);替换原来的文字内容,达到增加前缀的目的(entmoddata);更新图元显示,使结果能在屏幕在看到),编辑器的使用,编辑器的功能:1、编辑代码“检查编辑器中的文字”,用于检查基本的语法错误。“设置编辑器中的文字格式”,用于整理格式,使代码更易于阅读与修改主。,编辑器的调试功能:1、加载(工具加载编辑器中的文字)调试”工具栏中包含了几个工具。默认情况下,该工具栏附着在“视图”和“工具”工具栏上,看起来就象一个VLISP工具栏。“调试”工具栏包括最左边的那几个图标。该工具栏上的大多数项目在平时都处于禁用状态,只有在调试模式(例如定义了一个或几个断点)下运行程序时它们才会变为可用状态。如果您尚未将“调试”工具栏从屏幕顶部拖下来,那您现在可以试试。要拖动它,只需用鼠标点中工具栏最左

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论