3 尾3行的关括号是对应第2行的PROGN函数 4 尾2行的关括号是对应第1行的IF函数
5 最后一行最右边的关括号是对应第1行的DEFUN函数
五输入输出 第1节
-------------------------------------------------------------------------------- 输入函数
让AutoCAD应用程序可以提示使用者输入程序所需的数据;这些输入函数一般都是以GET开头;当程序执行至输入函数时,程序便会暂停,等待使用者输入指定类型的数据后,程序即会继续执行.亦可在函数内指定要显示的提示字符串,若不提供则没有任何提示. 输入整数
(GETINT [提示字符串] )
e.g. (GETINT \
输入的范围从-32,768到+32,767之间;若超出范围,会有警告讯息 若输入的数据不是整数型态,如文字或是实数,会显示警告讯息 若输入空格或按下ENTER键响应,输入值为 nil 输入实数
(GETREAL [提示字符串] )
e.g. (GETREAL \
若输入的数据是字符串型态,会显示警告讯息;若输入整数,则会自动转为实数 若输入空格或按下ENTER键响应,输入值为 nil 输入字符串
(GETSTRING [模式] [提示字符串] )
e.g. (GETSTRING T \
若有提供模式参数且不是 nil 值,使用者即可在输入的字符串中包含空格;但此时必须按ENTER键结束输入
若没有提供模式参数或该参数为 nil 值,要在字符串中包含空格时,必须在字符串的前后加上双引号 \ 输入时不须在字符串的前后加上双引号(上述的情况例外)
若输入空格(没有模式参数或为 nil 值时)或按ENTER键响应时,输入值为\即空字符串 输入选取点
(GETPOINT [基准点] [提示字符串] )
e.g. (GETPOINT (LIST 0 0) \
可以在屏幕以指向设备(一般是鼠标)选取,或以键盘直接输入坐标值亦可
若有提供基准点(目前UCS的2D或3D坐标),会从基准点出现伸缩线到十字光标所在位置
可接受单一整数或实数作为长度,代替基准点参数;此时会以系统变量LASTPOINT为基准点,以目前十字光标的位置与LASTPOINT的角度为方向,以长度为距离,求出新的输入点
传回值为目前UCS的三维坐标;若输入空格或按下ENTER键响应,输入值为 nil 输入角度
(GETANGLE [基准点] [提示字符串] )
e.g. (GETANGLE (LIST 0 0) \
若有提供基准点(目前UCS的2D坐标),会从基准点出现伸缩线到十字光标所在位置 若没有提供基准点,可以在屏幕以指向设备(一般是鼠标)选取两点,以第一点作为基准点 可从键盘直接输入角度值;不论是用指向设备选取或键盘输入,均自动转为弪度传回 弪度以0弪度方向(由系统变量ANGBASE设定)算起,沿反时钟方向增加 输入角度
(GETORIENT [基准点] [提示字符串] )
e.g. (GETORIENT (LIST 0 0) \
唯一不同于GETANGLE函数的是 : 以正右方为0弪度,不受 ANGDIR 及 ANGBASE 系统变量影响
输入对角点
(GETCORNER 基准点 [提示字符串] )
e.g. (GETCORNER (LIST 0 0) \
必须提供以目前UCS为准的基准点参数;与目前十字光标位置构成伸缩的矩形 传回值为目前UCS的三维坐标;若输入空格或按下ENTER键响应,输入值为 nil 可直接从键盘输入坐标值,以代替从屏幕点选 输入距离
(GETDIST [基准点] [提示字符串] )
e.g. (GETDIST (LIST 0 0) \
会从基准点(目前UCS的2D坐标)出现伸缩线到十字光标所在位置
若没有提供基准点,可以在屏幕以指向设备(一般是鼠标)选取两点,以第一选取点作为基准点
若提供3D的点坐标,则传回值是3D的距离;但若设定了INITGET函数第64位,则会忽略Z坐标而传回2D距离
输入关键词
(GETKWORD [提示字符串] )
e.g. (GETKWORD \es or No (Y/N)\
有效的关键词必须在此函数使用前,先行以INITGET函数来设定 若输入一个无效的关键词时,系统会显示警告讯息并提示再次输入 输入关键词后,会传回输入的关键词的字符串;若按ENTER键则传回 nil
标准档案对话框
(GETFILED 标题 预设档名 预设扩展名 模式)
e.g. (GETFILED \
预设文件名可包含目录路径,若为空字符串\则会是AutoCAD启动目录的全部档案
若预设扩展名为空字符串,则显示所有类型的档案;若扩展名为DWG,会在对话框中显示预览影像 若对话框取得文件名称,函数会传回指定的文件名称及目录路径,否则传回 nil
模式是控制对话框行为的整数值;若要一次过设定多种模式,可将其模式对应的数值累加
1 (0位) 建立新的档案;若是要开启旧档则切勿使用;若档案巳存在会显示错误讯息
4 (2位) 此位若未设定,则只会接受指定的预设扩展名,若档案不加扩展名,则自动加上预设的扩展名
8 (3位) 若设定此位且未设定0位,档案会依支持路径搜寻;若找到则只会传回文件名称,不会传回路径.若未设定此位,则会传回完整的目录路径文件名
16 (4位) 若设定此位,或是预设文件名以路径分隔元结尾,则仅显示该目录路径的档案,且文件名称输入框会变为空白
32 (5位) 若设定此位及0位,若指定的档案巳经存在则会被覆盖,且覆盖前不会有警告讯息 64 (6位) 若指定了URL,则请勿传输远程档案 128 (7位) 完全不允许使用URL 第2节
-------------------------------------------------------------------------------- 设定关键词
(INITGET 模式 关键词串 ) e.g. (INITGET 7 \es No\
若使用者的输入符合某个关键词,则会传回整个关键词串;否则会显示提示重试<
每个关键词仅可以含有字母,数字及连字符号 (-);有以下两种方式缩写关键词 :
---- 关键词的必要部份用大写,其余用小写 e.g. \es No\
---- 整个关键词全部为大写,以逗号分隔,再重复简写的部份 e.g. \ NO,N\
若关键词全部为小写或大写,且没有逗号及缩写部份,则使用者必须输入整个关键词才能辨析
每个关键词之间必须以空格分开
本函数适用于除GETSTRING以外的其它输入函数(但各函数可设定的模式略有不同)
模式的作用为控制使用者的输入,为整数值;若要一次过设定多个模式,可将该模式对应的数值累加
1 (0位) 不接受使用者按下ENTER键作为响应 2 (1位) 不接受使用者输入0作为响应
4 (2位) 不接受使用者输入负数作为响应
8 (3位) 允许输入超出图面范围以外的坐标点(即使目前系统数数LIMCHECK设定为ON) 16 (4位) 目前并未使用
32 (5位) 使用虚线绘制伸缩线或方框;但如果POPUPS系统变量设定为0,则会忽略此位的设定 64 (6位) 若设定此位,则各输入函数只传回2D的坐标;否则会传回3D的坐标
128 (7位) 允许任意的输入;这位优先于0位的设定值;若输入时按ENTER响应,则会传回空字符串 第3节
-------------------------------------------------------------------------------- 输出函数
显示或写入档案
(PRIN1 字符串 / 表达式 [档案指标] )
e.g. (PRIN1 \
所有包含在字符串中的控制字符会当为普通字符显示
若没有提供字符串或表达式,则函数将不作任何事情
结果会在屏幕显示两次,第一次为函数功能所显示的,第二次为系统的传回值
档案指针必须是以OPEN函数,开启档案后传回的指标;若没有提供,所有传回值均显示在屏幕上;若有提供,字符串将写入该档案内
e.g. (PRIN1 \ 显示或写入档案
(PRINC 字符串 / 表达式 [档案指标] ) e.g. (PRINC \
所有包含在字符串中的控制字符会正常运作 其它与PRIN1函数相同 显示
(PROMPT 字符串参数 )
e.g. (PROMPT \
在双屏幕规划中,可将字符串显示在两个屏幕上 字符串显示后,传回值恒为 nil 显示
(ALERT 字符串参数 )
e.g. (ALERT \ 字符串参数会显示在对话框中
可配合换行控制字符 显示多行文字
在对话框中,可显示的列数量及每列可显示的字符数量,受平台设备,窗口大小及解像度影响 第4节
-------------------------------------------------------------------------------- 练习 (Exercises)
在TEST.LSP程序文件中,新增程序2C-1,以修改第三篇课程的2C程序 : 在新增的程序中,使用输入函数取得使用者输入,取代在呼叫旧程序时同时传入自变量的做法
(DEFUN C:2C-1 ( ) (SETQ CEN (GETPOINT \ (COMMAND \ (PRINC))
程序说明
1 设定函数2C-1,并用GETPOINT函数取得使用者选取的坐标点(圆心)再用SETQ函数将坐标存入变量CEN中
2 用COMMAND函数执行CIRCLE指令,随即以变量CEN响应以设定圆心点位置,再使用GETDIST函数,取得使用者输入的长度作为半径响应CIRCLE指令
在TEST.LSP程序文件中,新增程序RECT,以对角的两点建立矩形(聚合线),再询问是否在矩形中加上对角线,最后将图形以输入的角度旋转.在程序中要等别注意如何将坐标分解及重组(第3,4行的程序代码)
(DEFUN C:RECT ( ) (SETQ PT_START (GETPOINT \ PT_END (GETCORNER PT_START \ PT_TMP1 (LIST (CAR PT_START) (CADR PT_END)) PT_TMP2 (LIST (CAR PT_END) (CADR PT_START)))
(COMMAND \
(COMMAND \ (INITGET 128 \es No\
(SETQ YESNO (GETKWORD \ (IF (= YESNO \es\
(COMMAND \ (COMMAND \
(COMMAND \ (COMMAND \ ) )
(COMMAND \TE\
(* (GETANGLE PT_START \ (PRINC)) 程序说明
1 设定函数名称,并用GETPOINT函数取得第1点坐标,存入变量PT_START
2 使用GETCORNER函数取得第2点(矩形对角点)坐标,存入变数PT_END
3 抽出变数PT_START的X坐标,及PT_END的Y坐标,结合成新坐标并存入变数PT_TMP1 4 抽出变数PT_END的X坐标,及PT_START的Y坐标,结合成新坐标并存入变数PT_TMP2 5 用COMMAND函数执行PLINE指令,顺序设定四个角点位置,最后以\选项将聚合线封闭 6 用COMMAND函数执行SELECT指令,并选用Last模式,将刚建立的聚合线选取 7 以INITGET函数设定关键词Yes及No
8 用GETKWORD函数询问使用者是否要在矩形中加上对角线,并将传回值存入变数YESNO中 9 用IF函数判断变量YESNO,若使用者输入Y,则以PROGN函数包含各顺序执行的指令 10 以COMMAND函数执行LINE指令划出第1条对角线
11 用COMMAND函数执行SELECT指令,用Previous模式选取对上一个选集的对象(聚合线),再选用Last模式,将刚建立的对角线选取并加入新选集中
12 以COMMAND函数执行LINE指令划出第2条对角线
13 用COMMAND函数执行SELECT指令,用Previous模式选取对上一个选集的对象(聚合线和直线段),再选用Last模式,将刚建立的对角线选取并加入新选集中
14 右边的关括号是对应IF函数,左边的关括号则是对应PROGN函数
15 以COMMAND函数执行ROTATE指令,将对上一个选集(以Previous模式响应),绕变量PT_START为基准点转旋
16 旋转的角度以GETANGLE函数取得;因为函数的传回值是弪度,所以要乘以180除PI(弪度3.14159等于180度),使弪度转换为角度值
新增程序AIR-4,并将第4篇课程的AIR-3程序修改为 : 在程序中直接要求使用者输入空气污染指数(只可输入正整数或实数,但不可以是0,负数或以ENTER响应),而不是在呼叫程序时以自变量的方式传入 (DEFUN C:AIR-4 ( ) (INITGET 7)
(SETQ NUM (GETINT \ COND函数及其余程序省略 程序说明
1 设定函数名称,并用INITGET函数,设定输入模式为7,没有任何关键词
(1 = 不可以ENTER 2 = 不可以是 0 4 = 不可以是负数 所以设定值为1+2+4 = 7)
2 用GETINT函数(或GETREAL)函数取得使用者输入的数值并存入变量NUM中,以便进行后续的判断程序 六字符串资料 第1节
-------------------------------------------------------------------------------- 字符串函数
字符串连结 (STRCAT [字符串参数1 [字符串参数2]....] ) e.g. (STRCAT \ Result : \
如果仅有一个参数,则传回该参数
若没有提供任何参数,则传回零长度的字符串(空字符串) e.g. (STRCAT) Result : \ 字符串长度
(STRLEN [字符串参数1 [字符串参数2]....] ) e.g. (STRLEN \ Result : 5
如果有多个参数,会传回所有字符串参数的长度总和
e.g. (STRLEN \ Result : 9
如果没有提供参数,或字符串参数为空字符串,则传回值为0 e.g. (STRLEN) 或 (STRLEN \ Result : 0
截取字符串
(SUBSTR 字符串参数 开始位置数值 [截取长度] ) e.g. (SUBSTR \ Result : and
字符串参数中第一个字符(最左边)的位置编号为1,依此类推
空格亦占一个字符位置及编号
起始位置数值必须为正整数;若其数值大于整个字符串的长度,则传回空字符串\ e.g. (SUBSTR \ Result : \
截取长度亦必须为正整数;若没有提供此参数,则传回起始位置及其右边的全部字符 e.g. (SUBSTR \ Result : \ 若不提供任何参数,或仅提供字符串参数,系统即会显示警告讯息 第2节
相关推荐: