184632152 发表于 2025-1-6 16:55:50

框选标注修改

各位大佬,我搞了一个框选修改标注的代码,但新生成的标注样式的全局比例没办法跟着变动?
(defun c:GH (/ ss factor styleName baseStyleName)
; 框选图形,
(setq ss (ssget))
(if ss
    (progn
      ; 提示用户输入比例因子,并将结果存储在 factor 变量中
      (setq factor (getreal "\n请输入比例因子: "))
      ; 根据比例因子生成新的标注样式名称,格式为 DIM+比例因子
      (setq styleName (strcat "DIM" (rtos factor)))
      ; 检查生成的标注样式是否存在
      (if (tblsearch "DIMSTYLE" styleName)
      (progn
          ; 如果存在,使用 command 函数将该标注样式设置为当前样式
          (command "DIMSTYLE" "R" styleName "")
          ; 仅对之前选择的对象应用标注更新
          (command "DIMSTYLE" "APPLY" ss "")
          ; 刷新视图
          (command "regen")
      )
      (progn
          ; 查找基础样式 DIM1 是否存在
          (setq baseStyleName (tblsearch "DIMSTYLE" "DIM1"))
          (if baseStyleName
            (progn
            ; 复制 DIM1 为新样式
            (command "_DIMSTYLE" "" "DIM1" styleName)
            ; 将新样式设置为当前样式
            (command "DIMSTYLE" "S" styleName)
            )
            ; 如果基础样式 DIM1 不存在,输出相应错误信息
            (princ "\n基础样式 DIM1 不存在,无法创建新样式.")
          )
          ; 设置全局比例因子
          (setvar "DIMSCALE" factor)
          ; 调用 modifyDimStyle 函数修改标注样式的比例因子
          (modifyDimStyle (getvar "DIMSTYLE") factor)
          ; 仅对之前选择的对象应用标注更新
          (command "DIMSTYLE" "APPLY" ss "")
          ; 刷新视图
          (command "regen")
      )
      )
    )
    ; 如果未框选图形,输出相应信息
    (princ "\n未框选图形.")
)
(princ)
)



(defun modifyDimStyle (dimstyle value)
; 获取标注样式的对象名称
(setq dimObjName (tblobjname "DIMSTYLE" dimstyle))
; 将对象名称转换为实体对象
(setq dimObj (entget dimObjName))
; 查找 DIMSCALE 的组码在标注样式对象中的位置
(setq dimscaleIndex (assoc 40 dimObj))
; 修改 DIMSCALE 的值
(setq dimObj (subst (cons 40 value) dimscaleIndex dimObj))
; 更新标注样式对象
(entmod dimObj)
)
页: [1]
查看完整版本: 框选标注修改