AQucsaiJr 发表于 2022-7-6 14:20:31

合并块

我知道有一个MergeLayer命令,我想知道是否有人知道MergeBlock命令?我经常将图形从Microstations转换为ACAD,当我转换时,它们会用Microstations技术放置在图形中的“单元格”进行转换。然而,在转换过程中,ACAD会重命名转换后的ACAD图形中的一些“单元格”。例如,我基本上得到了10个完全相同的“正方形”块,标记为:正方形,正方形01,正方形02,正方形03。。。我现在使用Express工具中的块替换,它工作正常,但我想知道是否有更简单的方法,因为我通常在每个图形中有20多个这样的块,据我所知,块替换一次只能替换一个。
谢谢你的帮助。

Commandobill 发表于 2022-7-6 14:40:19

这很奇怪,我从来没有遇到过这样的问题,有时我会从microstation导出。但无论如何,你有一个例子吗?

AQucsaiJr 发表于 2022-7-6 14:56:58

这里有一个例子。
测验拉链

Commandobill 发表于 2022-7-6 15:10:47

虽然不太好看,但确实有效。。至少对我来说
;|************************************************************************
**************************************************************************
*********************A Simple Block Replace Function**********************
******************************By: ZRABOIN*********************************
**************************************************************************
************************************************************************|;
(defun c:bsw ( / rblk nblk)
(if (and (setq rblk (car (entsel "\nSelect a block with the block name you want to replace: ")))
      (setq nblk (car (entsel "\nSelect the block you would like to replace it with: ")))
      (= (cdr (assoc 0 (setq rblk (entget rblk)))) "INSERT")
      (= (cdr (assoc 0 (setq nblk (entget nblk)))) "INSERT"))
   (progn
   (setq rblk (reverse (vl-string->list (cdr (assoc 2 rblk)))))
   (while (and (> (car rblk) 48)
         (< (car rblk) 57))
   (setq rblk (cdr rblk)))
   (mapcar '(lambda (z) (vla-put-name (vlax-ename->vla-object (cadr z)) (cdr (assoc 2 nblk))))
         (ssnamex (ssget "X" (list (cons 2 (strcat (vl-list->string (reverse rblk)) "*")))))))
   (princ "\nBlock not selected! Exiting program."))
(princ)
)

AQucsaiJr 发表于 2022-7-6 15:31:39

这是可行的,但我正在寻找更像“合并层”命令的东西,在那里我可以选择可用块的列表来替换为一个块。我更喜欢一个列表,因为正如您在提供的图纸中所看到的,有许多块都需要用一个块来替换。这是我有40张同样问题的图纸之一。我希望能够找到一个LISP,可以使这比打开每个图形,并在每个块上使用块替换快速工具更容易。
页: [1]
查看完整版本: 合并块