prodromosm, try this revision...
- (defun c:demo (/ acdcp acdist cp e fn fo lst osm par parpt pdist poly pos pre pt s) (vl-load-com) (setq osm (getvar 'osmode)) (setvar 'osmode 1) (prompt "\nSelect a 3DPolyline to extract Stations and Elevations to txt file: " ) (if (and (setq s (ssget "_+.:E:S" '((0 . "POLYLINE") (-4 . "&") (70 . ))) (setq fn (getfiled "Enter the output filename:" (getvar 'DWGPREFIX) "txt" 1 ) ) ; no prefix ;|(setq pre (strcase (getstring "\nEnter station prefix:")))|; (setq cp (getpoint "\nClick or specify center point : ")) );; and (progn (setq poly (vlax-ename->vla-object (ssname s 0)) e (fix (vlax-curve-getEndParam poly)) pos 0 par 0 acdist 0.0 lst nil cp (vlax-curve-getClosestPointToProjection poly cp '(0.0 0.0 1.0) ) ) ;; setq (while (/= par (1+ e)) (setq pt (vlax-curve-getPointAtParam poly par) pos (1+ pos) ) ;; setq (if (not parpt) (setq lst (cons (strcat ;|pre (itoa pos) "," "0.000,"|; "0.000," (rtos (caddr pt) 2 3) ) lst ) parpt pt ) ;; setq ;; the pdist variable is needed to the accumulated the distance (setq pdist (distance (list (car pt) (cadr pt)) (list (car parpt) (cadr parpt)) ) lst (cons (strcat ;|pre (itoa pos) "," (rtos (setq pdist (distance (list (car pt) (cadr pt)) (list (car parpt) (cadr parpt)))) 2 3) ","|; (rtos (setq acdist (+ acdist pdist)) 2 3) "," (rtos (caddr pt) 2 3) ) lst ) parpt pt ) ;; setq ) ;; if (if (equal pt cp 1e- (setq acdcp (- acdist)) ) (setq par (1+ par)) ) ;; while (if lst (progn (setq lst (mapcar '(lambda (x) (strcat (rtos (+ (atof x) acdcp) 2 3) (substr x (1+ (vl-string-search "," x))) ) ) (reverse lst) ) fo (open fn "w") ) ;; setq (foreach l lst (write-line l fo) ) ;; foreach (close fo) (startapp "notepad" fn) ;; added to open the new txt file ) ;; progn ) ;; if ) ;; progn ) ;; if (setvar 'osmode osm) (princ));; demo
Regards, Marko Ribar, d.i.a. |