AutoLISP绘图程序设计
基于AutoLISP的AutoCAD参数化绘图

2) 根据绘图参数 ,设计交流界面 (对话框) 。对于参数化 绘图程序来说 ,对话框主要考虑绘图参数的输入和相关控件 的布局 ,为了增加程序的可读性 ,对话框中还要配有图像按 钮 ,用幻灯片来显示各绘图参数的含义 。
Key words :Auto L ISP ;AutoCAD ;paramet ric drawing ;redevelop ment s
1 引言
AutoCAD 是美国 AutoDesk 公司推出的一种通用的计算 机辅助设计和图形处理软件 ,具有易于掌握 、使用方便 、绘图 精确和体系结构开放等优点 。因此 ,自 1982 年问世以来深受 广大设计人员的青睐 ,是 CAD 族群中使用最普遍的软件之 一 。如今 ,AutoCAD 已广泛应用于机械 、建筑 、电子 、航天 、造 船 、冶金 、纺织 、轻工等领域 ,可见 AutoCAD 是一个通用的 CAD 软件 。但要使一个通用的 CAD 系统适合自己的专业工 作需要 ,达到使用方便的要求 ,就必须进行二次开发 。在 Au2 toCAD 为用户提供的 Auto L ISP 、A RX、VBA 等开发工具中 , Auto L ISP 是一种简便易学的解释性语言 ,具有很强的数据 表格处理功能 ,是开发 AutoCAD 的一种重要手段[1] 。
2 Auto L ISP 语言的特点简介
Auto L ISP 语言是嵌套于 AutoCAD 内部 ,将 L ISP (List Processing Language) 语言和 AutoCAD 有机结合的产物 ,它 是 AutoCAD 开放式体系结构的具体表现 。使用 Auto L ISP 可直接调用几乎全部 AutoCAD 命令 ,Auto L ISP 语言既具有 一般高级语言的基本结构和功能 ,又具有一般高级语言所没 有的强大的图形处理功能 ,是当今世界上 CAD 软件广泛采用 的语言之一[2 ] 。
第2讲利用AutoLisp语言绘图

第2讲利⽤AutoLisp语⾔绘图第2讲利⽤AutoLisp语⾔绘图在AuotCAD绘制简单图形时,有三种主要⽅式:(1)图标菜单(2)下拉式菜单(3)命令⾏。
事实上还有另外⼀种绘图⽅式,即通过lisp语⾔实现绘制图形。
利⽤Lisp语⾔绘图的最⼤优点是可以实现批处理,降低劳动强度。
⼩知识:Lisp语⾔最⼤优势是和AutoCAD绘图结合的很好,这也是该语⾔⾄今仍未被淘汰的最主要原因。
1、简单的绘图语句⼏乎AuotCAD中所有的绘图及环境设置命令都可以通过程序调⽤!,利⽤Lisp语⾔编写绘图命令的窍门是⾸先在命令⾏下把绘图命令和对应的参数记住,然后⽤Lisp语⾔的格式书写出即可。
1.1 绘制直线(command "line" "0,0" "1,1" "")1.2 绘制圆(command "circle" "0,0" 5)1.3 绘制正多边形(command "polygon" 5 "0,0" "i" 5)(command "polygon" "5" "0,0" "i" "5")都正确1.4 新建图层(command "la yer" "m" "道路" "c" 2 "" "")请同学⾃⼰编写⾼度为2,起点位置在“0,0”,⽂字内容是“理⼯⼤”的程序2、⽤多条绘图语句表⽰复杂图形正常情况下图形都⽐较复杂,需要⽤多条语句编写,例如测绘中的下⽔井、路灯等符号。
例1、下⽔井的绘制(defun c:xsj()(command "circle" "0,0" 0.5)(command "line" "-0.5,0" "0.5,0" "")(command "line" "0,-0.5" "0,0.5" ""))3、循环控制语句例2、绘制同⼼圆例3、绘制可多次插⼊的下⽔井符号例4、绘制y=sinx 曲线4、课后练习题4.1 编写lisp 程序,绘制路灯图案,参照下⽔井程序,改写成可以多次插⼊的程序。
AutoLISP实用编程四例

AutoLISP实用编程四例-------------------------------------------------- 江苏崔华明AutoCAD是一个功能强大的通用图形设计软件,其内嵌的AutoLISP语言为用户进行二次开发提供了方便。
下面就介绍几则用AutoLISP编写的实用程序,这些程序相当于新增的AutoCAD命令,可以弥补AutoCAD本身的一些不足,为日常使用带来方便。
1(快速更改文本的大小在标准的AutoCAD中,要更改已有文本的大小,需要使用Change命令。
该命令的缺陷是:即使只更改文本的大小,也要重新确认文本的插入点、字型、倾斜角等一系列参数。
也就是说,除输入文本的新高度值外,还需要按5次回车键才能完成一个文本的更改~而且每次只能修改一个文本。
这对于同时更改多个文本的大小非常不便。
本文的AutoLISP程序使这一工作变得十分方便和快捷。
使用方法如下:在AutoCAD的Command提示下,打入命令:cthAutoCAD将提示“Selectobjects:”,这时可以使用AutoCAD允许的任意方式选择目标。
对于有多个文本需要更改的情况,使用窗口选择比较方便,而且你不用担心选择窗口中包含了非文本目标,程序能够自动在选择的目标中查找出文本实体,并只对文本进行更改。
选择目标后,AutoCAD提示“Newtextheight:”,这时输入一个新的文本高度值然后回车,则所有选中的文本被更改成新设定的高度。
2(延伸直线的长度在实际使用中,常常要将一条直线延伸指定的长度。
通常的做法是:在需要延伸的直线的端点画一个辅助圆,圆的半径等于直线要延伸的长度,然后使用Extend命令将直线延伸到与圆相交,最后删除辅助圆。
本文的AutoLISP程序将使你非常容易地实现这一点。
你只需选择要延伸的直线并输入要延伸的长度即可,其余的工作由程序自动完成。
使用方法如下:在AutoCAD的Command提示下,打入命令:stl然后根据提示选择要延伸的直线(选择点要靠近直线需要延伸的端点),并输入延伸的长度。
AUTOLISP 编程(含绘图与编程)

CAD二次开发练习(打开程序的时候要把捕捉关掉)南通大学-机械工程学院(defun c:lx1()(setq p0(getpoint"确定基点:"))(setq l1(getreal"\n输入长方形的宽:"))(setq l2(getreal"\n输入长方形的长:"))(setq d1(getreal"\n输入圆孔的直径:"))(setq t1(getreal"\n输入键槽的高度:"))(setq b1(getreal"\n输入键槽的宽度:"))(setq r1(*0.5d1))(setq h1(+r1t1))(setq p1(polar p00(*0.6l1)))(setq p2(polar p0(*0.5pi)(*0.6l2))) (setq p3(polar p0pi(*0.6l1)))(setq p4(polar p0(*-0.5pi)(*0.6l2)))(setq p5(polar p00(*0.5l1)))(setq p6(polar p5(*0.5pi)(*0.5l2))) (setq p7(polar p6pi l1))(setq p8(polar p7(*-0.5pi)l2)) (setq p9(polar p80l1))(setq p10(polar p0(*0.5pi)h1))(setq p11(polar p100(*0.5b1)))(setq p12(polar p11pi b1))(setq p13(polar p0pi(*0.5b1)))(setq p14(polar p130b1))(setq p15(polar p0(*0.5pi)r1))(setq p16(polar p0(*0pi)r1));为标注设定的点(setq p17(polar p7(*0.5pi)8))(setq p18(polar p10(*0.5pi)t1))(setq p19(polar p0(*0.25pi)(*1.2r1))) (setq p20(polar p0pi(*1.2r1)))(setq p21(polar p00(*0.7l1)))(setq p22(polar p0(*-0.5pi)r1)) (setq p23(polar p0(*0.25pi)r1)) (setq p24(polar p0(*-0.25pi)(*1.2r1))) (setq p25(polar p0(*-0.75pi)(*1.2r1))) (setq p26(polar p0(*0.75pi)(*1.2r1))) ;基本指令操作(command"pline"p6p7p8p9p6"") (command"circle"p0r1"") (command"line"p14p11"") (command"line"p11p12"") (command"line"p12p13"") (command"_trim"p13p14""p15"") (command"_trim"p16""p13p14"");保存当前图层,并建立center这个图层(setq ss(getvar"clayer"))(command"-layer""m""center""c""红色""center""l""center""center""");如图可以看到具体相应的操作,“m”为生成图层,这个图层的名称为“center”,“c”为线条定义颜色,为红色,选定当前的center图层,“l”为选择线型,选用中心线的线型,选定当前的center图层。
第五章第二节AUTOLISP程序设计简介

§5.2 AutoLISP程序设计一、概述LISP语言(List Processing Language的缩写)是一种表处理语言。
因为LISP在描述表方面有独到之处,且本身灵活而精巧,自创立以来,在人工智能的程序设计中得到广泛应用。
在英、美等国应用尤为普遍。
AutoLISP是LISP语言的一个版本,其独特性在于专门为AutoCAD开发的。
所以AutoLISP仅能运行于AutoCAD软件包环境里。
同样,也正是在AutoCAD内置AutoLISP这样一种灵活、精巧的开发语言,使得AutoCAD得到进一步广泛使用。
1. AutoLISP特点:(1)AutoLISP语言是一种仅能以解释方式运行于AutoCAD内的程序设计语言。
即:脱离AutoCAD环境,它就不能运行。
(2)AutoLISP语言是函数型语言,其函数和数据形式是一致的,即(function argument)·function(函数名):内建函数或用户自定义函数名;·argument(参数):参数种类:①变量(Varibles)②常量(Constants)③其他函数(function)所以表达式可以嵌套.④标志数(flag)⑤可选性参数(optional parameters)因此,表达式的形式是:“先说做什麽,再说对谁做”。
(3)可以在AutoLISP程序中引用AutoCAD的几乎所有功能进行图形处理的自动化,尤其是较深层的应用——对象数据库的操作。
在Visual LISP的协助下,对于AutoCAD进行操作功能上的讨论,LISP仅比ARX少一个功能。
在AutoCAD R14已经不再使用ADS程序设计,取而代之的是ARX 程序设计模式。
ARX一般是在AutoCAD和开发商中使用。
使用Visual C++作为基本程序设计语言,其效率、数据处理和软硬件的控制能力都是相当好的。
但是,要想真正发挥这种开发模式的作用,对于程序设计者的要求也较高。
AUTOLISP程序设计技巧

AUTOLISP程序设计技巧AUTOLISP(即AutoCAD Lisp)是一种用于AutoCAD软件的编程语言。
它基于Lisp语言,可以用于创建自定义命令和功能,以自动执行一系列任务。
在编写AUTOLISP程序时,可以采用一些技巧来提高代码的可读性和性能。
下面将介绍一些常用的AUTOLISP程序设计技巧。
1.变量命名:为了增加代码的可读性,应该选择具有描述性的变量名。
避免使用单个字母或简写的名称,而应使用有意义的名称来描述变量的用途或含义。
2.注释:在代码中使用适当的注释是非常有帮助的,可以解释代码的目的、逻辑和特定部分的功能。
注释应该清晰明了,不冗余,并使用大写字母或其他方法来突出显示。
3.函数:使用函数来分割代码段,以便在需要时可以多次调用相同的代码块。
函数的使用可以提高代码的可读性,并使其更容易维护。
4.错误处理:在代码中加入适当的错误处理机制非常重要,可以避免程序崩溃或产生不期望的结果。
使用条件语句和错误处理函数来检测和处理可能发生的错误。
5.循环:使用循环语句来处理重复性任务,并减少代码的冗余。
根据任务的特点选择合适的循环类型(例如FOR循环、REPEAT循环等)。
6.嵌套:在必要时使用嵌套结构,将代码组织成逻辑结构清晰的块。
使用适当的缩进和代码布局来增加代码的可读性。
7.字符串处理:AUTOLISP中的字符串处理功能非常强大,可以使用字符串函数来处理、操作和格式化字符串。
了解并熟练使用字符串函数可以提高代码的灵活性和功能。
8.数组和列表:使用数组和列表可以存储和处理多个值。
熟练使用与数组和列表相关的函数(如CAR、CDR、CONS、LIST等)可以简化代码并提高性能。
9. 命令行交互:通过与用户进行命令行交互,可以提高程序的交互性。
使用getstring、princ等函数来获取用户输入,并使用条件语句来根据输入执行相应的操作。
10.优化:编写高效的代码可以提高程序的性能。
使用较少的迭代步骤、减少不必要的计算、选择合适的数据结构等都可以提高程序的效率。
AutoLISP的绘图功能

举例:编程绘制带传动机构运动简图
步骤:1)绘中心线;2)绘圆;3)绘圆切线 (defun dljt (r1 r2) (setq a 0) (while (< a (+ r1 r2)) (setq a (getdist "\nEnter center distance:")));while (setq cp1 (getpoint "\nEnter base point:")) (setq cp2 (polar cp1 0 a)) (command "layer" "m" "cen" "c" 1 "" "l" "center" "" "") (command "line" (polar cp1 pi (+ r1 5)) (polar cp2 0 (+ r2 5)) "") (command "line" (polar cp1 (* 0.5 pi) (+ r1 5)) (polar cp1 (* 1.5 pi) (+ r1 5)) "") (command "line" (polar cp2 (* 0.5 pi) (+ r2 5)) (polar cp2 (* 1.5 pi) (+ r2 5)) "")
使用CAD进行程序化绘图的方法与示例

使用CAD进行程序化绘图的方法与示例CAD(计算机辅助设计)软件是现代工程设计中不可或缺的工具之一。
它可以大幅提高工作效率,提供精确的设计模型和绘图输出。
在CAD中,程序化绘图技术可以进一步提高设计工作的效率和准确性。
本文将介绍使用CAD进行程序化绘图的方法与示例。
在CAD中,我们可以通过编写脚本或使用宏来实现程序化绘图。
常见的CAD软件如AutoCAD、SolidWorks和CATIA等都提供了编程接口和相关的编程语言,如AutoLISP、VBA和C#等。
下面我们将以AutoCAD为例,介绍使用AutoLISP进行程序化绘图的方法与示例。
AutoLISP是AutoCAD的内置编程语言,它与AutoCAD的各种功能紧密结合,可以实现从基本绘图操作到自定义功能的自动化。
以下是使用AutoLISP进行程序化绘图的几个示例:1. 绘制矩形:我们可以使用AutoLISP编写一个简单的程序来绘制矩形。
下面是一个示例程序:```(defun c:draw-rectangle (/ p1 p2)(setq p1 (getpoint "\nEnter the first corner point: "))(setq p2 (getcorner p1 "\nEnter the opposite corner point: "))(command "RECTANG" p1 p2)```在AutoCAD中,我们可以运行该程序的命令`draw-rectangle`,然后按照提示,输入第一个和第二个角点,即可绘制一个矩形。
2. 绘制圆形:类似地,我们可以使用AutoLISP编写一个程序来绘制圆形。
下面是一个示例程序:```(defun c:draw-circle (/ center radius)(setq center (getpoint "\nEnter the center point: "))(setq radius (getdist "\nEnter the radius: "))(command "CIRCLE" center radius))```在AutoCAD中,我们可以运行该程序的命令`draw-circle`,然后按照提示,输入圆心和半径,即可绘制一个圆形。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(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基本数据类型是原子和表,重 点介绍前五种数据类型。