




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。,二、基本语法,1、一个表达式必须使用配对的括号。 2、数学运算 1.加法 格式(+ num1 num2 num3.) 此函数()计算加号()右边所有数字的和(+ num1 num2 num3.) 2. 减法 格式(- num1 num2 num3.) 此函数()从第一个数中减去第二个数(num1-num2) 4.除法 格式( / num1 num2 num3) 此函数()用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所有数的乘积num1/(num2 num3 .),3、关系表达式 1.等于 格式(= atom1 atom2) 该函数(=)检查两个元素是否相等。若相等,条件为真,函数返回。同样,若指定的元素不相等,条件为假,函数返回nil 2.不等于 格式(= atom1 atom2) 该函数(=)检查两个元素是否不相等。若不相等,条件为真,函数返回。同样,若指定的元素相等,条件为假,函数返回nil。 3.小于 格式(atom1 atom2) 该函数()检查第一个元素(atom)是否小于第个元素(atom)。若为真,函数返回,否则返回nil。 4.小于等于 格式(= atom1 atom2.) 该函数(=)检查第一个元素(atom1)是否小于等于第二个元素(atom2),若是,函数返回,否则返回nil。,5.大于 格式( atom1 atom2) 该函数()检查第一个元素(atom1) 是否大于第二个元素(atom2)。若是,函数返回,否则返回nil。 6.大于等于 格式(= atom1 atom2) 该函数(=)检查第一个元素(atom1)的值是否大于等于第二个元素(atom2)。若是,函数返回,否则返回nil。,三、基本函数,1.defun函数 defun函数用于在AutoLISP程序中定义函数,其格式为: (defun nameargument) 其中name函数名 argument参数列表 示例: (defun ADNUM(),定义了一个函数ADNUM,此函数无参数,也无局部变量( Local symbols)。这就意味着程序中用到所有变量均为全局变量。全局变量的值在程序结束时不会丢失。 (defun ADNUM (b c),定义了一个含有三个参数、 和c的函数ADNUM。变量、 、 从程序外部获取它们的值。 (defun ADNUM(/ ),定义了一个含有两个局部变量和的函数ADNUM。局部变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。,(defun :ADNUM(),在函数名前加上:后,此函数就可以通 过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有使用:,函数名则必须置于圆括号中。 注意 AutoLISP包含一些内置函数,不要使用其中的任一名称作为函数名或变量名,以下是一些AutoLISP内置函数的保留名称列表。 2.setq函数 setq函数用于给变量赋值,其格式如下: (setq name valueName value) 其中Name变量名 value赋予变量的值 赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。若该值为字符串,其长度不可超过100个字符。 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函数暂停程序的运行,允许用户输入一个点的、坐标或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。getpoint函数的格式为: (getPointPointPrompt) 其中point输入一个点,或选择一个点 prompt将显示在屏幕上的提示 示例: (setq Pt1(getpoint) (setq Pt1(getPoint“选择第一点”) 有上面几个函数就可以开始编程了: 例1 编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出如三角形。 本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以生成该三角形的处理过程为:由P1到P2、由P2到P3、到P3到P1各画一条直线。弄清这三部分就会使编程过程更清晰。,;该程序提示输入三点, 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行:行为空行,用于分隔程序与注释部分。空行还可以用来分隔程序的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。,第5行:(defun C: triang1() 本行中,defun为一个AutoLISP函数,它定义了函数TRIANG1。TRIANG1为该函数的函数名。由于此函数名前带有:,因此该函数可以像AutoCAD命令一样被执行。若没有:, TRIANG1命令只能置于圆括号中执行(TRIANG1)。此函数带有三个全局变量( P1,P2,P3)。第一次编写AutoLISP程序时,保持变量为全局变量是个好习惯。这是因为装入并运行程序后,可以通过在AutoCAD命令提示行中输人感叹号(!)并在其后输入变量名来检查变量的值(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“ Enter 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之间用空格分隔。 第10行 本行仅包含一个用于表明函数TRIANG1定义完成的右括号。该括号也可以写在上一行中。把它单独放在一行是一个好习惯,因为这样做任何程序员都可以很容易的确定定义已结束。然而某些程序中,同一程序内的多个定义及模块需要明确区分开。括号及空行有助于明确定义或程序段的起始和结束。,再增加几个函数,SSGET 格式:(ssget sel-method pt1 pt2 pt-list filter-list) 格式解释: sel-method: 字符串, 指定对象选择方法 Pt1,pt2 选择方法相关的点 Pt-list,点表 filter-list,过滤器,Sslength 用法:求出一个选择集中的对象(图元)数目,并将其作为一个整数返回 格式:(sslength ss) 格式说明:ss,选择集名称 Ssname 用法:提取选择集 中指定图元的图元名 格式:(ssname ss index) 格式说明:ss 选择集名,index:整数,表示选择集的第几个图元,第一个是(ssname ss 0),以此类推,Repeat 用法:对循环体中的每一个表达式进行指定次数的求值计算 格式:(repeat int expr.) 格式说明: Int:整数,表示 循环的次数 Expr:表达式,所要进行循环的表达式,案例1: 凤凰城J区,测量队送来的地籍图门墩没有填充,门墩数量808个,但做小宗地图门墩必须用白色实心填充。 思路:构造算法,算法1、利用CAD本身的命令建立选择集逐个填充 算法2 、利用图元组码生成填充 第一算法要简单一些,采用第一个 步骤:1、建立选择集 2、提取单个图元用命令进行填充 (defun c:tch (/ en n en_n) (setq en (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码,是以数据形式标记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.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 中心 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请输入要增加的前缀:“) ;引入前缀字符串 (setq ss1 (ssget (list (cons 0 “*text“) ;建立选择集,加过滤器 ) ) ) (en_jqj ss1) ;调入转换函数 (princ “n转换成功“) ;成功提示 ),;获取图元组码并进行加前缀操作 (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 d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司租车买车合同标准文本
- 专利咨询费合同样本
- 公司合股经营合同标准文本
- 上海epc合同标准文本
- 企业品牌策划设计合同样本
- 全套建筑工程合同标准文本
- 专利经纪合同样本
- 代理协议合同标准文本
- 乐器保修合同标准文本
- 会计试用合同样本
- 车辆租赁服务保障计划
- (二模)温州市2025届高三第二次适应性考试语文试卷(含答案)
- 2024-2025学年人教版数学八年级下册第一次月考模拟练习(含答案)
- 新教科版小学1-6年级科学需做实验目录
- 浅谈心理学在促进社会工作服务质量中的作用
- JJG 913-2015浮标式氧气吸入器
- GB/Z 20308-2006产品几何技术规范(GPS)总体规划
- 2023年沈阳职业技术学院高职单招(数学)试题库含答案解析
- GB/T 28731-2012固体生物质燃料工业分析方法
- 2022年4月自考03350社会研究方法试题及答案
- 伽利略介绍-课件
评论
0/150
提交评论