AutoLISP绘图程序设计解析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/10/11 17
(2)用“load”装载 即在命令行上输入(load “e:\zm.lsp”) (3)在命令行上输入zm
3.编译文件方式(重点掌握)
(1) Visual LISP的启动、界面和退出 (2) Visual LISP控制台 (3) Visual LISP创建LISP程序 (4) Visual LISP中运行LISP程序 提示:建议在Visual LISP中创建和运行LISP程序 举例:
2018/10/11
12
例(3) (defun yuan( ) ;;画圆函数 (setq r (getreal"\n半径:")) (setq p (getpoint"\n圆心:")) (command "circle" p r) )
2018/10/11
13
例(4) (defun ld( ) (setq p1 (getpoint"\n p1:") p2 (getpoint"\n p2:") );;;输入两点 (setq d (distance p1 p2));求距离 (setq ang (angle p1 p2));求方位角 (print d) (print ang) (command "line" p1 p2 "");画直线 )
注意:“+”与“num1”及各数之间必须要有空格,后面 的函数格式都是如此。
2018/10/11 19
2. 减运算 格式:(- num1 num2 num3...) “减”函数(-)从第一个数中减去后面所有数的和, 即[ num1-( num2 + num3 + . . . ) ]。 如: Command: (- 28 14) 返回:1 4 Command: (- 25 7 11 ) 返回:7 Command: (- 50 20 10.0) 返回:20.0 Command: (- 20.0 30.0) 返回:-10.0
8
二、几个基本概念
1.常数 PI——数学中的π(3.1415929…) T——逻辑真,即成立。 NIL——逻辑假,即不成立。还代表空,即无值。 注意:(1)大小写等效;(2)它们不能作为变量。 2.原子 是程序处理中最小的数据单元。 3.表达式 原子和表的统称。 如:(setq P '(12.36 -26.58))
2018/10/11
15
3.特点 (1)所谓语句都是以表形式出现。 (2)一切成分都是以函数的形式给出。 (3)程序执行过程就是求函数值的过程。
四、AutoLISP程序执行方式
有三种方式:行方式、源文件方式、编译文件方式。 1.行方式 就是在AutoCAD的“command:”提示符下,输入表后 回车。如: command:(+ 15 6.3)↙ command:(setq a 10)(setq b (+ a 5)) ↙
2018/10/11 10
三、AutoLISP程序结构
1.举例 例(1) ;;在屏幕上显示 ASCII码为(65-90)的字符 (defun C:zm(/ as) ;自定义命令 (setq as 65 n 100) (while (<= as 90) (command "text" (list n 100) 15 "" (chr as)) (setq as (+ as 1) n (+ n 20)) ) )
2018/10/11 4
2.AutoLISP的数据类型
( 1)整型数( INT ):是由 0、 1、 2…9、 +、 -组成的。 ( 2 )实型数( REAL ):如 0.4 ( 0 不能少)、 -1.23 、 0.526E9(0.526×109)。 (3)符号(SYM):除(、)、*、‘、”、;之外的字 符序列,并且不能全部是数字。 符号常用着变量,如: Command:(setq X 12) ;整型数 Command:(setq X 12.0) ;实型数 Command:(setq X “12”) ;字符串
2018/10/11
25
二、标准函数
1.绝对值(abs)、平方根 (sqrt) 、正弦(sin) 、 余弦(cos) 、 反正切(atan) 以上函数格式:(函数名 <数或表达式>) 2.幂函数(expt)、(exp) 格式: (expt 底数 幂) 格式: (exp 底数 <数或表达式>) 注意:以上各函数返回的数值类型。 3.举例
2018/10/11 21
5. 增量 格式:(1+ number) 注意:1和“+”之间不能空格,+ 与n u m b e r之 间必须要空格。 6. 减量 格式:(1- number) 注意:1和“-”之间不能空格,- 与number之间必须 要空格。 例如: (setq b(1+ -12.5)) (setq c(1- -16.4))
参考答案2:
(setq a (getreal"输入后视读数a:")) (setq b (getreal"输入前视读数b:")) (setq h (- a b))
2018/10/11
24
参考答案3:
(setq n (getint "输入高差个数:")) (setq fh 0.0) (repeat n (setq h (getreal"\n依次输入高差:")) (setq fh(+ fh h)) )
2018/10/11
5
( 4 )字符串( STR ):如:“ ABC” 、“ abc” 、 “457”等。 (5)表(LIST):带有一对括号、有若干元素 组成。(元素1 元素2 … 元素n) 如:(2 4 f) ◇元素的个数叫表的长度。 ◇元素也可以是表,如( 45 ( 3 6 ) 7 ),这 叫嵌套。 ◇元素之间必须用“空格” 隔开。 ◇表的定义方式:(LIST 5 6);’(5 6); 还可以用defun定义(后面讲)。
第三章 AutoLISP绘图程序设计
主要内容
1.AutoLISP特点 2.AutoLISP函数的用法 3.AutoLISP程序结构 4.AutoLISP程序执行方式
2018/10/11
1
§3.1 AutoLISP概述
一、AutoLISP介绍
1.AutoLISP的作用 ( 1 ) AutoLISP 是 一 种 表 语 言 , 是 常 用 的 AutoCAD二次开发手段。 所谓二次开发:是指以AutoCAD软件为平台, 加入自己所需要的功能。开发过程,就是编程 的过程。 二次开发所支持的语言有VB、C++,大型的 二次开发,以C++为主,而小型二次开发,一 般以AutoLISP为主。
2018/10/11 14
2.结构
( 1 )注释行以 ;开始,可在程序头或句尾,增加程 序可读性。也可以不要。 (2)除字符串外,字母大小写等效。 (3)表与表之间可以有空格,也可没有,建议有,这 样清楚。 如:(distance'(3 4)'(56 32))或 (distance '(3 4) '(56 32)) (4)函数名后至少要有一个空格,函数名与表之间可 有可无。
2018/10/11 6
例: (setq P(list 12.36 -26.58)) 结果是:(12.36 -26.58) 例:(setq P '(12.36 -26.58)) 结果是:(12.36 -26.58)
提示: (1)表的嵌套时一定要注意括号“(”、“)” 匹 配。 (2)西文状态下输入!!!
2018/10/11 16
2.源文件方式
用写字板或记事本把 AutoLISP 程序保存起来(后缀 为.LSP)。然后用“LOAD”命令装载并调用。 例如:(1)把下列程序保存到“e:\zm.lsp”
;;在屏幕上显示 ASCII码为(65-90)的字符 (defun C:zm(/ as) ;自定义命令 (setq as 65 n 100) (while (<= as 90) (command "text" (list n 100) 15 "" (chr as)) (setq as (+ as 1) n (+ n 20)) ) )
2018/10/11 3
( 4 ) AutoLISP 语言中使用大量的函数(有 200多个函数),进行各种运算; ( 5 ) AutoLISP 编写的程序特点(学习中注 意): 以表形式描述数据处理过程,程序执行过 程就是函数求值过程; 每段程序都是一个函数; 具有交互处理功能,边解释边执行; 采用模块化设计方法。
2018/10/11 7
(6)文件描述符 (7)AutoLISP内部函数 (8)AutoCAD的选择集 (9)AutoCAD的实体名 上述数据类型中,前四种称原子,原子 包括数值原子(整型数、实型数),符号 原子和字符串原子。 AutoLISP基本数据类型是原子和表,重 点介绍前五种数据类型。
2018/10/11
2018/10/11 2
(2)必须在AutoCAD环境下运行(内嵌); ( 3 ) AutoLISP 可以编写程序,调用 AutoCAD 的许多 命令; 举例:在水平方向画n个大小相等的圆。
;;调用AutoCAD命令画圆 (defun C:HY() (setq P0 (getpoint "第一圆心坐标:")) (setq R (getreal"半径:")) (setq L (getreal"圆心间距离:")) (setq a 1) (setq n(getint"\n圆的个数:")) (while (<= a n) (command "circle" P0 R) (setq P0 (polar P0 0 L)) (setq a (1+ a)) ) )
2018/10/11
20
3. 乘运算 格式:(* num1 num2 num3 ...) 4. 除运算 格式:(/ num1 num2 num3 ...) “除”函数以第一个数除以其他所有运算数的积, 即[ num1 / ( num2 * num3 * . . . ) ]。 例如: (* 2 5 3 2.0) 返回:60.0 (* 2 5 3) 返回:30 (/ 3 2) (Setq a(/ 3.0 2)) 返回:1.5
2018/10/11 11
例(2) ;;绘制正多边形程序
(defun c:dbx() (setq n (getint"\n输入多边形边数:")) (setq L (getreal"\n输入多边形边长:")) (setq P1(getpoint"\n输入多边形第一个角点坐 标:")) (setq P2(polar P1 0 L)) (command "polygon" n "e" p1 p2) )
2018/10/11
9
4.点 是表的一种形式,也叫点表。 有三种获得点的方式: (1)用'表示 '(120.35 253.24) (2)list函数定义点 (setq X 12.36 Y -26.58) (setq M (list X Y)) 结果是: M=(12.36 -26.58) (setq M '( X Y)) 结果是:(X Y) (3)由getpoint函数得到点 其格式:(getpoint “\n输入一点:”)
2018/10/11
22
举例:
1.求a,b,c三个数的平方和。 2.根据前后视读数,求两点间高差。 3.求闭合水准线路的高差闭合差。
2018/10/11
23
参考答案1:
(setq (setq (setq (setq a b c s (getreal"输入第一个数a:")) (getreal"输入第二个数b:")) (getreal"输入第三个数c:")) (+ (* a a)(* b b)(* c c)))
2018/10/11 18
§3.2 基本函数
一、算数运算函数
1.加运算 格式:(+ Command:(+ Command:(+ Command:(+ num1 num2 num3...) 2 5) 返回:7 2.0 30.0 4.0 50.0) 返回:86.0 2 30 4 50.0) 返回:86.0
2018/10/11
ቤተ መጻሕፍቲ ባይዱ26
举例:用AutoLISP表示下列公式:
(1)计算三角高程的表达式
H B H A L sin i v
(2)计算坐标增量的表达式
(2)用“load”装载 即在命令行上输入(load “e:\zm.lsp”) (3)在命令行上输入zm
3.编译文件方式(重点掌握)
(1) Visual LISP的启动、界面和退出 (2) Visual LISP控制台 (3) Visual LISP创建LISP程序 (4) Visual LISP中运行LISP程序 提示:建议在Visual LISP中创建和运行LISP程序 举例:
2018/10/11
12
例(3) (defun yuan( ) ;;画圆函数 (setq r (getreal"\n半径:")) (setq p (getpoint"\n圆心:")) (command "circle" p r) )
2018/10/11
13
例(4) (defun ld( ) (setq p1 (getpoint"\n p1:") p2 (getpoint"\n p2:") );;;输入两点 (setq d (distance p1 p2));求距离 (setq ang (angle p1 p2));求方位角 (print d) (print ang) (command "line" p1 p2 "");画直线 )
注意:“+”与“num1”及各数之间必须要有空格,后面 的函数格式都是如此。
2018/10/11 19
2. 减运算 格式:(- num1 num2 num3...) “减”函数(-)从第一个数中减去后面所有数的和, 即[ num1-( num2 + num3 + . . . ) ]。 如: Command: (- 28 14) 返回:1 4 Command: (- 25 7 11 ) 返回:7 Command: (- 50 20 10.0) 返回:20.0 Command: (- 20.0 30.0) 返回:-10.0
8
二、几个基本概念
1.常数 PI——数学中的π(3.1415929…) T——逻辑真,即成立。 NIL——逻辑假,即不成立。还代表空,即无值。 注意:(1)大小写等效;(2)它们不能作为变量。 2.原子 是程序处理中最小的数据单元。 3.表达式 原子和表的统称。 如:(setq P '(12.36 -26.58))
2018/10/11
15
3.特点 (1)所谓语句都是以表形式出现。 (2)一切成分都是以函数的形式给出。 (3)程序执行过程就是求函数值的过程。
四、AutoLISP程序执行方式
有三种方式:行方式、源文件方式、编译文件方式。 1.行方式 就是在AutoCAD的“command:”提示符下,输入表后 回车。如: command:(+ 15 6.3)↙ command:(setq a 10)(setq b (+ a 5)) ↙
2018/10/11 10
三、AutoLISP程序结构
1.举例 例(1) ;;在屏幕上显示 ASCII码为(65-90)的字符 (defun C:zm(/ as) ;自定义命令 (setq as 65 n 100) (while (<= as 90) (command "text" (list n 100) 15 "" (chr as)) (setq as (+ as 1) n (+ n 20)) ) )
2018/10/11 4
2.AutoLISP的数据类型
( 1)整型数( INT ):是由 0、 1、 2…9、 +、 -组成的。 ( 2 )实型数( REAL ):如 0.4 ( 0 不能少)、 -1.23 、 0.526E9(0.526×109)。 (3)符号(SYM):除(、)、*、‘、”、;之外的字 符序列,并且不能全部是数字。 符号常用着变量,如: Command:(setq X 12) ;整型数 Command:(setq X 12.0) ;实型数 Command:(setq X “12”) ;字符串
2018/10/11
25
二、标准函数
1.绝对值(abs)、平方根 (sqrt) 、正弦(sin) 、 余弦(cos) 、 反正切(atan) 以上函数格式:(函数名 <数或表达式>) 2.幂函数(expt)、(exp) 格式: (expt 底数 幂) 格式: (exp 底数 <数或表达式>) 注意:以上各函数返回的数值类型。 3.举例
2018/10/11 21
5. 增量 格式:(1+ number) 注意:1和“+”之间不能空格,+ 与n u m b e r之 间必须要空格。 6. 减量 格式:(1- number) 注意:1和“-”之间不能空格,- 与number之间必须 要空格。 例如: (setq b(1+ -12.5)) (setq c(1- -16.4))
参考答案2:
(setq a (getreal"输入后视读数a:")) (setq b (getreal"输入前视读数b:")) (setq h (- a b))
2018/10/11
24
参考答案3:
(setq n (getint "输入高差个数:")) (setq fh 0.0) (repeat n (setq h (getreal"\n依次输入高差:")) (setq fh(+ fh h)) )
2018/10/11
5
( 4 )字符串( STR ):如:“ ABC” 、“ abc” 、 “457”等。 (5)表(LIST):带有一对括号、有若干元素 组成。(元素1 元素2 … 元素n) 如:(2 4 f) ◇元素的个数叫表的长度。 ◇元素也可以是表,如( 45 ( 3 6 ) 7 ),这 叫嵌套。 ◇元素之间必须用“空格” 隔开。 ◇表的定义方式:(LIST 5 6);’(5 6); 还可以用defun定义(后面讲)。
第三章 AutoLISP绘图程序设计
主要内容
1.AutoLISP特点 2.AutoLISP函数的用法 3.AutoLISP程序结构 4.AutoLISP程序执行方式
2018/10/11
1
§3.1 AutoLISP概述
一、AutoLISP介绍
1.AutoLISP的作用 ( 1 ) AutoLISP 是 一 种 表 语 言 , 是 常 用 的 AutoCAD二次开发手段。 所谓二次开发:是指以AutoCAD软件为平台, 加入自己所需要的功能。开发过程,就是编程 的过程。 二次开发所支持的语言有VB、C++,大型的 二次开发,以C++为主,而小型二次开发,一 般以AutoLISP为主。
2018/10/11 14
2.结构
( 1 )注释行以 ;开始,可在程序头或句尾,增加程 序可读性。也可以不要。 (2)除字符串外,字母大小写等效。 (3)表与表之间可以有空格,也可没有,建议有,这 样清楚。 如:(distance'(3 4)'(56 32))或 (distance '(3 4) '(56 32)) (4)函数名后至少要有一个空格,函数名与表之间可 有可无。
2018/10/11 6
例: (setq P(list 12.36 -26.58)) 结果是:(12.36 -26.58) 例:(setq P '(12.36 -26.58)) 结果是:(12.36 -26.58)
提示: (1)表的嵌套时一定要注意括号“(”、“)” 匹 配。 (2)西文状态下输入!!!
2018/10/11 16
2.源文件方式
用写字板或记事本把 AutoLISP 程序保存起来(后缀 为.LSP)。然后用“LOAD”命令装载并调用。 例如:(1)把下列程序保存到“e:\zm.lsp”
;;在屏幕上显示 ASCII码为(65-90)的字符 (defun C:zm(/ as) ;自定义命令 (setq as 65 n 100) (while (<= as 90) (command "text" (list n 100) 15 "" (chr as)) (setq as (+ as 1) n (+ n 20)) ) )
2018/10/11 3
( 4 ) AutoLISP 语言中使用大量的函数(有 200多个函数),进行各种运算; ( 5 ) AutoLISP 编写的程序特点(学习中注 意): 以表形式描述数据处理过程,程序执行过 程就是函数求值过程; 每段程序都是一个函数; 具有交互处理功能,边解释边执行; 采用模块化设计方法。
2018/10/11 7
(6)文件描述符 (7)AutoLISP内部函数 (8)AutoCAD的选择集 (9)AutoCAD的实体名 上述数据类型中,前四种称原子,原子 包括数值原子(整型数、实型数),符号 原子和字符串原子。 AutoLISP基本数据类型是原子和表,重 点介绍前五种数据类型。
2018/10/11
2018/10/11 2
(2)必须在AutoCAD环境下运行(内嵌); ( 3 ) AutoLISP 可以编写程序,调用 AutoCAD 的许多 命令; 举例:在水平方向画n个大小相等的圆。
;;调用AutoCAD命令画圆 (defun C:HY() (setq P0 (getpoint "第一圆心坐标:")) (setq R (getreal"半径:")) (setq L (getreal"圆心间距离:")) (setq a 1) (setq n(getint"\n圆的个数:")) (while (<= a n) (command "circle" P0 R) (setq P0 (polar P0 0 L)) (setq a (1+ a)) ) )
2018/10/11
20
3. 乘运算 格式:(* num1 num2 num3 ...) 4. 除运算 格式:(/ num1 num2 num3 ...) “除”函数以第一个数除以其他所有运算数的积, 即[ num1 / ( num2 * num3 * . . . ) ]。 例如: (* 2 5 3 2.0) 返回:60.0 (* 2 5 3) 返回:30 (/ 3 2) (Setq a(/ 3.0 2)) 返回:1.5
2018/10/11 11
例(2) ;;绘制正多边形程序
(defun c:dbx() (setq n (getint"\n输入多边形边数:")) (setq L (getreal"\n输入多边形边长:")) (setq P1(getpoint"\n输入多边形第一个角点坐 标:")) (setq P2(polar P1 0 L)) (command "polygon" n "e" p1 p2) )
2018/10/11
9
4.点 是表的一种形式,也叫点表。 有三种获得点的方式: (1)用'表示 '(120.35 253.24) (2)list函数定义点 (setq X 12.36 Y -26.58) (setq M (list X Y)) 结果是: M=(12.36 -26.58) (setq M '( X Y)) 结果是:(X Y) (3)由getpoint函数得到点 其格式:(getpoint “\n输入一点:”)
2018/10/11
22
举例:
1.求a,b,c三个数的平方和。 2.根据前后视读数,求两点间高差。 3.求闭合水准线路的高差闭合差。
2018/10/11
23
参考答案1:
(setq (setq (setq (setq a b c s (getreal"输入第一个数a:")) (getreal"输入第二个数b:")) (getreal"输入第三个数c:")) (+ (* a a)(* b b)(* c c)))
2018/10/11 18
§3.2 基本函数
一、算数运算函数
1.加运算 格式:(+ Command:(+ Command:(+ Command:(+ num1 num2 num3...) 2 5) 返回:7 2.0 30.0 4.0 50.0) 返回:86.0 2 30 4 50.0) 返回:86.0
2018/10/11
ቤተ መጻሕፍቲ ባይዱ26
举例:用AutoLISP表示下列公式:
(1)计算三角高程的表达式
H B H A L sin i v
(2)计算坐标增量的表达式