;; | ---------------------------------------------------------------------------- ;; | GE_Densify2 ;; | ---------------------------------------------------------------------------- ;; | Function : Densifies the points in a polyline object by an alternative ;; | method. ;; | Arguments: ;; | 'ename' - polyline entity name (must be a 2d or 3d polyline ;; | without arcs) ;; | 'Mode' - Densify Method (can be either "SegLength" or ;; | "NumSegments") ;; | 'NumSegments' - Number of segments to be created in this polyline ;; | after the densify process. ;; | 'SegLength' - Segment length to be generated in this polyline ;; | after the densify process ;; | be created) ;; | Action : Returns a list of densified points ;; | Updated : July 24, 2006 ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun GE_Densify2 ( ename Mode NumSegments SegLength / cnt1 cnt2 CumLen len len1 len2 More1 More2 oname param pt pt2 ptLst ss1 vlist _vlist d ) (setq vlist (PL_plist ename)) (if (not (PL_Open? ename)) (setq vlist (append vlist (list (car vlist)))) ) (setq _vlist (list (car vlist)) oname (vlax-ename->vla-object ename) ) (cond ((= Mode "NumSegments") (command "._Divide" (list ename (car vlist)) NumSegments) (setq ss1 (ssget "_P")) ) ((= Mode "SegLength") (setq len (MI_CurveLength ename)) (if (> len SegLength) (progn (command "._Measure" (list ename (car vlist)) SegLength) (setq ss1 (ssget "_P")) ) (setq ss1 nil) ) ) ) (if ss1 (progn (setq ptLst (SS_SS2Pt ss1)) (command "._Erase" ss1 "") (setq cnt1 1 len (length vlist) cnt2 0 len2 (length PtLst) CumLen 0.0 More1 T ) (foreach pt1 vlist (if (/= cnt1 len) (progn (setq pt2 (nth cnt1 vlist) CumLen (+ CumLen (distance pt1 pt2)) ) (if More1 (setq More2 T) (setq More2 nil) ) (while More2 (setq pt (nth cnt2 ptLst) param (vlax-curve-getParamAtPoint oname pt) ) (if param (progn (setq d (vlax-curve-getDistAtParam oname param)) (if d (progn (if (< d CumLen) (progn (setq _vlist (cons pt _vlist) cnt2 (1+ cnt2) ) ) (setq More2 nil) ) ) (setq cnt2 (1+ cnt2)) ) ) (setq cnt2 (1+ cnt2)) ) (if (= cnt2 len2) (setq More2 nil More1 nil ) ) ) (setq _vlist (cons pt2 _vlist)) )) (setq cnt1 (1+ cnt1)) ) (setq vlist (reverse _vlist)) )) (vlax-release-object oname) vlist )