TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: MvdP on January 19, 2011, 11:52:46 AM
-
I have found this lisp here on the Swamp to create layer filters.All layer filters are created so that part working.
But here is our issue we are having.
All our comany layers are starting with 0,1,2,3,4,5,6,7,8 and 9
All our xref's start with a four number digit. (company project number)
Lets say a xref start with 1909 what_so_ever.dwg it is displayed in layer filer group 10
Lets say a xref start with 2002 what_so_ever.dwg it is displayed in layer filer group 20
Lets say a xref start with 3525 what_so_ever.dwg it is displayed in layer filer group 30
We only want to see the layers from current drawing in the specific layer filter and non off the xref layers
Is this possible .?
; MLF.lsp
; December 2010 (The swamp.org)
;====================================================================================================
(defun c:MLF(/ FILTLST LFILTOBJ SAFECODE SAFEFILT)
(vl-load-com)
(setq FILTLST (list
;;name Lay col lt flags lw plot
(list "Group_00" "0*" "*" "*" 0 "*" "*")
(list "Group_10" "1*" "*" "*" 0 "*" "*")
(list "Group_20" "2*" "*" "*" 0 "*" "*")
(list "Group_30" "3*" "*" "*" 0 "*" "*")
(list "Group_40" "4*" "*" "*" 0 "*" "*")
(list "Group_50" "5*" "*" "*" 0 "*" "*")
(list "Group_60" "6*" "*" "*" 0 "*" "*")
(list "Group_70" "7*" "*" "*" 0 "*" "*")
(list "Group_80" "8*" "*" "*" 0 "*" "*")
(list "Group_90" "9*" "*" "*" 0 "*" "*")
)
LFILTOBJ (vla-addobject
(vla-GetExtensionDictionary
(vla-Get-Layers
(vla-Get-ActiveDocument
(vlax-Get-Acad-Object)
)
)
)
"ACAD_LAYERFILTERS"
"AcDbDictionary"
)
SAFECODE (vlax-make-safearray 2 '(0 . 6))
SAFEFILT (vlax-make-safearray 12 '(0 . 6))
)
(vlax-safearray-fill SAFECODE (list 1 1 1 1 70 1 1))
(foreach
SUBLST FILTLST
(vlax-safearray-fill
SAFEFILT
(mapcar '(lambda (X) (vlax-make-variant X 8)) SUBLST)
)
(vla-addxrecord LFILTOBJ (nth 0 SUBLST))
(vla-setxrecorddata
(vla-item LFILTOBJ (nth 0 SUBLST))
SAFECODE
SAFEFILT
)
)
(princ)
(princ "\nAll Layer Filters have been created.")
(princ)
)
-
Might want to take a look at this little gem. :-)
http://www.theswamp.org/index.php?topic=12640.msg154978#msg154978
-
If this "and non off the xref layers" = "and none of the xref layers" then all you do is add "~*|*,1*" to your name filter.
Using Michael's code:
(defun c:mlf (/ dict xdict lst x)
(setq xdict (vlax-vla-object->ename
(vla-getextensiondictionary
(vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
)
)
)
(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)))
)
)
)
(foreach x '(;;name Lay col lt flags lw plot
("Group_00" "~*|*,0*" "*" "*" 0 "*" "*")
("Group_10" "~*|*,1*" "*" "*" 0 "*" "*")
("Group_20" "~*|*,2*" "*" "*" 0 "*" "*")
("Group_30" "~*|*,3*" "*" "*" 0 "*" "*")
("Group_40" "~*|*,4*" "*" "*" 0 "*" "*")
("Group_50" "~*|*,5*" "*" "*" 0 "*" "*")
("Group_60" "~*|*,6*" "*" "*" 0 "*" "*")
("Group_70" "~*|*,7*" "*" "*" 0 "*" "*")
("Group_80" "~*|*,8*" "*" "*" 0 "*" "*")
("Group_90" "~*|*,9*" "*" "*" 0 "*" "*")
)
(dictadd dict
(car x)
(entmakex (list '(0 . "xrecord")
'(100 . "AcDbXrecord")
'(280 . 1)
(cons 1 (car x))
(cons 1 (cadr x))
(cons 1 (caddr x))
(cons 1 (nth 3 x))
(cons 70 (nth 4 x))
(cons 1 (nth 5 x))
(cons 1 (nth 6 x))
)
)
)
)
(princ)
)
(c:mlf)
-
When use this
("Group_10" "~*|*,1*" "*" "*" 0 "*" "*")
and load an xref starting with an 1 and make that group active all layers are shown (layers in current drawing and all from xref) in the layer manager
-
Hmmm you're right ... guess I should have tested it out :-D