- 积分
- 569
- 明经币
- 个
- 注册时间
- 2023-5-5
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
按编号顺序提取桩(圆)的编号和坐标
 - ;;; ======================================================================
- ;;; 定义一个新命令: 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)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|