469229020@QQ.CO 发表于 2025-3-22 09:34:28

动态改标注文字高度,动态文字高度,,两个功能!两个功能!

本帖最后由 469229020@QQ.CO 于 2025-3-23 21:52 编辑

第一个是动态标注修改文字大小高度,根据动态修改大小标注。
第二个是动态修改文字,文本高度!

amook147 发表于 2025-8-14 21:04:57

本帖最后由 amook147 于 2025-8-14 21:09 编辑

用AI写的2分钟就搞定了 。。。。 你这明经币赚的真轻松。。。




(defun c:dtwz (/ ent ename enodelist oldheight newheight pt1 pt2 dist scale
                        oldosmode oldcmdecho cmdactive grread-result done)
    ; 保存系统变量原始值
    (setq oldosmode (getvar "osmode")
          oldcmdecho (getvar "cmdecho")
          done nil; 循环控制变量
          sensitivity 20.0; 灵敏度控制值,数值越大灵敏度越低
    )
   
    ; 设置临时系统变量
    (setvar "osmode" 0)    ; 关闭对象捕捉
    (setvar "cmdecho" 0)   ; 关闭命令回显
   
    ; 局部错误处理函数
    (defun *error* (msg)
      (princ (strcat "\n错误: " msg))
      ; 恢复文字原始高度
      (if (and ename oldheight)
            (progn
                (setq enodelist (subst (cons 40 oldheight) (assoc 40 (entget ename)) (entget ename)))
                (entmod enodelist)
                (entupd ename)
            )
      )
      ; 恢复系统变量
      (setvar "osmode" oldosmode)
      (setvar "cmdecho" oldcmdecho)
      (princ)
    )
   
    ; 提示选择文字对象
    (princ "\n请选择要调整大小的文字: ")
    (setq ent (entsel))
   
    ; 检查选择是否有效
    (if (not ent)
      (progn
            (princ "\n未选择任何对象!")
            (setvar "osmode" oldosmode)
            (setvar "cmdecho" oldcmdecho)
            (princ)
            (return)
      )
    )
   
    ; 解析选择的对象信息
    (setq ename (car ent)
          enodelist (entget ename)
    )
   
    ; 检查是否为文字对象
    (if (not (member (cdr (assoc 0 enodelist)) '("TEXT" "MTEXT")))
      (progn
            (princ "\n选择的不是文字对象!")
            (setvar "osmode" oldosmode)
            (setvar "cmdecho" oldcmdecho)
            (princ)
            (return)
      )
    )
   
    ; 获取当前文字高度
    (setq oldheight (cdr (assoc 40 enodelist)))
    (princ (strcat "\n当前文字高度: " (rtos oldheight 2 2)))
   
    ; 获取基点(参考点)
    (if (not (setq pt1 (getpoint "\n指定基点: ")))
      (progn
            (princ "\n取消操作!")
            (setvar "osmode" oldosmode)
            (setvar "cmdecho" oldcmdecho)
            (princ)
            (return)
      )
    )
   
    (princ "\n移动鼠标调整大小,点击左键确定,右键取消...")
   
    ; 使用grread函数实时捕获鼠标事件,通过done变量控制循环
    (while (not done)
      (setq grread-result (grread T 15 0))
      
      ; 解析grread返回结果
      (setq cmdactive (car grread-result)
            pt2 (cadr grread-result)
      )
      
      ; 鼠标移动事件 (5 = 鼠标移动)
      (if (= cmdactive 5)
            (progn
                ; 计算基点到当前鼠标位置的距离
                (setq dist (distance pt1 pt2))
               
                ; 计算缩放因子(降低灵敏度,使调整更易控制)
                ; 增大分母值会降低灵敏度
                (setq scale (if (< dist 2.0) 0.1 (/ dist sensitivity)))
               
                ; 计算新高度并限制范围
                (setq newheight (* oldheight scale))
                (if (< newheight 0.1) (setq newheight 0.1)); 最小高度
                (if (> newheight (* oldheight 20)) (setq newheight (* oldheight 20))); 最大高度限制
               
                ; 实时更新文字高度
                (setq enodelist (subst (cons 40 newheight) (assoc 40 enodelist) enodelist))
                (entmod enodelist)
                (entupd ename)
            )
      )
      
      ; 左键点击确定 (3 = 左键点击)
      (if (= cmdactive 3)
            (progn
                (princ (strcat "\n最终文字高度: " (rtos newheight 2 2)))
                (setq done T); 结束循环
            )
      )
      
      ; 右键点击取消 (2 = 右键点击)
      (if (= cmdactive 2)
            (progn
                ; 恢复原始高度
                (setq enodelist (subst (cons 40 oldheight) (assoc 40 enodelist) enodelist))
                (entmod enodelist)
                (entupd ename)
                (princ "\n已取消操作,恢复原始大小")
                (setq done T); 结束循环
            )
      )
    )
   
    ; 恢复系统变量
    (setvar "osmode" oldosmode)
    (setvar "cmdecho" oldcmdecho)
    (princ "\n操作完成。")
    (princ)
)

(princ "\n动态文字调整大小插件已加载。命令: dtwz")
(princ)
   

wangsr 发表于 2025-3-22 17:49:18

本帖最后由 wangsr 于 2025-3-22 17:53 编辑

469229020@QQ.CO 发表于 2025-3-22 17:47
是动态拉标注,不是拉文字
谢谢 普通标注没问题好用
如果支持注释性标注就更好了


wangsr 发表于 2025-3-22 16:34:29

469229020@QQ.CO 发表于 2025-3-22 15:58
不好意思,不是付费。是我这边奖励才对

我的电脑怎么没反应

Bao_lai 发表于 2025-3-22 11:42:39

很荣幸,付费才有机会回答您的问题。


paulpipi 发表于 2025-3-22 13:05:44

支持分享,非常好用

tranque 发表于 2025-3-22 13:13:26

非常好吃,孩子都馋哭了

zhoupeng220 发表于 2025-3-22 13:48:01

确实和楼上说的一样

wangsr 发表于 2025-3-22 14:23:36

楼主什么情况,程序忘记发了吧
只有个图片

469229020@QQ.CO 发表于 2025-3-22 15:58:16

不好意思,不是付费。是我这边奖励才对

Bao_lai 发表于 2025-3-22 16:54:00

是不是已经好了。

469229020@QQ.CO 发表于 2025-3-22 17:47:20

wangsr 发表于 2025-3-22 16:34
我的电脑怎么没反应

是动态拉标注,不是拉文字
页: [1] 2
查看完整版本: 动态改标注文字高度,动态文字高度,,两个功能!两个功能!