; written by Jonathan Dakin
;
jdakin@rogers.com; will draw a line from the end of an existing arc tangent to the arc.
(defun C:LTA ()
(setq ENT_ARC (entsel "Select ARC to draw line tangent to: "))
(if ENT_ARC
(progn
(setq ENT (car ENT_ARC) PT (cadr ENT_ARC))
(setq ENTDTL (entget ENT))
(if (= (cdr (assoc 0 ENTDTL)) "ARC")
(progn
; get detail of selected arc
(setq ENT_LAYER (cdr (assoc 8 ENTDTL)))
(setq ENT_LTYPE (cdr (assoc 6 ENTDTL)))
(setq ENT_COLOR (cdr (assoc 62 ENTDTL)))
(setq ENT_LTSCALE (cdr (assoc 48 ENTDTL)))
(setq CENTER (cdr (assoc 10 ENTDTL)))
(setq RADIUS (cdr (assoc 40 ENTDTL)))
(setq SA (cdr (assoc 50 ENTDTL)))
(setq EA (cdr (assoc 51 ENTDTL)))
(setq PA (angle CENTER PT))
; calculate endpoint coordinates
(setq SPT (list (+ (car CENTER) (* (cos SA) RADIUS))(+ (cadr CENTER) (*
(sin SA) RADIUS))))
(setq EPT (list (+ (car CENTER) (* (cos EA) RADIUS))(+ (cadr CENTER) (*
(sin EA) RADIUS))))
; draw copy of selected arc
(if (> (abs (- SA PA)) (abs (- EA PA)))
(command "ARC" SPT "near" PT EPT)
(command "ARC" EPT "near" PT SPT)
)
; erase selected arc
(command "ERASE" ENT "")
(command "CHPROP" (entlast) "" "LA" ENT_LAYER)
(if ENT_LTYPE
(command "LT" ENT_LTYPE)
)
(if ENT_COLOR
(command "C" ENT_COLOR)
)
(if ENT_LTSCALE
(command "S" ENT_LTSCALE)
)
(command "")
; draw line from end of arc, tangent to
(command "LINE" "")
)
(princ "\nArc not selected.")
)
)
(princ "\nNothing selected.")
)
(princ)
)