说明书-基于AutoLisp轴类零件参数化绘图.doc

基于AutoLisp轴类零件参数化绘图含程序及2张CAD图

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前20页/共34页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:91865448    类型:共享资源    大小:5.73MB    格式:ZIP    上传时间:2020-08-10 上传人:QQ14****9609 IP属地:陕西
40
积分
关 键 词:
基于 AutoLisp 零件 参数 绘图 程序 CAD
资源描述:
基于AutoLisp轴类零件参数化绘图含程序及2张CAD图,基于,AutoLisp,零件,参数,绘图,程序,CAD
内容简介:
基于AutoLisp轴类零件参数化绘图摘 要AutoCAD是当今世界上使用最多的通用绘图软件之一,但其在某些具体的功能方面仍有其自身的不足。在机械零件的设计绘图中,一些常用图形需要经常绘制,若我们逐一绘制,显然费时费力,事倍功半,系统自带的图快复制粘贴插入等编辑功能操作又有着难以避免的局限性。随着标准件库的陆续推出,确实解决了很大一部分问题,但我个人认为这无法满足我们对实际的要求。因此,为了提高绘图速度,我们可以利用计算机软件来进行参数化绘图。AutoLisp语言内嵌于AutoCAD,实现了计算与绘图的统一,我们有必要在AutoCAD平台上,利用语言进行二次开发,建立常用图形库,在绘制时调出,避免重复性劳动及绘图不规范等问题。本论文的主要目的就是在对轴类零件结构分析的基础上,选择一种有代表性的图形结构,通过采用AutoLisp语言编程对AutoCAD进行二次开发,即可实现不同轴径、槽宽和槽深的轴剖面图的自动绘制及尺寸标注,提高了轴类零件的绘图效率。关键词:轴类零件;参数化设计;二次开发;AutoLisp语言AbstractAutoCAD is the worlds most common use of graphics software,but its specific functions in certain still its own shortcomings.Drawing in the design of mechanical parts,some common graphic needs often draw,if we draw one by one,obviosly laborious and time consuming duplication of efforts,the system map that comes with fast copy and paste into other editing operations it has inevitable limitations.With the continuous introdution of standard parts library,a large part of the problem is indeed solved,but personally think that we can not meet the actual requirements.Therefore,in order to improve drawing speed,we can use computer software to conduct parametric drawing.AutoLisp language embedded in AutoCAD, calculation and drawing to achieve a unified,we need the AutoCAD platform,use the second language development,the establishment of common graphics library,in the draw when called up,to avoid repetitive work and the problem of drawing is not standardized,etc.The main purpose of this paper is to analyze three dimensional structure based on the graphic to select a representative structure,through the use of AutoLisp language programming on the secondary of AutoCAD,you can achieve different shaft diameter,groove width and groove depth of the axial profiles of automatic drawing and dimensioning,improve the efficiency of shaft parts of the drawing.Keywords:shaft parts;parameterization design;secondary development;AutoLisp language目 录引言11 AutoCAD及其二次开发技术21.1 第一代开发工具AutoLISP21.2 第二代开发工具ADS21.3 第三代开发工具Visual LISP,ARS及基于ActiveX Automation技术的VBA等31.3.1 Visual LISP(VLISP)31.3.2 ARX31.3.3 基于ActiveX Automation技术的VBA等开发工具41.4 总结52 利用AutoLisp进行参数化绘图的方案62.1 鼠标拖动62.2 尺寸驱动62.3 总结73 对话框的设计83.1 DCL语言的语法规83.2 对话框设计中用到的控件和属性83.3 对话框的程序编译94 系统设计144.1 轴设计的总体方案144.2 主程序的设计144.2.1 对话框PDB函数144.2.2 主程序的编译164.3 程序的运行255 结论29谢 辞30参考文献31 引言 AutoLisp是集成在计算机辅助设计软件AutoCAD和MDT中,为扩展它们的功能和编写应用程序而设计的一种编程语言,它的起源可以追溯到20世纪50年代末的LISP语言。LISP最初是为了编写人工智能(AI)应用程序设计的,现在仍是很多人工智能程序的基础。LISP之所以被选为AutoCAD最初的应用程序编辑接口,是因为只有它才适合于工程中的非结构化设计过程。美国Autodesk公司在AutoCAD内部嵌入AutoLisp语言的目的是使用户充分利用AutoCAD进行二次开发,实现直接增加和修改AutoCAD命令,随意扩大图形编辑功能,建立图形库和数据库并对当前图形进行直接访问和修改,开发CAD软件包等。AutoLisp语言最典型的应用之一就是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。尺寸驱动是指通过改变实体标注的尺寸值来实现图形的自动修改,鼠标拖动即利用AutoLisp语言提供的(GRREAD)函数,让用户直接读取AutoCAD的输入设备(通常为鼠标),任选项追踪光标移动存在且为真时,调整所需的参数值而达到自动改变屏幕图形的属性。到目前为止,大多数参数化程序都是针对二维平面图编制的。另一个AutoLisp的典型应用就是驱动利用AutoCAD提供的PDB模板构成DCL(Dialog Control Language)文件创建自己的对话框。 自从AutoLisp嵌入AutoCAD之后,使仅仅作为交互式图形编辑软件的AutoCAD编辑能真正进行计算机辅助设计、绘图的CAD软件。由于LISP灵活多变、易于学习和使用,因而AutoCAD成为功能强大的工具性软件。1 AutoCAD及其二次开发技术AutoCAD是目前微机上应用最为广泛的通用的交互式计算机辅助绘图与设计软件包。AutoCAD的强大生命力在于它的通用性、多种工业标准和开放的体系结构。其通用性使得它在机械、电子、航空、轮船、建筑、服装等领域得到了极为广泛的应用。但是,不同的行业标准使得各领域在使用AutoCAD的过程中均需要根据自身特点进行定制或开发。Autodesk公司为满足广大用户的需求,自AutoCAD v2.18版至AutoCAD2000的短短十几年间,就相继推出了三代二次开发工具。可以说,AutoCAD的通用性为其二次开发提供了必要条件,而AutoCAD开放的体系结构则使其二次开发成为可能。下面对AutoCAD的三代开发工具进行浅析。1.1 第一代开发工具AutoLISP AutoLISP是1986年随AutoCAD v2.18提供的二次开发工具。它是一种人工智能语言,是嵌入AutoCAD内部的COMMON LISP的一个子集。在AutoCAD的二次开发工具中,它是唯一的一种解释型语言。使用AutoLISP可直接调用几乎所有的AutoCAD命令。 AutoLISP语言最典型的应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL(Dialog Control Language)文件创建自己的对话框。AutoLISP具有以下优点:(1)语言规则十分简单,易学易用;(2)直接针对AutoCAD,易于交互;(3)解释执行,立竿见影。AutoLISP的缺点是:(1)功能单一,综合处理能力差;(2)解释执行,程序运行速度慢;(3)缺乏很好的保护机制,源程序保密性差;(4)LISP用表来描述一切,并不能很好地反映现实世界和过程,跟人的思维方式也不一致;(5)不能直接访问硬件设备、进行二进制文件的读写。 AutoLISP的这些特点,使其仅适合于有能力的终端用户完成一些自己的开发任务。1.2 第二代开发工具ADS ADS(AutoCAD Development System)是AutoCAD R11开始支持的一种基于C语言的灵活的开发环境。ADS可直接利用用户熟悉的C编译器,将应用程序编译成可执行文件后在AutoCAD环境下运行,从而既利用了AutoCAD环境的强大功能,又利用了C语言的结构化编程、运行效率高的优势。与AutoLISP 相比,ADS优越之处在于:(1)具备错综复杂的大规模处理能力;(2)编译成机器代码后执行速度快;(3)编译时可以检查出程序设计语言的逻辑错误;(4)程序源代码的可读性好于AutoLISP。 而其不便之处在于:(1)C语言比LISP语言难于掌握和熟练应用;(2)ADS程序的隐藏错误往往导致AutoCAD,乃至操作系统的崩溃;(3)需要编译才能运行,不易见到代码的效果;(4)同样功能ADS程序源代码比AutoLISP代码长很多。1.3 第三代开发工具Visual LISP,ARS及基于ActiveX Automation技术的VBA等1.3.1 Visual LISP(VLISP) VLISP是AutoLISP的换代产品。它与AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP语言。VLISP对语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。同时,通过实现反应器函数,还扩展AutoLISP响应事件的能力。作为开发工具,VLISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以提高二次开发的效率 。另外,VLISP还提供了工具用于发布独立的应用程序。1.3.2 ARX ARX(AutoCAD Runtime eXtension)是AutoCAD R13之后推出的一个以C+语言为基础的面向对象的开发环境和应用程序接口。ARX程序本质上Windows动态连接库(DLL)程序,与AutoCAD共享地址空间,直接调用AutoCAD的核心函数,可直接访问AutoCAD数据库的核心数据结构和代码,以便能够在运行期间扩展AutoCAD固有的类及其功能,创建能够全面享受AutoCAD固有命令特权的新命令。ARX程序与AutoCAD、Windows之间均采用Windows消息传递机制直接通讯。 AutoLISP、ADS、ARX都是AutoCAD提供的内嵌式编程语言。AutoLISP和ADS都是通过内部进程通讯(IPC)来和AutoCAD通讯,它们与AutoCAD是相互分离的过程,而ARX以DLL形式与AutoCAD共享地址空间。因此,与前两者相比,其速度更快、运行更稳定、更简单。由于是在Windows及VC+编程环境里运行,所以,对开发者的编程能力要求较高。 ObjectARX应用程序以C+为基本开发语言,具有面向对象编程方式的数据可封装性、可继承性及多态性的特点,用其开发的CAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效实现以及代码可重用性强等特点,并且支持MFC基本类库,能简洁高效地实现许多复杂功能。 这里顺便提一下ADSRX。AutoCAD R14的开发环境ADSRX是ARX的一个子集,它等效于ADS。使用ADSRX,能够用C语言编写基于AutoCAD的程序,也能很方便地将ADS程序移植为ARX程序。 尽管ARX接口是四个API中最强有力的,它也具有产生严重编程错误的最大潜在性,如破坏AutoCAD数据结构等。其它编程环境要求较少的编程经验,但提供的功能和范围也较小。 可以说,AutoLISP着眼于应用程序的交互性,ADS C/C+着眼于应用程序的综合性,而ARX则着眼于应用程序的智能性。1.3.3 基于ActiveX Automation技术的VBA等开发工具 ActiveX Automation是一套微软标准,以前称为OLE Automation技术。该标准允许通过外显的对象由一个Windows应用程序控制另一个Windows应用程序,这也是面向对象编程技术的精髓所在。AutoCAD从R14开始增加了作为ActiveX Automation服务器应用程序的功能,使得许多面向对象编译语言和应用程序可以通过ActiveX与AutoCAD进行通信,并操纵AutoCAD的许多功能。 ActiveX Automation服务器应用程序是通过自身对象的属性、方法、事件外显其功能。对象是服务器应用程序的简单而抽象的代表。不管是用VB、VC、OFFICE VBA等从外部,还是用AutoCAD VBA从内部对AutoCAD进行二次开发,都是通过调用AutoCAD的对象体系结构来进行的。AutoCAD 2000 ActiveX Automation技术将AutoCAD 2000的各种功能封装在AutoCAD ActiveX对象中,供编程使用。AutoCAD 2000中提供的所有对象组成一个树形结构,最高层是Application对象,其它对象都是它的后代。为了得到一个特定的对象,必须从Application对象对其子孙进行遍历,直到找到该特定的对象。 ActiveX Automation技术的完全面向对象化编程的特点,使其开发环境具备了强大的开发能力和简单易用的优良特点,开发工具的选择也具有很大的灵活性。所以,利用ActiveX Automation技术,是极具潜力的一种开发手段。 实际上,CAD系统能否真正体现出它的存在价值,最明显的标志就是上述专业设计软件。这些软件真正起到了“设计”的作用。实践证明,在某个专业性很强的设计上,它确实能够替代工程师! 对于设计支持软件和专业设计软件,可以由一些不必很了解设计,而软件知识较多的人来写。当然,应当由现场工程师进行测评,防止写成“学院派”的设计支持软件。而对于专业设计软件,就只能由设计师直接参与来写,这样的题目范围较小,几乎是开发商永远的“盲区”。由于专业性太强,知识结构太偏,对于工科大学毕业,没有在这个行业里,做过几个真正的设计的人,很难听懂专业设计师的叙述,要求他完成这个程序,就太过分了。1.4 总结 可见,必须有一个能够被专业设计师所掌握,又能够发挥他们的长处(熟悉设计和交互操作),避开他们的短处(软件知识较少)的开发方法。这就是AutoLISP。 可以在AutoLISP程序中引用AutoCAD的几乎所有的功能,进行图形处理的自动化,尤其是较深层的应用对象数据库的操作。 在Visual LISP的协助下,从对AutoCAD进行操作的功能上讨论,仅比ARX少几个功能:自定义AutoCAD对象、多图档的深入管理等。从目前的情况看,AutoLISP是AutoCAD中几乎所有的应用程序的“总管、大管家”,而且目前只有AutoLISP 表达式,才能以添加在脚本文件、对话框程序、菜单、甚至VBA程序,更可以直接用在AutoCAD的命令行中响应几乎所有的命令。 总的来说,LISP是典型的结构化程序设计语言,AutoLISP是解释运行,源程序保密性差,巨量数据的复杂运算效率较低,文件管理功能简单,但可以在绝大多数源程序内容不变的条件下,用Visual LISP将其编译成VLX程序包或者FAS程序,这样处理之后的AutoLISP程序,将具有与ARX程序相同的高保密性能,也将具有比解释运行明显提高的运行效率。而且,AutoLISP程序设计的复杂程度和运行风险大大低与ARX,绝少在程序崩溃后连带AutoCAD崩溃。2 利用AutoLisp进行参数化绘图的方案用AutoLisp进行开发的一个典型的也是最重要的应用就是实现参数化绘图程序设计,参数化绘图包括尺寸驱动和鼠标拖动。 鼠标拖动,就是用AutoLisp语言提供的(GRREAD)函数,让用户直接读AutoCAD的输入设备(如鼠标),通过鼠标移动光标,实现鼠标拖动实体数据库与屏幕图形的同时变动。尺寸驱动,就是通过改变几何图形的形状和大小的绘图参数,即改变图形尺寸,而驱动图形的自动变化。2.1 鼠标拖动 用AutoCAD提供的AutoLISP语言进行二次开发,修改、扩充AutoCAD的功能;用AutoLISP语言提供的(GRREAD)函数,让用户直接读AutoCAD的输入设备(如鼠标),任选项追踪光标移动存在且为真时,通过鼠标移动光标,达到从鼠标那里不断返回坐标值,实现鼠标拖动实体数据库与屏幕图形的一致变化,深化AutoCAD的作图环境,使鼠标拖动图形的参数化绘图成为可能。 设计人员不需要考虑图形的原始尺寸,只需用鼠标移动屏幕上的光标,调整所需的参数值即可,同时也免去了编制大量绘图程序的工作。 用鼠标拖动来实现绘图操作非常简便直观,灵活迅速,符合用户习惯,适应当今AutoCAD的发展趋势。但用于拖动的原始草图一般是一些简单实体(由line命令绘制的角、梯形、矩形和多边形)。若草图是用pline命令绘制的复杂实体,需要对程序另外加入entnext函数等。2.2 尺寸驱动参数化绘图在现代机械CAD中应用很广,特别是对于定型的机械设计产品设计,需要形成系列,以便针对用户的生产特点提供不同大小、功率、规格的产品。这就要求该产品的CAD系统具有参数化的设计功能,使得产品的设计图可以方便地随着某些结构尺寸的修改而修改并自动地重新绘出所要求的图纸,实现尺寸驱动图形的自动变化。参数化设计的设计对象(即机械图)的结构形状一般比较定型,其尺寸关系可以用一组参数来确定,从而确定所要画的图纸。在AutoCAD R12以上版本中可以设计对话框来输入参数,若要改变图形的尺寸参数,可以使用对话框重新输入一组数据重画即可。对于实现了标准化、系列化的,且曲线、曲面较多,形状复杂等的零件,比较适合采用AutoLISP编程,用尺寸驱动来实现自动绘制。2.3 总结由于鼠标拖动过程过于繁琐,不易操作。故本次设计采用尺寸驱动参数化绘图。通过对对话框的设计,用户只要在对话框中改变参数值,就可得出不同轴径、槽宽和槽深的轴的自动绘制和尺寸标注。3 对话框的设计AutoCAD有自己的一套对话框设计语言,称为对话框控制语言(DCL)。该语言以文件形式定义对话框,对话框中的各种元素(如按钮和编辑框)又称为控件,空间的尺寸和功能由空间的属性控制。使用对话框,分为二步来完成:第一步对话框的界面设计,即用DCL语言定义一个对话框界面;第二步使用AutoLISP程序来驱动用DCL语言定义的对话框,并完成对话框中各控件(如按钮)对应的操作。3.1 DCL语言的语法规在提出编写的DCL文件时,先简单地介绍一下DCL的语言语法规。(1)DCL语言采用类似C语言的形式来描述,每个空件的定义由一对匹配的“”大括号包容,其内容说明属性,每个属性赋值语句和调用标准控件语句都以“;”分隔。 (2)控件的定义和属性用小写字母书写,用户只有在给控件的属性(如label)赋值时才可以使用大写字母。 (3)DCL文件应采用缩格形式以便清楚地表达语句的从属关系。例如,在列的声明中,列中的按钮控件的声明应该缩进几格,而且这些同等位置的按钮声明应该对折。(4)构件的名字可包括字母、数字和若干个下划线,但要以字母开头。(5)属性用等号来赋值,分号结束。(6)空行被忽略。 (7)文件中可以用“/”表示从“/”后直到行末尾部分为注释;第二种注释以/*开始,以*/结束,/*和*/可以处在不同的行,也可以处在同一行中间,这样方便用户用以大段的文档说明和行中间的消息说明。(8)另外指出,在用AutoLISP驱动时,AutoCAD会对其编译检查,如果用户定义的DCL文件,存在严重错误,AutoCAD会在当前工作目录下生成ACAD.DCE文本文件,该文件给出出错说明。3.2 对话框设计中用到的控件和属性(1)关键字和值属性key(关键字)是用双引号括起来的字符串(无缺省值)。它为特定的控件给出了一个ASCII名字。应用程序利用这个名字来引用相应的控件。在一个特定的对话框内部,每个key取值必须是唯一的。Key的值对应用是不可见的,其名称可任意指定(但在对话框中必须是唯一的)。同理,key属性也不需要用多种语言转换到应用程序中。value(值)是用双引号括起来的字符串(也无缺省值)。它规定了控件的初值。Value的含义随控件的类型不同而变化。在运行期间,控件值可以由用户输入或调用(set_tile)函数来改变。打开对话框时(即在调用new_dialog函数之前),不必考虑控件值属性。只是在对话框显示出来后,new_dialog才使用这些值来初始化对话框中的每一个控件。这意味着value属性不会影响控件在对话框中的大小和定位。(2)编辑框及其专用属性编辑框(edit_box)是用户能够输入和编辑单行文本的控件窗口。而且可以在编辑框的左侧显示任意的label(标签)。如果输入的文本比编辑框更长,文本则可作水平滚动。1 label用双引号括起来的字符串(缺省值为空串:()。该文本显示在框的左边。如果给定了label值,它将按左对齐显示在edit_box控件中。2 edit_width一个整数或实数值,并用字符宽度单位表示。编辑框的输入部分的宽度就是edit_box类型控件的实际边框部分的宽度。如果没有给定edit_width值或将它置为0,那么控件的宽度是不确定的,编辑框将扩展到占满可用空间为止;如果给定edit_width非零值,则编辑框在该控件所占据的空间内是右对齐的。出于布局考虑,伸展控件的尺寸是有必要的。PDB工具能在label与框的编辑部分插入适当空白。(3) 加框列 加框列(boxed_column)是指一种周围画边界线的列。对话框的布局就像boxed_column(加框列)描述的那样。如果加框列具有label,则label会出现在边框的上方。若不要出现label,用空白( )或空(null)或就只显示边框。(4)加框行加框行(boxed_column)是指一种周围画有边界线的行。如果加框行具有label,则label会出现在边框的上方,若不要出现label,用空白( )或空(null)或就只显示边框。3.3 对话框的程序编译图3-1 对话框图示对话框如图3-1所示,其编译的程序如下:myshaft:dialog label=轴的参数化设计; :boxed_columnlabel=轴的参数; :boxed_row :edit_box label=左侧轴直径d1(mm); key=d1; edit_width=8; :edit_box label=左侧轴长度a1(mm); key=a1; edit_width=8; :edit_box label=倒角距离c(mm); key=c; edit_width=8; :boxed_row :edit_box label=第二段轴直径d2(mm); key=d2; edit_width=14; :edit_box label=第二段轴长度a2(mm); key=a2; edit_width=14; :boxed_row :edit_box label=键槽宽b(mm); key=b; edit_width=10; :edit_box label=键槽深t(mm); key=t; edit_width=10; :edit_box label=键槽长L(mm); key=L; edit_width=10; :boxed_row :edit_box label=第三段轴直径d3(mm); key=d3; edit_width=14; :edit_box label=第三段轴长度a3(mm); key=a3; edit_width=14; :boxed_row :edit_box label=退刀槽直径d7(mm); key=d7; edit_width=16; :edit_box label=退刀槽长度a7(mm); key=a7; edit_width=16; :boxed_row :edit_box label=第四段轴直径d4(mm); key=d4; edit_width=14; :edit_box label=第四段轴长度a4(mm); key=a4; edit_width=14; :boxed_row :edit_box label=第五段轴直径d5(mm); key=d5; edit_width=14; :edit_box label=第五段轴长度a5(mm); key=a5; edit_width=14; :boxed_row :edit_box label=右侧轴直径d6(mm); key=d6; edit_width=16; :edit_box label=右侧轴长度a6(mm); key=a6; edit_width=16; ok_cancel; 4 系统设计4.1 轴设计的总体方案开始初始化变量,读入数据文件输入轴的参数N输入完成进入绘图程序结束 图4-1程序流程图整个轴的参数化绘图流程如图4-1所示。为了实现轴类零件的参数化绘图设计,采用了建立图元库的方法。图元库是将具有相同结构的绘图元素,组合到一起形成绘图元素集合,在绘制类似结构特征的零件时,便可从图元库调用某一图元,输入图元的特征尺寸,在屏幕上自动绘出此图元的图形。通过对话框的设计,利用对话框对轴的各段直径及长度尺寸进行输入和修改,从而实现不同轴径、槽宽和槽深的轴剖面图的自动绘制及尺寸标注,进而提高轴类零件的绘图效率。4.2 主程序的设计4.2.1 对话框PDB函数(1)对话框打开和关闭函数1 (load_dialog delfile)本函数将一个DCL文件加载到内存,一个应用程序通过多次调用本函数而装入多个文件,本函数按照AutoCAD库搜索路径来搜索指定的DCL文件。defile变量指定要装入的DCL文件的一个字符串,若未指定扩展名,则假定它的扩展名是.DCL。若本函数调用成功,则返回一个正整数值(假设存入变量在index_value中);否则,返回一个负整数,这个index_value在随后调用new_dialog和unload_dialog时可用作被装入的DCL文件的句柄使用。2 (unload_dialog index_value)本函数卸载与文件句柄index_value相联系的那个DCL文件(这个句柄是在先前调用nex_dialog函数时取得的)。本函数总是返回nil。本函数与load_dialog函数互为反函数。3 (new_dialog dlgname index_value actionscreen_pt)本函数开始一个新的对话框,并显示该对话框,还能指定一个隐含动作。如果new_dialog调用成功,它返回T;否则,它返回nil。在应用程序中,在调用start_dialog函数之前,必须先调用new_dialog。所有对话框的初始化工作,如:设置控件值、生成图像、生成列表框的表以及将各个动作与特定的控件联系起来(用action_tile函数完成)等等,都必须发生在调用new_dialog函数之后,同时也必须发生在调用start_dialog函数之前。在应用程序中应该总是检查由new_dialog函数返回的状态。当new_dialog函数调用失败时,调用start_dialog函数将有可能导致无法预料的后果。4 (start_dialog)本函数显示一个对话框,并开始接受用户的输入。在调用本函数之前,必须调用new_dialog函数,首先将对话框进行初始化。对话框一直保持激活状态,直到一个动作表达式或回调函数调用done_dialog的函数。通常,done_dialog函数与关键字为“accept”的那个控件相联系(典型情况下是OK按钮),也可以与关键字为“cancel”的那个控件相联系(典型情况下是cancel按钮)。调用start_dialog函数不带变量。它返回一个传递函数给done_dialog函数的状态代码。如果用户按下了OK按钮,start_dialog函数返回隐含值1,如果用户按下了cancel按钮,start_dialog函数返回值0,而如果所有对话框都被term_dialog函数终止,那么start_dialog函数就返回-1。但是,如果done_dialog函数传递了一个大于1的整型状态代码,start_dialog函数就会将这个值返回,它的含义由应用程序决定。5 (done_dialogstatus)本函数终止一个对话框。必须从一个动作表达式或一个回调函数中调用done_dialog函数。如果为关键字“accept”或“cancel”的按钮(通常是OK和cancel按钮)提供了一个回调函数,那么,该回调函数必须显示地调用done_dialog函数。如果不这样做,用户就会被困在这个对话框中,如果不为这些按钮提供一个显示的回调函数,而使用标准的退出按钮,AutoCAD将自动处理他们。此外,为“accept”按钮提供的一个显式的回调函数必须使其在调用done_dialog时将变量status指定为1(或由应用程序定义的其他值);否则,start_dialog函数会返回隐含值0,而0意味着用户取消了该对话框。(2) 控件和属性处理函数1 (action_tile key action_expression)本函数为某一控件指定一个动作表达式。当用户在对话框中选择了这个控件时,就会对这个动作表达式进行求值。2 (get_tile key)本函数检索一个对话框控件的当前运行时的值。变量key是指定控件的一个字符串,它区分大小写,并以字符串的形式返回控件的值。本函数被更多地用于回调函数之中,而不是用于构件的初始化。此函数还可用于查看未被选中的控件的值。例如对对话框进行出错检查并检查其设定值的一致性,这时只知道被选中的控件的值(在变量value中)是不够的,还要知道别的控件的值。3 (set_tile key value)本函数为一个对话框控件设置值,key变量是指定控件的一个字符串,而value则是指定新值的一个字符串变量名(控件的初始值由value属性设置)。4.2.2 主程序的编译程序如下:;主程序(defun C:MYSHAFT () (setq id_load (load_dialog myshaft.dcl) (if (= id_load 0) (alert n加载DCL文件出错!) (progn (setq id_disp (new_dialog myshaft id_load) (if (not id_disp) (alert n显示对话框时出错!) (progn (set_tile d1 50) ;设置初始值 (set_tile a1 35) (set_tile c 2) (set_tile d2 54) (set_tile a2 60) (set_tile b 16) (set_tile t 6) (set_tile L 45) (set_tile d3 60) (set_tile a3 30) (set_tile d7 50) (set_tile a7 5) (set_tile d4 56) (set_tile a4 35) (set_tile d5 50) (set_tile a5 25) (set_tile d6 40) (set_tile a6 55) (action_tile accept (getdata) (done_dialog 1);用getdata函数获取用户输入数据 (action_tile cancel (done_dialog 0) (setq id_start (start_dialog) ;显示对话框 );end progn inner and if display ) );end progn outter and if load ) (if (= id_start 1) (Drawshaft) ) (unload_dialog id_load) (princ);end defun return parameters;获取数据函数(defun getdata () (setq dd1 (atoi (get_tile d1);获取左侧轴直径数据 (setq aa1 (atoi (get_tile a1);获取左侧轴长度数据 (setq cc (atoi (get_tile c);获取倒角距离数据 (setq dd2 (atoi (get_tile d2);获取第二段轴直径数据 (setq aa2 (atoi (get_tile a2);获取第二段轴长度数据 (setq bb (atoi (get_tile b);获取键槽宽 (setq tt (atoi (get_tile t);获取键槽深 (setq LL (atoi (get_tile L);获取键槽长 (setq dd3 (atoi (get_tile d3);获取第三段轴直径数据 (setq aa3 (atoi (get_tile a3);获取第三段轴长度数据 (setq dd7 (atoi (get_tile d7);获取退刀槽直径数据 (setq aa7 (atoi (get_tile a7);获取退刀槽长度数据 (setq dd4 (atoi (get_tile d4);获取第四段轴直径数据 (setq aa4 (atoi (get_tile a4);获取第四段轴长度数据 (setq dd5 (atoi (get_tile d5);获取第五段轴直径数据 (setq aa5 (atoi (get_tile a5);获取第五段轴长度数据 (setq dd6 (atoi (get_tile d6);获取左侧轴直径数据 (setq aa6 (atoi (get_tile a6);获取左侧轴长度数据);绘轴函数(defun Drawshaft () (command layer m 0 ON 0 L continuous 0 ) ;打开零层 (setq osold (getvar OSMODE) (setvar OSMODE 0) (setqP0 (getpoint n输入基点:)P0 (list (car p0) (cadr p0)p1 (list (car p0) (+ (cadr p0) (- (/ dd1 2.0) cc)p2 (list (+ (car p1) cc) (+ (cadr p1) cc)p3 (list (- (+ (car p2) aa1) cc) (cadr p2)p4 (list (car p3) (/ dd2 2.0)p5 (list (+ (car p4) aa2) (cadr p4)p6 (list (car p5) (/ dd3 2.0)p7 (list (+ (car p6) aa3) (cadr p6)p8 (list (car p7) (/ dd7 2.0)p9 (list (+ (car p8) aa7) (cadr p8)p10 (list (car p9) (/ dd4 2.0)p11 (list (+ (car p10) aa4) (cadr p10)p12 (list (car p11) (/ dd5 2.0)p13 (list (+ (car p12) aa5) (cadr p12)p14 (list (car p13) (/ dd6 2.0)p15 (list (+ (car p14) aa6) (cadr p14)p16 (list (+ (car p15) cc) (- (cadr p15) cc)p17 (list (car p16) (cadr p0) ) (command pline p0 w 0.3 p1 p2 p3 p4 p5p6 p7 p8 p9 p10p11 p12 p13 p14 p15 p16 p17 );绘轴的轮廓 (command layer m 2 ON2 cred 2 L center 2 );绘制中心线 (setqp18 (list (- (car p0) 5.0) (cadr p0)p19 (list (+ (car p17) 5.0) (cadr p0) ) (command line p18 p19 ) (setq ss (ssget X (list (cons 8 0) ;选取零层上的实体 (command mirror SS p18 p19 );并关于中心线进行镜像对称 (command layer m 0 ON 0 L continuous 0 ) ;打开零层 (setqp2p (list (car p2) (- (cadr p2) dd1)p4p (list (car p4) (- (cadr p4) dd2)p6p (list (car p6) (- (cadr p6) dd3)p7p (list (car p7) (- (cadr p7) dd3)p10p (list (car p10) (- (cadr p10) dd4)p11p (list (car p11) (- (cadr p11) dd4)p13p (list (car p13) (- (cadr p13) dd5)p15p (list (car p15) (- (cadr p15) dd6) ) (command pline p2w 0.3 p2p pline p4w 0.3 p4p pline p6w 0.3 p6p pline p7w 0.3 p7p pline p10w 0.3 p10p pline p11w 0.3 p11p pline p13w 0.3 p13p pline p15w 0.3 p15p ) (setqp20 (list (+ (car p3) 5.0 (/ bb 2.0) (+ (cadr p0) (/ bb 2.0)p21 (list (- (+ (car p20) LL) bb) (cadr p20)p22 (list (car p21) (- (cadr p21) bb)p23 (list (car p20) (cadr p22)p24 (list (+ (car p14) 5.0 (/ bb 2.0) (cadr p20)p25 (list (- (+ (car p24) LL) bb) (cadr p24)p26 (list (car p25) (cadr p22)p27 (list (car p24) (cadr p26)p28 (list (car p20) (cadr p0)p29 (list (car p21) (cadr p0)p30 (list (car p24) (cadr p0)p31 (list (car p25) (cadr p0)p32 (list (+ (car p3) 5.0) (cadr p0)p33 (list (+ (car p21) (/ bb 2.0) (cadr p32)p34 (list (+ (car p13) 5.0) (cadr p0)p35 (list (+ (car p31) (/ bb 2.0) (cadr p34) ) (command pline p20w 0.3 p21 arc p21 p33 p22 pline p22 w 0.3 p23arc p23 p32 p20 ) (command pline p24w 0.3 p25 arc p25 p35 p26 pline p26 w 0.3 p27arc p27 p34 p24 ) (command layer m 2 ON2 cred 2 L center 2 );绘制中心线 (setqp20p (list (car p20) (+ (cadr p20) 3.0)p23p (list (car p23) (- (cadr p23) 3.0)p21p (list (car p21) (+ (cadr p21) 3.0)p22p (list (car p22) (- (cadr p22) 3.0)p24p (list (car p24) (+ (cadr p24) 3.0)p27p (list (car p27) (- (cadr p27) 3.0)p25p (list (car p25) (+ (cadr p25) 3.0)p26p (list (car p26) (- (cadr p26) 3.0)p36 (list (+ (car p19) 60.0) (cadr p0)p37 (list (+ (car p36) dd6 10.0) (cadr p36)p38 (list (+ (car p36) (/ dd6 2.0) 5.0) (+ (cadr p37) (/ dd6 2.0) 5.0) )p39 (list (car p38) (- (cadr p38) dd6 10.0) ) (command line p20p p23p line p21p p22p line p24p p27p line p25p p26p line p36 p37 line p38 p39 ) (command layer m 0 ON 0 L continuous 0 ) ;打开零层 (setqp40 (list (+ (car p36) 5.0 (/ dd6 2.0) (sqrt (- (* (/ dd6 2.0) (/ dd6 2.0) (* (/ bb 2.0) (/ bb 2.0) ) ) (+ (cadr p0) (/ bb 2.0) )p41 (list (car p40) (- (cadr p40) bb)p42 (list (- (car p41) tt) (cadr p41)p43 (list (car p42) (cadr p40)p44 (list (+ (car p36) 5.0) (cadr p0)p45 (list (+ (car p44) dd6) (cadr p0)p46 (list (car p38) (+ (cadr p0) (/ dd6 2.0)p47 (list (car p38) (cadr p0) ) (command pline p40 arc CE p47 p41 L p42 p43 C);标注剖面线 (command hatch ansi31 1 p46 p44 );尺寸标注 (setqgt1 (list (- (car p0) 10.0) (cadr p0)gt2 (list (- (car p0) 15.0) (cadr gt1)gt3 (list (- (car p0) 20.0) (cadr gt2)gt4 (list (- (car p0) 25.0) (cadr gt3)gt5 (list (+ (car p17) 10.0) (cadr gt4)gt6 (list (+ (car p17) 15.0) (cadr gt5)gt7 (list (+ (car p17) 20.0) (cadr gt6)gt8 (list (+ (car p37) 5.0) (cadr gt7)p8p (list (car p8) (- (cadr p8) dd7)gs1 (list (car p1) (- (cadr p6p) 10.0)gs2 (list (car p3) (- (cadr p6p) 10.0)gs3 (list (car p6) (- (cadr p6p) 10.0)gs4 (list (car p7) (- (cadr p6p) 10.0)gs5 (list (car p10) (- (cadr p6p) 10.0)gs6 (list (car p11) (- (cadr p6p) 10.0)gs7 (list (car p7) (- (cadr p6p) 20.0)gs8 (list (car p39) (- (cadr p6p) 10.0)p1p (list (car p1) (- (cadr p1) dd1)p16p (list (car p16) (- (cadr p16) dd6)zc (+ aa1 aa2 aa3 aa4 aa5 aa6 aa7)at (- dd6 tt)gg (list (car p2) (+ (cadr p2) 15.0) ) (command dim dimasz 2 exit) (command dim ver p2 p2p gt1 (strcat %c (rtos dd1 2 0) ver p8 p8p gt2 (strcat %c (rtos dd7 2 0) ver p4 p4p gt3 (strcat %c (rtos dd2 2 0) ver p6 p6p gt4 (strcat %c (rtos dd3 2 0) ver p15 p15p gt5 (strcat %c (rtos dd6 2 0) ver p13 p13p gt6 (strcat %c (rtos dd5 2 0) ver p11 p11p gt7 (strcat %c (rtos dd4 2 0) ver p40 p41 gt8 (strcat (rtos bb 2 0) hor p1p p4p gs1 (strcat (rtos aa1 2 0) hor p4p p6p gs2 (strcat (rtos aa2 2 0) hor p6p p7p gs3 (strcat (rtos aa3 2 0) hor p10p p11p gs4 (strcat (rtos aa4 2 0) hor p11p p13p gs5 (strcat (rtos aa5 2 0) hor p13p p16p gs6 (strcat (rtos aa6 2 0) hor p1p p16p gs7 (strcat (rtos zc 2 0) hor p44 p42 gs8 (strcat (rtos at 2 0) exit ) (command dim hor p1 p2 gg (strcat (rtos cc 2 0) *45%d) exit )4.3 程序的运行 (1)搜索路径的添加:在“工具选项”里添加搜索路径,如图4-4所示。如果缺省该步骤,则会导致无法加载对话框。图4-3 文件搜索路径的添加 (2)加载程序:“工具加载应用程序(或AutoLISP加载)”,如图4-4所示。图4-4 程序的加载 (3)运行。参数设置如图4-5所示。运行结果如图4-6和4-7所示。其中,基点坐标设为(0
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于AutoLisp轴类零件参数化绘图含程序及2张CAD图
链接地址:https://www.renrendoc.com/paper/91865448.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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