提取桩坐标及编号
按编号顺序提取桩(圆)的编号和坐标;;; ======================================================================
;;; 定义一个新命令: SortTextExport
;;; 功能:
;;; 1. 让用户选择单行文字 (TEXT)
;;; 2. 根据数值大小 (从小到大) 排序
;;; 3. 将排序后的 "字符串,Y坐标,X坐标" 输出到桌面
;;;
;;; v2.0 更新:
;;; - 坐标 (X, Y) 优先使用 DXF 11 (对齐点)
;;; - 如果 DXF 11 不存在 (如默认左对齐), 则使用 DXF 10 (插入点)
;;; ======================================================================
(defun c:SortTextExport ( / ss i ent edata text-val ins-pt align-pt pt-to-use num-val x-coord y-coord text-list sorted-list desktop-path outfile-path f item line)
(princ "\n--- 文本排序导出工具 (使用对齐点) ---")
;; 1. 让用户框选选择单行文字 (DBText 在 LISP/DXF 中称为 "TEXT")
(prompt "\n请框选要排序的单行文字(DBText): ")
(setq ss (ssget '((0 . "TEXT"))))
(if ss
(progn
(setq i 0)
(setq text-list '()) ; 初始化一个空列表来存储数据
;; 遍历选择集
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq edata (entget ent))
;; 提取数据
(setq text-val (cdr (assoc 1 edata))); 文本字符串 (DXF code 1)
;; --- 坐标提取逻辑 (已更新) ---
(setq ins-pt (cdr (assoc 10 edata))) ; 插入点 (DXF code 10)
(setq align-pt (cdr (assoc 11 edata))) ; 对齐点 (DXF code 11), 如果存在
;; 将文本字符串转换为数值
(setq num-val (atof text-val))
;; 确定要使用的坐标
;; 如果 DXF code 11 (对齐点) 存在, 则使用它
;; 否则, 使用 DXF code 10 (插入点)
(if align-pt
(setq pt-to-use align-pt)
(setq pt-to-use ins-pt)
)
(setq x-coord (car pt-to-use))
(setq y-coord (cadr pt-to-use))
;; --- 更新结束 ---
;; 将数据存储在一个列表中,格式为: (数值 字符串 Y X)
(setq text-list (cons (list num-val text-val y-coord x-coord) text-list))
(setq i (1+ i))
) ; end while
(if (not (null text-list))
(progn
;; 2. 根据单行文字的数值大小排序 (从小到大)
(setq sorted-list
(vl-sort text-list
(function (lambda (a b) (< (car a) (car b))))
)
)
;; 3. 将排序后的单行文字的...输出到桌面
;; 找到桌面路径 (适用于 Windows)
(if (setq desktop-path (strcat (getenv "USERPROFILE") "\\Desktop"))
(progn
(setq outfile-path (strcat desktop-path "\\SortedTextData.csv"))
;; 尝试打开文件进行写入
(if (setq f (open outfile-path "w"))
(progn
;; 写入数据
(foreach item sorted-list
;; item 是 (数值 字符串 Y X)
(setq line (strcat
(cadr item) ; 字符串
","
(rtos (caddr item) 2 8) ; Y坐标 (rtos 转换为字符串, 2=小数, 8=精度)
","
(rtos (cadddr item) 2 8) ; X坐标
))
(write-line line f)
)
(close f)
(alert (strcat "数据已成功导出到: \n" outfile-path))
)
(alert (strcat "错误: 无法写入文件! \n" outfile-path "\n请检查权限。"))
)
)
(alert "错误: 无法找到桌面路径。")
)
)
(prompt "\n未在所选对象中找到有效的文本。")
)
)
(prompt "\n未选择任何对象。")
)
(princ) ; 退出时不在命令行显示 nil
)
(princ "\n已加载 SortTextExport命令 (v2.0),请输入SortTextExport运行。")
(princ)
多谢分享! 感谢分享,试用了一下没反应不知道为什么 感谢分享,试用程序,没反应 +1 ,求解。
只是提取文字插入点的坐标,与桩圆心坐标没有关系。 感谢分享,支持楼主
页:
[1]