将块复制到所有层
大家好,我很久没来这里了。希望你仍然像以前一样提供令人敬畏的支持。
无论如何,我想知道复制块的最快方法——比如说BLOCKX,并将其复制到所有现有层上——包括层0。
任何帮助都将不胜感激! 有COPYTOLAYER命令;或者你可以用这样的东西:
(defun c:copy2lay ( / lal lan lay sel )
(if (ssget "_:L")
(progn
(while (setq lay (tblnext "LAYER" (null lay)))
(setq lal (cons (cdr (assoc 2 lay)) lal))
)
(vlax-for obj
(setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
(setq lan (vla-get-layer obj))
(foreach lay lal
(if (/= lay lan)
(vla-put-layer (vla-copy obj) lay)
)
)
)
(vla-delete sel)
)
)
(princ)
)
(vl-load-com) (princ) 谢谢你,李。我刚刚测试过。工作起来很有魅力。如果我需要指定块名,我不确定您将如何按自己的方式进行编码。“L”-我不熟悉这条捷径。无论如何,我插入了这段代码来指定块,它运行良好。
;(如果(ssget“_:L”)
(if(setq blk(ssget“x”(列表(cons 0“插入”)(cons 2“BLOCKX”)))
你的世界末日怎么样?希望一切顺利。一如既往,我们非常感谢您的帮助和支持!
太好了,不客气。
“:L”模式字符串排除锁定层上的对象;下划线前缀确保此模式字符串在AutoCAD的所有语言版本上都有效。
您也可以简单地使用:
(if (ssget "_X" '((0 . "INSERT") (2 . "BLOCKX")))
由于程序通过ActiveX检索activeselectionset对象,因此不需要将初始选择集分配给变量;此外,过滤器列表中没有要计算的表达式,因此可以将其引用为文字列表。
但是,请注意,如果块的任何引用位于锁定层上,或者如果块是动态的,则经过修改后,程序将出错。
很好,谢谢,我希望你也一切顺利 谢谢你的解释,李!我会确保层没有被锁定,以防止发生任何错误。干杯
页:
[1]