我有这个由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
|