明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 30984|回复: 20

从CASS中提取高程点坐标输出至文本(图面连续拾取,可框选)【原】

  [复制链接]
发表于 2012-12-17 11:52:18 | 显示全部楼层 |阅读模式
本帖最后由 skg123 于 2014-8-30 15:30 编辑










CASS有高程点坐标提取的功能,但它是全部提取,用户有时候想选择性的提取 需要的部分高程点就不方便了,针对该问题,别人编辑了一个小程序。可以在图上 直接碰选高程点(不能框选)讲坐标输出至文本,文本格式为CASS “XXX.dat”样式。
命令:gcdtq
《附件》
  1. 2014年8月30修改,修改后增加 高程点编码,可以框选,并且可以连续作业
  2. (defun c:tqgc(/ p1 p2 ss sn si i x y e fw)
  3. (prompt "**从CASS中提取高程点,请在命令行输入 tqgc , ** Esc 取消退出")
  4. (setq n 0)
  5. (setq sn 0)
  6. (setq zh 0)
  7.   (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "a"))
  8. (while
  9.   (setq word (getstring "\请输入高程点编码:"))
  10.   (setq ss(ssget  (list(cons 8 "GCD")(cons 2 "GC200"))))
  11. (if ss(progn
  12.   (setq fw(open "d:\\ex.dat" "w"))
  13.   (setq sn(sslength ss))
  14.   (setq i 0)
  15.   (while(< i sn)
  16.    (setq si (ssname ss i))
  17. ;=====提取坐标=====2014-08-30======
  18.    (setq pt(cdr(assoc 10 (entget si))))
  19.    (setq x(rtos(car pt)2 3) y(rtos(cadr pt)2 3) e(rtos(caddr pt)2 3))
  20.    (princ(strcat (itoa (+ n (+ 1 i )))","word"," x "," y "," e "\n") ff)
  21.    (setq i (+ 1 i))
  22.   );end while
  23.    (setq n (+ n sn ));序号累加
  24.   );end while
  25.   (close ff)
  26. )
  27. )
  28. (princ)
  29. )




本帖子中包含更多资源

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

x
发表于 2021-10-25 14:47:47 | 显示全部楼层

赞一个,谢谢
发表于 2012-12-17 16:22:25 | 显示全部楼层
比较简单的程序,况且是别人的,还是不收币的好些!
哪怕是编译成fas,给大家用下也好
发表于 2012-12-17 16:30:57 | 显示全部楼层
程序有待改进提高!
1、高程点应该为框选
2、while循环退出采用esc退出不太好
3、文件结束没有用(close ff) 关闭!
 楼主| 发表于 2012-12-17 18:21:34 | 显示全部楼层
zyhandw 发表于 2012-12-17 16:22
比较简单的程序,况且是别人的,还是不收币的好些!
哪怕是编译成fas,给大家用下也好

这个是我自己编了2天才编好的,
(while(not(setq en (entsel"\n选择高程点<Esc退出>: ")))  ;没选中就一直让选择,取消键退出
en
  ); 这个是借鉴人家的,但也不能直接用,其他是自己编的。
 楼主| 发表于 2012-12-17 18:23:16 | 显示全部楼层
本帖最后由 skg123 于 2012-12-17 18:35 编辑
Gu_xl 发表于 2012-12-17 16:30
程序有待改进提高!
1、高程点应该为框选
2、while循环退出采用esc退出不太好


多谢你的意见。我也不想用esc退出,但是右键退出我现在的的水平编不好。
请指点一下 框选用 ssget 怎样才能获取 高程点的坐标值?
发表于 2012-12-18 09:01:56 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-12-18 09:03 编辑
skg123 发表于 2012-12-17 18:23
多谢你的意见。我也不想用esc退出,但是右键退出我现在的的水平编不好。
请指点一下 框选用 ssget 怎样 ...

修改如下:
  1. ;By 2012-12-17 宜昌
  2. (defun c:gcdtq()
  3. (setvar "cmdecho" 0) ;指令执行过程不响应
  4.   (setq file (getfiled "文件保存为" "" "dat" 1))
  5.   (if (findfile file)
  6.     (setq ff (open file "a"))
  7.     (setq ff (open file "w"))
  8.     )
  9. (setq n 0)
  10. (while (setq ss (ssget '((0 . "insert") (2 . "gc200"))))

  11. (repeat (setq k (sslength ss))
  12.   (setq en (ssname ss (setq k (1- k))))
  13. (setq n(+ n 1))
  14. (setq pn(rtos n 2 0))
  15. (setq en_data (entget EN)) ;取得元体资料列表
  16. (setq pt (cdr (assoc 10 en_data))) ;求得高程点坐标pt
  17. (setq py(rtos (nth 1 pt)2 3));提取测量坐标Y值
  18. (setq px(rtos (nth 0 pt)2 3));提取测量坐标X值
  19. (setq pz(rtos (nth 2 pt)2 3));提取测量坐标Z值
  20. (setq sxyz (strcat pn",,"px ","  py  ","  pz))
  21. (write-line sxyz ff)
  22.   )

  23. )
  24. (prompt "***** << C:gcdtq >> ***提取高程点坐标输出为CASS格式****")
  25. (close ff)
  26. (prin1);
  27. )
  28. ;从CASS中连续单选 高程点,并将高程点数据输出到文本,解决CASS不能有选择性的拾取高程点。
发表于 2012-12-22 09:59:45 | 显示全部楼层
这个CASS本身自带,不必再去编写
发表于 2013-1-8 17:34:12 | 显示全部楼层
ZB(导出坐标).LSP程序源文件,修改程序用
ZB(导出坐标).VLX编译好的文件,供加载,工作.


加载程序
菜单栏  工具-AutoLisp-加载...点击"启动组"点击"添加"选择"ZB(导出坐标).VLX"文件,,添加完成后关闭对话框即可.(第一次添加好后以后就可以直接使用)



在命令行输入"zb"即可启动程序,按提示操作即可


对选择的圆放入"导出层"并把颜色设置成了随层
可以连续选取不同图层,不同颜色的多种类型的圆
按e键可退出程序编辑发现的问题
按x接着选择圆
按d导出"导出层"上所有圆的圆心坐标,文件放在c盘下,并和当前文件名相似.

QQ:278416560

;;;wkq004  QQ:278416560 2009.02.24
(vl-load-com)
(defun c:tt (/             CENTER  COLOR   DIRECTORY             E             E2
             E2L     EEL     EL             FILENAME             FL             LAYERNAME
             MYACAD  N             SS             SS2     SS3     SSE     START
             STRING  XH1     XH2
            )
  (setvar "cmdecho" 0)
  (setq osmode (getvar "osmode"))
  (setvar "osmode" 0)
  (command "layer" "M" "导出层" "C" 8 "" "")
  (setq xh1 1)
  (setq xh2 1)
  (while (= 1 xh1)
    (while (= 1 xh2)
      (princ "\n[结束选择(空格/回车/右键)]请点选要导出的圆:")
      (if
        (setq ss3 (ssget ":S" '((0 . "TEXT"))))
         (progn
           (setq sse (ssname ss3 0))
           (setq eel (entget sse))
           (setq layername (cdr (assoc 8 eel)))
           (if (setq color (cdr (assoc 62 eel)))
             (setq ss2
                    (ssget
                      "X"
                      (list (cons 0 "TEXT")
                            (cons 8 layername)
                            (cons 62 color)
                      )
                    )
             )
             (setq
               ss2
                (ssget "X" (list (cons 0 "TEXT") (cons 8 layername)))
             )
           )
           (setq n 0)
           (command ".undo" "begin")
           (repeat (sslength ss2)
             (setq e2 (ssname ss2 n))
             (setq e2l (entget e2))
             (setq e2l (subst (cons 8 "导出层") (assoc 8 e2l) e2l))
             (setq e2l (subst (cons 62 256) (assoc 62 e2l) e2l))
             (entmod e2l)
             (setq n (1+ n))
           )
           (command ".undo" "end")
         )
         (progn
           (setq xh2 0)
         )
      )
    )
    (initget 1 "D X E")
    (setq start (getreal "\n[退出(E)继续选择(X)]导出请输入(D):"))
    (if        (= "D" start)
      (progn
        (if
          (setq ss (ssget "X" '((8 . "导出层") (0 . "TEXT"))))
           (progn
             (setq myacad (vlax-get-acad-object))
             (setq filename (vl-filename-base (vla-get-caption myacad)))
             (while (vl-file-systime (strcat "c:/" filename ".txt"))
               (setq filename (strcat filename "-1"))
             )
             (setq directory (strcat "c:/" filename ".txt"))
             (setq fl (open directory "w"))
             (setq n 0)
             (repeat (sslength ss)
               (setq e (ssname ss n))
               (setq el (entget e))
               (setq n (1+ n))
               (setq center (cdr (assoc 10 el)))
               (setq text (cdr (assoc 1 el)))
               (setq
                 string        (strcat        (setq text (cdr (assoc 1 el)))
                                ",,"
                                (rtos (car center) 2 3)
                                ","
                                (rtos (cadr center) 2 3)
                                ","
                                (rtos (last center) 2 3)
                        )
               )
               (write-line string fl)
             )
             (close fl)
             (princ (strcat "\n坐标导出成功" directory))
             (setq xh1 0)
           )
           (progn
             (princ "\n在\"导出层\"内没有圆可供导出,程序终止!!")
             (setq xh1 0)
           )
        )
      )
      (progn
        (if (= "X" start)
          (setq xh2 1)
          (setq xh1 0)
        )
      )
    )
  )
  (setvar "cmdecho" 1)
  (setvar "osmode" osmode)
  (princ)
)
发表于 2013-1-8 18:51:51 | 显示全部楼层
多谢源码

本帖子中包含更多资源

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

x
发表于 2013-8-2 10:44:13 | 显示全部楼层
挺实用的,尤其是cass的属性没有后自己提取数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-22 18:36 , Processed in 0.220026 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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