This is a commented version of one of the routines in my link.
(defun c:circlepline (/ ent vlst pt)
(and ; and will stop at any nill
(setq ent (car (entsel "\nSelect pline to add circles.")))
(or (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") ; verify entity type
(prompt "\nNot a LWpolyline."))
;; get the pline vertex in a list
(setq vlst (mapcar 'cdr (vl-remove-if-not
'(lambda (x) (= 10 (car x))) (entget ent))))
(foreach pt vlst ; make the circles
(entmake (list '(0 . "CIRCLE")
(cons 8 "0") ; layer, comment out to use current layer
(cons 10 pt) ; center pt
(cons 40 (getvar "Dimscale")) ; radius of circle
))
)
)
(princ) ; this leaves no message when the routine ends
)