autolisp凸轮设计与仿真_第1页
autolisp凸轮设计与仿真_第2页
autolisp凸轮设计与仿真_第3页
autolisp凸轮设计与仿真_第4页
autolisp凸轮设计与仿真_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、对话框的设计AutoCAD为用户提供的可编程对话框技术是由专用的对话框描述语言(DCL)和AutoLISP驱动函数两部分内容组成的。 对话框由框架和包含在框架内的控件组成。一个对话框由位于其中的按钮(单选框、复选框、图像、动作)、文本编辑框、弹出式列表框和滑动条等控件组成。 1. 控件的定义方式name : item1 : item2 : item3 attribute1=value1; attribute2=value2; ; 一般必须有key属性,驱动时用。对话框例子:pianzhigunzi_dlg:dialog label=解析法设计偏置直动滚子推杆盘形凸轮; :column la

2、bel=绘图类型; :image_button key=pianzhitulun;width=30;height=18;color=-2;/背景为黑色 :edit_box label=行程h:; key=key_h; width=20; :edit_box label=基圆半径r:; key=key_r; width=20; :edit_box label=偏距e:; key=key_e; width=20; :edit_box label=滚子半径rc:; key=key_rc; width=20; :edit_box label=推程运动角alf1:; key=key_alf1; widt

3、h=20; :edit_box label=近休止角alf2:; key=key_alf2; width=20; :edit_box label=回程运动角alf3:; key=key_alf3; width=20; :edit_box label=远休止角alf4:; key=key_alf4; width=20; :button label=绘制理论轮廓; key=draw_lilun; :button label=绘制工作轮廓; key=draw_gongzuo; :button label=绘制推杆运动规律; key=draw_yundong; ok_cancel;二、对话框驱动(lo

4、ad_dialog dclfile)(new_dialog dlgname dcl_id)(start_dialog)(unload_dialog dcl_id)装入一个DCL文件至内存。成功: 正整数 否则:负整数 开始一个新的对话框,并显示该对话框显示一个对话框,并开始接受用户的输入。所有对话框的初始化工作,如:设置控件值、生成图像、生成列表框的表以及将各个动作与特定的控件联系起来(用action_tile函数完成)等等,都必须发生在调用new_dialog函数之后,同时也必须发生在调用Start_dialog函数之前。卸装一个DCL文件(defun c:tulun( ) (setq id

5、 (load_dialog e:wlyautolisp xuexiautolisp studytulun1_dialog) /装载对话框文件 (if ( id 0) (exit) /如文件不存在,退出 (if (not (new_dialog pianzhigunzi_dlg id) (exit) /对话框文件中名称不存在,退出 (f_img pianzhitulun e:wlyautolisp xuexiautolisp studytulun1) (set_tile key_h 50) (set_tile key_r 50) (set_tile key_e 20) (set_tile key

6、_rc 10) (set_tile key_alf1 120) (set_tile key_alf2 30) (set_tile key_alf3 60) (set_tile key_alf4 150) (action_tile draw_lilun (getdata)(done_dialog 2) (action_tile draw_gongzuo (getdata)(done_dialog 3) (action_tile draw_yundong (getdata)(done_dialog 4) (action_tile accept (done_dialog 1) (action_til

7、e cancel (done_dialog -1) (setq value (start_dialog) )/显示对话框,将得到关闭对话框是的状态值 (if (= value 2) (draw_lilun) (if (= value 3) (draw_gongzuo) (if (= value 4) (draw_yundong) (princ) (unload_dialog id) /卸载对话框 )(defun f_img( key sld);定义初始化图像按钮函数 装幻灯片函数 (start_image key) (slide_image 0 0 (dimx_tile key) (dimy_

8、tile key) sld) (end_image) )函数定义(defun c:My-circle() (setq pt (list 100 100) ; 得到圆心坐标(setq r 50) ; 得到半径(command “circle” pt r) ; 绘制圆 )规则1:以括号组成表达式,左右括号“(”&“)”一定要配对。 表达式是AutoLISP的基本语句,所有表达式都具有以下形式: (函数 参数表) 即由一个函数名和调用这个函数所需的参数表组成。参数表中的参数也可以是表达式,即AutoLISP的表达式可以嵌套。规则2:注释以分号“;”开头,它可以单独位于一行,也可以位于某一程序语句的后

9、面。 编写AutoLISP程序时,应添加必要的注释,以说明程序的功能、 规则3:“前缀表示法”。 AutoLISP语言的结构与常用高级结构有所区别。像BASIC、PASCAL、C等语言均采用“中缀表示法”。当给变量a赋值12.0时,通常为下面的形式:a=12.0; 即赋值运算符“=”位于中间。 AutoLISP则采用,即把运算符放在参数表的第一个元素的位置,后面为其参数。 例如,通常用到的表达式X=(A+B)C在AutoLISP中表示为:(setq X (* (+ A B) C)规则4:运算顺序“由内而外、由左而右”。 在AutoLISP表达式中,函数参数表对表达式的执行过程是从最内层表开始逐

10、步到最外层表,每个表达式都会返回一个值,该值可以被变量或外层表达式引用。如果没被引用,返回值会显示在AutoCAD的命令窗口。(setq x (* h (+ a (* r (cos A)) x=h(a+rcosA)条件and 循环指令条件函数 (if) 根据条件计算表达式。如果不为nil, 计算,并返回计算结果;否则计算 ,返回计算结果。(cond ( ) ( ) (T ) 从上往下判断,一旦发现条件满足,计算与 该条件对应的表达式并返回计算结果,不再 继续判断条件。 循环函数 (while ) 如果成立,执行各, 执行后再判断是否成立。如果成立, 继续执行各,如此循环反复,直 到条件不成立,

11、并返回最后得到的计算结 果。 (repeat ) 重复计算,计算次数由 确定,返回最后的计算结果。 赋值函数赋值函数是AutoLISP程序中最常用的函数之一。较为常用的赋值函数是setq,其使用格式为:(setq 符号2 表达式2) 功能:依次将各表达式的值赋给对应的符号。 例(setq x 30 y 20 r 50) List五 对话框编程函数: 1,对话框打开和关闭函数done_dialog一. 功能 终止一个对话框。二. 格式 (done_dialog status)三. 说明 你必须从一个动作表达式或一个回调函数中调用done_dialog函数(参见action_tile函数的介绍)。

12、 如果你指定了任选变元status它必须是一个正整数(2-32767之间)这个正整数将由Start_dialog函数返回而代替拾取OK按钮返回1或拾取Cancel按钮返回0。任何大于1的Status值的具体含义取决于你所编制的应用程序。 Done_dialog函数返回一个2D点表该点表示当你退出对话框时该对话框的位置坐标(XY)。该返回点取自对话框上的哪一个点作为参考点是由平台决定的参考点的坐标单位同样也是由平台决定的。通常情况下参考点是对话框的左上角。你可以将这个点传给随后调用的new_dialog函数在重新打开对话框时将对话框定位在用户指定的位置上。 如果你为关键字accept或cnace

13、l的(通常OK和Cancel按钮)提供了一个回调函数那么该回调函数必须显示地调用done_dialog函数如果不这样做用户就会被困在这个对话框中。如果你不为这些按钮提供一个显式地回调函数而使用标准的退出按钮AutoCAD将自动处理它们。此外为accept按钮提供的一个显式的回调函数必须使其在调用done_dialog时将变元status指定为1(或由应用程序定义的其它值);否则Start_dialog函数会返回隐含值0而0意味着用户取消了该对话框。四. 实例 一个对话框通常均具有OK和Cancel按钮。用户选中这两个按钮的话均需调用done_dialog对话框。确定(OK)和取消(Cancel

14、)按钮的回调函数通常可以用两种方法之一进行编制下面给出代码实例: 第一种形式: (action_tile accept (set-varabls)(done_dialog 1) (action_tile cancel done_dialog 0) 第二种形式: (action_tile accept done_dialog 1) (action_tile cancel done_dialog 0) (setq result (start_dialog) (if(=1 result) (set-variables) ) 上述代码中的set-variables函数的功能是在退出对话框之前将需要保存

15、的局部变量值存储在全局变量中。 load_dialog一. 功能 装入一个DCL文件至内存。 二. 格式(load_dialog dclfile)三.说明dclfile变元是指定要装入的DCL文件的一个字符串。如果dclfile变元中没有指定文件的扩展名,则假定它的扩展名是.dcl。如果本函数调用成功,它返回一个正整数值(假设存入变量dcl-id中);如果它不能打开指定的文件,它就返回一个负整数。四.实例 (if ( (setq index_value (load_dialog sample.dcl) 0) (progn (.) (.) (.) ) (prompt Unable to open

16、 dialog box) ) new_dialog一. 功能 开始一个新的对话框,并显示该对话框,还能指定一个隐含动作。 二. 格式 (new_dialog dlgname dcl_id action screen_pt)三. 说明digname变元是指定对话框的一个字符串,而dcl_id变元用来识别一个对话框(它是在调用load_dialog函数时获得的,相当于一个对话框的名柄)。如果new_dialog调用成功,它返回T;否则,它返回nil。在您的应用程序中,在调用Start_dialog函数之前,必须先调用new_dialog。所有对话框的初始化工作,如:设置控件值、生成图像、生成列表框

17、的表以及将各个动作与特定的控件联系起来(用action_tile函数完成)等等,都必须发生在调用new_dialog函数之后,同时也必须发生在调用Start_dialog函数之前。在应用程序中应该总是检查由new_dialog函数返回的状态。当new_dialog函数调用失败时,调用Start_dialog函数将有可能导致无法预料的后果产生。 start_dialog一. 功能 显示一个对话框,并开始接受用户的输入。 二. 格式 (start_dialog)三. 说明 在调用本函数之前,你必须通过调用new_dialog函数,首先将对话框进行初始化。对话框一直保持激活状态,直到一个动作表达式或

18、回调函数调用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的整型状

19、态代码,Start_dialog函数就会将这个值返回,它的含义由应用程序决定。 unload_dialog一. 功能 卸装一个DCL文件。 二. 格式 (unload_dialog dcl_id)三. 说明 unload_dialog函数总是返加nil。2 控件和属性处理函数 action_tile一. 功能 为某一控件指定一个动作表达式。当用户在对话本框中选择了这个控件时,就会对这个动作表达式进行求值。二. 格式 (action_tile key action_expression)三. 说明 变元key和action_expression都是字符串。变元key是触发一个动作的控件名(这个控

20、件名是由该控件的key属性指定的)。key变元是大小写敏感的。当该控件被选中时,就会对action_expression(动作表达式)进行求值。四. 实例 下面给出一个action_tile函数的应用实例。(defun example_funciton() ;processing code. . . . ) (action_tile example_key (example_function) mode_tile一. 功能 设置一个对话框控件的状态。 二. 格式 (mode_tile key mode)三. 说明key变元是指定某个控件的一个字符串(即关键字字符串),它对大小写是敏感的。mod

21、e变元是一个整型数。mode变元的取值及其含义列出在下表中。mode变元的取值及含义mode的取值含义0 使该控件成为启用态_ 1 使该控件成为禁用态 _ 2 聚焦于该控件 _ 3 选择编辑框的内容 _ 4 图像高亮度显示的触发开关 _ set_tile 一. 功能 为一个对话框控件设置值。 二. 格式 (set_tile key value)三. 说明 key变元是指定控件的一个字符串,而value则是指定新值的一个字符串变量名(控件的初始值是由value属性设置的。 set_tile函数设置和修改控件值的效果,它与控件的类型有关。四. 实例 下面的程序代码改变关键字为Text_tile_k

22、ey的文本控件的值,当文本控件的值被修改之后,显示在该控件上的文字也做相应的改变。 (setq new_text Look for change) ;初始化一个字符串变量 (setq_tile Text_tile_key new_text) ;赋新值3,图象控件处理函数 3.1 dimx_tile和dimy_tile一. 功能 以对话框单位返回一个控件的尺寸。二. 格式 (dimx_tile key) (dimy_tile key)三. 说明 dimx_tile函数返回控件的宽度,而dimy_tile函数返回控件的高度。在这两个函数中,变元key都是指定控件的一个字符串。key这变元是大小写敏

23、感的。 四. 实例 例1.在指定的控件image_key即关键字上,绘制幻灯片库SLIB中名为test.sld的幻灯片。 (start_image image_key) (setq max_x (dimx_tile image _key) (setq max_y (dimy_tile image_key) (fill_image 0 0 max_x max_y SLIB(test) (end_image) 例2.在指定的控件image_key(即关键字)上,绘制两个黄色的向量(颜色码为2), 构成形状为X的图案。 (start_image image_key) (setq max_X (dim

24、x_tile image_tile) (setq max_Y (dimx_tile image_tile) ; ; ; 从左上角至右下角绘制一矢量 (vector_image 0 0 max_x max_y 2) ; ; ; 从右上角至左下角绘制一矢量 (vector_image max_x 0 0 max_y 2) (end_image)3.2 end_image一. 功能 约束现行激活对话框图像的生成。二格式 (end_image)三说明 本函数是Start_image函数的配套函数。它关闭由Start_image函数所打开的图像控件。在Start_image函数调用之后一定要调用end_

25、image函数。四实例 下面这缎代码在关键字为Image_key的控件上绘制一个蓝色的矩形。 (start_image image_key) (start max_x (dimx_tile image_key) (start max_y (dimy_tile image_key) (file_image 0 0 max_x max_y 5) (end_image) )3.3. fill_image一. 功能 在现行激活框的图像控件上划一个填充矩形。二. 格式 (fill_image x1 y1 wid hgt color)三. 说明 fill_image函数必须用在start_image和en

26、d_image两个函数调用之间。Color参数可以是AutoCAD的一个颜色代码也可以是取自下表中的一个逻辑颜色代码之一。 颜色属性所用的符号的名称表 _颜色代码 ADI助记符 说明_-2 BGLCOLOR AutoCAD图形屏幕的现行背景 _-15 DBGLCOLOR 现行对话框背景颜色-16 DFGCOLOR 现行对话框前景颜色(文本)_-18 LINELCOLOR 现行对话框线的颜色_ (x1,y1)坐标指定填充矩形第一个角(左上角)的位置。该填充矩形的第二个角(右下角)由(wid,hgt)指定它是相对于第一个角第一个相对距离其值必须为正数。源点(0,0)是该图像的左上角。通过调用控件尺

27、寸函数dimX_tile和dimY_tile您可以获得图像控件右下角的坐标。四. 实例 下面的程序代码在关键字为image-key的图像控件上绘制一个红色的矩形。 (star_image image_key) (setq max-x (dimx_tile image-key) (setq max-y (dimy_tile image-key) (fill-image 0 0 max-x max-y 1) (end_image)3.4. slide_image 一. 功能 在现行激活对话框图象控件上显示一个autocad的幻灯片。 二. 格式 (slide_image x1 y1 wid hgt

28、 sldname)三. 说明 幻灯即可以是一个.sld类型的幻灯文件,也可以是幻灯库文件(.slb)中的一个幻灯,sld_name用于指定要显示的幻灯片名,可以用如下两种格式之一指定。sldname或libname(sldname) 幻灯的第一个角(左上角),也就是它的插入点。其坐标是(x1,y1),而它的第二个角(右下角)是离第一个角的相对距离(wid,hgt),wid和hgt必须是正值。原点(0.0)是图像的左上角。通过调尺寸函数dimx_tile和dimy_tile,您可以获得右下角的坐标值。幻灯就像绘有图形的胶片一样好用,用户可以将多个幻灯片叠加起来构成一幅复杂的图像。在图像控件显示幻

29、灯时要注意两点。第一,幻灯片上的图像有可能是在与先前控件底色相同的其它背影色相同,该矢量就显示不出来,从而造成丢失。第二,要考虑到时间因素,由于显示幻灯片需要装入和绘制时间,所以要尽量使用简单的幻灯。四.实例下面的程序代码在关键字为my_key的图像控件上绘制幻灯片库MYLIB中的XYZ幻灯。 (start_image my_key) (setq hax_x (demx_tile my_key) (setq max_y (dimy_tile my_key) (slid_image 0 0 max_x max_y MYLIB(XYZ)3.5. start_image一. 功能 开始对话框控件中一

30、个图像的生成。 二. 格式 (start_image key)三. 说明 在调用这个函数之后,就可以调用fill_image、slide_image和vector_image等函数对图像控件进行各种处理了,直到应用程序调用end_image函数才会结束对指定的图像控件的处理。key变元是指定对话框控件的一个字符串。key变元是大小写敏感的。239. vector_image一. 功能 在现行激活对话框的图像控件上画一条矢量。 二. 格式 (vector_image x1 y1 x2 y2 color)三. 说明 本函数在现行激活的图像近控件(该图像控件由Start_image函数所打开)上,从

31、(x1,y1)到(x2,y2)画一条矢量。变元color指定画些矢量时所使用的颜色代码,也可以是由下表中给出的逻辑颜色代码之一。 颜色属性的符号名表_颜色代码 ADI助记符 所代表的意义_ -2 BGLCOLOR AutoCAD图形屏幕的现行背景颜色_ -15 DBGCOLOR 现行对话框背景颜色_ -16 DFGLCOLOR 现行对话框前景颜色(也就是文字的颜色)_ -18 LINELCOLOR 现行对话框线条颜色_ 图像控件的原点(0,0)位于该图像的左上角,通过调用尺寸函数(dimx_tile和dimy_tile),您可以获得图像控件的右下角坐标。四. 实例 下面的程序实例示范了如何在关

32、键字为image_key的图像控件上绘制一个红色的矩形。 (start_image image_key) (setq max_x (dimx_tile image_key) (setq max_y (dimy_tile image_key) (vector_image 0 0 0 max-y 1) (vector_image 0 max-y max-x max-y 1) (vector_image max-x may-y max-x 0 1) (vector_image max-x 0 0 0 1) (end_image)注意事项:每个人的对话框及驱动程序避免雷同如何简单对话框的驱动 myca

33、l.lsp e:autolisp studywlycal.dcl如何进行嵌套对话框的驱动Example2.lsp e:autolisp studyexample2.dcl如何保证下拉列表框与列表框互动Example3.lsp e:autolisp studyexample3.dcl如何进行图像控件的驱动1 制作幻灯片 autocad绘图环境里:先绘图,再调用mslide命令存储为后缀为.sld的文件即可。2 图像控件的初始化(如装载幻灯片) Example4.lsp e:autolisp studyexample4.dcl-(Example4.lsp本例程只包含装载幻灯片)3 图像按钮的使用(

34、动作表达式) Example5.lsp e:autolisp studyexample5.dcl4 图像按钮的使用(二级子对话框 用户输入) qian_imgbutt_draw e:autolisp study qiantao_main.dcl综合实例 screw.LSP e:autolisp study screwdcl.dcl要求:图像控件与列表框互动 对话框嵌套选择螺钉种类(保持图像按钮与列表框互动)选择插入点(方法1:编辑框输入 法2:鼠标拾取)编辑框反映鼠标拾取坐标值螺钉大径和长度(法1:列表框选取 法2:自定义尺寸)这两种方法互锁(利用控件设置函数)选择角度(方法1:编辑框输入 法

35、2:鼠标拾取)编辑框反映鼠标拾取角度值设置线的颜色(利用图像按钮)绘图(本例只是示范画圆)AutoLISP数据类型1.整型数2.实型数 3.字符串 4.符号(或变量) 5.表6.文件描述符 1.AutoCAD选择集 8.AutoCAD图元名 9.VLA对象 字符串 字符串是由一对双引号(”)括起来的字符序列。通常又把构成字符串的双引号对称为字符串界定符。AutoLISP对字符串有如下约定: 字符串中,同一字母的大小写认为是不同 的字体,空格也是一个有意义的字符。 字符串的长度指位于双引号之间的字符个 数(不包括双引号对)。 如果在字符串的定界符之间无任何字符,称其为空串,它的长度为零。字符串中

36、可以包含ASCII码中任一字符,通用的表示形式为“nnn”,其中nnn为八进制形式的ASCII码。例如“101102103”表示”ABC”,二者的作用完全相同。 由于反斜杠“”已作为字符串中的前导转义符,因而当字符串中要使用反斜线时,必须加转义符,即用双反斜线“”表示字符串中一个反斜线“”。表 AutoLISP的表指包含在一对相匹配的左、右圆括号之间的相关数据的集合。表中的每一项称为表的元素,这些元素可以是整型数、实型数、字符串、符号,也可以是另一个表,且各元素间要用空格隔开。表提供了保存各种数据的有效方法。AutoLISP基本函数1. 计算函数 (+ ) 返回所有的和。其中, 可以是整型数,

37、也可以是实型数。 (- ) 返回第一个与后面所有数的差。 (* ) 返回所有的乘积。(/ )返回除以后的商。 (1+ ) 返回加1后的值。 (注意:1与+号之间不能有空格)(1- ) 返回减1后的值。 (注意:1与-号之间不能有空格) (abs ) 返回的绝对值。 (sin ) 返回的正弦值,单位 为弧度。 (cos ) 返回的余弦值,单位 为弧度。 (atan ) 如果没有,返回的反正切, 单位为弧度,范围从。如果有 , 返回/后的反正切。如果 为零,返回。(max )返回中的最大值。(min )返回中的最小值。 (exp ) 返回e的次幂的值。 (expt )返回的次方的值。 (log )

38、 是exp函数的反函数。返回值为的自 然对数值,其数据类型为实型数。 2. 关系运算函数= ) 如果所有在数值上相等,返 回T,否则返回nil。 (/= ) 如果所有在数值上均不相等, 返回T,否则返回nil。 ( ) 第一个小于后面的原子,返回 T,否则返回nil。 ( ) 第一个大于后面的原子,返回 T,否则返回nil。 (= ) 第一个大于或等于第二个原 子,返回T,否则返回nil。 (= ) 第一个小于或等于第二个原子, 返回T,否则返回nil。 3. 逻辑运算函数 (and ) 返回所有的与逻辑: 只要有一个的结果 为nil,返回nil,否则返回T (or ) 返回所有的或逻辑: 如果所有的结果为 nil,返回nil (not ) 返回的非逻辑:如果 的结果为nil,返回T, 否则返回ni

温馨提示

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

最新文档

评论

0/150

提交评论