2014年4月6日 星期日

Visual Lisp 輸入 getpoint 函數

    (getpoint) 函數明顯望文生義求使用者輸入一座標點  GET
 + POINT,執行它則要求使用者輸入一個點,可以從命令列
輸入座標點或是滑鼠左鍵點選。
 
再加上例如 (setq pt (getpoint)) 程式碼後,便可以儲存於 pt 
變數中。
 
 AutoCAD 輔助說明可知 getpoint 函數完整形式如下
 
    (getpoint [pt] [msg])
 
    後面有兩個方括號 [pt], [msg] 是選擇性輸入之參數,[msg]
為呈現在命令列給用者之提示,例如 "Input the Point :\n" 
 "點選放置點\n" (: \n 為跳行控制)
 
    [pt] 這個參數比較有意思,他會由 pt (當然必須有意義之點)
拉一條橡皮筋,在使用者輸入第二點前隨著滑鼠到處跑,講的
好像很玄,其實你用 COPY, MOVE 指令就可以看到這條橡皮
筋,它可以給使用者兩個點相對位置之提示。
 
最後提一個技巧,使用者可能在執行程式時,未輸入點位便按
 ENTER 或按了滑鼠右鍵 (也是 ENTER),則輸入便會失敗
,程式可改寫如下
 
(while (= nil (setq pt (getpoint "Input A Point :\n")))
    (princ "Incorrect, Please ")
)

加個 while 迴圈,第一次執行時會要求使用者輸入一個點

指令: Input A Point:
 
若使用者輸入點,則迴圈跳出繼續往下執行
若使用者按下 ENTER,則 pt 會被設定為 nil,符合 while 
件進入下一行執行,此時 (princ) 函數在命令列輸出
 
指令: Incorrect, Please
 
再跳回 while 迴圈執行 (getpoint "Input A Point :\n"),此時命
令列補上 Input A Point : (基本上你不會發現這個間隙),於是
使用者看到
 
指令: Incorrect, Please Input A Point :
 
再度要求使用者輸入一個點,直到 pt 有值為止,當然其他
(getstring) (getint) (getreal) (getkword) ... 家族函數均可如法炮製。

沒有留言:

張貼留言