AutoLisp 简介

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

AutoLisp 简介
●本简介仅列出较常用之基本观念。

详细且完整之功能,请自行参阅当时最新
版本之AutoLisp,或/~rogh/autolisp/。

●AutoLisp 乃是依Lisp程序语言为基础,加以扩充,使之可呼叫AutoCAD
绘图功能。

●Lisp = List Programming
●List (串行):一种数据结构
表示法:(1 2 3 ( A B ) 5 6 )
atom :最基本之构成原子。

如:1, 2, 3, A,B,5,6
element:构成list的元素,可以是atom(如:1,2,3,5,6)或者子串行(sub-list, 如:(A B) )
●Lisp的特性
将list视为函式(function),其中,第一个元素为运算子(operator),余为操作数(operand)。

例如:一般数学式 3 + 2,Lisp式为(+ 3 2);f(x,y)
的Lisp式为(f x y)。

数据(data)为一种特殊的函式,其运算子为quote。

例如:资料(a,b,c)的Lisp式为(quote a b c) 或简示为‟(a b c)
函式内部指述(statement),依序(sequential)执行。

函式之间无必然前后之执行关系(non-procedural)。

不分大小写,系统一律响应以大写。

●数据型态
1.integer
2.real
3.
●常数
1.T :true
2.Nil :false
●;批注符号,置于行首。

该行不执行。

●(Auto)Lisp 为交谈式(interactive)的操作环境,使用interpreter (而非
compiler)。

可以在屏幕上交谈式执行,或写成程序,以批次式执行(详后)。

●常用指令集(完整指令集,请自行参考AutoLisp相关手册)
数学运算指令
串行运算
数据型态转换
控制指令
函式定义指令
例:
●以文字处理软件,撰写下列程序,并以「纯文字」模式,在D:\ 下,存成
AAA.LSP 檔。

(檔名AAA可以任取,扩展名须为LSP)
(DEFUN C:\aline( )
(setq pt1 …(1.45 3.23))
(setq pt2 (getpoint “Enter a point: “))
(command “LINE” pt1 pt2 “”))
)
●在进入AutoCAD环境后,
指令:(load “D:\\AAA)
指令:aline
此时,AutoCAD会把aline 视同一个新的AutoCAD指令
●同一个文件内可以定义多个指令。

●如未在程序内加上C:\ ,则必须在AutoCAD的指令行,下(aline ),才会
执行。

●可以先在AutoCAD环境试作所有操作程序,记下各步骤之指令及自变量,
再写成(command ….)指令。

档案处理函式
例:[注意其与setq之搭配使用]
(setq f1 (open “C:\\sample.dat” r))
(setq a (read-char f1))
(close f1)
●可以应用AutoLisp来产生碎形(fractal;大陆译为分形)。

作业:【请将作业传至ftlin@.tw】
1.何谓list? atom? element?
2.一般数学函式g(a, h(x,y,z)) 之Lisp表示法为何?
3.利用AutoLisp撰写直线产生程序。

Input:以getpoint指令,让user输入二个点,分别称之为pt1 及pt2 Output:绘出由pt1及pt2所构成的直线
4.利用AutoLisp撰写道路路口产生程序。

Input:两条交叉之道路中心线,以及其(不同道路)宽度。

Output:道路境界线
请列出原始程序及执行成果
(提示:使用mline及mledit二个AutoCAD指令,并适当设定其自变量)
5.以AutoLisp产生碎形图形,如C-shape 或tree。

提示:(详见「碎形」参考数据)
(defun C:Cshape(p1,p2)
当p1,p2距离大于某一门坎值时
计算p3坐标
(Cshape p1 p3)
(Cshape p3 p2)
)
6.试算其结果
A.(list …(+ 5 3) (- 8 4))
B.(cons …(a b) …(c d e))
7.以
以assoc等指令查询BrandB,Size=10 的price 。

名称: 随机数产生器
作者: 林峰田
输入:
1. 一个奇数,做为seed
2. 拟生之随机数个数
输出: 一串介于0与1之间的随机数
原理: 乘法同余法随机数产生器(multiplicative congruential generator)
1. X[n+1] = C*X[n] mod M
(1) X[0],即是seed,必须是奇数.本程序由使用者输入.
(2) C=8^K+5, K=0,1,2,3,...
(3) M=2^b, b>4
(4) C要大于M
(5) 此随机数产生器的周期为2^(b-2),亦即之后之数目会重复循环出现
(6) 此函式为一递归函式, 由X[i]产生X[i+1], i=0,1,2,3,....
2. 随机数number = X[i]/M
|;
(defun C:rand()
(setq seed (getint "input an odd number as seed --> "))
(if (= 0 (rem seed 2))
(princ "An odd number is needed !!!")
(progn
(setq times (getint "\n How many random numbers do you need? --> "))
(setq C (expt 5 13))
(setq M (expt 2 31))
(repeat times
(setq seed (rem (* C seed) M))
(princ (setq number (abs (/ (float seed) (float M)))))
(princ "\n")
)
)
)
)。

相关文档
最新文档