如何块大小和文字高度一致
这段代码,插入屏幕的块的高度和文字高度时常会严重失调,如何调整; 统计并插入一个图块和数量文字
(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)
插入块后计算一下块包围盒,再根据包围盒确定合适的文本大小。 (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]