如果大于2000,则读数为“ch 2+000”,如果大于3000,则读数为“2+100”,“ch 3+000”和“ch 3+100”
我从一个电子专业的背景中学习了一点编程,还有一些是如何在民用领域工作的。也不知道lisp会怎么做。
你为帮助我添加的if语句很好,但如果我能将计数恢复到“0”,并希望在每次计数超过999时增加Ch#+。 我认为这一个应该是你所要求的,试试看,让我知道。
(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)
)
太棒了Tharwat。
很抱歉拖了这么久。这是我第一次找这样的东西。希望能在将来帮助别人。
再次感谢。
太好了,听到这个我很高兴
随时欢迎你。 我有一个障碍,当给定直线上的距离大于“10000”时,它打印例如13200,它打印“ch 1+3200”,而不是“ch 13+200”
我会努力解决这个问题。正如我所说,我正在努力自学。我知道这是一个公式问题,如果我有困难,我会回来的
再次感谢。
抱歉给你带来了困惑。
玩一下这个修改过的程序,让我知道。
(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)
)
............................ 嗨,德怀弗,你明白超级主持人的意思吗?
页:
1
[2]