第四章 Auto LISP的绘图功能
- 格式:ppt
- 大小:183.00 KB
- 文档页数:39
第2讲利⽤AutoLisp语⾔绘图第2讲利⽤AutoLisp语⾔绘图在AuotCAD绘制简单图形时,有三种主要⽅式:(1)图标菜单(2)下拉式菜单(3)命令⾏。
事实上还有另外⼀种绘图⽅式,即通过lisp语⾔实现绘制图形。
利⽤Lisp语⾔绘图的最⼤优点是可以实现批处理,降低劳动强度。
⼩知识:Lisp语⾔最⼤优势是和AutoCAD绘图结合的很好,这也是该语⾔⾄今仍未被淘汰的最主要原因。
1、简单的绘图语句⼏乎AuotCAD中所有的绘图及环境设置命令都可以通过程序调⽤!,利⽤Lisp语⾔编写绘图命令的窍门是⾸先在命令⾏下把绘图命令和对应的参数记住,然后⽤Lisp语⾔的格式书写出即可。
1.1 绘制直线(command "line" "0,0" "1,1" "")1.2 绘制圆(command "circle" "0,0" 5)1.3 绘制正多边形(command "polygon" 5 "0,0" "i" 5)(command "polygon" "5" "0,0" "i" "5")都正确1.4 新建图层(command "la yer" "m" "道路" "c" 2 "" "")请同学⾃⼰编写⾼度为2,起点位置在“0,0”,⽂字内容是“理⼯⼤”的程序2、⽤多条绘图语句表⽰复杂图形正常情况下图形都⽐较复杂,需要⽤多条语句编写,例如测绘中的下⽔井、路灯等符号。
例1、下⽔井的绘制(defun c:xsj()(command "circle" "0,0" 0.5)(command "line" "-0.5,0" "0.5,0" "")(command "line" "0,-0.5" "0,0.5" ""))3、循环控制语句例2、绘制同⼼圆例3、绘制可多次插⼊的下⽔井符号例4、绘制y=sinx 曲线4、课后练习题4.1 编写lisp 程序,绘制路灯图案,参照下⽔井程序,改写成可以多次插⼊的程序。
用LISP语言实现控制网的图形自动绘制(defun f16(n p1dh z sl1/p2p3p4p5kk1);定义被调用函数f16,该函数的作用是用相应符号表示不同类型的控制点,并对其进行标注(command"insert"n p1sl1sl10);调用AutoCAD内部插入命令(setq p2(polar p10(*1sl1)))(setq p3(polar p20(*1sl1)))(setq p4(list(+(car p2)(*0.5sl1))(+(cadr p2)(*0.05sl1))))(setq p5(list(car p4)(-(cadr p4)(*0.35sl1))))(setq kk1(*sl10.25));分别对p2p3p4p5kk1赋值(command"line"p2p3);调用画线命令(command"")(command"text""c"p4kk10dh);调用TEXT命令标注不同类型的控制点(command"text""c"p5kk10z));;;;;;;;;;;;;;(defun c:kzd();定义主程序(command"layer""m""kzd""");设置层(setq scl(getstring"输入比例尺:"));提示用户输入绘图比例尺(setq scl(atoi scl));定义几个绘图参数,并对其赋值(setq s-utomm1000.0);s-utomm为图上一绘图单位代表的实地距离的毫米数(setq s-mtou(/scl s-utomm));s-mtou实地距离1米代表的绘图单位数(setq k1(/scl s-utomm))(setq s1(*10k1))(setq sl1s1);对过程变量赋值(princ"\数据文件格式:\\第一行:注释行")(princ"\\其它行:点号X Y H\");显示提示信息(graphscr);显示AutoCAD的图形屏幕(findfile(setq path(getstring"请输入数据文件名:")))(setq fp(getfiled"请选择数据文件:""path""txt"4));提示用户选择数据文件(princ fp);打印数据文件(包括路径和文件名)(if(setq fp(open(findfile fp)"r"))nil(exit));不管文件是否已经打开都转而去执行后面的语句(setq zsh(read-line fp));读注释行(princ zsh);打印显示注释行(setq in(read-line fp));从数据文件中读取一行数据(while in;当没有读到数据文件结尾时,进行while循环(setq in(strcat"("in")"));将读取的字符串构建成一个“表”(setq in(read in));将“表”转换成数值型表(princ in);打印显示表的内容(setq L(length in));返回表中元素的个数(princ L)(setq dh(itoa(nth0in)));提取表中第一个元素,并将其转换成字符型(setq x(nth1in));提取表中的第二个元素,即控制点的X坐标(setq y(nth2in));提取表中的第三个元素,即控制点的Y坐标(setq z(rtos(nth3in)));提取表中的第四个元素,即控制点的高程,并将其转换成字符型(setq k(nth4in));提取控制点的类型说明符(setq i(/(-L5)2));计算能与控制点通视的控制点的个数(setq i24);为工作变量i2赋初值,这里赋值之所以为4是因为,表中第六个元素才是能通视点的坐标(setq p1(list(*s-mtou y)(*s-mtou x)));构建一个点表,并将其赋值给p1(princ p1);打印显示p1(cond((=k1)(setq n"1"))((=k2)(setq n"2"))((=k3)(setq n"3A"))((=k4)(setq n"3B"))((=k5)(setq n"4"))((=k6)(setq n"5A"))((=k7)(setq n"5B"))((=k8)(setq n"6")))(setq n n);利用cond循环,选择不同类型的控制点(f16n p1dh z sl1);调用函数f16自动展绘控制点并自动对其进行标注(while(>i0);以下部分是循环提取能够通视的控制点的坐标,并将它与先前的控制点连结起来(setq i3(1+i2))(setq x(nth i3in))(setq y(nth(1+i3)in));依次提取通视点的X,Y坐标(setq p2(list(*s-mtou y)(*s-mtou x)))(command"point"p2)(command"line"p1p2"")(setq i2(+2i2));工作变量i2自动增加2,因为每读次循环可以从表中读取两个数据(setq i(1-i));工作变量i自动减1)(setq in(read-line fp)))(close fp)(command"undo""end"))。
高速公路路面单元块测量与数据转换接口的二次开发默认分类2008-06-21 13:42:18 阅读56 评论1 字号:大中小订阅3.4.4 Auto LISP/ Visual LISP 开发工具Auto LISP的全名是LISP Processing Language,它出现于1985年推出的AutoCAD 82.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,一直是低版本AutoCAD的首选编程语言。
Auto LISP是一种表处理语言,是被解释执行的,任何一条语句键入后就能马上执行,它对于交互式的程序开发非常方便。
使用Auto LISP可直接调用几乎所有的AutoCAD命令。
Auto LISP语言最典型的应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。
另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL ( Dialog Control Language)文件,创建自己的对话框。
Visual LISP是Auto LISP的换代产品。
它与Auto LISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP语言。
Visual LISP对语言进行了扩展,可以通过Microsoft AdiveX Automation接口与对象交互。
同时,通过实现反应器函数,还扩展了Auto LISP响应事件的能力、此外VLISP还提供了工具用于发布独立的应用程序。
自从AutoCAD 2000版本开始,Visual LISP就已经被完整地集成到Auto CAD 中,它为开发者提供了崭新的、增强的集成开发环境(IDE ),大大提高了程序开发效率。
Visual LISP一改过去在Auto CAD中内嵌Auto LISP运行引擎的机制,使开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发,大大提高了开发的灵活度。
Visual LISP是Auto CAD2000版本以后集成的代码编辑工具,所以用它开发Auto LISP程序的时间将被大大地缩短,源代码也能被保密,以防盗版和被更改。
基于Auto LISP的参数化绘图技术与实例分析摘要:AutoCAD 是一款通用的绘图软件,Auto LISP是嵌入AutoCAD的二次开发工具,参数化绘图是其典型的应用。
文章探讨了参数化绘图设计原理及步骤,并以轴承参数化绘图为例,介绍了Auto LISP的参数化绘图技术。
关键词:参数化;AutoCAD;Auto LISPAutoCAD是由Autodesk公司发行的一款应用于多领域的设计辅助和图形处理软件。
在机械行业得到了广泛应用。
AutoCAD虽然功能强大,但在专业应用上还是有不足之处,如何让通用的CAD系统更适合行业需要,必须对其要进行二次开发。
AutoCAD在30多年时间里相继推出了Auto LISP、ADS、Visual LISP、VBA、Object ARX、几种不同层次的二次开发工具。
“其中Auto LISP是唯一的一种以解释方式运行于AutoCAD内部的解释性程序设计语言,Auto LISP把数据和程序统一表达为表结构,所以它既可以把程序当作数据来处理,还可以把数据当作程序来执行”。
其语言规则简单,直接针对AutoCAD,易学易用,AutoCAD的绝大多数命令可直接调用,参数化绘图是其典型的应用之一。
1 参数化绘图设计原理及步骤所谓参数化就是将图形的有关几何关系、约束关系有机地结合起来,从而构成一个完整的参数化模型。
当设计人员改变图形的某一参数时,模型能根据尺寸及几何约束等自动计算出满足约束关系的工程图形。
参数化编程方法的实质,就是将图形信息记录在程序中。
它用一组变量记录图形的几何参数,用一些约束条件或者赋值语句来表达几何参数与结构参数之间的关系,再用一些绘图语句来表述图形的拓扑关系。
参数化方法快捷、高效,参数化绘图程序编写步骤是:①先进行图形结构特征分析,一般绘制一个零件的图样,需要很多尺寸,这就需要我们分析这个零件,确定图形中的关健几何尺寸及图形对象之间的依赖关系。
②从设计角度具体分析,确立不仅能体现零件的结构特征,又可以推导出其它尺寸的基本尺寸作为图形参数,并明确尺寸与图形参数之间的关系。
Lisp教程一.Lisp基础知识二.对话框基础一.基本知识第1节--------------------------------------------------------------------------------基本知识AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50年代末期出现,是一种擅于处理串行文字(List of Processing),属第四代「人工智能(Artificial Intelligence)」的计目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令.AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成.是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言.程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响.数据及程序均统一以串行(List)结构表示.可直接调用几乎全部的AutoCAD命令.既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力.内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境.可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框.缺点: 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取.第2节--------------------------------------------------------------------------------函数(Function)在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下:(函数名称参数1 参数2....)e.g. (PRINC "AutoLISP Programming")每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应.左边开括号后紧随函数名称.函数名称与参数之间,或参数与参数之间须最少留一个空格.函数可有一个或多个参数(也可能没有参数),视该函数而定.函数名称不分大小写,即大小写字母视为相同.第3节--------------------------------------------------------------------------------数据型态(Data Type)整数(INT)没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648实数(REAL)带小数字的数值,以倍精度浮点格式储存(最少14位小数) e.g. 12.5当数值在1与-1之间时,必须加上前导零 e.g. 0.05可以科学记号表示: 在E或e后加上次方值 e.g. 4.1e-6字符串(STR)一般文字,其前后必须加上双引号" e.g. "AutoCAD"控制字符或脱逸码必须为小写,且须在字符前加上反斜线\ e.g. "\AutoCAD"像素名称(ENAME)是指定给图文件内对象的指针(Pointer,为16进位的数字卷标)e.g. <Entity name:14e5180>像素名称在图文件内是唯一的,不会重复对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象档案(FILE)以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量选集(PICKSET)用SSGET等函数建立的一个或多个对象的集合或群组转化(V ARIANT)可将像素名称转换为可与ActiveX配搭使用的VLA-Object对象符号(SYM)用以储存静态数据的名称;例如内建或使用者定义的函数符号名称不分大小写,可由任意长度的可打印字符组成;但下列的字符除外:左括号( 右括号) 句点. 单引号' 双引号" 分号;表(LIST)亦称为串行,是放在一对小括号( ) 内,一个或多个元素的有序集合e.g. (1.0 "Lisp" ( ) (5.6 7))元素可以是字符串,符号,整数或实数;也可以是另一个表元素与元素之间要用空格隔开,但元素与小括号之间则可以不隔空格为便于存取表内各元素,每个元素均有其序号;从表的左边开始,第一个元素序号为0,依此类推表的大小即为其顶层元素的数量(内层嵌套式的表,视为单一元素)点对(Dotted Pair)亦是表的一种;表内有2个元素,中间以一圆点分隔,且元素与圆点之间亦须以空格分开若表内没有任何元素,称为空串行或空表;以( ) 或(NIL) 表示第4节--------------------------------------------------------------------------------变数(Variable)为程序执行中动态储存数据的符号名称;主要分为2类:区域(Local)变量又称为局部变量;该变量只在该程序段落中有效,不能为其它程序使用全域(Global)变量又称为整体变量;变量在所有程序段落中均可使用变量名称与符号的限制相同,使用时宜采用有意义及易于辨别的名称变量在赋值或使用前无须先行设定相同的变量可以储存不同型态的数据(但同一时间内只可储存一种型态)在指定新的数据之前,变量储存的内容会保持不变赋值将数据给予指定的变量储存以内建函数SETQ进行(可用于绘图模式的指令行或AutoLISP程序),其语法如下:(SETQ 变量名称1 资料1 [变量名称2 资料2 ....] )e.g. (SETQ NAME "David" AGE 37 WEIGHT 72.5 POINT (LIST 10 20))在函数名称之后,各参数以两个一组,每组左边为变量名称,右边为存入变量的数据亦可将变量名称赋以空值(NIL) :e.g. (SETQ OCCUPATION NIL)要显示变量所储存的数据,可以使用内建函数PRINC(可用于绘图模式的指令行或AutoLISP程序),其语法如下:(PRINC 变量名称)e.g. COMMAND : (PRINC NAME) Result : David"David"在绘图模式中,亦可于指令行中使用感叹号! 来显示变量内容,或作为指令选项的输入值;语法如下: !变量名称e.g. COMMAND : !NAME Result : "David"在Visual LISP的主控台窗口中,于提示符号_$ 后键入要显示的变量名称_$变量名称e.g. _$NAME要检查变量所储存的数据型态,可使用内建函数TYPE;语法如下:(TYPE 变量名称)e.g. COMMAND : (TYPE NAME) Result : STR若检查的变量没有储存数据,则会传回NIL第5节--------------------------------------------------------------------------------练习(Exercises)将四个坐标分别存入四个变量中,并以LINE或PLINE指令,配合四个坐标变量,画出正四边形. COMMAND : (SETQ POINT1 (LIST 0 0) POINT2 (LIST 0 10) POINT3 (LIST 10 10) POINT4 (LIST 10 0)) COMMAND : LINE ;直线段指令COMMAND : !POINT1 ;第一点(左下角起点)COMMAND : !POINT2 ;第二点(左上角)COMMAND : !POINT3 ;第三点(右上角)COMMAND : !POINT4 ;第四点(右下角)COMMAND : C ;自动联机至起点以关闭四边形画圆: 将圆心坐标及半径长度分别存入两个变量中(变量名称及数据型态自订)COMMAND : (SETQ CEN (LIST 0 0) RAD 20) ;将圆心点设为坐标0,0;半径为20COMMAND : CIRCLE ;执行划圆指令Specify center.... : !CEN ;在提示后以变量CEN响应输入Specify radius.... : !RAD ;在提示后以变量RAD响应输入将不同型态的数据,分多次存入相同的变数内;每次均以PRINC及TYPE函数显示变量内容及其数据型态COMMAND : (SETQ TEMP 1.2) ;将实数1.2存入变数TEMPCOMMAND : !TEMP Result : 1.2COMMAND : (TYPE TEMP) Result : REALCOMMAND : (SETQ TEMP "AutoLISP") ;将字符串存入变量TEMPCOMMAND : !TEMP Result : "AutoLISP"COMMAND : (TYPE TEMP) Result : STR二数值资料第1节--------------------------------------------------------------------------------基本运算加函数(+ [数值参数1 数值参数2 ....] )e.g. (+ 2.5 4 6) Result : 12.5函数的结果为各参数之总和若仅提供一个参数,则以0加上此参数的结果为返回值若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数减函数(- [数值参数1 数值参数2 ....] )e.g. (- 10 2 3) Result : 5结果为第一个(最左边)参数减去其右边各参数的总和若只提供一个参数,返回值为0减去该参数的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数乘函数(* [数值参数1 数值参数2 ....] )结果为所有参数的乘积若只提供一个参数,则返回值为该参数乘以1的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数除函数(/ [数值参数1 数值参数2 ....] )e.g. (/ 24 2 3) Result : 4结果为第一个(最左边)参数除以其右边各参数的乘积若仅提供一个参数,则返回值为该参数除以1的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数注意: 在本篇教程中,各函数的数值参数,均可以变量(储存值只可以是整数或实数,且不可以是空值nil)取代第2节--------------------------------------------------------------------------------练习(Exercises)计算式(2+4)*3COMMAND : (* 3 (+ 2 4)) Result : 18计算式(50-8*5)/4COMMAND : (/ (- 50 (* 8 5)) 4) Result : 2注意: 上式的正确答案应是2.5,因为函数中的各参数均为整数,所以传回的结果亦为整数递增及递减递增(1+ 数值参数)e.g. (1+ 2) Result : 3递减(1- 数值参数)e.g. (1- 4) Result : 3三角函数(Trinagular Function)正弦值(SIN 弧度参数)e.g. (SIN 1) Result : 0.841471余弦值(COS 弧度参数)e.g. (COS 1) Result : 0.540302反正切值(A TAN 弧度参数)e.g. (ATAN 1) Result : 0.785398第3节--------------------------------------------------------------------------------其它数值处理次方值(EXPT 数值参数次方值)e.g. (EXPT 2 4) Result : 16若参数及次方值两个均为整数,返回值亦是整数;若其中一个为实数,结果为实数开方根(SQRT 数值参数)e.g. (SQRT 30) Result : 5.47723(ABS 数值参数)e.g. (ABS -123) Result : 123余数(REM [数值参数1 数值参数2 ....] )e.g. (REM 50 26 5) = (REM (REM 50 26) 5) Result : 4将参数1整除参数2的余数若参数多于2个时,则会将余数再整除下一个参数,再得出余数;依此类推若其中一个参数为实数时,则结果为实数;否则为整数最大公约数(GCD 数值参数1 数值参数2 )e.g. (GCD 81 57) Result : 3两个参数均必须为整数值型态自然对数(LOG 数值参数)e.g. (LOG 3.5) Result : 1.25276是EXP函数的反函数;传回值为实数型态自然反对数(EXP 数值参数)e.g. (EXP 1.25276) Result : 3.49999是LOG函数的反函数;传回值为实数型态第4节--------------------------------------------------------------------------------数值资料转型实数转整数(FIX 数值参数)e.g. (FIX 12.56) Result : 12只会截去小数部份(小数字不会4舍5入)整数转实数(FLOAT 数值参数)e.g. (FLOAT 12) Result : 12.0整数转字符串(ITOA 数值参数)e.g. (ITOA -17) Result : "-17"数值转字符串(RTOS 数值参数[模式[小数字] ] )e.g. (RTOS 17.23333 2 3) Result : 12.266若不设定模式,则依系统变量LUNITS 的设定值转换数值为字符串若不设定小数字,则依系统变量LUPREC 的设定值转换模式设定值可以是下列数值之一:1 = 科学记号2 = 十进制3 = 英呎及十进制英吋4 = 英呎及分数位英吋5 = 分数当选用的模式为3,4或5,则传回的字符串受系统变量UNITMODE影响(ANGTOS 角度参数[模式[小数字] ] )e.g. (ANGTOS 0.785398 0) Result : "45"e.g. (ANGTOS 0.785398 4) Result : "N 45d E"若不设定模式,则依系统变量AUNITS的设定值转换数值为字符串若不设定小数字,则依系统变量AUPREC的设定值转换模式设定值可以是下列数值之一:0 = 度1 = 度/分/秒2 = 分度量3 = 弪度4 = 土地测量单位当选用的模式为4,则传回的字符串受系统变量UNITMODE影响反函数为ANGTOF;参阅第5篇教程第5节--------------------------------------------------------------------------------数值资料检查数值(NUMBERP 数值参数)e.g. (NUMBERP -3.45) Result : Te.g. (NUMBERP "AutoLISP") Result : nil注意: 在范例的传回值中,T表示函数的结果为真(成立),nil表示结果为假(不成立)负数值(MINUSP 数值参数)e.g. (MINUSP -3.45) Result : Te.g. (MINUSP 0) Result : nile.g. (MINUSP 3.45) Result : nil零值(ZEROP 数值参数)e.g. (ZEROP 0) Result : Te.g. (ZEROP 3.45) Result : nil其它应用最大值(MAX [数值参数1 数值参数2 ....] )e.g. (MAX -88 5 2) Result : 5若没有提供任何参数,则传回值为0最小值(MIN [数值参数1 数值参数2 ....] )e.g. (MIN -88 5 2) Result : -88若没有提供任何参数,则传回值为0第6节--------------------------------------------------------------------------------练习(Exercises)计算下列算式:(+ 1234567890 1234567890) Result : -1825831516上式中两个数值参数均为整数,而结果值大于整数型态所能容许之范围;固导致发生溢位问题,产生无效的结果.修正算式如下: 只要将其中一个参数改为实数型态即可.(+ 1234567890.0 1234567890) Result : 2.46914e+009(+ 9876543210 1234567890) Result : 1.11111e+010上式中两个数值参数均为整数,但其中一个(第一个)参数巳大于整数型态所能容许之范围;系统会自动将此参数先行转为实数型态才计算.计算下列算式:(FIX (SQRT (+ 1 (MAX 20 10 40 30)))) Result : 6---- 最先执行的是最内层的算式(MAX 20 10 40 30) ,求出最大值为40---- 其次执行加函数,将MAX函数所得的最大值加1,结果为41---- 再利函数SQRT,将41开方根,结果为6.4031---- 最后使用FIX函数,截去其小数字,得到最后的结果为6三程序设计第1节--------------------------------------------------------------------------------使用者定义函数是将一群表示式组合成一个函数或指令可应用于绘图模式的指令行提示,Visual LISP主控台,或供其它自定义函数内的表示式呼叫使用AutoLISP原始程序代码均以纯文字格式存盘,扩展名为LSP(2000版可编译成扩展名为FAS的档案可以一般文字编辑器进行开发,如DOS的EDIT,WINDOWS的WORD或WORDPAD等一个自定函数内最少要有一个表达式在原程序文件(LSP)里,自定义函数以DEFUN函数开始;其语法如下:(DEFUN [C:] 函数名称( [自变量串行...] [/ 局部变数串行...] ) 表达式...)在呼叫带有自变量的自定函数时,必须同时提供与定义函数时,同等数量的参数,使各参数传入自定函数的各自变量中自变量被视为一种特殊类型的局部变量,无法用于该自定函数以外的其它函数若自定函数中无须设定任何自变量,亦必须以空串行( )加在函数名称之后若有提供局部变量,必须以斜线/ 加在局部变量的开头(即使前面没有自变量串行)各自变量,斜线,局部变量之间要以空格分隔;但与左右小括号之间则不须以空格分开若自变量串行中有相同名称的自变量出现,则会忽略第一个以后的相同自变量;变数亦是一样若在函数名称前加上C:,表示该函数可以在绘图模式的指令行提示下,其执行方式与内建函数相同;亦可以在任何内建命令(执行中)的提示后,以通透方式执行(但须将函数名称包在一对小括号中) 若在函数名称前没有加上C:,在指令行提示下,必须将函数名称包在一对小括号中才可执行不可以在执行一自定函数时,以通透方式执行另一自定函数第2节--------------------------------------------------------------------------------加载程序自定函数在使用前,都要将其所在的程序文件(扩展名为LSP)加载才可执行ACAD.LSP程序文件(预设在SUPPORT子目录内)会在启动AutoCAD时自动加载(LOAD "程序文件名称" [加载失败] )e.g. (LOAD "TEST")若程序文件之文件名为LSP,则在程序文件名称之后,可以不加上扩展名若有需要,系统会顺序尝试其它的扩展名: VLX FAS LSP若程序文件不在系统的支持目录下,则需在文件名前加上目录路径注意: 必须以正斜线/ 或两个反斜线\\ 作为目录的分隔符可以在加载失败的参数中提供字符串,以供加载失败时显示;亦可提供有效的自定函数,该函数在加载程序文件失败时会被执行注意:在程序文件加载后,在提示行显示的返回值,一般是该程序文件中,最后被定义的函数名称或是在程序文件内没有包含在自定函数中,最后一个表达式的执行结果第3节--------------------------------------------------------------------------------练习(Exercises)启动文字编辑器,编写一AutoLISP程序作两个同心圆(第1个圆半径为50,第2个圆半径为80),程序代码如下所示:(DEFUN C: 2CIRCLE () (SETQ CEN (LIST 0 0) RAD 50)(COMMAND CIRCLE CEN RAD)(COMMAND CIRCLE CEN (+ RAD 30)))---- 输入后以纯文字格式存盘(C:\TEST.LSP)---- 在AutoCAD绘图模式的指令行提示后,用LOAD函数将程序文件加载COMMAND : (LOAD "C:/TEST")---- 在指令行提示后,输入程序(函数)名称执行COMMAND : 2CIRCLE程序说明1 使用DEFUN建立自定函数的名称,并用SETQ函数将中心点(LIST 0 0)存入变数CEN,半径(50)存入变数RAD中2 使用COMMAND函数执行AutoCAD内建指令CIRCLE,并以变量CEN(圆的中心点)及变数RAD(圆的半径)回应3 与第2行大致相同,但在指定其半径时,先将储存半径的变量加30,使划出半径为80的圆;注意最右边的关括号,与第1行DEFUN左边的开括号是一对的启动文字编辑器,开启TEST.LSP程序文件,复制2CIRCLE至新程序2C,并改为传入自变量方式执行;程序代码如下:(DEFUN 2C (CEN RAD) (COMMAND CIRCLE CEN RAD)(COMMAND CIRCLE CEN (+ RAD 30)))---- 输入后以纯文字格式存盘---- 在AutoCAD绘图模式的指令行提示后,用LOAD函数将程序文件重新加载---- 在指令行提示后,输入程序(函数)名称执行COMMAND : (2C (LIST 0 0) 50)第4节--------------------------------------------------------------------------------批注单行批注分号;表示在分号右边(同一行)的字符均为批注,程序执行时会将其忽略多行批注;| |;表示在两个批注符号中间所有字符皆为批注,即使字符跨越多行关系运算在各个关系运算中,都会传回一逻辑值;若关系成立,传回T,否则会传回nil各参数可以是字符串,整数或实数型态;若以字符串进行比较,则会以字符串的ASCII码为准若函数中只有一个参数,传回值恒为T等于函数(= 参数1 [参数2 ....] )会将参数1与其后各个参数比较,若全部相等则传回T,否则传回nil e.g. (= 2 2.0) Result : T不等于函数(/= 参数1 [参数2 ....] )若参数1不等于其后任何一个参数,即传回T e.g. (/= 1 2.0) Result : Te.g. (/= "a" CHR(65)) Result : Te.g. (/= 10 30 40 10 20) Result : T小于函数(< 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均小于右边的参数,即传回Te.g. (< 1 2) Result : Te.g. (< "a" CHR(65)) Result : T大于函数(> 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均大于右边的参数,即传回Te.g. (> 1 2) Result : nile.g. (> "a" CHR(65)) Result : nil小于或等于函数(<= 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均小于或等于右边的参数,即传回Te.g. (<= 1 2) Result : Te.g. (<= 2 2) Result : Te.g. (<= "a" CHR(65)) Result : T大于或等于函数(>= 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均大于或等于右边的参数,即传回Te.g. (>= 1 2) Result : nile.g. (>= 2 2) Result : Te.g. (>= "a" CHR(65)) Result : nil第5节--------------------------------------------------------------------------------逻辑运算且运算(AND [表达式....] )若各表达式的传回值均为T,函数即返回T 值;若其中一个传回值为nil,函数传回nile.g. (AND (< 1 2) (> 8 5)) Result : T或运算(OR [表达式....] )若各表达式的传回值均为nil,函数即返回nil 值;若其中一个传回值为T,函数传回Te.g. (OR (> 1 2) (> 8 5)) Result : T否定运算(NOT 表达式)若表达式的传回值为T,函数即返回nil 值;相反若表达式传回值为nil,函数传回T 可用于检查传回值是否为nil另有一NULL函数与NOT函数功能相似e.g. (NOT (< 1 2)) Result : nil练习(Exercises)COMMAND : (= (- 50 25) (SQRT 625)) Result : T设计一简单程序(名称为AIR),在呼叫程序时,检查传入的数值自变量(为空气污染指数)是否大于200(即严重空气污染)---- 启动文字编辑器,开启TEST.LSP程序文件,输入下列程序代码:(DEFUN AIR (NUM) (> NUM 200))---- 输入后存盘(纯文字格式)---- 在AutoCAD绘图模式的指令行提示符号后,使用LOAD函数重新加载程序文件COMMAND : (LOAD "C:/TEST")---- 在AutoCAD绘图模式的指令行提示符号后,输入自定函数名称及参数执行COMMAND : (AIR 175) Result : nilCOMMAND : (AIR 215) Result : T四流程控制第1节--------------------------------------------------------------------------------条件判断是利用条件函数,配合关系及逻辑运算所设定的一些准则,令程序自行分析,因应情况作出适当行动.单一条件(IF 条件表达式是表达式[否表达式] )函数先检查条件表达式,若其传回值为T,便会执行其后的是表达式若有提供否表达式,且条件表达式的传回值为nil,函数将不会执行(跳过)是表达式而执行否表达式若没有提供否表达式,且条件表达式的传回值为nil时,函数将不作任何事情IF函数可以巢状方式嵌套,即在是或否的表达式中加入另一个IF函数练习(Exercises)判断空气污染指数: 大于100 = Very High, 51至100 = High, 26至50 = Medium, 25或以下= Low---- 启动编辑器,开启C:/TEST.LSP程序文件;新增AIR-1自定函数,程序代码如下:(DEFUN AIR-1 (NUM) (IF (> NUM 100) (PRINC "Very High"))(IF (AND (> NUM 50) (<= NUM 100)) (PRINC "High"))(IF (AND (> NUM 25) (<= NUM 50)) (PRINC "Medium"))(IF (<= NUM 25)) (PRINC "Low"))(PRINC))程序说明1 设定函数名称,并将数据存入自变量NUM内;用IF函数判断变量NUM是否大于100;若是则显示字符串Very High响应2 用IF函数判断变量NUM是否大于50且(AND)小于或等于100;若是则显示High响应3 用IF函数判断变量NUM是否大于25且(AND)小于或等于50;若是则显示Medium4 用IF函数判断变量NUM是否小于或等于25;若是则显示Low5 是一个没有提供任何自变量的PRINC函数;用以抑制显示答案时尾部符加的nil 或重复的传回值;而最右一个关括号,是用以对应第1行最左边的开括号IF函数的巢状练习: 修改上一课的程序练习,将多个IF函数合并成巢状嵌套---- 启动文字编辑器,开启C:/TEST.LSP程序文件---- 新增程序AIR-2,其程序代码如下:(DEFUN AIR-2 (NUM) (IF (> NUM 50) (PRINC (IF (> NUM 100) "Very high" "High"))(PRINC (IF (> NUM 25) "Medium" "Low")))(PRINC))程序说明1 设定函数名称,并将数据存入自变量NUM内;用IF函数判断变量NUM是否大于50;若条件成立(变量NUM大于50)时,再用另一个IF函数判断变量是否大于100;若条件成立(变量NUM大于100)时,使用PRINC函数显示字符串Very High,否则显示High2 若在第1个IF函数判断中,条件不成立(变量NUM不大于50)时;再用另一个IF函数判断变量是否大于25;若条件成立(NUM大于25)时,显示字符串Medium,否则显示字符串Low3 是一个没有提供任何自变量的PRINC函数;用以抑制显示答案时尾部符加的nil 或重复的传回值;而最右一个关括号,是用以对应第1行最左边的开括号注意:第1行最后一个关括号是对应前面的PRINC函数,尾2的关括号则是对应IF函数(判断NUM是否大于100)第2行最后一个关括号是对应第1行的IF函数(判断NUM是否大于50),尾2的关括号则是对应PRINC 函数,尾3的关括号则是对应IF函数(判断NUM是否大于25)最右边的关括号是对应第1行最左边的开括号PROGN 函数在以上各范例中,执行的表达式均为单一的函数运算;若要在表达式中顺序执行一连串的函数,便要将各函数包含在一个PROGN函数内;函数的传回值会是该PROGN函数中,最后一个表达式的运算结果---- 修改TEST.LSP程序文件的AIR-1程序,第1个IF函数如下,其余的IF函数请自行修改e.g. (IF (> NUM 100) (PROGN (SETQ DISP "Very High") (PRINC DISP)))注意: 最后一个关括号是对应前面的IF函数(判断变量NUM是否大于100)尾2的关括号是对应PROGN函数(用以包含SETQ及PRINC函数)尾3的关括号是对应PRINC函数的第2节--------------------------------------------------------------------------------条件判断多重条件(COND [ (条件表达式是表达式) ....] )函数会顺序检查各条件表达式;直到其中一个条件成立(传回T),即执行该条件式所对应的是表达式每个条件表达式只对应一个是表达式,而没有否表达式若条件式成立且执行对应的是表达式后,则不会再对余下的其它条件表达式进行检查若只有条件表达式而没有对应之是表达式,则只会传回条件表达式的逻辑值若没有提供任何条件表达式及是表达式,函数传回值恒为nil练习(Exercises)新增程序AIR-3,以改善上一课AIR-1程序;用一个COND函数判断多个条件表达式DEFUN AIR-3 (NUM) (COND((> NUM 200) (PRINC "Severe"))((> NUM 100) (PRINC "Very High"))((> NUM 50) (PRINC "High"))((> NUM 25) (PRINC "Medium"))((> NUM 0) (PRINC "Low"))(T (PRINC "Cannot Check")))(PRINC))程序说明1 设定函数名称,并将数据存入自变量NUM内;用COND函数进行多重判断2 判断变量NUM是否大于200,若条件成立,则显示Severe 讯息;第3至6行依此类推7 注意条件式为一个T 字母,表示条件式恒为真(成立),显示讯息Cannot Check作用是当以上各条件式均不成立时(变量小于或等于0),即执行此一表达式第3节--------------------------------------------------------------------------------循环(Loop)配合条件判断,关系及逻辑运算,令程序不断重复一些动作,以提高效率及减少重复动作时的人为错误可以多个循环形成巢状(嵌套式)循环,即在一个循环内嵌套另一个(或多个)循环指定的重复次数必须为正整数,亦可以是储存正整数的变量名称重复指定次数(REPEAT 重复次数[表达式....] )e.g. (REPEAT 10 (PRINC "David")) ;重复显示David字符串10次重复(WHILE 条件表达式[是表达式....] )若条件表达式的传回值为T,即会顺序执行函数内各表达式各表达式顺序执行完后,程序会返回函数的开头,重新检查条件表达式的传回值若条件表达式的传回值为nil,函数内各表达式将不会被执行e.g. (SETQ COUNT 1) ;将1存入变数COUNT(WHILE (<= COUNT 10) ;WHILE函数并检查变量COUNT是否<=10(PRINC "David") ;若条件成立则以PRINC函数显示David字符串(SETQ COUNT (1+ COUNT))) ;变量COUNT递增1,并将新值重新存入变量COUNT中取代原值注意: 第4行最右边的关括号,是对应第2行WHILE函数的开括号无限循环又称为死循环,即循环的条件判断式传回值恒为T,令循环不断重复而无法结束;在上例中:---- 若WHILE函数的条件表达式设定为(T) ;即条件永远成立---- 不作SETQ函数,或不将变量COUNT递增;变量COUNT储存值恒久不变,导致条件式永远成立第4节--------------------------------------------------------------------------------练习(Exercises)编写一程序SUM并将自变量存在NUM变量内,计算1+2+3+4 ....至变数NUM的总和(DEFUN SUM (NUM) (SETQ COUNT 1 TOTAL 0)(WHILE (<= COUNT NUM)(SETQ TOTAL (+ TOTAL COUNT)COUNT (1+ COUNT)))(PRINC TOTAL) (PRINC))程序说明1 设定函数SUM并将自变量存入变量NUM,设定变量COUNT以将数目由1开始递增,变量TOTAL(储存总和)初始值为0。
文章编号:100926825(2002)0420159202用Auto LISP 语言编程实现参数化绘图收稿日期:2002201222作者简介:康保成(19552),男,1987年毕业于广东教育学院工程图学专业,高级讲师,太原理工大学轻纺工程与美术学院,山西晋中 030600康保成摘 要:简要介绍Auto LISP 语言在Auto C AD 环境下实现参数绘图的应用状况。
对建筑制图中绘制楼梯台阶进行分析,并结合Auto LISP 语言编程特点,编制了Auto LISP 程序,顺利完成楼梯台阶的绘制过程,达到利用参数输入形式,严格、准确、快捷地完成绘图工作目的,还为在Auto C AD 环境下绘制形状相同、尺寸不同的系列图形提供了方便。
关键词:Auto LISP ,Auto C AD ,楼梯台阶中图分类号:T U20114文献标识码:A引言随着时代的进步,计算机辅助设计发展迅猛,全面取代传统的丁字尺加图板的手工绘图方式已成必然。
这种势头给各行各业都带来了冲击,从早年间颁布的红头文件可见一斑。
可以毫不夸张地说,对于作为衡量素质标准的计算机辅助设计,不能等闲视之。
Auto C AD 作为C AD 的工具,是一个功能极强的计算机辅助设计、绘图的通用软件包。
如今Auto C AD 在各部门得到广泛应用。
Auto C AD 实际上已经成为一种微机C AD 系统的标准,工程设计人员之间交流设计思想的公共语言。
Auto C AD 之所以得到如此广泛的应用,除了它功能强大,易学易用外,还在于它是一个开放的、交互式的软件。
用户可以编写Auto LISP 、ADS 或ARX 应用程序,作为新的命令,实现特定用户的特殊需要,或对AutoC AD 做一些二次开发和应用,以使用户更方便、快捷地满足工作要求。
1 问题的提出正如前面所述,Auto C AD 在各个领域都得到了广泛的应用,可见其通用性是很强的;但它在一些领域的某些方面还有不尽人意的地方。
文章编号:100926825(2007)1220362203AutoL ISP 在测绘图形处理中的应用收稿日期:2006211214作者简介:李朝阳(19742),男,工程师,郑州市水利建筑勘测设计院,河南郑州 450006苏振辉(19822),男,助理工程师,郑州市水利建筑勘测设计院,河南郑州 450006李朝阳 苏振辉摘 要:介绍了AutoL ISP 语言的特点和优点,阐述了AutoL ISP 语言在测绘图形处理中的应用,说明了该语言对于批量处理图形和数据方面的几种典型应用,并分析了相应的思路和方法,从而为测绘事业做出更多的贡献。
关键词:AutoL ISP 语言,应用,测绘图形,图纸资料中图分类号:TP391.3文献标识码:A 近年来,测绘领域内机助制图的研究取得了飞速发展,通过绘图机输出的图形从过去简单的工程制图到现在的各种比例尺的地形图、地藉图、宗地图,以及非常复杂的小比例尺土地利用现状图等。
在众多的绘图系统中,人们普遍采用的基础绘图软件是美国Autodesk 公司的AutoCAD ,因为该软件不仅具有丰富的绘图命令,还具有强大的图形编辑功能,而且软件运行相当稳定。
但是熟悉AutoCAD 的人都知道,要用好AutoCAD ,不但要熟练掌握其各项命令,而且要熟练掌握AutoCAD 提供的数据交换文件SCR ,DXF 和嵌入AutoCAD 内部的高级语言———AutoL ISP 语言,这样使您对各种图形,尤其对复杂的图形更加得心应手。
AutoL ISP 是一种人工智能语言,是嵌入AutoCAD 内部的COMMON L ISP 的一个子集。
在AutoCAD 的二次开发工具中,它是唯一的一种解释型语言,使用AutoL ISP 可直接调用几乎所有的AutoCAD 命令。
AutoL ISP 具有以下优点:1)语言规则十分简单,易学易用;2)直接针对AutoCAD ,易于交互;3)解释执行,立竿见影。
利用Auto LISP提高机械设计CAD绘图效率闵旭光1,熊中侃2(1.南昌高等专科学校机电系,江西南昌 330008;2.南昌高等专科学校计算机系,江西南昌 330008)摘 要:介绍了一种利用Auto LISP语言编程,提高机械设计C AD绘图效率的方法。
关键词:Auto LISP;C AD绘图;机械设计;制图中图分类号:TP391.72 文献标识码:A 文章编号:1008-7354(2005)01-0079-02 在零部件较多(有时达到上百个零件)的机械装置(例如发电机组、级进模、自动装配机等)设计中,一般都要给零部件分层。
比如:部件1、2、3……;零件101、102、103……或201、202、203……;等等。
在装配图设计中相邻零件(图层)颜色也要设置成不同,以便于零件间的区别。
并且在设计中需要经常打开或关闭某些图层,改变线型等等。
虽然利用AutoC AD的CH(Change)等某些命令可以达到这些目的,但在执行过程中,都需要操作两步以上,较繁琐。
为此,我们利用Auto LISP,编制了一个程序,经使用验证,能较好地提高机械设计,特别是零部件较多时的C AD绘图效率,该程序如下:;TF33333turn on previous turn off(defun c:TF()(command″layer″″f″″3″″″));AN33333thaw a layer(defun c:AN(/x)(setvar″cmdecho″0)(setq x(getstring″\n input thaw layer name:″))(command″layer″″thaw″x″″)(setvar″cmdecho″1));AF33333freeze a layer(defun c:AF(/x)(setq x(entsel″\n select freeze layer:″))(com mand″layer″″freeze″(cdr(ass oc8(entget(car x))))″″));T N33333all of layer turn on(defun c:T N()(command″layer″″t″″3″″on″″3″″u″″3″″″)(command″layer″″off″″opaper f″″″)(princ));C N33333change selected layer to a new layer(defun c:C N()(graphscr)(setvar″cmdecho″0)(prom pt″\nEntities to be changed:″)(setq e1(ssget))(setq mylayer(getstring″input new layer name:″))(setq oldla(getvar″clayer″))(command″layer″″make″mylayer″″)(setq e2(cons8mylayer))(setq i0)(repeat(sslength e1)(setq e4(entget(ssname e1i)))(setq e5(ass oc8e4))(setq e4(subst e2e5e4))(entm od e4)(setq i(l+i)))(princ″\nAll selected entities change to layer″)(princ(cdr e2))(princ));C A33333change current layer to match an enti2 ty’s layer3333(defun c:C A(/x)(setq x(entsel″\n select object which layer is to be matched:″))(command″layer″″s″(cdr(ass oc8(entget(car x))))″″)(command″layer″″u″(cdr(ass oc8(entget(car x))))″″));CC33333change layer’s color3333(defun c:CC(/x)(setvar″cmdecho″0)(setq x(entsel″\n select a layer to be changing col2 or:″))(command″layer″″c″(acad-colordlg7)(cdr(ass oc8 (entget(car x))))″″)(setvar″cmdecho″1));LC33333change properties to be center line33 33南昌高专学报 2005年第1期(总第56期) 2005年2月出版Journal o f Nanchang Junior College No.1(Sum56)Feb.200579 收稿日期:2004-08-28(defun c:LC()(ssget)(command″chprop″″p″″″″c″6″lt″″center″″″)(princ));LP33333change properties to be divide line33 33(defun c:LP()(ssget)(command″chprop″″p″″″″c″2″lt″″phantom″″″));LD33333change properties to be dashed line33 33(defun c:LD()(ssget)(command″chprop″″p″″″″c″4″lt″″dashed″″″));LG33333change properties to be color=3(defun c:LG()(ssget)(command″chprop″″p″″″″c″3″″));LR33333change properties to be color=1(defun c:LR()(ssget)(command″chprop″″p″″″″c″1″″));LY33333change properties to be color=2(defun c:LY()(ssget)(command″chprop″″p″″″″c″2″″));LB33333change properties to be color=5(defun c:LB()(ssget)(command″chprop″″p″″″″c″5″″));LC O33333change properties to be bylayer&line2 type=continue3333(defun c:LC O()(ssget)(command″chprop″″p″″″″c″″bylayer″″lt″″bylayer″″″))以上程序先写在记事本文档中,取个名如:min.lsp,再存到AutoC AD2002或AutoC AD2004的目录S UPPORT 下,并打开acadr2002.lsp或acad2004.lsp,在该程序最后增加:(load″min.lsp″)(princ)存盘后,退出,重新启动计算机即可使用该Auto LISP 程序了。
实现CAD绘图与LISP编程的自动化技巧CAD(计算机辅助设计)是一种广泛应用于工程和建筑行业的软件工具,而LISP(LISt Processing)则是一种编程语言,经常用于CAD 软件中进行自动化任务和定制。
在CAD绘图中,使用LISP编程可以极大提高工作效率,加快绘图速度并减少出错概率。
下面,我们将介绍一些实现CAD绘图与LISP编程的自动化技巧。
1. 使用LISP编写简单命令LISP语言在CAD软件中被广泛应用,因其简洁、灵活和强大的功能而备受赞誉。
可以利用LISP编写一些简单的命令,以自动完成一些常见的绘图任务。
例如,我们可以编写一段LISP代码,用于创建一个特定大小和形状的矩形或圆形,并将其放置在指定位置。
2. 利用LISP实现参数化绘图参数化绘图是CAD绘图中常见的需求,它可以根据一组参数值自动生成特定形状和尺寸的图形。
利用LISP编程可以方便地实现参数化绘图。
通过定义参数,并使用LISP代码控制参数值,可以在绘图过程中灵活地调整形状和尺寸,提高工作效率。
3. 利用LISP编写循环和逻辑语句LISP编程强大之处在于其循环和逻辑语句的灵活性。
通过编写循环和逻辑语句,可以实现复杂的绘图任务,如图形的重复、数组的生成等。
例如,我们可以使用循环语句自动生成一系列具有相同属性但位置不同的图形。
4. 利用LISP批处理CAD命令CAD软件中的批处理命令可以用于自动执行一系列CAD操作,如创建图层、更改对象属性等。
利用LISP编程可以轻松地实现批处理CAD命令。
通过编写LISP代码,将多个CAD命令组合在一起,可以以一次性的方式自动执行这些命令,从而减少人为干预。
5. 利用LISP创建自定义CAD函数和命令除了使用CAD软件中已有的命令,我们还可以通过LISP编程自定义CAD函数和命令,以满足特定的需求。
通过编写LISP代码,可以根据自己的需要定义函数和命令,从而实现更高级和复杂的CAD绘图操作。
收稿日期:2018年1月在绘制系列化产品设计图样时,因为包含着许多形状结构相似但参数不同的零件,使设计人员不可避免地要进行大量重复性绘图工作,导致工作效率低下。
要解决这个问题,可以在AutoCAD 软件平台上应用其内嵌的AutoLISP 语言进行编程二次开发,依据国家标准和行业标准,结合企业自身特点,自定义绘图命令,实现参数化绘图设计。
1AutoLISP 语言AutoCAD 作为Autodesk 公司推出的一种通用的计算机辅助设计和图形处理软件,具有易于掌握、使用方便、绘图精确和体系结构开放等优点。
AutoCAD 以强大的绘图功能和便利的交互式操作风格深受广大科技人员的青睐,是现在普遍使用的计算机辅助设计软件,已广泛应用于机械、建筑、电子、化工、航空、航天等领域。
AutoCAD 的缺点是专业性、针对性不强,因此Autodesk 公司在AutoCAD 2.18版及之后的版本中内嵌了AutoLISP 语言编程开发工具[1-3]。
AutoLISP 是LISP 语言的一个分支,具有很强的数据表格处理功能,它与AutoCAD 绘图命令相结合,可以存取和修改AutoCAD 图形实体数据,存取AutoCAD 的块表、层表、视图表、字体表及线型表,控制AutoCAD 图形屏幕和设备输入等,并可直接调用全部的AutoCAD 命令[4]。
相比其它编程语言,AutoLISP 语言简便易学,既具有一般高级语言的基本结构和功能,又具有一般高级语言所没有的强大图形处理功能,是应用AutoCAD 的一种重要手段[5]。
2参数化绘图设计步骤所谓参数化绘图设计,是指绘图平台能够根据用户输入的相关参数信息,自动生成所需的图样,要求设计或开发人员事先根据所要绘制的零件结构及图样进行相应的程序设计。
参数化绘图设计可以遵循以下步骤。
(1)分析结构特征,确定绘图参数,将既能体现零件结构特征,又能推导出其它尺寸的基本尺寸确定为绘图参数,参数应简洁明了[6]。
1概述AutoCAD是美国AutoDesk公司开发的一个交互式绘图软件,它不仅具有强大的绘图、编辑功能,还具有开放的体系结构,允许用户通过内置的AutoLISP语言实现二次开发。
在CAD的二次开发中,参数化绘图是其中的一项,它可以让设计者自己通过修改设计参数来制作产品零件的模型图形。
参数化绘图已经从传统的模式中摆脱出来,全面的简化了使用者对零件模型的修改过程,从而提高了效率。
2AutoLISP语言特点AutoLISP是一种内嵌式表处理语言,是CAD开放式体系结构的一种体现,同时也是LISP(List Processor)语言和CAD相结合的产物。
AutoLISP语言不仅拥有普通的高级语言所具备的功能,而且还有普通的高级语言所不具备的强大的处理图形的功能。
它最大的好处在于语法简单易懂,易于掌握,可直接调用几乎全部AutoCAD命令,因此被广泛应用于AutoCAD二次开发上。
AutoLISP语言最典型的应用之一就是实现参数化绘图程序设计。
3参数化绘图设计方案3.1绘图对象的选择任何机器或部件都是由若干零件按一定的技术要求装配而成。
零件分为标准件和非标准件两大类。
标准件的结构和尺寸都由标准系列确定,通常由专业厂家生产;而非标准件的结构、形状、大小等需要根据它们在机器或部件中的作用进行设计确定,据此画出每个零件的零件图,以便加工制造。
底板是箱体类零件的一个组成部分,主要起连接、固定零件的作用,一般由中心孔、定位销孔、槽孔等组成,不同的零件,其底板的大小、形状、定位销孔的数量也不同,这些都可以通过改变程序中的设计参数来实现。
在此,以非标准零件中常见的箱体类零件的矩形应用AutoLISP实现AutoCAD参数化绘图王伯黎张兴蓉宜宾职业技术学院四川宜宾644003摘要:通过对AutoLISP语言特点的研究,探讨了基于AutoLisp的AutoCAD参数化绘图程序设计的基本步骤。
以底板参数化绘图为例,详细阐述了应用DCL创建人机交流对话框,应用AutoLISP编写参数化绘图程序的具体过程。
实验四、五用AutoCADLISP语言编程绘图
1)图(feature a):将P0点,旋转角(指整个轴),轴径,导角宽做为输入参数,用AutoCADLISP 语言绘出该图。
2)图(feature b):将P0点,旋转角(指整个轴),轴径,轴段宽做为输入参数,用AutoCADLISP 语言绘出该图。
3)图(feature c):将P0点,旋转角(指整个轴),轴径,退刀槽宽处轴径,退刀槽宽做为输入参数,用AutoCADLISP语言绘出该图。
4)图(feature d):将P0点,旋转角(指整个轴),轴径,轴段宽做为输入参数,用AutoCADLISP 语言绘出该图。
5)图(feature e):将P0点,旋转角(指整个轴),轴径,轴段宽,圆角半径做为输入参数,用AutoCADLISP语言绘出该图。
6)图(feature f):将P0点,旋转角(指整个轴),轴径,键槽宽,键槽处轴径做为输入参数,用AutoCADLISP语言绘出该图。
7)图(feature g):将P0点,旋转角(指整个轴),键槽长,键槽宽做为输入参数,用AutoCADLISP语言绘出该图。
要求:将上机调试通过的程序写在纸上交上来,并将程序保存好,以后实验还要用。
最好用U盘保存。
用LISP语言自定义AutoCAD命令LISPAutoCADAutoLISP语言作为AutoCAD的二次开发工具,虽然在功能、运行速度和保密性等方面比起ARX等工具要逊色一些,但由于它易学易用,交互性好,灵活性强,对于那些经常使用AutoCAD进行绘图的普通用户来说,不失为一种理想的开发工具。
下面就介绍用AutoLISP语言自定义的几个AutoCAD绘图命令,可以起到简化操作、提高作图效率的作用。
一、键槽尺寸视图的绘制命令“jct”在绘制轴、齿轮或带轮等零件图时,经常需要画轴上键槽处的剖视图或轮毂键槽的端面视图,比较麻烦;由于键槽的尺寸随轴径的变化而变化,所以我们可以用LISP程序来实现自动绘图。
加载下面的程序,在命令行中键入”jct”并回车,通过人机交互的形式输入有关参数,可自动完成轴上键槽的剖视图和轮毂键槽的端面视图的绘制。
代码示例如下所示。
(defun C:jct ()(setq pt0 (getpoint "\n 请输入视图的中心位置点:"))(initget 7)(setq loop T)(while loop(setq d (getreal "\n 请输入键槽处的轴径(12<d<130)(mm):"))(if(or (< d 12) (> d 130))(alert "轴径数据输入错误!\n\n请重新输入!")(setq loop nil));if);while(cond;根据轴径检索键槽尺寸((and (> d 12) (<= d 17)) (setq b 5 t1 3.0 t2 2.3));b表示键槽的宽度((and (> d 17) (<= d 22)) (setq b 6 t1 3.5 t2 2.8));t1表示轴上键槽的深度((and (> d 22) (<= d 30)) (setq b 8 t1 4.0 t2 3.3));t2表示轮毂上键槽的高度((and (> d 30) (<= d 38)) (setq b 10 t1 5.0 t2 3.3))((and (> d 38) (<= d 44)) (setq b 12 t1 5.0 t2 3.3))((and (> d 44) (<= d 50)) (setq b 14 t1 5.5 t2 3.8))((and (> d 50) (<= d 58)) (setq b 16 t1 6.0 t2 4.3))((and (> d 58) (<= d 65)) (setq b 18 t1 7.0 t2 4.4))((and (> d 65) (<= d 75)) (setq b 20 t1 7.5 t2 4.9))((and (> d 75) (<= d 85)) (setq b 22 t1 9.0 t2 5.4))((and (> d 85) (<= d 95)) (setq b 25 t1 9.0 t2 5.4))((and (> d 95) (<= d 110)) (setq b 28 t1 10.0 t2 6.4))((and (> d 110) (<= d 130)) (setq b 32 t1 11.0 t2 7.4)))(command "circle" pt0 "d" d)(command "zoom" "a")(setq s1 (ssget "l" ))(setq di (-(* (/ d 2.0) (/ d 2.0)) (* (/ b 2.0) (/ b 2.0)))dx (sqrt di)dy (/ b 2.0)pt1 (list (+ (car pt0) dx) (+ (cadr pt0) dy)))(initget "Zc Lc");Zc表示画轴键槽的剖视图,Lc表示画轮毂键槽的端面视图(setq zrl (getkword "\n 画轴键槽的剖视图还是轮毂键槽的端面视图(Z/L)?"))(if (= zrl "Zc")(progn;计算轴键槽上点的坐标(setq pt2 (list (+ (car pt0) (-(/ d 2.0) t1)) (+ (cadr pt0) dy)) pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 0 (- dx (- (/ d 2.0) t1)))));progn);if(if (= zrl "Lc")(progn;计算轮毂键槽上点的坐标(setq pt2 (list (+ (car pt0) (+(/ d 2.0) t2)) (+ (cadr pt0) dy)) pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 (- pi) (- (+ (/ d 2.0) t2) dx))));progn);if(command "pline" pt1 pt2 pt3 pt4 "");画键槽(setq s2 (ssget "l"))(command "layer" "m" 5 "l" "center" 5 "c" 1 5 "")(command "ltscale" 8)(command "line" (polar pt0 (- pi) (+ (/ d 2.0) 10));画中心线(polar pt0 0 (+ (/ d 2.0) 10)) "")(command "line" (polar pt0 (-(/ pi 2.0)) (+ (/ d 2.0) 10))(polar pt0 (/ pi 2.0) (+ (/ d 2.0) 10)) "")(command "layer" "s" 0 "")(if (= zrl "Zc")(progn(setq s3 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s3 "");修剪形成键槽(command "hatch" "U" "45" "2" "n" s1 s2 ""));画轴上键槽处剖视图的剖面线);if(if (= zrl "Lc")(progn(setq s4 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s4 "");修剪形成键槽(command "rotate" s1 s2 "" pt0 90));将轮毂键槽的端面视图旋转90度);if);end defun二、螺纹孔剖视图的绘制命令“lwk”在绘制机械零件图时,经常要画螺纹孔的剖视图,同样由于螺纹孔的有关尺寸都随螺纹的公称直径而变化,我们可以用下面的程序自动完成其剖视图的绘制。
用Auto LISP语言编程实现参数化绘图
康保成
【期刊名称】《山西建筑》
【年(卷),期】2002(028)004
【摘要】简要介绍Auto LISP语言在Auto CAD环境下实现参数绘图的应用状况.对建筑制图中绘制楼梯台阶进行分析,并结合Auto LISP语言编程特点,编制了
Auto LISP程序,顺利完成楼梯台阶的绘制过程,达到利用参数输入形式,严格、准确、快捷地完成绘图工作目的,还为在Auto CAD环境下绘制形状相同、尺寸不同的系
列图形提供了方便.
【总页数】2页(P159-160)
【作者】康保成
【作者单位】太原理工大学轻纺工程与美术学院,山西晋中,030600
【正文语种】中文
【中图分类】TU201.4
【相关文献】
1.利用Auto LISP语言编程辅助计算机绘图 [J], 田育广
2.基于AutoLISP语言的参数化绘图设计 [J], 周华勇;张红梅;王录林
3.用AUTO LISP语言实现鄂式破碎机参数化绘图 [J], 欧阳镇堂;郭年琴;黄跃飞
4.应用Auto LISP语言编程实现参数化修改Auto CAD图形 [J], 关吉尧
5.应用Auto lisp语言实现圆锥齿轮参数化自动绘图 [J], 王鸿钧;熊伟;苏艳萍
因版权原因,仅展示原文概要,查看原文内容请购买。