2014年7月14日 星期一

MIRROR 指令修改



    以前看過有人問過一個問題,MIRROR 的指令很難用,有沒有辦法簡單一點,我們就先來看看 MIRROR 的指令有哪些步驟,輸入 MIRROR

   選取物件 (含確定動作)
   選取第一鏡射點 (含鎖點及確認)
   選取第一鏡射點 (含鎖點及確認)
   決定要不要刪除原物件 (輸入 “Y” “N”)

    以土木而言,常用的鏡射不外乎水平或垂直鏡射,如果再將要不要保留原物件組合,哪麼 MIRROR 指令可拆成 4 種指令,排列組合一下

    水平鏡射,保留原物件
    水平鏡射,刪除原物件
    垂直鏡射,保留原物件
    垂直鏡射,刪除原物件

   這種問題不用動用到 LISP,直接改寫 MIRROR 指令即可,例如水平鏡射,保留原物件 的指令就是

(command "MIRROR" (ssget) "" PAUSE "@0,100000" "N")

(ssget) 讓你選取要鏡射的物件,後面兩個雙引號幫你按下確認鍵,PAUSE 讓你選取垂直基準線的第一點,"@0,100000" 則幫你定義垂直基準線的第二點,"N" 當然是 MIRROR 指令最後刪除與否選項。

    簡單吧!

2014年7月4日 星期五

一窺 AutoCAD 群碼的鑰匙

你想過在 AutoCAD 一個個繪出的圖元,是怎樣記錄在 AutoCAD 檔案內的嗎? 如果你在 AutoCAD 中寫下一個字,就 TEST 吧,我問你如何描述這的圖元,你會說這個包含有

1.    文字的位置
2.    文字的內容 ( TEST)
3.    文字的圖層 (假設是在 0 )
4.    文字的字形 ….

    是的,AutoCAD 也是這麼記錄下來的,而且比你想像的資料還要多,那如何知道這些資訊,用 LIST 指令 !! 現在應該沒有人會用這種老古董指令,用性質  _properties指令就可以將文字性質一覽無遺,不過這是經過包裝的,在 AutoCAD LISP 內要有更嚴謹的作法

    (entget(car(entsel)))

   這是三個指令串起來的指令 (不愧為 LISP),在命令列中執行它,CAD會要求你選取一個圖元,然後將圖元的資料傾瀉而出,不廢話就取選取 "TEST" 這個文字,然後 ….

((-1 . <圖元名稱: 7ef62298>) (0 . "TEXT") (330 . <圖元名稱:
7efddcc0>) (5 . "1373") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbText") (10 352.068 167.112 0.0) (40 . 90.0) (1 . "TEST") (50 . 0.0)
(41 . 0.8) (51 . 0.0) (7 . "C") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0
1.0) (100 . "AcDbText") (73 . 0))

   是的,這是 "TEST" 的本尊,其中組成元件有圖元名稱 (編號),圖元分類 (TEXT),圖元所在圖層(8 . "0"),文字基準點 (10 352.068 167.112 0.0) …,接下來就是如何取出資料,運算,修改更新的動作了。