Here are some basic calculations but it does not calculate the proper order of points.
For it to work, lines have to be drawn in CCW orientation. Otherwise it will produce unexpected results.
I don't have time to calculate orientations so I'll just toss it out there.
Basically, it just finds the perpendicular from the picked point, "mirrors" it to the other line and where they intersect is the center point. The perpendiculars then become legs of the start and end angles. Simple.
(defun make-arc (cpt pt pt2)
(setq lst (list '(0 . "ARC")
'(100 . "AcDbEntity")
'(100 . "AcDbCircle")
(cons 10 cpt)
(cons 40 (distance pt cpt))
'(210 0.0 0.0 1.0)
'(100 . "AcDbArc")
(cons 50 (angle cpt pt2))
(cons 51 (angle cpt pt))
)
)
(entmake lst)
)
(defun C:TANARC (/ cp1 cp2 cpt e1 e2 idist ip n o obj1 obj2
p1 p2 p3 p4 pt pt2)
(setq e1 (entsel "\nPick first line: ")
e2 (entsel "\nPick second line: ")
pt (getpoint "\nPick start point on line: ")
)
(cond
((and e1 e2 pt)
(setq obj1 (vlax-ename->vla-object (car e1))
obj2 (vlax-ename->vla-object (car e2))
)
(mapcar (function (lambda (n o) (set n (vlax-curve-getstartpoint o))))
'(p1 p3) (list obj1 obj2)
)
(mapcar (function (lambda (n o) (set n (vlax-curve-getendpoint o))))
'(p2 p4) (list obj1 obj2)
)
(cond ((setq ip (inters p1 p2 p3 p4 nil))
(setq idist (distance ip pt)
cp1 (polar pt (+ (angle p1 p2) (/ pi 2.0)) idist)
pt2 (polar ip (angle p3 p4) (distance ip pt))
cp2 (polar pt2 (+ (angle p3 p4) (/ pi 2.0)) idist)
cpt (inters pt cp1 pt2 cp2 nil)
)
(make-arc cpt pt pt2)
)
)
)
)
)