万事如意 发表于 2024-8-1 16:33:39

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)
)

czb203 发表于 2024-8-1 18:02:52

改标注数字总在多段线上方

kx820506 发表于 2024-8-2 07:52:42

本帖最后由 kx820506 于 2024-8-2 08:26 编辑

感谢分享。。

kfh 发表于 2024-8-2 08:53:46

czb203 发表于 2024-8-1 18:02
改标注数字总在多段线上方

从左往右画多段线,标注是在线段的下方

czb203 发表于 2024-8-2 10:31:05

kfh 发表于 2024-8-2 08:53
从左往右画多段线,标注是在线段的下方

把线反向一下就可以了

szhorse 发表于 2024-8-3 10:00:28

本帖最后由 szhorse 于 2024-8-3 10:03 编辑


蒙对了,
将(cons 1 (rtos a 2 2))改为(cons 1 (rtos a 2 0))
就把保留2为小数的改成整数

寒潮大冬瓜 发表于 2024-8-19 00:19:29

本帖最后由 寒潮大冬瓜 于 2024-8-19 00:24 编辑

批量标注含圆弧多段线、直线长度(文字永远不会超大)

yefei812678 发表于 2024-8-31 10:27:07

感谢分享感谢分享
页: [1]
查看完整版本: LSP代码它标注出来数字总在多段线下方,怎么改标注数字总在多段线上方谢谢大神。