Ando meio sem assunto ultimamente, hehehe,  
achei aqui uma lisp que eu fiz para um amigo uma vez, Creio que vai ser útil para muita gente!!  
Ela faz o seguinte: 
Ela pede a seleção de uma polilinha e em seguida desenha uma tabela com os alinhamentos da mesma, com numeração, comprimento e azimute de todos os segmentos da mesma. Fica assim: 
Download dela já compilada A lisp é esta: 
(defun c:plh (/ ent ss p1 p2 n file pt str)
  (tbn:error-init (list (list "cmdecho" 0) T))
  (prompt "\nSelecione a polilinha")
  (setq ss  (ssget ":S" '((0 . "LWPOLYLINE")))
    ent (ssname ss 0)
    pt  (getpoint "\nClique o ponto de inserção")
    str (getstring "\nQual o nome da área?" t)
    pts (get-points-polig ent)
        n   0
        p1  (car pts)
    table        (vla-addtable (vla-get-modelspace thisdrawing) (vlax-3d-point pt)
               ( 1+ (length pts))
               7
               1
               1))
  (vla-settext table 0 0 (strcat "TABELA-AZIMUTES/DISTÂNCIAS/COORDENADAS\\P" STR))
  (foreach tit '("Vértice" "Para" "Rumo" "Azimute" "Distância" "Coord. Norte" "Coord. Leste")
    (vla-settext table 1 n tit)
    (setq n (1+ n))
    )
  (Setq n 0)
  (repeat (1- (length pts))
    (setq p2  (nth (1+ n) pts))
    (vla-settext table (+ n 2) 0 (iF (= N 0 ) "0=pp" (itoa n)))
    (vla-settext table (+ n 2) 1 (IF (= (+ 2 N) (LENGTH PTS)) "0=pp" (itoa  (1+ n))))
    (vla-settext table (+ n 2) 2 (format-ang2 (angle p1 p2) t "Rumo" 4))
    (vla-settext table (+ n 2) 3 (format-ang2 (angle p1 p2) t "Azimute" 4))
    (vla-settext table (+ n 2) 4 (fnum (dist-h p1 p2) 2))
    (vla-settext table (+ n 2) 5 (fnum (caDr p1) 3))
    (vla-settext table (+ n 2) 6 (fnum (car p1) 3))
    (setq p1 p2
      n  (1+ n)))
  (tbn:error-restore))
(defun format-ang2 (ang spc formato precisao / i g m un angbase angdir str)
  (setq un (getvar "unitmode")
    angbase  (getvar "ANGBASE")
    angdir   (getvar "angdir")
    precisao (if (= 'int (type precisao)) precisao (nth (vl-position precisao '("M") ) '(4)))
    )
  (setvar "UNITMODE" 0)
  (setvar "angbase" (/ pi 2))
  (setvar "angdir" 1)
  (setq    g   (if    spc  "° " "°" )
    m   (if    spc  (if (= 1 precisao) "'" "' ") "'" )
    str (vl-string-subst m  "'" (vl-string-subst g "d"
                      (angtos ang (if (OR (= formato "A") (= formato "Azimute")) 1 4)
                          precisao)))
    i   0  )
  (setvar "UNITMODE" un)
  (setvar "angbase" angbase)
  (setvar "angdir" angdir)
  (repeat 10
    (setq str (vl-string-subst
        (strcat g "0" (itoa i) "'")
        (strcat g (itoa i) "'")
        str)
      str (vl-string-subst
        (strcat m "0" (itoa i) "\"")
        (strcat m (itoa i) "\"")
        str )
      i   (1+ i)))
  (if (= formato "Rumo")
    (vl-string-subst "O" "W"  (if (/= 1 (strlen str))
                (strcat    (substr str 3 (- (strlen str) 3))
                    (substr str 1 1)
                    (substr str (strlen str) 1))
                str))
    str)
  )
; dist-h (pt1 pt2): calcula a distancia no plano xy entre dois pontos
(defun dist-h (pt1 pt2 /)
  (if (and pt1 pt2) (distance (3dto2d pt1) pt2)))
Link(s) da(s) subrotina(s) usada(s): 
tbn:error-init,  
3dto2d,  
get-points-polig,  
thisdrawing,  
format-ang2, 
fnum,  
dist-h, 
tbn:error-restore 
Gostou? Sugiro ler o artigo sobre programação em lisp que está 
aqui