抱歉给你带来了困惑。
玩一下这个修改过的程序,让我知道。
- (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)
- )
|