明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: skg123

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

  [复制链接]
发表于 2013-10-26 11:34:28 | 显示全部楼层
fanqinwei 发表于 2012-12-22 09:59
这个CASS本身自带,不必再去编写

求教,怎么调用,谢谢
发表于 2013-11-30 22:48:43 | 显示全部楼层
本帖最后由 蓝图测绘 于 2013-11-30 22:51 编辑

我也来一个,在"Gu_xl” 版主的基础上,加了一个用范围线选择高程点生成数据文件。

;有选择性的拾取高程点生成DAT文件
;有点选、框选、范围线3种选择方式
(defun c:g2d()
  (setvar "cmdecho" 0)
  (setq file (getfiled "文件保存为" "" "dat" 1))
  (if (findfile file)
    (setq ff (open file "a"))
    (setq ff (open file "w"))
  )
  (setq xzfs (getint "\n高程点选择方式:[图上拾取( 1 )] / [选择范围线( 2 )]: < 1 >"))
  (if (= xzfs nil) (setq xzfs 1))
  (if (= xzfs 2)
    (progn
      (while (null (setq fwx (car (entsel "\n选择范围线(闭合多边形):")))))
      (setq bh (cdr (assoc 70 (entget fwx))))
      (if (or (= bh 0) (= bh 128))
        (progn
          (alert "你选择的范围线没有闭合")
          (while (null (setq fwx (car (entsel "\n选择范围线(闭合多边形):")))))
          (setq bh (cdr (assoc 70 (entget fwx))))
          (if (or (= bh 0) (= bh 128)) (exit))
        )
      )
      (setq fwxb (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget fwx))))
    )
  )
  (cond
    ((= xzfs 1) (setq ss (ssget '((0 . "insert") (2 . "gc200")))))
    ((= xzfs 2) (setq ss (ssget "wp" fwxb '((0 . "INSERT") (2 . "GC200")))))
  )
  (setq i 0)
  (repeat (sslength ss)
    (setq en (ssname ss i))
    (setq en_data (entget en))
    (setq pt (cdr (assoc 10 en_data)))
    (setq i (1+ i))
    (setq str (strcat (rtos i 2 0) ",," (rtos (car pt) 2 3) ","  (rtos (cadr pt) 2 3)  ","  (rtos (caddr pt) 2 3)))
    (write-line str ff)
  )
  (close ff)
  (princ (strcat "\n文件保存位置==>: " file))
  (princ "\n本次总共提取了 ") (princ i) (princ " 个高程点")
  (prin1)
)
(princ "\n蓝图测绘,精心制作; 键入 g2d 运行本插件")

本帖子中包含更多资源

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

x
发表于 2014-3-22 09:40:19 | 显示全部楼层
O(∩_∩)O谢谢分享
发表于 2014-3-22 13:46:49 | 显示全部楼层
蓝图老师好样的
发表于 2014-5-27 20:49:42 | 显示全部楼层
谢谢学习学习
发表于 2014-7-26 08:11:28 | 显示全部楼层
高人很多啊。其实主要是加强学习下才可以
发表于 2014-8-21 12:25:32 | 显示全部楼层
蓝图大师的程序运行时出现这个:选择范围线(闭合多边形):; 错误: 参数类型错误: lselsetp nil。不知是哪里的问题?望指教。谢谢!!!
发表于 2015-2-3 12:34:56 | 显示全部楼层
..........................
 楼主| 发表于 2015-8-11 14:26:54 | 显示全部楼层
当高程点 移动了,使用下面的程序读取 属性值(属性值=高程值)
(vl-load-com)
(defun c:TT()
(setq i 1)
(setq word (getstring "\n请输入断面编号:"))
(while  
     (if (setq ent (car (entsel "\n请选取高程点:")))
         (if (= (cdr (assoc 0 (entget ent))) "INSERT")
             (if (= (vlax-get (setq obj (vlax-ename->vla-object ent)) "HasAttributes") -1)
                 (progn
                    (setq att (vlax-invoke obj "GetAttributes"))
                    (setq jgb (mapcar '(lambda(aobj) (vlax-get aobj "TextString")
                                       )
                                       att
                              )
                    )
                    (princ word )(princ "号断面")(princ i )(princ "号点高程值:")(princ jgb) (princ "\n")
                 )
             )
         )  
      )

   (setq i (+ 1 i))
     (princ)
);end while
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 00:07 , Processed in 0.252212 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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