Code:
; string convert in list(defun str-to-list (str)
(mapcar
(function pl:read)
(vl-remove
""
(apply (function append)
(mapcar (function (lambda (a) (pl:string->list a " "))) (pl:string->list str "\""))
)
)
)
)
(defun pl:string->list (_str _br / _pos)
(if (setq _pos (vl-string-search _br _str))
(cons (substr _str 1 _pos) (pl:string->list (substr _str (+ (strlen _br) _pos 1)) _br))
(list _str)
)
)
(defun pl:read (str / _chk)
(cond ((vl-string-position 45 str 1) str)
((= "" (setq _chk (vl-string-trim "-0123456789" str))) (atoi str))
((= "." _chk) (atof str))
((= "," _chk) (atof (vl-string-translate "," "." str)))
(t str)
)
)
;Selection set of line lengths are totaled and displayed.
;--------------------------------------------------
(defun GetArcLength (END_ANG START_ANG ARC_RAD / TOTAL_ANG)
(setq TOTAL_ANG (- END_ANG START_ANG))
(while (< TOTAL_ANG 0)
(setq TOTAL_ANG (+ TOTAL_ANG (* 2 pi)))
)
(while (> TOTAL_ANG (* 2 pi))
(setq TOTAL_ANG (- TOTAL_ANG (* 2 pi)))
)
(* (* 2 pi ARC_RAD) (/ TOTAL_ANG (* 2 pi)))
)
;--------------------------------------------------
;get length of lwpolyline or polyline (no bulges)
(defun GET_LWPL ()
(vl-load-com)
; (setq OBJ (vlax-ename->vla-object (car (entsel "Select entity: "))))
(setq OBJ (vlax-ename->vla-object ENT))
(if (vlax-property-available-p OBJ 'Length)
(setq LWTLEN (vlax-get obj 'Length))
; (princ "Entity has no Length property")
(setq LWTLEN 0.0)
)
(setq LLEN LWTLEN TLEN (+ LLEN TLEN)
)
) ;end GET_LWPL
(defun c:ADDLINE () ;( / A B LEN TLEN LLEN )
(prompt "Select desired LINE and/or ARC entities ->") (terpri)
(setq SS (ssget)
SSZERO (ssadd)
SSL (sslength SS)
NUM 0
TLEN 0
LLEN 0
)
(repeat SSL
(setq ENT (ssname SS NUM)
ENTAL (entget ENT)
ENTTYPE (cdr (assoc 0 ENTAL))
)
(cond
((eq ENTTYPE "LINE")
(progn
(GET_LWPL)
(prompt (strcat "\n" (rtos NUM 2 0) " " ENTTYPE " " (rtos LLEN 2 2)))
(setq llist (str-to-list (strcat "\n" (rtos num 2 0) " " enttype " " (rtos llen 2 2))))
;;; (setq LLIST (list LLIST))
))
;;; ((eq ENTTYPE "POLYLINE")
;;; (progn
;;; (GET_LWPL)
;;; (prompt (strcat "\n" (rtos NUM 2 0) " " ENTTYPE " " (rtos LLEN 2 2)))
;;; ))
((eq ENTTYPE "ARC")
(progn
; Get the Arc's dimensional data:
(setq SA (cdr (assoc 50 ENTAL)) ;start angle
EA (cdr (assoc 51 ENTAL)) ;end angle
AR (cdr (assoc 40 ENTAL)) ;arc radius
)
; Calculate the ARC's length:
(setq AL (GetArcLength EA SA AR) ;arc length
LLEN AL
TLEN (+ LLEN TLEN)
)
(if (eq LLEN 0.0) (ssadd ENT SSZERO))
(prompt (setq ALIST (strcat "\n" (rtos NUM 2 0) " " ENTTYPE " " (rtos LLEN 2 2) " " (rtos AR 2 2))))
(setq alist (str-to-list (strcat "\n" (rtos num 2 0) " " enttype " " (rtos llen 2 2) " " (rtos ar 2 2))))
))
;;; ((eq ENTTYPE "LWPOLYLINE")
;;; (progn
;;; (GET_LWPL)
;;; (prompt (strcat "\n" (rtos NUM 2 0) " " ENTTYPE " " (rtos LLEN 2 2)))
;;; ))
(ENTTYPE
(progn
(ssadd ENT SSZERO)
(prompt (strcat "\n" (rtos NUM 2 0) " " ENTTYPE " " "Length not found."))
)
)
)
(setq NUM (1+ NUM))
)
(setq SHOWLEN (strcat "\nTotal length: " (rtos TLEN 2 2)
" and [" (rtos (sslength SSZERO) 2 0) "] object(s) ignored."
)
)
(alert SHOWLEN)
(princ)
)
;-