;; | ---------------------------------------------------------------------------- ;; | PL_ReconstructPoly ;; | ---------------------------------------------------------------------------- ;; | Function : Reconstructs a polyline list by joining the split up objects ;; | resulting from an exploded polyline object ;; | Arguments: ;; | 'pt1' - First point of the polyline (passed in OCS) ;; | 'ss' - Exploded selection set ;; | 'Mode' - Mode of sampling, can be either ;; | Angular Interval (Angular) ;; | Chord Length (ChordLen) ;; | Chord Offset (ChordOffset) ;; | 'ParVal' - Parameter Value to use, either for angular interval, ;; | chord length or chord offset ;; | Returns: ;; | A list of all points forming the polyline. This list is in UCS ;; | Updated : August 13, 1999 ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun PL_ReconstructPoly ( pt1 ss Mode ParVal / ssl vlist _vlist cnt ename entl en Cen Rad StAng EndAng ) (setq vlist '()) (if ss (progn (setq ssl (sslength ss) cnt 0 pt1 (trans pt1 (ssname ss 0) 1) ) (repeat ssl (setq ename (ssname ss cnt) entl (entget ename) en (LI_item 0 entl) ) (cond ((= en "LINE") (setq vlist (append vlist (list (LI_item 10 entl))) vlist (append vlist (list (LI_item 11 entl))) ) ) ((= en "ARC") (setq Cen (LI_item 10 entl) Rad (LI_item 40 entl) StAng (MI_r2d (LI_item 50 entl)) EndAng (MI_r2d (LI_item 51 entl)) ) (if (< StAng 0.00001) (setq StAng 0.0) ) (if (< EndAng 0.00001) (setq EndAng 0.0) ) (setq _vlist (GE_Arc2Line Cen Rad StAng EndAng Mode ParVal)) ;; Handling for the case when the first segment happens to be an ARC (if (= cnt 0) (progn (if (not (equal (car _vlist) pt1 0.001)) (setq _vlist (reverse _vlist)) ) (setq vlist _vlist) ) (progn (if (not (equal (last vlist) (car _vlist) 0.001)) (progn (setq _vlist (GE_Arc2Line_CW Cen Rad EndAng StAng Mode ParVal)) (if (not (equal (last vlist) (car _vlist) 0.001)) (setq _vlist (reverse _vlist)) ) )) (setq vlist (append vlist _vlist)) )) ) ) (setq cnt (1+ cnt)) ; *Caution* Do not move this line ) )) (if vlist (progn (setq vlist (GE_DistWeed vlist 0.001 "Slope")) (if vlist (setq vlist (car vlist)) ) )) vlist )