;;; THIS PROGRAM WILL INSERT CURVE DATA FOR A SELECTED ARC
;;; USING THE ARC DEFINITION INTO THE DRAWING.
(defun asin (a)
     (atan (/ a (sqrt (- 1 (* a a))))))
(defun tan (a)
     (/ (sin a) (cos a)))
(defun RTD (a)
     (* 180 (/ a pi)))
(defun C:AT
   (/ i en ed et r p1 p2 c dc t e sa ea a al ctr tad tab ts tp1)
   (setq tad (getvar "ANGDIR"))
   (setq tab (getvar "ANGBASE"))
   (setq tts (getvar "TEXTSIZE"))
   (prompt "\nEnter Textsize For Annotation <")
   (princ tts)
   (setq ts nil)
   (setq ts (getdist ">: "))
   (if (= ts nil)
    (setq ts tts)
    (princ)
   )
   (setq tst (getvar "textstyle"))
   (setq tce (getvar "CMDECHO"))
   (setvar "CMDECHO" 0)   
   (command "style" "crvtxt" "" ts "" "" "" "" "")
   (setq tbm (getvar "BLIPMODE"))
   (setq tos (getvar "OSMODE"))
   (setvar "ANGDIR" 0)
   (setvar "ANGBASE" 0)
   (setvar "BLIPMODE" 0)
   (setvar "OSMODE" 0)
   (command "ucs" "world")
   (setq i 1)
   (while i
      (setq en (car (entsel "\nPick a curve: ")))
      (if en
         (progn
             (setq ed (entget en))
             (setq et (cdr (assoc 0 ed)))
             (if (/= et "ARC")
                  (prompt "\nEntity is not an arc.")
                  (setq i nil)
             )
         )
         (prompt "\nYou did not pick anything.")
      )
    )
    (setq ctr (cdr (assoc 10 ed)))
    (setq r (cdr (assoc 40 ed)))
    (setq sa (cdr (assoc 50 ed)))
    (setq ea (cdr (assoc 51 ed)))
    (setq p1 (polar ctr sa r))
    (setq p2 (polar ctr ea r))
    (setq c (distance p1 p2))
    (setq a (abs (- ea sa)))
    (if (> a pi)
        (setq a (- (* 2 pi) a))
    )
    (setq dc (/ 100.000 r))
    (setq t (/ (/ c 2) (cos (/ a 2))))
    (setq e (- (sqrt (+ (* r r) (* t t))) r))
    (setq al (* (/ a (/ 100.000 r)) 100))
(command "circle" p1 (/ ts 2))
(command "circle" p2 (/ ts 2))
(setq cpl (* 20 ts))
(setq ang1 (- sa pi))
(setq ang2 (- ea pi))
(setq p3 (list (+ (car p1) (* cpl (cos ang1)))(+ (cadr p1) (* cpl (sin ang1)))))
(setq p4 (list (+ (car p2) (* cpl (cos ang2)))(+ (cadr p2) (* cpl (sin ang2)))))
(command "line" p1 p3 "")
(command "chprop" (entlast) "" "lt" "dashed" "")
(command "line" p2 p4 "")
(command "chprop" (entlast) "" "lt" "dashed" "")
    (if tos (setvar "OSMODE" tos))       
    (command "ucs" "p")        
    (setq tp1 (getpoint "\nCurve Text Insertion Point: "))
(setvar "OSMODE" 0)           
(command "text" tp1 "0" "D")
(command "text" "" "R")
(command "text" "" " ")
(command "text" "" "T")
(command "text" "" "L")
(command "text" "" "E")
(setq tp2 (list (- (car tp1) (/ ts 8)) (- (cadr tp1) (* 3.3333 ts))))
(setq tp3 (list (+ (car tp2) ts) (cadr tp2)))
(setq tp4 (list (+ (car tp2) (/ ts 2)) (+ (cadr tp2) ts)))
(setq tp5 (list (+ (car tp1) (/ ts 1.25)) (- (cadr tp1) (* 0.3 ts))))
(setq tp6 (list (+ (car tp1) (* ts 2)) (cadr tp1)))
(command "line" tp2 tp3 tp4 "c")
(command "text" tp5 "0" "a")
(setq dectdeg (angtos dc 0 6))
(setq tdeg (atoi dectdeg))
(setq tmin (* 60 (- (atof dectdeg) tdeg)))
(setq tsec (* 60 (- tmin (fix tmin))))
(setq tmin (fix tmin))
(setq cksec (- tsec (fix tsec)))
(if (>= cksec 0.5)
  (setq tsec (+ tsec 1))
)
(setq tsec (fix tsec))
(if (= tsec 60)
  (progn
  (setq tsec 0)
  (setq tmin (+ tmin 1))
  )
)
(if (= tmin 60)
  (progn
  (setq tmin 0)
  (setq tdeg (+ tdeg 1))
  )
)
(if (< tsec 10)
    (setq sec_sp "0")
    (setq sec_sp "")
)
(if (< tmin 10)
    (setq min_sp "0")
    (setq min_sp "")
)
(command "text" tp6 "0" (strcat "= " (rtos tdeg 2 0) "%%d" min_sp (rtos tmin 2 0) "'" sec_sp (rtos tsec 2 0) "\""))
(command "text" "" (strcat "= " (rtos r 2 2) "'"))
(setq dectdeg (angtos a 0 6))
(setq tdeg (atoi dectdeg))
(setq tmin (* 60 (- (atof dectdeg) tdeg)))
(setq tsec (* 60 (- tmin (fix tmin))))
(setq tmin (fix tmin))
(setq cksec (- tsec (fix tsec)))
(if (>= cksec 0.5)
  (setq tsec (+ tsec 1))
)
(setq tsec (fix tsec))
(if (= tsec 60)
  (progn
  (setq tsec 0)
  (setq tmin (+ tmin 1))
  )
)
(if (= tmin 60)
  (progn
  (setq tmin 0)
  (setq tdeg (+ tdeg 1))
  )
)
(if (< tsec 10)
    (setq sec_sp "0")
    (setq sec_sp "")
)
(if (< tmin 10)
    (setq min_sp "0")
    (setq min_sp "")
)
(command "text" "" (strcat "= " (rtos tdeg 2 0) "%%d" min_sp (rtos tmin 2 0) "'" sec_sp (rtos tsec 2 0) "\""))
(command "text" "" (strcat "= " (rtos t  2 2) "'"))
(command "text" "" (strcat "= " (rtos al 2 2) "'"))
(command "text" "" (strcat "= " (rtos e  2 2) "'"))
     (setvar "ANGDIR" (eval tad))
     (setvar "ANGBASE" (eval tab))
     (setvar "BLIPMODE" (eval tbm))
     (setvar "CMDECHO" tce) 
     (setvar "OSMODE" tos)     
     (if tst (setvar "TEXTSTYLE" tst))
     (if tts (setvar "TEXTSIZE" tts))
     (princ)
)
(defun *error* (msg)
 (if (/= msg "Function cancelled")
   (if (= msg "quit / exit abort")
    (princ)
    (princ (strcat "\nError: " msg))
   )
 )
 (if tbm (setvar "BLIPMODE" tbm))
 (if tce (setvar "CMDECHO" tce))
 (if tad (setvar "ANGDIR" tad))
 (if tab (setvar "ANGBASE" tab))
 (if tos (setvar "OSMODE" tos))
 (if tst (setvar "TEXTSTYLE" tst))
 (if tts (setvar "TEXTSIZE" tts))
 (princ)
)
(princ "\nArcText loaded ....... Start command with AT.")
(princ)
