1. (defun C:DA(/ dis ent obj oldang pt0 ptn)
    2. (initget "E e")
    3. (setq oldang nil pt0 (getpoint "\n指定第一个点[拾取上一段(E)]:"))
    4. (while pt0
    5. (if (= (type pt0) 'str)
    6. (if (setq ent (entsel))
    7. (setq oldang (vla-get-Angle (setq obj (vlax-ename->vla-object (car ent)))) pt0 (vlax-safearray->list (vlax-variant-value (vla-get-EndPoint obj))))
    8. (setq pt0 nil)
    9. )
    10. (progn
    11. (setq ptn (getpoint pt0 "\n指定下一点:"))
    12. (if ptn
    13. (progn
    14. (if oldang
    15. (progn
    16. (cond
    17. ((< 0 (angle pt0 ptn))
    18. (setq
    19. oldang (+ oldang (- pi (angle pt0 ptn)) )
    20. dis (distance pt0 ptn)
    21. )
    22. )
    23. ((< (angle pt0 ptn) 0)
    24. (setq oldang (+ oldang (angle pt0 ptn)) dis (distance pt0 ptn))
    25. )
    26. ((= (angle pt0 ptn) 0)
    27. (setq oldang oldang dis (distance pt0 ptn))
    28. )
    29. )
    30. )
    31. (setq oldang (angle pt0 ptn) dis (distance pt0 ptn))
    32. )
    33. (entmake (list '(0 . "LINE") (cons 10 pt0) (cons 11 (polar pt0 oldang dis))))
    34. )
    35. (setq pt0 ptn)
    36. )
    37. ;;(setq pt0 (polar pt0 oldang dis))
    38. )
    39. )
    40. )
    41. (prin1)
    42. )