用Autolisp对AutoCAD进行二次开发

上传人:ba****u 文档编号:218528164 上传时间:2023-06-20 格式:DOCX 页数:12 大小:137.11KB
收藏 版权申诉 举报 下载
用Autolisp对AutoCAD进行二次开发_第1页
第1页 / 共12页
用Autolisp对AutoCAD进行二次开发_第2页
第2页 / 共12页
用Autolisp对AutoCAD进行二次开发_第3页
第3页 / 共12页
资源描述:

《用Autolisp对AutoCAD进行二次开发》由会员分享,可在线阅读,更多相关《用Autolisp对AutoCAD进行二次开发(12页珍藏版)》请在装配图网上搜索。

1、用 AutoLISP 对 AutoCAD 进行二次开发一、什么是CAD的二次开发?(为什么需要对CAD进行二次开发)我们在设计、绘图时采用AutoCAD、ProE、Solidwork、UG等设计软件,在复杂问题或特殊用途的设 计中,各种软件的原有功能往往难以解决问题,例如CAD里没有直接绘制正弦曲线和抛物线等曲线的命 令。因此,只是会使用各软件的基本功能是不够的,根据我们的特殊用途进行软件的用户化定制和二次开 发,往往能够大大提高工作效率和技术水平。二、什么是 AutoLisp ?如何用其进行二次开发?AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Pr

2、ocessor的缩写。通过autolisp 编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言, 是开发应用 AutoCAD 不可缺少的工具。当前 AutoCAD 的二次开发工具主要有: VisualLisp (它是 AutoLisp 的集成开发环境)、 VBA、 ObjectARX 和.NET API 等,这里只介绍 AutoLisp。下面由浅入深地介绍一下如何应用AutolLisp进行二次开发。最简单的应用是在命令行中编写和执行lisp语句,进行简单的计算、绘图、查询等操作。稍复杂些的就要把语句(代码)放到扩展名为lsp的文件中,用的时候

3、先加载到CAD中,然后输入自 定义的函数名执行。当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度 的时候就需要用到用户自定义的工具按钮、菜单和对话框了。图 1 根据程序数量选择二次开发形式( 1)在命令行中编写和执行程序例 1 :(+ 2 3)例 2: (setq a 2)(setq b 3)(+ a b)例 3:(setq a 2)(setq b 3)(+ a b)例 4: (setq p1 (list 0 0)(setq p2 (list 200 200)(command “line p1 p2 “);;语句之间不空格 例 5: (setq p1 (

4、list 0 0) (setq p2 (list 200 200) (command “line p1 p2 “);;语句之间空格 ;表示语句(程序代码)的注释(2)用 lisp 文件编写和执行程序第一步:在文本中编写和保存AutoLISP程序,文件扩展名为lsp(defun c:sin(/ lp lpx lpy N x step); c:和自定义函数名sin之间不能有空格 (initget 1)(setq lp (getpoint n Left point:)lpx (car lp) lpy (cadr lp)(initget 7)(setq N (getint Nnumber of cyl

5、es:)(setq x 0 step 0.02) (command pline ) (While (.: :.绘图顺序 查询迫)梧更新宇段了噪国剖凰S t :=LTLd:=Lfd邈MS.諱爲(加载履用程序(L). 运行脚本妙AutoLISP(;加载俭用程序(克:严.:;显荒图像(Y)Visual LISP编辑器喙图 2 打开 Visual LISP 编辑器总块编辑器(B)外部参照和块在位编辑 翳属性提取谑卜.負特性(P)CTEL+1(S嬢计中心磁CTB1+2酷工具选项板窗口CTF1+3图纸集管理器CTEL+4瞬信息选项板CTB1+5数据库连接jCTRL+6迢II标记集管理器CTRL+7轉快速计

6、算器CTEL+8命.令行CTEL+9第二步:创建用户自定义的菜单文件打开Visual LISP编辑器后,在文本框中输入生成用户自定义菜单的代码,写好后将文件保存,扩展名为.mnu。例如:*MENUGROUP=MYLISP*pop1中间包;用户自定义菜单组名MYLISP;第一个菜单;第一个菜单名称初等函数曲线绘制cparabola)(curve_of_function)-复合函数曲线绘制ACACAP(load curve of function)(load csin)(load ccos)(load;命令的名称、加载操作和执行操作;子菜单名称,-表示生成的是子菜单抛物线与正弦曲线的叠加 ACAC

7、AP(load cpara_sine) (cparasine)抛物线与余弦曲线的叠加ACACAp(load cpara_cos) (cparacos)-;各命令之间的横线-圆环面积与内径的关系曲线(&C) ACACAp(load cirque) (cirque);-表示子菜单结束 挡板内外面积比的计算ACACAp(load stotal)(load sdio)(stotal);第二个菜单名称结晶器齿轮绘制ACACAP(load gear) (gear)*pop3;第三个菜单凝固计算;第三个菜单名称计算凝固系数 K ACACAp(load solidification_coefficient)

8、(solidification_coefficient);文件的末尾必须是一个空行(回车)第三步:加载用户自定义的菜单程序在cad绘图界面的命令行中输入命令:menuload,在弹出的对话框中浏览选择要加载的菜单文件,单 击加载,这时可以看到绘图界面的菜单栏上出现了用户自定义的菜单名。如图3所示。修改(皿窗口他)图3 加载用户自定义的菜单文件用户自定菜单出现在菜单栏已加茹的空富义组,(5)绘制对话框一一DCL语言第一步:打开Visual LISP编辑器操作同图 2。第二步:创建用户自定义对话框文件打开Visual LISP编辑器后,在文本框中输入生成用户自定义对话框的代码,写好后将文件保存,扩

9、展名为.del。例如:solidification_coefficient:dialog label=计算凝固系数K;:textlabel=说明:根据合金的热物理特性计算凝固系数K;:boxed_rowlabel=输入合金的热物性参数和凝固温度;:row :column:row :edit_boxlabel=导热率入;key=lambda;fixed_width=true; width=5;:textlabel=W/(mK);:row :edit_box label=结晶潜热L;key=L;fixed_width=true; width=5;:text label=J/kg;:row :edi

10、t_boxlabel=密度 p;key=rho;fixed_width=true; width=5;:text label=kg/m3;:row:column:row:edit_boxlabel=热容 c”;key=c;fixed_width=true;width=5; alignment=centered;:textlabel=J/(kgK);:row:edit_boxlabel=合金液相线温度T_L; key=T_L; fixed_width=true; width=5;alignment=centered;:textlabel=K;:row:edit_boxlabel=凝固层表面温度T_

11、0;key=T_0;fixed_width=true;width=5;alignment=centered;:textlabel=K;:boxed_column:row:edit_boxlabel=凝固系数 Km/s(l/2); key=S;fixed_width=true;width=5;alignment=left;:edit_boxlabel=即 mm/s(1/2);key=K;fixed_width=true;width=5;alignment=left;:row:buttonlabel=计算;key=begin;fixed_width=true;width=5;ok_only;重要的

12、一步:工具菜单-选项-文件-支持文件搜索路径(要包含上述所建各类文件的路径)(6)编译及维护AutoLISP程序,形成独立应用程序在 Visual LISP 中,用户可以编译自己的程序,并创建一个单独的可供其他用户使用的可执行模块。 Visual LISP 可将 AutoLISP 程序文件编译成可执行的程序模块以提高程序运行效率和源代码的安全性。 Visual LISP 提供了一套编译器来解决这些问题。通过这个编译器,用户可以将源代码编译成可执行机器码 文件,即FAS文件。源代码在编译后,可以直接在Auto CAD中加载运行,运行效率提高了,而且程序源 代码是保密的,甚至于源代码中的字符串与符

13、号也会被Visual LISP的编译器加密。此外,Visual LISP还可以将更复杂的AutoLISP应用封装进Visual LISP可执行文件(VLX)中。VLX 文件中还可以包括其他的资源文件,例如VBA和DCL文件以及编译过的AutoLISP文件。常用函数及其说明1. 函数名称:vl-load-comVisual Lisp内置函数:语法:(vl-load-com)直接调用,无需参数功能:将Visual LISP扩展函数功能进行加载,以便使用其强大的扩展功能(类似c语言中的#include )。说明: 加载后即可以使用,Vl- vla- vlax- vlr-等各类VisualLisp扩展

14、函数,否则这几类函数将不可使用。(2) 如果已经加载了,则再次调用本函数,不会有任何作用2. 函数名称:open一. 功能打开一个文件,供其它的 AutoLISP I/O 函数记访问。二. 格式(open filename mode)三. 说明filename 变元是一个字符串,它指定要打开的文件名和扩展名。 mode 变元是一个读/写标志。它必须是 包含了单个小写字符的一个字符串。下表列出了 mode变元的有效取值。Open 函数的 mode 变元的有效取值mode 变元的取值说明r打开的文件用于读操作,若filename不存在,open返回nilw打开的文件用于写操作;若filename不

15、存在,则建立一个 新文件,并打开读文件;若 filename 存在,它的已有数据 会被覆盖。a打开的文件用于追加数据操作,若filename不存在,则建立 一个新文件,并打开该文件。若 filename 已经存在,则打开 该文件,打把并件指针移到现有数据的尾部。这样,用户写入文件的所有数据都将追加到现有数据的后面。在dos平台上,某些程序和文本编辑器在写入文本文件时会在文本尾部加上一个文件结束标记(Ctrl+Z, 十进制ASCII码26)。在读入文件时,当碰到Ctrl+Z标记时,DOS便返回文件结束状态,而不管其后是 否还有其它数据。如果想用Open函数的”a”(追加)方式在其它程序所建立的后

16、面追加数据,则必须保证 这些程序没有在其文本文件尾部插入Ctrl+Z结束标记。Open函数返回一个可由其它的AutoLISP I/O函数所用的文本描述符。文本描述符必须使用setq赋给一 变量,如:(setq a (open file.ext r)假定在下面实例中所使用的文件不存在,则:(setq f (open new.tst w);返回 File # nnn)(setq f (open nosuch.filt” 返回 nil(setq f (open logfile a);返回 filename变元中可以包含一个目录前缀,例如:/test/func3即为一例。在DOS平台上,file-na

17、me变元中 还允许使用驱动器字符,并且还可以使用右下斜杠()来代替左下斜杠(/)作为目录的分隔符,但是应该记住 的是使用右下斜杠作为目录的分隔符时必须将该右下斜杠双写(即写成),这样在字符串中才可以获得 一个右下斜杠。如:(setq f (open /x/new.tst w);返回 vFile # nnn)(setq f (open nosuch.fil r) ;返回 nil四. 实例例 1.下面的程序从一个文件读取数据,并将读入的内容构成一个表后返回。(defun readlist (filnam / tmplst x)(setq tmplst nil)(setq fn (open filn

18、a r)(while (setq x (read-line fn)(setq tmplst (append tmplst (list x)(close fn)(setq tmplst temlst)例 2.下面的程序将一个四边形的四个角点坐标写入到一个文件中,并画出该四边形。(defun C:remember()(setq fi (getstring nEnter file name:)(setq f (open fi w)(prompt Now draw 4 points of a rectangel:)(setq p1 (getpoint nFirst point:)(princ p1 f

19、)(set p2 (getpoint nSecond point:)(princ p2 f)(setq p3 (getpoint nThird point:)(princ p3 f)(setq p4 (getpoint nFouth point:)(princ p4 f)(close f)(command line p1 p2 p3 p4 c)3.函数名称:read-line一. 功能从键盘或从一个已打开的文件中读取一个字符串。二. 格式(read-line file_desc)三. 说明如果read-line函数遇到了文件结束标志,它就返回nil;否则,它返回它所读取到的那个字符串。例如,假

20、设f是一个有效的已打开文件的批针,那么,(read-line f)将返回文件中的下一个输入行,而如果已经到达文件结束处则返回nil。四. 实例在下面的程序实例中,程序从用户指定的文件中完成数据的读取。我们假定用户指定的文件中存储的 是坐标点,且假定这个数据文件是由print函数输出数据而产生的。我们先将程序清单列出如下:(defun C:replay ()(setq fi (getstring nEnter file to replay:)(setq f (open fi r)(read-line f)(setq p1 (read-line f)(setq p2 (read-line f)(s

21、etq p3 (read-line f)(setq p4 (read-line f)(close f)(setq p1 (read p1)(setq p2 (read p2)(setq p3 (read p3)(setq p4 (read P4)(command line p1 p2 p3 p4 c)下面我们对这一程序进行简单分析,程序中为什么要安排下面这样一条语名呢?即:(read-line f)这是因为我们已经假定数据文件是由print函数形成的,而print函数在输出数据之前,首先要输出一空行,因此,执行这一语名就可以使数据文件中的第一个空行跳过去。接下去才可以开始读取实际的数据。再分析

22、一下程序中的如下代码行:(setq p1 (read p1)(setq p2 (read p2)(setq p3 (read p3)(setq p4 (read p4)安排这样几个语名的目的是显而易见的,因为由read-line函数从文件中读取的数据所返回的是字符串 形式,事实上,存储在文件中的数据,它们总是以字符串的形式被读入。因此,在这些数据能使用之前, 要将它们从字符串形式转换成数值形式,read函数正好具有这样的功能,这就是在程序中我们要安排四个 read 函数调用的目的。4.函数名称:print一. 功能 打印一个表达式到命令行,或写一个表达式到一个已打开的文件中。二. 格式(pri

23、nt expr file-desc)三. 说明这个函数除了在打印表达式之前先换行和在打印表达式之后打印空格之外,其它和prinl相同 四 . 实例下面的程序代码将用户在图形屏幕上拾取的四个点从打印机输出,并在图形屏幕上画出由这四个点连 接而成的一个四边形。(defun C:remember2()(setq fi prn)(setq f (open fi w)(prompt Now draw 4 points of a rectangle:)(setq pl (getpoint nFirst point:)(prinl pl f)(setq p2 (getpoint nSecond point:)(prinl p2 f)(setq p3 (getpoint nThird point:)(prinl p3 f)(setq p4 (getpoint nFouth point:)(prinl p4 f)(close f)(command line p1 p3 p3 p4 c) )

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!