Here is how I might construct the Arc (I have used Dynamic Input for clarity):
To explain:
- Construct an XLINE extending perpendicular to the ARC using the PERpendicular Object Snap.
- Draw a CIRCLE centered at the intersection between the XLINE and ARC with circumference passing through the intersection between the XLINE & LINE.
- Copy the CIRCLE so that the center is located at the intersection between the XLINE and LINE.
- Construct the ARC with start point at the intersection of the copied CIRCLE and LINE, end point at the intersection of XLINE and ARC, and direction located at the intersection between the XLINE and LINE.
There are of course alternative methods (there are many ways to skin a cat in AutoCAD); for example, you can construct the initial
XLINE using the center of the
ARC to avoid using the
PERpendicular Object Snap.
Also, you could construct two additional
XLINEs perpendicular to the
LINE and initial
XLINE, and then use the intersection of these
XLINEs as the center of the resulting arc, as shown in the following diagram:
The arc could also be constructed using AutoLISP:
(defun c:myarc ( / a c i l p u v x z )
(while
(and
(setq p (getpoint "\nSpecify point on Arc: "))
(or
(null (setq a (car (nentselp p))))
(/= "ARC" (cdr (assoc 0 (entget a))))
)
)
(princ "\nPoint does not lie on an Arc.")
)
(if p
(progn
(while
(progn (setvar 'errno 0) (setq l (car (entsel "\nSelect Line: ")))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (= 'ename (type l))
(if (/= "LINE" (cdr (assoc 0 (entget l))))
(princ "\nSelected object is not a Line.")
)
)
)
)
)
(if l
(progn
(setq l (entget l)
u (cdr (assoc 10 l))
v (cdr (assoc 11 l))
p (vlax-curve-getclosestpointto a (trans p 1 0))
)
(if (< (distance p u) (distance p v))
(setq x u u v v x)
)
(if (and
(setq i (inters u v p (cdr (assoc 10 (entget a))) nil))
(setq x (polar i (angle i u) (distance p i)))
(setq c
(inters
x (polar x (+ (angle u v) (/ pi 2.0)) 1.0)
p (polar p (+ (angle p i) (/ pi 2.0)) 1.0)
nil
)
)
)
(progn
(if (LM:Clockwise-p p i x)
(setq z p p x x z)
)
(entmake
(list
'(0 . "ARC")
(cons 10 c)
(cons 40 (distance c p))
(cons 50 (angle c p))
(cons 51 (angle c x))
)
)
)
(princ "\nLine is parallel with perpendicular from Arc.")
)
)
)
)
)
(princ)
)
;; Clockwise-p - Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented
(defun LM:Clockwise-p ( p1 p2 p3 )
(<
(* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
(* (- (cadr p2) (cadr p1)) (- (car p3) (car p1)))
)
)
(vl-load-com) (princ)
Note that this arc is not unique since the original
XLINE can be position at any perpendicular on the arc.
I hope this is clear!