Emmanuel Delay 发表于 2022-7-5 14:59:06

生成可见性状态

LISP有没有生成可见性状态的方法?
如果是。。。然后可以从dwg文件(1个文件=1个块)导入块定义
 
我正在按类别将许多块组合成更少的块。
 
(谷歌完全忽略了“生成”或“创建”搜索词。我发现了很多“设置动态”链接)

Stefan BMR 发表于 2022-7-5 15:58:21

不确定它应该如何工作,也不确定要将哪些对象添加到特定的可见性中,因此请尝试使用这个例子。
首先,在图形中插入一些静态块。
然后运行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可能无法删除它。

Emmanuel Delay 发表于 2022-7-5 16:11:46

谢谢看起来和我需要的一模一样。
页: [1]
查看完整版本: 生成可见性状态