chelsea1307 发表于 2022-7-6 11:20:03

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

chelsea1307 发表于 2022-7-6 11:37:21

巴特曼和同步按钮的工作速度有点快,然后attsync每一个单独的块,但仍在寻找一些方法来做到这一切一次

Lee Mac 发表于 2022-7-6 11:46:46

Attsync>N>*
 
 
 

chelsea1307 发表于 2022-7-6 11:51:15

很简单,谢谢李。对多行文字问题有什么想法吗?

alanjt 发表于 2022-7-6 12:06:16

看看这个。

chelsea1307 发表于 2022-7-6 12:11:17

谢谢alan这很有魅力

alanjt 发表于 2022-7-6 12:23:24

乔和史蒂夫做得很好。
页: [1]
查看完整版本: lisp修改