第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中,以便进行后续的判断程式