第1节
输入函数
让AutoCAD应用程式可以提示使用者输入程式所需的资料;这些输入函数一般都是以GET开头;当程式执行至输入函数时,程式便会暂停,等待使用者输入指定类型的资料后,程式即会继续执行.亦可在函数内指定要显示的提示字串,若不提供则没有任何提示.
输入整数
(GETINT [提示字串]
)
e.g.
(GETINT "Input Number : ")
| 输入的范围从-32,768到+32,767之间;若超出范围,会有警告讯息
|
| 若输入的资料不是整数型态,如文字或是实数,会显示警告讯息
|
| 若输入空格或按下ENTER键回应,输入值为
nil |
输入实数
(GETREAL [提示字串]
)
e.g.
(GETREAL "Input Number : ")
| 若输入的资料是字串型态,会显示警告讯息;若输入整数,则会自动转为实数
|
| 若输入空格或按下ENTER键回应,输入值为
nil |
输入字串
(GETSTRING [模式] [提示字串]
)
e.g.
(GETSTRING T "Input Name : ")
| 若有提供模式参数且不是 nil
值,使用者即可在输入的字串中包含空格;但此时必须按ENTER键结束输入
|
| 若没有提供模式参数或该参数为 nil 值,要在字串中包含空格时,必须在字串的前后加上双引号 "
|
| 输入时不须在字串的前后加上双引号(上述的情况例外)
|
| 若输入空格(没有模式参数或为 nil
值时)或按ENTER键回应时,输入值为"",即空字串 |
输入选取点
(GETPOINT [基准点] [提示字串]
)
e.g.
(GETPOINT (LIST 0 0) "Select Point : ")
| 可以在萤幕以指向设备(一般是滑鼠)选取,或以键盘直接输入座标值亦可
|
| 若有提供基准点(目前UCS的2D或3D座标),会从基准点出现伸缩线到十字游标所在位置
|
| 可接受单一整数或实数作为长度,代替基准点参数;此时会以系统变数LASTPOINT为基准点,以目前十字游标的位置与LASTPOINT的角度为方向,以长度为距离,求出新的输入点
|
|
传回值为目前UCS的三维座标;若输入空格或按下ENTER键回应,输入值为 nil
输入角度
(GETANGLE [基准点] [提示字串]
) e.g.
(GETANGLE (LIST 0 0) "Select Point : ")
| 若有提供基准点(目前UCS的2D座标),会从基准点出现伸缩线到十字游标所在位置
|
| 若没有提供基准点,可以在萤幕以指向设备(一般是滑鼠)选取两点,以第一点作为基准点
|
| 可从键盘直接输入角度值;不论是用指向设备选取或键盘输入,均自动转为弪度传回
|
| 弪度以0弪度方向(由系统变数ANGBASE设定)算起,沿反时钟方向增加 |
输入角度
(GETORIENT [基准点] [提示字串]
) e.g.
(GETORIENT (LIST 0 0) "Select Point : ")
| 唯一不同于GETANGLE函数的是
: 以正右方为0弪度,不受 ANGDIR 及 ANGBASE 系统变数影响 |
输入对角点
(GETCORNER 基准点 [提示字串]
) e.g.
(GETCORNER (LIST 0 0) "Select Point : ")
| 必须提供以目前UCS为准的基准点参数;与目前十字游标位置构成伸缩的矩形
|
| 传回值为目前UCS的三维座标;若输入空格或按下ENTER键回应,输入值为 nil
|
| 可直接从键盘输入座标值,以代替从萤幕点选 |
输入距离
(GETDIST [基准点] [提示字串]
) e.g.
(GETDIST (LIST 0 0) "Select Point : ")
| 会从基准点(目前UCS的2D座标)出现伸缩线到十字游标所在位置
|
| 若没有提供基准点,可以在萤幕以指向设备(一般是滑鼠)选取两点,以第一选取点作为基准点
|
|
若提供3D的点座标,则传回值是3D的距离;但若设定了INITGET函数第64位元,则会忽略Z座标而传回2D距离
输入关键字
(GETKWORD [提示字串]
) e.g. (GETKWORD "Yes or No
(Y/N)")
| 有效的关键字必须在此函数使用前,先行以INITGET函数来设定
|
| 若输入一个无效的关键字时,系统会显示警告讯息并提示再次输入
|
| 输入关键字后,会传回输入的关键字的字串;若按ENTER键则传回
nil | 标准档案对话方块
(GETFILED 标题 预设档名 预设副档名 模式)
e.g. (GETFILED "Select
file" "C:/TEST" "DWG" 8)
| 预设档名可包含目录路径,若为空字串"",则会是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 "Yes
No")
| 若使用者的输入符合某个关键字,则会传回整个关键字串;否则会显示提示重试<
|
| 每个关键字仅可以含有字母,数字及连字符号 (-);有以下两种方式缩写关键字
: |
----
| 关键字的必要部份用大写,其馀用小写
| e.g. "Yes No"
|
----
| 整个关键字全部为大写,以逗号分隔,再重複简写的部份
| e.g. "YES,Y
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 "David")
| 所有包含在字串中的控制字元会当为普通字元显示
|
| 若没有提供字串或表达式,则函数将不作任何事情
|
| 结果会在萤幕显示两次,第一次为函数功能所显示的,第二次为系统的传回值
|
| 档案指标必须是以OPEN函数,开启档案后传回的指标;若没有提供,所有传回值均显示在萤幕上;若有提供,字串将写入该档案内 |
e.g. (PRIN1 "David"
FILE_ID)
显示或写入档案
(PRINC 字串 / 表达式 [档案指标] )
e.g. (PRINC
"David")
| 所有包含在字串中的控制字元会正常运作
|
| 其它与PRIN1函数相同 |
显示
(PROMPT 字串参数
)
e.g.
(PROMPT "David")
| 在双萤幕规划中,可将字串显示在两个萤幕上
|
| 字串显示后,传回值恆为
nil |
显示
(ALERT 字串参数
)
e.g.
(ALERT "David")
| 字串参数会显示在对话方块中
|
| 可配合换行控制字元 显示多行文字
|
| 在对话方块中,可显示的列数量及每列可显示的字元数量,受平台设备,视窗大小及解像度影响 |
第4节
练习
(Exercises)
| 在TEST.LSP程式档中,新增程式2C-1,以修改第三篇课程的2C程式 :
在新增的程式中,使用输入函数取得使用者输入,取代在呼叫旧程式时同时传入引数的做法 |
(DEFUN C:2C-1 ( )
| (SETQ CEN (GETPOINT "Select center
point : "))
|
| (COMMAND "CIRCLE" CEN (GETDIST CEN
"Input radius : "))
|
| (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 "Select
first point")
|
| PT_END
(GETCORNER PT_START "Select second point")
|
|
PT_TMP1 (LIST (CAR PT_START) (CADR PT_END))
|
|
PT_TMP2 (LIST (CAR PT_END) (CADR PT_START)))
|
| (COMMAND "PLINE" PT_START PT_TMP1
PT_END PT_TMP2 "C")
|
| (COMMAND "SELECT" "L" "")
|
| (INITGET 128 "Yes No")
|
| (SETQ YESNO (GETKWORD "Diagonal
Line (Y/N) : "))
|
| (IF (= YESNO "Yes") (PROGN
|
|
(COMMAND "LINE" PT_START PT_END "")
|
|
(COMMAND "SELECT" "P" "L" "")
|
|
(COMMAND "LINE" PT_TMP1 PT_TMP2 "")
|
|
(COMMAND "SELECT" "P" "L" "")
|
| ) )
|
| (COMMAND "ROTATE" "P" ""
PT_START
|
| (*
(GETANGLE PT_START "Rotate Angle : ") (/ 180 PI)))
|
| (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指令,顺序设定四个角点位置,最后以"C"选项将聚合线封闭
|
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 "Input
number"))
|
| COND函数及其馀程式省略 | 程式说明
1
| 设定函数名称,并用INITGET函数,设定输入模式为7,没有任何关键字 (1 = 不可以ENTER
2 = 不可以是 0 4 = 不可以是负数 所以设定值为1+2+4
= 7)
|
2
| 用GETINT函数(或GETREAL)函数取得使用者输入的数值并存入变数NUM中,以便进行后续的判断程式 |
|