Another for fun:
(defun c:foo (/ a b el l s w)
;; RJP » 2025-07-23
;; Creates separate polyline segments preserving widths etc..
(cond ((setq s (ssget '((0 . "LWPOLYLINE"))))
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(setq el (entget e))
(setq a (append (reverse (member '(100 . "AcDbPolyline") (reverse el))) '((90 . 2))))
(setq b (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42))) el))
(while (cddddr b)
(setq l (list (car b) (cadr b) (caddr b) (cadddr b)))
(setq w ;; Set global width if start and end are 'equal'
(if (equal (cdadr b) (cdaddr b) 1e-4)
(list (cons 43 (cdadr b)))
)
)
(setq b (cddddr b))
(entmakex (append a (append l w (list (car b) (cadr b) (caddr b) (cadddr b)))))
)
(entdel e)
)
)
)
(princ)
)