Joe,
Sorry I was in a hurry & did not find an appropriate routine.
Here is a quickie.
;;;=======================[ PSimple.lsp ]=======================
;;; Author: Charles Alan Butler
;;; Version: 1.1 Nov. 09, 2007
;;; Purpose: To remove un needed vertex from a pline
;;;=============================================================
;; Note, very little testing has been done at this time
(defun c:PSimple (/ doc ent elst vlst idx dir keep result hlst len
group_on)
(vl-load-com)
;; CAB 11/03/07
;; group on the elements of a flat list
;; (group_on '(A B C D E F G) 3)
;; Result ((A B C) (D E F) (G nil nil)...)
(defun group_on (inplst gp# / outlst idx subLst)
(while inplst
(setq idx -1
subLst nil
)
(while (< (setq idx (1+ idx)) gp#)
(setq subLst (cons (nth idx inplst) sublst))
)
(setq outlst (cons (reverse sublst) outlst))
(repeat gp#
(setq inplst (cdr inplst))
)
)
(reverse outlst)
)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-StartUndoMark doc)
(setq ent (car (entsel "\n Select polyline to remove extra vertex: ")))
(if (and ent
(setq elst (entget ent))
(equal (assoc 0 elst) '(0 . "LWPOLYLINE"))
)
(progn
(setq idx 0)
(repeat (fix (vlax-curve-getendparam ent))
(cond
((null keep)
(setq keep '(1)
dir (angle '(0 0) (vlax-curve-getFirstDeriv ent 0.0))
))
((or (null(vlax-curve-getFirstDeriv ent idx))
(equal dir (setq dir (angle '(0 0)
(vlax-curve-getFirstDeriv ent idx))) 0.000001))
(setq keep (cons 0 keep))
)
((setq keep (cons 1 keep)))
)
(setq idx (1+ idx))
)
(setq vlst (vl-remove-if-not
'(lambda (x) (vl-position (car x) '(40 41 42 10))) elst))
(setq vlst (group_on vlst 4))
(setq idx -1
len (1- (length vlst))
keep (reverse (cons 1 keep))
)
(while (<= (setq idx (1+ idx)) len)
(cond
((not (zerop (cdr(cadddr (nth idx vlst))))) ; keep arcs
(setq result (cons (nth idx vlst) result))
)
((not (zerop (nth idx keep)))
(setq result (cons (nth idx vlst) result))
)
)
)
(setq hlst (vl-remove-if
'(lambda (x) (vl-position (car x) '(40 41 42 10))) elst))
(mapcar '(lambda(x) (setq hlst (append hlst x))) (reverse result))
(setq hlst (subst (cons 90 (length result)) (assoc 90 hlst) hlst))
(entmod hlst)
)
)
(vla-EndUndoMark doc)
(princ)
)
(prompt "\nPline Simplify loaded, PSimple to run.")
(princ)
<edit: revised code>