;;;; FAQ: [21.8] How to write XYZ data of selected objects to a file?
;;; CDF - comma delimited string
(defun cdf-point (pt) (strcat (car pt) ", " (cadr pt) ", " (caddr pt)))
;;; SDF - space delimited, may easier be read back in to AutoCAD
(defun sdf-point (pt) (strcat (car pt) " " (cadr pt) " " (caddr pt)))
;;; convert this SDF format back to a point with
(defun str->point (s) (eval (read (strcat "(" s ")"))))
;;; Write a XYZ file of all selected objects (SDF see below)
(defun C:XYZ (/ ss fname f) (if (and (setq ss (ssget)) (setq fname (getfiled "Write XYZ to file" (strcat (getvar "DWGNAME") ".XYZ") "XYZ" 7)) (setq f (open fname "w"))) (foreach ele (std-sslist ss) (foreach pt (std-getpts ele) (write-line (cdf-point pt) f) ) ) ) (if f (close f)) )
;;; => <fname>.xyz
;;; 0.45, 12.3, -34.0
;;; For a ASC file (SDF-format) simply change all XYZ to ASC
;;; and cdf-point to sdf-point above.
(defun C:ASC (/ ss fname f) (if (and (setq ss (ssget)) (setq fname (getfiled "Write ASC to file" (strcat (getvar "DWGNAME") ".ASC") "ASC" 7)) (setq f (open fname "w"))) (foreach ele (std-sslist ss) (foreach pt (std-getpts ele) (write-line (sdf-point pt) f) ) ) ) (if f (close f)) )