AutoCAD二次开发实用教程 郭秀娟 第5章 AutoLISP文件
用AUTOLISP对AUTOCAD进行二次开发

";
:row{ :edit_box{ label="密度ρ key="rho"; fixed_width=true; width=5; }
";
:text{ label="kg/m3"; } }
} } :row{ :column{ :row{ :edit_box{ label="热容 c key="c"; fixed_width=true; width=5; alignment=centered; } :text{ label="J/(kg·K)"; } } :row{ :edit_box{ label="合金液相线温度 T_L"; key="T_L"; fixed_width=true; width=5; alignment=centered; } :text{ label="K"; } }
图3
加载用户自定义的菜单文件
(5)绘制对话框――DCL 语言 第一步:打开 Visual LISP 编辑器 操作同图 2。 第二步:创建用户自定义对话框文件 打开 Visual LISP 编辑器后,在文本框中输入生成用户自定义对话框的代码,写好后将文件保存,扩展 名为.dcl。例如: solidification_coefficient:dialog { label="计算凝固系数 K"; :text{ label="说明:根据合金的热物理特性计算凝固系数 K"; } :boxed_row{
:edit_box{ label="即 mm/s(1/2)"; key="K"; fixed_width=true; width=5; alignment=left; } } :row{
AutoCAD软件的二次开发

6. 实体名:为图形对象指定的16进制的数字标识。通过该标识,可找到实体在 图形数据库中的位置,并可进一步对其进行编辑。
例:_$(entlast) 说明:返回最后一个加入图形文件的对象的实体名
第110页/共54页
7. 2 AutoLISP程序设计语言
表的长度:表中的元素个数。
例:(1.0 1.0 0.0) (“this” “that” “the other”) (1 “ONE”) ((a b) c (c d))
长度: 3
3
2
3
长度:(+ 142 3)
(sin (*20.5 pi))
用表可以方便地构造出复杂的数据结构。
5. 选择集:一个或多个图形对象的集合,用户可通过AutoLISP程序向选择集添 加或者从选择集中删除图形对象。
第65页/共54页
7. 1 VisualLISP简介
五、VisualLISP: Autodesk公司为增强AutoLISP程序开发能力而设 计的软件工具。
Visual LISP集成开发环境的组成部分:
语法检查器:可识别错误的AutoLISP结构和内部函数调用中不合适的参数。 文件编译器:可改善程序的执行速度并提供一个有效的开发平台。
Heap:25000 bytes Stack(栈区域):存储函数的变量和局部结构。标准表中嵌套的表越多,函数执行的 递归次数越多,该区域所占的空间越大。
Stack:20000 byets
注意:AutoCAD平台上运行AutoLISP时,用户不能扩展系统的堆或栈空间
2. 内存出错提示信息
堆空间用光:Insufficient node space。 没有足够的内存装载AutoLISP:Insufficient memory-AutoLISP disabled。
第五章 AutCAD二次开发

X和Y的值表示文本相对于直线的偏移量。X可以用来拟合横线之 间形成文本的空间;Y可以用来使形或文本沿线型居中。
标题行
➢ 定义时始终用星号(*)开始; ➢ 说明字符限制在47个字符以内; ➢ 如果包含说明,之前要放置逗号。
定义行
√ 横线用正数、点用零、空格用负数表示; √ 每项之间用逗号(,)分隔,没有空格, √ 每行的最大长度为80个英文字符;
√ 每行都必须以字符A开头。
Exp1:
*DASHDOT,
.
.
A,0.5,-0.25,0,-0.25
/=
不等于。如果所有参数值不相等,返回T,否则,返回nil
<
小于。如果每个参数值都小于下一个参数,返回T,否则,返回nil
>
大于。如果每个参数值都大于下一个参数,返回T,否则,返回nil
>=
大于等于。如果每个参数值都大于或等于下一个参数,返回T,否则,返回nil
<=
小于等于。如果每个参数值都xiao于或等于下一个参数,返回T,否则,返回nil
通过AutoLISP能够了解到AutoCAD的内部工作原理,并 且是学习ObjectARX和VBA这样更加先进的自动方法的奠基 石。 AutoLISP例程可以为用户提供全面控制程序运行与用 户之间相互关系的能力。
AutoLISP的扩展名为.lsp,但是为了安全和运行速度, 可将AutoLISP文件保存成.fas或.vlx为扩展名的工程项目应用 文件。 AutoCAD首先加载.vlx文件,然后加载.fas文件,最 后加载.lsp文件。例如,如果有两个redline.vlx和redline. 件,AutoCAD加载.vlx文件,但如果.lsp文件比.fas文件新, AutoCAD将加载.lsp文件。
AUTOCAD二次开发技术

AutoCAD二次开发技术AutoCAD作为一种通用计算机辅助设计软件,其二维图形设计功能非常强大,目前已广泛应用于机械、电子、电气、建筑、土木、服装等领域,深受国内外众多工程设计人员的喜爱,成为目前世界上应用最广的计算机辅助设计工具。
尽管如此,人们在使用过程中还是发现其存在较多的不足之处,如对于一些特殊曲线的绘制往往较为困难,而对于一些标准件、常用件,虽然从结构上看它们较为相似,但却难以采用AutoCAD提供的复制、镜像、旋转等命令来实现,而必须一笔划一笔划的绘制,显得费时费力。
AutoCAD是一种定位与全球各大领域和各类专业的通用微机CAD平台软件。
到目前为止,Autodesk公司已经相继推出了四代二次开发工具.AutoCAD的二次开发主要涉及以下内容:(1编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。
(2建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。
(3在系统的ACAD.LSP 或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。
(4通过系统对话框设置某些路径。
这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。
AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。
它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。
AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD2000或2002,最新版本是AutoCAD2004,其二次开发语言及工具也在不断地涌现语言本身不难,难点在对AutoCAD二次开发框架的掌握,其实AutoCAD文件可以当成一个数据库来理解,因此难点就是理解这个数据库的结构和编程方法。
5AutoCAD高级培训第五讲——AutoCAD二次开发基础

AutoCAD高级培训第五讲——AutoCAD二次开发基础(AutoLISP 语言编程概述)二次开发:采用编程的方法扩充AutoCAD的功能,如增加新的绘图命令、新的修改命令等。
例如,AutoCAD中本来没有绘制正弦曲线(函数形式为Y=Asin(X+ω))命令,通过编程开发一个AutoCAD的新命令,使用户可以使用该命令实现绘制正弦曲线,在命令的交互过程中,系统提示用户依次输入所需要的参数:坐标原点、振幅、周期数、初相角等。
常用二次开发工具:AutoLISP语言(运行于VisualLISP集成开发环境)、ActiveX、VBA、JAVA、C、ObjectARX等需要掌握:AutoLISP语言(高级证书所必需)一、AutoLISP 语言简介1.LISP——List Processing Language2.AutoLISP:嵌套于AutoCAD内部,将LISP与AutoCAD有机结合,是AutoCAD开发的重要工具。
3.AutoLISP的功能:♦可直接调用AutoCAD的几乎全部命令♦具备一般高级语言的结构和功能:顺序、条件分支、循环等结构;I/O、数值计算、逻辑判断、数据类型转换等功能♦具备一般高级语言所没有的强大的图形处理功能4.AutoLISP的特点♦仅能以解释方式运行于AutoCAD内部(解释性程序设计语言)♦程序的全部内容均以函数形式给出,没有语句的概念,也没有其他语法结构,执行程序就是执行一系列的函数调用,也称“函数语言”♦把数据和程序统一表达为表结构,程序即数据,数据即程序,故也称为“表语言”♦运行程序就是对函数求值的过程,在此过程中实现函数的功能例如,下面的内容就是一个完整的AutoLISP程序:(defun math()(setq x 10)(setq y 20)(+ x y)(* x y))该程序运行的结果是:200二、AutoLISP的数据类型♦整型数♦实型数♦符号(SYM)♦字符串(STR)♦表(LIST)♦文件描述符(FILE)♦AutoLISP的内部函数(SUBR)♦AutoCAD的选择集(PICKSET)♦AutoCAD的实体名(ENAME)♦函数分页表(PAGETB)基本应用:涉及用蓝色显示的6种,前4种称为“原子”。
autolisp二次开发

第一章绪论第一节土木工程CAD的历史与发展CAD技术是把计算机的快速、准确、直观与设计者的逻辑思维能力、综合分析能力及设计经验结合起来融为一体的高科技产物,可以起到加快工程或产品设计过程、缩短设计周期,提高设计质量和效率、降低工程造价等作用。
在我国,CAD技术已经广泛地应用于建筑、机械、电子、航空及轻工业等各个行业,获得了良好的社会效益和经济效益。
一、计算机与计算机绘图的发展1946年世界上研制出了第一台电子计算机——ENI AC,它的主要任务是用来进行高速度的数值计算。
其后,随着基本元件的不断换代,其性能也以惊人的速度发展。
到了50年代,计算的应用范围便扩展到了诸如辅助事务处理、数学定理证明、语言翻译等领域。
计算机绘图技术的发展是与计算机及其外围设备的发展密切相关的。
早期的图形显示器是基于阴极射线管的示波器。
如MIT于1950年研制的旋风1号计算机,就配置了这种用示波器改造的图形显示器,而笔式绘图仪是在x—y函数记录仪的基础上发展而成的,较早的有美国CALCOMP公司1958年研制的滚筒式绘图仪和G ERBER公司研制的平板式绘图仪。
在硬件设备的基础上,计算绘图的软件技术也得到长足的发展。
1962年,Ivan I Suther land首次提出了交互式计算机绘图的概念,并发表了博士论文《Sketc hpad:一个人机通信的图形系统》。
1963年,在美国的计算机联合大会(N CC)上,MIT的小组推出了CAD的项目并发表了5篇论文,给工程技术界以很大震动。
1963年,DougEnSe lb8n在斯坦福研究所制造出了第一个木制鼠标器,他的思想极大地影响了以的交互式绘图技术的发展。
70年代初,Xerox公司发明了第一个数字化鼠标器,并在1975年宣布了鼠标器的规范。
1983年,Mic roson公司生产出了鼠标器的背后一代产品——总线型鼠标器,它连接在一块装有Intel 8255芯片的插件板上。
1984年,Mic roson设计出了串行口鼠标器,它不需要独立的电源,CMOS处理器可以从RS。
第五章CAD软件系统二次开发技术

——GPA格式
• 实体数据存取格式(Entity Data Access) ——EDA格式
2013-7-9
第5章 基于特征的CAD软件系统二次开发技术
第2节 UG/OPEN GRIP开发环境
◆ GRIP命令的三种格式 1、SF格式命令 • 由主词、辅词和参数构成,中间用“/”分开 • 只有主词(参数)就形成OPEN GRIP的标准函数
第5章 基于特征的CAD软件系统二次开发技术
第3节 GRIP语言基础
◆矢量函数使用例题
例3: ENTITY/surf NUMBER/a(3),b(3) MASK/43 $$只能选择B-surface l1: IDENT/’Pick a surface’,surf,resp JUMP/l1:,term:,,resp a=SDDUF(surf,0.5,0.6) $$ SDDUF(ent,u,v)对u求偏导数 b=SDDVF(surf,0.5,0.6) $$ SDDVF(ent,u,v)对v求偏导数 PRINT/a,b term: HALT
2013-7-9
第5章 基于特征的CAD软件系统二次开发技术
第3节 GRIP语言基础
★ GRIP变量的声明
◆(下标)数字变量的申明 NUMBER/name(dim1[,dim2[,dim3]])[,name(dim1[,dim2[,dim3]])]+ 例如:NUMBER/a(10),b(2,5),c(3,5,10) ◆ (下标)字符串变量的申明
第5章 基于特征的CAD软件系统二次开发技术
第2节 UG/OPEN GRIP二次开发环境
★ GRIP编程注意事项
◆采用分段缩进方式书写,多用注释语句,增强
程序的可读性;
◆语句标号从小到大,或有一定规律性; ◆变量名应与工程术语相近,便于理解; ◆主词/辅词通常用大写,变量用小写,便于阅读。
应用AutoLISP和DCL对AutoCAD的二次开发

label="GB/T 898-1988 B";key="k898B";} :radio_button{
2.1 用 DCL 编写用户对话框界面 根据设计意图,编写用户对话框,如图 1所示。
label="GB/T 899-1988 A";key="k899A";} :radio_button{
图 4 对话框响应用户动作界面
label="GB/T 899-1988 B";key="k899B";} :radio_button{
label="GB/T 900-1988 A";key="k900A";}
:radio_button{
label="GB/T 900-1988 B";key="k900B";}
}
:image{
key ="kimage" ;
图2 主程序流程图
四个子程序使得主程序变得简洁明了, 且便于修改。分别是:一个参数预设子程序, 两个动作响应子程序和一个绘图子程序。其 中 绘 图 子程 序中 的 参数 设 置需 要 按照 机 械 设计手册进行[2]。
编写 LISP 过程中,在能够完成基本任 务的前提下,应尽量全面考虑各种情况,使 程序趋于完善。比如以下两种情况:
angle"; edit _widt h=4;key ="kp op a";} :edit _box{ed it _widt h=4;key ="ke
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.5 打开、关闭文件的函数 【例2】 若将一条直线段的两端点坐标写入到一个文件中,则 可以:
(SETQ fi(GETSTRING "Enter file name:"))
(SETQ f(OPEN fi "w"))
(SETQ P1(GETPOINT "first point:"))
(PRINC Pl f)
采用缩进格式书写,形式如下:
(defun fun (x)
(cond((> x 0) 1)
((= x 0) 2)
((< x 0) 0)
)
☆)☆ 第5章 AutoLISP文件
4
第5章 AutoLISP文件
5.2 程序中的注释 注释能够增加程序的可读性,不仅便于对程序的阅读和调
试,也便于对程序的维护、移植和扩充。 注释的形式可以是整行、整段或行间注释。 整行或后半行注释以分号“;”开头,至行尾为注释部分
15
第5章 AutoLISP文件
5.6 用于文件的输入输出函数 1.(READ [符串])
[符串]参数不能在表或字符串外包含空格。
返回值:READ函数将其参数转换成相应的数据类型后返回。
如果未指定参数,READ返回NIL。
如果字符串中包含由空格、换行符、制表符或括号等LISP分
隔符分开的多个词,则只返回其中的第一个词。
(SETQ f (OPEN “new.tst” “w”))
返回值<FILE # 0017>
(SETQ f (OPEN “old.txt” “w”))
返回值<FILE # 002>
OPEN函数的返回值实际上是一个文件指针。文件指针的指向
因<操作方式>而异。
☆☆ 第5章 AutoLISP文件
13
第5章 AutoLISP文件
☆☆ 第5章 AutoLISP文件
18
第5章 AutoLISP文件
5.6 用于文件的输入输出函数 4.(READ-CHAR<文件描述符>) 该函数从键盘输入缓冲区或从<文件描述符>指定的已打开的文件中读入 一个字符,并返回该读入字符的ASCII码值(整型数)。 如果没有指定可选的<文件描述符>,且键盘输入缓冲区中没有字符,则 READ-CHAR函数等待用户输入(随后按下回车键)。 【例7】 (PROMPT "\n 请输入字符:")
☆☆ 第5章 AutoLISP文件
9
第5章 AutoLISP文件
5.4 搜索、获得文件的函数 1. (FINDFILE<文件名>)
FINDFILE 函数搜索<文件>的路径,并返回此路径描述。 若<文件>不存在,它就返回NIL。 例如: 若“Li.Lsp" 文件在C:\ACAD路径下则: (FINDFILE "Li.Lsp") 返回"C:\\ACAD\\Li.Lsp"
6
第5章 AutoLISP文件
5.3 在AutoCAD环境下加载AutoLISP文件 1.命令行方式 加载AutoLISP文件用load函数,调用load函数的格式如下: Command:(load "驱动器:\\路径\\文件名" ["出错信息"])
例如: 文件fi1e1.lsp最后一个表达式是定义函数func1,它的路径 是d:\user1。加载该文件的表达式如下: Command:(load "d:\\ user1\\ fi1e1" "没有找到这个文件!" ) 若加载成功,返回函数名func1,否则返回"没有找到这个文件! "这个信息。
2
第5章 AutoLISP文件
5.1 AutoLISP文件的特点 AutoLISP文件的扩展名为.lsp,是由若干个AutoLISP表达
式构成的。 一个LISP文件可定义多个函数或AutoCAD命令。
以下是一个表达式分写在若干行上的实例: (defun plus(x y)
(+ (* x y) x) ) 以下是一行写若干个表达式的实例: (setq a 2.0) (setq b 4.0) (+ a b)
☆☆ 第5章 AutoLISP文件
5
第5章 AutoLISP文件
5.2 程序中的注释
【例1】定义打印ASCII码为33 ~90的字符的命令。
;该程序打印ASCII码为33~90的字符
;在Command:提示下,键入pras
(defun c:pras(/ as );定义pras为AutoCAD命令,as为局部变
第5章 AutoLISP文件
本章要求:
1. 了解Auto LISP文件操作的概念; 2. 掌握Auto LISP文件打开、关闭、读写相关函 数的使用; 3.能够用AutoLISP文件操作函数编写程序,实现 程序设计;
☆☆ 第5章 AutoLISP文件
1
第5章 AutoLISP文件
AutoLISP语言和其它高级语言一样具有文件处理功能,提 供了文件操作函数。
(SETQ P2(GETPOINT "Second point:"))
(PRINC P2 f)
(CLOSE f) (COMMAND “line” p1 p2 “”) 程序运行后,用记事本打开“fi”文件可以看到两个坐标值。
☆☆ 第5章 AutoLISP文件
14
第5章 AutoLISP文件
5.5 打开、关闭文件的函数 2.(CLOSE<文描述符>) 函数的功能:该函数关闭一个已打开的文件,以切断文件描述 符与文件的联系,并返回NIL(见上例) <文描述符>:在OPEN函数打开文件时获得的文件描述符。
☆☆ 第5章 AutoLISP文件
3
第5章 AutoLISP文件
5.1 AutoLISP文件的特点
由于在AutoLISP程序中含有大量的括号,使得程序代码不
易阅读。解决这个问题的方法就是缩排对齐格式。
1
x0
f ( x) 2
x0
0
x0
(defun fun (x) (cond ((> x 0) 1) ((= x 0) 2) ((< x 0) 0)))
"To boldly go where nomad has gone before."
☆☆ 第5章 AutoLISP文件
17
第5章 AutoLISP文件
5.6 用于文件的输入输出函数 3.(WRITE-LINE<字符串><文件描述符>)
该函数将<字符串>写到屏幕上或写到由<文件描述符>表示的打开文件中 (并在结尾加回车符),它返回的字符串带有双引号,但写到文件中时则省略 引号。
元
(setq as 33)
;设置as为第一个ASCII码33
(while(<= as 90) ;while循环开始
(princ(chr as)) ;打印ASCII码的为as的字符
(terpri)
;换新行
(setq as (1+ as)) ;设置as为as 的下一个ASCII码
)
;while循环结束
☆)☆ 第5章 AutoLISP文件 ;命令定义结束
☆☆ 第5章 AutoLISP文件
7
第5章 AutoLISP文件
5.3 在AutoCAD环境下加载AutoLISP文件 2.对话框方式
选择下拉菜单Tools®Load Application 项,或者选择下拉菜 单Tools®AutoLISP®Load项,或者在“Command:”提示下键入 appload,通过随后弹出的“Load/Unload Applications”对话框 加载AutoLISP文件。 3.自动加载
5.3 在AutoCAD环境下加载AutoLISP文件 4.间接自动加载 如果把调用autoload函数的表达式写在自动加载的 acad2006doc.lsp等文件内,在AutoCAD启动时,随着 acad2006doc.lsp等文件的自动加载,被调用的autoload函数还 可以加载一些LISP文件。调用autoload函数的格式如下: Command:(autoload lisp文件名 命令表)
返回值: 当用户用OPEN函数打开文件,并进行读、写操作后,必须用 CLOSE函数将文件关闭。这是因为:①若文件没有关闭,则 内存上的部分数据可能因未写到外存文件中而丢失;②由于用 OPEN打开的文件要占用有限的内存,关闭文件,则内存释放。 CLOSE函数的返回值为NIL。
☆☆ 第5章 AutoLISP文件
在AutoLISP语言中,程序和数据二者都具有相同的结构, 所以程序文件和数据文件二者无严格区别。AutoLISP提供的 文件操作函数能处理数据文件,也能处理程序文件。另外, AutoLISP只支持ASCⅡ码的顺序文件。
AutoLISP提供了一个Load函数,可以将程序文件装入内存, 并对其求值。
☆☆ 第5章 AutoLISP文件
AutoCAD在启动时,可以自动加载acad.lsp、acad2006.lsp、 acaddoc.lsp和acad2006doc.lsp4个lisp文件。用户可以创建和维 护这些文件,其中acad.lsp和acaddoc.lsp只能由用户来创建。
☆☆ 第5章 AutoLISP文件
8
第5章 AutoLISP文件
☆☆ 第5章 AutoLISP文件
12
第5章 AutoLISP文件
a:打开文件用于追加操作,如果<文件名>不存在,则创 建一个新文件并打开它;如果<文件名>存在,则打开该文件 并把文件指针移到现有数据的尾部,用户写入文件的数据追加