Since you have the center, start & end points, the radius & orientation are both known.
As, such, I think the function can be written as:Code - Auto/Visual Lisp: [Select]
(defun c:test1 (/ dxf en grr ip l ls p1 p2 r)
(initget 7)
(and
(setq r (getdist "\nRadius : "))
(setq ip (getpoint "\nSpecify vertex : "))
(setq p1 (getpoint ip "\np1 "))
(while
(and (setq grr (grread t 13))
(= (car grr) 5)
(setq p2 (cadr grr))
(vl-consp p2)
)
;;; (setq p2 (getpoint ip "\np2 "))
(redraw)
(and
(setq l (ripp-bulge r ip p1 p2)
ls (mapcar '(lambda (x)
(if
(listp x)
(trans x 1 0)
x
)
)
l
)
)
(if (or en
(progn
(setq
en (entmakex (vl-list* '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(90 . 2)
'(70 . 0)
(mapcar 'cons '(10 42 10) ls)
)
)
)
(setq
dxf (vl-remove-if
'(lambda (x) (vl-some '(lambda (i) (= (car x) i)) '(10 42)))
(entget en)
)
)
)
)
(entmod (append dxf (mapcar 'cons '(10 42 10) ls)))
)
(foreach x (list (car l) (caddr l))
(grdraw ip x 2)
)
)
)
)
(princ)
)