AutoLisp切换多个
你好我刚刚开始编程,很难创建一个可以与按钮一起使用以打开或关闭多个层的程序。
关于如何开始,有什么建议吗?
迈克尔。 为什么不使用图层状态管理器?
LAYERSTATE-->恢复 通过使用图层状态可以实现相同的结果。
但是,如果要为此编写AutoLISP例程,则可以在前面的讨论中找到解决方案:
[列表]
[*]http://www.cadtutor.net/forum/showthread.php?8718
[*]http://www.cadtutor.net/forum/showthread.php?23568
[/列表] 感谢您的回复,我将查看图层状态管理器。我希望有一个按钮,这样它可以对那些习惯使用按钮的人友好,并且不太适应变化和可见性状态。
干杯
迈克尔。 可以使用以下宏创建按钮:
(command "_LAYER" "_A" "_R" LayerStateName "" "") 尝试使用
(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 :
lstnames = String - the name of the group filter
* Return :
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”
页:
[1]