明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 依然小小鸟

[提问] 如何将文字转化为高程点?

[复制链接]
发表于 2025-12-3 12:15:18 | 显示全部楼层

  1. (defun xyp-Text2Gcd (s1 del-tnil / ar tx)
  2.   (defun dxf (code elist) (cdr (assoc code elist)))
  3.   "xyp-Text2Gcd 数字文本转高程点 (xyp-Text2Gcd s1数字文本 del-tnil原文本删除)"
  4.   (if (and (=(xyp-DXF 0 s1)"TEXT")
  5.            (setq tx (xyp-DXF 1 s1))
  6.            (distof tx)
  7.       )
  8.     (progn
  9.       (setq ar (getvar 'ATTREQ))
  10.       (setvar 'ATTREQ 1)
  11.       (command "-insert" "gc200" (xyp-DXF 10 s1) "" "" "" tx)
  12.       (if del-tnil
  13.         (entdel s1)
  14.       )
  15.       (setvar 'ATTREQ ar)
  16.       (entlast)
  17.     )
  18.   )
  19. )
回复 支持 反对

使用道具 举报

发表于 2025-12-3 14:22:17 | 显示全部楼层
一年多的时间,楼主要是自动去学 lisp,早就解决了,提取文本(单行、多行)、文本的ascii、cass的gc200(表达Z值,其实也不需要gc200的,毕竟块参照,运行速度慢),这些论坛都有 lisp 源码。
不去学也行,花点小费用,总会有 lisp 者低价解决的。
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
这个简单识别文字位置坐标信息导出,然后展点高程点就可以
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
(defun c:ExportHDataToTXTH (/ ss layerName filePath blkRef atts H_values xCoord yCoord file insPt counter totalBlocks)
  (vl-load-com)
  
  ;; 用户交互输入
  (setq layerName (getstring "\n请输入要处理的图层名称: "))
  (setq filePath (getfiled "选择保存位置" "" "txt" 1))
  
  (if (and layerName filePath)
    (progn
      ;; 创建或打开文件
      (setq file (open filePath "w"))
      (setq counter 1) ; 初始化点号计数器
      
      ;; 选择指定图层的块参照
      (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 8 layerName))))
        (progn
          (setq totalBlocks (sslength ss)) ; 获取总块数
          (princ (strcat "\n共找到 " (itoa totalBlocks) " 个块,开始处理..."))
         
          (vlax-for blkRef (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
            ;; 进度提示(每处理10个块输出一次)
            (if (= (rem counter 10) 0)
              (princ (strcat "\n已处理 " (itoa counter) "/" (itoa totalBlocks) " 个块 (" (itoa (fix (* (/ counter totalBlocks) 100))) "%)"))
            )
            
            ;; 获取插入点坐标
            (setq insPt (vlax-get blkRef 'InsertionPoint))
            (setq xCoord (rtos (car insPt) 2 3)) ; 强制保留3位小数
            (setq yCoord (rtos (cadr insPt) 2 3))
            
            ;; 获取所有H属性值(按遍历顺序存储)
            (setq atts (vlax-invoke blkRef 'GetAttributes))
            (setq H_values '())
            (foreach att atts
              (if (= (vla-get-TagString att) "H")
                (setq H_values (append H_values (list (vla-get-TextString att))))
              ) ; if闭合
            ) ; foreach闭合
            
            ;; 合并H值生成Z坐标并写入文件
            (cond
              ((>= (length H_values) 2)
                (setq zCoord (strcat (nth 0 H_values) "." (nth 1 H_values)))
                (write-line (strcat (itoa counter) ",," xCoord "," yCoord "," zCoord) file)
              )
              ((= (length H_values) 1)
                (write-line (strcat (itoa counter) ",," xCoord "," yCoord ",N/A") file)
              )
              (t
                (princ (strcat "\n警告: 块 " (vla-get-Name blkRef) " 缺少有效H属性"))
              )
            ) ; cond闭合
            (setq counter (1+ counter)) ; 计数器递增
          ) ; vlax-for闭合
          (vla-delete (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
        ) ; progn闭合
        (princ "\n未找到符合条件的块参照。")
      ) ; if闭合
      (close file)
      (princ (strcat "\n处理完成!数据已保存至: " filePath))
    ) ; progn闭合
    (princ "\n操作已取消。")
  ) ; if闭合
  (princ)
)

;; 加载提示
(princ "\n输入命令 ExportHDataToTXTH 运行程序。")
(princ)这个是提取块的 也是没有z值属性
你可以参考
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
留个记号
                                       
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
gzxl 发表于 2025-12-3 14:22
一年多的时间,楼主要是自动去学 lisp,早就解决了,提取文本(单行、多行)、文本的ascii、cass的gc200(表达 ...

有可能没有接触过编程的,觉得是很高深的东西学不会,就没有去尝试学。其实简单的单个功能的编程根本不需要复杂的算法,就是拼积木一样,或者借助原有的源代码修修补补就能满足自己个性化的需要
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-12-27 12:00 , Processed in 0.173160 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表