John, here's a version for r2000 and above that has a little more error checking. For example, it checks for linetype before applying it.
(defun getEnt (lst / ent)
(setvar "ERRNO" 0)
(while (and (not ent) (/= (getvar "ERRNO") 52))
(cond ((setq ent (car (entsel)))
(if (not (member (cdr (assoc 0 (entget ent))) lst))
(setq ent nil)
)
)
)
)
ent
)
(defun loadLtype (ltname ltfile / found doc ltypes ltype fname)
(setq doc (vla-get-activedocument (vlax-get-acad-object))
ltypes (vla-get-linetypes doc)
)
(cond
((setq fname (findfile ltfile))
(cond
((vl-catch-all-error-p
(vl-catch-all-apply 'vla-item (list ltypes ltname))
)
(vl-catch-all-apply 'vla-load (list ltypes ltname fname))
)
)
)
)
(vl-catch-all-apply 'vlax-release-object (list doc))
(vl-catch-all-apply 'vlax-release-object (list ltypes))
(if (tblsearch "LTYPE" ltname)
ltname
)
)
(defun C:CL (/ ent entl lfac ln ltyp osm pi2 pt r r2)
(vl-load-com)
(prompt "\nSelect circle or arc")
(cond
((setq ent (getEnt '("CIRCLE" "ARC")))
(setq entl (entget ent)
r (cdr (assoc 40 entl))
pt (cdr (assoc 10 entl))
)
(setq r (* 2.0 r 1.25))
(cond ((< r 0.9) (setq ln "center2" lfac 1.5))
((< r 7.0) (setq ln "center" lfac 1.0))
((< r 500.0) (setq ln "centerx2" lfac 0.85))
)
(if ln
(cond ((tblsearch "LTYPE" ln))
((loadLtype ln "acad.lin"))
((princ (strcat "\nCannot find required linetype (" ln ")"))
(setq ln nil)
)
)
)
(and ln lfac
(setq r (* r lfac)
r2 (/ r 2.0)
pi2 (/ pi 2.0)
)
(setq osm (getvar "OSMODE")
ltyp (getvar "CELTYPE")
)
(setvar "OSMODE" 0)
(setvar "CELTYPE" ln)
(vl-cmdf "LINE" (polar pt pi r2) (polar pt 0.0 r2) "")
(vl-cmdf "LINE" (polar pt pi2 r2) (polar pt (- pi2) r2) "")
(setvar "OSMODE" osm)
(setvar "CELTYPE" ltyp)
)
)
)
(princ)
)