已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用AutoLISP对AutoCAD进行二次开发一、什么是CAD的二次开发?(为什么需要对CAD进行二次开发)我们在设计、绘图时采用AutoCAD、ProE、Solidwork、UG等设计软件,在复杂问题或特殊用途的设计中,各种软件的原有功能往往难以解决问题,例如CAD里没有直接绘制正弦曲线和抛物线等曲线的命令。因此,只是会使用各软件的基本功能是不够的,根据我们的特殊用途进行软件的用户化定制和二次开发,往往能够大大提高工作效率和技术水平。二、什么是AutoLisp?如何用其进行二次开发?AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。当前AutoCAD的二次开发工具主要有:VisualLisp(它是AutoLisp的集成开发环境)、VBA、ObjectARX和.NET API等,这里只介绍AutoLisp。下面由浅入深地介绍一下如何应用AutolLisp进行二次开发。最简单的应用是在命令行中编写和执行lisp语句,进行简单的计算、绘图、查询等操作。稍复杂些的就要把语句(代码)放到扩展名为lsp的文件中,用的时候先加载到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 (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 cyles:)(setq x 0 step 0.02)(command pline )(While (复合函数曲线绘制 ;子菜单名称,-表示生成的是子菜单抛物线与正弦曲线的叠加 CCP(load cpara_sine) (cparasine)抛物线与余弦曲线的叠加 CCP(load cpara_cos) (cparacos)-;各命令之间的横线-圆环面积与内径的关系曲线(&C) CCP(load cirque) (cirque) ;-表示子菜单结束挡板内外面积比的计算 CCP(load stotal)(load sdio)(stotal)*pop2;第二个菜单结晶器 ;第二个菜单名称齿轮绘制 CCP(load gear) (gear)*pop3;第三个菜单凝固计算 ;第三个菜单名称计算凝固系数K CCP(load solidification_coefficient) (solidification_coefficient);文件的末尾必须是一个空行(回车)第三步:加载用户自定义的菜单程序在cad绘图界面的命令行中输入命令:menuload,在弹出的对话框中浏览选择要加载的菜单文件,单击加载,这时可以看到绘图界面的菜单栏上出现了用户自定义的菜单名。如图3所示。图3 加载用户自定义的菜单文件(5)绘制对话框DCL语言第一步:打开Visual LISP编辑器操作同图2。第二步:创建用户自定义对话框文件打开Visual LISP编辑器后,在文本框中输入生成用户自定义对话框的代码,写好后将文件保存,扩展名为.dcl。例如: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; :textlabel=J/kg;:row:edit_box label=密度; key=rho; fixed_width=true; width=5; :textlabel=kg/m3;:row:column:row:edit_box label=热容c; key=c; fixed_width=true; width=5; alignment=centered; :textlabel=J/(kgK);:row:edit_box label=合金液相线温度T_L; key=T_L; fixed_width=true; width=5; alignment=centered; :textlabel=K;:row:edit_box label=凝固层表面温度T_0; key=T_0; fixed_width=true; width=5; alignment=centered; :textlabel=K; :boxed_column :row:edit_box label=凝固系数Km/s(1/2); key=S; fixed_width=true; width=5; alignment=left; :edit_box label=即mm/s(1/2); key=K; fixed_width=true; width=5; alignment=left; :row:button label=计算; key=begin; fixed_width=true; width=5; ok_only; 重要的一步:工具菜单选项文件支持文件搜索路径(要包含上述所建各类文件的路径)(6)编译及维护AutoLISP程序,形成独立应用程序在Visual LISP中,用户可以编译自己的程序,并创建一个单独的可供其他用户使用的可执行模块。Visual LISP可将AutoLISP程序文件编译成可执行的程序模块以提高程序运行效率和源代码的安全性。Visual LISP提供了一套编译器来解决这些问题。通过这个编译器,用户可以将源代码编译成可执行机器码文件,即FAS文件。源代码在编译后,可以直接在Auto CAD中加载运行,运行效率提高了,而且程序源代码是保密的,甚至于源代码中的字符串与符号也会被Visual LISP的编译器加密。此外,Visual LISP还可以将更复杂的AutoLISP应用封装进Visual LISP可执行文件(VLX)中。VLX文件中还可以包括其他的资源文件,例如VBA和DCL文件以及编译过的AutoLISP文件。常用函数及其说明1. 函数名称:vl-load-comVisual Lisp内置函数:语法:(vl-load-com) 直接调用,无需参数 功能:将 Visual LISP 扩展函数功能进行加载,以便使用其强大的扩展功能(类似c语言中的#include )。说明:(1) 加载后即可以使用,Vl- vla- vlax- vlr-等各类VisualLisp扩展函数,否则这几类函数将不可使用。(2) 如果已经加载了,则再次调用本函数,不会有任何作用2. 函数名称:open一. 功能 打开一个文件,供其它的AutoLISPI/O函数记访问。 二. 格式 (open filename mode)三. 说明 filename变元是一个字符串,它指定要打开的文件名和扩展名。mode变元是一个读/写标志。它必须是包含了单个小写字符的一个字符串。下表列出了mode变元的有效取值。Open函数的mode变元的有效取值 _ mode变元的取值 说明 _ r 打开的文件用于读操作,若filename不存在,open返回nil _ w 打开的文件用于写操作;若filename不存在,则建立一个 新文件,并打开读文件;若filename存在,它的已有数据会被覆盖。 a 打开的文件用于追加数据操作,若filename不存在,则建立 一个新文件,并打开该文件。若filename已经存在,则打开 该文件,打把并件指针移到现有数据的尾部。这样,用户 写入文件的所有数据都将追加到现有数据的后面。 在DOS平台上,某些程序和文本编辑器在写入文本文件时会在文本尾部加上一个文件结束标记(Ctrl+Z,十进制ASCII码26)。在读入文件时,当碰到Ctrl+Z标记时,DOS便返回文件结束状态,而不管其后是否还有其它数据。如果想用Open函数的a(追加)方式在其它程序所建立的后面追加数据,则必须保证这些程序没有在其文本文件尾部插入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 f);返回 nil (setq f (open logfile a) ;返回 filename变元中可以包含一个目录前缀,例如:/test/func3即为一例。在DOS平台上,file-name变元中还允许使用驱动器字符,并且还可以使用右下斜杠()来代替左下斜杠(/)作为目录的分隔符,但是应该记住的是使用右下斜杠作为目录的分隔符时必须将该右下斜杠双写(即写成),这样在字符串中才可以获得一个右下斜杠。如: (setq f (open /x/new.tst w) ;返回File # nnn) (setq f (open nosuch.fil r) ;返回nil四.实例例1.下面的程序从一个文件读取数据,并将读入的内容构成一个表后返回。 (defun readlist (filnam / tmplst x) (setq tmplst nil) (setq fn (open filna 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) (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;否则,它返回它所读取到的那个字符串。例如,假设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) (setq 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函数在输出数据之前,首先要输出一空行,因此,执行这一语名就可以使数据文件中的第一个空行跳过去。接下去才可以开始读取实际的数据。 再分析一下程序中的如下代码行: (setq p1 (read p1) (setq p2 (read p2) (setq p3 (read p3) (setq p4 (read p4)安排这样几个语名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微创三叉神经微血管减压术的术后护理路径优化
- 影像检查预约精准化管理策略
- 2025年果树代耕合作协议
- 建筑工人颈肩腰部疼痛多学科会诊
- 康复资源服务模式的多元化发展策略
- 干细胞治疗脊髓损伤的联合治疗策略
- 帕金森病非运动症状的个体化治疗策略制定
- 寺院消防安全知识培训课件
- 市场准入协同策略
- 岩斜区肿瘤手术入路选择与疗效分析
- JG/T 157-2009建筑外墙用腻子
- 2025-2030中国NTP服务行业市场现状供需分析及投资评估规划分析研究报告
- 2025年员工劳动合同薪资补充协议
- 临时教师劳务工协议书
- 期中测试卷(试题)-2024-2025学年六年级上册数学苏教版
- 在线网课知慧《学术英语写作(天津外国语大学)》单元测试考核答案
- 航空运输合同纠纷起诉状
- 产品审核和过程审核
- HG-T 20583-2020 钢制化工容器结构设计规范
- 多晶硅还原炉内壁抛光装置的设计
- 工程验收单 Microsoft Word 文档
评论
0/150
提交评论