LSP代码它标注出来数字总在多段线下方,怎么改标注数字总在多段线上方谢谢大神。
本帖最后由 万事如意 于 2024-8-1 16:38 编辑CAD中使用分段标注多段线线长,它标注出来数字总在多段线下方,怎么改标注数字总在多段线上方这个代码改那个地方谢谢大神。
;;;分段标注线长
(defun c:PPP (/ zg ss obj lst n l lst lst1 lst2 lst3 obj1 obj2)
(prompt "\n请选择需要标注的线:")
(setq zg 6);;; 字高可自定义
(if (setq ss (ssget ":S:E" '((0 . "LWPOLYLINE"))))
(progn
(setq obj (vlax-ename->vla-object (ssname ss 0))
lst nil
n -1
)
(while (setq l (vlax-curve-getDistAtParam obj (setq n (1+ n))))
(setq lst (cons l lst))
)
(setq lst (reverse lst)
lst1 (mapcar '(lambda (a b) (- b a)) lst (cdr lst))
)
(setq
lst2 (mapcar '(lambda (x) (vlax-curve-getPointAtDist obj x))
(mapcar '(lambda (a b) (+ a (* 0.5 b))) lst lst1)
)
)
(setq lst3
(mapcar '(lambda (x)
(setq
ang (angle
x
(mapcar '+
x
(vlax-curve-getFirstDeriv
obj
(vlax-curve-getParamAtPoint obj x)
)
)
)
)
(if (< (* 0.5 pi) ang (* 1.5 pi))
(- ang pi)
ang
)
)
lst2
)
)
(setq obj1 (car (vlax-safearray->list
(vlax-variant-value (vla-offset obj zg))
)
)
obj2 (car (vlax-safearray->list
(vlax-variant-value (vla-offset obj (- zg)))
)
)
)
(or (> (vla-get-Length obj1) (vla-get-Length obj2))
(vla-Delete obj1)
(setq obj1 obj2
obj2 nil
)
)
(and obj2 (vla-Delete obj2))
(setq lst2
(mapcar '(lambda (x) (vlax-curve-getClosestPointTo obj1 x))
lst2
)
)
(vla-Delete obj1)
(mapcar '(lambda (a b c)
(entmake (list '(0 . "TEXT")
(cons 1 (rtos a 2 2))
(cons 10 b)
(cons 40 zg)
(cons 11 b)
'(72 . 1)
'(73 . 2)
(cons 50 c)
)
)
)
lst1
lst2
lst3
)
)
)
(princ)
)
改标注数字总在多段线上方 本帖最后由 kx820506 于 2024-8-2 08:26 编辑
感谢分享。。 czb203 发表于 2024-8-1 18:02
改标注数字总在多段线上方
从左往右画多段线,标注是在线段的下方 kfh 发表于 2024-8-2 08:53
从左往右画多段线,标注是在线段的下方
把线反向一下就可以了 本帖最后由 szhorse 于 2024-8-3 10:03 编辑
蒙对了,
将(cons 1 (rtos a 2 2))改为(cons 1 (rtos a 2 0))
就把保留2为小数的改成整数
本帖最后由 寒潮大冬瓜 于 2024-8-19 00:24 编辑
批量标注含圆弧多段线、直线长度(文字永远不会超大) 感谢分享感谢分享
页:
[1]