2014年6月13日 星期五

繪圖前的預備動作

     LISP 繪圖前要有還要有預備動作?? 當然不是作作熱身操上上廁所種,記得 Visual LISP 可以使用 (command) 指令嗎 ? 雖然很方便,只要會操作 AutoCAD 就會使用這個指令,但是,CAD 繪圖好像不止只有繪圖動作,還有環境設定的問題,例如圖層,鎖點,標註比例,文字尺寸等等等...,當你使用 command 指令時,你已經承認目前 AutoCAD 的環境設定就你()想要的,例如

    (command "LINE" pt1 pt2 "")

    如果 CAD 現在圖層是 "0",線形式 "Continues",那麼這條線的預設值便已訂好,如果你要別的圖層,那要先更改圖層,例如先執行

    (setvar "CLAYER" "LINE")

   把預設的圖層改為 "LINE",下一個物件若不是在 "LINE" 圖層上,那麼請再換一次,畢竟 CAD 不是你肚子裡的蛔蟲。

   還有什麼問題,鎖點,若在繪圖時鎖點模式打開,那麼鎖點會取代程式輸入值,明明畫的點應該形成四邊形,螢幕上卻跑出四不像,所以繪圖前先把鎖點關閉 (當然不是按 F9)

    (setvar "OSMODE" 0)

   那麼程式完成時呢?抱歉,鎖點就被關閉了,如果還想恢回覆繪圖前狀態,先把鎖點的參數記下來,最後在設定一次

    (setvar _osmode (getvar "OSMODE"))
    (setvar "OSMODE" 0)

    ..... (繪圖指令)....

    (setvar "OSMODE" _osmode)

    還有問題,是關於對話盒的問題,例如開啟舊檔對話盒,圖塊屬性對話盒,若在 LISP 執行過程跳出,則程式會中斷,等待使用者輸入並關閉對話盒後才會繼續執行,若不想被打斷,那麼 "FILEDIA" "ATTDIA" 也記得要關。

    若對指令欄中一連串輸出厭煩 (或是不想讓使用者知道執行過程),先設定

    (setvar "CMDECHO" 0)

   上面這些拉拉雜雜的問題都是跟 (command) 指令有關,所以 Visual LISP 內還有一個 (entmake) 指令,以設定群碼內容方式繪圖,就沒有上面的問題 (但是並如容易掌控)

    最後有一個動作也是值得設定的,就是 UNDO 指令,在所有動作開始前設定

    (command "UNDO" "M")

   若程式執行結果不如預期,例如畫出的圖形與現有圖形重疊,而你的程式已經執行了幾百個動作,又無法放棄不存檔,那心中的無奈跟手指按 CTRL+Z 的痛苦可是無以覆加
   如果程式先設定 UNOD MARK 位置,那麼此時只要執行 UNDO/B,就可回到 LISP 執行前狀態,當然付出的代價是程式執行速度,不過,還是那句話,我輩能寫的出的程式,通常不會有這個問題滴。

沒有留言:

張貼留言