;; | ---------------------------------------------------------------------------- ;; | GE_Arc2Line_CW ;; | ---------------------------------------------------------------------------- ;; | Function : Convert an ARC to a list of points to form a line (or polyline) ;; | Argument : ;; | 'Cen' - Center point ;; | 'Rad' - Radius of the ARC ;; | 'StAng' - Start Angle in degrees ;; | 'EndAng' - End Angle in degrees ;; | 'Mode' - Sampling Mode (can be "Angular", "ChordLen", ;; | "ChordOffset") ;; | 'ParVal' - Parameter Value ;; | Returns : A list of points forming the line segments along the arc ;; | Comments : Perform angle calculation in clockwise manner ;; | Updated : October 19, 1999 ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun GE_Arc2Line_CW(Cen Rad StAng EndAng Mode ParVal / CurAng CurPt PtLst ang tmp EndChord MaxCrown Continue ) (if (> EndAng StAng) (setq StAng (+ StAng 360.0)) ) (if (and (= ParVal 0.0) (= Mode "Angular")) (setq ParVal (- StAng EndAng)) ) (setq CurAng StAng CurPt (polar Cen (MI_d2r CurAng) Rad) PtLst (list CurPt) Continue T ) (if (member Mode (list "ChordLen" "ChordOffset")) (progn (cond ((= Mode "ChordLen") (setq EndChord (GE_GetEndChord Cen Rad (MI_d2r StAng) (MI_d2r EndAng))) (if (<= EndChord ParVal) (setq PtLst (append PtLst (list (polar Cen (MI_d2r EndAng) Rad))) Continue nil ) ) ) ((= Mode "ChordOffset") (setq MaxCrown (GE_GetBiggestCrown Cen Rad (MI_d2r StAng) (MI_d2r EndAng))) (if (<= MaxCrown ParVal) (setq PtLst (append PtLst (list (polar Cen (MI_d2r EndAng) Rad))) Continue nil ) ) ) ) )) (if Continue (progn (while (>= CurAng EndAng) (cond ((= Mode "Angular") (setq CurAng (- CurAng ParVal)) ) ((= Mode "ChordLen") (setq tmp (* 2.0 (MI_Sqr Rad)) ang (/ (- tmp (MI_Sqr ParVal)) tmp) ang (MI_r2d (MI_acos ang)) CurAng (- CurAng ang) ) ) ((= Mode "ChordOffset") (setq ang (/ (- Rad ParVal) Rad) ang (* 2.0 (MI_r2d (MI_acos ang))) CurAng (- CurAng ang) ) ) ) (setq CurPt (polar Cen (MI_d2r CurAng) Rad) PtLst (cons CurPt PtLst) ) ) (setq CurPt (polar Cen (MI_d2r EndAng) Rad) PtLst (reverse (cons CurPt (cdr PtLst))) ) )) PtLst )