lisp修改
我有这个由kpblc编写的lisp,它将所有内容都包含在一个块中,并将其属性更改为“按层”。效果很好,除了属性,然后你必须返回并分别对每个块进行attsync,是否有一种使用lisp的方法可以同时对dwg中的所有块进行attsync,并将其添加到下面的lisp中,或者仅使用一个单独的lisp来执行此操作,或者完全缺少一个命令。另一个问题是多行文字,如果在“多行文字编辑器”对话框中选择了多行文字颜色,是否有方法将其更改回“按层”而不单独进入每个多行文字,也可以将其添加到该lisp中,但您有一个单独的lisp也可以做同样的事情。我对lisp有一点了解,所以我可以添加到我的lisp中,以便它在最后调用其他lisp来引入这些。Author kpblc
changes all blocks inserted in a dwg from by block/color to by layer.
(defun c:norm (/ *error* adoc lst_layer func_restore-layers)
(defun *error* (msg)
(func_restore-layers)
(vla-endundomark adoc)
(princ msg)
(princ)
) ;_ end of defun
(defun func_restore-layers ()
(foreach item lst_layer
(vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
(vl-catch-all-apply
'(lambda ()
(vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
) ;_ end of lambda
) ;_ end of vl-catch-all-apply
) ;_ end of foreach
) ;_ end of defun
(vl-load-com)
(vla-startundomark
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
) ;_ end of vla-startundomark
(vlax-for item (vla-get-layers adoc)
(setq lst_layer (cons (list item
(cons "lock" (vla-get-lock item))
(cons "freeze" (vla-get-freeze item))
) ;_ end of list
lst_layer
) ;_ end of cons
) ;_ end of setq
(vla-put-lock item :vlax-false)
(vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false)))
) ;_ end of vlax-for
(vlax-for blk (vla-get-blocks adoc)
(if (and (equal (vla-get-islayout blk) :vlax-false)
(equal (vla-get-isxref blk) :vlax-false)
) ;_ end of and
(progn
(vlax-for subent blk
;(vla-put-layer subent "0");edit-> removed force to layer 0
(vla-put-color subent 256)
(vla-put-lineweight subent aclnwtbyblock)
(vla-put-linetype subent "byblock")
) ;_ end of vlax-for
) ;_ end of progn
) ;_ end of if
) ;_ end of vlax-for
(func_restore-layers)
(vla-endundomark adoc)
(command "_regenall")
(princ)
) ;_ end of defun 巴特曼和同步按钮的工作速度有点快,然后attsync每一个单独的块,但仍在寻找一些方法来做到这一切一次 Attsync>N>*
很简单,谢谢李。对多行文字问题有什么想法吗? 看看这个。 谢谢alan这很有魅力 乔和史蒂夫做得很好。
页:
[1]