Ron,
This will give you the lengths of lines and plines. I never tested it on arcs though.
(defun adddist (listlengths)
(apply '+ listlengths)
)
(defun xy_list (alist / cnt dlist)
(setq cnt 0)
(repeat (/ (length alist) 2)
(setq dlist (cons (list (nth cnt alist)
(nth (+ 1 cnt) alist)
)
dlist
)
cnt (+ 2 cnt)
)
)
(reverse dlist)
)
(defun llen (en)
(setq llens (cons (vla-get-length (vlax-ename->vla-object en)) llens))
)
(defun getcoords (obj)
(xy_list (vlax-safearray->list
(vlax-variant-value
(vla-get-coordinates obj)
)
)
)
)
(defun pllen ( en / obj stparam endparam coords ptlength dist)
(setq obj (vlax-ename->vla-object en)
stParam (vlax-curve-getStartParam obj)
endParam (vlax-curve-getEndParam obj)
coords (getcoords obj)
ptlength (length coords)
)
(while (< stparam ptlength)
(setq dist (- (vlax-curve-getDistAtParam obj (1+ stparam))
(vlax-curve-getDistAtParam obj stparam)
)
stparam (1+ stparam)
pllens (cons dist pllens)
)
)
)
(defun c:ll (/ sset len ssn ent llens pllens linelens plinelens)
(setq sset (ssget '((0 . "LINE,LWPOLYLINE")))
)
(if sset
(progn
(repeat (setq len (sslength sset))
(setq len (1- len)
ssn (ssname sset len)
ent (entget ssn)
)
(cond ((= (cdr (assoc 0 ent)) "LINE")(llen ssn))
((= (cdr (assoc 0 ent)) "LWPOLYLINE")(pllen ssn))
)
)
(setq linelens (adddist llens)
plinelens (adddist pllens)
)
(setq num (rtos num 2 0)
len (rtos len 4)
)
(alert (strcat num " line lengths = " len))
)
)
)
HTH,