Entities
entity 是可以放置在螢幕上的最小的物件 . 下面這些都是 entities : LINE, CIRCLE, ARC, TEXT, POLYLINES, ... 等等 . Entities 儲存 , 取用在繪圖資料庫當中 . 它們可以用 AutoLISP 來修改成所需的資料 . 每一個 entity 在 auto CAD 的資料庫當中 都有很大量的定義 . 舉例來說 , 單獨的 line 的資料包含了以下的資訊 :
Entity name 圖元名稱 , Entity type 圖元類別 , Layer 圖層 , Color 顏色 , Beginning X Y coordinate 起始座標值 , Ending X Y coordinate 終點座標值 , Line type 線型等等 . 你可以修改其中的任何一項資料 . entity list 的範例如下 :
( - 1 <Entity name: 60000014) (0 "CIRCLE") (8 . "LAYER1")
(10 . 50.000 100.000) (40 . 60.000)
這是一個圖元的串列資料 , 它描述了一個圓的基本資料 , layer 名稱為 LAYER1, 其圓心座標值為 50.0,100.0 , 半徑值為 60.0
Ssget and Entsel (select entities 選取圖元 )
Ssget 和 Entsel 都是用來選取圖元的指令 . (entsel) 每次只選取一個圖元 entity. 你不能使用窗選的方式 ( WINDOW or CROSSING ) 來選取圖元 . (ssget) 則可以使用 WINDOW or CROSSING 來選取圖元 . 一般用 (ssget) 的機率較高 .
(setq a (ssget)) 將提示你選取圖元 , 然後設給變數 a.
(setq a (ssget "X" '((0 . "TEXT")))) 則是加上過濾的選項 , “X” 是搜尋全部的圖元 , '((0.”TEXT”)) 則是設定過濾條件為 : 圖元類別為” TEXT” 文字 . 所以 , 整個指令是說 : 選取整張圖中 , 所有文字的圖元為一個選擇集 ( the selection set ) , 然後設定給變數 a.
Ssname (get entity name 取得圖元名稱 )
圖元名稱是十六進位數值 . 所以 , 不要期望圖元的名稱會像 LINE, or CIRCLE 等等 . 它的名稱比較像是這個樣子 : 60000018.
假設 variable a 為一選擇集 ( The selection set ) , variable i 設為 0 . (setq i 0) 設為計數變數 .
(setq na (ssname a i)) 此指派 na 為變數 a 選擇集當中 , 第 i 個圖元 . 記得所謂的計數 , 是由零起算 , 而不是一般的 1,2,3,4,5,6,... 的算法 . 例如 : Entity 1 is Index 0( 選擇集中第一個圖元 Entity 1 的計數序號為 0) , Entity 2 is Index 1 , 等等 .
Entget (get entity list 取得圖元的串列資料 )
此指令真正將圖元的資訊取出來運用 . 圖元的串列資料可以被指派給變數 . 例如 :
(setq b (entget na)) .
Subst (substitute new for old 用新的替代舊的資料內容 )
用於修改圖元資料中的某個項目 . 假設 variable b 為串列的名稱 , variable c 包含元素的值 : (40 . 60.0000)
則 (setq bl (subst '(40 . 30.0000) c b)) 是修改圖元資料庫的指令 ; bl 是新的串列 . '(40 . 30.0000) 是新的元素 , 用來取代串列 b 當中的舊元素 c .
Sslength
Gives you the length or number of selections made 取得選擇集的圖元個數的值 .
Entmod (entity modification 圖元修改 )
上述的修改指令完成後 , 螢幕上的圖形仍然是舊圖形 , 必須以此指令來更新圖元資料 .
如上例 , 設定新的串列的變數 b1 , 要更新繪圖資料庫中的永久串列 . 用 (entmod bl) 指令 , 就可以在螢幕上看到改變後的圖形 .