dweafer 发表于 2022-7-5 21:03:00

是的,我是一个有礼貌的人,非常感谢大家的帮助。
 
如果大于2000,则读数为“ch 2+000”,如果大于3000,则读数为“2+100”,“ch 3+000”和“ch 3+100”
 
我从一个电子专业的背景中学习了一点编程,还有一些是如何在民用领域工作的。也不知道lisp会怎么做。
 
你为帮助我添加的if语句很好,但如果我能将计数恢复到“0”,并希望在每次计数超过999时增加Ch#+。

Tharwat 发表于 2022-7-5 21:08:59

我认为这一个应该是你所要求的,试试看,让我知道。
 

(defun c:Test (/ bearing chainage dist ent height obj offset point1
            point2 ss i
             )
;;        Tharwat 17.Dec.2014                ;;
(setq dist 100.0
       offset 5
       height 2.5
)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (repeat (setq i (sslength ss))
   (setq ent      (ssname ss (setq i (1- i)))
         obj      (vlax-ename->vla-object ent)
         chainage dist
   )
   (while
       (and
         (setq point1 (vlax-curve-getPointAtDist obj chainage))
         (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.1)))
       )
      (setq bearing (+ (angle point1 point2) (/ pi 2.0)))
      (entmake
          (list '(0 . "LINE")
                '(8 . "0")
                (cons 10 (polar point1 bearing offset))
                (cons 11 (polar point1 (+ bearing pi) offset))
                '(210 0.0 0.0 1.0)
          )
      )
      (entmake
          (list
            '(0 . "TEXT")
            '(8 . "0")
            (cons 10 (polar point1 (+ bearing pi) (* offset 2.0)))
            (cons 40 height)
            (cons
            1
            (strcat "'ch "
                      (if (>= chainage 1000.)
                        (strcat (substr (rtos chainage 2 3) 1 1)
                              "+"
                              (substr (rtos chainage 2 3) 2)
                        )
                        (strcat "0"
                              "+"
                              (rtos chainage 2 3)
                        )
                      )
            )
            )
            (cons 50 (+ bearing pi))
            '(41 . 1.0)
            '(51 . 0.0)
            '(7 . "Standard")
            '(71 . 0)
            '(72 . 0)
            '(11 0.0 0.0 0.0)
            '(210 0.0 0.0 1.0)
            '(73 . 0)
          )
      )
      (setq chainage (+ chainage dist)
      )
   )
   )
)
(princ)
)

dweafer 发表于 2022-7-5 21:13:33

太棒了Tharwat。
 
很抱歉拖了这么久。这是我第一次找这样的东西。希望能在将来帮助别人。
 
再次感谢。

Tharwat 发表于 2022-7-5 21:15:49

 
太好了,听到这个我很高兴
 
随时欢迎你。

dweafer 发表于 2022-7-5 21:19:12

我有一个障碍,当给定直线上的距离大于“10000”时,它打印例如13200,它打印“ch 1+3200”,而不是“ch 13+200”
 
我会努力解决这个问题。正如我所说,我正在努力自学。我知道这是一个公式问题,如果我有困难,我会回来的
 
再次感谢。

Tharwat 发表于 2022-7-5 21:23:09

 
抱歉给你带来了困惑。
 
玩一下这个修改过的程序,让我知道。
 

(defun c:Test (/ _output:value bearing chainage dist ent height obj
            offset point1 point2 ss i
             )
;;        Tharwat 17.Dec.2014                ;;
(setq dist 100.0
       offset 5
       height 2.5
)
(defun _output:value (v / s)
   (if (eq v 1000.)
   (strcat (substr (rtos v 2 3) 1 1)
             "+"
             (substr (rtos v 2 3) 2)
   )
   (strcat (substr (setq s (rtos v 2 3)) 1 (- (strlen s) 3))
             "+"
             (substr (rtos v 2 3) (- (strlen s) 2))
   )
   )
)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (repeat (setq i (sslength ss))
   (setq ent      (ssname ss (setq i (1- i)))
         obj      (vlax-ename->vla-object ent)
         chainage dist
   )
   (while
       (and
         (setq point1 (vlax-curve-getPointAtDist obj chainage))
         (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.1)))
       )
      (setq bearing (+ (angle point1 point2) (/ pi 2.0)))
      (entmake
          (list '(0 . "LINE")
                '(8 . "0")
                (cons 10 (polar point1 bearing offset))
                (cons 11 (polar point1 (+ bearing pi) offset))
                '(210 0.0 0.0 1.0)
          )
      )
      (entmake
          (list
            '(0 . "TEXT")
            '(8 . "0")
            (cons 10 (polar point1 (+ bearing pi) (* offset 2.0)))
            (cons 40 height)
            (cons
            1
            (strcat "'ch "
                      (cond ((< chainage 1000.)
                           (strcat
                               "0"
                               "+"
                               (rtos chainage 2 3)
                           )
                            )
                            (t (_output:value chainage))
                      )
            )
            )
            (cons 50 (+ bearing pi))
            '(41 . 1.0)
            '(51 . 0.0)
            '(7 . "Standard")
            '(71 . 0)
            '(72 . 0)
            '(11 0.0 0.0 0.0)
            '(210 0.0 0.0 1.0)
            '(73 . 0)
          )
      )
      (setq chainage (+ chainage dist)
      )
   )
   )
)
(princ)
)

SLW210 发表于 2022-7-5 21:27:01

 
............................

AIberto 发表于 2022-7-5 21:30:59

嗨,德怀弗,你明白超级主持人的意思吗?
页: 1 [2]
查看完整版本: Lisp问题。对Lis来说非常陌生