不确定它应该如何工作,也不确定要将哪些对象添加到特定的可见性中,因此请尝试使用这个例子。
首先,在图形中插入一些静态块。
然后运行lisp并选择块。lisp将创建一个具有Vis状态的新块,每个状态代表一个选定的块。
给你,又快又脏。
- ;Create Dynamic Block w/ visibility
- ;Stefan M. 10.08.2018
- (defun c:test ( / msg ss nb i bn lst)
- (if
- (and
- (setq ss (ssget '((0 . "INSERT"))))
- (setq nb (getstring "\nSpecify new block name: "))
- (setq msg "\nInvalid name")
- (snvalid nb)
- (setq msg "\nBlock already defined")
- (not (tblsearch "block" nb))
- )
- (progn
- (repeat (setq i (sslength ss))
- (setq bn (cdr (assoc 2 (entget (ssname ss (setq i (1- i)))))))
- (if (not (member bn lst))
- (setq lst (cons bn lst))
- )
- )
- (command "_bedit" nb)
- (command "_bparameter" "_visibility" '(0.0 -10 0.0) "1")
- (foreach x lst
- (command "_bvstate" "_new" x "_hide")
- (entmakex (list '(0 . "INSERT") (cons 2 x) '(10 0.0 0.0 0.0)))
- )
- (command "_bvstate" "_set" (car lst))
- (command "_bvstate" "_delete" "VisibilityState0")
- (command "_bsave")
- (command "_bclose")
- (command "_insert" nb "_s" 1.0 "_r" 0.0)
- (while (> (getvar 'cmdactive) 0)
- (command pause)
- )
- )
- (if msg (alert msg))
- )
- (princ)
- )
另外,lisp正在我的电脑上运行。然而,它可能需要一些检查例程。例如,我可以想象,如果使用非英语autocad,第一个可见性状态的默认名称可能不是“VisibilityState0”,因此我的lisp可能无法删除它。 |