生成可见性状态
LISP有没有生成可见性状态的方法?如果是。。。然后可以从dwg文件(1个文件=1个块)导入块定义
我正在按类别将许多块组合成更少的块。
(谷歌完全忽略了“生成”或“创建”搜索词。我发现了很多“设置动态”链接) 不确定它应该如何工作,也不确定要将哪些对象添加到特定的可见性中,因此请尝试使用这个例子。
首先,在图形中插入一些静态块。
然后运行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可能无法删除它。 谢谢看起来和我需要的一模一样。
页:
[1]