AutoLISP绘图程序设计解析

合集下载

第四章 Auto LISP的绘图功能.

第四章 Auto LISP的绘图功能.
第四章 Auto LISP的绘图功能
如前所述, Auto LISP 语言体现了人工智能语言 lisp 的特点和Auto CAD强大的图形编辑功能,可以说它是集 设计与绘图为一体的人工智能语言,因此,它是开发实 用工程计算机辅助设计和绘图软件的强有力工具。Auto LISP 具有强大的绘图编辑功能,主要是由于它提供了与 Auto CAD相互通讯的简单透明的接口功能,即提供了一 个 系 统 内 部 函 数 command,AutoLISP 程 序 中 利 用 command 函数可以非常简单而方便地调用几乎全部 Auto CAD命令,以完成所要求的各种工程图形的绘制任务, 本章将重点介绍 command 函数的功能、编程技巧及应用 实例。
6. command可以不带任何参数,即(command),
它等效于在键盘上按CTRL—C键,即取消了Auto CAD 命令。 例如: (command “dim” “hor” /(4 4) /(6 4) /(5 4) 10) (command) 相当于取消DIM命令并返回到命令提示。 (command)也可以用“∧”代替,如上式可写成: (command “dim” “hor” /(4 4) /(6 4) /(5 4) 10∧)
1. Auto CAD的命令、子命令和选择项要用字符串 表示,大小写均可。 例如: (command “DIM” “hor” /(2.0 3.0) /(5.0 3.0) /(5.0 5.0) 8) “DIM”为命令,“hor”为子命令,均用字符串 表示。 2.数字常量(整型数或实型数)可写成本身亦可 写成字符串形式。如上例中数字8亦可写成“8”。 3.点常量有两种表示法:一是Auto LISP表的形 式,如上例中/(2.0 3.0),/(5.0 3.0)。二是用字符 串表示,字符串中数据要符合Auto CAD的规定。 如写成“2.0,3.0”,“5.0,10.0”。

第2讲利用AutoLisp语言绘图

第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程序设计简介

§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程序设计
高等计算机辅助设计 Advanced Computer Aided Design
(4)(strcat <string1> <string2> …)
该函数返回由字符串<sting1> <string2>…构成的长字符串。例如: (strcat “Beijing” “China”)返回“Beijing China” (5)(substr <string> <start> [<length>]) 该函数返回从字符串<string>第<start>字符位置开始,连续 长度为<length>个字符组成的一个字符串。若没有指定<length>, 则子字符串是<string>中从<start>后的全部字符组成。例如: (substr “abcdef” 2 4) 返回“bcde” (substr “abcdef ” 2) 返回“bcdef”
高等计算机辅助设计
Advanced Computer Aided Design
3.表处理函数
(1)(car <list>) 该函数返回表<list>的第一个顶层元素。例如: (car „(x y))返回x。 (car „(10 20 30 40))返回10。 (2)(cdr <list>) 该函数返回表<list>中顶层第n个元素。其中n为大于或等于0 (3)(last <list>) 该函数返回表<list>顶层的最后一个元素。例如: (last „(10 20 30 40))返回40。 (4)(nth <n> <list>) 该函数返回表<list>中顶层第n个元素。其中n为大于或等于 0的整数,n为0表示第一个元素,n为1表示第二个元素,以此 类推。例如: (nth 2 „(10 20 30 40))返回30。

AutoLISP程序语言设计

AutoLISP程序语言设计

AutoLISP程序语言设计AutoLISP程序语言设计目录⒈简介⑴ AutoLISP概述⑵ AutoLISP的应用领域⒉基本语法⑴变量定义与赋值⑵控制流语句⑶函数定义与调用⑷条件语句⒊常用函数⑴坐标点函数⑵图形绘制函数⑶数据处理函数⑷字符串处理函数⒋高级技巧⑴调试与错误处理⑵程序优化与性能提升⑶与外部程序交互⒌示例程序⑴绘制简单图形⑵自动化处理CAD图纸⑶数据导出与导入⒍附录⑴ AutoLISP开发工具推荐⑵ AutoCAD版本兼容性⑶ AutoLISP常用工具介绍⒈简介⑴ AutoLISP概述AutoLISP是一种方便的自动计算与绘图程序设计语言,它是用于AutoCAD中的一种宿主程序语言,可以用于控制CAD软件的各项功能,实现自动化操作。

⑵ AutoLISP的应用领域AutoLISP可用于各种CAD绘图软件的自动化操作,包括但不限于以下方面:●绘制复杂图形●数据处理与导出●组装CAD图纸●批量操作与修改⒉基本语法⑴变量定义与赋值AutoLISP可以使用变量来存储数据,并在程序中使用。

变量可以通过赋值来初始化或修改其值。

⑵控制流语句AutoLISP支持各种控制流语句,如条件语句、循环语句等,用于根据不同条件执行不同的代码块或重复执行特定的代码块。

⑶函数定义与调用AutoLISP允许用户自定义函数以实现特定的功能。

函数是一组逻辑相关的代码块,可以通过函数名来调用。

⑷条件语句条件语句用于根据不同的条件执行不同的代码块。

AutoLISP提供了if、cond等条件语句供用户使用。

⒊常用函数⑴坐标点函数AutoLISP提供了一系列用于处理坐标点的函数,如polar、polar-point、polar-angle等,用于计算、转换坐标点。

⑵图形绘制函数AutoLISP提供了丰富的图形绘制函数,如line、circle、text 等,用于绘制直线、圆形、文本等图形元素。

⑶数据处理函数AutoLISP提供了一些用于处理数据的函数,如list、append、assoc等,用于创建列表、连接列表、关联列表等操作。

AutoLISP的绘图功能

AutoLISP的绘图功能
例如:command: (getvar “cmdecho”) 返回值:1 command: (setvar “cmdecho” 0) 返回值:0 (AutoCAD系统变量见P387 附录B。)
举例:编程绘制带传动机构运动简图

步骤: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)) "")

用AutoLISP语言编程实现参数化绘图

用AutoLISP语言编程实现参数化绘图

文章编号:100926825(2002)0420159202用Auto LISP 语言编程实现参数化绘图收稿日期:2002201222作者简介:康保成(19552),男,1987年毕业于广东教育学院工程图学专业,高级讲师,太原理工大学轻纺工程与美术学院,山西晋中 030600康保成摘 要:简要介绍Auto LISP 语言在Auto C AD 环境下实现参数绘图的应用状况。

对建筑制图中绘制楼梯台阶进行分析,并结合Auto LISP 语言编程特点,编制了Auto LISP 程序,顺利完成楼梯台阶的绘制过程,达到利用参数输入形式,严格、准确、快捷地完成绘图工作目的,还为在Auto C AD 环境下绘制形状相同、尺寸不同的系列图形提供了方便。

关键词:Auto LISP ,Auto C AD ,楼梯台阶中图分类号:T U20114文献标识码:A引言随着时代的进步,计算机辅助设计发展迅猛,全面取代传统的丁字尺加图板的手工绘图方式已成必然。

这种势头给各行各业都带来了冲击,从早年间颁布的红头文件可见一斑。

可以毫不夸张地说,对于作为衡量素质标准的计算机辅助设计,不能等闲视之。

Auto C AD 作为C AD 的工具,是一个功能极强的计算机辅助设计、绘图的通用软件包。

如今Auto C AD 在各部门得到广泛应用。

Auto C AD 实际上已经成为一种微机C AD 系统的标准,工程设计人员之间交流设计思想的公共语言。

Auto C AD 之所以得到如此广泛的应用,除了它功能强大,易学易用外,还在于它是一个开放的、交互式的软件。

用户可以编写Auto LISP 、ADS 或ARX 应用程序,作为新的命令,实现特定用户的特殊需要,或对AutoC AD 做一些二次开发和应用,以使用户更方便、快捷地满足工作要求。

1 问题的提出正如前面所述,Auto C AD 在各个领域都得到了广泛的应用,可见其通用性是很强的;但它在一些领域的某些方面还有不尽人意的地方。

AUTOLISP程序的设计技巧

AUTOLISP程序的设计技巧

AUTOLISP程序设计技巧一、引言在AutoCAD中的角度捕捉只有当正交状态打开时的直和水平方向,对于其他特殊角度无能为力;另外,其网点捕捉也是相对于X轴和Y轴,无法实现其他方向的特殊长度捕捉,给绘图带来极大的不方便。

在应用AutoCAD进行设计制图的操作中,LINE和POLYLINE是使用频率最高的两个命令,经常要遇到在某些特定角度上绘制特定长度的简单线或复合线的情况,因而实现这两个捕捉对提高AutoCAD作图效率很有实用价值。

二、方法原理所谓角度捕捉,是指当十字光标在某一角度a的一定围选取一点时,该点自动落在该a角度线上;当我们设定捕捉角度为a时, 将会以基准点作为原点、自X轴正方向出发,将整个屏幕划分为[360/ a]个区间,则NX%角度就是角度捕捉线,其中,0W N K[360/ a],[360/ a ]表示不大于360/ a的整数。

所谓长度捕捉,是在角度捕捉的基础上,在某一角度线上有一系列捕捉点,该系列点离基准点的距离为捕捉长度的正整数倍,当选取直线上的一点时,落点自动落到离其最近的捕捉点上。

实现特定角度和长度捕捉的关键点是:当十字光标(即十字交叉线)移动时,程序要随时跟踪其交叉点的位置,并将该位置与用户所设定的捕捉角度与长度对应起来,从而计算岀在该角度上的落点。

以下举例说明该两个捕捉的实现过程:假定捕捉角度为a=30°,捕捉长度为L。

当十字光标在任意的某一区间移动时,比如在第5区间(120°〜150 ° )移动时,此时,落点只能在120°或150°线上(该线在图中并不直接显示),该两根角度线的中心线为135。

当十字光标的中心点处在120°〜135°之间时,则落点应在120°线上,该落点的具体位置为由十字光标的中心点向120°线作垂线来获得,其交点D(称为垂点)即为落点,为直观起见,此时由基准点(此处为O 点)向落点作一橡筋拖曳线,该橡筋拖曳线随十字光标的移动而相应移动,显示岀拖动过程(见图1);同样,当十字光标的中心点处在135。

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

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 "");画直线 )
2018/10Βιβλιοθήκη 1125二、标准函数
1.绝对值(abs)、平方根 (sqrt) 、正弦(sin) 、 余弦(cos) 、 反正切(atan) 以上函数格式:(函数名 <数或表达式>) 2.幂函数(expt)、(exp) 格式: (expt 底数 幂) 格式: (exp 底数 <数或表达式>) 注意:以上各函数返回的数值类型。 3.举例
2018/10/11
26
举例:用AutoLISP表示下列公式:
(1)计算三角高程的表达式
H B H A L sin i v
(2)计算坐标增量的表达式
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))
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 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
15
3.特点 (1)所谓语句都是以表形式出现。 (2)一切成分都是以函数的形式给出。 (3)程序执行过程就是求函数值的过程。
四、AutoLISP程序执行方式
有三种方式:行方式、源文件方式、编译文件方式。 1.行方式 就是在AutoCAD的“command:”提示符下,输入表后 回车。如: command:(+ 15 6.3)↙ command:(setq a 10)(setq b (+ a 5)) ↙
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 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 14
2.结构
( 1 )注释行以 ;开始,可在程序头或句尾,增加程 序可读性。也可以不要。 (2)除字符串外,字母大小写等效。 (3)表与表之间可以有空格,也可没有,建议有,这 样清楚。 如:(distance'(3 4)'(56 32))或 (distance '(3 4) '(56 32)) (4)函数名后至少要有一个空格,函数名与表之间可 有可无。
注意:“+”与“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
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定义(后面讲)。
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 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 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
22
举例:
1.求a,b,c三个数的平方和。 2.根据前后视读数,求两点间高差。 3.求闭合水准线路的高差闭合差。
2018/10/11
相关文档
最新文档