autocad lisp教程

合集下载

CAD二次开发lisp教程《第四章》

CAD二次开发lisp教程《第四章》

(2)工具栏 Visual LISP提供了 提供了Standard,View,Debug,Tools和Search五 提供了 , , , 和 五 个工具栏 .
① Standard工具栏 工具栏
建立一个新文件 存盘 剪切 粘贴 恢复 打开一个已有的文件 打印输出 复制 取消 完词功能
Tools工具栏 ② Tools工具栏
删除被选中的文本并将其移到Windows剪贴板 剪贴板 删除被选中的文本并将其移到 将选中的文本复制到剪贴板中 将剪贴板内容粘贴到光标位置 清空控制台窗口 在控制台窗口中查找指定文本 打开"检验" 打开"检验"对话框 打开"监视" 打开"监视"窗口 打开"自动匹配选项" 打开"自动匹配选项"窗口 打开"符号服务" 打开"符号服务"对话框 放弃最近的操作 重新执行上次放弃的操作 将所有输入传送到 AutoCAD 命令行以供求值 切换是否将控制台窗口的输出复制到日志文件
Hale Waihona Puke 2. 使用控制台窗口的历史记录
提示下, 在_$提示下,每按一次 提示下 每按一次Tab键,回溯前一次输入的字符串,作为当前输入. 键 回溯前一次输入的字符串,作为当前输入. 到了第一次输入的字符串时,再按Tab键,返回最后一次输入的字符串,周 到了第一次输入的字符串时,再按 键 返回最后一次输入的字符串, 而复始.每按一次Shift+Tab键时,将进行反向回溯. 键时, 而复始.每按一次 键时 将进行反向回溯.
控制台快捷菜单
4. 记录控制台窗口的活动
日志文件的文件类型为" 日志文件的文件类型为 " .log", , 它记录了控制台窗口的所有活动, 它记录了控制台窗口的所有活动 , 通 过浏览该文件可以回顾控制台窗口中 执行的命令. 执行的命令. 在控制台窗口通过下拉菜单 File→Toggle Console Log或快捷菜单 → 或快捷菜单 Toggle Console Log可以建立日志文件. 可以建立日志文件. 可以建立日志文件

标注坐标的lisp程序

标注坐标的lisp程序

标注坐标的lisp程序1、新建一个TXT文本文件,并将下面代码复制进文本内,如下图:2、将该文本文件保存并修改文件名为bzzb.lsp,这里的扩展名一定要改成lsp哦!然后就如下图这样3、在任何版本的AUTOCAD软件内命令行内输入“appload”命令,然后选择该文件进行加载程序,如下图4、程序加载好后,就可以在命令行内输入“bz”命令进行对图中文字注记进行分层显示了。

(defun c:bz();标注坐标(setvar "cmdecho" 0)(command "osnap" "app,end,center")(setq zbd (getpoint "\n请点击要标注坐标的点:"))(command "osnap" "off")(setq zbd2 (getpoint "\n请点击伸出的第二个点:"))(command "line" zbd zbd2 "")(setq zbd2x (car zbd2))(setq zbd2y (cadr zbd2))(setq zbdx (car zbd))(setq zbdy (cadr zbd))(if (>= zbd2x zbdx)(progn(command "line" zbd2 (list (+ zbd2x 30) zbd2y) "")(command "text" "s" "Standard" "j" "bl" (list (+ zbd2x 1.2) (+ zbd2y 1)) "2" "0" (strcat "X = " (rtos zbdy 2 3)))(command "text" "s" "Standard" "j" "tl" (list (+ zbd2x 1.2) (- zbd2y 1)) "2" "0" (strcat "Y = " (rtos zbdx 2 3))))(progn(command "line" zbd2 (list (- zbd2x 30) zbd2y) "")(command "text" "s" "Standard" "j" "bl" (list (- zbd2x 28) (+ zbd2y 1)) "2" "0" (strcat "X = " (rtos zbdy 2 3)))(command "text" "s" "Standard" "j" "tl" (list (- zbd2x 28) (- zbd2y 1)) "2" "0" (strcat "Y = " (rtos zbdx 2 3))))))。

CAD二次开发lisp教程《第一章》

CAD二次开发lisp教程《第一章》

集成环境下可以便捷, 程序, 在VLISP集成环境下可以便捷,高效地开发 集成环境下可以便捷 高效地开发AutoLISP程序, 程序 可以经过编译得到运行效率更高,代码更加紧凑, 可以经过编译得到运行效率更高 ,ual LISP是新一代 是新一代AutoLISP语言,它对 语言, 是新一代 语言 它对AutoLISP语言进行 语言进行 了 扩 展 , 可 以 通 过 Microsoft ActiveX Automation 接 口 与 AutoCAD对象交互,可以通过反应器函数扩展 对象交互,可以通过反应器函数扩展AutoLISP响应事 对象交互 响应事 件的能力. 件的能力. 如果使用Visual LISP对AutoLISP扩展功能的部份,必须调用 扩展功能的部份, 如果使用 对 扩展功能的部份 vl-load-com 函 数 , 或 者 将 调 用 该 函 数 的 表 达 式 写 在 acad2006doc.lsp 文件内. 文件内.
第1章 章
AutoLISP和Visual LISP 和
1.1 关于 关于LISP
LISP是人工智能领域中广泛采用的一种程序设计语言.主要用于人工智 是人工智能领域中广泛采用的一种程序设计语言. 是人工智能领域中广泛采用的一种程序设计语言 机器人,专家系统,博奕,定理证明等领域. 能,机器人,专家系统,博奕,定理证明等领域. LISP也被称为符号式语言,因为它处理的对象是符号表达式.LISP语言 也被称为符号式语言,因为它处理的对象是符号表达式. 语言 也被称为符号式语言 的程序和数据都是以符号表达式的形式来表示,因此,一个LISP程序可以把 的程序和数据都是以符号表达式的形式来表示,因此,一个 程序可以把 另一个LISP程序作为它的数据来处理. 程序作为它的数据来处理. 另一个 程序作为它的数据来处理 LISP语言语法简单,编写程序便捷,灵活,数据类型丰富.利用 语言语法简单,编写程序便捷,灵活,数据类型丰富.利用LISP语 语言语法简单 语 言可以很容易地定义或调用新的函数.这就是Autodesk公司早在 公司早在1985年的 年的2.1 言可以很容易地定义或调用新的函数.这就是 公司早在 年的 版本就引用了LISP语言的宏操作, 在 1986年的 版本就推出了比较完整的 版本就引用了 语言的宏操作, 年的2.5版本就推出了比较完整的 语言的宏操作 年的 AutoLISP语言的原因. 语言的原因. 语言的原因 LISP在它几十年的发展过程中产生了多种版本,如MacLISP,InterLISP 在它几十年的发展过程中产生了多种版本, 在它几十年的发展过程中产生了多种版本 , ,ZetaLISP,和CommonLISP等.其中 , 等 其中CommonLISP是近几年美国的几所大 是近几年美国的几所大 如麻省理工,斯坦福等)和工业界( 实验室, 公司, 公司 学(如麻省理工,斯坦福等)和工业界(如Bell实验室,DEC公司,HP公司 实验室 公司 等 ) 的人工智能研究人员协同推出的 , 它概括了MacLISP, InterLISP, 它概括了 , , ZetaLISP等版本的特点,因而功能较强且拥有其它版本的一些优点,是目前 等版本的特点, 等版本的特点 因而功能较强且拥有其它版本的一些优点, LISP语言较完整的版本. 语言较完整的版本. 语言较完整的版本

AutoLISPVisualLISP教程学习教程

AutoLISPVisualLISP教程学习教程
在Methods supported (支持的方法)部份列出了可以对过 AutoCAD应用程序施加Eval、GetAcadState、GetInterface Object等 操作。
第9页/共87页
10.2.2访问其他AutoCAD对象
获取AutoCAD应用程序这个根对象之后,沿着AutoCAD对象模 型图,就可以将其作为起点,逐级访问它的下一级VLA对象。
第5页/共87页
2. 了解AutoCAD应用程序的属性和方法
(vlax-dump-object VLA对象 [T]),该函数的功能是列出指定 VLA对象的属性和方法,参数为VLA对象,如果未设置T,只列出 指定VLA对象的属性。例如
(vlax-dump-object myacad t)返回
; IAcadApplication: An instance of the AutoCAD application
; ZoomCenter (2) ; ZoomExtents () ; ZoomPickWindow () ; ZoomPrevious () ; ZoomScaled (2) ; ZoomWindow (2)
第8页/共87页
在Property values(属性)部份列出了AutoCAD应用程序具 有ActiveDocument(活动的文档)、Application(应用程序的 指针)、Caption(标题)、FullName(可执行文件名)等属性。
第13页/共87页
; Handle (RO) = "81" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 040a53f4> ; Layer = "0" ; Length (RO) = 50.0 ; Linetype = "ByLayer" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Normal = (0.0 0.0 1.0) ; ObjectID (RO) = 2129985160 ; ObjectName (RO) = "AcDbLine" ; OwnerID (RO) = 2129984760 ; PlotStyleName = "ByLayer" ; StartPoint = (10.0 20.0 0.0) ; Thickness = 0.0 ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 040a6db0> ; Visible = -1

AutoCAD 2008 Visual LISP二次开发入门到精通

AutoCAD 2008 Visual LISP二次开发入门到精通

第5章Visual LISP集成开发环境(2)在AutoCAD的命令提示行输入vlisp或者vlide。

5.2 Visual LISP环境界面Visual LISP环境界面如图5-2所示。

图5-2 Visual LISP编辑器Visual LISP环境界面由以下几部分组成:(1)菜单栏:Visual LISP编辑器提供了各式各样的菜单栏来调用Visual LISP的命令。

当某个菜单栏高亮显示时,Visual LISP就会在底部的状态栏上显示关于此命令的说明文字。

(2)工具栏:Visual LISP中一共有五个工具栏,通过单击工具栏按钮可以快速地调用Visual LISP命令。

每一个工具栏代表一个在Visual LISP中实现不同功能的命令组,大多数命令都可以在工具栏中调用。

将鼠标指针停留在工具栏某个按钮上几秒钟,将弹出说明该按钮功能的提示,同时在状态栏上会显示该功能的详细介绍。

(3)文本编辑器:Visual LISP包括了一个集成的文本编辑器,可以用来编辑AutoLISP 代码。

每打开一个文件,Visual LISP将新开一个文本编辑窗口,并在这个窗口的状态栏上显示文件名。

如果用户在编辑器中对代码作了改动,或者添加了新的文本,Visual LISP就会在文件后面显示一个星号“*”,保存或关闭文件之后星号消失。

(4)控制台:控制台是一个单独的,内容可以滚动的窗口。

在控制台中,可以像在AutoCAD命令行那样输入AutoLISP命令。

还可以在控制台窗口输入Visual LISP命令,以7980AutoCAD 2008 Visual LISP 二次开发入门到精通 附录367891011121312第5章 4代替使用菜单和工具栏命令。

(5)跟踪窗口:在启动Visual LISP 时,可以看到一个最小化了的跟踪窗口,该窗口显示Visual LISP 当前版本的信息,以及当启动Visual LISP 遇到错误时的出错信息。

CAD二次开发Visual_LISP指南

CAD二次开发Visual_LISP指南

CAD二次开发Visual_LISP指南CAD二次开发是指在CAD软件平台上进行个性化开发和定制化编程,以满足用户特定需求Visual LISP是AutoCAD软件的一种编程语言,通过使用Visual LISP语言可以对AutoCAD进行二次开发。

下面是CAD二次开发Visual LISP的指南,希望对开发人员有所帮助。

一、入门准备1.学习基础知识在开始进行CAD二次开发前,需要充分了解AutoCAD软件的基本功能和特点,熟悉CAD软件的界面、命令、对象模型以及常用API(应用程序接口)等。

2.掌握Visual LISP语言Visual LISP是CAD软件平台上的一种编程语言,与AutoLISP类似。

学习和掌握Visual LISP语言是进行CAD二次开发的基础。

可以通过学习书籍、在线教程和参考文档等途径来提高自己的编程能力。

3.安装开发工具需要安装CAD软件的开发工具,例如AutoCAD自带的AutoCAD Developer Tools或者Visual LISP IDE等。

这些工具提供了编写、调试和管理二次开发项目的必要环境。

二、开始二次开发1.确定需求在进行CAD二次开发前,需要明确开发的具体需求和目的。

这可以包括添加自定义命令、修改现有功能、创建用户界面等等。

确保清晰地定义需求和目标,以便更好地进行开发工作。

2.编写代码通过Visual LISP语言编写代码来实现二次开发的需求。

VisualLISP提供了一系列的函数和命令,可以对AutoCAD的对象模型进行访问和操作。

根据需求,编写相应的函数、宏和命令,实现具体的功能。

3.调试和测试在编写代码后,进行调试和测试是不可或缺的步骤。

通过运行调试器、打印日志、进行单元测试等方式来验证代码的正确性和稳定性。

及时修复和调整代码中的问题,确保其能够正常运行。

4.文档和发布完成开发工作后,建议对代码进行适当的文档整理和注释,方便后续的维护和管理。

autocad-lisp教程

autocad-lisp教程

autocad-lisp教程Lisp教程一.Lisp基础知识二.对话框基础一.基本知识第1节--------------------------------------------------------------------------------基本知识AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50目的是令使用者充份利用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.像素名称在图文件内是唯一的,不会重复对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象档案(FILE)以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量选集(PICKSET)转化(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 (LIST10 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的主控台窗口中,于提示符号_$ 后键入要显示的变量名称_$变量名称要检查变量所储存的数据型态,可使用内建函数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的结果若没有提供任何参数则传回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 数值参数)(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 = 分数(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上式中两个数值参数均为整数,而结果值大于整数型态所能容许之范围;固导致发生溢位问题,产生无效的结果.修正算式如下: 只要将其中一个参数改为实数型态即可.(+ 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 [参数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 : nilCOMMAND : (= (- 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))程序说明2 WHILE循环函数,并设定进入循环的条件式(变量COUNT小于或等于变量NUM)3 若条件成立即进入循环内部,先将变量TOTAL加上变量COUNT,再用SETQ函数存回变量TOTAL中,覆盖原值4 将变量COUNT递增1,存回变数COUNT并覆盖原值5 关括号与第2行的WHILE函数左边的开括号对应6 循环结束后,用PRINC函数显示变量TOTAL(总和)的内容程序流程假设执行程序时传入变量NUM的数值为10---- 变数初始值COUNT = 1 TOTAL = 0---- 判断变量COUNT是否<=变量NUM COUNT = 1 TOTAL = 0---- 变量COUNT(现值1)小于NUM,进入循环;将TOTAL(现值0)加上COUNT,存回变数TOTAL COUNT = 1 TOTAL = 1---- 变数COUNT(现值1)递增1变为2,存回变数COUNT COUNT = 2 TOTAL = 1。

AutoLISP从入门到精通初级教程(新手必备)

AutoLISP从入门到精通初级教程(新手必备)

AutoLISP从入门到精通初级教程(新手必备)AutoLISPxx单元一: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的记事本、P2、P3、D3、书中仙、汉书、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 支持软件。

AutoCAD之AutoLisp入门教程

AutoCAD之AutoLisp入门教程

AutoLisp入门教程本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。

首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, Visual LISP!”。

36.2.1 Visual LISP与AutoCAD的通信用户可以直接在AutoCAD命令行中键入AutoLISP表达式。

AutoCAD通过括号来确认AutoLISP表达式。

AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。

注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。

此外,在AutoCAD中调用并执行AutoLISP程序。

在AutoLISP程序中采用COMMAND函数来与AutoCAD 命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。

36.2.2 实例1 最简单的LISP程序——“Hello.lsp”Step 1 创建新文件(1) 运行AutoCAD 2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入Visual LISP环境。

(2) 单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。

Step 2 输入代码并保存文件(1) 在编辑窗口中输入源文件“Hello.lsp”的代码,如图36-3所示。

程序清单如下:;;;* 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进行通信[img]/Files/AutoCad/146-1.JPG[/img](2) 单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。

Autolisp基础教程

Autolisp基础教程

ㄟAutolisp基础教程单元一:AutoLISP主角潇洒登场(setver “cmdecho” 0) 设定指令不相应(steq “filedia” 0)设定打开文件的时候不弹出窗口一. 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(二)

一步步学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-Visual-LISP教程《第六章》

AutoLISP-Visual-LISP教程《第六章》

单击按钮 ,光标停在(getdist p1 "输入矩形的宽:") 之前,并亮显该表达式。注意,指示按钮内的"I"回到"()"之 前。监视窗口内的变量p1=[100.0 80.0 0.0]。重复类似的操 作,在AutoCAD窗口输入矩形的宽度为200、高度为150,旋转角 为30。在操作过程中指示按钮随时显示着光标相对于表达式的 位置,监视窗口显示着这些变量的当前值(注意,alf的单位为 弧度)。也说明单击按钮 只执行了一步表达式求值。
2. 监视窗口的快捷菜单
选择监视列表中的某一项并单击鼠标右键,可显示图6-4所示监视窗口 的快捷菜单。
调用检验功能,查看所选值。 将所选变量的值复制到系统变量 *obj* 中。 将所选变量值加上一个单引号前缀”,打印到把握台窗口。 对所选变量调用符号效劳对话框。 调用自动匹配选项对话框,用所选变量名作自动匹配参数。 从监视窗口中删除所选变量。
从断点循环退出,将恢复上一层循环。假设在该断 点循环中修改了某变量的值,程序连续运行时将使用变 量修改后的值。
断点循环分为可连续断点循环和不行连续断点循环。
1. 可连续的断点循环 可连续的断点循环是指可以在程序中断处,连续向下执行剩
余的表达式。用以下方法进入可连续断点循环: 〔1〕翻开Stop Once模式,遇到带调试信息的表达式时。 〔2〕遇到带Debug on Entry〔进入时调试〕标志的函数时。 〔3〕遇到程序中设置的断点时。 〔4〕单击暂停按钮进入断点循环时。 〔5〕在前一个断点循环状态下,执行Step Into、Step Over或 Step Out时。
图6-2 Debug下拉菜单
下下跳连退重设添显调
一一出续出置置加示试
层个表执当为或监上指

CAD二次开发lisp教程《第二章》

CAD二次开发lisp教程《第二章》

2.2 变量 2.2.1 符号
符号( 符号(SYMBOL)可以理解为标识,用来作为变量,函数 )可以理解为标识,用来作为变量, 的名字.它的命名规则是不能只含数字, 的名字.它的命名规则是不能只含数字,可以由下列字符以 外的任何可打印的字符所组成: 外的任何可打印的字符所组成: "(",")","","'",""",";" , , , 例如, , 是合法的符号, , , , 例如 , a1,b2 , c_3是合法的符号,(a,)b,.c,'4,"5 是合法的符号 , 是非法的符号.注意: , , , , , , , , 是非法的符号. 注意: [1],{2},~3,!4,/5,1a,3c,-d, +e,b-2,c*3也是合法的符号, 这是与多数计算机语言的不 , , 也是合法的符号, 也是合法的符号 同之处. 同之处.
第2章 章
数据类型,表达式和函数 数据类型,
AutoLISP的数据类型丰富,除了一般程序设计语言具有的整 的数据类型丰富, 的数据类型丰富 实型, 字符串等类型之外, 还有表, 函数, 文件描述符, 型 , 实型 , 字符串等类型之外 , 还有表 , 函数 , 文件描述符 , AutoCAD选择集 , AutoCAD图元名 , VLA对象 , 函数分页表和 选择集, 图元名, 对象, 选择集 图元名 对象 外部函数等数据类型. 外部函数等数据类型.
2.2.2 变量的数据类型
AutoLISP变量属于符号,是指存储静态数据的符号. 变量属于符号,是指存储静态数据的符号. 变量属于符号 数据类型是变量的重要的特征, 数据类型是变量的重要的特征 , 因为它关系到存放变量值的 存储空间的大小. 存储空间的大小.多数的计算机语言都在为变量赋值前对变量做 显式或隐式的说明.AutoLISP无须对变量做事先的类型说明, 无须对变量做事先的类型说明, 显式或隐式的说明 . 无须对变量做事先的类型说明 变量被赋予值的类型即为变量的类型. 变量被赋予值的类型即为变量的类型. 函数对变量赋值, 用setq函数对变量赋值,例如,(setq a 5),赋值后的结果是 函数对变量赋值 例如, ) 赋值后的结果是 变量a是整型的 因为5是整型的 同样的原因,( 是整型的, 是整型的; :变量 是整型的,因为 是整型的;同样的原因 (setq b 2.5) ) 之后, 是实型的 是实型的, 就是字符串类型的. 之后 b是实型的,(setq c "ABC")之后 就是字符串类型的. )之后,c就是字符串类型的

AutoCAD二次开发实用教程第1章 Visual Lisp 概述

AutoCAD二次开发实用教程第1章 Visual Lisp 概述

1.2 AutoLISP语言 1、1.Auto LISP的优点
1) 源于LISP的AutoLISP语言语法规则简单,灵活 且易学易用。 2)功能函数强大,编写环境简单。 3) 可根据需求对AutoCAD进行二次开发,实现对 Auto CAD的图形实体和各种参数表的数据进行 存取和编辑,易于交互。 4) 解释执行, 立竿见影。
本章作业
教材第一章: 习题 1,2,3,4,5
1.2 AutoLISP语言
AutoLISP 是 由 Autodesk 公 司 为 二 次 开 发 AutoCAD而专门设计的编程语言,它起源于LISP语 言 , 嵌 入 在 AutoCAD 的 内 部 , 是 LISP 语 言 和 AutoCAD有机结合的产物。 它 既 有 LISP 语 言 人 工 智 能 的 特 性 , 又 具 有 AutoCAD强大的图形编辑功能。它可以把AutoLISP 程序和 AutoCAD 的绘图命令透明地结合起来,使之 成为一体,还可以实现对 AutoCAD 图形数据库的直 接访问和利用, AutoLISP语言可以自动绘制各种复 杂的图形,定义新的 AutoCAD命令、驱动对话框、 为AutoCAD扩充智能化、参数化的功能。
第1章 Visual LISP语言概述
本章要求:
1.了解Visual LISP的运行环境及启动、退出。
2.了解Visual LISP功能及特点。 3. 熟习Visual LISP在AutoCAD下的开发环境。 4. 进行简单的AutoLISP程序设计。
1.1 LISP语言简介
LISP ( List Processing Language)是表处理语言,主要用于 人工智能(AI)、专家系统、机器人、博弈和定理证明等领 域。该语言于1958年开发成功,以后陆续出现多个不同的版 本。 LISP语言的发展经历了如下几个时期: 1)两年酝酿阶段(1956--1958),这个时期形成了LISP的基 本思想。 2)实现与应用时期(1958--1962),这个时期的发展基本上 是单线的。 3) “百家争鸣”时期(1962--1984),在这个时期LISP的发 展呈现多样化,形成了多种LISP语言。 4)标准化时期(1984至今),LISP语言的发展进入了标准化 时代。

AutoCAD 14 Visual LISP 用户指南说明书

AutoCAD 14 Visual LISP 用户指南说明书

A p r il 23,1998A u t o C A D 14R E L E A S E ®V i s u al L I S P G u i d eC o p y r i g h t©1998A u t o d e s k,I n c.A ll R i g h t s R e s e r v e dT h i s p u b li c a t i o n,o r p a r t s t h e r e o f,m a y n o t b e r e p r o d u c e d i n a n y f o r m,b y a n y m e t h o d,f o r a n y p u r p o s e.A U T O D E S K,I N C.M A K E S N O W A RR A N T Y,E I T H E R E X P R E SS E D O R I M P L I E D,I N C L U D I N GB U T N O T L I M I T E D T O A N Y I M P L I E D W A RR A N T I E S O F M E RC H A N T A B I L I T Y O R F I T N E SS F O R A P A R T I C U L A R P U R P O S E,R E G A RD I N G T HE S E M A T E R I A L S A N D M A K E S S U C H M A T E R I A L S A V A I L A B L E S O L E L Y O N A N“A S-I S”B A S I S.I N N O E V E N T S H A LL A U T O D E S K,I N C.B E L I A B L E T O A N Y O N E F O R S P E C I A L,C O LL A T E R A L,I N C I D E N T A L,O R C O N S E Q U E N T I A L D A M A G E S I N C O NN E C T I O N W I T H O R A R I S I N G O U T O F P U R C H A S E O R U S E O F T H E S E M A T E R I A L S.T H E S O L E A N D E X C L U S I V E L I A B I L I T Y T O A U T O D E S K,I N C.,R E G A R D L E SS O F T H E F O R M O F A C T I O N,S H A LL N O T E X C EE D T H E P U R C H A S E P R I C E O F T H E M A T E R I A L S D E S C R I B E D H E R E I N.A u t o d e s k,I n c.r e s e r v e s t h e r i g h t t o r e v i s e a n d i m p r o v e i t s p r o d u c t s a s i t s ee s f i t.T h i s p u b li c a t i o n d e s c r i b e s t h e s t a t e o f t h i s p r o d u c t a t t h e t i m e o f i t s p u b li c a t i o n,a n d m a y n o t r e f l e c t t h e p r o d u c t a t a ll t i m e s i n t h e f u t u r e.A u t o d e s k T r a d e m a r k sT h e f o ll o w i n g a r e r e g i s t e r e d t r a d e m a r k s o f A u t o d e s k,I n c.,i n t h e U S A a n d/o r o t h e r c o u n t r i e s:3D P l a n,3D P r o p s,3D S t u d i o,3D S t u d i o M A X,3D S u r f e r,A D C A DD,A D E,A D I,A d v a n c e d M o d e li n g E x t e n s i o n,A E C A U T H O R I T Y,A E C-X,A M E,A n i m a t o r P r o,A n i m a t o r S t u d i o, A T C,A u t o-A r c h i t e c t,A u t o C A D,A u t o C A D D a t a E x t e n s i o n,A u t o C A D D e v e l o p m e n t S y s t e m,A u t o C A D L T,A u t o C A D M a p,A u t o d e s k, A u t o d e s k A n i m a t o r,t h e A u t o d e s k l o g o,A u t o d e s k U n i v e r s i t y,A u t o d e s k V i e w,A u t o L I S P,A u t o S h a d e,A u t o S k e t c h,A u t o S o li d,A u t o S u r f, A u t o V i s i o n,C A D O V E R L A Y,D e s i g n B l o c k s,D e s i g n C o m p a n i o n,D R A F I X,E d u c a t i o n b y D e s i g n,G e n e r i c,G e n e r i c C A DD,G e n e r i c S o f t w a r e, G e n e r i c3D D r a f t i n g,G e o d y ss e y,H e i d i,H OO P S,I n s i d e T r a c k,K i n e t i x,M a t e r i a l S p e c,M e c h a n i c a l D e s k t o p,M u l t i m e d i a E x p l o r e r,N AA U G, O ff i c e S e r i e s,O p u s,P i c t u r e T h i s H o m e!,P L A N I X,R A S T A T I O N,S o f t d e s k(g oo d s),S o f t d e s k(s e r v i c e s),S o l u t i o n3000,S T A R D E S I G N, T E C H T A L K,T e x t u r e U n i v e r s e,T H E A E C A U T H O R I T Y,T H E A U T O A R C H I T E C T,T i n k e r T e c h,W H I P!,W oo db o u r n e,W o r k C e n t e r,a n d W o r l d-C r e a t i n g T oo l k i t.T h e f o ll o w i n g a r e t r a d e m a r k s o f A u t o d e s k,I n c.,i n t h e U S A a n d/o r o t h e r c o u n t r i e s:3D f o r t h e P C,3D S t u d i o V I Z,A C A D,A d v a n c e d U s e r I n t e r f a c e,A E C O ff i c e,A M E L i n k,A n i m a t i o n P a r t n e r,A n i m a t i o n P l a y e r,A n i m a t i o n P r o P l a y e r,A S t u d i o i n E v e r y C o m p u t e r,A T L A S T, A u t o-A r c h i t e c t,A U G I,A u t o C A D L e a r n i n g A ss i s t a n c e,A u t o C A D L T L e a r n i n g A ss i s t a n c e,A u t o C A D S i m u l a t o r,A u t o C A D S Q L E x t e n s i o n, A u t o C A D S Q L I n t e r f a c e,A u t o C D M,A u t o d e s k A n i m a t o r C li p s,A u t o d e s k A n i m a t o r T h e a t r e,A u t o d e s k D e v i c e I n t e r f a c e,A u t o d e s k M a p G u i d e,A u t o d e s k P h o t o E D I T,A u t o d e s k S o f t w a r e D e v e l o p e r’s K i t,A u t o d e s k V i e w D w g X,A u t o d e s k W a l k T h r o u g h,A u t o d e s k W o r l d, A u t o E D M,A u t o F li x,A u t o L a t h e,A u t o S n a p,B i p e d,b r i n g i n g i n f o r m a t i o n d o w n t o e a r t h,B u il t w i t h O b j e c t A R X,C a r p e D a t u m,C h a r a c t e r S t u d i o,C o n c e p t S t u d i o,C o n t e n t E x p l o r e r,c o r n e r S t o n e T oo l k i t,D E S I G N X,D e s i g n S c a p e,D e s i g n e r’s V i s i o n,D e s i g n Y o u r W o r l d,D X F, D W G U n p l u gg e d,E x e g i s,F L I,F L I C,G D X D r i v e r,G e n e r i c3D,H o m e S e r i e s,H y p e r W i r e,M A X D W G,M u l t i p e d,N e t H e a d,O b j e c t A R X, O b j e c t D X F,O c t o p e d,P e o p l e T r a c k e r,P H O T O L A N D S C A P E,P H O T O S C A P E,P h y s i q u e,P o l a r S n a p,P o w e r a n d L i g h t,P o w e r e d w i t h A u t o d e s k T e c hn o l o g y,Q u a d r u p e d,Q u i c k C A D,R a d i o R a y,S c h oo l B o x,S k e t c h T oo l s,S m o k e a n d M i rr o r s,S u dd e n l y E v e r y t h i n g C li c k s, S u pp o r t d e s k,T o t a l H o u s e,T r a n s f o r m s I d e a s I n t o R e a li t y,a n d V i s u a l L I S P.T h i r d P a r t y T r a d e m a r k sM i c r o s o f t,V i s u a l B a s i c,a n d W i n d o w s a r e r e g i s t e r e d t r a d e m a r k s,a n d A c t i v e X,W i n d o w s N T,a n d W i n d o w s95a r e t r a d e m a r k s o f M i c r o s o f t C o r p o r a t i o n.D e l p h i i s a t r a d e m a r k o f B o r l a n d I n t e r n a t i o n a l.A ll o t h e r b r a n d n a m e s,p r o d u c t n a m e s o r t r a d e m a r k s b e l o n g t o t h e i r r e s p e c t i v e h o l d e r s.G O V E R N M E N T U S EU s e,d u p li c a t i o n,o r d i s c l o s u r e b y t h e U.S.G o v e r n m e n t i s s u b j e c t t o r e s t r i c t i o n s a s s e t f o r t h i n F A R12.212(C o mm e r c i a l C o m p u t e r S o f t w a r e-R e s t r i c t e d R i g h t s)a n d D F A R267.7202(R i g h t s i n T e c hn i c a l D a t a a n d C o m p u t e r S o f t w a r e),a s a pp li c a b l e.C o n t e n t s-V i s u a l L I S P G u i d eC o n t e n t s-V i s u a l L I S P G u i d e i vI n t r o d u c t i o n14A u t o L I S P a n d V i s u a l L I S P15A u t o L I S P15V i s u a l L I S P15W h a t V i s u a l L I S P O ff e r s15W o r k i n g W i t h V i s u a l L I S P a n d A u t o C A D16H o w T h i s G u i d e i s O r g a n i z e d17R e c o mm e n d a t i o n s o n U s i n g T h i s G u i d e17F i r s t:R e a d C h a p t e r118N e x t:A r e Y o u R e a d y f o r t h e T u t o r i a l,o r...?18U s i n g t h e H e a r t o f t h e M a n u a l18D o c u m e n t C o n v e n t i o n s19C h a p t e r1Q u i c k T o u r22G e tt i n g S t a r t e d23B e f o r e Y o u B e g i n23S t a r t i n g V i s u a l L I S P23O v e r v i e w o f t h e V i s u a l L I S P U s e r I n t e r f a c e24T h e V i s u a l L I S P T e x t E d i t o r25O t h e r V i s u a l L I S P W i n d o w s26M e n u O v e r v i e w26V a r i a b l e M e n u C o n t e n t s26M e n u S u mm a r y27T h e C o n s o l e28T e x t E d i t o r O v e r v i e w29L o a d i n g a n d R u nn i n g A u t o L I S P P r o g r a m s30R u nn i n g S e l e c t e d L i n e s o f C o d e32E x i t i n g t h e V i s u a l L I S P E n v i r o n m e n t32i vC h a p t e r2A u t o L I S P B a s i c s34A u t o L I S P E x p r e ss i o n s35A u t o L I S P D a t a T y p e s36I n t e g e r s36R e a l s36S t r i n g s37L i s t s37S e l e c t i o n S e t s37E n t i t y N a m e s38V L A O b j e c t s38F il e D e s c r i p t o r s38S y m b o l s a n d V a r i a b l e s39A u t o L I S P F u n c t i o n S y n t a x39A u t o L I S P P r o g r a m F il e s40F o r m a tt i n g A u t o L I S P C o d e40S p a c e s i n A u t o L I S P C o d e41C o mm e n t s41V i s u a l L I S P C o mm e n t S t y l e s42C o l o r C o d i n g42A u t o L I S P V a r i a b l e s42D i s p l a y i n g t h e V a l u e o f a V a r i a b l e43N il V a r i a b l e s43P r e d e f i n e d V a r i a b l e s44N u m b e r H a n d li n g44S t r i n g H a n d li n g45B a s i c O u t p u t F u n c t i o n s47D i s p l a y i n g M e ss a g e s48E x i t i n g Q u i e t l y48C o n t r o l C h a r a c t e r s i n S t r i n g s49W il d-C a r d M a t c h i n g50E q u a li t y a n d C o n d i t i o n a l52L i s t H a n d li n g52P o i n t L i s t s54D o tt e d P a i r s56S y m b o l a n d F u n c t i o n H a n d li n g57C:XXX F u n c t i o n s58A dd i n g C o mm a n d s60R e d e f i n i n g A u t o C A D C o mm a n d s60L o c a l V a r i a b l e s i n F u n c t i o n s62L o c a l V a r i a b l e s V e r s u s G l o b a l V a r i a b l e s62E x a m p l e U s i n g L o c a l V a r i a b l e s63F u n c t i o n s w i t h A r g u m e n t s64C o n t e n t svC h a p t e r3U s i n g A u t o L I S P t oC o mm u n i c a t e w i t hA u t o C A D66Q u e r y a n d C o mm a n d F u n c t i o n s67C o mm a n d S u b m i ss i o n67F o r e i g n-L a n g u a g e S u pp o r t68P a u s i n g f o r U s e r I n p u t68P a ss i n g P i c k P o i n t s t o A u t o C A D C o mm a n d s69S y s t e m a n d E n v i r o n m e n t V a r i a b l e s69C o n f i g u r a t i o n C o n t r o l70D i s p l a y C o n t r o l70C o n t r o lli n g M e n u s70C o n t r o l o f G r a p h i c s a n d T e x t W i n d o w s73C o n t r o l o f L o w-l e v e l G r a p h i c s74G e tt i n g U s e r I n p u t74T h e g e t xxx F u n c t i o n s75C o n t r o l o f U s e r-I n p u t F u n c t i o n C o n d i t i o n s77I n p u t O p t i o n s f o r U s e r-I n p u t F u n c t i o n s77K e y W o r d O p t i o n s78A r b i t r a r y K e y b o a r d I n p u t79I n p u t V a li d a t i o n79G e o m e t r i c U t ili t i e s80O b j e c t S n a p80T e x t E x t e n t s81C o n v e r s i o n s84S t r i n g C o n v e r s i o n s85A n g u l a r C o n v e r s i o n87A S C II C o d e C o n v e r s i o n88U n i t C o n v e r s i o n89C o n v e r t i n g f r o m I n c h e s t o M e t e r s90T h e U n i t D e f i n i t i o n F il e90C oo r d i n a t e S y s t e m T r a n s f o r m a t i o n s92P o i n t T r a n s f o r m a t i o n s94F il e H a n d li n g95F il e S e a r c h95A cc e ss i n g H e l p F il e s96D e v i c e A cc e ss a n d C o n t r o l97A cc e ss i n g U s e r I n p u t97C a li b r a t i n g T a b l e t s98C h a p t e r4U s i n g A u t o L I S P t oM a n i pu l a t e A u t o C A DO b j e c t s102S e l e c t i o n S e t H a n d li n g103C o n t e n t sv iC o n t e n t s v iiS e l e c t i o n S e t F il t e r L i s t s105W il d-C a r d P a tt e r n s i n F il t e r L i s t s107F il t e r i n g f o r E x t e n d e d D a t a107R e l a t i o n a l T e s t s107L o g i c a l G r o u p i n g o f F il t e r T e s t s108S e l e c t i o n S e t M a n i p u l a t i o n109P a ss i n g S e l e c t i o n S e t s B e t w ee n A u t o L I S P a n d O b j e c t A R XA pp li c a t i o n s110O b j e c t H a n d li n g111E n t i t y N a m eF u n c t i o n s111E n t i t y H a n d l e s a n d T h e i r U s e s112E n t i t y C o n t e x t a n d C oo r d i n a t e T r a n s f o r m D a t a113E n t i t y A cc e ssF u n c t i o n s116E n t i t y D a t aF u n c t i o n s116W o r k i n g w i t h B l o c k s120A n o n y m o u sB l o c k s120C r e a t i n g C o m p l e x E n t i t i e s121E n t i t y D a t aF u n c t i o n s a n d t h eG r a p h i c s S c r ee n123P o l y li n e s a n d L w p o l y li n e s123P r o c e ss i n g C u r v e-F i t a n d S p li n e-F i t P o l y li n e s124 N o n g r a p h i c O b j e c t H a n d li n g124S y m b o l T a b l e O b j e c t s125D i c t i o n a r y O b j e c t s126E x t e n d e d D a t a—X d a t a126O r g a n i z a t i o n o f E x t e n d e d D a t a127R e g i s t r a t i o n o f a n A pp li c a t i o n130R e t r i e v a l o f E x t e n d e d D a t a130A tt a c h m e n t o f E x t e n d e d D a t a t o a n E n t i t y131M a n a g e m e n t o f E x t e n d e d D a t a M e m o r y U s e132H a n d l e s i n E x t e n d e d D a t a132X r e c o r d O b j e c t s134S y m b o l T a b l e a n d D i c t i o n a r y A cc e ss134S y m b o l T a b l e s135D i c t i o n a r yE n t r i e s137A cc e ss i n g A u t o C A D G r o u p s137C h a p t e r5D e v e l o p i n g P r o g r a m sW i t h V i s u a l L I S P138G e tt i n g O r g a n i z e d139T h e S y s t e m C o n s o l e139S y s t e m C o n s o l e B e h a v i o r140T h e S y s t e m C o n s o l e C o n t e x t M e n u141S e p a r a t o r s P r o c e ss i n g142C o l o r C o d i n g o f C o n s o l e I n p u t143C o n t e x t-S e n s i t i v e H e l p f o r V i s u a l L I S P F u n c t i o n s143L o gg i n g C o n s o l e A c t i v i t y143A cc e ss i n g N a t i v e A u t o L I S P f r o m V i s u a l L I S P144B o u n c i n g B e t w ee n A u t oC AD a n d V i s u a l L I S P145U s i n g t h e T e x t E d i t o r145W o r k i n g w i t h F il e s145E n t e r i n g T e x t146U n d o i n g t h e L a s t C h a n g e Y o u M a d e146S a v i n g Y o u r C h a n g e s147A u t o m a t i cB a c k u p F il e s147E d i t i n g a n E x i s t i n gF il e147C o l o r C o d i n g148C o n t e x t-S e n s i t i v e H e l p f o r F u n c t i o n s149T h e T e x t E d i t o r C o n t e x t M e n u149W o r d s i n t h e V i s u a l L I S P T e x t E d i t o r150T e x t E d i t o r S h o r t c u t s151C o m p l e t e W o r d b y M a t c h151C o m p l e t e W o r d b y A p r o p o s151F o r m a tt i n g S h o r t c u t K e y s154N a v i g a t i o n S h o r t c u t s155T e x t C o rr e c t i o n S h o r t c u t s155T e x t S e l e c t i o n S h o r t c u t s156M o v i n g a n d C o p y i n g T e x t157I n d e n t i n g T e x t157S e a r c h i n g f o r T e x t158R e p l a c i n g T e x t160B oo k m a r k i n g T e x t160F o r m a tt i n g C o d e w i t h t h e V i s u a l L I S P F o r m a tt e r162R u nn i n g t h e F o r m a tt e r162V i s u a l L I S P F o r m a tt i n g F u n d a m e n t a l s163B a s i c F o r m a tt i n g S t y l e s163A dd i t i o n a l F o r m a tt i n g O p t i o n s165C o mm e n t S t y l e s170I n d e n t a t i o n R u l e s171S a v i n g a n d R e s t o r i n g F o r m a tt i n g O p t i o n s171F o r m a tt e r R e s t r i c t i o n s171C h e c k i n g f o r S y n t a x E rr o r s172C h e c k i n g t h e B a l a n c e o f P a r e n t h e s e s172U s i n g C o l o r C o d i n g t o D e t e c t S y n t a x E rr o r s173U s i n g t h e C h e c k C o mm a n d t o L oo k f o r S y n t a x E rr o r s174 R u nn i n g Y o u r P r o g r a m175C h a p t e r6D e b u gg i n g P r o g r a m s176D e b u gg i n g i n V i s u a l L I S P177C o n t e n t sv iiiC o n t e n t s i xD e b u gg i n gE x a m p l e178S e tt i n g a B r e a k p o i n t t o I n t e rr u p t P r o g r a m E x e c u t i o n178S t e pp i n g T h r o u g h t h e P r o g r a m179T r a c i n g t h e E v a l u a t i o n R e s u l t s o f a n E x p r e ss i o n181T r a c i n g V a r i a b l e s D u r i n g P r o g r a m E x e c u t i o n182C o n t i n u i n g P r o g r a m E x e c u t i o n183D e b u gg i n g F e a t u r e s183S t a r t i n g D e b u gg i n g184T h e B r e a k L oo p184C o n t i n u a b l e B r e a k L oo p s185N o n-c o n t i n u a b l e B r e a k L oo p s186B r e a k p o i n t s186S e tt i n g a n d D e l e t i n g B r e a k p o i n t s186D i s a b li n g B r e a k p o i n t s187L i s t i n g a n d V i e w i n g t h e B r e a k p o i n t s i n Y o u r P r o g r a m188L i f e C y c l e o f a B r e a k p o i n t188V i s u a l L I S P D a t a I n s p e c t i o n T oo l s189T h e W a t c h W i n d o w190A dd i n g a V a r i a b l e t o t h e W a t c h W i n d o w190W a t c h T oo l b a r191U s i n g t h e W a t c h I t e m C o n t e x t M e n u191T h e T r a c e S t a c k W i n d o w193S t a c k E l e m e n t L i s t s194V i e w i n g t h e C u rr e n t T r a c e S t a c k195D i s p l a y i n g I n f o r m a t i o n o n a T r a c e S t a c kE l e m e n t195F r a m e B i n d i n g W i n d o w196K e y w o r d F r a m e s196S p e c i a l F u n c t i o n C a ll F r a m e s198V i e w i n g a n E rr o r T r a c e S t a c k198T r a c e S t a c k T oo l b a r199T h e S y m b o l S e r v i c e D i a l o g199S y m b o l S e r v i c e T oo l b a r200S y m b o l F l a g s201I n s p e c t o r W i n d o w s201I n s p e c t o r D i a l o g B o x202O b j e c t E l e m e n t L i s t F o r m a t s202O p e n i n g a n I n s p e c t o r D i a l o g203H a n d li n g E rr o r s i n t h e I n s p e c t C o mm a n d203C l o s i n g a ll I n s p e c t o rD i a l o g s204C o mm o n I n s p e c t o r C o mm a n d s204S p e c i f i c A u t o L I S P D a t a t y p e I n s p e c t o r s205V i e w i n g A u t o C A D D r a w i n g E n t i t i e s208V i e w i n g E n t i t i e s i n t h e D r a w i n g D a t a b a s e208V i e w i n g T a b l e s i n t h e D r a w i n g D a t a b a s e210V i e w i n g B l o c k s i n t h e D r a w i n g D a t a b a s e211V i e w i n g S e l e c t e d O b j e c t s i n a D r a w i n g211V i e w i n g E x t e n d e d D a t a212C h a p t e r7B u il d i n g A pp li c a t i o n s214C o m p ili n g a n d L i n k i n g P r o g r a m s215H o w t o U s e t h e C o m p il e r215C o m p ili n g a P r o g r a m f r o m a F il e216C h oo s i n g a C o m p il e r M o d e216I d e n t i f y i n g t h e I n p u t F il e216N a m i n g a n O u t p u t F il e217W a l k i n g T h r o u g h a C o m p il e E x a m p l e218L o a d i n g a n d R u nn i n g a C o m p il e d P r o g r a m218L i n k i n g F u n c t i o n C a ll s219B u il d i n g S t a n d-a l o n e A pp li c a t i o n s219M a k i n g F u n c t i o n s K n o w n t o A u t o C A D220E x p li c i t l y E x p o r t i n gF u n c t i o n N a m e s t o A u t o C A D220I m p li c i t l y E x p o r t i n g F u n c t i o n N a m e s t o A u t o C A D221I d e n t i f y i n g F u n c t i o n s D e f i n e d i n E x t e r n a l A pp li c a t i o n s221U s i n g t h e V i s u a l L I S P R u n-T i m e S y s t e m223S h i pp i n g t h e R T S W i t h Y o u r A pp li c a t i o n224L o a d i n g t h e V i s u a l L I S P R T S224I n i t i a li z i n g t h e R u n-t i m e S y s t e m224U s i n g a S t a r t-U p F il e225F u n c t i o n s D e f i n e d b y t h e S a m p l e S t a r t-U p F il e225U s i n g t h e R T S a n d N a t i v e A u t o L I S P E n v i r o n m e n t sC o n c u rr e n t l y227C o n t r o lli n g t h e V e r b o s i t y o f R T S I n i t i a li z a t i o n228P a r t i a l R e i n i t i a li z a t i o n a t A u t o C A D N e w/O p e n C o mm a n d s228 M a k i n g A pp li c a t i o n M o d u l e s228U s i n g t h e A pp li c a t i o n W i z a r d229S t a r t i n g t h e A pp li c a t i o n W i z a r d230W i z a r d S t e p1:C h oo s i n g a n A pp li c a t i o n T y p e230W i z a r d S t e p2:N a m i n g t h e E x e c u t a b l e F il e231W i z a r d S t e p3:I d e n t i f y i n g t h e L o a d M e t h o d232W i z a r d S t e p4:I d e n t i f y i n g t h e P r o g r a m F il e s233W i z a r d S t e p5:I d e n t i f y i n g D i a l o g C o n t r o l(D C L)F il e s234W i z a r d S t e p6:D e f i n i n g E x t e r n a l F u n c t i o n s235W i z a r d S t e p7:S e tt i n g I n i t i a li z a t i o n O p t i o n s236W i z a r d S t e p8:M a k i n g t h e A pp li c a t i o n238U n d e r s t a n d i n g t h e O u t p u t f r o m t h e M a k e A pp li c a t i o n239L o a d i n g a n d R u nn i n g A pp li c a t i o n s240L o a d i n g a n d R u nn i n g a n A R X A pp li c a t i o n240L o a d i n g a n d R u nn i n g a V L X A pp li c a t i o n242R e b u il d i n g a n A pp li c a t i o n242C o n t e n t sxC o n t e n t s x i U s i n g t h e A pp li c a t i o n W i z a r d t o R e b u il d a n A pp li c a t i o n242 R e b u il d i n g a n A pp li c a t i o n f r o m I t s M a k e F il e242C h a p t e r8M a i n t a i n i n g V i s u a l L I S P A pp li c a t i o n s244M a n a g i n g M u l t i p l e L I S P F il e s245I n t r o d u c i n g V i s u a l L I S P P r o j e c t s245L S P,F A S a n d o t h e r F il e T y p e s245D e f i n i n g a P r o j e c t247A ss i g n i n g P r o j e c t P r o p e r t i e s248S e l e c t i n g t h e F il e s t o I n c l u d e i n a P r o j e c t248C h a n g i n g t h e O r d e r i n W h i c h V i s u a l L I S P L o a d s F il e s251C h oo s i n g C o m p il e r B u il d O p t i o n s251U s i n g t h e P r o j e c t W i n d o w t o W o r k w i t h P r o j e c t F il e s252S e l e c t i n g M u l t i p l e P r o j e c t M e m b e r s254L o a d i n g P r o j e c t F il e s254C o m p ili n g a n d R e c o m p ili n g P r o j e c t F il e s255E d i t i n g P r o j e c tF il e s255S a v i n g a n d C l o s i n g t h e P r o j e c t256W o r k i n g W i t h E x i s t i n g P r o j e c t s256O p e n i n g a P r o j e c t256F i n d i n g a S t r i n g i n P r o j e c t S o u r c e F il e s257M a k i n g a n A pp li c a t i o n f r o m a P r o j e c t258O p t i m i z i n g A pp li c a t i o n C o d e260D e f i n i n g B u il d O p t i o n s260C h oo s i n g a C o m p il a t i o n M o d e261A n a l y z i n g f o r O p t i m i z a t i o n C o rr e c t n e ss262U n d e r s t a n d i n g P r o j e c t B u il d O p t i o n s263L i n k M o d e263D r o pp i n g F u n c t i o n s263L o c a li z i n g V a r i a b l e s264S a f e O p t i m i z a t i o n264C o m p il e r C h e c k i n g o f O p t i m i z i n g C o n d i t i o n s266C h a p t e r9A d v a n c e d T o p i c s268U s i n g A c t i v e X O b j e c t s w i t h V i s u a l L I S P269U n d e r s t a n d i n g t h e A u t o C A D O b j e c t M o d e l270O b j e c t P r o p e r t i e s270O b j e c t M e t h o d s271C o ll e c t i o n s o f O b j e c t s271A cc e ss i n g A u t o C A D O b j e c t s271U s i n g t h e I n s p e c t T oo l t o V i e w O b j e c t P r o p e r t i e s272M o v i n g F o r w a r d F r o m t h e A pp li c a t i o n O b j e c t273S u mm a r i z i n g t h e P r o c e ss274U s i n g V i s u a l L I S P F u n c t i o n s w i t h A c t i v e X M e t h o d s275D e t e r m i n i n g t h e V i s u a l L I S P F u n c t i o n Y o u N ee d275D e t e r m i n i n g H o w t o C a ll a F u n c t i o n276T r a n s l a t i n g V i s u a l B a s i c A r g u m e n t s t o V i s u a l L I S PA r g u m e n t s278V i e w i n g a n d U p d a t i n g O b j e c t P r o p e r t i e s279D e t e r m i n i n g I f a n O b j e c t C a n b e A cc e ss e d281U s i n g A c t i v e X M e t h o d s T h a t R e t u r n V a l u e s i n A r g u m e n t s282 L i s t i n g a n O b j e c t’s P r o p e r t i e s a n d M e t h o d s283D e t e r m i n i n g i f a M e t h o d o r P r o p e r t y A pp li e s t o a n O b j e c t283W o r k i n g W i t h C o ll e c t i o n O b j e c t s284R e t r i e v i n g M e m b e r O b j e c t s i n a C o ll e c t i o n287C o n v e r t i n g A r g u m e n t s287R e l e a s i n g O b j e c t s a n d F r ee i n g M e m o r y288C o n v e r t i n g O b j e c t R e f e r e n c e s288A tt a c h i n g R e a c t o r s t o A u t o C A D D r a w i n g s290R e a c t o r T y p e s a n d E v e n t s290D e f i n i n g C a ll b a c k F u n c t i o n s291D e f i n i n g L i n k e r,E d i t o r,a n d D a t a b a s e R e a c t o r s292D e f i n i n g O b j e c t R e a c t o r C a ll b a c k F u n c t i o n s292U s i n g P r e d e f i n e d C a ll b a c k F u n c t i o n s292C r e a t i n g R e a c t o r s292U s i n g O b j e c t R e a c t o r s294Q u e r y i n g,M o d i f y i n g a n d R e m o v i n g R e a c t o r s296I n s p e c t i n g R e a c t o r s296Q u e r y i n g R e a c t o r s U s i n g F u n c t i o n C a ll s297M o d i f y i n g R e a c t o r s298D i s a b li n g R e a c t o r s299T r a n s i e n t v e r s u s P e r s i s t e n t R e a c t o r s300A pp e n d i x A A u t o L I S PF u n c t i o n R e f e r e n c e302S e l e c t i o n S e t F il t e r s422R e l a t i o n a l T e s t s422L o g i c a l G r o u p i n g o f F il t e r T e s t s424C o n t e n t sx iiC o n t e n t s x iii14I n t h i s c h a p t e r I n t r o d u c t i o nF o r y e a r s ,A u t o L I S P h a s s e t t h e s t a n d a r d f o r c u s t o m i z i n g C A D .V i s u a l L I S P r e p r e s e n t s t h e n e x t g e n e r a t i o n o f L I S P f o r A u t o C A D .V i s u a l L I S P n o w a dd s s i g n i f i c a n t l y m o r e c a p a b il -i t i e s t o A u t o L I S P f o r A u t o C A D .I t e x t e n d s t h e l a n g u a g e t o i n t e r f a c e w i t h o b j e c t s v i a t h e M i c r o s o f t A c t i v e X ™A u t o m a -t i o n i n t e r f a c e ,a n d a dd s t h e a b ili t y t o h a v e A u t o L I S P r e s p o n d t o e v e n t s v i a o b j e c t r e a c t o r s .A s a d e v e l o p m e n t t oo l ,V i s u a l L I S P p r o v i d e s a c o m p l e t e i n t e g r a t e d d e v e l o p -m e n t e n v i r o n m e n t (I D E ),i n c l u d i n g a c o m p il e r ,d e b u gg e r ,a n d o t h e r t oo l s t o i n c r e a s e p r o d u c t i v i t y i n r a p i d l y c u s t o m -i z i n g A u t o C A D .n A u t o L I S P a n d V i s u a l L I S P n W o r k i n g w i t h V i s u a l L I S P a n d A u t o C A D n H o w t h i sG u i d e i s O r g a n i z e d n R e c o mm e n d a t i o n s o n U s i n g t h i s G u i d e n D o c u m e n t C o n v e n -t i o n sA u t o L I S P a nd V i s u a l L I S PA u t o L I S PA u t o L I S P i s a p r o g r a mm i n g l a n g u a g e d e s i g n e d f o r e x t e n d i n g a n d c u s t o m i z-i n g A u t o C A D f u n c t i o n a li t y.I t i s b a s e d o n t h e L I S P p r o g r a mm i n g l a n g u a g e,w h o s e o r i g i n s d a t e b a c k t o t h e l a t e1950s.L I S P w a s o r i g i n a ll y d e s i g n e d f o r u s ei n A r t i f i c i a l I n t e lli g e n c e(A I)a pp li c a t i o n s,a n d i s s t ill t h e b a s i s o f m a n y A Ia pp li c a t i o n s.A u t o C A D i n t r o d u c e d A u t o L I S P a s a n a pp li c a t i o n p r o g r a mm i n g i n t e r f a c e(A P I)i n r e l e a s e2.1,i n t h e m i d-1980s.L I S P w a s c h o s e n a s t h e i n i t i a l A u t o C A DA P I b e c a u s e i t w a s u n i q u e l y s u i t e d f o r t h e u n s t r u c t u r e d d e s i g n p r o c e ss o fC AD p r o j e c t s,w h i c h i n v o l v e s i t e r a t i v e l y t r y i n g d i ff e r e n t s o l u t i o n s t o a p r o b-l e m.V i s u a l L I S PV i s u a l L I S P(V L I S P)i s a s o f t w a r e t oo l d e s i g n e d t o e x p e d i t e A u t o L I S P p r o g r a md e v e l o p m e n t.V L I S P’s i n t e g r a t e d d e v e l o p m e n t e n v i r o n m e n t p r o v i d e s f e a-t u r e s t o h e l p e a s e t h e t a s k s o f s o u r c e-c o d e c r e a t i o n a n d m o d i f i c a t i o n,p r o-g r a m t e s t i n g,a n d d e b u gg i n g.I n a dd i t i o n,V L I S P p r o v i d e s a v e h i c l e f o r d e li v-e r i n g s t a n d-a l o n e O b j e c t A R X a pp li c a t i o n s w r i tt e n i n A u t o L I S P.I n t h e p a s t,d e v e l o p i n g A u t o L I S P p r o g r a m s f o r A u t o C A D m e a n t w o r k i n g w i t hs o m e t e x t e d i t o r(w h i c h y o u h a d t o p r o v i d e)t o w r i t e y o u r c o d e,t h e n l o a d i n gt h e c o d e i n t o A u t o C A D a n d r u nn i n g i t.D e b u gg i n g y o u r p r o g r a m m e a n t a dd-i n g s t a t e m e n t s t o p r i n t t h e c o n t e n t s o f v a r i a b l e s a t s t r a t e g i c p o i n t s i n y o u rp r o g r a m.Y o u h a d t o f i g u r e o u t w h a t w e r e g oo d p o i n t s i n y o u r p r o g r a m t o d ot h i s,a n d w h a t v a r i a b l e s y o u n ee d e d t o l oo k a t.I f y o u d i s c o v e r e d y o u s t illd i d n’t h a ve e n o u g h i nf o r m a t i o n t o d e t e r m i n e t h e e rr o r,y o u h a d t og o b a c ka n d c h a n g e t h e c o d e a g a i n,a dd i n g m o r e d eb u gg i n g p o i n t s.A n d f i n a ll y,w h e n y o u g o t t h e p r o g r a m t o w o r k c o rr e c t l y,y o u n ee d e d t o e i t h e r c o mm e n to u t o r r e m o v e t h e d e b u gg i n g c o d e y o u a dd e d.W h a t V i s u a l L I S P O ff e r sD u r i n g t h e d e v e l o p m e n t c y c l e o f a n A u t o L I S P a pp li c a t i o n o r r o u t i n e,t h eA u t o L I S P u s e r p e r f o r m s a n u m b e r o f o p e r a t i o n s w h i c h a r e n o t a v a il a b l ew i t h i n t h e A u t o C A D s o f t w a r e.S o m e o f t h e s e o p e r a t i o n s,li k e t e x t e d i t i n g,a r ea v a il ab l e w i t h o t h e r s o f t w a r e t oo l s.O t h e r s,s uc h a s f u ll A u t o L I S P s o u r c e-l e v e ld e b u gg i n g,a r e i n t r o d u c e d o n l y w i t h V i s u a l L I S P.W i t h V i s u a l L I S P t h e u s e rc a n p e r f o r m m o s t o f t h e n e c e ss a r y o p e r a t i o n s i n s ide t h e s i n g l e e n v i r o n m e n t,I n t r o d u c t i o n15。

用LISP语言自定义AutoCAD命令

用LISP语言自定义AutoCAD命令

用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”在绘制机械零件图时,经常要画螺纹孔的剖视图,同样由于螺纹孔的有关尺寸都随螺纹的公称直径而变化,我们可以用下面的程序自动完成其剖视图的绘制。

lisp教程

lisp教程

14.1 关于AutoLISPAutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor 的缩写)。

第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。

除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP却生下来,并且已经成为人工智能(AI)的首选程序序言。

AutoLISP 解释程序位于AutoCAD软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。

AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。

例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。

通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。

事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。

现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。

目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。

在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。

但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。

同时,本章还假定读者并无编程方面的知识。

如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。

对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。

本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。

lisp教程

lisp教程
连续测量线长的程序.LSP
面积统计.LSP
不错的小程序,关键还是源代码,谢谢,很实用!不会用的朋友可以将文件打开后,直接将程序内容,拷到你的cad安装目录下support文件夹里的acad2004.lsp(cad2006是acad2006.lsp)里,这个文件用记事本打开,将程序的内容贴到后面就行了,注意简化命令是defun C:后的、(前面的那几个字符,谢谢楼主!
亩和平方米的互换.lsp
删除鼠标框内交点之间的线段.LSP
动态查询信息程序.LSP
单独提取图层程序.
把面积写在图上.lsp
文字对齐程序.lsp
直接在图上写出这个范围的面积.LSP
自动计算面积.lsp
计算总长度的程序.lsp
调整对象XY比例.LSP

AUTOCADLISP操作数据库

AUTOCADLISP操作数据库

AUTOCADLISP操作数据库AutoCAD Lisp操作数据库是指在AutoCAD环境下,使用Lisp语言与数据库进行交互,实现数据的读取、写入、更新等操作。

Lisp是一种程序设计语言,可以与AutoCAD软件进行集成,为用户提供更强大的功能。

在AutoCAD Lisp中,可以使用Open Database Connectivity(ODBC)接口实现与数据库的交互。

ODBC是一种标准的数据库访问接口,可以使Lisp程序与各种类型的数据库进行通信,包括MySQL、SQL Server、Oracle等。

首先,需要在Lisp程序中设置ODBC连接,连接到指定的数据库。

可以使用`setq`命令定义一个连接字符串,其中包括数据库的用户名、密码、主机地址等信息。

然后使用`odbc-connect`函数建立与数据库的连接。

连接数据库后,可以使用一系列的Lisp函数进行数据库操作。

例如,可以使用`odbc-query`函数执行SQL查询语句,并将查询结果保存为Lisp列表。

查询结果可以用于绘制AutoCAD图形,或者用于其他需要的操作。

另外,还可以使用`odbc-exec`函数执行SQL更新语句,实现对数据库进行增删改操作。

更新操作可以用于修改AutoCAD图纸中的对象属性,或者更新数据库中的记录。

除了使用ODBC接口,还可以使用其他库函数实现数据库操作。

例如,可以使用`sql-find`函数查询数据库中的记录,并将结果存储在Lisp变量中。

查询结果可以用于自动创建AutoCAD图形,或者进行其他处理。

此外,还可以使用Lisp的特性,如循环、条件判断等,将数据库操作与AutoCAD绘图功能结合起来。

例如,可以根据数据库中的记录生成不同的图形,或者根据图纸中的对象属性更新数据库中的数据。

总之,AutoCAD Lisp操作数据库是一种强大的功能,可以实现与数据库的无缝集成。

通过Lisp语言的灵活性和AutoCAD的绘图功能,可以实现自动化的数据库操作,提高工作效率。

LISP安装与应用CAD命令

LISP安装与应用CAD命令
LISP CAD二次开发
LISP CAD二次开发
编写:KK /130708
ห้องสมุดไป่ตู้
LISP CAD二次开发
1
作用
高幅度提升CAD绘图效率
LISP CAD二次开发
2
一 安装 二 应用
LISP CAD二次开发安装
3
1.1 启动AutoCAD 2008,输入命令“OP”调出选项窗口,点击“文 件”在支持文件搜索路径中点“添加”如下两个路径: Z:\研发中心\产品设计部\共享软件或插件\LIPS程序\lisp Z:\研发中心\产品设计部\机构设计科(ME)\IN
5
IN CC Z AS DDI O CZ
SS GG FA RO LA Ctrl+V Windos+D E CEN INT ARC RE 面域 插入块 复制 窗口缩放 移动 标注线性 偏移 转0层 转SENSOR层 显示所有层 全倒角 旋转 打开图层 粘贴 显示桌面 删除 圆心 交点 描线 刷新 MT SC HS J M DDA S CD NN F ET X Ctrl+N Ctrl+S REC END PER Ctrl+Shift+V H+Y 编辑多行文字 缩放 填充实体 闭合 镜像 标注直径 拉伸 转DIM层 显示指定层 倒角 全连接 炸开 新建 保存 画框 端点 垂足 粘贴成块 填充网格
LISP CAD二次开发安装

1.3 命令栏中输入“ap”,调出加载/卸载应用程序,加载文件夹Z:\研发中 心\产品设计部\共享软件或插件\LIPS程序\lisp 中ACAD5013.LSP该文档。点 击启动组中“内容”。把ACAD5013.LSP和sf.VLX文件添加进去。
LISP CAD二次开发应用命令
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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。

相关文档
最新文档