树櫴希德
发表于 2019-9-14 17:00:42
;; =================================================================
;;; 块替换;选择源块A,然后选择需要替换成块A的块B,再选择一个区域,然后把这个区域里的块B换成块A
;;; 作者:langjs 命令:KTH 日期2011年3月22日
;;; =================================================================
(defun C:KTH (/ ent ent1 ent2 i kming1 kming2 lst name1 name2 pt ss t1)
(setvar "cmdecho" 0) ; 关闭命令响应
(setq $orr *error*)
(setq *error* #err2) ; 当程序出错时就会执行#err函数
(command ".UNDO" "BE") ; 设置UNDO起点
(setq t1 1)
(while (= t1 1)
(setq name1 (car (entsel "\n选择源块A:")))
(setq ent1 (entget name1))
(if (= (cdr (assoc 0 ent1)) "INSERT")
(progn
(setq kming1 (cdr (assoc 2 ent1)))
(redraw name1 3)
(setq t1 2)
)
(princ "\n选择源块A:")
)
)
(while (= t1 2)
(setq name2 (car (entsel "\n选择替换块B:")))
(setq ent2 (entget name2))
(if (= (cdr (assoc 0 ent2)) "INSERT")
(progn
(setq kming2 (cdr (assoc 2 ent2)))
(redraw name2 3)
(setq t1 3)
)
(princ "\n选择替换块B:")
)
)
(while (= t1 3)
(prompt "\n选择替换区域:")
(setvar "nomutt" 1)
(setq ss (ssget (list (cons 2 kming2))))
(setvar "nomutt" 0)
(if ss
(setq t1 4)
)
)
(redraw name1 4)
(redraw name2 4)
(setq lst '())
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i))))
(setq ent (entget ent))
(setq lst (cons (cdr (assoc 10 ent)) lst))
)
(command "erase" ss "") ; 删除块
(setq i 0)
(while (< i (length lst))
(setq PT (nth i lst))
(command "INSERT" kming1 PT 1 1 0) ; 插入块,
(nth i lst)
(setq i (+ i 1))
)
(command ".UNDO" "E") ; 设置UNDO终点
(setq *error* $orr)
(princ)
)
;;; 出错处理函数
(defun #err2 (s)
(command ".UNDO" "E") ; 设置UNDO终点
(redraw name1 4)
(redraw name2 4)
(princ)
(setq *error* $orr)
)
T改T1 行吗 大神
tianbeiyuan
发表于 2019-11-23 22:28:41
先收藏了,好东西啊
wzxcad
发表于 2019-12-14 17:04:18
正在学习相关块的知识
78946299
发表于 2022-4-15 18:41:48
块可以直接替换块,就像格式刷一样,万物皆可刷。
ZJKUSO
发表于 2022-6-17 15:26:36
贱人工具箱应该就是加入了这个功能,替换后块比例变小了
meja
发表于 2024-1-18 16:17:37
78946299 发表于 2022-4-15 18:41
块可以直接替换块,就像格式刷一样,万物皆可刷。
这是一个很牛的插件啊!
ferious
发表于 2024-10-14 09:23:14
狼大哥 6666666666666666666666666666666666666666666666666666666666666666666666666
ferious
发表于 2024-10-14 09:27:23
加载错误?帮忙看下