|
14.7装入一个AutoLISP程序 一般来说与一个AutoLISP程序相关的名称有两个:程序文件名和函数名。例如,TRIANG1.LSP是一个文件名,而不是函数名。所有的AutoLISP文件名均以.LSP为扩展名。一个AutoLISP文件可以包含一个或多个函数定义。例如,例1中的TRIANG1是一个函数名。要执行一个函数,必须装入定义该函数的AutoLISP程序文件。在图形编辑器中使用如下命令装入一个AutoLISP文件。 Command:(load“[path]filename”) 其中Command…………………AutoCAD命令提示行 load……………………装入一个AutoLISP程序文件 [path]filename……………AutoLISP程序文件的路径及名称 AutoLISP文件名及可选的路径名必须置于双引号内。load及filename必须放在括号中。若没有括号,AutoCAD将试图装人一个图形或文本字体文件,而不是AutoLISP文件。load同filename间的空格也可省略。如果AutoCAD成功的装入了该文件,函数名将会显示在屏幕的Command提示区内。要执行该程序,在AutoCAD的Command:提示行中键人函数的名称,并按下Enter键,(Command:TRIANG1)。如果程序中函数名前没有C:,可以通过将函数名置于括号中的形式运行该程序: Command:TRIANG1或Command:(TRIANG1) 注意 定义待装入的AutoLISP程序的路径时应使用斜杠。例如,如果AutoLISP文件 triang 存放在C驱动器的LISP子目录中,使用如下命令装入该文件。还可以使用双反斜 杠(\\)代替斜杠。command:(load“c:/lisp/triang”)或command:(load“c:\\lisp\\triang") 还可以通过使用标准的windows拖放技术装人一个应用程序。要装人一个LISP程序,一种方法是在Windows的资源管理器中选中该文件,并拖放到AutoCAD的图形窗口中,选中的程序将自动装入。还有一种装入AutoLISP程序的方法,就是使用load /unload application对话框。 该对话框可通过在tools菜单中选择load applications或在AutoCAD命令提示行中输入appload将其显示。 load/unload application对话框 可使用load/unload application对话框(见图12习)装入LSP、 VLX、 FAS. VBA、DBX及ObjectARX应用程序。 VBA、DBX及ObjectARX文件被选中时会立即装入;LSP、VLX及FAS文件在load/unload application对话框关闭时装人。该对话框的顶部列出了选中目录中的文件。文件的类型可以通过在file of type编辑框中输入(.lsp)或通过在下拉列表框中选择来改变。选择一个文件并点击LOAD按钮可以装入该文件。以下为load/unload application对话框其他特性的描述: 1.load Load按钮可用于装人或重新装入选中的文件,文件可以从文件列表框, Load Application标签或 History List标签中选取。 ObjectARX文件不能重新装入,必须先卸载该ObjectARX文件,然后再次装入。 2.Load Application标签 选择Load Application标签后, AutoCAD会显示出当前已装人的应用程序。可以向该列表中添加文件,方法是从文件列表框中拖动文件名到Load Applications列表中。 History List标签 选择History List标签后, AutoCAD会显示出以前通过选中Add to History复选框装入的文件列表。如果未选中该复选框,拖放History List中的文件会装入该文件,但木将其添加到History List中。 3.add to History 选中Add to History复选框后,拖放History List中的文件会使其自动添加到History List中。 4.unload Unload按钮在选中Loaded Applications标签时出现。要卸载一个应用程序,在Loaded Applications文件列表中选中该文件名,然后选择unload按钮。未注册卸载的lisp文件及ObjectARX文件不能卸载。 5. Remove Remove按钮在选中History List标签时出现。要从History List中移除一个文件,选中该文件并选择Remove按钮。 6. Startup Suite 每次AutoCAD启动时都会自动装人Startup Suite中的文件。选中Startup Suite后, AutoCAD会显示出包含一个文件列表的Startup Suite对话框。可以选择Add按钮向该列表中添加文件,还可以从文件列表框中拖放文件到Startup suit1中。要从History List中添加文件,右去该文件。 练习1 编写一个在两点间画线的AutoLISP程序(见图12-4)。该程序必须提示用户输入两点的X、Y坐标。 14.8 getcorner、getdist与setvar函数 1.getcorner函数 getcorner函数暂停程序的运行,等候用户输入一个点的坐标。可以用键盘或使用屏幕光标将其输入。该函数需要一个基点,在屏幕上移动屏幕光标时将根据该基点显示矩形。 Getcorner函数格式为: (getcorner Point[Prompt]) 其中Point ……………… 基点 prompt ……………… 显不在屏幕上的提示信息 示例:(getcorner pt1) (setq pt2(getcorner pt1)) (setq pt2(getcorner pt1“Enter second Point)) 注意 基点及响应getcorner函数所选择的点均是关于当前UCS定位的。 若选择的是带有X,Y,Z坐标的3D点,FZ坐标将被忽略。该点假定当前高度为其Z坐标。 2.getdist函数 getdist函数暂停程序的运行,等候用户输入距离,随后以实数形式返回该距离。getdist函数格式为: (getdist[Point][Prompt]) 其中Point.....................距离的第一点坐标 Prompt..................须在屏幕上显示的提示信息 示例:(getdist) (setq dist(getdist)) (setq dist(getdist pt1)) (setq dist(getdist“Enter distance”》 (setq dist(getdist pt1“Enter second Point for distance")) 可以在屏幕上选择两个点来输入距离。例如,若赋值语句为(setq dist(getdist)),可以输入数字或选择两个点;若赋值语句为(setq dist(getdist pt1)),这里的第一点(pt1)已经定义,只须选择第二点。getdist函数总是返回以实数表示的距离。例如,如果当前设置为architecture并且以architecture单位输入了距离,getdist函数将以实数形式返回该距离。 3.setvar函数 setvar函数用于给AutoCAD系统变量赋值。系统变量名必须置于双引号中。 setvar函数格式为: (setvar“variable-name value) 其中 variable name............AutoCAD系统变量 value........................赋予系统变量的值 示例:(setvar“cmdecho" 0) (setvar“dimscale”1.5) (setvar “Ltscale”0.5) (setvar“dimcen” 0.25) 例2 编写一个AutoLISP程序,在给定的两条线间通过输入倒角角度及倒角距离生成一个倒角。AutoCAD使用赋予系统变量ChamferA和ChamferB的值生成该倒角。当选择了AutoCAD的Chamfer命令后,第一个倒角及第二个倒角的距离被自动赋予系统变量ChamferA及ChamferB。随后Chamfer命令使用这些值生成一个倒角。然而,在多数工程图中,人们更喜欢通过输入倒角长度及倒角角度的方式来生成倒角,如图12-5所示。 输入 输出 第一个倒角距离(D) 任意两条选中直线间的倒角 倒角角度(A) 处理过程 计算过程 l.计算第二个倒角的距离 x/d=tan a 2.将这些值赋予系统变量ChamferA和ChamferB x=d*(tan a) 3.使用AutoCAD的Chamfer命令生成倒角。 =d*[(sin a)/(cos a)] 下面的文件是例2的程序清单。右边的行号只为方便引用,并不是文件的一部分。 ;This program generates a chamfer by entering 1 ;the chamfer angle and the chamfer distance 2 ; 3 (defun c:chamfer(/ d a) 4 (setvar“cmdecho”0) 5 (graphscr) 6 (setq d(getdist“\n Enter chamfer distance:")) 7 (setq a(getangle“\n Enter chamfer angle:")) 8 (setvar“chamfera”d) 9 (setvar“chamferb”( d(/sin a (cos a)))) 10 (Command“chamfer”) 11 (setvar“cmdecho”l) 12 (princ) 13 ) 14 说明 cmdecho系统变量:控制 AutoLISP 的 command 函数运行时 AutoCAD 是否回显提示和输入。 第7行:(setq d(getdist“\n Enter chamfer distance:")) getdist函数暂停程序的运行,等候用户输入倒角距离,随后setq函数将该值赋予变量d。 第8行:(setq a(getangle“\n Enter chamfer angle:")) getangle函数暂停程序的运行,等候用户输入倒角角度,随后setq函数将该值赋予变量a。 第9行: setvar“chamfera’ d) setvar函数将变量d的值赋予AutoCAD系统变量chamfera。 第10行: (setvar“chamferb”( d(/sin a (cos a)))) setvar函数将从表达式(*d(/(sin a)(cos a)))中取得的值赋予AutoCAD系统变量chamferb。 第11行:(Command“chamfer) Command函数使用AutoCAD CHAMFER命令生成倒角。 练习2 编写一个AutoLISP程序,生成图12-6所示的图形。该程序应该提示用户输入P1点和P2点以及D1和D2的直径。 |