将选定块移动到sp
嘿,好了,我正试图找到一种方法来简化一个过程,这应该在每一张图纸中完成,我需要清理大量的图纸,这是真正的混乱。问题是,你可以在几个层中找到一个块,例如,当块“门”只能在其层“门”中找到时,你可以在几个不相关的层中找到它,墙上有墙、楼梯和儿子,并且需要太多的时间才能将所有这些都转移到适当的层。
是否有任何lisp或方法使其更容易?我的意思是一个lisp,你可以选择几个相关的块(不同的门块),并将它们全部转移到一个特定的层(门层)。
谢谢 这可以使用过滤器完成,只需选择一个块并删除属性,如图层和插入,然后它将找到所有具有此名称的块,然后只需打开属性并选择正确的图层。
谢谢你的回复,我已经使用了Filter,这是一个方便的命令。重点是通过使用Filter,你几乎可以选择你想要的所有块,但是当你在一个脏的绘图块上工作时,块可能会相互阻塞,你需要先分解它们,然后处理它们,有时由于意外的问题会导致另一个混乱。。。。我只是想知道是否有人有更好的方法来解决这个问题。。甚至还有另一种使用快速选择的过滤器。。。。 将此作为一个示例。
笔记:
*用所需的层名称替换“我的层名称”字符串。
*您可以添加任意数量的代码来代替Block1、Block2。。。。等作为您的区块名称。
*块对象不能是动态的,否则它们将不会被选中,您需要另一个过滤器来处理此问题。
(defun c:mtl(/ ss e i)
;;; Tharwat 02.mar.2015 ;;;
(if (and (tblsearch "LAYER" "My-Layer-Name") ;;; Only one layer name here
(setq ss
(ssget "_:L" '((0 . "INSERT") (2 . "Block1,Block2,Block3")))) ;;; A list of block names separated with a comma
)
(repeat (setq i (sslength ss))
(setq e (entget (ssname ss (setq i (1- i)))))
(entmod (subst '(8 . "Layer3") (assoc 8 e) e))
)
)
(princ)
)
如果您有一个嵌套块(“wall1”中的“door1”),只需重新定义原始块(“door1”),所有块(“door1”)都将更新,包括嵌套块
非常感谢。
谢谢,我尝试了你的代码,但在我编写命令-MTL时,它根本不起作用-什么都没有发生,命令行已经为新命令做好了准备。。。如果你能修改它,那就太好了。非常感谢。
顺便说一句,我不能感激你的好意。。。 您是否更改了红色和蓝色的代码以匹配您的dwg?
不客气
您只是更改了程序的命令名,没有更改我指示的突出显示的单词。
我怀疑你是否读过我早些时候在节目的同一帖子中写的笔记
嘿。。。
我很抱歉你是对的,我的错。。。我完全按照你说的做了,它成功了,再次谢谢。。。但是,不是将我的块插入到给定的层名称(06门),而是将它们全部插入到一个名为“Layer3”的层中,这个名称以前不存在。 尝试以下程序,更改突出显示的部分以适合:
(defun c:blklaymap ( / enx idx lay map sel )
(setq
map
'(
("Door" . "Door Layer")
("Wall" . "Wall Layer")
)
map (mapcar '(lambda ( x ) (cons (strcase (car x)) (cdr x))) map)
)
(if
(setq sel
(ssget "_X"
(append
'(
( 0 . "INSERT")
(-4 . "<OR")
( 2 . "`*U*")
)
(mapcar '(lambda ( x ) (cons 2 (car x))) map)
'(
(-4 . "OR>")
)
)
)
)
(repeat (setq idx (sslength sel))
(setq enx (entget (ssname sel (setq idx (1- idx)))))
(if (setq lay (cdr (assoc (strcase (LM:name->effectivename (cdr (assoc 2 enx)))) map)))
(entmod (subst (cons 8 lay) (assoc 8 enx) enx))
)
)
)
(princ)
)
;; Block Name -> Effective Block Name-Lee Mac
;; blk - Block name
(defun LM:name->effectivename ( blk / rep )
(if
(and (wcmatch blk "`**")
(setq rep
(cdadr
(assoc -3
(entget
(cdr (assoc 330 (entget (tblobjname "block" blk))))
'("AcDbBlockRepBTag")
)
)
)
)
(setq rep (handent (cdr (assoc 1005 rep))))
)
(cdr (assoc 2 (entget rep)))
blk
)
)
(princ)
页:
[1]
2