wzs07 发表于 2025-3-10 15:11:05

如何块大小和文字高度一致

这段代码,插入屏幕的块的高度和文字高度时常会严重失调,如何调整
; 统计并插入一个图块和数量文字
(if ss
    (progn
      (setq cnt (sslength ss))
      (setq insertPt (getpoint "\n指定图块插入点: "))
      (if (> cnt 0)
      (progn
          ; 插入一个图块
          (command "_.INSERT" blkname "_S" 1 "_R" 0 insertPt)
          ; 计算文字插入点(图块右侧)
          (setq textPt (polar insertPt 0 50)); 50单位向右
          (setq txt (strcat (itoa cnt)))       ; 仅显示数量
          (setq txtheight (* (getvar "viewsize") 0.05)) ; 动态计算文字高度
          ; 使用 entmake 创建文字
          (entmake (list '(0 . "TEXT")                  ; 实体类型
                         '(100 . "AcDbEntity")          ; 实体基类
                         '(100 . "AcDbText")            ; 文字子类
                         (cons 10 textPt)               ; 插入点
                         (cons 40 txtheight)            ; 文字高度
                         (cons 1 txt)                   ; 文字内容
                         (cons 50 0)                  ; 旋转角度
                         (cons 72 0)                  ; 水平对齐 (0 = 左对齐)
                         (cons 73 0)                  ; 垂直对齐 (0 = 基线)
                         )
                   )
          (princ (strcat "\n已插入一个 '" blkname "' 图块,并显示数量: " (itoa cnt)))
      )
      (princ "\n未找到匹配的图块!")
      )
    )
    (princ "\n未选择任何图块!")
)

(princ)
)

(princ "\n命令: BlockCount - 插入一个图块并显示数量")
(princ)

kozmosovia 发表于 2025-3-10 16:12:21

插入块后计算一下块包围盒,再根据包围盒确定合适的文本大小。

xyp1964 发表于 2025-3-10 20:38:33

(defun c:tt ()
"统计并插入一个图块和数量文字"
(or bk (setq bk"251"))
(setq bk (Ustr 1 "图块名" bk nil))
(if (and (setq ss (ssget "x" (list '(0 . "insert") (cons 2 bk))))
         (setq p0 (getpoint "\n指定图块插入点: "))
      )
    (progn
      (setq nn (sslength ss))
      (command "INSERT" bk p0 1 1 0)
      (setq pt (polar p0 0 50) ; 50单位向右
            tx (strcat (itoa nn))
      )
      (command "zoom" "o" (entlast) "")
      (setq th (* (getvar "viewsize") 0.05)) ; 动态计算文字高度
      (entmake (list '(0 . "TEXT")
                     '(100 . "AcDbEntity")
                     '(100 . "AcDbText")
                     (cons 10 pt)
                     (cons 40 th)
                     (cons 1 tx)
                     (cons 50 0)
                     (cons 72 0)
                     (cons 73 0)
               )
      )
      (princ (strcat "\n已插入一个 '"bk"' 图块,并显示数量: "(itoa nn)))
    )
)
(princ)
)
页: [1]
查看完整版本: 如何块大小和文字高度一致