- 积分
- 15724
- 明经币
- 个
- 注册时间
- 2016-1-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
选中图块A,选中要替换的图块集ss,将ss每个图块替换为图块A,保留ss图块所在的图层,角度,比例
(defun c:ReplaceBlocksKeepAttrs (/ srcBlockName ss i targetEnt targetData)
;; 1. 让用户选择一个源(模板)图块
(prompt "\n选择源(模板)图块:")
(setq srcBlockEnt (car (entsel)))
(if srcBlockEnt
(progn
;; 获取源图块的名称(即它的 block name)
(setq srcBlockName (cdr (assoc 2 (entget srcBlockEnt))))
;; 2. 让用户批量选择要替换的目标图块
(prompt "\n选择要替换的目标图块:")
(setq ss (ssget '((0 . "INSERT")))) ; 只选 INSERT(即块)
;; 3. 遍历所有目标图块,替换它们的名称,但保留它们的比例、旋转和图层
(if ss
(progn
(setq i 0)
(repeat (sslength ss)
;; 获取当前目标图块的实体数据
(setq targetEnt (ssname ss i))
(setq targetData (entget targetEnt))
;; 修改目标数据:仅替换 block name(2),但保留其他属性:
;; - X/Y/Z scale(41,42,43)
;; - Rotation(50)
;; - Layer(8)
;; - etc.
(entmod
(subst
(cons 2 srcBlockName) ; 替换成源 block name
(assoc 2 targetData) ; 原来的 block name
targetData
)
)
;; 更新实体显示
(entupd targetEnt)
;; 计数器递增
(setq i (+ i 1))
)
;; 完成提示
(prompt "\n成功替换所有目标图块!")
)
;; ss = nil(用户没选任何东西)
(prompt "\n未选择任何目标图块。")
)
)
;; srcBlockEnt = nil(用户没选任何东西)
(prompt "\n未选择源(模板)图块。")
)
;; 静默退出
(princ)
)
|
评分
-
查看全部评分
|