当前位置:文档之家› AutoLISP绘图程序设计

AutoLISP绘图程序设计

2012-8-22 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)) ) )
2012-8-22 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)) ) )
2012-8-22 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) )
2012-8-22
15
3.特点 (1)所谓语句都是以表形式出现。 (2)一切成分都是以函数的形式给出。 (3)程序执行过程就是求函数值的过程。
四、AutoLISP程序执行方式
有三种方式:行方式、源文件方式、编译文件方式。 1.行方式 就是在AutoCAD的“command:”提示符下,输入表后 回车。如: command:(+ 15 6.3)↙ command:(setq a 10)(setq b (+ a 5)) ↙
2012-8-22 6
例: (setq P(list 12.36 -26.58)) 结果是:(12.36 -26.58) 例:(setq P '(12.36 -26.58)) 结果是:(12.36 -26.58)
提示: (1)表的嵌套时一定要注意括号“(”、“)” 匹 配。 (2)西文状态下输入!!!
2012-8-22
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
2012-8-22
22
举例:
1.求a,b,c三个数的平方和。 2.根据前后视读数,求两点间高差。 3.求闭合水准线路的高差闭合差。
2012-8-22
23
参考答案1:
(setq (setq (setq (setq a b c s (getreal"输入第一个数a:")) (getreal"输入第二个数b:")) (getreal"输入第三个数c:")) (+ (* a a)(* b b)(* c c)))
2012-8-22 3
(4)AutoLISP语言中使用大量的函数(有 200多个函数),进行各种运算; (5)AutoLISP编写的程序特点(学习中注 意): 以表形式描述数据处理过程,程序执行过 程就是函数求值过程; 每段程序都是一个函数; 具有交互处理功能,边解释边执行; 采用模块化设计方法。
8
二、几个基本概念
1.常数 PI——数学中的π(3.1415929…) T——逻辑真,即成立。 NIL——逻辑假,即不成立。还代表空,即无值。 注意:(1)大小写等效;(2)它们不能作为变量。 2.原子 是程序处理中最小的数据单元。 3.表达式 原子和表的统称。 如:(setq P '(12.36 -26.58))
2012-8-22 14
2.结构
(1)注释行以 ;开始,可在程序头或句尾,增加程 序可读性。也可以不要。 (2)除字符串外,字母大小写等效。 (3)表与表之间可以有空格,也可没有,建议有,这 样清楚。 如:(distance'(3 4)'(56 32))或 (distance '(3 4) '(56 32)) (4)函数名后至少要有一个空格,函数名与表之间可 有可无。
2012-8-22 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)) ) )
参考答案2:
(setq a (getreal"输入后视读数a:")) (setq b (getreal"输入前视读数b:")) (setq h (- a b))
2012-8-22
24
Байду номын сангаас
参考答案3:
(setq n (getint "输入高差个数:")) (setq fh 0.0) (repeat n (setq h (getreal"\n依次输入高差:")) (setq fh(+ fh h)) )
第三章
AutoLISP绘图程序设计
主要内容
1.AutoLISP特点 2.AutoLISP函数的用法 3.AutoLISP程序结构 4.AutoLISP程序执行方式
2012-8-22
1
§3.1 AutoLISP概述
一、AutoLISP介绍
1.AutoLISP的作用 ( 1 ) AutoLISP 是 一 种 表 语 言 , 是 常 用 的 AutoCAD二次开发手段。 所谓二次开发:是指以AutoCAD软件为平台, 加入自己所需要的功能。开发过程,就是编程 的过程。 二次开发所支持的语言有VB、C++,大型的 二次开发,以C++为主,而小型二次开发,一 般以AutoLISP为主。
2012-8-22
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输入一点:”)
注意:“+”与“num1”及各数之间必须要有空格,后面 的函数格式都是如此。
2012-8-22 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
2012-8-22 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
2012-8-22
12
例(3) (defun yuan( ) ;;画圆函数 (setq r (getreal"\n半径:")) (setq p (getpoint"\n圆心:")) (command "circle" p r) )
2012-8-22
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 "");画直线 )
2012-8-22 7
(6)文件描述符 (7)AutoLISP内部函数 (8)AutoCAD的选择集 (9)AutoCAD的实体名 上述数据类型中,前四种称原子,原子 包括数值原子(整型数、实型数),符号 原子和字符串原子。 AutoLISP基本数据类型是原子和表,重 点介绍前五种数据类型。
相关主题