本章主要讲解Autolisp中一些常用的交互函数的使用。
一、等待输入相关函数
常用的等待输入相关函数如下:
函数 | 函数功能 |
---|
(getangle [pt] [msg]) | 暂停以等待用户输入角度,然后以弧度形式返回该角度。 |
(getcorner pt [msg]) | 暂停等待用户输入矩形第二个角点的坐标。 |
(getdist [pt] [msg]) | 暂停以等待用户输入距离。 |
(getenv variable-name) | 以字符串方式返回指定的环境变量的值。 |
(getint [msg]) | 暂停以等待用户输入一个整数并返回该整数。 |
(getkword [msg]) | 暂停以等待用户输入一个关键字并返回该关键字。 |
(getorient [pt] [msg]) | 暂停以等待用户输入角度,并返回该角度。 |
(getpoint [pt] [msg]) | 暂停以等待用户输入点,并返回该点。 |
(getreal [msg]) | 暂停以让用户输入一个实数并返回该实数。 |
(getstring [cr][msg]) | 暂停以等待用户输入字符串,并返回该字符串。 |
(getvar varname) | 获取一个 AutoCAD 系统变量的值。 |
(initget [bits] [string]) | 为随后的用户输入函数调用创建关键字。 |
1、getangle函数
参数 | 必要性 | 参数含义 |
---|
point | 可省略 | 如果指定了point参数,用户可以再指定一个点来给 AutoLISP 输入一个角度。 |
msg | 可省略 | 显示给用户的提示信息。 |
下面的样例代码说明了调用getangle如何传递不同的参数:
(setq #dAngle (getangle)) ;; 两点均由用户指定,无提示信息。
(setq #dAngle (getangle (list 0 0 0))) ;; 用户指定一点,计算从点(0 0 0)到用户指定点之间的角度。
(setq #dAngle (getangle (list 0 0 0) "\n请指定方向:")) ;; 指定基点的同时在命令行输出提示信息。
(setq #dAngle (getangle "\n请指定方向:")) ;; 只输出提示信息,两点均由用户指定。
2、getcorner函数
参数 | 必要性 | 参数含义 |
---|
point | 不可省略 | 用作基点的点。 |
msg | 可省略 | 显示给用户的提示信息。 |
下面的样例代码说明了调用getcorner如何传递不同的参数:
(setq #ptCorner (getcorner (list 0 0 0)))
(setq #ptCorner (getcorner (list 0 0 0) "\n请指定另一角点:"))
3、getdist函数
参数 | 必要性 | 参数含义 |
---|
point | 可省略 | 二维或三维点。用作当前 UCS 中的基点。如果已经提供了 pt,则仅提示用户输入第二点。 |
msg | 可省略 | 显示给用户的提示信息。 |
返回值 | 说明 |
---|
distance | 用户指定的两点间的距离。 |
下面的样例代码说明了调用getdist如何传递不同的参数:
(setq #dDist (getdist)) ;; 两点均由用户指定,无提示信息。
(setq #dDist (getdist(list 0 0 0))) ;; 用户指定一点,计算从点(0 0 0)到用户指定点之间的距离。
(setq #dDist (getdist(list 0 0 0) "\n请指定距离:")) ;; 指定基点的同时在命令行输出提示信息。
(setq #dDist (getdist "\n请指定距离:")) ;; 只输出提示信息,两点均由用户指定。
4、getenv函数
参数 | 必要性 | 参数含义 |
---|
variable-name | 不可省略 | 字符串,指定要读取的变量名。环境变量的拼写必须与系统注册表中的拼写完全一致(包括大小写)。 |
返回值 | 说明 |
---|
variable | 字符串,代表指定环境变量的值。如果该变量不存在, getenv 函数返回 nil。 |
(getenv "ACAD")
5、getint函数
(setq #iNum (getint))
(setq #iNum (getint "\n请输入一个整数:"))
6、getorient函数
该函数的作用和用法与getangle函数基本一致,区别在于getorient 函数以逆时针方向测量由用户指定的两点所确定的直线与零弧度方向(正东方,即时钟三点钟位置)之间的角度。用户输入的角度是以当前的 ANGDIR 和 ANGBASE 设置为基准的。
然而,一旦该角度值被输入,对它的测量则是相对于零弧度(正东方)按逆时针方向进行的,而忽略系统变量 ANGDIR 和 ANGBASE 的设置。
因此,如果通过 UNITS 命令或通过设置系统变量 ANGBASE 和 ANGDIR,选择了一种不同的零度基准方向或角度增量方向,在使用 getorient 函数的过程中就必然会发生某种转换。
当需要一个旋转量(相对角度)时应使用 getangle 函数,而需要一个指定方向(绝对角度)时则应使用 getorient 函数。
用户不能输入一个 AutoLISP 表达式来响应 getorient 的请求。
7、getpoint函数
参数 | 必要性 | 参数含义 |
---|
point | 可省略 | 如果指定了point参数,会在指定的point拉出一条牵引线。 |
msg | 可省略 | 显示给用户的提示信息。 |
下面的样例代码说明了调用getpoint如何传递不同的参数:
(setq #ptPoint (getpoint))
(setq #ptPoint (getpoint (list 0 0 0)))
(setq #ptPoint (getpoint (list 0 0 0) "\n请指定下一点:"))
(setq #ptPoint (getpoint "\n请指定一点:"))
8、getreal函数
(setq #dNum (getreal))
(setq #dNum (getreal "\n请输入一个实数:"))
9、getstring函数
参数 | 必要性 | 参数含义 |
---|
cr | 可省略 | 如果提供了该参数且其值不为 nil,那么输入的字符串可以包括空格且必须按 ENTER 键结束。否则,输入的字符串以空格键或 ENTER 键结束。 |
msg | 可省略 | 提示信息。 |
(setq #str (getstring))
(setq #str (getstring T))
(setq #str (getstring "\n请输入一个字符串:"))
(setq #str (getstring T "\n请输入一个字符串:"))
10、getvar函数
参数 | 必要性 | 参数含义 |
---|
varname | 不可省略 | 字符串,指定要读取的变量名。 |
返回值 | 说明 |
---|
variable | 字符串,代表指定系统变量的值。如果该变量不存在, getenv 函数返回 nil。 |
(getvar "OSMODE") ;; 获取当前捕捉状态
11、getkword函数
最后,我们来介绍getkword函数。
在调用 getkword 函数之前必须先调用 initget 函数设置有效的关键字。用户不能输入一个 AutoLISP 表达式来响应 getkword 的请求。
参数 | 必要性 | 参数含义 |
---|
strkey | 可省略 | 用于提示用户的字符串。如果省略该参数,则 getkword 不显示任何提示信息。 |
返回值 | 说明 |
---|
string | 字符串,表示与用户输入相匹配的关键字。如果用户输入为空(即仅按下 ENTER 键),或者用户没有使用 initget 函数设置一个或多个关键字,则本函数返回 nil。如果用户输入了无效关键字,getkword 将显示警告信息,并提示用户重试。 |
下例先调用 initget 函数创建关键字列表(“Yes”和“No”),并且不允许随后的 getkword 接受空输入(将 bits 设为 1),然后调用 getkword 函数:
(initget 1 "Yes No")
(setq #strKword (getkword "\n是否确定[是(Y)/否(N)]: "))