469229020@QQ.CO 发表于 2025-3-22 17:47
是动态拉标注,不是拉文字
谢谢 普通标注没问题好用
如果支持注释性标注就更好了
看不到啊看不到 什么情况,有没有演示 这个功能是做什么,贴图 有过,下过免费的,不过没有捕捉功能,你这个有捕捉功能么? 跟sc比例放大有啥区别 这么简单个玩意收这么贵:L我刚写一个效果差不多 谢谢 普通标注没问题好用
如果支持注释性标注就更好了 本帖最后由 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)
页:
1
[2]