明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 670|回复: 9

[讨论] 如何让插入文字的高度自动适配屏幕

[复制链接]
发表于 2024-7-12 15:49:30 | 显示全部楼层 |阅读模式
请问如何让插入的数值随时清晰可见,无论比例,无论图幅,就比如cad的菜单内的文字显示高度始终固定,不会造成看不见的现象
  1. (princ "\n 程序:(XKBUILD)统计线段长度命令:ll")
  2. (defun C:ll (/ CURVE TLEN SS N SUMLEN a b txtheight viewport viewcenter viewsizescale)
  3.   (vl-load-com)
  4.   (setq SUMLEN 0)
  5.   (setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
  6.   (setq N 0)
  7.   (repeat (sslength SS)
  8.     (setq CURVE (vlax-ename->vla-object (ssname SS N)))
  9.     (setq TLEN (vlax-curve-getdistatparam CURVE (vlax-curve-getendparam CURVE)))
  10.     (setq SUMLEN (+ SUMLEN TLEN))
  11.     (setq N (1+ N))
  12.   )

  13.   (princ (strcat "\n共选择" (itoa (sslength SS)) "条线段,总长" (rtos SUMLEN 2 0) "mm.")) ; 显示总长度,单位为毫米
  14.   (setq SUMLEN (/ SUMLEN 1000.0)) ; 将总长度转换为米
  15.   (setq b (rtos SUMLEN 2 2))  ; 将总长转换成字符串,设置为两个精度,即小数点后两位
  16.   (setq a (getpoint "\n屏幕单击插入点"))  ; 指定插入点

  17.   ;; 获取当前视口
  18.   (setq viewport (vla-get-ActiveViewport (vla-get-ActiveDocument (vlax-get-acad-object))))
  19.   ;; 获取视口中心和尺寸
  20.   (setq viewcenter (vlax-get viewport 'Center))
  21.   (setq viewsizescale (vlax-get viewport 'Height))

  22.   ;; 计算文字高度,设置为视口高度的1/100
  23.   (setq txtheight (/ viewsizescale 100))

  24.   ;; 创建文字图元
  25.   (entmake
  26.     (list
  27.       '(0 . "TEXT")
  28.       (cons 10 a)  ; 插入点
  29.       (cons 40 txtheight)  ; 文字高度
  30.       (cons 1 b)  ; 文字内容
  31.       '(7 . "Standard")
  32.       '(72 . 1)
  33.       (cons 11 (list (car a) (+ (cadr a) txtheight)))  ; 对齐插入点
  34.     )
  35.   )

  36.   (princ)
  37. )


发表于 2024-7-12 16:15:25 | 显示全部楼层
本帖最后由 ssyfeng 于 2024-7-12 17:11 编辑

试试是不是这样:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2024-7-12 17:06:21 | 显示全部楼层
本帖最后由 wzs07 于 2024-7-12 17:09 编辑
ssyfeng 发表于 2024-7-12 16:15
试试是不是这样:

运行错误,参数太多——cad2021
发表于 2024-7-12 17:12:08 | 显示全部楼层
已更新,可能是复制网页代码时出问题
发表于 2024-7-12 18:44:49 | 显示全部楼层
  1. (* (getvar "viewsize") 0.05)
复制代码

核心代码
 楼主| 发表于 2024-7-12 21:34:24 | 显示全部楼层
ssyfeng 发表于 2024-7-12 17:12
已更新,可能是复制网页代码时出问题

通过GPT优化对各种线条的支持,请指点
  1. (princ "\n 程序:(XKBUILD)统计线段长度命令:ll")
  2. (defun C:ll (/ CURVE TLEN SS N SUMLEN a b txtheight viewport viewcenter viewsizescale objname startpt endpt midpt angle center radius)
  3.   (vl-load-com)
  4.   (setq SUMLEN 0)
  5.   (setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,LWPOLYLINE,SPLINE,ARC"))))
  6.   (setq N 0)
  7.   (repeat (sslength SS)
  8.     (setq CURVE (vlax-ename->vla-object (ssname SS N)))
  9.     (setq objname (vla-get-ObjectName CURVE))
  10.     (setq TLEN (vlax-curve-getdistatparam CURVE (vlax-curve-getendparam CURVE)))
  11.     (setq SUMLEN (+ SUMLEN TLEN))

  12.     ;; 判断对象类型并处理
  13.     (cond
  14.       ;; 如果是直线
  15.       ((= objname "AcDbLine")
  16.        ;; 使用 entget 获取起点和终点坐标
  17.        (setq startpt (cdr (assoc 10 (entget (vlax-vla-object->ename CURVE)))))
  18.        (setq endpt (cdr (assoc 11 (entget (vlax-vla-object->ename CURVE)))))
  19.        (setq midpt (mapcar '(lambda (a b) (/ (+ a b) 2.0)) startpt endpt))
  20.        ;; 计算文字高度
  21.        (setq txtheight (* (getvar "viewsize") 0.015))
  22.        ;; 计算旋转角度
  23.        (setq angle (atan (/ (- (cadr endpt) (cadr startpt)) (- (car endpt) (car startpt)))))
  24.        ;; 创建文字图元
  25.        (entmake
  26.          (list
  27.            '(0 . "TEXT")
  28.            (cons 10 midpt)  ; 插入点
  29.            (cons 40 txtheight)  ; 文字高度
  30.            (cons 1 (rtos TLEN 2 0))  ; 文字内容
  31.            '(7 . "Standard")
  32.            '(72 . 1)
  33.            (cons 11 (list (car midpt) (+ (cadr midpt) txtheight)))  ; 对齐插入点
  34.            (cons 50 angle)  ; 文字旋转角度
  35.          )
  36.        )
  37.       )
  38.       ;; 如果是圆
  39.       ((= objname "AcDbCircle")
  40.        (setq center (vlax-get CURVE 'Center))
  41.        (setq radius (vlax-get CURVE 'Radius))
  42.        (setq txtheight (* (getvar "viewsize") 0.015))
  43.        ;; 创建文字图元
  44.        (entmake
  45.          (list
  46.            '(0 . "TEXT")
  47.            (cons 10 center)  ; 插入点
  48.            (cons 40 txtheight)  ; 文字高度
  49.            (cons 1 (rtos (* 2 pi radius) 2 0))  ; 文字内容,圆周长
  50.            '(7 . "Standard")
  51.            '(72 . 1)
  52.            (cons 11 (list (car center) (+ (cadr center) txtheight)))  ; 对齐插入点
  53.          )
  54.        )
  55.       )
  56.       ;; 如果是椭圆
  57.       ((= objname "AcDbEllipse")
  58.        (setq startpt (vlax-curve-getStartPoint CURVE))
  59.        (setq endpt (vlax-curve-getEndPoint CURVE))
  60.        (setq midpt (mapcar '(lambda (a b) (/ (+ a b) 2.0)) startpt endpt))
  61.        (setq txtheight (* (getvar "viewsize") 0.015))
  62.        ;; 创建文字图元
  63.        (entmake
  64.          (list
  65.            '(0 . "TEXT")
  66.            (cons 10 midpt)  ; 插入点
  67.            (cons 40 txtheight)  ; 文字高度
  68.            (cons 1 (rtos TLEN 2 0))  ; 文字内容
  69.            '(7 . "Standard")
  70.            '(72 . 1)
  71.            (cons 11 (list (car midpt) (+ (cadr midpt) txtheight)))  ; 对齐插入点
  72.          )
  73.        )
  74.       )
  75.       ;; 如果是样条曲线
  76.       ((= objname "AcDbSpline")
  77.        (setq startpt (vlax-curve-getStartPoint CURVE))
  78.        (setq endpt (vlax-curve-getEndPoint CURVE))
  79.        (setq midpt (mapcar '(lambda (a b) (/ (+ a b) 2.0)) startpt endpt))
  80.        (setq txtheight (* (getvar "viewsize") 0.015))
  81.        ;; 创建文字图元
  82.        (entmake
  83.          (list
  84.            '(0 . "TEXT")
  85.            (cons 10 midpt)  ; 插入点
  86.            (cons 40 txtheight)  ; 文字高度
  87.            (cons 1 (rtos TLEN 2 0))  ; 文字内容
  88.            '(7 . "Standard")
  89.            '(72 . 1)
  90.            (cons 11 (list (car midpt) (+ (cadr midpt) txtheight)))  ; 对齐插入点
  91.          )
  92.        )
  93.       )
  94.       ;; 如果是圆弧
  95.       ((= objname "AcDbArc")
  96.        (setq startpt (vlax-curve-getStartPoint CURVE))
  97.        (setq endpt (vlax-curve-getEndPoint CURVE))
  98.        (setq midpt (mapcar '(lambda (a b) (/ (+ a b) 2.0)) startpt endpt))
  99.        (setq txtheight (* (getvar "viewsize") 0.015))
  100.        ;; 创建文字图元
  101.        (entmake
  102.          (list
  103.            '(0 . "TEXT")
  104.            (cons 10 midpt)  ; 插入点
  105.            (cons 40 txtheight)  ; 文字高度
  106.            (cons 1 (rtos TLEN 2 0))  ; 文字内容
  107.            '(7 . "Standard")
  108.            '(72 . 1)
  109.            (cons 11 (list (car midpt) (+ (cadr midpt) txtheight)))  ; 对齐插入点
  110.          )
  111.        )
  112.       )
  113.       ;; 如果是多段线
  114.       ((= objname "AcDbPolyline")
  115.        ;; 不做特殊处理,继续累加总长度
  116.       )
  117.     )

  118.     (setq N (1+ N))
  119.   )
  120.   
  121.   ;; 判断是否需要插入总长度文字
  122.   (if (or (> (sslength SS) 1) (= objname "AcDbPolyline"))
  123.     (progn
  124.       (princ (strcat "\n共选择" (itoa (sslength SS)) "条线段,总长" (rtos SUMLEN 2 0) "mm.")) ; 显示总长度,单位为毫米
  125.       (setq SUMLEN (/ SUMLEN 1000.0)) ; 将总长度转换为米
  126.       (setq b (rtos SUMLEN 2 2))  ; 将总长转换成字符串,设置为两个精度,即小数点后两位
  127.       (setq a (getpoint "\n屏幕单击插入点"))  ; 指定插入点

  128.       ;; 计算文字高度
  129.       (setq txtheight (* (getvar "viewsize") 0.015))

  130.       ;; 创建文字图元
  131.       (entmake
  132.         (list
  133.           '(0 . "TEXT")
  134.           (cons 10 a)  ; 插入点
  135.           (cons 40 txtheight)  ; 文字高度
  136.           (cons 1 (strcat "总长 " b " m"))  ; 文字内容,现在是在总长度前加上了“总长”,后加了“ m”
  137.           '(7 . "Standard")
  138.           '(72 . 1)
  139.           (cons 11 (list (car a) (+ (cadr a) txtheight)))  ; 对齐插入点
  140.         )
  141.       )
  142.     )
  143.   )
  144.   (princ)
  145. )


发表于 2024-7-13 08:00:23 来自手机 | 显示全部楼层
看看,学习一下
发表于 2024-7-13 08:18:46 | 显示全部楼层
wzs07 发表于 2024-7-12 21:34
通过GPT优化对各种线条的支持,请指点

不想看GPT的代码
发表于 2024-7-14 13:02:21 | 显示全部楼层
多谢分享  学习了
发表于 2024-7-14 17:13:55 | 显示全部楼层
测试如右,插件可以显示线的长度,并不会显示多义线长度,但均会显示总长度,对我来说有帮助,谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 13:00 , Processed in 0.186667 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表