尝试使用
- (defun layer-filters-status-change
- (lstnames / vla:lrs vla:xdic vla:dic vla:spsc name datatype datavalue onoff sps)
- (setq lstnames (list lstnames))
- ;|=======================================================================================
- * layer-filters-status-change
- * http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=34&TID=20414&MID=114022#message114022
- * Arguments [Type]:
- lstnames = String - the name of the group filter
- * Return [Type]:
- nil
- *
- * If at least one layer group filter is turned off, all the layers of the filter are also included
- * Use:
- ^C^C(if (not layer-filters-status-change)(load "layer-filters-status-change"))(layer-filters-status-change "AT")
- * Create command (on\off group filters AT): (defun C:AT ()(layer-filters-status-change "AT"))
- * Macros:
- * 'AT;
- =======================================================================================|;
- (defun massoc (key alist / x nlist)
- (foreach x alist
- (if (eq key (car x))(setq nlist (cons (cdr x) nlist))))
- (reverse nlist))
- (vl-load-com)
- (setq vla:lrs (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
- (if (= (vla-get-hasextensiondictionary vla:lrs) :vlax-true)
- (progn
- (setq lstnames (mapcar 'strcase lstnames))
- (setq vla:xdic (vla-getextensiondictionary vla:lrs))
- (setq vla:dic nil)
- (if (progn (vlax-for item vla:xdic
- (if (= (vla-get-name item) "ACLYDICTIONARY")
- (setq vla:dic item)
- ) ;_ if
- ) ;_ vlax-for
- vla:dic
- ) ;_ progn
- (progn
- (vlax-for vla:spsc vla:dic
- (if
- (progn
- (setq name (vla-get-name vla:spsc))
- (vla-getxrecorddata vla:spsc 'datatype 'datavalue)
- (member (strcase (vlax-variant-value
- (vlax-safearray-get-element
- datavalue
- (vl-position 300 (vlax-safearray->list datatype))
- ) ;_ vlax-safearray-get-element
- ) ;_ vlax-variant-value
- ) ;_ strcase
- lstnames
- ) ;_ member
- ) ;_ progn
- (progn
- (setq sps (entget(vlax-vla-object->ename vla:spsc))
- sps (massoc 330 (member (assoc 300 sps) sps))
- sps (vl-remove-if 'null (mapcar 'entget sps))
- sps (mapcar '(lambda (x)(cons (cdr(assoc 2 x))(cdr(assoc 62 x)))) sps))
- (if (vl-member-if '(lambda (x)(minusp (cdr x))) sps)
- (setq onoff :vlax-true)
- (setq onoff :vlax-false)
- )
- (setq sps (mapcar '(lambda (x)(vla-Item vla:lrs x)) (mapcar 'car sps)))
- (mapcar '(lambda (x)(vla-put-layeron x onoff)) sps)
-
- ) ;_ progn
- ) ;_ if
- ) ;_ vlax-for
- (vlax-release-object vla:dic)
- )
- ) ;_ if
- (vlax-release-object vla:xdic)
- ) ;_ progn
- ) ;_ if
- (vlax-release-object vla:lrs)
- (princ)
- )
如何工作
1.创建图层组过滤器(例如,名称为AT)
2.创建命令
- (defun C:AT ()(layer-filters-status-change "AT"))
3.键入命令行AT或“AT” |