正常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))
    )
  )




网友答:
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)
)
  • 上一篇:CAD性能测试图
  • 下一篇:没有了