内置功能适用于弱者
- (defun GetArcX ( e y / dxf asin l c r s f a g )
- ;; © Lee Mac 2010
- (defun dxf ( c l ) (cdr (assoc c l)))
- (defun asin ( x )
- (if (< (abs x) 1.0)
- (if (equal (abs x) 1.0 1e-
- (* x (/ pi 2.))
- (atan (/ x (sqrt (- 1.0 (* x x)))))
- )
- )
- )
-
- (setq l (entget e))
- (setq c (dxf 10 l) r (dxf 40 l) s (dxf 50 l) f (dxf 51 l))
- (if (< f s) (setq s (- s (* 2 pi))))
- (if (setq a (asin (/ (- y (cadr c)) r)))
- (mapcar
- (function
- (lambda ( n )
- (if (<= s n f)
- (list (+ (* r (cos n)) (car c)) y)
- )
- )
- )
- (list (- pi a) (rem (+ (* 2 pi) a) (* 2 pi)))
- )
- )
- )
- (defun c:test ( / e pt x y )
- (if (and (setq e (car (entsel "\nSelect Arc: ")))
- (setq p (getpoint "\nPick Y Elevation: "))
- (setq x (GetArcX e (cadr (trans p 1 0)))))
- (foreach pt x
- (if pt
- (entmakex (list (cons 0 "POINT") (cons 10 pt)))
- )
- )
- )
- )
|