第6章+CADLisp初步

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



在vlisp窗口:确认编辑窗口处于前台状态,选择菜单工具 —加载编辑器文字,程序即被运行 在cad窗口:工具—加载应用程序,选择lsp文件,选择加 载,即可在窗口启动lsp程序。或者用appload命令加载 加载后只运行一次,若需再次运行,需要重新加载lsp文件



从Tools工具条中选择Format edit window( 格式化编辑窗口),可在编辑窗口中格式化程 序源代码。程序将自动完成格式化。(可检查 语法错误) 5) 要加载程序,可以从To ols工具条中选择 Load active edit window或者从To ols菜单 选择Load Text in Editor选项。 6) 在Visual LISP控制台窗口中的“$”提示符 下输入函数名,即可运行程序

计算P2和P4的坐标



程序清单:
(defun c:rect1(/p1 p2 p3 p4) (graphscr) (setvar“cmdecho”0) (prompt“rect1 command draws a rectangle”)(terpri) (setq p1(getpoint “Enter first corner”)) (terpri) (setq p3(getpoint “Enter opposite corner”)) (terpri) (setq p2(list(car p3)(cadr p1))) (setq p4(list(car p1)(cadr p3))) (command “line”p1 p2 p3 p4 “c”) (setval “cmdecho” 1) (Princ) )
规则





;—其后为注释 AutoLISP程序所有成分都是以函数的形式出现的。每一个 完整的函数必须包在一对小括号()内 AutoLISP程序就是顺序执行连串的函数,函数的运行过程 就是求值过程,函数的基本语法如下: (函数名称 参数1 参数2...) e.g. (RPINC “AutoLISP Programming”) 左边括号紧随函数名称 函数名称与参数之间、或参数与参数之间须至少留一个空 格。函数可有一个或多个参数(也可能没有参数) 函数名称不分大小写
getpoint函数


功能:暂停程序的运行,允许用户输入一个点 的坐标,可以由键盘或者屏幕光标输入。 格式

(getpoint [point] [prompt] point----输入一个点或者选择一个点 prompt------显示在屏幕上的提示


e.g. (setq Pt1 (getPoint)) (setq Pt1 (getPoint“请输入起始点:”))

若文件没有在预设目录中(support),则需 要在程序文件名称前添加路径,路径用“/” 或“\\”隔开
示例一:

编写一AutoLISP程序做两个同心圆(第一个圆半 径为50,第2个圆半径为80),程序代码如下:


(DEFUN^C : 2CIRCLE() ;定义函数 (SETQ^CEN (LIST 0 0) RAD 50) ;给CEN和RAD赋值 或(SETQ^CEN(GETPOINT"\n指定圆心")^RAD^50) (COMMAND^“ CIRCLE”^CEN^RAD) ;以CEN为圆心 ,RAD为半径做圆 (COMMAND^”CIRCLE”^CEN (+^30^RAD) ;同上, 半径为RAD+30
注意:p3换成了getcorner拾取点,可以看到拉 出的矩形,用getpoint只有一个十字光标
car函数

功能:car函数返回一个表中的第一个元素。若 表中不包含任何元素,函数返回nil。 car函数格式为:(car^List)

list—元素列表
(car‘(2.5^3.56)) 返回 2.5 (car‘(x y z)) 返回 X (car‘((15 20) 56)返回(15 20) (car‘())返回 nil 其中的单引号表示~个表。

示例:

(Command“line”^Pt1^Pt2^“”) “line” ……………AutoCAD LINE命令,用引号括起 Pt1……………………第一点 Pt2……………………第二点 “”…………………用于返回
list函数

功能

用于定义一个二维或三维点。若表达式中不包含任 何变量及未定义项,则该函数还可以使用单引号( ’)命名。
defun函数

功能:定义函数 格式



(defun name [argument]) ; [ ]表示可选 defun ADNUM( ) ;定义了一个函数ADNUM defun ADNUM( a b) ;定义个全局变量a和b defun ADNUM( /a b) ;定义了两个局部变量a和b defun C:ADNUM( ) ;可以在命令提示符后输入函数名 ADNUM运行程序,如果没有使用C:,函数名必须置于圆括号 中。 函数名称前面加C:,表示该函数可以在绘图模式 的命令行的 命令提示符后直接输入函数名称执行。或者‘(函数名)-----透明命令运行要加括号 若在函数名称前没有加上C:,在指令行提示下,必须将函数名称 包在一对小括号中才可执行

acad.dwt->acadiso.dwt acad.lin->acadiso.lin acad.pat->acadiso.pat

函数格式为:(getcorner Point[Prompt])



示例:
(getcorner pt1) (setq pt2(getcorner pt1)) (setq pt2(getcorner pt1“Enter second Point))


结论: AutoCAD早期的版本是以英制为单位的, R14以后的版本增加了公制单位的设置,于是
setq函数

功能:给变量赋值 格式


(segq name value [name value]...) name:变量名 value:赋予变量的值,可以是任何表达式(数字、字符 串) e.g. Command: (setq x 12) Command: (setq x 8.5 y 12) Command: (segq answer “YES”) ;字符串加引号

pt1和(getpoint)之间的空格可有可无
command函数

功能

Command函数用于在AutoLISP程序内部执行标准的 AutoCAD命令。AutoCAD命令名及命令选项必须置于 双引号内。Command函数的格式为: (Command “Commandname”)


格式

其中Command…………………AutoLISP函数 Commandname……………AutoCAD命令
说明:
defun函数定义了函数rect1。 graphscr: 如果当前屏幕恰好是文本屏幕,该函数将文本屏幕转换为图形屏幕 。否则,对显示屏幕无影响。 (setvar“cmdecho”0) 函数setvar将0赋予AutoCAD系统变量cmdecho,即关闭了回显。如果 cmdecho被关闭,AutoCAD的命令提示就不会显示在屏幕的命令提示区中 (prompt“rect1 command draws a rectangle”)(terpri) prompt函数将显示双引号中的信息(“rect1 command draws a rectangle”)。函数terpri产生一个回车,等同于在文字后面输入\n,下一 行文本将换行打印 第5行:(setq p1(getpoint “Enter first corner”)(terpri) getpoint函数暂停程序的运行,等候用户输入一个点(该矩形的第一个角),随 后setq函数将该值赋予变量P1。 (setq p2(list(car p3)(cadr p1))) cadr函数选取P1点的Y坐标,car函数选取P3点的X坐标。setq函数将这两个 值组成的列表赋予变量P2。

(Princ[变量或表达式]) (princ)在屏幕上打印一个空行 (princa)在屏幕上打印出变量a的值 (princ“Welcome”)在屏幕上打印Welcome

示例:


load命令

功能:加载lsp文件 格式 (LOAD “程序文件名称” [加载失败提示])

e.g. (LOAD “TEST” “LOAD FAIL”)


示例
(setq x(List 2.5 3.56)) 返回 2.5,3.56 (setq x’(2.5 3.56)) 返回 2.5,3.56 (setq x“2.5 3.56”) 返回 2.5,3.56
princ函数


Princ函数打印(或显示)变量的值。若变量位 于双引号中,该函数打印(或显示)双引号内 的表达式。 格式为:
visual lisp 基础知识
创建VLISP程序的步骤

打开程序编写窗口



命令行输入VLISP,在打开的编辑器中,选择菜单文件—新 建 或者菜单“工具”--“Auto LISP”—”Visual LISP编辑器 ” 或者用文本编辑器写,最后将文件类型改为lsp即可

编写代码,以lsp类型保存文件 运行LISP程序
说明
第9行:(command “line”p1 p2 p3 p4 “c”) Command函数使用AutoCAD的line命令在点P1,P2,P3和 P4间画线。C(close)将最后一点P4与第一点P1连接起来 第10行:(setval “cmdecho” 1) setvar函数将1赋予AutoCAD系统变量cmdecho, 即打开了 回显。 第11行:(princ) princ函数在屏幕上打印一个空行。若没有这一行, AutoCAD 将打印出最后一个表达式的值。该值对程序毫无影响,但却可 能令人费解。princ函数用来防止在命令提示区显示该表达式 的值。 第12行:该右括号表明完成函数rect1的定义,并且程序结束。
示例二
从屏幕上点击三个点绘制一个三角形
(defun ^C:triang1() (setq^P1(getPoint“\n Enter first Point of triangle:”)) (setq^P2(getPoint“\n Enter second Point of triangle:”

(setq^P3(getPoint“\n Enter third Point of triangle:”)) (Command“line” P1 P2 P3“C”)) 程序说明 第一行:定义函数 第二行——第四行 从屏幕上获取拾取点的坐标 第五行——绘制直线命令,最后“C”表示闭合


cdr函数返回一个移去了第一个元素后的列表 cadr函数返回列表的第二个元素(=cdr+car)
getcorner函数

功能:

暂停程序的运行,等候用户输入一个点的坐标。可以用键盘或 使用屏幕光标将其输入。该函数需要一个基点,在屏幕上移动 屏幕光标时将根据该基点显示矩形。 其中Point ……………… 基点 prompt ……………… 显示在屏幕上的提示信息
示例三

编写一个程序,提示用户输入一个矩形的两个 对角的坐标,然后在屏幕上画出该矩形,如图 所示。
分析:


输入 处理过程

P1点的坐标 P3点的坐标
1.计算P2点和P4点的坐标 2.画出下列直线:P1到P2的直线;P2到P3的直线;P3到P4的直 线;P4到P1的直线。 P2点: X2=X3 Y2=Y1 X2=car(X3 Y3) 或 X2=car P3 Y2=cadr(X1 Y1) 或Y2=cadr P1 P4点:X4=X1 Y4=Y3 X4=car(X1 Y1) X4=car P1 Y4=cadr(X3 Y3) Y4=cadr P3 故,P2点和P4点为: P2=(list(car P3)(cadr P1)) P4=(List(car P1)(cadr P3))
相关文档
最新文档