I just stumbled on this, which you might find to be fun...
;;------------------------------------------------------------
;; Function created (06-10-02) to convert a complex 2dPolyline
;; (Type 1 = Fit curved, Type 2,3 = Splined)
;; into a Type 0 = Simple
;; while retaining all geometry.
;; Revised (07-06-02) to handle 3D polylines as well.
;;
(defun @cv_simplify (e0 / Object e ent Visible Param Done P Sw Ew Bulge
Vlist Blist Wlist Width Werror 2D)
(cond
((= (type e0) 'VLA-Object)
(setq Object e0 e0 (vlax-vla-object->ename Object))
)
((= (type e0) 'ENAME)
(setq Object (vlax-ename->vla-object e0))
)
)
(setq Visible (vla-get-Visible Object)
Width (vl-catch-all-apply 'vla-get-ConstantWidth (list Object))
Werror (vl-catch-all-error-p Width)
2D (= (vla-get-ObjectName Object) "AcDb2dPolyline")
e e0
)
(while (not Done)
(and
(setq e (entnext e))
(setq ent (entget e))
(or (= (cdr (assoc 0 ent)) "VERTEX")
(not (setq Done 1))
)
(/= (logand 16 (cdr (assoc 70 ent))) 16) ; spline control point
(setq P (cdr (assoc 10 ent)))
(setq Vlist (cons P Vlist))
2D
(or
(not Werror)
(setq Sw (cdr (assoc 40 ent))
Ew (cdr (assoc 41 ent))
Wlist (cons (cons Sw Ew) Wlist)
)
)
(setq Bulge (cdr (assoc 42 ent)))
(setq Blist (cons Bulge Blist))
)
)
(setq Blist (reverse Blist)
Wlist (reverse Wlist)
)
(if (= Visible :vlax-true)
(vla-put-visible Object :vlax-false)
)
(vla-put-type Object 0)
(vlax-release-object Object)
(setq Object (vlax-ename->vla-object e0))
(vlax-put Object "Coordinates" (apply 'append (reverse Vlist)))
(setq Param 0)
(repeat (length Blist)
(vla-setbulge Object Param (nth Param Blist))
(and
Werror
(setq Width (nth Param Wlist))
(vla-setwidth Object Param (car Width)(cdr Width))
)
(setq Param (1+ Param))
)
(if (not Werror)
(vla-put-ConstantWidth Object Width)
)
(vla-put-visible Object Visible)
)