The arc can be a little tricky
(entmake (list (cons 0 "ARC") ;***
(cons 6 "BYLAYER")
(cons 8 "0") ; layer
(cons 10 (list 0.0 0.0 0.0)) ;*** Center point (in OCS)
(cons 39 0.0) ; Thickness (optional; default = 0)
(cons 40 1.0) ;*** Radius
(cons 50 0.0) ;*** Start angle
(cons 51 1.57079633) ;*** End angle
)) ; Extrusion direction. (optional; default = 0, 0, 1)
Here is an old routine that uses an arc.
;;; By Charles Alan Butler : Last Modified 03/25/05
;;; ArcL.lsp (Arc Leader)
;;; Uses the current layer & MyArrow Arrow head
;;;====== Main Lisp Routine =======
(defun c:ArcL (/ usercmd useros userAngDir loop ptpick Lastpt makeMyblk
ArcC arcArw *error*)
;; error function & Routine Exit
(defun *error* (msg)
(if
(not
(member
msg
'("console break" "Function cancelled" "quit / exit abort" "")
)
)
(princ (strcat "\nError: " msg))
)
(setvar "osmode" useros)
(setvar "CMDECHO" usercmd)
(setvar "angdir" userangdir)
(princ)
)
;end error function
;;;=============================================================
;;; Local Functions
;;;=============================================================
(defun makeMyblk (/ ss)
;; NOTE arrow is 45deg rotated
(command "-color" "Red")
(command "line" "0,0" "0,6" "")
(setq ss (ssadd))
(ssadd (entlast) ss)
(command "line" "0,0" "6,0" "")
(ssadd (entlast) ss)
(command "line" "0,0" (polar '(0 0) 0.2618 6) "")
(ssadd (entlast) ss)
(command "line" "0,0" (polar '(0 0) 1.309 6) "")
(ssadd (entlast) ss)
(command "-block" "MyArrow" '(0 0) ss "")
(command "-color" "ByLayer")
) ;defun
;;;=============================================
;;; ArcC Arc Leader with Circle Arrow Head
;;; Uses the current layer & Circle Arrow head
;;;=============================================
(defun ArcC (/ ArcEnt)
(setq ArcEnt (list (entlast) ptpick))
(Command "_.Circle" ptpick 2) ; circle arrow head 2" radius
(command "_trim" (entlast) "" ArcEnt "")
) ; end defun
;;;=============================================
;;; ArcArw Arc Leader with Arrow Type Head
;;; Uses the current layer & Block Arrow head
;;;=============================================
(defun arcArw (ptpick / L_Angle cenpt rad StartAng arcdata
EndAng ArwOffset
)
(vl-load-com)
(setq arwsize 6)
(setq vobj (vlax-ename->vla-object (entlast)))
(setq stpt (trans (vlax-curve-getstartpoint vobj) 0 1))
(setq enpt (trans (vlax-curve-getendpoint vobj)0 1))
(setq len (vlax-curve-getdistatparam vobj (vlax-curve-getendparam vobj)))
(if (< (distance stpt ptpick) (distance enpt ptpick))
(setq dist arwsize)
(setq dist (- len arwsize)
enpt stpt)
)
(setq p1 (trans (vlax-curve-getpointatdist vobj dist) 0 1)) ; UCS to WCS ; end of arrow
(setq ang (- (* 180.0 (/ (angle ptpick p1) pi)) 45))
(setvar "osmode" 0)
;; ---------- Arrow Head ---------------
(if (not (tblsearch "block" "MyArrow"))
(MakeMyBlk)
)
(command "_.insert" "MyArrow" ptpick "" "" ang)
); end defun
;;;=============================================================
;;;=============================================================
;;; Routine Starts Here
;;;=============================================================
;;;=============================================================
(princ "\n")
(princ "\n Arc Leader - Version 1.3")
(princ "\n")
;;; ------- Some Housekeeping ------------------
(setq usercmd (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq useros (getvar "osmode"))
(setvar "osmode" 0)
(setq userANGDIR (getvar "angdir"))
(setvar "angdir" 0)
(if (not ArType) ; Set Arrow Type FOR THE FIRST TIME IN THE ROUTINE
(setq ArType "Arrow")
) ; endif
;; loop until user enters point or "C" or "A"
(setq loop T)
(while loop
(initget 1 "Circle Arrow")
(setq
ptpick (getpoint
(strcat "\nPick leader start point or [Circle / Arrow]:<" ArType ">"))
)
(cond
((= (type ptpick) 'LIST) ; point picked
(setq loop nil) ; exit loop
)
((or (= ptpick "Circle") (= ptpick "Arrow"))
(setq ArType ptpick)
)
(T (alert "Pick point or enter C or A"))
)
) ; end while
(command "arc" ptpick pause pause)
(if (= "ARC" (cdr (assoc 0 (entget (entlast)))))
(progn ; arc created
(setq Lastpt (getvar "lastpoint"))
(cond
((= ArType "Arrow")
(ArcArw ptpick)
)
((= ArType "Circle")
(ArcC)
)
)
)
) ; endif
;;;========== Exit Sequence ============
(*error* "")
(princ)
(list ptpick Lastpt) ; return the start & end point of the arc
) ; end defun
(prompt "\nArc Leader Loaded, Type ArcL to run")
(princ)
;;;========== End of Routine ============
;;;/////////////
;;; EOF
;;;\\\\\\\\\\\\\