动态改标注文字高度,动态文字高度,,两个功能!两个功能!
本帖最后由 469229020@QQ.CO 于 2025-3-23 21:52 编辑第一个是动态标注修改文字大小高度,根据动态修改大小标注。
第二个是动态修改文字,文本高度! 本帖最后由 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:53 编辑
469229020@QQ.CO 发表于 2025-3-22 17:47
是动态拉标注,不是拉文字
谢谢 普通标注没问题好用
如果支持注释性标注就更好了
469229020@QQ.CO 发表于 2025-3-22 15:58
不好意思,不是付费。是我这边奖励才对
我的电脑怎么没反应
很荣幸,付费才有机会回答您的问题。
支持分享,非常好用 非常好吃,孩子都馋哭了 确实和楼上说的一样 楼主什么情况,程序忘记发了吧
只有个图片
不好意思,不是付费。是我这边奖励才对
是不是已经好了。 wangsr 发表于 2025-3-22 16:34
我的电脑怎么没反应
是动态拉标注,不是拉文字
页:
[1]
2