明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11689|回复: 18

提取文字插入点坐标【测量坐标格式】

  [复制链接]
发表于 2013-1-21 22:48:14 | 显示全部楼层 |阅读模式
本帖最后由 skg123 于 2013-1-21 23:37 编辑

本程序提取文字的插入点坐标输出到文本
适应于 地图上只有文字 非 CASS格式的高程点
如下图

(defun c:TQWZZB()
   (princ "\n选择所需输出的点(point):")
   (setq ss (ssget ));;选取坐标点
   (setq n (sslength ss ));计算坐标点数量
        (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
   (setq i 0)
   (repeat n
  (setq spt (ssname ss i ))
    (setq ept (entget spt))
    (if (= (cdr (assoc 0 ept)) "TEXT")
     (progn
                                    (setq lxyz (cdr (assoc 10  ept)))
       (setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
       (setq sy (rtos (nth 0 lxyz)))
       (setq sz (rtos (nth 2 lxyz)))
                                        (setq i1 (+ i 1));计算点序号
                                        (setq sn (rtos i1 2 0));将序号实数转换成字符
       (setq sxyz (strcat sn",,"  sy ","  sx  ","  sz))
       (write-line sxyz ff)
    )
    )
    (setq i (+ i 1))
   );repeat
)
(prompt "*只适合TEXT点 << 命令:TQWZZB >> *输出格式(点号,, Y,X,Z)**")
(prin1)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-2-23 16:38:01 | 显示全部楼层

不错
不错
不错
发表于 2013-1-21 23:43:19 | 显示全部楼层
不错,,,,,,,,
发表于 2013-1-22 06:10:30 | 显示全部楼层
不不错,,,,,,,,,,,,,,,,
 楼主| 发表于 2013-1-22 08:20:54 | 显示全部楼层
本帖最后由 skg123 于 2013-10-26 09:01 编辑



某地形图 高程点如附件中所示,现在要提取高程点坐标值 几千个点,高程非CASS高程。文本的高程为 零 ,有个高程点在文本出入点的位置,带高程值。
操作步骤,首先删除所有高程点的文字,主要只删除文字,保留 “ 点”  然后运行程序 框选所有高程点就可以了。
方案2:删除无关的线,数据,然后运行程序,框选全部,把坐标提取
有兴趣的朋友自己去体会
  1. (defun c:TQZB()
  2. (princ "\n选择所需输出的点或文字:")
  3. (setq ss (ssget ));;选取坐标点
  4. (setq n (sslength ss ));计算坐标点数量
  5. (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
  6. (setq i 0)
  7. (repeat n
  8. (setq spt (ssname ss i ))
  9. (setq ept (entget spt))
  10. (if (= (cdr (assoc 0 ept)) )
  11. (progn
  12. (setq lxyz (cdr (assoc 10 ept)))
  13. (setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
  14. (setq sy (rtos (nth 0 lxyz)))
  15. (setq sz (rtos (nth 2 lxyz)))
  16. (setq i1 (+ i 1));计算点序号
  17. (setq sn (rtos i1 2 0));将序号实数转换成字符
  18. (setq sxyz (strcat sn",," sy "," sx "," sz))
  19. (write-line sxyz ff)
  20. )
  21. )
  22. (setq i (+ i 1))
  23. );repeat
  24. )
  25. (prompt "*提取地图中的高程点坐标值 << 命令:TQZB >> *输出格式(点号,, Y,X,Z)**")
  26. (prin1)
  1. (defun c:TQZB()
  2. (princ "\n选择所需输出的点或文字:")
  3. (setq ss (ssget ));;选取坐标点
  4. (setq n (sslength ss ));计算坐标点数量
  5. (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
  6. (setq i 0)
  7. (repeat n
  8. (setq spt (ssname ss i ))
  9. (setq ept (entget spt))
  10. (if (= (cdr (assoc 0 ept)) )
  11. (progn
  12. (setq lxyz (cdr (assoc 10 ept)))
  13. (setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
  14. (setq sy (rtos (nth 0 lxyz)))
  15. (setq sz (rtos (nth 2 lxyz)))
  16. (setq i1 (+ i 1));计算点序号
  17. (setq sn (rtos i1 2 0));将序号实数转换成字符
  18. (setq sxyz (strcat sn",," sy "," sx "," sz))
  19. (princ"\n")
  20. (prinC sxyz);命令行显示坐标值

  21. (write-line sxyz ff)

  22. )
  23. )
  24. (setq i (+ i 1))
  25. );repeat
  26. (close ff);关闭文件
  27. )

  28. (prompt "*提取地图中的高程点坐标值 << 命令:TQZB >> *输出格式(点号,, Y,X,Z)**")
  29. (prin1)
以下是改进版,可以将桩基的编号读取作为点号
  1. ;;;;读取桩基的编号文本,将编号作为点号
  2. (defun c:TQWZZB()
  3.    (princ "\n选择所需输出的点(point):")
  4.    (setq ss (ssget ));;选取坐标点
  5.    (setq n (sslength ss ));计算坐标点数量
  6.         (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
  7.    (setq i 0)
  8.    (repeat n
  9.   (setq spt (ssname ss i ))
  10.     (setq ept (entget spt))
  11.     (if (= (cdr (assoc 0 ept)) "TEXT")
  12.      (progn
  13.                                     (setq lxyz (cdr (assoc 10  ept)))
  14. setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
  15. (setq sX11 (rtos sx1 2 3))

  16.        (setq sy (rtos (nth 0 lxyz)2 3))
  17.        (setq sz (rtos (nth 2 lxyz)2 3))
  18.                                         (setq i1 (+ i 1));计算点序号
  19.                                         (setq sn (rtos i1 2 0));将序号实数转换成字符
  20. ;;获取文本内容(编号)做点号
  21. (setq ent (entget (ssname ss i)))
  22. (setq typeA (cdr (assoc 1 ent)))
  23. ;;;;
  24.        (setq sxyz (strcat typeA"," sn ","  sy ","  sx  ","  sz))
  25.        (write-line sxyz ff)
  26.     )
  27.     )
  28.     (setq i (+ i 1))
  29.    );repeat
  30. )
  31. (prompt "*只适合TEXT点 << 命令:TQWZZB >> *输出格式(点号,, Y,X,Z)**")
  32. (prin1)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-1-22 09:29:03 | 显示全部楼层
楼主厉害很强大,我一直用cass的数据交换功能,转入excel,宏,ok了
发表于 2013-1-22 23:03:05 | 显示全部楼层
本帖最后由 yshf 于 2013-1-22 23:15 编辑

改为如下,对“地形1.dwg”在不删除其它图元的情况下取得高程点的平面坐标及高程值


  1. (defun c:TQZB()
  2.     (princ "\n选择所需输出的点或文字:")
  3.     (if (setq ss (ssget '((0 . "INSERT") (2 . "DOT-1"))));;选取高程点
  4.         (progn
  5.             (setq n (sslength ss ));计算坐标点数量
  6.             (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
  7.      ;(setq ff (open (getfiled "文件保存为" "f:/" "csv" 1) "w"));将上一行注释,启用本行,所得文件可用Excel打开
  8.             (setq i 0)
  9.             (repeat n
  10.                 (setq ept  (entget (ssname ss i))
  11.         lxyz (cdr (assoc 10 ept))
  12.         i    (1+ i)
  13.   )
  14.                 (princ
  15.       (strcat
  16.           (itoa i)  ",,"              ;点号
  17.           (rtos (cadr lxyz) 2 3) ","  ;X坐标值
  18.           (rtos (car  lxyz) 2 3) ","  ;Y坐标值
  19.           (rtos (last lxyz) 2 3) "\n" ;高程值
  20.       )
  21.       ff
  22.   )
  23.             );end repeat
  24.      (close ff);关闭文件
  25.          );end progn
  26.     );end if
  27.     (princ)
  28. )
  29. (prompt "*提取地图中的高程点坐标值 << 命令:TQZB >> *输出格式(点号,, Y,X,Z)**")
发表于 2013-4-15 20:46:29 | 显示全部楼层
我的是vba写的.
发表于 2013-4-19 15:15:59 | 显示全部楼层
看来这个问题大家都碰到了,我也自己写了个
发表于 2013-5-9 19:14:04 | 显示全部楼层
我也得自己写一个了,又遇到这个问题了
发表于 2013-6-18 11:26:58 | 显示全部楼层
好东西。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 19:55 , Processed in 0.187794 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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