Could anyone suggest improvement for this code?
(defun c:test(/ pt p1 p2 p3 p4 pt1 pt2 pt3 pt4 dwgobj oldOSMOD)
(vl-load-com)
(defun *error* (errmsg)
(if
(not
(wcmatch errmsg
"Function cancelled,quit / exit abort,console break,end"
) ;_ >wcmatch
) ;_ >not
(princ (strcat "\nError: " errmsg))
) ;_ >if
(vla-endundomark dwgobj)
(if oldOSMOD
(setvar 'OSMODE oldOSMOD)
) ;_ >if
(princ)
) ;_ >defun
;; Circle Tangents
;; Author: Lee Mac, Copyright © 2014 - www.lee-mac.com
(defun grarc (cen pt1 pt2 / ang rad)
(setq ctan:res 60 ;; arc resolution (int > 0)
ctan:2pi (+ pi pi)
ctan:inc (/ ctan:2pi ctan:res)
) ;_ >setq
(setq ang (angle cen pt1)
rad (distance cen pt1)
) ;_ >setq
(repeat (fix (/ (rem (+ (- (angle cen pt2) ang) ctan:2pi) ctan:2pi)
ctan:inc
) ;_ >/
) ;_ >fix
(grdraw pt1
(setq pt1 (polar cen (setq ang (+ ang ctan:inc)) rad))
1
) ;_ >grdraw
) ;_ >repeat
(grdraw pt1 pt2 1)
) ;_ >defun
;; Clockwise-p - Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented
(defun LM:Clockwise-p (p1 p2 p3)
((lambda (n) (< (car (trans p2 0 n)) (car (trans p1 0 n))))
(mapcar '- p1 p3)
)
) ;_ >defun
;; Project Point onto Line - Lee Mac
;; Projects pt onto the line defined by p1,p2
(defun LM:ProjectPointToLine (pt p1 p2 / nm)
(setq nm (mapcar '- p2 p1)
p1 (trans p1 0 nm)
pt (trans pt 0 nm)
) ;_ >setq
(trans (list (car p1) (cadr p1) (caddr pt)) nm 0)
) ;_ >defun
(setq dwgobj (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark dwgobj)
(setq p1 (getpoint "p1"))
(setq p2 (getpoint "p2"))
(setq p3 (getpoint "p3"))
(setq p4 (getpoint "p4"))
(setq oldOSMOD (getvar 'OSMODE))
(setvar 'OSMODE 0)
(if (LM:Clockwise-p p1 p2 p4)
(setq pt1 (polar p1 (setq ang (- (angle p1 p2) (* 0.5 pi))) 1.0))
(setq pt1 (polar p1 (setq ang (+ (angle p1 p2) (* 0.5 pi))) 1.0))
) ;_ >if
(setq pt2 (polar p2 ang 1.0))
(if (setq isClockwise(LM:Clockwise-p p3 p4 p1))
(setq pt3 (polar p3 (setq ang (- (angle p3 p4) (* 0.5 pi))) 1.0))
(setq pt3 (polar p3 (setq ang (+ (angle p3 p4) (* 0.5 pi))) 1.0))
) ;_ >if
(setq pt4 (polar p4 ang 1.0))
(setq pt (inters pt1 pt2 pt3 pt4))
(if isClockwise
(grarc
pt
(LM:ProjectPointToLine pt p3 p4)
(LM:ProjectPointToLine pt p1 p2)
) ;_ >grarc
(grarc
pt
(LM:ProjectPointToLine pt p1 p2)
(LM:ProjectPointToLine pt p3 p4)
)
)
(*error* "end")
)