正常MATCHPROP就能满足但是一张图里如果有 不同比例因子的就不能用格式刷了。该插件能同时修改框选内的 文字 和引线。
(defun c:dma ()
(setq ys_e (car (entsel)))
(setq ty1 (entget ys_e))
(if(/= (cdr (assoc 0 ty1)) "DIMENSION")
(progn
(print "数据类型错误")(exit)
)
)
(setq ty_sty_name (cdr (assoc 3 ty1)))
(setq jtdx (cdr (assoc 41 (tblsearch "DIMSTYLE" ty_sty_name))))
(setq wzgd (cdr (assoc 140 (tblsearch "DIMSTYLE" ty_sty_name))))
(setq yt_blyz (cdr (assoc 144 (tblsearch "DIMSTYLE" ty_sty_name))))
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
(setq e_e (ssname ss i))
(setq e_e_e (entget e_e))
(if (and (= "DIMENSION" (cdr (assoc 0 e_e_e))) (= yt_blyz (cdr (assoc 144 (tblsearch "DIMSTYLE" (cdr (assoc 3 e_e_e)))))))
(progn
(command "MATCHPROP" ys_e e_e "")
)
(progn
(command ".-DIMSTYLE" "_Restore" (cdr (assoc 3 (entget e_e))))
(setq ys_jddx (getvar "DIMASZ"))
(setq ys_wzgd (getvar "DIMTXT"))
(setvar "DIMASZ" jtdx)
(setvar "DIMTXT"wzgd)
(command "._-DIMSTYLE" "_Apply" (ssname ss i) "")
(setvar "DIMASZ" ys_jddx)
(setvar "DIMTXT"ys_wzgd)
)
)
(if (= (cdr (assoc 0 e_e_e)) "MULTILEADER")
(progn
(setq e_e_e (subst (cons 41 wzgd) (assoc 41 e_e_e) e_e_e))
(setq e_e_e (subst (cons 140 jtdx) (assoc 140 e_e_e) e_e_e))
(entmod e_e_e)
)
)
(if (= (cdr (assoc 0 e_e_e)) "MTEXT")
(progn
(setq e_e_e (subst (cons 40 wzgd) (assoc 40 e_e_e) e_e_e))
(entmod e_e_e)
)
)
(setq i (1+ i))
)
)
网友答:
数据类型错误网友答: 太酷了 我很喜欢网友答: 感谢楼主分享!!!网友答: 感谢热心分享!网友答: 感谢楼主分享网友答: 感谢爱心群主
网友答:
功能蛮不错的,我的设置了全局比例,刷文字的时候用不了
网友答: deepseek修改完能用了,原来你那个我没有好
(defun c:dma (/ ys_e ty1 ty_sty_name jtdx wzgd yt_blyz ss i e_e e_e_e
ys_jddx ys_wzgd dimstyle_data entity_type target_style_name
target_dimstyle_data target_yt_blyz)
(vl-load-com) ; 确保Visual LISP函数可用
; 选择源标注
(princ "\n选择源标注: ")
(setq ys_e (car (entsel)))
(if (null ys_e)
(progn
(princ "\n未选择源标注。")
(exit)
)
)
(setq ty1 (entget ys_e))
; 检查是否为标注
(if (/= (cdr (assoc 0 ty1)) "DIMENSION")
(progn
(princ "\n错误:请选择标注对象作为源对象。")
(exit)
)
)
; 获取源标注样式信息
(setq ty_sty_name (cdr (assoc 3 ty1)))
(setq dimstyle_data (tblsearch "DIMSTYLE" ty_sty_name))
(if (null dimstyle_data)
(progn
(princ (strcat "\n错误:找不到标注样式 " ty_sty_name "。"))
(exit)
)
)
(setq jtdx (cdr (assoc 41 dimstyle_data))) ; 箭头大小
(setq wzgd (cdr (assoc 140 dimstyle_data))) ; 文字高度
(setq yt_blyz (cdr (assoc 144 dimstyle_data))) ; 全局比例
; 显示提取的信息
(princ (strcat "\n从源标注提取 - 箭头大小: " (rtos jtdx)
", 文字高度: " (rtos wzgd)
", 全局比例: " (rtos yt_blyz)))
; 选择目标对象 - 使用while循环确保用户选择
(setq ss nil)
(while (null ss)
(princ "\n选择目标对象(标注/引线/文字): ")
(setq ss (ssget '((0 . "DIMENSION,MULTILEADER,MTEXT"))))
(if (null ss)
(princ "\n请选择至少一个对象,或按ESC取消。")
)
)
(princ (strcat "\n选择了 " (itoa (sslength ss)) " 个对象进行处理。"))
(setq i 0)
(repeat (sslength ss)
(setq e_e (ssname ss i))
(setq e_e_e (entget e_e))
(setq entity_type (cdr (assoc 0 e_e_e)))
(cond
; 处理标注
((= entity_type "DIMENSION")
(setq target_style_name (cdr (assoc 3 e_e_e)))
(setq target_dimstyle_data (tblsearch "DIMSTYLE" target_style_name))
(if target_dimstyle_data
(setq target_yt_blyz (cdr (assoc 144 target_dimstyle_data)))
(setq target_yt_blyz 1.0)
)
; 如果全局比例相同,使用特性匹配
(if (equal yt_blyz target_yt_blyz 1e-6)
(progn
(command "._MATCHPROP" ys_e e_e "")
(while (> (getvar "CMDACTIVE") 0)
(command "")
)
)
; 否则直接修改标注样式变量
(progn
; 保存当前标注变量
(setq ys_jddx (getvar "DIMASZ"))
(setq ys_wzgd (getvar "DIMTXT"))
; 设置新值
(setvar "DIMASZ" jtdx)
(setvar "DIMTXT" wzgd)
; 应用标注样式
(command "._-DIMSTYLE" "_Apply" e_e "")
(while (> (getvar "CMDACTIVE") 0)
(command "")
)
; 恢复原值
(setvar "DIMASZ" ys_jddx)
(setvar "DIMTXT" ys_wzgd)
)
)
(princ (strcat "\n已处理标注 " (itoa (1+ i))))
)
; 处理多重引线
((= entity_type "MULTILEADER")
(if (assoc 41 e_e_e)
(setq e_e_e (subst (cons 41 wzgd) (assoc 41 e_e_e) e_e_e))
(setq e_e_e (append e_e_e (list (cons 41 wzgd))))
)
(if (assoc 140 e_e_e)
(setq e_e_e (subst (cons 140 jtdx) (assoc 140 e_e_e) e_e_e))
(setq e_e_e (append e_e_e (list (cons 140 jtdx))))
)
(entmod e_e_e)
(princ (strcat "\n已处理多重引线 " (itoa (1+ i))))
)
; 处理多行文字
((= entity_type "MTEXT")
(if (assoc 40 e_e_e)
(setq e_e_e (subst (cons 40 wzgd) (assoc 40 e_e_e) e_e_e))
(setq e_e_e (append e_e_e (list (cons 40 wzgd))))
)
(entmod e_e_e)
(princ (strcat "\n已处理多行文字 " (itoa (1+ i))))
)
)
(setq i (1+ i))
)
(princ (strcat "\n处理完成,共处理 " (itoa i) " 个对象。"))
(princ)
)
(defun c:dma ()
(setq ys_e (car (entsel)))
(setq ty1 (entget ys_e))
(if(/= (cdr (assoc 0 ty1)) "DIMENSION")
(progn
(print "数据类型错误")(exit)
)
)
(setq ty_sty_name (cdr (assoc 3 ty1)))
(setq jtdx (cdr (assoc 41 (tblsearch "DIMSTYLE" ty_sty_name))))
(setq wzgd (cdr (assoc 140 (tblsearch "DIMSTYLE" ty_sty_name))))
(setq yt_blyz (cdr (assoc 144 (tblsearch "DIMSTYLE" ty_sty_name))))
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
(setq e_e (ssname ss i))
(setq e_e_e (entget e_e))
(if (and (= "DIMENSION" (cdr (assoc 0 e_e_e))) (= yt_blyz (cdr (assoc 144 (tblsearch "DIMSTYLE" (cdr (assoc 3 e_e_e)))))))
(progn
(command "MATCHPROP" ys_e e_e "")
)
(progn
(command ".-DIMSTYLE" "_Restore" (cdr (assoc 3 (entget e_e))))
(setq ys_jddx (getvar "DIMASZ"))
(setq ys_wzgd (getvar "DIMTXT"))
(setvar "DIMASZ" jtdx)
(setvar "DIMTXT"wzgd)
(command "._-DIMSTYLE" "_Apply" (ssname ss i) "")
(setvar "DIMASZ" ys_jddx)
(setvar "DIMTXT"ys_wzgd)
)
)
(if (= (cdr (assoc 0 e_e_e)) "MULTILEADER")
(progn
(setq e_e_e (subst (cons 41 wzgd) (assoc 41 e_e_e) e_e_e))
(setq e_e_e (subst (cons 140 jtdx) (assoc 140 e_e_e) e_e_e))
(entmod e_e_e)
)
)
(if (= (cdr (assoc 0 e_e_e)) "MTEXT")
(progn
(setq e_e_e (subst (cons 40 wzgd) (assoc 40 e_e_e) e_e_e))
(entmod e_e_e)
)
)
(setq i (1+ i))
)
)
网友答:
qd001 发表于 2025-9-6 16:03
感谢爱心群主
数据类型错误网友答: 太酷了 我很喜欢网友答: 感谢楼主分享!!!网友答: 感谢热心分享!网友答: 感谢楼主分享网友答: 感谢爱心群主
网友答:
功能蛮不错的,我的设置了全局比例,刷文字的时候用不了网友答: deepseek修改完能用了,原来你那个我没有好
(defun c:dma (/ ys_e ty1 ty_sty_name jtdx wzgd yt_blyz ss i e_e e_e_e
ys_jddx ys_wzgd dimstyle_data entity_type target_style_name
target_dimstyle_data target_yt_blyz)
(vl-load-com) ; 确保Visual LISP函数可用
; 选择源标注
(princ "\n选择源标注: ")
(setq ys_e (car (entsel)))
(if (null ys_e)
(progn
(princ "\n未选择源标注。")
(exit)
)
)
(setq ty1 (entget ys_e))
; 检查是否为标注
(if (/= (cdr (assoc 0 ty1)) "DIMENSION")
(progn
(princ "\n错误:请选择标注对象作为源对象。")
(exit)
)
)
; 获取源标注样式信息
(setq ty_sty_name (cdr (assoc 3 ty1)))
(setq dimstyle_data (tblsearch "DIMSTYLE" ty_sty_name))
(if (null dimstyle_data)
(progn
(princ (strcat "\n错误:找不到标注样式 " ty_sty_name "。"))
(exit)
)
)
(setq jtdx (cdr (assoc 41 dimstyle_data))) ; 箭头大小
(setq wzgd (cdr (assoc 140 dimstyle_data))) ; 文字高度
(setq yt_blyz (cdr (assoc 144 dimstyle_data))) ; 全局比例
; 显示提取的信息
(princ (strcat "\n从源标注提取 - 箭头大小: " (rtos jtdx)
", 文字高度: " (rtos wzgd)
", 全局比例: " (rtos yt_blyz)))
; 选择目标对象 - 使用while循环确保用户选择
(setq ss nil)
(while (null ss)
(princ "\n选择目标对象(标注/引线/文字): ")
(setq ss (ssget '((0 . "DIMENSION,MULTILEADER,MTEXT"))))
(if (null ss)
(princ "\n请选择至少一个对象,或按ESC取消。")
)
)
(princ (strcat "\n选择了 " (itoa (sslength ss)) " 个对象进行处理。"))
(setq i 0)
(repeat (sslength ss)
(setq e_e (ssname ss i))
(setq e_e_e (entget e_e))
(setq entity_type (cdr (assoc 0 e_e_e)))
(cond
; 处理标注
((= entity_type "DIMENSION")
(setq target_style_name (cdr (assoc 3 e_e_e)))
(setq target_dimstyle_data (tblsearch "DIMSTYLE" target_style_name))
(if target_dimstyle_data
(setq target_yt_blyz (cdr (assoc 144 target_dimstyle_data)))
(setq target_yt_blyz 1.0)
)
; 如果全局比例相同,使用特性匹配
(if (equal yt_blyz target_yt_blyz 1e-6)
(progn
(command "._MATCHPROP" ys_e e_e "")
(while (> (getvar "CMDACTIVE") 0)
(command "")
)
)
; 否则直接修改标注样式变量
(progn
; 保存当前标注变量
(setq ys_jddx (getvar "DIMASZ"))
(setq ys_wzgd (getvar "DIMTXT"))
; 设置新值
(setvar "DIMASZ" jtdx)
(setvar "DIMTXT" wzgd)
; 应用标注样式
(command "._-DIMSTYLE" "_Apply" e_e "")
(while (> (getvar "CMDACTIVE") 0)
(command "")
)
; 恢复原值
(setvar "DIMASZ" ys_jddx)
(setvar "DIMTXT" ys_wzgd)
)
)
(princ (strcat "\n已处理标注 " (itoa (1+ i))))
)
; 处理多重引线
((= entity_type "MULTILEADER")
(if (assoc 41 e_e_e)
(setq e_e_e (subst (cons 41 wzgd) (assoc 41 e_e_e) e_e_e))
(setq e_e_e (append e_e_e (list (cons 41 wzgd))))
)
(if (assoc 140 e_e_e)
(setq e_e_e (subst (cons 140 jtdx) (assoc 140 e_e_e) e_e_e))
(setq e_e_e (append e_e_e (list (cons 140 jtdx))))
)
(entmod e_e_e)
(princ (strcat "\n已处理多重引线 " (itoa (1+ i))))
)
; 处理多行文字
((= entity_type "MTEXT")
(if (assoc 40 e_e_e)
(setq e_e_e (subst (cons 40 wzgd) (assoc 40 e_e_e) e_e_e))
(setq e_e_e (append e_e_e (list (cons 40 wzgd))))
)
(entmod e_e_e)
(princ (strcat "\n已处理多行文字 " (itoa (1+ i))))
)
)
(setq i (1+ i))
)
(princ (strcat "\n处理完成,共处理 " (itoa i) " 个对象。"))
(princ)
)