AutoLISP-程序创建过程
AutoLisp入门篇
![AutoLisp入门篇](https://img.taocdn.com/s3/m/b70ef1c489eb172ded63b722.png)
AutoLISP入门单元一:AutoLISP主角登场 (2)单元二:AutoLISP的关键、基本结构及语法 (4)单元三:快速分类浏览AutoLISP功能函数(一) (10)单元四:快速分类浏览AutoLISP功能函数(二) (13)单元五:轻松快速的掌握AutoLISP设计技巧 (16)单元六:像素数据的取得与活用技巧(一) (21)单元七:像素数据的取得与活用技巧(二) (25)单元八:新手上路-参数设计的关键技巧 (32)单元一:AutoLISP主角登场一. AutoLISP 是何方神圣?1、AutoLISP是AutoCAD的最佳拍檔!2、AutoLISP内含于AutoCAD软件内,不用另外花钱买!3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』!4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能!若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张!5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷!二. AutoLISP 程序语言的特质分析:学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序!语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格!功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已!撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感!横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行!三.撰写AutoLISP 的动机?1、欲强化AutoCAD 原有指令时.2、欲创造更有用的AutoCAD 新指令.3、欲简化繁琐的环境设定或绘图步骤时.4、欲处理参数式绘图时.5、欲做图面资料读文件、写文件.6、欲做AutoCAD 简报展示时.7、欲达到真正灵活掌控AutoCAD 时.8、欲提升自己跨上AutoCAD 高手列车时.四.AutoLISP 的效益评估?1. 对公司负责人或设计主管而言:A. 也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沈思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』!B. 若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受训,学习更好的设计技巧与创意呢?!C. 千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍了公司计算机化进步的罪魁祸首D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD 支持软件。
AutoLisp程序设计教程
![AutoLisp程序设计教程](https://img.taocdn.com/s3/m/715edd75a26925c52cc5bfec.png)
常用内部函数(5)
9.主要的交互输入函数 (1)(getangle [pt] [msg]):等待用户输入角度 (2) (getcorner [pt] [msg]):等待用户输入一个角点 (3) (getdist [pt] [msg]):等待用户输入一个距离 (4) (getpoint [pt] [msg]):等待用户输入一个点
应用实例2:画旋转矩形
(defun c:rect2( ) (setq p1 (getpoint "\n 请输入矩形的一个角点:")) (setq w (getdist p1 "\n 请输入矩形的长:")) (setq h (getdist p1 "\n 请输入矩形的宽:")) (setq alf (getangle p1 "\n 请输入矩形的旋转角:")) ;交互方式输入各个参数 (setq p2 (polar p1 alf w)) (setq p3 (polar p2 (+ alf (* 0.5 pi)) h)) (setq p4 (polar p1 (+ alf (* 0.5 pi)) h)) (command "pline" p1 p2 p3 p4 "c") )
流程控制(分支结构)
(2) (if 测试条件表达式 表达式1 [表达式2]) 如果测试表达式结果为真,则执行表达式1, 否则执行表达式2。 如 (if (>a 1) (setq b 2) ;如果a>1,则b=2 (if (>a 1) (setq b 2) (setq b 3);如果a>1,则b=2, 否则 b=3
AutoLISP编程
![AutoLISP编程](https://img.taocdn.com/s3/m/3386f2630b1c59eef8c7b4ae.png)
第4 3章 A u t o L I S P编程为了使用A u t o L I S P,你必须学会如何使用A u t o L I S P中的函数,还必须学习A u t o L I S P编程。
结束这一章之后,你应该会:• 实现基本的A u t o L I S P编程。
• 分析A u t o L I S P程序。
• 在A u t o C A D中使用A u t o L I S P程序。
43.1 AutoLISP基础A u t o L I S P编程可以非常简单,也可以非常复杂。
A u t o L I S P程序由一系列指令构成。
A u t o L I S P编程语言包含许多对你的工作非常有用的函数,并内置于A u t o C A D之中。
让我们先看一看这部分。
43.1.1 算术函数你可以用A u t o L I S P进行算术运算。
启动 A u t o C A D,我们可以在命令行中直接使用A u t o L I S P子程。
在命令行,直接键入以下命令,并确保包括括号和空格。
Command: (+ 5 4)9注意这时A u t o C A D返回了值9。
这是一个简单的5加4的算术运算,并在屏幕上显示出结果。
继续键入以下加、减、乘、除算式并注意结果。
Command: (- 100 40)Command: (* 5 6)Command: (/ 100 20)注意A u t o L I S P子程在命令行中被键入时的括号。
括号告诉A u t o C A D这是一个A u t o L I S P子程。
当A u t o C A D检测到一个左括号时,它就把之后的文本交给A u t o L I S P处理。
右括号表明了语句的结束。
在A u t o C A D提示“1 >”时,你需要键入一个右括号,然后回车。
这一提示说明缺少右括号与左括号相配。
如果想测试这一情况,可以键入前面的语句,并省略右括号。
43.1.2 AutoLISP与A u t o C A D命令A u t o C A D命令可以在A u t o L I S P子程中使用。
第五章第二节AUTOLISP程序设计简介
![第五章第二节AUTOLISP程序设计简介](https://img.taocdn.com/s3/m/6e896069fe4733687e21aab8.png)
§5.2 AutoLISP程序设计一、概述LISP语言(List Processing Language的缩写)是一种表处理语言。
因为LISP在描述表方面有独到之处,且本身灵活而精巧,自创立以来,在人工智能的程序设计中得到广泛应用。
在英、美等国应用尤为普遍。
AutoLISP是LISP语言的一个版本,其独特性在于专门为AutoCAD开发的。
所以AutoLISP仅能运行于AutoCAD软件包环境里。
同样,也正是在AutoCAD内置AutoLISP这样一种灵活、精巧的开发语言,使得AutoCAD得到进一步广泛使用。
1. AutoLISP特点:(1)AutoLISP语言是一种仅能以解释方式运行于AutoCAD内的程序设计语言。
即:脱离AutoCAD环境,它就不能运行。
(2)AutoLISP语言是函数型语言,其函数和数据形式是一致的,即(function argument)·function(函数名):内建函数或用户自定义函数名;·argument(参数):参数种类:①变量(Varibles)②常量(Constants)③其他函数(function)所以表达式可以嵌套.④标志数(flag)⑤可选性参数(optional parameters)因此,表达式的形式是:“先说做什麽,再说对谁做”。
(3)可以在AutoLISP程序中引用AutoCAD的几乎所有功能进行图形处理的自动化,尤其是较深层的应用——对象数据库的操作。
在Visual LISP的协助下,对于AutoCAD进行操作功能上的讨论,LISP仅比ARX少一个功能。
在AutoCAD R14已经不再使用ADS程序设计,取而代之的是ARX 程序设计模式。
ARX一般是在AutoCAD和开发商中使用。
使用Visual C++作为基本程序设计语言,其效率、数据处理和软硬件的控制能力都是相当好的。
但是,要想真正发挥这种开发模式的作用,对于程序设计者的要求也较高。
AutoLISP程序设计
![AutoLISP程序设计](https://img.taocdn.com/s3/m/00fc5163b84ae45c3b358cfd.png)
(4)(strcat <string1> <string2> …)
该函数返回由字符串<sting1> <string2>…构成的长字符串。例如: (strcat “Beijing” “China”)返回“Beijing China” (5)(substr <string> <start> [<length>]) 该函数返回从字符串<string>第<start>字符位置开始,连续 长度为<length>个字符组成的一个字符串。若没有指定<length>, 则子字符串是<string>中从<start>后的全部字符组成。例如: (substr “abcdef” 2 4) 返回“bcde” (substr “abcdef ” 2) 返回“bcdef”
高等计算机辅助设计
Advanced Computer Aided Design
3.表处理函数
(1)(car <list>) 该函数返回表<list>的第一个顶层元素。例如: (car „(x y))返回x。 (car „(10 20 30 40))返回10。 (2)(cdr <list>) 该函数返回表<list>中顶层第n个元素。其中n为大于或等于0 (3)(last <list>) 该函数返回表<list>顶层的最后一个元素。例如: (last „(10 20 30 40))返回40。 (4)(nth <n> <list>) 该函数返回表<list>中顶层第n个元素。其中n为大于或等于 0的整数,n为0表示第一个元素,n为1表示第二个元素,以此 类推。例如: (nth 2 „(10 20 30 40))返回30。
autolisp教程
![autolisp教程](https://img.taocdn.com/s3/m/601722d0360cba1aa811da69.png)
第十二章从菜单执行函数1.制作简单的菜单(a)首先定义一个函数,并保存为plus32.lsp:(defun plus32()(setq a (+ 3 2)))(b)编写菜单生成文件,并保存为mylisp.mnu:***MENUGROUP=Mylisp ;菜单组的名称***POP1 ;第一组下拉菜单[Mylisp] ;第一组下拉菜单总的名称[plus] ^c^c^p(load “plus32.lsp”) (plus32) ;菜单名,加载,执行;一定是一个空行(c)加载菜单和执行函数用menuload函数执行加载.2.制作较为复杂的菜单(a)首先定义两个函数,并保存为plus32.lsp和plus45.lsp :(defun plus32()(setq a (+ 3 2)))(defun plus45()(setq a (+ 4 5)))(b)编写菜单生成文件,并保存为mylisp.mnu:***MENYGROUP=MYLISP***pop1[mylisp1][first] ^c^c^p(load "plus32.lsp") (plus32)[first2] ^c^c^p(load "plus45.lsp") (plus45)***pop2[mylisp2][first2] ^c^c^p(load "plus32.lsp") (plus32)[first4] ^c^c^p(load “plus45.lsp”) (plus45)(c)加载菜单和执行函数用menuload函数执行加载.第十三章保持程序畅通1.程序示例(a)首先定义一个函数,并保存为myline.lsp:(defun myline()(graphscr)(setq pt1 (getpoint "\n请输入第一个点:"))(setq pt2 (getpoint pt1 "\n请输入第二个点:"))(command "line" pt1 pt2 ""))(b)执行上述程序后,出现提示,显得很繁琐>:请输入第一个点:>:请输入第二个点:line 指定第一点:>:指定下一点或[放弃(U)]:>:指定下一点或[放弃(U)]:>:命令: nil2.解决办法:通过改变系统变量cmdecho的值来关闭响应(defun myline()(graphscr)(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)(setq pt1 (getpoint "\n请输入第一个点:"))(setq pt2 (getpoint pt1 "\n请输入第二个点:"))(command "line" pt1 pt2 "")(setvar "cmdecho" oce)(princ))3.程序框架:(defun ×××()(graphscr)(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)…… ……(setvar "cmdecho" oce)(princ))第十四章读写数据库1.打开数据文件(setq fp (open "d:/lisp/point.txt" "r"))用open函数打开数据库,文件须制定路径,同时需要指出文件的读取模式.文件的读取模式:r----读出w---写入a---添加2.读出数据(setq pt1 (read-line fp)) ;按行读出数据(setq pt1 (read pt1)) ;去掉数据外面的双引号3.关闭数据库(close fp)4.读取数据库程序示例首先建立数据文件d:/lisp/point.txt编写下面的程序,运行,检验程序的正确性.(defun myline()(graphscr) ;图形窗口(setq oce (getvar “cmdecho”)) ;保存变量的值(setvar “cmdecho” 0) ;改变变量的值(setq fp (open “d:/lisp/point.txt”“r”)) ;打开文件(while (/= (setq pt1 (read-line fp)) nil) ;判断是否到文件末(setq pt1 (read pt1)) ;去掉外层引号(princ “\n”) ;回车键(princ pt1) ;显示数据)(close fp) ;关闭文件(setvar “cmdecho”oce) ;回复变量的值(princ) ;关闭最后的响应)5.读取数据库并绘制直线(defun myline()(graphscr) ;图形窗口(setq oce (getvar “cmdecho”)) ;保存变量的值(setvar “cmdecho”0) ;改变变量的值(setq fp (open “d:/lisp/point.t xt”“r”)) ;打开文件(setq pt1 (read-line fp))(setq pt1 (read pt1))(setq pt11 pt1)(while (/= (setq pt2 (read-line fp)) nil)(setq pt2 (read pt2))(command "line" pt1 pt2 "")(setq pt1 pt2))(command "line" pt1 pt11 "")(close fp) ;关闭文件(setvar “cmdecho”oce) ;回复变量的值(princ) ;关闭最后的响应)6.读取数据库并写入另一文件(defun myline()(graphscr)(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)(setq fp (open “d:/lisp/point.txt”“r”)) ;打开数据文件(setq fp1 (open "d:/lisp/point1.txt" "w"))(while (/= (setq pt1 (read-line fp)) nil) ;读出数据(setq pt1 (read pt1))(princ pt1 fp1) ;写数据(princ “\n”fp1) ;换行)(close fp)(close fp1)(setvar "cmdecho" oce)(princ))第十五章自定义错误函数Autolisp遇到错误时,会通过两种渠道显示错误情况:ERRNO系统变量和*error*函数.通常以后者为主.当*error*函数被设为nil时,Autolisp的错误以预设的显示方式显示:例如:command: (/ 1 0); 错误: 除数为零一般来说(并非所有),当Autolisp的函数执行导致autocad侦测到错误时,系统变量ERRNO会保存对应的错误码.所以,程序里面的自定义错误函数的自定义变得可行.首先定义一个简单报错函数:(defun *error* (msg)(alert msg)(princ))执行语句(/ 1 0) 后,看看响应的提示.1.自定义错误函数的应用(defun sqrtnum()(setvar "errno" 0) ;设置系统变量的值(setq olderr *error*) ;保存*error*的值(defun *error* (msg) ;定义*error*函数(setq en (getvar "errno")) ;取得系统变量"errno"的代码(setq errmsg (strcat "ERRNO = " (itoa en) "\nError: " msg));系统变量的值和错误信息(alert errmsg) ;显示统变量的值和错误信息(setq *error* olderr) ;恢复*error*的值)(setq x (getreal "\n请输入一个数:"))(setq y (* x x))(princ "\n")(princ x)(princ "^2 = ")(princ y)(setq *error* olderr)(princ))运行程序,输入数值时按ESC键看看错误提示.第十六章对话框定义Autolisp不能相其他语言一样用拖拽的方式设计对话框,而是以对话框控制语言进行对话框的设计.Autolisp对话框包括以下的基本组件:标签、按钮、单选框、复选框、编辑框、列表框、下拉列表、滚动条、图象框、图像按钮一、定义各种类型的对话框组件(a) 定义一个空对话框dcl_demo : dialog{label = "我的对话框";ok_cancel;}利用工具菜单里面的“界面工具”,可以对对话框进行预览,如上图所示.(b) 定义一个单选按钮dcl_demo : dialog{label = "我的对话框";: radio_button{key = "myradio";label = "这是一个单选按钮!";}ok_cancel;}(c) 定义一个复选按钮dcl_demo : dialog{label = "我的对话框";: radio_button //定义单选按钮{key = "myradio";label = "这是一个单选按钮!";}: toggle //定义复选按钮{key = "mytoggle";label = "这是一个复选按钮!";}ok_cancel;}(d) 定义一个按钮dcl_demo : dialog{label = "我的对话框";: radio_button //定义单选按钮{key = "myradio";label = "这是一个单选按钮!";}: toggle //定义复选按钮{key = "mytoggle";label = "这是一个复选按钮!";}: button //定义按钮{key = "mybutton";label = "这是一个按钮!";}ok_cancel;}(e) 定义一个编辑框dcl_demo : dialog{label = “我的对话框”;… … … …: button //定义按钮{key = "mybutton";label = "这是一个按钮!";}: edit_box //定义编辑框{key = "myeditbox";label = "这是一个编辑框:";}ok_cancel;}(f) 定义一个标签栏dcl_demo : dialog{label = “我的对话框”;… … … …: button //定义按钮{key = "mybutton";label = "这是一个按钮!";}: edit_box //定义编辑框{key = "myeditbox";label = "这是一个编辑框:";}: text //定义标签栏{key = "mytext";label = "这是一个标签栏,用来写文字说明的!";}ok_cancel;}(g) 定义一个滚动条dcl_demo : dialog{label = "我的对话框";: slider //定义滚动条{key = "myslider";layout = horizontal;max_value = 100;min_value = 1;value = 50;}ok_cancel;}(h) 定义一个下拉列表框dcl_demo : dialog{label = "我的对话框";: slider //定义滚动条{key = "myslider";layout = horizontal;max_value = 100;min_value = 1;value = 50;}: popup_list //定义下拉列表框{key = "mypopup";label = "右边是下拉列表框:";list = "选项1\n选项2\n选项3";edit_width = 12;}ok_cancel;}(i) 定义一个下拉列表框dcl_demo : dialog {label = "我的对话框";: slider //定义滚动条{key = "myslider";layout = horizontal;max_value = 100;min_value = 1;value = 50; }: popup_list //定义下拉列表框{key = "mypopup";label = "右边是下拉列表框:";list = "选项1\n选项2\n选项3";edit_width = 12; }: list_box //定义列表框{key = "mylist";label = "下边是列表框:";list = "选项1\n选项2\n选项3";height = 12; }ok_cancel;}二、用程序驱动单选按钮对话框单选按钮对话框程序dcl_demo : dialog{label = "旋转角度";: boxed_radio_row{key = "rot_angle";label = "请选择一个旋转角度:";: radio_button //定义单选按钮{key = "angle0";label = "0";}: radio_button //定义单选按钮{key = "angle90";label = "90";}: radio_button //定义单选按钮{key = "angle180";label = "180";}: radio_button //定义单选按钮{key = "angle270";label = "270";}}ok_only;}编写上述文件,并保存为dialog.dcl文件.其对应的对话框界面如下图所示: (b)对话框驱动程序,保存为test.lsp文件(defun c:myradio();加载对话框文件,将返回文件识别码的值赋予dcl_id(setq dcl_id (load_dialog "dialog.dcl"));检查打开对话框是否成功(if(not (new_dialog “dcl_demo” dcl_id)) (exit));回调函数(defun choose(ang)(cond((= ang "angle0") (setq r_ang 0))((= ang "angle90") (setq r_ang 90))((= ang "angle180") (setq r_ang 180))((= ang "angle270") (setq r_ang 270))));设定angle0的初始值为"1"(set_tile "angle0" "1");将r_ang的初始值设为0(setq r_ang 0);用户选择的时候进行判断,返回所选的值(action_tile "rot_angle" "(choose $value)");如果单击确定按钮,则销毁对话框(action_tile "accept" "(done_dialog)");显示对话框(start_dialog);将所选的数值进行输出(princ "\n您选择了")(princ r_ang)(princ " 度!");卸载对话框文件(unload_dialog dcl_id)(princ))加载执行可以看到程序的运行结果!三、用程序驱动复选框对话框(defun c:myradio();加载对话框文件,将返回文件识别码的值赋予dcl_id(setq dcl_id (load_dialog "mydcl.dcl"));检查打开对话框是否成功(if(not (new_dialog "dcl_demo" dcl_id)) (exit));回调函数(setq xian 0 sany 0 lanz 0)(action_tile "xa" "(setq xian (atoi $value))")(action_tile "sy" "(setq sany (atoi $value))")(action_tile "lz" "(setq lanz (atoi $value))");如果单击确定按钮,则销毁对话框(action_tile "accept" "(done_dialog)");显示对话框(start_dialog);将所选的数值进行输出(princ "\n在下面的几个城市中,我选择::")(princ "\n西安:") (if(= xian 1) (princ "想去!") (princ "不想去!")) (princ "\n三亚:") (if(= sany 1) (princ "想去!") (princ "不想去!")) (princ "\n兰州:") (if(= lanz 1) (princ "想去!") (princ "不想去!")) ;卸载对话框文件(unload_dialog dcl_id)(princ))下面是对话框程序:dcl_demo : dialog{label = "旋转角度";: row{key = "rot_angle";label = "请选择你想去的旅游城市:";: toggle //定义复选按钮{key = "xa";label = "西安";}: toggle //定义复选按钮{key = "sy";label = "三亚";}: toggle //定义复选按钮{key = "lz";label = "兰州";}}ok_only;}注意:将单选按钮或复选框组成行列(或区)的时候,具体是有些不同的。
(完整版)实验3-AutoLISP语言
![(完整版)实验3-AutoLISP语言](https://img.taocdn.com/s3/m/a100f0e0b84ae45c3b358ca3.png)
编写简单的AutoLISP程序,并调试运行。
三、实验步骤
1、编写一个绘制六角螺母的AutoLISP程序
2、测试程序,如果出现错误进行修改后再上机运行,直至程序正确为止,绘制的六角螺母如图所示
四、实验过程原始记录
详细程序为:
(defun drw()
(setq d 10.0)(setq l 50)
p4(polar p6 (/ pi 2.0)c3)
p8(polar p6 (- (/ pi 2.0))c3)
p5(polar p3 (- (/ pi 2.0))(* c2 2.0))
p20(polar p2 (- (/ pi 2.0))(* c2 2.0))
p9(polar p1 (- pi)(- k c4))
p17(polar p19 0 11)
p13(polar p18 0 1)
p14(polar p19 0 1)
p12(polar p13 (/ pi 2.0)d1)
p15(polar p14 (-(/ pi 2.0))d1)
p11(list(+ (car p10)k1)(+ (cadr p10)k1))
(cond((= d 3)(setq gs 1))
((= d 4.0)(setq gs 2))
((= d 0)(setq gs 3))
((= d 6)(setq gs 4))
((= d 8)(setq gs 5))
((= d 10)(setq gs 6))
((= d 12)(setq gs 7))
((= d 14)(setq gs 8))
p16(list(+ (car p17)k1)(- (cadr p17)k1))
AutoLISP程序语言设计
![AutoLISP程序语言设计](https://img.taocdn.com/s3/m/c065ad1959fb770bf78a6529647d27284b733739.png)
AutoLISP程序语言设计AutoLISP程序语言设计目录⒈简介⑴ AutoLISP概述⑵ AutoLISP的应用领域⒉基本语法⑴变量定义与赋值⑵控制流语句⑶函数定义与调用⑷条件语句⒊常用函数⑴坐标点函数⑵图形绘制函数⑶数据处理函数⑷字符串处理函数⒋高级技巧⑴调试与错误处理⑵程序优化与性能提升⑶与外部程序交互⒌示例程序⑴绘制简单图形⑵自动化处理CAD图纸⑶数据导出与导入⒍附录⑴ AutoLISP开发工具推荐⑵ AutoCAD版本兼容性⑶ AutoLISP常用工具介绍⒈简介⑴ AutoLISP概述AutoLISP是一种方便的自动计算与绘图程序设计语言,它是用于AutoCAD中的一种宿主程序语言,可以用于控制CAD软件的各项功能,实现自动化操作。
⑵ AutoLISP的应用领域AutoLISP可用于各种CAD绘图软件的自动化操作,包括但不限于以下方面:●绘制复杂图形●数据处理与导出●组装CAD图纸●批量操作与修改⒉基本语法⑴变量定义与赋值AutoLISP可以使用变量来存储数据,并在程序中使用。
变量可以通过赋值来初始化或修改其值。
⑵控制流语句AutoLISP支持各种控制流语句,如条件语句、循环语句等,用于根据不同条件执行不同的代码块或重复执行特定的代码块。
⑶函数定义与调用AutoLISP允许用户自定义函数以实现特定的功能。
函数是一组逻辑相关的代码块,可以通过函数名来调用。
⑷条件语句条件语句用于根据不同的条件执行不同的代码块。
AutoLISP提供了if、cond等条件语句供用户使用。
⒊常用函数⑴坐标点函数AutoLISP提供了一系列用于处理坐标点的函数,如polar、polar-point、polar-angle等,用于计算、转换坐标点。
⑵图形绘制函数AutoLISP提供了丰富的图形绘制函数,如line、circle、text 等,用于绘制直线、圆形、文本等图形元素。
⑶数据处理函数AutoLISP提供了一些用于处理数据的函数,如list、append、assoc等,用于创建列表、连接列表、关联列表等操作。
autolisp教程
![autolisp教程](https://img.taocdn.com/s3/m/96022dfd964bcf84b8d57b30.png)
第十二章从菜单执行函数1.制作简单的菜单(a)首先定义一个函数,并保存为plus32.lsp:(defun plus32()(setq a (+ 3 2)))(b)编写菜单生成文件,并保存为mylisp.mnu:***MENUGROUP=Mylisp ;菜单组的名称***POP1 ;第一组下拉菜单[Mylisp] ;第一组下拉菜单总的名称[plus] ^c^c^p(load “plus32.lsp”) (plus32) ;菜单名,加载,执行;一定是一个空行(c)加载菜单和执行函数用menuload函数执行加载.2.制作较为复杂的菜单(a)首先定义两个函数,并保存为plus32.lsp和plus45.lsp : (defun plus32()(setq a (+ 3 2)))(defun plus45()(setq a (+ 4 5)))(b)编写菜单生成文件,并保存为mylisp.mnu:***MENYGROUP=MYLISP***pop1[mylisp1][first] ^c^c^p(load "plus32.lsp") (plus32) [first2] ^c^c^p(load "plus45.lsp") (plus45) ***pop2[mylisp2][first2] ^c^c^p(load "plus32.lsp") (plus32) [first4] ^c^c^p(load “plus45.lsp”) (plus45) (c)加载菜单和执行函数用menuload函数执行加载.第十三章保持程序畅通1.程序示例(a)首先定义一个函数,并保存为myline.lsp: (defun myline()(graphscr)(setq pt1 (getpoint "\n请输入第一个点:")) (setq pt2 (getpoint pt1 "\n请输入第二个点:")) (command "line" pt1 pt2 ""))(b)执行上述程序后,出现提示,显得很繁琐>:请输入第一个点:>:请输入第二个点:line 指定第一点:>:指定下一点或[放弃(U)]:>:指定下一点或[放弃(U)]:>:命令: nil2.解决办法:通过改变系统变量cmdecho的值来关闭响应(defun myline()(graphscr)(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)(setq pt1 (getpoint "\n请输入第一个点:")) (setq pt2 (getpoint pt1 "\n请输入第二个点:")) (command "line" pt1 pt2 "")(setvar "cmdecho" oce)(princ))3.程序框架:(defun ×××()(graphscr)(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)…… ……(setvar "cmdecho" oce)(princ))第十四章读写数据库1.打开数据文件(setq fp (open "d:/lisp/point.txt" "r"))用open函数打开数据库,文件须制定路径,同时需要指出文件的读取模式. 文件的读取模式:r----读出w---写入a---添加2.读出数据(setq pt1 (read-line fp)) ;按行读出数据(setq pt1 (read pt1)) ;去掉数据外面的双引号3.关闭数据库(close fp)4.读取数据库程序示例首先建立数据文件d:/lisp/point.txt编写下面的程序,运行,检验程序的正确性.(defun myline()(graphscr) ;图形窗口(setq oce (getvar “cmdecho”)) ;保存变量的值(setvar “cmdecho” 0) ;改变变量的值(setq fp (open “d:/lisp/point.txt”“r”)) ;打开文件(while (/= (setq pt1 (read-line fp)) nil) ;判断是否到文件末(setq pt1 (read pt1)) ;去掉外层引号(princ “\n”) ;回车键(princ pt1) ;显示数据)(close fp) ;关闭文件(setvar “cmdecho”oce) ;回复变量的值(princ) ;关闭最后的响应)5.读取数据库并绘制直线(defun myline()(graphscr) ;图形窗口(setq oce (getvar “cmdecho”)) ;保存变量的值(setvar “cmdecho”0) ;改变变量的值(setq fp (open “d:/lisp/point.t xt”“r”)) ;打开文件(setq pt1 (read-line fp))(setq pt1 (read pt1))(setq pt11 pt1)(while (/= (setq pt2 (read-line fp)) nil)(setq pt2 (read pt2))(command "line" pt1 pt2 "")(setq pt1 pt2))(command "line" pt1 pt11 "")(close fp) ;关闭文件(setvar “cmdecho”oce) ;回复变量的值(princ) ;关闭最后的响应)6.读取数据库并写入另一文件(defun myline()(graphscr)(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)(setq fp (open “d:/lisp/point.txt”“r”)) ;打开数据文件(setq fp1 (open "d:/lisp/point1.txt" "w"))(while (/= (setq pt1 (read-line fp)) nil) ;读出数据(setq pt1 (read pt1))(princ pt1 fp1) ;写数据(princ “\n”fp1) ;换行)(close fp)(close fp1)(setvar "cmdecho" oce)(princ))第十五章自定义错误函数Autolisp遇到错误时,会通过两种渠道显示错误情况:errno系统变量和*error*函数.通常以后者为主.当*error*函数被设为nil时,Autolisp的错误以预设的显示方式显示: 例如:command: (/ 1 0); 错误: 除数为零一般来说(并非所有),当Autolisp的函数执行导致autocad侦测到错误时,系统变量errno会保存对应的错误码.所以,程序里面的自定义错误函数的自定义变得可行.首先定义一个简单报错函数:(defun *error* (msg)(alert msg)(princ))执行语句(/ 1 0) 后,看看响应的提示.1.自定义错误函数的应用(defun sqrtnum()(setvar "errno" 0) ;设置系统变量的值(setq olderr *error*) ;保存*error*的值(defun *error* (msg) ;定义*error*函数(setq en (getvar "errno")) ;取得系统变量"errno"的代码(setq errmsg (strcat "ERRNO = " (itoa en) "\nError: " msg)) ;系统变量的值和错误信息(alert errmsg) ;显示统变量的值和错误信息(setq *error* olderr) ;恢复*error*的值)(setq x (getreal "\n请输入一个数:"))(setq y (* x x))(princ "\n")(princ x)(princ "^2 = ")(princ y)(setq *error* olderr)(princ))运行程序,输入数值时按ESC键看看错误提示.第十六章对话框定义Autolisp不能相其他语言一样用拖拽的方式设计对话框,而是以对话框控制语言进行对话框的设计.Autolisp对话框包括以下的基本组件:标签、按钮、单选框、复选框、编辑框、列表框、下拉列表、滚动条、图象框、图像按钮一、定义各种类型的对话框组件(a) 定义一个空对话框dcl_demo : dialog{label = "我的对话框";ok_cancel;}利用工具菜单里面的“界面工具”,可以对对话框进行预览,如上图所示.(b) 定义一个单选按钮dcl_demo : dialog{label = "我的对话框";: radio_button{key = "myradio";label = "这是一个单选按钮!"; }ok_cancel;}(c) 定义一个复选按钮dcl_demo : dialog{label = "我的对话框";: radio_button //定义单选按钮{key = "myradio";label = "这是一个单选按钮!"; }: toggle //定义复选按钮{key = "mytoggle";label = "这是一个复选按钮!"; }ok_cancel;}(d) 定义一个按钮dcl_demo : dialog{label = "我的对话框";: radio_button //定义单选按钮{key = "myradio";label = "这是一个单选按钮!"; }: toggle //定义复选按钮{key = "mytoggle";label = "这是一个复选按钮!";}: button //定义按钮{key = "mybutton";label = "这是一个按钮!"; }ok_cancel;}(e) 定义一个编辑框dcl_demo : dialog{label = “我的对话框”; … … … …: button //定义按钮{key = "mybutton";label = "这是一个按钮!";}: edit_box //定义编辑框{key = "myeditbox";label = "这是一个编辑框:"; }ok_cancel;}(f) 定义一个标签栏dcl_demo : dialog{label = “我的对话框”; … … … …: button //定义按钮{key = "mybutton";label = "这是一个按钮!";}: edit_box //定义编辑框{key = "myeditbox";label = "这是一个编辑框:";}: text //定义标签栏{key = "mytext";label = "这是一个标签栏,用来写文字说明的!"; }ok_cancel;}(g) 定义一个滚动条dcl_demo : dialog{label = "我的对话框";: slider //定义滚动条{key = "myslider"; layout = horizontal; max_value = 100;min_value = 1;value = 50;}ok_cancel;}(h) 定义一个下拉列表框dcl_demo : dialog {label = "我的对话框"; : slider //定义滚动条{key = "myslider";layout = horizontal;max_value = 100;min_value = 1;value = 50;}: popup_list //定义下拉列表框{key = "mypopup";label = "右边是下拉列表框:";list = "选项1\n选项2\n选项3"; edit_width = 12;}ok_cancel;}(i) 定义一个下拉列表框dcl_demo : dialog {label = "我的对话框";: slider //定义滚动条{key = "myslider";layout = horizontal;max_value = 100;min_value = 1;value = 50; }: popup_list //定义下拉列表框{key = "mypopup";label = "右边是下拉列表框:";list = "选项1\n选项2\n选项3"; edit_width = 12; }: list_box //定义列表框{key = "mylist";label = "下边是列表框:";list = "选项1\n选项2\n选项3"; height = 12; }ok_cancel;}二、用程序驱动单选按钮对话框单选按钮对话框程序dcl_demo : dialog{label = "旋转角度";: boxed_radio_row{key = "rot_angle";label = "请选择一个旋转角度:"; : radio_button //定义单选按钮{key = "angle0";label = "0";}: radio_button //定义单选按钮{key = "angle90";label = "90";}: radio_button //定义单选按钮{key = "angle180";label = "180";}: radio_button //定义单选按钮{key = "angle270";label = "270";}}ok_only;}编写上述文件,并保存为dialog.dcl文件.其对应的对话框界面如下图所示: (b)对话框驱动程序,保存为test.lsp文件(defun c:myradio();加载对话框文件,将返回文件识别码的值赋予dcl_id(setq dcl_id (load_dialog "dialog.dcl"));检查打开对话框是否成功(if(not (new_dialog “dcl_demo” dcl_id)) (exit));回调函数(defun choose(ang)(cond((= ang "angle0") (setq r_ang 0))((= ang "angle90") (setq r_ang 90))((= ang "angle180") (setq r_ang 180))((= ang "angle270") (setq r_ang 270))));设定angle0的初始值为"1"(set_tile "angle0" "1");将r_ang的初始值设为0(setq r_ang 0);用户选择的时候进行判断,返回所选的值(action_tile "rot_angle" "(choose $value)") ;如果单击确定按钮,则销毁对话框(action_tile "accept" "(done_dialog)");显示对话框(start_dialog);将所选的数值进行输出(princ "\n您选择了")(princ r_ang)(princ " 度!");卸载对话框文件(unload_dialog dcl_id)(princ))加载执行可以看到程序的运行结果!三、用程序驱动复选框对话框(defun c:myradio();加载对话框文件,将返回文件识别码的值赋予dcl_id (setq dcl_id (load_dialog "mydcl.dcl"));检查打开对话框是否成功(if(not (new_dialog "dcl_demo" dcl_id)) (exit)) ;回调函数(setq xian 0 sany 0 lanz 0)(action_tile "xa" "(setq xian (atoi $value))") (action_tile "sy" "(setq sany (atoi $value))") (action_tile "lz" "(setq lanz (atoi $value))") ;如果单击确定按钮,则销毁对话框(action_tile "accept" "(done_dialog)");显示对话框(start_dialog);将所选的数值进行输出(princ "\n在下面的几个城市中,我选择::")(princ "\n西安:") (if(= xian 1) (princ "想去!") (princ "不想去!")) (princ "\n三亚:") (if(= sany 1) (princ "想去!") (princ "不想去!")) (princ "\n兰州:") (if(= lanz 1) (princ "想去!") (princ "不想去!")) ;卸载对话框文件(unload_dialog dcl_id)(princ))下面是对话框程序:dcl_demo : dialog{label = "旋转角度";: row{key = "rot_angle";label = "请选择你想去的旅游城市:";: toggle //定义复选按钮{key = "xa";label = "西安";}: toggle //定义复选按钮{key = "sy";label = "三亚";}: toggle //定义复选按钮{key = "lz";label = "兰州";}}ok_only;}注意:将单选按钮或复选框组成行列(或区)的时候,具体是有些不同的。
AutoLISP绘图程序设计
![AutoLISP绘图程序设计](https://img.taocdn.com/s3/m/c77b1d1fae45b307e87101f69e3143323968f503.png)
四、AutoLISP程序执行方式
有三种方式:行方式、源文件方式、编译文件方式. 1.行方式 就是在AutoCAD的command:提示符下,输入表后回车. 如:
command:(+ 15 6.3)↙ command:(setq a 10)(setq b (+ a 5)) ↙
03.10.2023
16
2.源文件方式
用写字板或记事本把AutoLISP程序保存起来(后缀 为.LSP).然后用LOAD命令装载并调用. 例如:(1)把下列程序保存到e:\zm.lsp
;;在屏幕上显示 ASCII码为(65-90)的字符
(defun C:zm(/ as)
;自定义命令
(setq as 65 n 100)
(while (<= as 90)
(while (<= a n) (command "circle" P0 R) (setq P0 (polar P0 0 L)) (setq a (1+ a))
) )
03.10.2023
3
(4)AutoLISP语言中使用大量的函数(有 200多个函数),进行各种运算;
(5)AutoLISP编写的程序特点(学习中注 意):
二次开发手段.
所谓二次开发:是指以AutoCAD软件为平台, 加入自己所需要的功能.开发过程,就是编程的 过程.
二次开发所支持的语言有VB、C++,大型的 二次开发,以C++为主,而小型二次开发,一般以 AutoLISP为主.
03.10.2023
2
(2)必须在AutoCAD环境下运行(内嵌); ( 3 ) AutoLISP 可 以 编 写 程 序 , 调 用 AutoCAD 的 许 多
一步步学AutoLisp(二)
![一步步学AutoLisp(二)](https://img.taocdn.com/s3/m/d11841b3c77da26925c5b0ee.png)
一步步学AutoLisp(二)在第一步中我们是在CAD命令行中进行一些练习,这显然无法满足我们正常的使用要求,所以我们一般将程序写成文件,LISP程序文件的扩展名为“.lsp”。
在AutoCAD2004及以后的CAD中有专门的软件编写程序Visual Lisp,也可以用普通的文本编写软件如记事本进行编写,但文件的扩展名一定要是“.lsp”。
为使大家能对lsp文件的使用有更好的理解,本文一律按使用普通文本编辑器编写的方式进行描述。
打开文本编辑器编写一个文件,文件名为“key.lsp”,将文件保存到C盘根目录下。
键入如下一行程序:(defun c:cm() (command "COPY" pause "" "m"))保存后,在CAD命令行键入:(load"c:/key"),即可将key.lsp调入CAD,返回c:cm。
如下图:在命令行键入“cm”可以执行对一个图元进行多次拷贝的命令,在lisp程序中函数及参数不区分大小写,但参数的返回值有大小之分。
先对程序进行解读:defun 定义函数的函数,后面的c:cm是一个函数的名称。
c:cm 自我定义的函数名称,带“c:”的函数是可以作为操作命令的函数,我们姑且将这类函数称为命令函数。
如果没有“c:”,只有“cm”,则得到的返回值是“cm”,在命令行键入“cm”则不会执行前面的多重拷贝操作。
键入“(cm)”就会执行该操作,我们就称之为一般函数。
() 这个空括弧是用来填写参数的,由于我们的这段程序没有用到任何其他参数,所以括弧内是空的。
command 调用CAD原有命令的函数,这是lsp程序中应用非常多的一个函数,许多操作可以直接调用CAD自己的命令,不许再重新编写。
"copy" 调用的CAD命令名称,名称与前面的command之间有没有空格都可以,而且要用命令全名,不能用简化命令,而且要用引号。
AutoLISP语言编制AutoCAD实用程序
![AutoLISP语言编制AutoCAD实用程序](https://img.taocdn.com/s3/m/8abc4f1d55270722192ef7c1.png)
些 小 程 序 段 串 联 起 来 实 现 界 面 化 与 系 统
p
化
P C
P l
p 3
/
f
中 国科教创新 导刊
C i d c t n In v t n H r l h a E u a i no a i ead n o o
19 6
( e q P8 ( Ol P7 4 1 6) st P a r . )
(o c mma d ” l e n p i ”p ” n 3 h” 0 2 0 2 P1 . .
行 修 改 和扩 充 。 A t CAD 台上 进 行应 言 编 制 基 准 标 注 的 参 数 化 绘 图 的 程 序 。 在 uo 平 通 根据 基准 点给 P 参 数 赋 值 5 过 实例 来 分析 Au o I P 序 语言 的 程序 结 tL S 程
标 注应 用 的要 求 。 用 L SP语 言 可 以 方 便 利 I 地调 用 Au o t CAD的 绘 图命 令 , 使设 计 和 绘 接 访 问 、 改 , 现 对 屏 幕 图 形 的 实 时 修 修 实
( m n ” r e p ) c ma d c c ” 7 3 o il
圆命 令 绘 制 圆弧 半 径 为 3 心 为P7 圆
( e q P3 ( 1 P1 a 3 ) St P0 ar )
最基 本 的数 据类 型是 符 号表 达 式 (y oi S mb l 根 据 基 准 点 给 P 参 数 赋 值 c 3
(e q 4 ( o a P1 ( a i 3 ) st p p lr + p ) ) 参 户编 写 的 函 数 , 实现 命 令 的 扩 展 与 增加 。 下 根据 基 准 点 给P4 数 赋值
AutoLISP程序入门教学资料
![AutoLISP程序入门教学资料](https://img.taocdn.com/s3/m/76f6cadcf71fb7360b4c2e3f5727a5e9856a270a.png)
AutoLISP程序入门教学资料AutoLISP程序入门-教学资料一. AutoLISP简介(优越性及缺点)AutoLISP语言是开发Autocad的主要工具,是LISP语言和Autocad有机结合的产物,在Autocad的发展及壮大过程中起到了重要的作用。
正是以AutoLISP为代表的开放式结构,才使Autocad在众多的CAD软件竞争中长期处于不败之地。
AutoLISP是一种解释型语言,可直接在Autocad中运行,而不象编译型语言必须借助于编译器对原程序进行编译和连接,才能生成可执行的代码模块,用户只需借助于文本编辑器(例如DOS的"EDIT"程序)即可进行编程。
AutoLISP(List Processing Language)是一种表处理语言?quot;表"是AutoLISP语言独有的数据结构,在AutoLISP中广泛使用,表是在一个变量中储存大量相关数据的有效方法。
例如AutoCAD中以三个实数(X Y Z)这种表的形式来表示三维点。
二. 在AutoLISP的赋值方法不象大多数计算机语言采用"中缀法"来表示程序语句(表达式),而采用"前缀法"。
例如:C语言中为实型数X赋值125.0,写成:X = 125.0;运算符"="放在操作数X和125.0之间。
而AutoLISP中则写成:(setq X 125.0)运算符"setq"放在操作数X和125.0之前。
"setq"是AutoLISP最主要的赋值函数,几乎所有的变量赋值都要依?quot;setq"来实现。
三. 如何向AutoCAD增加一个新命令(或如何定义一个函数)一般程序的结构组成及加载在下面的例子中,我们将了解AutoLISP语言一般程序的结构组成、如何定义一个在AutoCAD中可执行的函数、"setq"的用法以及如何在AutoCAD中加载程序。
AutoLISP编程
![AutoLISP编程](https://img.taocdn.com/s3/m/bf726cb477232f60dccca104.png)
AutoLISP编程第五篇机械CAD/CAM技术实验指导书《机械CAD/CAM技术》课程已作为本科及大专教学的一门必修课,为了加强实践环节训练,配合《机械CAD/CAM技术》课程的教学,本篇精选8项实验内容进行阐述, 以便于教师的教学参考和学生的实验指导。
实验一:数表的文件化处理实验二:最小二乘法的应用实验三:图形变换实验四:B样条曲线的绘制实验五:零件三维造型实验六:AutoLISP编程实验七:零件编码系统实验八:零件加工数控编程与仿真1实验六:AutoLISP编程一、实验目的1(熟悉AutoCAD中的二次开发工具AutoLISP的各功能函数;2(了解AutoLISP的编程过程和方法。
二、AutoCAD常用绘图指令1( 图形的绘制直线的绘制(LINE命令)点的绘制(POINT命令)圆的绘制(CIRCLE命令)圆弧的绘制(ARC命令)粗线的绘制(TRACE命令)填实线的绘制(SOLID命令)多边形的绘制(POLYGON命令) 圆环的绘制(DOUGHNUT命令)椭圆的绘制(ELLIPSE命令)复合线的绘制(PLINE命令)图素的等分(DIVIDE命令)图素的测量(MEASURE命令)图形的层(LAYER命令)线型的设置(LINETYPE命令)图形的颜色(COLOR命令)图形剖面线的绘制(HATCH命令) 图形的视图(VIEW命令)图幅的边界(LIMITS命令)2( 图形的编辑与查询图形的擦除(ERASE命令)图形的映像(MIRROR命令)图形的数组(ARRAY命令)图形的倒圆(FILLET命令)图形的倒角(CHAMFER命令)复合线的编辑(PEDIT命令)图形的修改(CHANGE命令)图线的切断(BREAK命令)图线的修剪(TRIM命令)图形的延伸(EXTEND命令)图形的平行偏移(OFFSET命令)图形的拉伸(STRETCH命令)图块与复合线的分解(EXPLODE命令)23( 图形的变换图形的变焦放缩(ZOOM命令)图形的快速变焦放缩(VIEWRES命令)图形的比例变换(SCALE命令)移屏幕(PAN命令)图形的平移(MOVE命令)图形的复制(COPY命令)图形的旋转(ROTATE命令)4( 辅助绘图方式抽点网格(SNAP命令)点阵网格(GRID命令)轴对刻度线的显示(AXIS命令)正交绘图方式(ORTHO命令)选择当前轴测平面绘制正等测图(ISOPLANE命令) 目标抽点方式(OSNAP命令)调节标示框尺寸(APERTURE命令)5( 块与形块定义(BLOCK命令)块的调用(INSERT命令)将块写入磁盘(WBLOCK命令)形(SHAPE)6( 图形的标注文字标注(TEXT命令)字体定义(STYLE命令)文字的动态书写(DTEXT命令)尺寸单位制的设置(UNITS命令)三、AutoLISP函数AutoLISP语言是在LISP语言的基础上,扩充了许多适用于CAD应用和专用功能后形成的一种能以解释方式运行于AutoCAD内的程序设计语言。
AutoLISP从入门到精通初级教程新手必备
![AutoLISP从入门到精通初级教程新手必备](https://img.taocdn.com/s3/m/d12713a1aa00b52acec7ca4a.png)
A u t o L I S P从入门到精通初级教程新手必备Last updated on the afternoon of January 3, 2021AutoLISP入门单元一:AutoLISP主角登场一.AutoLISP是何方神圣1、AutoLISP是AutoCAD的最佳拍档!2、AutoLISP内含于AutoCAD软件内,不用另外花钱买!3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』!4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能!若说AutoLISP的出现,是替AutoCAD创造一片天的『最大功臣』,实不为过一点也不夸张!5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷!二.AutoLISP程序语言的特质分析:学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序!语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格!功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已!撰写的环境不挑剔:只要是一般的文书编辑软件都适用!如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感!横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行!三.撰写AutoLISP的动机1、欲强化AutoCAD原有指令时.2、欲创造更有用的AutoCAD新指令.3、欲简化繁琐的环境设定或绘图步骤时.4、欲处理参数式绘图时.5、欲做图面资料读文件、写文件.6、欲做AutoCAD简报展示时.7、欲达到真正灵活掌控AutoCAD时.8、欲提升自己跨上AutoCAD高手列车时.四.AutoLISP的效益评估1.对公司负责人或设计主管而言:A.也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沈思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』!B.若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受训,学习更好的设计技巧与创意呢!C.千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍了公司计算机化进步的罪魁祸首D.当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD支持软件。
AutoLisp编程入门
![AutoLisp编程入门](https://img.taocdn.com/s3/m/f2e263cf5fbfc77da269b110.png)
基本指南:两数求和在命令行输入:(+ 2 3) (- 2 3) (* 2 3) (/ 2 3)如果直接输入(/ 2 3)则会显示0 因为2和3是整型所以AutoLisp把这些数字译为整型(AutoLisp进行了四舍五入)所以输入(setq x (/2.0 3))就可得到0.666667六位小数在命令行输入:!p则会显示p这个变量的值SETQ和变量Setq是来保存计算的结果的,相当于给一个变量赋值例:(setq x (/2.0 3)) 这边x是变量就是把2.0/3的值赋给xSetq能完成多项“设置相等”例如:(setq x 1.0 y 2.0 z 3.0) 就是分别赋给x y z 赋值AutoLISP函数1.数学函数(min 7 3 5 11) 就是取7 3 5 11这四个数的最小值(setq minbr (min 7 3 5 11))数学函数功能+加- 减*乘/除1+自增11- 自减1FLX截取实数的整数部分FLOAT整数变为实数REM返回除法的余数EXPT指数SIN求弧度角的正弦COS求弧度角的余弦ATAN求两个数字的反正切(setq rad (*(/ 45 180.0)pi))2.几何函数(setq p1 '(1.3 5.7)) ‘表示指定2个(3个)的坐标值,这样AutoLISP就不会计算这些值了(setq p2 '(7.5 3.1))(setq p3 '(9 4))(setq p4 '(0.1 2.5))(distance p1 p2)(angle p1 p2)(inters p1 p2 p3 p4)(osnap p1 "mid")2.例:在一个绘制楼梯间的AutoLISP例程中,一部分程序检查层高是否大于8英寸:如果大于,就绘制出14级台阶,如果小于就绘制13级台阶。
3.(strlen “Using AutoCAD”)STRLEN函数将报告Using AutoCAD为13个字符,计算空格。
AutoLISP从入门到精通初级教程(新手必备)
![AutoLISP从入门到精通初级教程(新手必备)](https://img.taocdn.com/s3/m/a5741991700abb68a982fbe1.png)
AutoLISP入门单元一:AutoLISP主角登场 (2)单元二:AutoLISP的关键、基本结构及语法 (4)单元三:快速分类浏览AutoLISP功能函数(一) (10)单元四:快速分类浏览AutoLISP功能函数(二) (13)单元五:轻松快速的掌握AutoLISP设计技巧 (16)单元六:图元数据的取得与活用技巧(一) (21)单元七:图元数据的取得与活用技巧(二) (25)单元八:新手上路-参数设计的关键技巧 (31)单元一:AutoLISP主角登场一. AutoLISP 是何方神圣?1、AutoLISP是AutoCAD的最佳拍檔!2、AutoLISP内含于AutoCAD软件内,不用另外花钱买!3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』!4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能!若说AutoLISP的出现,是替 AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张!5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷!二. AutoLISP 程序语言的特质分析:学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序!语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格!功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已!撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感!横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行!三.撰写 AutoLISP 的动机?1、欲强化 AutoCAD 原有指令时.2、欲创造更有用的 AutoCAD 新指令.3、欲简化繁琐的环境设定或绘图步骤时.4、欲处理参数式绘图时.5、欲做图面资料读文件、写文件.6、欲做 AutoCAD 简报展示时.7、欲达到真正灵活掌控 AutoCAD 时.8、欲提升自己跨上 AutoCAD 高手列车时.四.AutoLISP 的效益评估?1. 对公司负责人或设计主管而言:A. 也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沈思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』!B. 若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受训,学习更好的设计技巧与创意呢?!C. 千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍了公司计算机化进步的罪魁祸首D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关 AutoCAD 支持软件。
CAD二次开发教程AUTOLISP
![CAD二次开发教程AUTOLISP](https://img.taocdn.com/s3/m/dc3ad4ed31b765ce050814ba.png)
这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把 这些坐标赋予P2和P3。\n的作用是回车,因此输入提示显示在下 一行中。
第9行:(Command“line” P1 P2 P3“C”)
本行中,Command函数用来输入AutoCAD的line命令,然后从P1到 P2,P2到P3各画一条直线。“C”(表示“close”选项)把最 后一点P3与第一点P1连接起来。所有的AutoCAD命令及选项在 AutoLISP程序中使用时都必须置于双引号内。变量P1、P2.
示例:
(setq Pt1(getpoint))
(setq Pt1(getPoint“选择第一点”))
有上面几个函数就可以开始编程了:
例1 编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过 它们绘出如三角形。
本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以 生成该三角形的处理过程为:由P1到P2、由P2到P3、到P3到P1各画一 条直线。弄清这三部分就会使编程过程更清晰。
该函数(/=)检查两个元素是否不相等。若不相等,条件为真,
函数返回T。同样,若指定的元素相等,条件为假,函数返回nil。
3.小于
格式(<atom1 atom2…)
该函数(<)检查第一个元素(atoml)是否小于第H个元素
(atomZ)。若为真,函数返回T,否则返回nil。
4.小于等于
格式(<= atom1 atom2...)
(defun ADNUM(/a
b),定义了一个含有两个局部变量a和b的函数ADNUM。局部 变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。
(defun C:ADNUM(),在函数名前加上C:后,此函数就可以通 过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有
AutoLISP开发方法
![AutoLISP开发方法](https://img.taocdn.com/s3/m/2794229f51e79b89680226ed.png)
AutoLISP开发方法第一节AutoLISP基本知识一、AutoLISP概论AutoLISP属LISP程序设计语言的扩充。
二、AutoL LISP数据类型1.表表是AutoLISP的基本语法单元,也是最有特色、最灵活的数据类型。
AutoLISP中表的作用同C语言中的数组一样重要。
表是用圆括号“()”括起来的一组数据,可表示为:(元素1 元素2 …)例:三维点(100.O 23.5 11.3)2.符号与其它程序语言一样,AutoLISP也是用符号来代表函数名、常量或变量。
3.字符串字符串可以是任意长的。
4.整数整数即不带小数点的数。
5.实数实数是带有小数点的数,在?到十1之间的小数必须用零作为开始。
6.文件描述等文件描述等用来指定AutoLISP要打开的文件,当AutoLISP函数需要读或写一个文件时,可引用该文件描述符。
7.实体名实体名是分配给一个图中实体的数字标号。
8.选择集选择集是包含一个或多个实体的组。
9.程序和外部子程序在本章中叙述的AutoLISP函数都是子程序,且都是内部子程序。
子程序可以由defun函数重新定义。
10.标点符号(1)单引号单引号(’)表示AutoLIsP的Quote函数,例’ABC苟(Quote ABC)相同。
(2)括号数据表及函数通过括号而被定义并使彼此相隔开。
例如:(十1 2) (一12 4)(3)句号句号被AutoLISP解释器使用的方式有两种。
椫直硎臼凳 惺 菩∈ 悖?/P>另一种被用来将所谓点对这种特殊类型的数据表中的数据项分隔开。
(4)双引号AutoLISP将双引号括起的部分理解成字符串。
(5)分号用以说明AutoLISP程序中的注释行。
(6)空格及换行空格使表中各数据项彼此分开。
换行符也视为空格。
(7)大写和小写在AutoLISP程序中,大写字符和小写字符可被互换使用。
11.弧度AutoLISP使用弧度来度量角度。
许多AutoCAD开发者都用度数来度量角度,所以必要转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AutoCAD开发VisualLISP程序
本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。
首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。
VisualLISP与AutoCAD的通信
用户可以直接在AutoCAD命令行中键入AutoLISP表达式。
AutoCAD通过括号来确认AutoLISP表达式。
AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。
注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。
此外,在AutoCAD中调用并执行AutoLISP程序。
在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。
实例:最简单的LISP程序——“Hello.lsp”
Step1创建新文件
(1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。
(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。
Step2输入代码并保存文件
(1)在编辑窗口中输入源文件“Hello.lsp”的代码。
程序清单如下:;;;* Hello.lsp – Visual LISP文件实例
(prompt "Pick point:") ;指定运行时的提示信息
(setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt”
(setq hgt 15) ;给变量“hgt”赋值
(Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!");
调用“Commnad”函数与AutoCAD进行通信
(2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。
Step3运行LISP程序
(1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。
系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。
结果如图36-4所示。
(2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。
选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图
36-5所示。
查找并选择上一步中所创建的“Hello.lsp”文件,并单击Load按钮进行加载。
加载后的文件名称将显示在“LoadedApplications(已加载的应用程序)”列表中,并在对话框的左下部显示加载信息。
(3)完成加载后,单击Load按钮关闭对话框,系统将运行“Hello.lsp”程序。
实例说明
1.LISP源文件为ACSII格式,并忽略空格键、Tab键和回车键产生的空白。
文件中的注释部分可放在文件中任何一处,但必须以分号“;”开始。
2.在编辑窗口中对文件进行编辑时,如果对文件进行了修改或添加了文本,则编辑窗口标题栏上的控制图标将变为,同时VisualLISP在状态栏上的文件名后面显示星号“*”。
用户保存该文件后,控制图标变为,同时状态栏上的星号消失。
3.VisualLISP中为程序编写提供了专门的文本编辑器。
该编辑器不仅仅是一个书写工具,不但具有常规的编辑功能,同时还具有许多专为支持AutoLISP编程而设计的功能,主要包括:
(1)文件语法着色:用于识别AutoLISP程序的不同部分并给它们指定各自的颜色。
这使得用户可以更容易地找到程序的各个组成部分和拼写错误。
(2)设置文本格式:可以设置AutoLISP代码的格式,使代码更易于阅读。
用户可以从许多种不同的格式样式中挑选自己喜欢的格式。
(3)括号匹配:可以通过查找与任意开括号匹配的闭括号来帮助用户检测括号匹配错误。
(4)执行AutoLISP表达式:不必离开文本编辑器就可以测试表达式和代码行。
(5)多文件查找:文本编辑器用单个命令就可以在多个文件中查找某个词或表达式。
(6)AutoLISP代码的语法检查:文本编辑器可以对AutoLISP代码进行求值并亮显语法错误。
4.在AutoCAD中还可以自动加载LISP程序。
每次启动AutoCAD时,AutoCAD都从库路径中搜索acad.lsp文件。
如果找到该文件,则将它加载到内存中。
如果用户在每次运行AutoCAD时都需要加载某个AutoLISP程序,则可将该程序复制到acad.lsp文件中即可实现自动加载。
用户还可指定在每次创建新文件时加载acad.lsp文件。
另一种由AutoCAD自动加载的AutoLISP程序文件用于定义当前菜单的支持函数,其文件扩展名为.mnl。
当AutoCAD加载菜单文件时,它用匹配的文件名来搜索.mnl文件。
如果AutoCAD找到了该文件,则将它加载到内存中。
此功能确保AutoCAD加载适当的菜单操作所需的AutoLISP函数。
因此,也可以把LISP程序复制在当前菜单相应的.mnl 文件中以实现自动加载。
.mnl文件在acad.lsp之后加载。