不想要一個一個手動新增,可以做成巨集或是LISP來快速新增圖層的性質 (Property) 與群組 (Group) 篩選 (Filter) 分類。
方法1:使用指令(-LAYER)
範例1:新增圖層的性質篩選(名稱:凍結圖層,性質:凍結圖層)
1. 輸入指令:-LAYER
輸入選項 [?/建立(M)/設定(S)/新建(N)/更名(R)/打開(ON)/關閉(OFF)/顏色(C)/線型(L)/線粗(LW)/透明度(TR)/材料(MAT)/出圖(P)/凍結(F)/解凍(T)/鎖住(LO)/解鎖(U)/狀態(A)/描述(D)/調和(E)/外部參考(X)]:
2. 輸入:filter (此未顯示在指令選項中,為隱藏)
輸入圖層篩選選項 [新建(N)/設定(S)/更名(R)/編輯(E)/刪除(D)/結束(X)]:
3. 輸入:N (新建)
選取圖層篩選類型 [群組(G)/性質(P)]:
4. 輸入:P (性質)
輸入父系圖層篩選 <全部>:
5. 輸入:直接按下Enter鍵 (此為不在任何分支之下;如果要在已有篩選之子項要輸入此項)
輸入性質篩選定義:
6. 輸入:frozen=="true" (此為凍結圖層)(如果多條件要同時輸入在此處)
輸入圖層篩選的名稱:
7. 輸入:凍結圖層 (此為決定篩選名稱,不能空白或重複名稱)
輸入圖層篩選選項 [新建(N)/設定(S)/更名(R)/編輯(E)/刪除(D)/結束(X)]:
8. 輸入:直接按下Enter鍵結束指令 (如果沒有要繼續輸入)
這樣就新增圖層篩選完成
巨集:
^C^C-layer;filter;n;p;;frozen=="true";凍結圖層;;
LISP:
(Command "-layer" "filter" "n" "p" "" "frozen==\"true\"" "凍結圖層" "")
補充性質篩選定義:
關閉:OFF,true/false
凍結:frozen,true/false
鎖住:locked,true/false
顏色:COLOR,顏色代號
線型:LINETYPE,線型名稱
線粗:LINEWEIGHT,線粗數值
透明度:TRANSPARENCY,數值
出圖:plottable,true/false
新視埠凍結:NEWVPFROZEN,true/false
視埠顏色:VPCOLOR,顏色代號
視埠線型:VPLINETYPE,線型名稱
視埠線粗:VPLINEWEIGHT,線粗數值
視埠透明度:VPTRANSPARENCY,數值
同一行條件(同時達成):AND 分隔
下一行條件:OR 分隔
有空再補其他範例
方法2:使用LISP對字典(DICTIONARY)進行修改
字典 ACAD_LAYERFILTERS:顯示圖層性質篩選
字典 ACLYDICTIONARY:顯示圖層篩選(包含性質和群組篩選)
物件標籤:AcLyLayerFilter 圖層性質篩選
AcLyLayerGroup 圖層群組篩選
;;;刪除所有圖層性質篩選(LAYER FILTERS)
(defun C:DelLyrFlt ( / lyr xlist xrec filt)
(setq lyr (tblobjname "LAYER" "0")) ;setq
;;在圖層的擴充字典中找到 "ACAD_LAYERFILTERS"
(setq xlist (dictsearch
(cdr (assoc 360 (entget (cdr (assoc 330 (entget lyr))))))
"ACAD_LAYERFILTERS")
) ;setq
(if xlist
(progn
;;找到第一個圖層篩選的 xrecord
(setq xrec (cdr (assoc -1 xlist))
filt (dictnext xrec t)
) ;setq
;;移除每一個圖層篩選的 xrecord
(while filt
(dictremove xrec (cdr (assoc 1 filt)))
(setq filt (dictnext xrec t))
) ;while
;;移除 "ACAD_LAYERFILTERS" 字典
(dictremove
(cdr (assoc 360 (entget (cdr (assoc 330 (entget lyr))))))
"ACAD_LAYERFILTERS"
)
) ;progn
) ;if
(princ)
);_defun
;;;建立圖層篩選-非外部參考圖層
(defun c:XREFNOT ( / xdict dict xrecname )
(vl-load-com)
;;取得圖層擴充字典
(setq xdict
(vlax-vla-object->ename
(vla-getextensiondictionary
(vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
)
)
)
;;檢查是否有 "ACAD_LAYERFILTERS" 字典,沒有則建立
(setq dict
(if (setq dict (dictsearch xdict "ACAD_LAYERFILTERS"))
(cdr (assoc -1 dict))
(dictadd xdict "ACAD_LAYERFILTERS"
(entmakex
'(
(0 . "dictionary")
(100 . "AcDbDictionary")
(280 . 0)
(281 . 1)
)
)
)
)
)
;;建立圖層篩選
(princ
(if (dictsearch dict (setq xrecname "No_Xref_Layers"))
(strcat
"圖層篩選 <"
xrecname
"> 已經存在。"
)
(if
(dictadd dict xrecname
(entmakex
(append
'(
(0 . "xrecord")
(100 . "AcDbXrecord")
(280 . 1)
)
(list (cons 1 xrecname))
'(
(1 . "~*|*")
(1 . "*")
(1 . "*")
(70 . 0)
(1 . "*")
(1 . "*")
(-3
( "ACAD"
(1000 . "( NAME== \"~*|*\" )")
)
)
)
)
)
)
(strcat
"建立圖層篩選 <"
xrecname
">."
)
)
)
)
;;設定當前圖層篩選為 "No_Xref_Layers"
(command ".-layer" "filter" "set" "No_Xref_Layers" "")
(princ)
);_End of defun
;;;列出所有圖層群組
;;;返回一個列表,每個元素為一個圖層群組的名稱和其子群組所組成的列表
;;;作者:Lee Mac
(defun LM:grouplayerfilters nil
( (lambda ( foo ) (foo (entget (cdr (assoc 330 (entget (tblobjname "layer" "0")))))))
(lambda ( enx / dic itm rtn )
(and (setq dic (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") enx))))
(setq dic (cdr (assoc -1 (dictsearch dic "aclydictionary"))))
(while (setq itm (dictnext dic (not itm)))
(if (or (= "AcLyLayerGroup" (cdr (assoc 1 itm)))
(= "AcLyLayerFilter" (cdr (assoc 1 itm))))
(setq rtn (cons (cons (cdr (assoc 300 itm)) (foo itm)) rtn))
)
)
)
(reverse rtn)
)
)
)
;;;範例:
; _$ (LM:grouplayerfilters)
; (("Group Filter1" ("Group Filter4") ("Group Filter5")) ("Group Filter2" ("Group Filter6")) ("Group Filter3"))
留言
張貼留言