;;-------------------=={ Ellipse to Arc }==-------------------;;
;; ;;
;; Converts circular Ellipses & Elliptical Arcs (i.e. for ;;
;; which the Ellipse Axis Ratio = 1.0) to Circles & Arcs, ;;
;; whilst retaining all original properties. Works with ;;
;; Ellipses & Elliptical Arcs constructed in any UCS. ;;
;;------------------------------------------------------------;;
;; Author: Lee Mac, Copyright © 2013 -
www.lee-mac.com ;;
;;------------------------------------------------------------;;
(defun c:e2a ( / a b c e i m p q r s u v z )
(if (setq s (ssget "_:L" '((0 . "ELLIPSE") (40 . 1.0))))
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i))))
z (cdr (assoc 210 e))
c (trans (cdr (assoc 10 e)) 0 z)
p (trans (cdr (assoc 11 e)) 0 z)
a (distance '(0.0 0.0) p)
b (* a (cdr (assoc 40 e)))
r (angle '(0.0 0.0) p)
u (cdr (assoc 41 e))
v (cdr (assoc 42 e))
m (list (list (cos r) (- (sin r))) (list (sin r) (cos r)))
p (mapcar '+ c (mxv m (list (* a (cos u)) (* b (sin u)))))
q (mapcar '+ c (mxv m (list (* a (cos v)) (* b (sin v)))))
)
(if
(if (equal p q 1e-8)
(entmake
(cons '(0 . "CIRCLE")
(append (LM:defaultprops e)
(list
(cons 010 c)
(cons 040 a)
(assoc 210 e)
)
)
)
)
(entmake
(cons '(0 . "ARC")
(append (LM:defaultprops e)
(list
(cons 010 c)
(cons 040 a)
(cons 050 (angle c p))
(cons 051 (angle c q))
(assoc 210 e)
)
)
)
)
)
(entdel (cdr (assoc -1 e)))
)
)
)
(princ)
)
;; Default Properties - Lee Mac
;; Returns a list of DXF properties for the supplied DXF data,
;; substituting default values for absent DXF groups
(defun LM:defaultprops ( elist )
(mapcar
(function
(lambda ( pair )
(cond ((assoc (car pair) elist)) ( pair ))
)
)
'(
(008 . "0")
(006 . "BYLAYER")
(039 . 0.0)
(062 . 256)
(048 . 1.0)
(370 . -1)
)
)
)
;; Matrix x Vector - Vladimir Nesterovsky
;; Args: m - nxn matrix, v - vector in R^n
(defun mxv ( m v )
(mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
)
(princ)