Must be a better way to convert a line but this will do for now.
;; Match Polyline.lsp
;; CAB 01/08/2007
;; Rev 3 02/09/2007
;; Convert LINES to plines when selected
(defun C:mPOLY () (MatchPOLY nil nil)) ; Honer Locked Layers
(defun C:mPOLYL () (MatchPOLY t nil)) ; Over ride locked layers
(defun C:mPOLY+ () (MatchPOLY nil t)) ; Honer Locked Layers & convert lines
(defun C:mPOLYL+ () (MatchPOLY t t)) ; Over ride locked layers & convert lines
;;=====================================================
;; Main function
;; match Properties -> layer, linetype, global width
;;=====================================================
(defun MatchPOLY (UnLock lflag / colr ename ent i
lay ltyp obj ss typ wid Locked
lokt doc FoundLocked Layers filter pt
elst objlay dellst
)
(vl-load-com)
(if UnLock
(setq pkFilter "_+.:E:S")
(setq pkFilter "_+.:E:S:L")
)
(if lflag
(setq filter '((0 . "Polyline,LWpolyline,Line")))
(setq filter '((0 . "Polyline,LWpolyline")))
)
(prompt "\nSelect pline to copy from.")
(if (setq ss (ssget pkFilter '((0 . "Polyline,LWpolyline"))))
(progn
(vla-startundomark
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
)
(if UnLock ; Unlock layers
(vlax-for lay (vla-get-layers doc)
(if (= (vla-get-lock lay) :vlax-true)
(progn
(setq lokt (cons lay lokt))
(vla-put-lock lay :vlax-false)
)
)
)
)
(setq obj (vlax-ename->vla-object (ssname ss 0))
typ (substr (vla-get-objectname obj) 5)
lay (vla-get-layer obj)
Layers (vla-get-Layers doc)
)
(if (= (vla-get-Lock (vla-Item Layers lay)) :vlax-false)
(progn
(if (vl-catch-all-error-p
(setq wid (vl-catch-all-apply 'vla-get-constantwidth (list obj)))
)
(progn
(princ "\nWidth varies, setting to ")
(princ (setq wid 0))
)
)
(setq ltyp (vla-get-linetype obj)
colr (vla-get-color obj)
)
(setq FoundLocked 0)
(while
(progn
(prompt "\n** Select plines to change. **")
(setq ss (ssget ":L" Filter)) ; ignore locked layers
(if (null ss)
(princ "\nNothing selected, Try again.")
)
)
)
(setq i -1)
(while (setq ename (ssname ss (setq i (1+ i))))
(if (and lflag (= (cdr (assoc 0 (setq elst (entget ename)))) "LINE"))
;; convert LINE to a LW pline
(progn
(foreach n '(-2 -1 0 5 100 102 300 330 331 350 360)
(while (assoc n elst)
(setq elst (vl-remove (assoc n elst) elst))
)
)
(setq elst (append '((0 . "LWPOLYLINE")(100 . "AcDbEntity")
(100 . "AcDbPolyline")) elst))
(setq pt (assoc 10 elst))
(setq elst (vl-remove pt elst))
(setq elst (append elst (list '(90 . 2) '(70 . 0) '(43 . 0.0)
'(38 . 0.0) '(39 . 0.0) pt '(40 . 0.0)
'(41 . 0.0) '(42 . 0.0))))
(setq pt (assoc 11 elst))
(setq elst (vl-remove pt elst))
(setq elst (append elst (list (cons 10 (cdr pt)) '(40 . 0.0)
'(41 . 0.0) '(42 . 0.0))))
(entmake elst)
(setq dellst (cons ename DelLst))
(setq ename (entlast))
)
)
;; update plines
(setq obj (vlax-ename->vla-object ename))
(setq objlay (vla-get-layer obj))
(if (= (vla-get-Lock (vla-Item Layers objlay)) :vlax-true)
(setq FoundLocked (1+ FoundLocked))
(progn
(vla-put-constantwidth obj wid)
(vla-put-layer obj lay)
(vla-put-linetype obj ltyp)
(vla-put-color obj colr)
)
)
)
(and DelLst (mapcar 'entdel DelLst))
(if lokt ; relock layers
(foreach lay lokt
(vla-put-lock lay :vlax-true)
)
)
(if (not (zerop FoundLocked))
(prompt
(strcat "\nFound " (itoa FoundLocked) " objects on locked layers.")
)
)
(vla-endundomark doc)
) ; progn
(prompt "\nNot a polyline, or Locked layer.")
)
)
)
(princ)
)
<edit: updated code>