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
Autolisp在CAD二次开发中的应用
Autolisp在CAD二次开发中的应用摘要:Auto LISP语言是Auto CAD中最大的一种编程工具,基于Auto LISP的编程工具,数量大的让人惊讶。
将一些小程序嵌套于AUTO LISP 内部, 使LISP 语言和AUTO CAD 有机结合,能有效地提高AutoCAD的绘图功能。
通过对Auto LISP语言的分析与研究,探讨了基于Auto LISP的AutoCAD 参数化处理数据的程序设计的基本步骤。
本文设计了如何用Auto LISP语言如何绘制典型机械零件图形,并且详细阐述了其实现过程。
实践表明,Auto LISP语言功能强大,易学易用,AutoCAD二次开发的重要工具。
关键词:Auto lisp语言; 程序设计; 二次开发随着科学技术的不断发展和社会的不断进步,计算机也越来越普遍的在各个行业中得到推广和应用。
实践证明在利用CAD绘制零件图技术在质量和速度上都产生了一个质的飞跃,使机械设计工作上了一个大台阶。
但是目前许多设计人员大多只能利用AUTO CAD软件,一笔一画地绘出所需的设计图纸,是设计人员大大部分时间都花费在繁琐的计算和绘图中,设计工作的重复性较大,工作效率较低。
如果设计人员能够对AUTO CAD进行二次开发,通过对AUTO LISP 进行编程,在CASS中加入一些用户需要的功能,从而使CASS在绘图中更具有实用化。
Auto LISP 语言是嵌入在Auto CAD内部的LISP编程语言,它是LISP语言与Auto CAD有机结合的产物。
Auto LISP的嵌入使Auto CAD真正成为能进行计算机辅助设计、绘图的软件。
VLISP是Auto LISP的换代产品。
VLISP对语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。
同时,通过实现反应器函数,还扩展Auto LISP响应事件的能力。
Visual Lisp具有一个交互式和智能控制台,包括有一个项目窗口、代码分色的文本编辑器、调试器、源程序窗口及许多其他特性。
CAD二次开发教程AUTOLISP
(Command “Commandname”)
其中Command…………………AutoLISP函数
Commandname……………AutoCAD命令
示例:
(Command“line” Pt1 Pt2“”) “line” ……………AutoCAD LINE命令 Pt1……………………第一点 Pt2……………………第二点 “”…………………用于返回,相当于“回车”键
屏幕光标选择该点。随后setq函数将这些坐标赋予变量P1。\n的作用是回车,
其后的表达式将被打印在下一行上(“n”代表“newline")
第7行和第8行:(setq P2(getpoint“\n Enter second Point of triangle:”))及(setq
P3(getpoint“\n Enter third Point of triangle:”))
Cad二次开发 --AUTOLISP 入门
一、LISP编程语言概述
AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy
在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL, 大多数在六十年代早期开发出来的语
这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把 这些坐标赋予P2和P3。\n的作用是回车,因此输入提示显示在下 一行中。
第9行:(Command“line” P1 P2 P3“C”)
本行中,Command函数用来输入AutoCAD的line命令,然后从P1到 P2,P2到P3各画一条直线。“C”(表示“close”选项)把最 后一点P3与第一点P1连接起来。所有的AutoCAD命令及选项在 AutoLISP程序中使用时都必须置于双引号内。变量P1、P2.
AutoCAD二次开发实用教程 郭秀娟 第3章 AutoLISP基本函数
☆☆ 第3章 AutoLISP基本函数
16
第3章 AutoLISP基本函数
3.1.1 计算函数 14.(MINUSP <数>) 函数检查一个数是否是负数,若<数为>负数,则函数返回T; 否则,返回NIL。 例如: (MINUSP -2) 返回T
(MINUSP 3.1) 返回NIL (MINUSP 0) 返回NIL
(SQRT -9)
返回; 错误: 没有为参数定义函数: -9
注意:<数>为大于零的正数。
☆☆ 第3章 AutoLISP基本函数
15
第3章 AutoLISP基本函数
3.1.1 计算函数 13.(ABS <数>) 该函数返回<数>的绝对值,其中<数>可为实型或整型数。 例如: (ABS 0.0) 返回0.0 (ABS 100) 返回100 (ABS -100) 返回100 (ABS -2.1) 返回2.100000
如在除法函数中,通过FLOAT函数强制把数转换为实型数,
从而使可能为整除的运算变为浮点除运算。
例如:
(F1OAT 3)
返回3.0
(FLOAT 3.75)
返回3.75
(FLOAT (- 34 2 3.7)) 返回28.3
☆☆ 第3章 AutoLISP基本函数
20
第3章 AutoLISP基本函数
3.1.1 计算函数
结果。
例如:
(REM 42 12) 返回6
(REM 42 12.0) 返回6.0000
(REM 20 2) 返回0
(REM 36 5 2) 返回1,此式相当于(REM(REM 36 5) 2)
(REM 3)
第5章_几何体分析与处理
7
5.1.2 实体修改
(3)实体的成组与解组
实体解组函数的功能是将一个组中的成员分解成单个实体。 格式:UNGRP/[TOP,]obj list TOP:辅词,表示解组的顺序,为可选项,若包含TOP,则组实体 中的成员将被解组而子组实体成员仍将继续存在,若省略TOP,则组实 体中的所有成员包括子组实体成员都将被解组; obj list:解组的组名称。 下面将对上例中两个组grp1和grp2进行解组来说明此函数的具体应用。 ①ungrp/top,grp2 表示组grp2被解组,但组grp1仍然存在。 ②ungrp/grp2 表示组grp1和组grp2同时被解组。 ③ungrp/grp1 表示组grp1解组,同时组grp1中的四条直线将成为组grp2中的成员。 8
CAD软件二次开发 技术基础
第五章 几何体处理与分析
1
本章主要内容
实体编辑
实体选择 实体修改 实体显示 实体变换的实现 变换矩阵的建立 EDA符号 GPA符号 常用实体分析功能
实体变换
实体分析
2
5.1.1 实体选择
在三维造型过程中,经常需要选择某些特定的实体,但在有些情况 下由于实体数量太多,选择的过程中有可能发生错误,从而导致操作的 重复和时间的浪费。因此若在程序中预先设定实体选择的类型,则将大 大降低实体选择的错误。 实体选择函数的格式: MASK/{ALL|NONE|[OMIT,] ent type list} MASK/ALL:所有实体都能被选择; MASK/NONE:所有实体都不能被选择; MASK/ent type list:实体类型表中的实体能被选择; MASK/OMIT,ent type list :实体类型表中的实体不能被选择,其余 实体都能被选择。
autocad二次开发
AutoCAD二次开发简介AutoCAD是一款功能强大的计算机辅助设计(CAD)软件,广泛应用于建筑、机械、电气等行业。
除了AutoCAD本身提供的功能外,用户还可以通过二次开发来扩展和定制AutoCAD的功能,以满足特定的需求。
AutoCAD二次开发的优势AutoCAD二次开发的优势在于可以根据用户的具体需求进行定制化开发,如自动化绘图、数据分析、工作流程优化等,提高工作效率和准确性。
与使用传统方法进行手动操作相比,二次开发可以大大简化工作流程,减少重复性劳动,节省了时间和人力资源。
AutoCAD二次开发的方法AutoCAD二次开发的主要方法包括使用AutoLISP、Visual Basic for Applications(VBA)、.NET等编程语言进行开发。
AutoLISPAutoLISP是AutoCAD内建的一种简单的解释性编程语言,用户可以通过AutoLISP开发自定义命令、函数和程序。
使用AutoLISP可以实现自动绘图、自动标注、数据提取等功能。
开发过程相对简单,但扩展性和性能有限。
VBAVBA是一种基于Microsoft Visual Basic的编程语言,用户可以通过VBA进行二次开发,进行更复杂的任务,如自动化CAD操作、数据处理等。
VBA具有良好的可扩展性和性能,并且易于学习和使用。
.NET使用.NET开发AutoCAD插件是一种相对较新和强大的二次开发方法,可以使用多种编程语言,如C#、等。
通过.NET开发,用户可以实现更高级的功能和交互,如集成数据库、Web服务等。
.NET开发需要一定的编程基础,但其灵活性和功能强大,使得更多复杂的任务可以得以实现。
AutoCAD二次开发的应用实例AutoCAD二次开发在各个领域都得到了广泛应用,以下是一些常见的应用实例:1.自动化绘图:通过二次开发,可以实现自动生成平面图、剖面图、立面图等,提高绘图效率和准确性。
2.数据提取与分析:通过二次开发,可以从大量的图纸中提取所需的数据和信息,并进行进一步的分析和统计。
AutoCAD的二次开发
AutoCAD勺二次开发主要涉及以下内容:(1) 编写各种用户自定义函数并形成若干LISP、ARX VLX或ADSfc件,以及一些DC文件。
(2) 建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD200版本还可增加部分菜单文件,然后经交互方式加入到系统中去。
(3) 在系统的ACAD.LS或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。
4) 通过系统对话框设置某些路径。
这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。
为此笔者用VC+开发了一套自动安装程序,使原本需要五、六分钟的人工操作在十几秒内即可自动完成。
基本思路整个安装程序遵循以下思路:1)首先获得所在机器AutoCAD200(系统的安装路径;2)寻找菜单文件AutoCAD2000\\support\\acad.mnu ,打开文件并将要添加的内容加至末尾;3)寻找LISP 文件AutoCAD2000\\su ppo rt\\acad2000doc.ls p ,打开文件并将要添加的内容加至末尾;4)创建一个预先命名的子目录,将所有二次开发形成的各类文件拷入;5) 给出信息框,告知安装成功,如有问题则告知安装失败。
需要指出的是,在添入acad2000doc.lsp 的内容中须有如下语句:comman“d _menu”(strcat (getvar "menuname") ".mnu") ),目的是为了强制执行菜单文件装入命令,将改动后的acad.m nu文件编译后装入。
另外,在添入acad2000doc.lsp 的内容中还有一赋值语句,将准备创建的包含所有二次开发生成文件的子目录全路径名赋予一全局变量,以供二次开发程序在需要时调用,从而避免了在AutoCAD^境下交互设定路径的麻烦。
基于AutoLISP的AutoCAD二次开发研究
收稿日期:2007-06-291 作者简介:郭秀娟(1961~),女,吉林省德惠市人,教授,博士.基于AutoL ISP 的AutoCAD 二次开发研究郭秀娟 范晓鸥(吉林建筑工程学院计算机科学与工程学院,长春 130021)摘要:介绍了AutoL ISP 语言的功能、特点及绘图程序,并结合实例,介绍了用AutoL ISP 对AutoCAD 二次开发的方法和过程,展示了开发的实际效果.关键词:AutoL ISP ;AutoCAD ;二次开发中图分类号:TP 39 文献标识码:A 文章编号:100921288(2008)0420082203Secondary Development R esearch of AutoCAD B ased on AutoL ISPGUO Xiu 2juan ,FAN Xiao 2ou(School of Com puter Science and Engineering ,Jilin A rchitectural and Civil Engineering Institute ,Changchun 130021)Abstract :The paper aims at introduce the functions ,characteristics ,and drawing programs of AutoL ISP lan 2guage ,and through the examples illustrates the methods and process of using AutoL ISP language to hold the sec 2ondary development ,it introduce the active effects of the secondary development.K eyw ords :AutoL ISP ;AutoCAD ;secondary development AutoCAD 具有较强的二维和三维绘图功能,且还是一个开放的、便于用户二次开发的绘图软件.目前,支持AutoCAD 二次开发环境的主要有:AutoL ISP/VisualL ISP ,VBA ,ObjectARX ,ActiveX Automation 及块和形定义等.用户可编写AutoL ISP ,ADS 或ARX 应用程序,作为新的AutoCAD 命令,满足特定用户特殊需要[1-2].1 AutoCAD 二次开发 AutoCAD 软件二次开发是在现有软件基础上,为提高和完善软件功能,使之更符合用户需求而对软件所做的开发工作,目的是提高设计质量和效率及充分发挥通用AutoCAD 软件价值.二次开发将应用对象的设计规范、构造描述、设计方法等以约束关系形式集成到通用AutoCAD 平台中去,使应用对象设计智能化、集成化,也是将AutoCAD 环境客户化的基本手段.2 AutoL ISP 语言 AutoL ISP (List Procesing Language )是一种内嵌于AutoCAD 中表处理高级程序设计语言,能够直接在AutoCAD 内部运行,是迄今人工智能领域中应用最广泛的程序设计语言之一.AutoL ISP 既具备一般高级语言的基本结构和功能,又具有一般高级语言所没有的强大图形处理功能;AutoL ISP 可直接调用几乎全部的AutoCAD 命令,它语法简洁,表达能力强,函数种类多,程序控制结构灵活;像BASIC 那样易学易用,如C 语言一般功能超群,是进行AutoCAD 二次开发的理想工具.特别是随着AutoCAD 版本的不断升级,AutoL ISP 功能更强、开放性更好、更便于二次开发,为我们开发适合于本专业的CAD 系统提供极大的便利. 第25卷 第4期2008年12月吉 林 建 筑 工 程 学 院 学 报Journal of Jilin Architectural and Civil Engineering Institute Vol.25 No.4Dec 12008 211 AutoL ISP 特点 AutoL ISP 语言继承了L ISP 语言的基本特征,又具有调用AutoCAD 命令的功能,使图形编辑软件Auto 2CAD 变成真正进行计算机辅助设计绘图出图的应用软件.AutoL ISP 语言又称为符号语言、函数语言,其最基本的数据类型是符号表达式,具有以下特点:①AutoL ISP 语言是在普通L ISP 语言基础上,扩充了许多适用于AutoCAD 应用的特殊功能而形成的计算机语言,是一种仅能以解释方式运行于AutoCAD 内部的解释性程序设计语言;②AutoL ISP 语言的一切成分是以函数形式给出的,执行AutoL ISP 程序就是执行一些函数,再调用其他函数;③AutoL ISP 语言把数据和程序统一表达为表结构,故可把程序当作数据来处理,也可把数据当作程序来执行;④AutoL ISP 语言程序运行过程就是对函数求值的过程,是在函数求值过程中实现函数功能;⑤AutoL ISP 语言典型的程序结构是递归方式.递归方式的使用,使得程序设计简单易懂.212 AutoL ISP 应用 AutoL ISP 是一种解释执行语言,用户可在AutoCAD 命令提示符下执行简单的AutoL ISP 函数;Au 2toL ISP 源程序是以3.L SP 形式存储的,源程序编辑过程是:①运行AutoCAD ;②选取工具菜单栏的Au 2toL ISP 或VisualL ISP ,进入编辑窗口;③编辑程序、进行语法检查、加载;④由(load )函数调用并运行[3].(1)扩充和修改的命令,可用Auto L ISP 定义一个AutoCAD 扩充命令,此命令和AutoCAD 内部命令同样使用.(2)AutoL ISP 提供完整的数学函数,能够进行复杂的数学运算,亦可用于设计计算.(3)可使用Command 函数生成和编辑图形,并可执行几乎所有AutoCAD 命令,固可自动生成图形.(4)可操作Auto L ISP 的系统变量.(5)可生成各种图形(函数曲线).(6)AutoL ISP 可实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等.由于Auto L ISP 可开发用户应用程序,利用这些程序,使得AutoCAD 不仅是一个绘图工具,而是一个强有力的辅助设计工具.3 AutoL ISP 程序实例实例1 批量修改多义线宽 如在需大量修改多义线宽的图形中,用pedit 命令,一根一根地改线宽非常慢,笔者用AutoL ISP 语言编一个函数程序,完成一次性选定修改.程序如下:(defun C :wpline ();统一修改线宽(setq s (ssget )w (getreal “width :”))(setq n (sslength s )n (-n 1))(while (>=n 0);循环(setq n1(ssname s ));取当前目标名称(if (k (cdr (assoc 0(entget n1)))“polyline ”)(command “pedit ”(cdr (assoc -1(entget n1)))“w ”“w ”“x ”))(setq n (-n 1));目标个数减“1”))实例2 自动插窗程序 在墙体上插入门窗且自动设置洞口是建筑设计制图中经常遇到的工作,这项工作常会耗费设计人员很多的时间和精力.下面的程序通过几个关键点选择,就可以自动地在双线墙上插入门窗并自动开设洞口[4].自动插入窗的源程序代码如下:(defun rtd (a )(3180.0(/a pi )))(defun c :kaidong2(/pt0pt01pt1pt2pt3pt4s w ang ang1kro )38 第4期郭秀娟,范晓鸥:基于AutoL ISP 的AutoCAD 二次开发研究(setq pt0(getpoint“\n拾取墙线中点:”))(setq pt01(getpoint pt0“\n测量墙厚:”))(setq s(distance pt0pt01))(princ“\n墙厚:”)(princ s)(setq ang(getangle pt0“\n拾取墙线上一点(与基点同一直线):”)) (setq w(getdist“\n输入洞口宽度:”))(setq ang1(angle pt0pt01))(setq pt1(polar pt0(+ang pi)(/w2))) (setq pt2(polar pt0ang(/w2)))(setq pt3(polar pt1ang1s)pt4(polar pt3ang w))(command“break”pt1pt2)(command“break”pt3pt4)(command“line”pt1pt3“”)(command“line”pt2pt4“”)(if(>=ang1pi)(setq kro(rtd ang)kro(+(rtd ang)180))(command“insert”“window”pt0(/w1000)(/s100)kro))此程序在建筑设计运用过程中,还应考虑到图层的设置问题,可运用Command函数调用AutoCAD的Layer命令来操作,或运用While或Repeat循环函数来设置连续操作.由本文实例可看出,对于许多重复性的工作,用AutoL ISP编程,可以使绘图工作自动化,大大减少设计人员的工作量.AutoL ISP程序非常简洁、表达能力强,若将程序加入到ACAD.L SP文件中,就可以如同A2 CAD的基本命令一样使用.4 结语 AutoL ISP语言作为AutoCAD的二次开发工具,可较好地实现参数化绘图的方法.AutoL ISP作为一种解释型高级语言,其主要缺点是执行速度慢,源程序保密性差,大量数据的运算效率较低.AutoL ISP程序一旦编辑完成后,只要给定尺寸参数,就可以用此程序自动完成图形的绘制,从而达到高效、准确的绘图目的.把大量、复杂的操作进行有效的封装,减少设计人员的机械性、重复操作,使其能把主要精力投入到如何设计上,缩短设计周期,提高了工作效率和经济效益.参 考 文 献 [1] 梁春雪,崔洪斌,吴义忠1AutoL ISP实用教程〔M〕1北京:人民邮电出版社,19981 [2] 康保成1AutoL ISP程序在AutoCAD中的应用实例〔J〕1山西建筑,2002(3):157-1581 [3] 黄秀琴1基于Visual L ISP的AutoCAD2000的二次开发研究〔J〕1常州工学院学报,2002(4):5-71 [4] 蓝屹生1AutoL ISP学习导引(适用于R14-2002)〔M〕1北京:中国铁道出版社,2003148吉 林 建 筑 工 程 学 院 学 报第25卷。
AutoCAD二次开发所用的autolisp函数
AutoCAD二次开发所用的autolisp函数。
一、数学运算功能函数1.l(十数值数值…)返回:累计实数或整数数值1.2(一数值数值…)返回:差值1.3(*数值数值…)返回:所有数值乘积1.4(/数值数值…)返回:第一个数值除以第二个以后数值的商1.5(l十数值)返回:数值十ll. 6(1—数值)返回:数值一ll.7(abs 数值)返回:数值的绝对值1.8(atan数值)返回:反正切值1.9(cos角度)返回:角度的余弦值,角度值为弧度1.10(exp数值)返回:数值的指数1.11(expt底数指数)返回:底数的指数值1.12(fix 数值)返回:将数值转换为整数值1.14(gcd数值1 数值2)返回:两数值的最大公因数1.15(log 数值)返回:数值的自然对数值1.16(max数值数值…)返回:数值中的最大值1.17(min数值数值…)返回:数值中的最小值1.18 pi 常数∏,其值约为3.14159261.19(rem 数值1数值2)返回:M数值的相除的余数l.20(sin 角度)返回:角度的正旋值,角度值为弧度1.21(sqrt数值)返回:数值的平方根二、检验与逻辑运算功能函数2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式22.3(<表达式1 表达式2) 比较表达式1是否<小于表达式22.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式22.5(>表达式1 表达式2) 比较表达式1是否>大于表达式22.6(>= 表达式1 表达式2) 比较表达式1是否大于等于表达式22.7 (~数值)返回:数值的位not值,(1的补码)2.8 (and 表达式1 表达式2…)返回:逻辑and的结果2.9(boole函数整数整数…)返回:位式布尔运算2.10(eq表达式1 表达式2)比较表达式1与表达式2是否相同,适用列表比较(实际相同)2.11(equal 表达式1表达式2[差量])比较表达式1与表达式2是否相同,差量可省略(内容相同)三、转换运算功能函数3.l(angtof字符串[模式])返回:角度值的字符串转成实数3.2(angtos角度[模式[精度]])返回:角度转成的字符串值3.3(atof字符串)返回:字符串转成实数值3.4 (atoi字符串)返回:字符串转成整数值3.5 (cvunit数值原始单位转换单位)返回:数值转换单位后的值转换根据acad.nut文件3.6(distof字符串[模式])返回:根据模式将字符串转成实数值3.7(itoa整数)返回:整数转成字符串3.8(rtos数值模式[精度])返回:实数转成字符串3.9 (trans 点原位置新位置[位移]) 返回:转换坐标系统值四、列表处理功能函数4.1 (append列表列表……) 结合所有列表成一个列表4.2(assoc关键元素联合列表)根据关键元素找寻联合列表中关系信息4.3 (car 列表)返回列表中的第一个元素,通常用来求X坐标4.4(cadr列表)返回列表中的第二个元素,通常用来求y坐标4.5(caddr列表)返回列表中的第三个元素,通常用来求Z坐标4.6(cdr列表)返回:除去第一个元素后的列表4.7(cons 新元素列表)返回:将新元素添加到列表4.8(foreach名称列表表达式)返回:将列表的每一元素对应至名称再根据表达式执行响应4.9(length 列表)返回:列表内的元素数量4.10(list元素元素…)返回:将所有元素合并为一列表4.11(listp元素)返回:判断元素是否为一串4.12(mapcar函数列表1列表2…)返回:将列表1、列表2列表的元素配合函数,求得新列表4.13(member 关键元素列表)返回:根据关键元素(含似后的列表4.14(nth n 列表)返回:列表的第n个元素4.15(reverse 列表)返回:将列表元素根据顺序颠倒过来的列表4.16(subst新项旧项列表)返回:替换新旧列表后的列表五、字符串、字符、文件处理函数5.l(ascii字符串)返回:字符串第一个字符的“ASCII”码5.2 (chr整数)返回:整数所对应的ASCII单一字符串5.3(close 文件名称)关闭文件5.4(open 文件名模式)返回:打开文件代码,准备读取或写入信息5.5(read 字符串)返回:列表中的字符串的第一组元素5.6(read-char[文件代码])返回:通过键盘或文件中读取单一字符5.7(read-line [文件代码])返回:经由键盘或文件中读取一行字符串5.8(strcase字符串[字样])返回:转换字符串大小写5.9(strcat字符串1字符串2…)返回:将各字符串合并为一个字符串5.10(strlen字符串)返回:字符串构成的字符数(即字符串长度)5.11(substr字符串起始长度)返回:取出于字符串…5.12(wcmatch字符串格式)返回:T或nil,将字符串与通用字符进行比较5.13(write-char数值[文件代码])返回:将一ASCII字符写到文件或屏幕15.14(write-line字符串[文件代码])返回:将字符串写到文件或屏幕上六、等待输入功能函数6.l (getangle [基点] [提示])请求输入十进制角度数值,响应一个弧度值提示及参考点可有可无6.2(getcorner基点[提示])请求输入另一矩形框对角点坐标6.3(getdist [基点][提示])请求输入一段距离6.4(getint [提示])请求输入一个整数值6.5(getkword [提示]请求输入“关键词”6.6(getorient [基点][提示])请求输入十进制角度,响应一弧度值不受angbase、angdir影响6.7(getPoint [基点][提示])请求输入一个点的坐标6.8(getreal [提示]请求输入一个实数6.9(getstring [提示])请求输入一个字符串6.10(initget [位]字符串)设定下次getxxx函数的有效输入七、几何运算功能函数7.l(angle 点1 点2)取得两点的角度弧度值7.2(distance 点1 点2)取得两点的距离7.3(inters 点1 点2 点3 点4[模式])取得两条线的交点7.4(osnap点模式字符串)按照捕捉模式取得另一坐标点7.5(polar 基点弧度距离)按照极坐标法取得另一坐标点7.6(textbox 对象列表)取得文字字符串的两个对角点坐标八、对象处理功能函数8.l(entdel对象名称)删除或取消删除对象8.2(entget对象名称[应用程序列表])取出对象名称的信息列表8.3 (entlast) 取出图形信息中的最后一个对象8.4(entmake对象列表)建立一个新的对象列表8.5(entmod对象列表)根据更新的信息列表更新屏幕上元体8.6(entnext [对象名称])找寻图面中的下一个对象8.7(entsel [提示])请求选取一个对象,响应包含对象名称及选点坐标的列表;8.8(entupd对象名称)更新屏幕上复元体图形8.9(handent图码)返回:图码的元体名称8.10(nentsel[提示])返回:BLOCK所含副元体对象信息列表8.11(nentselp [提示][点])返回:BLOCK所含副元体对象信息似4*4矩形表示)九、选择集、符号表处理函数9.l(ssadd [对象名称][选择集])将对象加入选择集或建立一新选择集9.2(ssdel对象名称选择集)将对象自选择集中移出9.3(ssget [模式][点1][点2]取得一个选择集9.4(ssget”X” [过滤列表])取得根据过滤列表所指定范围的选择集9.5(sslenth选择集)计算选择集的对象个数9.6(ssmemb对象名称选择集)响应对象名称是否包含于选择集内9.7(ssname选择集索引值)根据索引值取出选择集中的对象名称9.8(tblnext符号表名称[T])检视符号表,有效的符号表:”LAYER”、”LTYPE”、”VIEW”、”STYLE”、”BLOCK”9.9(tblsearch符号表名称符号)在符号表中搜寻符号十、AutoCAD相关查询、控制功能函数10.l(command ”AutoCAD命令”…)超重量级函数,调用执行AutoCAD命令10.2(findfile文件名)返回:该文件名的路径及文件名10.3(getfiled标题内定档名扩展名旗号)通过标准AutoCAD文件对话DCL对话框获得文件10.4(getenv”环境变量”)取得该环境变量的设定值,以字符串表示10.5(getvar”系统变量”)取得该系统变量的设定值,以字符串表示10.6(setvar”系统变量”值)设定该系统变量的值10.7(regapp应用类项)将目前的AutoCAD图形登记为一个应用程序名称十一、判断式、循环相关功能函数11.1(If <比较式><表达式1> [表达式2] 检算比较式结果,如果为真,执行<表达式1>,否则执行<表达式2>11.2( repeat 次数[<表达式><表达式>…])重复执行N次表达式11.3(While <比较式><表达式>…) 当条件成立则执行表达式内容11.4(cond<比较式1><表达式1>多条件式的if整合功能<比较式2><表达式2><比较式3><表达式3>)11.5 ( prong 表达式1 表达式2…) 连接其中的表达式为一组,常用于配合if、cond 等函数十二、函数处理、定义、追踪与错误处理功能函数12.l(*error* 字符串)程序错误时的警示信息12.2(alert 字符串)以对话框式显示出警告字符串12.3(apply 功能函数列表)将功能函数与列表结合后执行12.4(defun名称自变量列表表达式_.)自定函数或子程序12.5(eval表达式)返回:表达式的执行结果12.6(exit)强制退出目前的应用程序12.7(lambda 自变量表达式)定义未命名的函数12.8(progn表达式1 表达式2…)连接其内的表达式为一组,常用于配合if、cond等函数12.9(quit)强制退出目前的应用程序12.10(tablet 代码[列1列2列3方向])取用或建立对数字板的校调12.11(trace 函数…)对函数设定追踪标记,辅助检错12.12(untrace函数…)对函数设定解除追踪标记十三、显示、打印控制功能函数13.l(gfaphscr)作图环境切换到图形画面13.2(grclear)暂时清除模前的屏幕画面13.3(grdraw起点终点颜色[亮显])暂时性的画出一条线13.4(grread[追踪])由输入设备读取追踪值13.5(grtext位置字符串[亮显])将字符串显示在状态列或屏幕菜单上13.6(grvecs向量列表[转置矩阵])暂时性的画出多条线13.7(menucmd字符串);提供在AlltOLISP中调用各菜单13.8(Prinl[表达式[文件代码]]将表达式打印于命令区或已打开的文件句柄字符则以“\”为前缀展开13.9(pinc[表达式[文件代码]]除句柄字符则不以”\”为前缀展外开其余同Prinl13.10(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl13.11(prompt信息)将信息显示于屏幕的命令区,并随后响应一个nil信息13.12(redraw[对象名称[模式]])重绘整张图或根据对象名称重绘该图形13.13(terpri) 在屏幕上显示新列13.14(textscr) 作图环境切换到文字画面13.15(textpage)清除文字画面文字类似DOS的cls命令13.16(vports)返回:窗口组态列表十四、符号、元素、表达式处理功能函数14.l(atom元素)如果元素不是列表,响应T,否则为nil14.2(atoms-family格式闲号列表])返回:一组己定义函数的符号列表14.3(boundp表达式)返回:T或nil,响应表达式是否有值存在14.4(minusp元素)返回:T或n儿元素是否为负值14.5(not元素)返回:T或n儿判定元素是否为ni114.6(null元素)返回:T或nil判定元素是否被赋予nil值14.7(numberp元素)返回:T或nil,元素是否为整数或实数14.8(quote表达式)响应表达式未检算前状态,同“…”功能14.9(set符号表达式)将表达式结果设定给带单引号‟符号14.10(setq符号1 表达式1[符号2表达式2]…)设定表达式结果给各符号14.11(type元素)返回:元素的信息型态14.12(zerop元素)返回:T或nil,元素是否为0值十五、ADS、ARX、AutoLISP加载与卸载函数15.l(ads)返回:目前加载ADS程序列表15.2(arx)返回:目前加载ARX程序列表15.3(arxload应用程序[出错处理]))返回:加载ARX程序15.4(arxunload应用程序[出错处理]))返回:卸载ARX程序15.5(ver) 返回:目前AutoLISP版本字符串15.6(load LSP文件名[加载失败])加载AutoLISP文件(*.lsp)15.7 (xload应用程序[错处理])加载ADS应用程序15.8 (xunloa应用程序[出错处理])卸载ADS应用程序十六、内存空间管理函数16.l(alloc数值)以节点数值设定区段大小16.2(expand数值)以区段数值配置节点空间16.3(gc)强制收回废内存16.4(mem)显示目前的内存使用状态16.5(xdroom对象名称)返回对象扩展信息允许使用的内存空间16.6(xdsize列表)返回对象扩展信息所占用的内存空间十七、其它重要的功能函数17.l(acad_colordlg颜色码旗号)显示出标准AutoCAD颜色选择对话框17.2(acad_helpdlg求助文件名主题)显示出标准AutoCAD求助对话框17.3(acad_strlsort字符串列表)作字符串列表排序17.4(bherrs) 取得bhatch与bpcly失败所产生的错误信息17.5(bhatch点[选择集[向量]])根据Pick point选点方式调用bhatch命令,绘制选集区域的剖面线17.6(bpoly点[选择集[向量]])根据Pick point选点方式调用bpoly命令并产生一定域Pol yline17.7(cal计算式字符串)执行如CAL计算功能十八、ADS、ARX外部定义的3D函数18.1(align自变量1 自变量2....)执行如ALIGN命令各选项顺序18.2(c:3dsin模式3DS文件名)导入3DS文件18.3(C:3dsout模式3DS文件名)输出3DS文件18.4(c:background模式[选项])设定渲染背景18.5(C:fog模式[选项])设定渲染的雾效果18.6(C:light模式[选项])设定渲染的灯光控制18.7(c:lsedit模式【选项1】设定渲染的景物控制18.8(C:lslib模式[选项])管理景物图库18.9(c:matilb模式材质材质库名)管理材质数据库18.10(c:mirror3d 自变量1 自变量2……)执行如MIRROR3D命令18.11(C:psdrap模式)根据模式设定值(0或1),传唤psdrap命令18.12(C:psfill对象名称图案名称[自变量1[自变量2]])以POStSCript图案填满18.13(c:psin文件名位置比例)插入一个Postscript(*.eps)文件18.14(c:render[渲染文件])执行渲染效果18.15(C:rfileopt格式自变量1 自变量2 自变量3…)设定执行渲染选项18.16(c:replay影像文件名影像类别[选项])展示影像文件TGA、BMP、TIF 18.17(C:rmat模式选项)控管材质建立、贴附、编辑、分离18.18(c:rotate3d自变量1 自变量2…)执行如ROTATE3D命令各选项顺序18.19(C:rpref模式选项[设定])渲染环境设定18.20(c:saveimg影像文件名影像类别[选项])储存图像文件TGA、BMP、TIF 18.21 (c:scene模式[选项]) SCENE场景管理18.22(C:setuv模式选集自变量1 自变量2…)SETUV贴图模式管理18.23(C:showmat自变量1)显示对象的材质贴附信息18.24(C:solprof自变量1 自变量工..)建立3D实体的轮廓影像18.25(C:StatS[渲染信息文件])显示渲染信息统计信息十九、ADS、ARX外部定义的数据库相关函数19.l(c:aseadmin自变量1 自变量2…)管理外部数据库19.2(c:aseexportt自变量1 自变量2…)输出信息19.3 (c:aselinks自变量1 自变量2…)连接对象与信息19.4(c:aserow自变量1 自变量2…)管理外部信息表格19.5(c:aseselect自变量1 自变量2…)建立外部信息与对象选集19.6 (c:asesqled自变量1 自变量2…) 执行SQL程序。
AutoCAD绘图中实用的AutoLisp程序共4页文档
AutoCAD绘图中实用的AutoLisp程序一、引言计算机辅助设计(CAD)[1]是指利用计算机及图形设备辅助设计人员完成设计工作。
作为设计人员,不仅需要对非标件自动化设备整体布局与规化,还要在规定的时间内完成总装图和零件图的输出。
因此,整个项目对时间进度的管控显得尤为重要。
基于这样的背景下,依托公司现有的一些资源,结合实际工作的需求,开发AutoCAD的二次开发命令尤其重要。
这样不仅可以有效减轻设计人员工作负荷,而且可以大大提高工作效率。
由简单快捷的AutoCAD二次开发命令就可以取代原来人工大量重复性的工作,使AutoCAD的二次开发必要性凸显出来。
图1 拆分组立图流程图二、AutoLisp语言AutoLISP[2]是专门为二次开发AutoCAD而设计的编程语言,它继承了LISP语言的特点,并内置在AutoCAD软体中,是LISP语言和AutoCAD 有机结合的产物。
使用AutoLISP语言可以完成各种工程分析与计算、绘制复杂的图形,还可以新增的AutoCAD快捷命令、驱动对话框和命令菜单。
同时能够使AutoCAD具有一定智能化、参数化的功能,还可以有助于设计人员将精力和时间用于产品的创新设计上,实现计算机辅助设计的目的。
三、AutoCAD二次命令开发在非标件自动化设备设计中,当完成设计总图后需要将每个零件图拆分出来,这就是重复性高,步骤繁琐,价值低的工作对于非标件自动化设备,我们通常是先完成组立图。
一般来说,组立图包含众多图层,每个图层上有一个零件的三视图。
下面我们的工作是将每一个零件提取、拆分出来。
这样可以逐一将零件图提取出来,但是这工作耗时耗力。
我们希望改进、完善程序,最终达到一键完成自动拆分目标。
下面我们通过流程图分析作业步骤,如图1所示。
Fig 1 Split Assembly Flowchart Of FIG.经流程图的规划后,我们有了明确的思路,并过程并复杂。
所需要注意的是同一图层中的实体集合,在复制移动后,还需要将它们从集合中逐一删除。
基于AutoLISP的AutoCAD二次开发研究
基于AutoLISP的AutoCAD二次开发研究
郭秀娟;范晓鸥
【期刊名称】《吉林建筑工程学院学报》
【年(卷),期】2008(025)004
【摘要】介绍了AutoLISP语言的功能、特点及绘图程序,并结合实例,介绍了用AutoLISP对AutoCAD二次开发的方法和过程,展示了开发的实际效果.
【总页数】3页(P82-84)
【作者】郭秀娟;范晓鸥
【作者单位】吉林建筑工程学院计算机科学与工程学院,长春,130021;吉林建筑工程学院计算机科学与工程学院,长春,130021
【正文语种】中文
【中图分类】TP39
【相关文献】
1.基于AutoLISP的AutoCad二次开发在桥梁绘图中的应用 [J], 高远;康焯;金波
2.基于AutoLisp的AutoCAD二次开发自动生成系统图 [J], 郎建山;金江
3.基于AutoLISP的AutoCAD二次开发研究 [J], 崔联合;于华艳;刘江;万文龙
4.基于AutoLISP的AutoCAD二次开发在风电机组基础施工图中的应用 [J], 张浩
5.基于AutoLISP的AutoCAD二次开发技术及其应用研究 [J], 余志伟
因版权原因,仅展示原文概要,查看原文内容请购买。
- 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:打开文件用于追加操作,如果<文件名>不存在,则创 建一个新文件并打开它;如果<文件名>存在,则打开该文件 并把文件指针移到现有数据的尾部,用户写入文件的数据追加