lisp捕捉垂足 lisp函式詳解

2021-10-13 15:06:47 字數 4223 閱讀 9886

auotlisp及vlisp函式全集

按字母順序排列按功能分類排列

212. ssget

一. 功能

提示使用者選擇物件(圖元),並返回乙個選擇集。

二. 格式

(ssget[mode] [pt1 [pt2]] [pt_list] [filter_list])

三. 說明

(一).函式呼叫中各變元的說明

mode變元是指定物件(圖元)選擇方法的乙個字串。有效的選擇方法是:"w"、 "wp"、 "c"、 "cp"、 "l"、 "p"、 "i"以及"f",它們分別對應於window、wpolygon、crossing、cpolygon、last、previous、implied、fence選擇方法。其它的可選的mode值是"x",它用於選擇整個資料庫。pt1和pt2指定與選擇有關的點。呼叫ssget時提供了乙個點而不提供mode變元,等價於拾取單個點來做物件選擇。ssget函式忽略objectsnap(物件捕捉)的現行設定方式,除非您在呼叫本函式時專門指定了它。filter_list變元是指定物件特徵的乙個關聯表。與filter_list匹配的那些物件被加入到選擇集中。如果呼叫ssget函式時,省略所有變元,則ssget函式給出"selectobject"提示,允許使用者互動地構造選擇集。

選擇集中可以包含圖紙空間和模型空間兩個空間中的物件,但該選擇集由某一種操作所使用時,在現行空間中無效的那些物件會被過濾掉。由ssget函式返回的選擇集中僅包含主圖元(不包含屬性和多義線的頂點圖元)。

下面給出一些使用例項。

(1)(ssget)

讓使用者用普通的物件選擇方法選擇物件,構成選擇集。

(2)(ssget "p")

生成乙個選擇集,該選擇集由最近所選擇的那些物件所組成。

(3)(ssget "l")

生成乙個選擇集,該選擇集由最後被增加到圖形資料庫中的那個可見物件組成。

(4)(ssget "i")

生成乙個選擇集,該選擇集由pickfirst生效時所選擇的那些物件組成。

(5)(ssget "(2,2))

生成乙個選擇集,該選擇由通過點(2,2)的那些物件組成。

(6)(ssget "w" (0 0) "(5 5))

生成乙個選擇集,該選擇集包含了由(0,0)到(5,5)定義的視窗中的所有物件。

(7)(ssget "c" "(0 0)"(1 1)

生成乙個選擇集,該選擇集中既包含了由(0,0)到(1,1)定義的視窗中的所有物件,也包含了與這個視窗相交的那些物件。

(8)(ssget "x")

生成乙個選擇集,該選擇集中包含了現行圖形資料庫中的所有物件。

(9)(ssget "x" filter_list)

掃瞄圖形資料庫,將與過濾表filter_list匹配的那些物件組成乙個選擇集並返回。

(10)(ssgetfilter_list)

讓使用者用一般的物件選擇方式選擇物件,將使用者所選擇的所用物件與過濾器表filter_list進行比較,只有與過濾器表相匹配的那些物件才放入到選擇集中,最後返回所生成的這個選擇集。

(11)(ssget "p" filter_list)

生成乙個選擇集,入選該選擇集的條件是,它既是最近所選擇的那些物件,且又滿足過濾器的要求。

(12)(ssget "wp" pt_list)

生成乙個選擇集,該選擇集中既包含了由點表pt_list定義的多邊形中的所有物件。

(13)(ssget "cp" pt_list)

生成乙個選擇集,該選擇集中既包含了由點表pt_list定義的多邊形中的所有物件,也包含了與該多邊形相交的那些物件。

(14)(ssget "f" pt_list)

生成乙個選擇集,該選擇集中包含了與點表pt_list定義的多邊形籬笆相交的全部物件。

(15)(ssget "wp" pt_listfilter_list)

生成乙個選擇集,該選擇集中的所有物件既必須處於由點表pt_list定義的多邊形內,也必須滿足過濾器表filter_list中的條件。

只有當一帶變元呼叫ssget函式時,被選取的物件才會高亮顯示。選擇集會消耗autocad臨時檔案儲存區,autolisp不允許同時開啟的選擇集多於128個。如果選擇集的數目達到了這個極限,autocad會拒絕 再生成選擇集,再呼叫更多次ssget函式也只能是返回nil。為了關閉不再需要的選擇集。可以將它設定為nil。

對於任何以last響應"selectobject:"提示有效的地方,都可以向autocad傳遞乙個選擇集變數。它將選擇所傳遞的選擇集中的所有物件。

(二).關於選擇集中過濾器的進一步討論

選擇集過濾器表可以由任何方式所使用。您可以獲得乙個包含在給定圖層上(或乙個給定顏色、給定型別的全部物件的選擇集。

下面的例項中,返回乙個選擇集,該選擇集中僅包含在pickfirst方式有效時所選擇的那些物件中,顏色為蘭色的直線段。

(ssget"i" "((0. "line")(62.5)))

使用過濾器表,您也能選擇屬於乙個特定申請的包含在擴充套件資料中的全部物件。要達到這一目的,需要按如下方式 -3組碼:

(1)過濾器表中的關係測試

除非特別指定,否則對過濾器表filter_list中的每一項都隱含了乙個「相等」測試。對於數值組(整數、實數、點以及向量), 通過包含了乙個專用的-4組來指定乙個關係運算子,您可以指定其它的關係。乙個-4組的值是乙個字串,它用於指出要作用於過濾器表中隨後的測試運算子。

(ssget"x" "(((0."circle")(-4.">=")(40.2.0))))

上述表示式,將選擇半徑大於或等於2.0的所有圓來構成乙個選擇集。

下表中列出了過濾器表中所有可以使用的運算子。

選擇集過濾器表中所用的關係運算子

"*" 任何情況(總是為真)

"=" 等於

"!=" 不等於

"/=" 不等於

"<>" 不等於

"<=" 小於或等於

">" 大於

">=" 大於或等於

"&" 按位於與(and)(僅適用於組值為整型的組)

"&=" 按位遮蔽相等(僅適用於組值為整型數的組)

關係運算子的使用取決於使用者要測試的組的型別:

. 除去按位運算子("&"和"&=")之外,所有關係運算子對組為整型數和實型數的組都是有效的。

. 按位運算子"&"和"&=",僅應用於組值為整型數的組才是有效的。如果((inter-group & filter)/=0)那麼,按位"與"("&")才是真,也就是說,在遮蔽中的任何一引起位設定為1,在整型組值中那些對應位也為1時,按位"與"("&")的結果才為真。如果((integer-group & filter)=filter),按位遮蔽相等"&=",才是真,也就是說,在遮蔽中的所有位設定為1,在integer-group中也設定為1,按位遮蔽相等"&="才是真(在integer-group中的其它位可能也是置為1,但不對它作檢測)。

. 對於表示點座標的組,x,y和z測試可以組合成單個字串,同時每個個運算子用逗號作分隔 (例如:">,>,*")。如果乙個運算子在字串中被省略(例如:"=,<>"省略了z測試),則假定它是"*"運算子。

. 方向向量(210組)僅能用"*"、"="和"! ="運算子進行比較("! ="表示不等)。

. 組值為字串的不能使用關係運算子進行測試,而要使用萬用字元進行比較。

(2)過濾器測試的邏輯分組

剛剛討論過的關係運算子是二進位制運算子。通過知生成使用分組運算子巢狀布林表示式,您也可以對組進行測試。下表中列出了分組運算子。分組運算子同-4組指定,就象關係運算子那樣。分組運算子是成對出現的,在過濾器表中它們必須匹配正確,否則,ssget函式呼叫就會失敗。

用在選擇集過濾器表中的分組運算子

起始運算子 包含的內容 結束運算子

由分組運算子所使用的乙個運算元是乙個或多個圖元域。乙個關係運算子後跟乙個或多個圖元域,或乙個由這些運算子所生成的巢狀的表示式。下面是乙個在過濾器表中使用了分組運算子的例項:

(setq"x" "((-4. "

(-4. "

(0."circle")

(40. 1.0)

(-4."and>")

(-4."

(0."line")

(8."abc")

(-4. "and>")

(-4. "or>")

這就選擇了所有關徑為1.0的圓,外加在圖層"abc"上的所有直線。

由於分組運算子對小寫是不敏感的,所以您可以使用與大寫等價的小寫形式,即:""、 ""、 ""、 "",......。

四. 例項

下面的程式例項用於改變現行圖形中所有文字的盡無動於寸。

(defunc:chtext2 (atsnin

相交路口lisp程式 lisp函式詳解

auotlisp及vlisp函式全集 212.ssget 一.功能 提示使用者選擇物件 圖元 並返回乙個選擇集。二.格式 ssget mode pt1 pt2 pt list filter list 三.說明 一 函式呼叫中各變元的說明 mode變元是指定物件 圖元 選擇方法的乙個字串。有效的選擇方...

Lisp 函式作為資料

兩樣東西使得lisp函式不同。第一,上面提到的,lisp自身就是乙個函式的集合。這意味著我們可以向lisp中加入我們自己的操作符。另外乙個我們需要知道的關於函式的東西是它們是lisp物件。lisp提供了其它語言中能找到的多數的資料型別。我們知道整形和浮點型數字,字串,陣列,結構體等等。但是lisp支...

LISP 函式型程式語言

lisp有很多種方言,各個實現中的語言不完全一樣。1980年代guy l.steele編寫了common lisp試圖進行標準化,這個標準被大多數直譯器和編譯器所接受。在unix linux系統中,還有一種和emacs一起的emacs lisp 而emacs正是用lisp編寫的 非常流行,並建立了自...