Autolisp基础教程

合集下载

AutoLisp入门篇

AutoLisp入门篇

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入门教程.doc

AutoLISP入门教程.doc

第 2 页,共 27 页
二、学好 AutoLISP 的关键:
充份掌握『语法结构』&『功能函数』的搭配!!! 其时这个关键亦是学习其它程 序语言的关键. 『语法结构』AutoLISP 的语法结构规定的并不多,变量不用事先定义及 宣告,读者可熟记下一单元有关重要的 AutoLISP 基本语法结构,十四条设 计上要求的『规则』 『功能函数』AutoLISP 之所以能功能如此强大,都有赖功能函数,其成员 共约 200 个: 1. 一般性函数 170 个 2. ADS 定义特殊函数 9 个 3. 配合 DCL 交谈框设计函数 22 个 各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然, 您可不 能乱给! 例如: 指令:(+ 1 2 3 "ABC") 传回:error : bad argument type (自变量型态错误) 因为『+』函数不接受字符串,而 "abc" 正是字符串 指令:(rtos "abc") 传回:error : bad argument type (自变量型态错误) 因为『rtos』函数只接受实数转字符串 详细内容可参考下一章『快速浏览 AutoLISP 功能函数』至于各功能函数详 细的语法与实例应用 ,读者请参阅本书『第三篇 AutoLISP 功能函数详解』
横 跨 各 作 业 悠 然 自 得 , 虽 然 AutoCAD 有 DOS 、 Windows 版 本 之 分 但 是 平台
D. 既然 AutoLISP 是 AutoCAD 的『最大功臣』,当然不会轻易被舍弃 ,如此, 您的学习,保证不会白费! E. 『精益求精』、『虚心求教』、『用心学习、观摩』、『决心成为高手』 3.对程序本身而言: A. 少少的几行,却可能有『大大满意』的时候!!! B. 充份掌握了控制、创造 AutoCAD 的『尚方宝剑』,让您在 AutoCAD 的设 计运作中『得心应手』,享受无比的快乐与成就感!!!

AutoLISP基础教程

AutoLISP基础教程

作者:今早去爬山目录第一章 AutoLISP 基础........................................................................................................................... 4 1.1 AutoLISP 简介........................................................................................................................ 4 1.2 AutoLISP 的基本结构和语法................................................................................................. 4 1.3 AutoLISP 程序的加载............................................................................................................. 6 1.4 本章总结.................................................................................................................................. 6 第二章 AutoLISP 功能函数分类........................................................................................................... 7 2.1.功能函数的分类....................................................................................................................... 7 2.2.数学运算功能函数................................................................................................................... 7 2.3 检验与逻辑运算功能函数....................................................................................................... 8 2.4 转换运算功能函数................................................................................................................... 8 2.5 列表处理功能函数................................................................................................................... 9 2.6 字符串、字符、文件处理函数............................................................................................... 9 2.7 等待输入功能函数................................................................................................................. 10 2.7 几何运算功能函数................................................................................................................. 10 2.8 对象处理功能函数................................................................................................................. 11 2.9 选择集、符号表处理功能函数............................................................................................. 11 2.10 AutoCAD 相关查询、控制功能函数................................................................................. 12 2.11 判断式、循环功能函数....................................................................................................... 12 2.12 函数处理、定义、追踪与错误处理功能函数 ................................................................... 12 2.13 显示、打印控制功能函数................................................................................................... 13 2.14 符号、元素、表达式处理功能函数................................................................................... 13 2.15 ADS、ARX、AutoLISP 加载与卸载函数......................................................................... 1412.16 内存空间管理函数............................................................................................................... 14 2.17 其他重要的功能函数........................................................................................................... 15 2.18 DCL 对话框定义相关的函数与命令.................................................................................. 15 2.19 本章总结............................................................................................................................... 15 第三章 AutoLISP 的程序设计............................................................................................................. 16 3.1 AutoLISP 的程序设计步骤................................................................................................... 16 3.2 第一个 AutoLISP 程序...........................................................................................................16 第四章 AutoLISP 参数化设计............................................................................................................ 22 4.1 什么是参数化设计................................................................................................................. 22 4.2 重要关键-三角函数................................................................................................................ 22 4.3 AutoLISP 三角函数和转换相关函数................................................................................... 24 4.4 三角函数应用实例................................................................................................................. 24 4.5 本章小结................................................................................................................................. 27 第五章 对象属性的获取与修改............................................................................................................28 5.1 什么是对象属性..................................................................................................................... 28 5.2 对象属性应用的相关功能函数............................................................................................. 28 5.3 在 AutoCAD 的命令提示行练习获取对象属性列表.......................................................... 28 5.4 对象属性的修改与更新......................................................................................................... 31 5.5 对象属性修改的应用练习..................................................................................................... 32 5.6 本章小结................................................................................................................................. 33 第六章 循环与判断式............................................................................................................................34 6.1 循环与判断式的作用............................................................................................................. 3426.2 判断式、循环相关功能函数................................................................................................ 34 6.3 IF 判断式应用......................................................................................................................... 36 6.4 COND 判断式应用.................................................................................................................37 6.5 repeat 循环式应用................................................................................................................. 37 6.6 WHILE 循环式的应用............................................................................................................ 38 6.7 本章小结................................................................................................................................ 39 第七章 AutoLISP 的子程序................................................................................................................ 40 7.1 什么是子程序........................................................................................................................ 40 7.2 子程序的应用........................................................................................................................ 40 7.3 子程序的自变量.................................................................................................................... 413第一章 AutoLISP 基础1.1 AutoLISP 简介一、AutoLISP AutoLISP 的由来是基于 LISP 语言衍生出来的高阶编程语言,专门用于 AutoCAD 及相 关的各种产品。

CAD二次开发教程AUTOLISP

CAD二次开发教程AUTOLISP

这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把 这些坐标赋予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从入门到精通初级教程(新手必备)

A u t o L I S P从入门到精通初级教程(新手必备)-CAL-FENGHAI.-(YICAI)-Company One1AutoLISP入门单元一:AutoLISP主角登场 .................................................................... 错误!未定义书签。

单元二:AutoLISP的关键、基本结构及语法 ........................................ 错误!未定义书签。

单元三:快速分类浏览AutoLISP功能函数(一) ..................................... 错误!未定义书签。

单元四:快速分类浏览AutoLISP功能函数(二) ..................................... 错误!未定义书签。

单元五:轻松快速的掌握AutoLISP设计技巧 ....................................... 错误!未定义书签。

单元六:图元数据的取得与活用技巧(一) ............................................. 错误!未定义书签。

单元七:图元数据的取得与活用技巧(二) ............................................. 错误!未定义书签。

单元八:新手上路-参数设计的关键技巧 .............................................. 错误!未定义书签。

单元一: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培训教程_4

AUTOLISP培训教程_4

AUTOLISP培训教程_4在工程设计和绘图领域,AUTOLISP 作为一种强大的编程语言,为我们提供了许多高效和便捷的工具。

接下来,让我们一起深入了解更多关于 AUTolisp 的知识和应用技巧。

首先,我们来谈谈 autolisp 中的数据类型。

AUTOLISP 支持多种数据类型,比如整数、实数、字符串、列表等等。

整数就是我们常见的没有小数部分的数字,实数则包含小数部分。

字符串就是被引号括起来的一系列字符。

而列表则是用括号括起来的一组数据,可以包含不同的数据类型。

理解这些数据类型是编写有效 autolisp 程序的基础。

函数是 autolisp 编程中的重要组成部分。

例如,(setq x 10) 这个语句,其中“setq”就是一个函数,用于给变量 x 赋值为 10 。

再比如,(+ 5 3) 会返回 8 ,这里的“+”就是一个用于加法运算的函数。

在实际编程中,我们经常需要进行条件判断。

比如,(if (> x 5) (princ "x 大于 5")(princ "x 不大于 5"))这个语句,如果变量 x 的值大于 5 ,就会输出“x 大于5”,否则输出“x 不大于5”。

通过合理使用条件判断,我们可以让程序根据不同的情况执行不同的操作。

循环结构在 autolisp 中也非常有用。

像(while (< x 10) (princ x) (setq x (+ x 1))),只要 x 小于 10 ,就会执行循环体中的操作,不断输出 x 的值,并将 x 的值增加 1 。

循环结构能够帮助我们处理需要重复执行的任务,提高编程效率。

接下来,我们说一说 autolisp 与 AutoCAD 的交互。

通过 autolisp ,我们可以获取 AutoCAD 中的图形对象信息,例如点、线、圆等的坐标、长度、半径等属性。

还可以使用 autolisp 来创建、修改和删除这些图形对象。

例如,要创建一个圆,可以使用(command "circle" "0,0" 5) 这个语句。

AutoLisp入门教程

AutoLisp入门教程

單元一:AutoLISP主角瀟灑登場一. AutoLISP 是何方神聖?1.AutoLISP是AutoCAD的最佳拍檔!2.AutoLISP內含於AutoCAD軟體內,不用另外花錢買!3.AutoLISP是強化AutoCAD最好、最直接的『程式語言』!4.AutoLISP易學、易用,即使不會程式設計的AutoCAD使用者,都能在最短的時間內,寫出令人驚訝、讚嘆的功能!5.若說AutoLISP的出現,是替AutoCAD 創造一片天的『最大功臣』,實不為過一點也不誇張!6.AutoLISP希望您去學習它、改善它、發揮它、享受它.真的!它的威力、魅力無窮!二. AutoLISP 程式語言的特質分析:學習AutoLISP是非常容易的,對初學者而言,即使沒有學習過任何的程式語言,都能很快的上手,寫出精彩漂亮的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编程入门

基本指南:两数求和在命令行输入:(+ 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(二)

一步步学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之间有没有空格都可以,而且要用命令全名,不能用简化命令,而且要用引号。

cad_lisp基础教程

cad_lisp基础教程
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
字符串 (STR) 一般文字,其前后必须加上双引号 " e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜线 \ e.g.
"\AutoCAD"
像素名称 (ENAME) 是指定给图文件内对象的指针(Pointer,为 16 进位的数字卷标)
e.g. <Entity name:14e5180> 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象
2
符号名称不分大小写,可由任意长度的可打印字符组成;但下列的字符除外: 左括号 ( 右括号 ) 句点 . 单引号 ' 双引号 " 分号 ;
表 (LIST) 亦称为串行,是放在一对小括号 ( ) 内,一个或多个元素的有序集合
e.g. (1.0 "Lisp" ( ) (5.6 7)) 元素可以是字符串,符号,整数或实数;也可以是另一个表 元素与元素之间要用空格隔开,但元素与小括号之间则可以不隔空格 为便于存取表内各元素,每个元素均有其序号;从表的左边开始,第一个元素序号为 0,

AutoLISP教程-杜宝江

AutoLISP教程-杜宝江
取得二点的距离 依辅助抓点模式取得另一座标点 依极座标法取得另一座标点 取得文字串的二对角点座标
(inters点1点2点3点4 [模式]) 取得两条线的交点
第八类 图元处理 功能函数
项目 8.1 8.2 8.3 8.4 8.5 8.6 函数语法 (entdel 图元名称 ) (entget 图元名称 [ 应用程 式串列 ]) (entlast) (entmake 图元串列 ) (entmod 图元串列 ) (entnext [ 图元名称 ]) 删除或逆删除图元 取出图元名称的资料串列 取出图形资料中的最后一个图元 建立一个新的图元串列 依更新的资料串列更新萤幕上元体 找寻图面中的下一个图元 请求选取一个图元,回应包含图元名称及选 点座标的串列 更新萤幕上复元体图形 图码的元体名称 BLOCK所含副元体图元资料串列 BLOCK所含副元体图元资料(4 x 4矩形表示) 传回
6.5 6.6 6.7 6.8 6.9
(getint [提示])
(getkword [提示]) (getorient [基点] [提示])
请求输入一整数值
请求输入『关键字』 请求输入十进位角度,回应一弪度值不受 angbase 、 angdir影响 请求输入一实数 请求输入一字串
(getpoint [基点] [提示]) 请求输入一个点座标 (getreal [提示]) (getstring [提示])
第一节 AutoLISP的基本语法结构
规则1 :以括弧()组成运算式, 、相对称左右括弧数一定要成双成对 规则2 :运算式型态: (运算元 运算子 运算子 „„) 运算元包括『功能函数』 & 『自定函式』;运算子(引数)包括: A.整数 (Integer), B.实数(Real),C.字串(String),D.串列(List)如(“a” “b” “c”), (xy),E.图元名称代码如<entity name: 6000f262>, F.档案代码如<file:#12438>,G.选择群集代码如<Selection set:1> 规则3 :运算式中的『运算子』 ,可以是另一『运算式』或『副程式』 规则4 :多重的括弧运算式,运算的先后顺序是『由内而外、由左而右』 规则5 :以档案型态存在的AutoLISP程式(ASCII档案),其副档名必须是.lsp 规则6 :撰写的环境, 文书编辑软体、记事本,可编辑ASCII档案者都适用 规则7 :以defun功能函数定义新的指令或新的功能函式 规则8 :新定义的功能函式名称,若为『 C:函式名』 ,则此函式可为AutoCAD新指令 规则9 :载入AutoLISP程式的作法: =>指令:后直接键入(load "LISP主档名") 规则10 : 分号; 后的内容为注解,程式不处理, 注解具可看性、学习性及完整性 规则11 : 变数型态是『整数』、『实数』、『字串』、『点串列』四种,变数的型 态依据设定值而自动定义,变数会一直储存该值,直到被重新设定值或绘图结束 规则12 :以setq功能函数设定变数值(setq变数名称设定值) 规则13 :欲在AutoCAD的环境中,查看一变数值,指令:下键入『 !变数名』即可 规则14 :以(defun C:函式名(引数/变数) ........)程式中,程式中的变数若在“/” 右边变数内,则称为『区域变数』 ,否则为『整体变数』

AutoLISP入门教程.doc

AutoLISP入门教程.doc

横 跨 各 作 业 悠 然 自 得 , 虽 然 AutoCAD 有 DOS 、 Windows 版 本 之 分 但 是 平台
D. 既然 AutoLISP 是 AutoCAD 的『最大功臣』,当然不会轻易被舍弃 ,如此, 您的学习,保证不会白费! E. 『精益求精』、『虚心求教』、『用心学习、观摩』、『决心成为高手』 3.对程序本身而言: A. 少少的几行,却可能有『大大满意』的时候!!! B. 充份掌握了控制、创造 AutoCAD 的『尚方宝剑』,让您在 AutoCAD 的设 计运作中『得心应手』,享受无比的快乐与成就感!!!
3.重要的 AutoLISP 的基本语法结构 规则 1: 以括号组成表达式,、相对称左右括号数一定要成双成对 规则 2: 表达式型态:(操作数 运算子 运算子 运算子) 1.1 操作数包括『功能函数』&『自定函式』 1.2 运算子(自变量)包括: A.整数(Integer) 如 8,-17,500,9999 ..... B.实数(Real) 如 8.5,-17.456 ..... C.字符串(String) 如 "AutoCAD","123" D.串行(List) 如 ("a" "b" "c"),(x y) E.像素名称代码 如 <entity name: 6000f262> F.档案代码 如 <file:#12438>..... G.选择群集代码 如 <Selection set:1> 规则 3:表达式中的『运算子』,可以是另一『表达式』或『子程序』 规则 4: 多重的括号表达式,运算的先后顺序是『由内而外、由左而右』 规则 5: 以档案型态存在的 AutoLISP 程序(ASCII 档案),其扩展名必须是.lsp 规则 6: 撰写的环境, 只要是一般的文书编辑软件、记事本,可编辑 ASCII 档 案者都适用 规则 7: 以 defun 功能函数定义新的指令或新的功能函式 规则 8: 新定义的功能函式名称,若为『C:函式名』,则此函式可为 AutoCAD 新指令 规则 9: 加载 AutoLISP 程序的作法:=> 指令:后直接键入 (load "LISP 主 檔名") 规则 10: AutoLISP 程序中,在『分号 ;』后的内容均为批注,程序不处理,适 时的增加批注,将使程序更具可看性、学习性及完整性 规则 11: AutoLISP 最常用的变量型态是『整数』、『实数』、『字符串』、 『点串行』四种,变量的型态依据设定值而自动定义 ,变量会一直储存该值,直到 被重新设定值或绘图结束自动消失 规则 12:以 setq 功能函数设定变量值 (setq 变量名称 设定值) 规则 13:欲在 AutoCAD 的环境中,查看一变量值,指令 :下键入『! 变量名』即 可 规则 14:以(defun C:函式名(自变量 / 变数) ........)程序中 ,程序中的变量若在 『/』右边变量内, 则称为『区域变量』,否则为『整体变量』

AutoLISP程序入门教学资料

AutoLISP程序入门教学资料

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基础教程
Autolisp 基础教程
单元一:AutoLISP 主角潇洒登场
一. AutoLISoCAD 的最佳拍檔!
2、AutoLISP 内含于 AutoCAD 软件内,不用另外花钱买!
3、AutoLISP 是强化 AutoCAD 最好、最直接的『程序语言』!
4、AutoLISP 易学、易用,即使不会程序设计的 AutoCAD 使用者,都能在最短的 时间内,写出
连一张图都没有画,甚至可能偶有发呆、沉思,若此程序一天可以替公司绘图部门节省 1 小时
绘图时间,那算一算,只要 20 天就抵销开发成本,而 20 天以后都是赚的,『用的愈久,省的愈多』

B. 若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要
派遣优秀人员出去受训,学习更好的设计技巧与创意呢?!
4、欲处理参数式绘图时.
5、欲做图面资料读文件、写文件.
6、欲做 AutoCAD 演示文稿展示时.
7、欲达到真正灵活掌控 AutoCAD 时.
8、欲提升自己跨上 AutoCAD 高手列车时.
四.AutoLISP 的效益评估?
1. 对公司负责人或设计主管而言:
A. 也许某员工或干部花了 20 个小时撰写一个 AutoLISP 程序,表面上,这将近三天的时间,他
令人惊讶、赞叹的功能!
若说 AutoLISP 的出现,是替 AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张!
5、AutoLISP 希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷!
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配,料置不试技仅卷术可要是以求指解,机决对组吊电在顶气进层设行配备继置进电不行保规空护范载高与中带资负料荷试下卷高总问中体题资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,.卷编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试5写交卷、重底保电要。护气设管装设备线置备4高敷动调、中设作试电资技,高气料术并中课3试中且资件、卷包拒料中管试含绝试调路验线动卷试敷方槽作技设案、,术技以管来术及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

Lisp教程(上册 基础)彩版

Lisp教程(上册 基础)彩版

AutoLisp基础教程课程简介课程主要介绍AutoLISP程序的编写,及AutoCAD的菜单应用;内容充实,绝无废话,并由浅入深,辅以练习加深了解.本课程适合一般的初学者;即使你对程序设计全无认识,亦可轻松应付. 全课共分为18篇,每篇一个主题;而每篇再分为若干小节,每天顺序显示.内文若有错漏,敬祁见谅,欢迎来函赐教,多谢!!课程大纲第一篇程序设计基本知识----- 函数,数据型态及变量第二篇数值数据处理----- 数值运算,转型及型态检查第三篇程序设计基础----- 自定函数,批注,关系及逻辑运算第四篇条件判断及流程控制----- 程序分支及循环第五篇输入及输出函数----- 用户输入及屏幕输出第六篇字符串数据处理----- 字符串转型及对比,控制字符第七篇串行数据处理----- 串行的建立,分离,增加,删除及搜寻第八篇像素数据处理----- 像素的建立,取得,删除及修改第九篇选集数据处理----- 选集的建立,增加及删除第十篇其它常用函数1 ----- 系统变量,屏幕显示,逻辑位第十一篇其它常用函数2 ----- 加载程序,取得数据第十二篇档案数据处理----- 档案的开启,关闭及数据存取第十三篇符号表处理----- 非图形对象数据第十四篇下拉式及快捷菜单----- 菜单节及菜单项第十五篇影像菜单----- 建立,加载及运用第十六篇工具栏----- 按钮及拉出式图标工具栏第十七篇自定线型及填充图案----- LIN及P AT档案的应用第十八篇脚本文件(Script)及指令别名定义文件----- SCR及PGP档案的应用注意事项在各篇课程所介绍的语法结构中,包含在方括号[]中的数据,表示为选择性项目;可因应情况,自行决定是否须要加上.字型为紫色的项目,表示可自行设定其名称或内容在各范列中,前部的COMMAND : 为绘图模式下之命令行的提示符号,不须输入.同一程序行中,在分号; 右边的文字为程序批注,可以不输入.在范例中,部份过长的指令行提示会以省略号.... 表示第一篇基本知识基本知识AutoLISP是一种针对扩充及自定义AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP 本身于50年代末期出现,是一种擅于处理串行文字(List of Processing),属第四代「人工智能(Artificial Intelligence)」的计算机语言.带小数字的数值,以倍精度浮点格式储存(最少14位小数)e.g. 12.5 当数值在1与-1之间时,必须加上前导零e.g. 0.05 可以科学记号表示 : 在E 或e 后加上次方值 e.g. 4.1e-6一般文字,其前后必须加上双引号 "e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜杠 \ e.g. "\AutoCAD"目的是令使用者充份利用AutoCAD 进行开发,直接增加及修改AutoCAD 指令.AutoLisp 语言建基于普通的LISP 语言上,并扩充了许多适用于CAD 的特殊功能而形成. 是一种能以直译方式(不须先行编译)亦可于Au t oCAD 内部执行的直译性程序语言. 程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响. 数据及程序均统一以串行 (List)结构表示.可直接调用几乎全部的AutoCAD 命令. 既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力. 内建于AutoCAD 应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境. 可配合AutoCAD 提供的PDB,建立DCL(Dialog Co n trol Language)文件创建对话框. 缺点 : 执行速度较ObjectArx(旧称ARX,以C 或C ++程序开发,取代以前的ADS)程序慢;原 程序不易保护;对低阶的硬件数据不易存取.函数 (Function)在AutoLISP 程序语言中所有的成份都是以函数的形式出现,AutoLISP 程序就是顺序执行连串的 函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下:(函数名称 参数1 参数2....) e.g. (PRINC "AutoLISP Program m ing")每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数 量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称.函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同.数据型态 (Data Type)整数 (INT)没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648实数 (REAL)字符串 (STR)像素名称 (ENAME)是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g. <Entity name:14e5180> 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象档案(FILE)以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量选集(PICKSET)用SSGET等函数建立的一个或多个对象的集合或群组转化(VARIANT)可将像素名称转换为可与ActiveX配搭使用的V L A-Object对象符号(SYM)用以储存静态数据的名称;例如内建或用户定义的函数符号名称不分大小写,可由任意长度的可打印字符组成;但下列的字符除外: 左括号(右括号)句点.单引号'双引号"分号;表(LIST)亦称为串行,是放在一对小括号( ) 内,一个或多个元素的有序集合e.g. (1.0 "Lisp" ( ) (5.6 7)) 元素可以是字符串,符号,整数或实数;也可以是另一个表元素与元素之间要用空格隔开,但元素与小括号之间则可以不隔空格为便于存取表内各元素,每个元素均有其序号;从表的左边开始,第一个元素序号为0,依此类推表的大小即为其顶层元素的数量(内层嵌套式的表,视为单一元素)点对(Dotted Pair)亦是表的一种;表内有2个元素,中间以一圆点分隔,且元素与圆点之间亦须以空格分开若表内没有任何元素,称为空串行或空表;以( ) 或(NIL) 表示变数(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)要显示变量所储存的数据,可以使用内建函数P R INC(可用于绘图模式的指令行或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练习(Exercises)将四个坐标分别存入四个变量中,并以LINE或P LINE指令,配合四个坐标变量,画出正四边形.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;半径为20 COMMAND : CIRCLE;执行划圆指令Specify center.... : !CEN;在提示后以变量CEN响应输入Specify radius.... : !RAD;在提示后以变量RAD响应输入将不同型态的数据,分多次存入相同的变数内;每次均以PRINC及TYPE函数显示变量内容及其数据型态COMMAND : (SETQ TEMP 1.2) ;将实数1.2存入变数TEMP COMMAND : !TEMP Result : 1.2COMMAND : (TYPE TEMP)Result : REALCOMMAND : (SETQ TEMP "AutoLISP") ;将字符串存入变量TEMPCOMMAND : !TEMP Result : "AutoLISP"COMMAND : (TYPE TEMP)Result : STR第二篇数值数据处理基本运算加函数(+ [数值参数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 ....] )e.g. (* 2 3 4) Result : 24结果为所有参数的乘积若只提供一个参数,则返回值为该参数乘以1的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数除函数(/ [数值参数1数值参数2 ....] )e.g. (/ 24 2 3) Result : 4结果为第一个(最左边)参数除以其右边各参数的乘积若仅提供一个参数,则返回值为该参数除以1的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数注意: 在本篇教程中,各函数的数值参数,均可以变量(储存值只可以是整数或实数,且不可以是空值nil)取代.练习(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反正切值(ATAN 弧度参数)e.g. (ATAN 1) Result : 0.785398其它数值处理次方值(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 (RE M 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函数的反函数;传回值为实数型态数值资料转型实数转整数(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,则传回的字符串受系统变量UN I TMODE影响反函数为ANGTOF;参阅第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.(ZEROP0)Result :Te.g.(ZEROP 3.45)Result :nil练习(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其它应用最大值(MAX [数值参数1数值参数2 ....] )e.g. (MAX -88 5 2) Result : 5若没有提供任何参数,则传回值为0最小值(MIN [数值参数1数值参数2 ....] )e.g. (MIN -88 5 2) Result : -88若没有提供任何参数,则传回值为0第三篇程序设计基础用户定义函数是将一群表示式组合成一个函数或指令可应用于绘图模式的指令行提示,Visual LISP控制台,或供其它自定义函数内的表示式呼叫使用AutoLISP源代码均以纯文本格式存档,扩展名为LSP(2000版可编译成扩展名为FAS的档案可以一般文本编辑器进行开发,如DOS的EDIT,W I NDOWS的WORD或WORDPAD等一个自定函数内最少要有一个表达式在原程序文件(LSP)里,自定义函数以DEFUN函数开始;其语法如下:(DEFUN [C:] 函数名称( [自变量串行...] [/ 局部变数串行...] ) 表达式...)在呼叫带有自变量的自定函数时,必须同时提供与定义函数时,同等数量的参数,使各参数传入自定函数的各自变量中自变量被视为一种特殊类型的局部变量,无法用于该自定函数以外的其它函数若自定函数中无须设定任何自变量,亦必须以空串行( )加在函数名称之后若有提供局部变量,必须以斜线/ 加在局部变量的开头(即使前面没有自变量串行) 各自变量,斜线,局部变量之间要以空格分隔;但与左右小括号之间则不须以空格分开若自变量串行中有相同名称的自变量出现,则会忽略第一个以后的相同自变量;变量亦是一样若在函数名称前加上C:,表示该函数可以在绘图模式的指令行提示下,其执行方式与内建函数相同;亦可以在任何内建命令(执行中)的提示后,以通透方式执行(但须将函数名称包在一对小括号中) 若在函数名称前没有加上C:,在指令行提示下,必须将函数名称包在一对小括号中才可执行不可以在执行一自定函数时,以通透方式执行另一自定函数加载程序自定函数在使用前,都要将其所在的程序文件(扩展名为LSP)加载才可执行ACAD.LSP程序文件(默认在SUPPORT子目录内)会在启动AutoCAD时自动加载(LOAD "程序文件名称"[加载失败])e.g. (LOAD "TEST")若程序文件之文件名为LSP,则在程序文件名称之后,可以不加上扩展名若有需要,系统会顺序尝试其它的扩展名: VLX FAS LSP若程序文件不在系统的支持目录下,则需在文件名前加上目录路径注意: 必须以正斜线/ 或两个反斜杠\\ 作为目录的分隔符可以在加载失败的参数中提供字符串,以供加载失败时显示;亦可提供有效的自定函数,该函数在加载程序文件失败时会被执行e.g. (LOAD "TEST" "Load Fail") 或(LOAD "TEST" (DOERROR))注意: 在程序文件加载后,在提示行显示的返回值,一般是该程序文件中,最后被定义的函数名称或是在程序文件内没有包含在自定函数中,最后一个表达式的执行结果练习(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程序文件,复制2C I RCLE至新程序2C,并改为传入自变量方式执行;程序代码如下:(DEFUN 2C (CEN RAD) (COMMAND CIRCLE CEN RAD)(COMMAND CIRCLE CEN (+ RAD 30)))----输入后以纯文本格式存档----在AutoCAD绘图模式的指令行提示后,用LOAD函数将程序文件重载----在指令行提示后,输入程序(函数)名称执行COMMAND : (2C (LIST 0 0) 50)批注单行批注分号;表示在分号右边(同一行)的字符均为批注,程序执行时会将其忽略多行批注;||;表示在两个批注符号中间所有字符皆为批注,即使字符跨越多行关系运算在各个关系运算中,都会传回一逻辑值;若关系成立,传回T,否则会传回nil 各参数可以是字符串,整数或实数型态;若以字符串进行比较,则会以字符串的ASCII码为准若函数中只有一个参数,传回值恒为T等于函数(= 参数1 [参数2....] )会将参数1与其后各个参数比较,若全部相等则传回T,否则传回nile.g.(= 2 2.0)Result :Te.g.(= "A" CHR(65))Result :T不等于函数(/= 参数1 [参数2....] )若参数1不等于其后任何一个参数,即传回Te.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逻辑运算且运算(AND [表达式....] )若各表达式的传回值均为T,函数即返回T 值;若其中一个传回值为nil,函数传回nile.g. (AND (< 1 2) (> 8 5)) Result : T或运算(OR [表达式....] )若各表达式的传回值均为nil,函数即返回ni l值;若其中一个传回值为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)试求出50减25,与625的开方根值是否相等COMMAND : (= (- 50 25) (SQRT 625)) Result : T设计一简单程序(名称为AIR),在呼叫程序时,检查传入的数值自变量(为空气污染指数)是否大于200(即严重空气污染)----启动文本编辑器,开启TEST.LSP程序文件,输入下列程序代码:(DEFUN AIR (NUM) (> NUM 200))----输入后存档(纯文本格式)----在AutoCAD绘图模式的指令行提示符号后,使用L OAD函数重载程序文件COMMAND : (LOAD "C:/TEST")----在AutoCAD绘图模式的指令行提示符号后,输入自定函数名称及参数执行COMMAND : (AIR 175) Result : nilCOMMAND : (AIR 215) Result : T第四篇条件判断及流程控制>条件判断是利用条件函数,配合关系及逻辑运算所设定的一些准则,令程序自行分析,因应情况作出适当行动.单一条件(IF 条件表达式是表达式[否表达式])函数先检查条件表达式,若其传回值为T,便会执行其后的是表达式若有提供否表达式,且条件表达式的传回值为n il,函数将不会执行(跳过)是表达式而执行否表达式若没有提供否表达式,且条件表达式的传回值为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)) (PRIN C"High"))(IF (AND (> NUM 25) (<= NUM 50)) (PRINC "Medium"))(IF (<= NUM 25)) (PRIN C"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 (S ETQ DISP "Very High") (PRINC DISP)))注意:最后一个关括号是对应前面的IF函数(判断变量NUM是否大于100)尾2的关括号是对应PROGN函数(用以包含SETQ及PRINC函数)尾3的关括号是对应PRINC函数的条件判断多重条件(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),即执行此一表达式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Autolisp基础教程单元一: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 支持软件。

2. 对设计人员而言:A. 得到一笔提升绩效奖金呢? 当然,无形中,『AutoCAD 高手的封号』也将黄功力又往前迈出了一大步,对个人的成长帮助匪浅,幸运的话,搞不好还可以袍加身,不亦乐乎!!!B. 『半桶水、响叮当』,千万不要因为会写AutoLISP 程序而自傲、孤僻、嚣张起来,功力的增长,只是让您有更多『服务他人、服务公司』的机会,若自恃过重,宁可不要!C. AutoLISP 程序功力的累进,是无远弗届的,千万不要『孤芳自赏』,『人外有人,天外有天』,也许您觉得是『宝贝加三级』的程序,只是其它设计师基本程序中的一部份罢了!D. 既然AutoLISP 是AutoCAD 的『最大功臣』,当然不会轻易被舍弃,如此,您的学习,保证不会白费!E. 『精益求精』、『虚心求教』、『用心学习、观摩』、『决心成为高手』3.对程序本身而言:A. 少少的几行,却可能有『大大满意』的时候!!!B. 充份掌握了控制、创造AutoCAD 的『尚方宝剑』,让您在AutoCAD 的设计运作中『得心应手』,享受无比的快乐与成就感!!!五.如何有效的学习AutoLISP ?1、先由小程序着手,认识AutoLISP语法规定!2、浏览所有的AutoLISP功能函数,重要的功能函数要熟记脑海,俗语说的好『一回生,二回熟』,除非您不用心,否则没有学不好的道理!!!3、要懂得偷懒:不要认为在绘图的过程中,繁琐的步骤是合理的,困难的绘图过程是必须忍耐的,试着用AutoLISP解决看看!4、多观摩别人的程序设计,吸取精华,像海棉一样=>『吸』、『吸』、『吸』!!!5、动手『写』程序比用眼睛看程序,更能够领略深记脑海!6、随时随地整理您的程序,并加以批注,以免因时间的飞逝,当时用心的成果也烟消云散,忘的一乾二净!!!7、『决心』是学好AutoLISP 最重要的关键!8、期许自己,要由操作者变成创造者!!![返回]单元二:AutoLISP的关键、基本结构及语法一、学好AutoLISP 的关键、基本结构与语法:1. AutoLISP 程序语言的特质A.语法简单B.功能函数强大C.撰写的环境不挑剃D.直译式程序,『即写即测、即测即用』E.横跨AutoCAD 各作业平台,悠然自得(注:以上五点,读者可以参考上一章的剖析!!!)2.学好AutoLISP 的关键:充份掌握『语法结构』&『功能函数』的搭配!!!3.重要的AutoLISP 的基本语法结构规则1:以括号组成表达式,、相对称左右括号数一定要成双成对规则2:表达式型态:(操作数运算子运算子运算子)1.1 操作数包括『功能函数』&『自定函式』1.2 运算子(自变量)包括:A.整数(Integer) 如8,-17,500,9999 .....B.实数(Real) 如8.5,-17.456 .....C.字符串(String) 如"AutoCAD","123"D.串行(List) 如("a" "b" "c"),(x y)E.像素名称代码如<entity name: 6000f262>F.档案代码如<file:#12438>.....G.选择群集代码如<Selection set:1>规则3:表达式中的『运算子』,可以是另一『表达式』或『子程序』规则4:多重的括号表达式,运算的先后顺序是『由内而外、由左而右』规则5:以档案型态存在的AutoLISP 程序(ASCII 档案),其扩展名必须是.lsp规则6:撰写的环境,只要是一般的文书编辑软件、记事本,可编辑ASCII 档案者都适用规则7:以defun 功能函数定义新的指令或新的功能函式规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD新指令规则9:加载AutoLISP 程序的作法:=> 指令:后直接键入(load "LISP主檔名")规则10:AutoLISP 程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性规则11:AutoLISP 最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失规则12:以setq 功能函数设定变量值(setq 变量名称设定值)规则13:欲在AutoCAD 的环境中,查看一变量值,指令:下键入『!变量名』即可规则14:以(defun C:函式名(自变量/ 变量) ........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』二、学好AutoLISP 的关键:充份掌握『语法结构』&『功能函数』的搭配!!! 其时这个关键亦是学习其它程序语言的关键.*『语法结构』AutoLISP 的语法结构规定的并不多,变量不用事先定义及宣告,读者可熟记下一单元有关重要的AutoLISP基本语法结构,十四条设计上要求的『规则』*『功能函数』AutoLISP 之所以能功能如此强大,都有赖功能函数,其成员共约200个:1、一般性函数170个2、ADS 定义特殊函数9个3、配合DCL 交谈框设计函数22个各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然,您可不能乱给!例如:指令:(+ 1 2 3 "ABC")传回:error : bad argument type (自变量型态错误)因为『+』函数不接受字符串,而"abc" 正是字符串指令:(rtos "abc")传回:error : bad argument type (自变量型态错误)因为『rtos』函数只接受实数转字符串详细内容可参考下一章『快速浏览AutoLISP 功能函数』至于各功能函数详细的语法与实例应用,读者请参阅本书『第三篇AutoLISP功能函数详解』三、重要的AutoLISP 的基本语法结构:规则1:以括号组成表达式,左右括号数一定要成双成对、相对称请依序在『指令:』列(或指令:) 后面直接键入以下表达式指令:(+ 1 2 3 4 5) 传回加总和15指令:(max 14.5 8.9 35) 传回最大值35指令:(menucmd "p1=*") 显示拉下POP1指令:(getint "Enter Real:") 传回Enter Real:要求输入一个实数指令:(setq a (* 12.5 4)) 传回相乘值50,同时设定给『变量a』指令:!a 响应50 (注:! 号可用来查询变量值)指令:(min 75 a 63) 响应最小值50 (因为变量值a代表50)错误的范例:指令:(setq a (* 12.5 4)1> 传回1>表示少了一个括号1> ) 此时,只要再补上一个) 即可指令:(setq a (* 12.5 42> 传回2>表示少了二个括号2> )) 此时,只要再补上二个) 即可规则2:表达式型态(操作数运算子运算子运算子...)或(函数(式) 自变量自变量自变量...)或(函数(式) 元素元素元素...)1.1 操作数包括『功能函数』&『自定函式』功能函数: 如上练习中的+、max、menucmd、getint、setq、*、min,详细内容可参考下一章『快速浏览AutoLISP 功能函数』&『第三篇AutoLISP功能函数详解』自定函式: 由设计者自行定义的新函式或子程序1.2 运算子(又称自变量或元素)包括:A.整数(Integer): 如8,-17,500,9999…正常范围: 2的16次方,介于-32768与+32767之间特殊范围: 若以float 函数将其转为实数,则范围2的32次方, 介于-2147483648与+2147483647之间B.实数(Real): 如8.5,-17.456…正常范围: 带有小数点的数,精度可达14 位有效数字C.字符串(String): 如"AutoCAD","123","Enter Real:","7.5",…正常范围: 以双引号内夹『字符』为认定,字符数不受限制D.串行(List): 如("a" "b" "c"),(x y),(x y z),("a" 8 3.5),....正常范围: 以左右括号内夹『元素』为认定,元素型态非常弹性使用频率: 在AutoLISP 程序设计中应用非常高范例说明: ("a" 8 3.5 kk (1 2))表示此串行内有五个元素"a"表示字符串a、8表示整数8、3.5表示实数3.5、kk表示变量kk、(1 2)表示串行(1 2)2D 点坐标(x y) 表示法=> 以二实数形成串行3D 点坐标(x y z) 表示法=> 以三实数形成串行E.像素名称代码:如<entity name: 6000f262> ...使用范围: AutoCAD 会自动赋予像素指向代码,透过此代码可找到像素的数据库记录范例说明: (setq en (entlast))传回<entity name: 60000062>(entget en) 可找到像素的数据库串行F.档案代码: 如<file:#12438>…使用范围: 开启(open)档案作读档(r)、写档(w)使用时,所产生的代码,如下:范例说明:(setq ffr (open "test.txt" "r")) 响应<file:#24138>(setq ffw (open "abc.txt" "w")) 响应<file:#34812>G.选择群集代码: 如<Selection set:1>、<Selection set:1>…使用范围: 一个或数个像素所形成的选择集范例说明:(setq ss (ssget))选取对象: (可选择物体)选取对象: (可选择物体)选取对象: (按[ENTER] 键)响应<Selection set:1>规则3 :表达式中的『运算子』,可以是另一『表达式』或『子程序』功能函数使用语法: (strcat 字符串1 字符串2 字符串3 ....) 字符串结合功能函数(getstring 提示) 要求键入一个字符串(rtos 实数) 将实数转换成字符串范例说明1: (strcat "abc" "123" "LISP") 传回:"abc123LISP"范例说明2: (strcat "abc" (getstring "Enter String:" ) (rtos 123.45))执行结果: Enter String: 键入任一字符串,假设是键入*HELLO*响应"abc*HELLO*123.45"本例中的strcat函数在语法中要求的『运算子』必须是『字符串』型态『运算子1』= "abc" 是正常的字符串运算子『运算子2』= 表达式(getstring "Enter String:") 传回结果是一字符串"*HELLO*"『运算子3』= 表达式(rtos 123.45) 传回结果是一字符串"123.45"规则4:多重的括号表达式,运算的先后顺序是『由内而外、由左而右』范例说明: 请将10.25 + 17 - 13.2 / 7的结果,设定给变量kk,并转换成AutoLISP 的表达式解法技巧A:1:运用『二分法、加括号』:(10.25 + 17) - (13.2 / 7)2:操作数往前提:kk = (- (10.25 + 17) (13.2 / 7))3:操作数再往前提:kk = (- (+ 10.25 17) (/ 13.2 7))4:转换完成:(setq kk (- (+ 10.25 17) (/ 13.2 7)))解法技巧B:1:运用『二分法、加括号』:(10.25 + (17 - (13.2 / 7)))2:操作数往前提:kk = (+ 10.25 (17 - (13.2 / 7)))3:操作数再往前提:kk = (+ 10.25 (- 17 (/ 13.2 7)))4:转换完成:(setq kk (+ 10.25 (- 17 (/ 13.2 7))))规则5:以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.LSP规则6:撰写的环境,只要是一般的文书编辑软件,可编辑ASCII 档案者都适用如:PE2、PE3、DW3、书中仙、汉书、EDIT、记事本....等规则7:以defun 功能函数定义新的指令或新的功能函式(注:自变量及区域变量可省略) 程序结构型态:(defun 函式名称(自变量/区域变量): :: : 程序内容: :)规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD 新指令(注:自变量及区域变量可省略)程序结构型态:(defun C:KK(自变量/区域变量): :程序内容: :: :)则加载此LISP 程序后,可在指令: 后直接键入新定义的KK 指令规则9:加载AutoLISP程序的作法:指令:后直接键入(load "LISP主檔名")注:load 与字符串间的空格,可有可无注:load 与双引号间的空格,可有可无(load"LISP主檔名")范例: 在c:\lsptools 目录下有一LISP程序tt.lsp,而您目前的工作目录在c:\dwg下若『环境设定』之『支持档案搜寻路径』有指定到c:\lsptools目录,则欲使用加载tt.lspà指令:后键入(load "tt") 即可若『环境设定』之『支持档案搜寻路径』无指定到c:\lsptools目录,则键入(load"tt") 后,会出现错误讯息如下:无法开启「tt.lsp」做输入错误: 加载失败(LOAD "tt")*取消*此时您可键入:指令:(load "c:\\lsptools\\tt") 或指令:(load "c:"/lsptools/tt)不可键入: (load "c:\lsptools\tt")因为『\』在AutoLISP 结构语法中已经用于『跳脱码控制』了规则10:AutoLISP 程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性范例: pp.lsp 内容如下:;本程序功能可快速画门、窗;设计者:QQ博士;版权所有,欢迎使用(defun c:pp(): :; 以下为画门子程序: :; 以下为画窗子程序,: :: :)规则11:AutoLISP 最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失规则12:以setq 功能函数设定变量值(setq 变量名称设定值)范例:(setq a 100) ;变量a 值设定成整数100(setq b 123.56) ;变量b值设定成实数123.56(setq c "Good morning!!!") ;变量c 值设定成字符串(setq pt1 (getpoint "Enter POINT:")) ;变量pt1 值设定成点串行(setq pt2 (list a b));此时,a值是100,b值是123.56变量pt2值设定成点串行(100 123.56)(setq pt3 '(297 210)) ;变量pt3 值设定成点串行(297 210)注意: 直接设定成点串行时,不能省略单引号『'』否则会被误认(297 210)又是一个表达式, 297是操作数而出错!规则13:欲在AutoCAD 的环境中,查看一变量值,指令:下键入『!变量名』即可范例:指令:(setq aa (+ 100 75)) 传回:175指令:!aa 传回:175指令:(setq pp (list 90 50)) 传回:(90 50)指令:!pp 传回:(90 50)指令:!ww 传回:nil 空值无设定规则14:以(defun C:函式名(自变量/ 变量) ........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』(注:在AutoLISP 中,未赋予值的变量,其值皆响应nil)『区域变量』于此程序执行完毕后,其值自动消失『整体变量』于此程序执行完毕后,其值仍然存在范例: test.lsp 内容如下(defun c:tt(/ sa sb sc)(setq sa 100)(setq sb 20)(setq sc 10)(setq sd (+ sa sb sc)))回到:指令:键入(load"tt") 传回:c:tt指令:tt 传回:130指令:!sa 传回:nil (属区域变量)指令:!sb 传回:nil (属区域变量)指令:!sc 传回:nil (属区域变量)指令:!sd 传回:130 (属整体变量)[返回]单元三:快速分类浏览AutoLISP功能函数(一)一?看到以下那么多的AutoLISP 功能函数,洋洋洒洒17大类:1、您第一个念头,一定惊讶怎么会那么多,您可能快吓坏了!2、您第二个念头,一定会想『那么多,怎么记得下来』,您可能快放弃了!二?其实,您应该要『很兴奋』而『充满信心』的,怎么说呢?1、您有那么多的『大将』协助您撰写AutoLISP 程序,当然左右又逢源,不但轻松, 而且要快乐的不得了!!!2、这些函数只要您先浏览有印象, 要用时,再翻查该函数,了解用途语法再加入到您的程序中就可以了!!!3、常用的函数,写久、用久后,自然会深深牢记脑海,想忘都很难,不常用的函数, 若硬要您记下来,相信连高手都很困难,更何况是初学的您!!!4、您不用再摸不着头绪了,因为您幸运的拥有了本书,就是您成功的开始!!!第一类数学运算功能函数项目函数语法传回1.1 (+ 数值数值...) 累计实数或整数数值1.2 (- 数值数值...) 减去数值1.3 (* 数值数值...) 所有数值乘积1.4 (/ 数值数值...) 第一个数值除以第二个以后数值的商1.5 (1+ 数值) 数值+11.6 (1- 数值) 数值-11.7 (abs 数值) 数值的绝对值1.8 (atan 数值) 反正切值1.9 (cos 角度) 角度的余弦值,角度值为弪度1.10 (exp 数值) 数值的指数1.11 (expt 基数指数) 基数的指数值1.12 (fix 数值) 将数值转换为整数值1.13 (float 数值) 将数值转换为实数值1.14 (gcd 数值1 数值2) 二数值的最大公因子1.15 (log 数值) 数值的自然对数值1.16 (max 数值数值...) 数值中的最大值1.17 (min 数值数值...) 数值中的最小值1.18 pi 常数p ,其值约为3.14159261.19 (rem 数值1 数值2) 二数值的相除的余数1.20 (sin 角度) 角度的正旋值,角度值为弪度1.21 (sqrt 数值) 数值的平方根第二类检验& 逻辑运算功能函数项目函数语法传回2.1 (= 表示式1 表示式2) 比较表示式1是否等于表示式2适用数值及字符串2.2 (/= 表示式1 表示式2) 比较表示式1是否大于等于表示式22.3 (< 表示式1 表示式2) 比较表示式1 是否<小于表示式22.4 (<= 表示式1 表示式2) 比较表示式1 是否<=小于等于表示式22.5 (> 表示式1 表示式2) 比较表示式1 是否>大于表示式22.6 (>= 表示式1 表示式2) 比较表示式1是否大于等于表示式22.7 (~ 数值) 传回:数值的位not值,(1的补码)2.8 (and 表示式1 表示式2…) 逻辑and的结果2.9 (boole 函数整数整数…) 位式布尔运算2.10 (eq 表示式1 表示式2) 比较表示式1与表示式2是否相同, 适用串行比较(实际相同) 2.11 (equal 表示式1 表示式2 [差量]) 比较表示式1与表示式2是否相同, 差量可省略(内容相同)第三类转换运算功能函数项目函数语法传回3.1 (angtof 字符串[模式]) 角度值的字符串转成实数3.2 (angtos 角度[模式[精度]]) 角度转成的字符串值3.3 (atof 字符串) 字符串转成实数值3.4 (atoi 字符串) 字符串转成整数值3.5 (cvunit 数值原始单位转换单位) 数值转换单位后的值转换根据acad.unt 档案3.6 (distof 字符串[模式]) 依模式将字符串转成实数值3.7 (itoa 整数) 整数转成字符串3.8 (rtos 数值模式[精度]) 实数转成字符串3.9 (trans 点原位置新位置[位移]) 转换坐标系统值第四类串行处理功能函数项目函数语法传回4.1 (append 串行串行...) 结合所有串行成一个串行4.2 (assoc 关键元素联合串行) 依关键元素找寻联合串行中关系资料4.3 (car 串行) 串行中的第一个元素通常用来求x 坐标4.4 (cadr 串行) 串行中的第二个元素通常用来求y 坐标4.5 (caddr 串行) 串行中的第三个元素通常用来求z 坐标4.6 (cdr 串行) 除去第一个元素后的串行4.7 (cons 新元素串行) 将新元素结合到串行4.8 (foreach 名称串行表示式) 将串行的每一元素对应至名称再依表示式执行响应4.9 (length 串行) 串行内的元素数量4.10 (list 元素元素…) 将所有元素结合成一串行4.11 (listp 元素) 判断元素是否为一串4.12 (mapcar 函数串行1 串行2 ...) 将串行1、串行2、…等串行的元素配合函数,求得新串行4.13 (member 关键元素串行) 依关键元素(含)以后的串行4.14 (nth n 串行) 串行的第n个元素4.15 (reverse 串行) 将串行元素依顺序颠倒过来的串行4.16 (subst 新项旧项串行) 替换新旧串行后的串行第五类字符串、字符、档案处理功能函数项目函数语法传回5.1 (ascii 字符串) 字符串第一个字符的『ASCII』码5.2 (chr 整数) 整数所对应的ASCII 单一字符串5.3 (close 文件名称) 关闭档案5.4 (open 文件名模式) 开启档案代码,准备读取或写入资料5.5 (read 字符串) 串行中的字符串的第一组元素5.6 (read-char [档案代码]) 经由键盘或档案中读取单一字符5.7 (read-line [档案代码]) 经由键盘或档案中读取一行字符串5.8 (strcase 字符串[字样]) 转换字符串大小写5.9 (strcat 字符串1 字符串2 ...) 将各字符串结合成一字符串5.10 (strlen 字符串) 字符串构成的字符数(即字符串长度)5.11 (substr 字符串起始长度) 取出子字符串5.12 (wcmatch 字符串格式) T或nil,将字符串与通用字符进行比对5.13 (write-char 数值[档案代码]) 将一ASCII字符写到档案或屏幕5.14 (write-line 字符串[档案代码]) 将字符串写到档案或屏幕上第六类等待输入功能函数项目函数语法传回6.1 (getangle [基点] [提示]) 请求输入十进制角度数值,响应一弪度值提示及参考点可有可无6.2 (getcorner 基点[提示]) 请求输入另一矩框对角点坐标6.3 (getdist [基点] [提示]) 请求输入一段距离6.4 (getint [提示]) 请求输入一整数值6.5 (getkword [提示]) 请求输入『关键词』6.6 (getorient [基点] [提示]) 请求输入十进制角度,响应一弪度值不受angbase、angdir影响6.7 (getpoint [基点] [提示]) 请求输入一个点坐标6.8 (getreal [提示]) 请求输入一实数6.9 (getstring [提示]) 请求输入一字符串6.10 (initget [位] 字符串) 设定下次getxxx 函数的有效输入第七类几何运算功能函数项目函数语法传回7.1 (angle 点1 点2) 取得二点的角度弧度值7.2 (distance 点1 点2) 取得二点的距离7.3 (inters 点1 点2 点3 点4 [模式]) 取得两条线的交点7.4 (osnap 点模式字符串) 依辅助抓点模式取得另一坐标点7.5 (polar 基点弪度距离) 依极坐标法取得另一坐标点7.6 (textbox 像素串行) 取得文字符串的二对角点坐标第八类像素处理功能函数项目函数语法传回8.1 (entdel 像素名称) 删除或逆删除像素8.2 (entget 像素名称[应用程序串行]) 取出像素名称的资料串行8.3 (entlast) 取出图形数据中的最后一个像素8.4 (entmake 像素串行) 建立一个新的像素串行8.5 (entmod 像素串行) 依更新的资料串行更新屏幕上元体8.6 (entnext [像素名称]) 找寻图面中的下一个像素8.7 (entsel [提示]) 请求选取一个像素,响应包含像素名称及选点坐标的串行8.8 (entupd 像素名称) 更新屏幕上复元体图形8.9 (handent 图码) 图码的元体名称8.10 (nentsel [提示]) BLOCK所含副元体像素数据串行8.11 (nentselp [提示] [点]) BLOCK所含副元体像素数据(以4 x 4矩形表示) .[返回]单元四:快速分类浏览AutoLISP功能函数(二)第九类选择集、符号表处理功能函数项目函数语法传回9.1 (ssadd [像素名称] [选择集]) 将像素加入选择集或建立一新选择集9.2 (ssdel 像素名称选择集) 将像素自选择集中移出9.3 (ssget [模式] [点1] [点2]) 取得一个选择集9.4 (ssget "X" [过滤串行]) 取得依过滤串行所指定范围的选择集9.5 (sslenth 选择集) 计算选择集的像素个数9.6 (ssmemb 像素名称选择集) 响应像素名称是否包含于选择集内9.7 (ssname 选择集索引值) 依索引值取出选择集中的像素名称9.8 (tblnext 符号表名称[T]) 检视符号表,有效的符号表: "LAYER"、"L TYPE"、"VIEW"、"STYLE"、"BLOCK"9.9 (tblsearch 符号表名称符号) 在符号表中搜寻符号第十类AutoCAD 相关查询、控制功能函数项目函数语法传回10.1 (command "AutoCAD 指令" ...) 呼叫执行AutoCAD指令10.2 (findfile 檔名) 传回:应该文件名的路径及文件名10.3 (getfiled 标题内定档名扩展名旗号) 透过标准AutoCAD档案对话DCL交谈框求得档案10.4 (getenv "环境变量") 取得该环境变量的设定值,以字符串表示10.5 (getvar "系统变量") 取得该系统变量的设定值,以字符串表示10.6 (setvar "系统变量" 值) 设定该系统变量的值10.7 (regapp 应用类项) 将目前的AutoCAD图形登记为一个应用程序名称第十一类判断式、循环相关功能函数项目函数语法传回11.1 (if <比较式> <表示式1> [表示式2]) 检算比较式结果,如果为真,执行<表示式1>否则,执行<表示式2>11.2 (repeat 整数[<表达式> <表达式> ...]) 重复执行<整数>次数11.3 (while 标题内定檔名扩展名旗号) 透过标准AutoCAD 档案对话DCL交谈框求得档案11.4 (cond "环境变量") 取得该环境变量的设定值,以字符串表示11.5 (progn 表达式1 表达式2 ...) 连结其内的表达式为一组,常用于配合if、cond等函数第十二类函数处理、定义、追踪& 错误处理功能函数项目函数语法传回12.1 (*error* 字符串) 程序错误时的警示讯息12.2 (alert 字符串) 以交谈框式显示出警告字符串12.3 (apply 功能函数串行) 将功能函数与串行结合后执行12.4 (defun 名称自变量串行表示式...) 自定函数或子程序12.5 (eval 表示式) 传回:表示式的执行结果12.6 (exit) 强制退出目前的应用程序12.7 (lambda 自变量表示式) 定义未具名的函数12.8 (progn 表达式1 表达式2 ...) 连结其内的表达式为一组,常用于配合if、cond等函数12.9 (quit) 强制退出目前的应用程序12.10 (tablet 代码[列1 列2 列3 方向]) 取用或建立对数字板的校调12.11 (trace 函数…) 对函数设定追踪旗号,辅助除错12.12 (untrace 函数…) 对函数设定解除追踪旗号第十三类显示、打印控制功能函数项目函数语法传回13.1 (graphscr) 作图环境切换到图形画面13.2 (grclear) 暂时清除模前的屏幕画面13.3 (grdraw 起点终点颜色[亮显]) 暂时性的画出一条线。

相关文档
最新文档