




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 交互式输入函数和屏幕输出函数交互式输入函数和屏幕输出函数本章介绍Auto LISP系统提供的交互式输入函数和屏幕输出函数。交互式输入函数是提供用户通过输入设备(键盘、数字化仪和鼠标器)将数据输入给计算机的函数,屏幕输出函数是将运行结果通过输出设备(终端显示器)输出的函数,这些函数都是Auto LISP程序和用户间进行人机交互通讯时不可缺少的,也是非常重要的函数。3.1 交互式输入函数交互式输入函数 我们已讲过在编程时,程序设计者可以用setq函数给变量赋值,但这些变量的值是固定的,在程序运行过程中用户是不能改变的,这样非常不方便,特别是在绘图时,无法实现参数化绘图。为此Auto
2、LISP提供了人机交互式输入函数,这些函数使用户可以从键盘等输入设备输入数据,改变变量的值和给变量以初值等。下面介绍九种交互式输入函数,由于其前面三个字母为get,故又称get族函数 GETINT 输入整数函数输入整数函数 GETREAL 输入实数函数输入实数函数 GETDIST 输入距离函数输入距离函数 GETPOINT 输入点函数输入点函数 GETCORNER 输入窗口函数输入窗口函数 GETSTRING 输入字符串函数输入字符串函数 GETANGLE 输入角度函数输入角度函数 GETORIENT 输入方位函数输入方位函数 GETKWORD 关键字输入函数关键字输入函数 另外还有一个为GE
3、T族函数提供各种关键字的函数INITGET,另一类输入函数,它的输入设备可以是外存磁盘,如: readchar 读一个字符函数 readline 读一行字符串函数3.1.1 GET输入输入函数输入输入函数 get函数的通用调用格式是:函数的通用调用格式是: (getxxx 提示提示) 提示是可以任选的一个字符串,当调用getxxx函数时,程序暂停,等待用户输入。此时若有提示则提示的信息显示在屏幕上,用户根据提示的信息输入需要的数据,若输入的数据类型和范围正确,程序可继续进行,下面分别介绍这些函数。 . 数的输入函数 整数输入函数GETINT 调用格式调用格式 (getint 提示) 如上所述,
4、提示是一个任选的字符串。 功用功用 该函数的功能是提供用户通过输入设备输入一个整型数,当执行该函数时,机器暂停下来等待用户输入整型数后,程序继续进行,例如: (setq a (getint “enter an integer number:”) 屏幕显示enter an integer number:50 ;此时用户可通过键盘输入一个整数,如50。 该函数确认50是合乎要求的数据类型,程序继续运行,否则提示要求一个整数。 Command:!a 50 求值结果求值结果 执行该函数时,并不求值,只有当输入一个整型数后才返回求值结果即该整型数。如上例: (setq a (getint “n ente
5、r an integer number:”) ;n为换行控制符返回值125 enter an integer number:125 并将125赋给a 如果输入不是整型数,而是直接回车或空格键,则返回nil,了解着一点很重要,它常被用于控制循环程序。 注意注意 getint函数在标准情况下只接受整型数,而且输入整型数范围必须在-32768到+32768之间,否则出错。 实型数输入函数GETREAL 调用格式调用格式 (getreal 提示) 功用功用 机器暂停等待用户输入一个数,(可以是实型数或整型数) 求值结果求值结果 不管输入的数是整型数或是实型数,均返回实型数,若直接回车,则返回nil。
6、(setq a (getreal “enter a number:”) enter a numb:5 返回值5.000000 enter a number: 返回值nil 距离值输入函数GETDIST 调用格式调用格式 (getdist 基点 提示 功用功用 等待用户输入一个距离值。其中任选项基点是指定一个基点(二维点或三维点)。输入距离的方式有三种:输入一个距离值的数,可以在屏幕上指定两个点,该函数可自动量出这二点之间的距离,指定一个基点并在屏幕上指定另一点,该函数可自动测量距离,当然此时亦可输入一个距离值。 求值结果求值结果 不管输入格式如何,该函数总是返回一个实型数。例如: (setq
7、d (getdist) ;等待输入一个距离,若回车或按空格键返回 nil。 (setq d (getdist “n How far”) How far 4 返回值 4.000000;输入一个数 (setq (getdist “How far”) How far 1,2 Second point 5,2 返回值4.000000;输入两个点 (setq d (getdist /(1.0 5.5) “How far”) How far 5.0,5.5 返回值4.000000;基点和指定一点 2.点的输入 点的输入函数 GETPOINT 调用格式调用格式 (getpoint 基点 提示) 功用功用 执
8、行该函数时,机器暂停,等待用户输入一点,若给定了任选项基点,则通过橡皮筋线可以观察输入点与给定点基点的相对位置。 求值结果求值结果 返回值为实型数组成的表。例如: (setq p (getpoint “point”) point 窗口输入函数GETCORNER 调用格式调用格式 (getcorner 基点 提示) 基点必须存在。 功用功用 该函数执行时,机器暂停,以给定的基点为一角,等待用户输入另一角以形成矩形窗口。 (1,2)(4,5)图 3.1 3.角度输入为便于叙述,先介绍一下角度输入和角度测量。角度的输入:角度的输入可以通过键盘直接输入角度的数值,亦可在屏幕上指明一条线的起点和终点来表
9、示角度。当前的角度单位格式是度,弧度等可以通过Auto CAD的unit命令进行设置。角度的零度方向一般为东方。而角度的增加方向为逆时针方向,但角度的零度方向及角度的增长方向可以通过改变系统的变量Angbase和Angdir来设置。角度的测量:在Auto CAD中,测量角度有两种:一是方向角或绝对角度,它总是以x轴正方向为零度方向,逆时针测量角度;二是相对角度,它是 通过系统变量改变后 的零度方向为基准,逆时针测量角度。 求值结果求值结果 该函数返回值为一点,它是由实型数组成的表,例如: (setq pw (getconner /(1 2) “n second point:”) second
10、point:5,4 返回值(3.0,2.0) 屏幕显示见图3.1 相对角度输入函数GETANGLE调用格式调用格式 (getangle 基点 提示)功用功用该函数执行时,机器暂停,等待用户输入一个角度。角度输入有三种方式:用户可以用Auto CAD的当前角度单位格式键入一个角度值(一个数);用户在图形屏幕上指定两个二维点,Auto CAD可从第一点到当前的光标位置画一条皮筋线,以辅助用户观察,当回车后该函数自动测量第一点到第二点的向量与零度方向之间的夹角;若任选点(基点)被指定了,它就是向量的一个点,只需要再输入一点即可,在这种情况亦可直接输入一个零度值。 求值结果求值结果不管当前的角度单位格
11、式是什么(度、弧度、梯度等),getangle函数总是把输入角度值转化为弧度,并返回弧度值。并且返回的角度是相对角度,即输出以当前零度方向为基准,逆时针方向测量用户输入的角度,对getangle直接回车或按空格键,则返回nil。例如: 假定Auto CAD当前角度格式为度,零度方向向北,角度增加方向为顺时针方向。则有: (setq ang (getangle “n enter angle:”) enter angle:-60(-/3) 返回值1.0472(/3)(弧度)参见图3.2a若enter angle :60(/3) 返回值5.23599(10/3)(弧度)参见图3.2b假定Auto C
12、AD当前角度格式为度,零度方向向东,角度增加方向为逆时针方向。则有: (setq ang (getangle “n enter angle:”) enter angle:90 返回值1.570796(弧度) (setq ang (getangle /(1.1 5.5) “n enter angle:”) enter angle:5.1,9.5 返回值0.785398(弧度) 方位角输入函数GETORIENT 调用格式调用格式(getorient基点 提示)功用功用该函数与getangle函数相似,也是等待输入一角度。输入方式与getangle相同,不同的是返回的是一个方位角度值,即绝对角度。求
13、值结果求值结果返回值也是以弧度来表示的角度。但它返回的是绝对角度,即以东方为零度方向,以逆时针方向为增加方向测量用户输入的角度。例如: 假设零度方向为南方,角度的增长方向为逆时针方向,角度单位为弧度,则有: (setq ang (getorient “n First point:”)) First point:4.0,5.0 Second point:6.0,5.5 返回值0.244978同样的输入若用getangle函数,则返回1.85764 注意注意getorient函数和getangle函数输出结果是不同的,即getorient输出的是绝对角度,它总是以东方为零度,逆时针方向测量输入的角
14、度。而getangle输出的是相对角度,它是以当前的零度方向为基准,逆时针方向测量输入角度。因此同样的输入而输出的角度数值是不同的。例如:假设角度零度方向为北方,角度增加方向为顺时针方向。当前角度单位为度。不同输入,getorient和getangle返回的不同值。 4输入控制函数INITGET(1) 调用格式调用格式 (initget ) 表3-2 INITGET的括号内为二进制表示 控 制 意 义 1(000001)2(000010)4(000100)8(001000)16(010000) 32(100000) 不接受空输入(直接回车或按空格键)不接受零值不接受负值不检查图形范围(LMCH
15、ECK系统变量为开态)返回三维点而不是二维点用虚线(或其它加亮的线)画皮筋拉伸线或拉伸 任选项是一整型数。Initget函数用来控制输入数据的范围。的数值和它控制的意义见表3-2。可选表中任意一项作为数值,亦可同时选几个控制项,此时可用几项数值加在一起。例如:选1,2,3项,为(+ 1 2 4)或者写成7。(2)功用)功用 Initget函数是一个控制函数,它不对其参数求值,也不返回求值结果。它的功用主要是用来控制紧跟其后的get族函数,的输入范围。前面我们介绍的每一个get函数要求输入的数据类型都是一定的,即它可限定数据输入的类型,getint函数只允许用户输入整型数,但它却不能限制输入数据
16、的范围。Initget函数可限制get 函数的输入数据范围,还可设置关键子字符串,使编程具有容错功能。这在CAD应用软件开发中是十分有用的。 1)通过任选项的设置,限制输入数据的范围。例如:不允许输入零值,取2;不允许输入负值,取4;若不允许输入零值和负值,取(+ 2 4)或6,Initget函数的设置后,如果用户输入不符合指定的某个或几个组合条件,AutoCAD就会显示出错信息,并提示用户重新输入。例 如: (initget (+1 2 4 )或7) (setq d (getreal “n enter a number:”)) enter a number:0重新输入 enter a num
17、ber:-6 重新输入 enter a number:回车 重新输入 enter a number:4 返回值:4.000000 又如:(initget 16) (setq p (getpoint “n enter a umber:”) enter point:4.0,2.0,3.5 返回值:(4.000000 2.000000 3.500000) 2)设置关键字字符串 initget 函数的是一个用于设置关键子集合的字符串。使上述的只能接受数值和get族函数,也能接受关键子字符串。若用户输入的与关键字字符串中设置的某个字符相匹配时,Get族函数就返回该字符串。关键字字符串是多个关键字的集合,
18、关键字之间用空格隔开。 例如: (initget “Le Ri”) (setq bp (getpoint “n center point or Le / Ri:”) center point or Le / Ri:2.0,3.0 返回值::(2.000000,3.000000 ) center point :or Le / Right:Le 返回值:“Le” 输入关键字时亦可输入简写字,此时简写字部分必须大写。 例如: (initget “Yes No“) (setq a (getint “n enter an integer or Y/N)) enter an integer or Y/N:
19、Y 返回值:”Yes” (3) 注意注意1)initget 函数只对紧跟其后的get族函数起控制作用,然后自动消除。对其它get 函数不起作用。 2)用户输入的关键子字符必须与关键字字符串中的关键字或第一字母一致。5字符串输入函数字符串输入函数(1)字符串输入函数GETSTRING调用格式调用格式 (getstring )其中为T或nil功用功用该函数执行时,机器暂停,等待用户输入一个字符串(可不必加双引号)。当设定了,且为T时,输入的字符串中可以含空格(此时必须用回车终止输入)。选项若为nil,输入的字符串中不能含有空格(此时可用回车或空格键终止输入),为了有时使程序暂停,可在程序中加入(g
20、etstring)此时程序暂停,若回车或按空格键后,程序可继续。这在调试程序时很有用。 求值结果求值结果返回字符串,若直接回车或按空格键则返回空串“”。 (setq d (get string “n what/s your name:”) ) what/s your name:ch 返回值“ch” 输入不能含空格 或 (setq s (getstring T “n what/s your name:”) what/s your name:c h 返回值“c h” ;输入可含空格 注意注意initget函数对getstring不起作用。getstring函数输入字符时可不加双引号,但返回值一定是
21、字符串。 关键字输入函数GETWORD 调用格式调用格式 (getword 功用功用 由于initget函数对getstring不起控制作用,为了对用户输入的字符串有一定限制。Auto LISP提供了一个系统函数getword。使用该函数时,在getword函数调用前,先用initget函数设置关键字。 执行该函数时机器暂停,等待输入一个字符串关键字。该字符串也可缩写,大小写皆可,但不能带引号“”。 求值结果求值结果 返回关键字字符串,若为空输入,则返回nil。若没有设置关键字集合,也返回nil。例如: (setq k (getword “Are you sure? (Y/N)”) Are y
22、ou sure? T非关键字,从新输入 Are you sure? Y 返回值“yes” 3.1.2 其它输入函数 1. READCHAR函数函数 调用格式调用格式 (readchar) 功用及求值结果功用及求值结果 当执行该函数时从键盘输入缓冲区中读入一个字符串,若键盘输入缓冲区中没有字符时,Readchar将等待用户键入一些字符和数据(后跟回车),返回的是一整型数。这个整型数是读入字符的ASC码值,例如: (read-char) 键入ABC并回车 返回65(A的ASC码) (read-char) 返回66(B的ASC码) (read-char) 返回67(C的ASC码) (read-cha
23、r) 返回10 (read-char) 等待用户键入 2. READLINE函数函数 调用格式调用格式 (read-line) 功用和求值结果功用和求值结果 当执行该函数时从键盘缓冲区中读入一行字符,若键盘缓冲区中没有字符时,该函数将等待用户输入一个字符串,(字符串可包括空格),回车后返回该字符串。例如 : (read-line) 键入this is an example 返回值“this is an example” 注意:注意: (1)(read-line)与(getstring)的区别,前者是以文件方式操作,它可读入任何有效字符串,包括Auto LISP表达式,例如: command:
24、(read-line) (setq a (* b s) 返回值 “(setq a (* b s))” 而getstring就不行,例如: command: (getstring) (setq a (* c 5) ;提示不能重入Auto Lisp 3.2 屏幕输出函数屏幕输出函数 Auto Lisp提供的基本输出函数 即可用于屏幕输出,又可用于磁盘文件输出的函数有: PRINT PRIN1 PRINC WRITE-CHAR WRITE-LINE 只用于屏幕输出的函数: PROMPT TERPR1 3.2.1用于屏幕和文件的输出函用于屏幕和文件的输出函 本节只介绍用于屏幕输出的功能: 1.PRIN
25、T函数 调用格式 (print ) 功能及求值结果功能及求值结果 该函数将其单个参数求值后,将其值显示再文本屏幕上。其特点是:输出的值之前自动换到新的一行开头,打印后,再打印空格。若print不带参数,在屏幕上只控制换行,并在新的一行打印空格,返回空格。例如: (print a) A A (print 12.5) 12.500000 12.500000 ;前一值为print的打印值,后一值为返回值 又如:(print) 执行结果在屏幕上什么也不显示,并打印一空行。 2. PRIN1函数 调用格式调用格式 (prin1 ) 功用与求值结果功用与求值结果 其功用、返回值与print相同,不同的是该
26、函数在输出的值之前不换行,而打印的值之后,不打印空格。例如: (prin1 /a) AA (prin1 12.5) 12.500000 12.500000 又如: (prin1) 执行结果,屏幕什么也不能显示。 3.PRINC函数 调用格式调用格式 (princ ) 功用与求值结果功用与求值结果 该函数与prin1基本相同,不同的是princ打印的字符串不加引号,但返回值加引号。且字符串中控制字符有控制作用。例如: (princ “n input a number:”) 屏幕显示在新的一行打印: input a number “input a number:” 下面举一例说明print,pri
27、n1,princ的区别: (print /“lispro”) “lispro” “lispro” (prin1 “lispro”) “lispro” “lispro” (princ “lispro”) lispro “lispro” 其中显示结果前一项是打印值,后一项是函数调用的返回值。 4.WRITECHAR函数 调用格式调用格式 (writechar 数) 数是字符的十进制asc码。 功用及求值结果功用及求值结果 该函数是将一个数即十进制asc码转换成相应的字符,写到屏幕的当前光标位置上,它与princ函数一样打印前不换行打印后不打空格,返回值为字符的十进制asc码。例如: (write-
28、char 68) 返回值 D68 (write-char 69) 返回值 E69 (write-char 70) 返回值 F70 三次调用write-char函数,并在屏幕上分别打印D E F。该函数换行符(asc码10)转换换成行结束符。如; (write-char 10) 10 5.WRITELINE函数 调用格式调用格式 (write-line 字符串) 功用与求值结果功用与求值结果 该函数是将字符串不带引号写在屏幕上,并返回字符串。即该函数与princ相似,写到屏幕上字符串不加双引号。但它与princ相不同的是在打印字符串后控制换行,而不是在打印前换行,要打印前先换行,并在新的一行上打
29、印,可在字符串中加行控制符“n”,例如: (write line “PMCAD”) PMCAD ;将字符串打印在屏幕上,不带引号,打印后换行 “PMCAD” ;返回值 (prine “PMCAD”) PMCAD“PMCAD” ;打印值无引号,且与返回值无空格,打印后不换行 (write-line “3.0 5.0”) (3.0 5.0) “(3.0 5.0)” 上面的结果为write-line后换行,而princ打印前及打印后均不换行,要想打印前换行可加换行控制符,如: (write-line “n (3.0 5.0)”) (3.0 5.0) “(3.0 5.0)” 在新的一行上打印(3.0
30、5.0)且光标打在下一行上。 3.2.2只用于屏幕输出函数只用于屏幕输出函数 1 PROMPT函数函数 调用格式调用格式 (prompt 字符串) 功用及求值结果功用及求值结果 该函数和princ函数相似,将字符串打印在屏幕上,在打印前不换行,打印后不打印空格,打印的字符串不带双引号,它亦能识别控制字符。 Prompt调用后总是返回nil,例如: (prompt “n The first line:”) The first line:nil 返回值 nil The first line为打印值,nil为返回值 2.TERPRI函数 调用格式调用格式 (Terpri) 功用及求值结果功用及求值结
31、果 该函数用以控制换行,它把光标移至下一行的首部,并返回nil。 3.3综合举例综合举例例1 齿轮数据输入程序。 (defun clsr () (initget 7) (setq p (getreal “n功率p=?”) (initget 7) (setq n (getreal “n齿轮转速n=?”) (initget 7) (setq i (getint “n传动比i=?”) (initget 7) (setq z (getint “n齿数z=?”) );defun例2 齿轮数据修改程序 (defun clxg () (prompt “齿轮齿数:p n i z”) (terpri) (int
32、iget “P N I Z”) (setq e (getrword “n欲修改参数”)) (initget 7) (setq el (getreal “n修改值:”) (set e el) ;将修改值赋给e的值齿轮参数 );defun例3 齿轮设计结果显示程序 (defun clsjjg () (princ “*设计结果*”) (print) (princ (streat “n齿轮模数 m:” (rtos m 2 1) (princ (streat “n大齿轮齿数z2:” (rtos z2 2 1) (princ (streat “n小齿轮齿数z1:” (rtos z1 2 1) (princ (streat “n中心距 a:” (rtos a 2 1) (print) (princ“*”) (print) );defun例4.选择图号NO。 (defun th () (initget l “0 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 介绍采购居间合同范例
- 上海电梯安装合同范例
- 单位借款买车合同范例
- 华为公司采购合同范例
- 单位承包食堂合同范例
- 伐木工人合同范本
- 出售进口货车合同范例
- 取样员服务合同范例
- 住房指标转让合同范例
- 劳动实习合同范例
- 2025年河南应用技术职业学院单招职业技能测试题库新版
- 2025年上半年黑龙江鹤岗市兴山区招聘事业单位人员5人重点基础提升(共500题)附带答案详解-1
- 区域临床检验中心
- 2024年版人民医院新院建设施工合作合同一
- 基于大数据的拉萨旅游业市场分析
- 术后疼痛病人中医护理
- 布局经营-绘画构图基础 课件-2024-2025学年高中美术人美版(2019)选择性必修1 绘画
- 人力资源社会保障宣传工作计划及打算
- 语法辨析-中考语文真题题源解密(辽宁版)(带答案)
- 养老院安全管理体系方案
- 2024年贵州省公务员录用考试《行测》真题及答案解析
评论
0/150
提交评论