明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8857|回复: 19

在CASS中 图面拾取高程点 求累计值 和平均值(原)

[复制链接]
发表于 2014-6-19 19:10:14 | 显示全部楼层 |阅读模式
本帖最后由 skg123 于 2014-6-19 22:31 编辑

本小程序 用于 计算 图面局部高程点平均,
1、选中后会 亮显高程,可以分辨是否已经选择过,避免重复选择,退出后 命令行输入 regen  之后亮显消失;
2、程序的漏洞是 空选 就出现错误,将退出;
(defun:pjz()
(setvar "cmdecho" 0) ;指令执行过程不响应
(setq i 0)
(setq zh 0)
(while
(setq en (entsel "\n选择高程点:"))
(setvar "cmdecho" 0)
(redraw (car en) 3);亮显高程点
(setq en_data (entget (car en))) ;取得元体资料列表
(setq pt (cdr (assoc 10 en_data))) ;求得高程点坐标pt

(setq pz (nth 2 pt));提取测量坐标洗z值
(setq pz1 (rtos (nth 2 pt)));提取测量坐标系Z值
(setq i (+ i 1))
(setq zh (+ zh pz))
(setq pj (/ zh i))

(setq sn (rtos i 2 0))
(setq zh1 (rtos zh 2 3))
(setq pj1 (rtos pj 2 3))

(setq pdz (strcat "共拾取" sn "点,高程累计值:" zh1 ",高程平均值: "pj1)) ;输出为数据格式(高程,累计和,平均值)
(princ pdz)

)
)


本帖子中包含更多资源

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

x
 楼主| 发表于 2014-6-19 22:28:19 | 显示全部楼层
修改后可以框选了,,借鉴了http://bbs.mjtd.com/thread-85363-1-1.html 中 的代码
  1. (defun c:pjz(/ p1 p2 ss sn si i x y e fw)
  2. (prompt "**从CASS中提取高程点计算高程累计和 和平均数,请在命令行输入 pjz **")
  3. (setq sn 0)
  4. (setq zh 0)
  5.   (setq ss(ssget  (list(cons 8 "GCD")(cons 2 "GC200"))))
  6. (if ss(progn
  7.   (setq fw(open "d:\\ex.dat" "w"))
  8.   (setq sn(sslength ss))
  9.   (setq i 0)
  10.   (while(< i sn)
  11.    (setq si(ssname ss i))
  12. ;=====提取坐标=================
  13.    (setq pt(cdr(assoc 10 (entget si))))
  14.    (setq x(rtos(car pt)2 3) y(rtos(cadr pt)2 3) e(rtos(caddr pt)2 3))
  15.    (princ(strcat (itoa (1+ i))",GCD," x "," y "," e "\n") fw)
  16.    (setq i(1+ i))
  17. ;=====计算平均值==============
  18. (setq pz (nth 2 pt));提取测量坐标洗z值
  19. (setq pz1 (rtos (nth 2 pt)));提取测量坐标系Z值
  20. (setq zh (+ zh pz))
  21. (setq pj (/ zh i))
  22. (setq si (rtos i 2 0))
  23. (setq zh1 (rtos zh 2 3))
  24. (setq pj1 (rtos pj 2 3))
  25. (setq pdz (strcat "本次共拾取" si "点,高程累计值:" zh1 ",高程平均值: "pj1 ",坐标文件在D盘;")) ;输出为数据格式(高程,累计和,平均值)

  26.   )
  27.   (close fw)

  28. ))
  29. (princ pdz)
  30. )

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2024-12-1 14:29:47 | 显示全部楼层
更新代码本次共拾取31点, 高程平均值: 6.854, 最小高程: 6.621, 最大高程: 7.101, 坐标文件在D盘;"本次共拾取31点, 高程平均值: 6.854, 最小高程: 6.621, 最大高程:
  1. (defun c:pjz (/ p1 p2 ss sn si i x y e fw)
  2.   (prompt "\n**从CASS中提取高程点计算高程累计和 和平均数,请在命令行输入 pjz **")
  3.   (setq sn 0) ; 初始化计数器
  4.   (setq zh 0) ; 初始化高程累计和
  5.   (setq ss (ssget (list (cons 8 "GCD") (cons 2 "GC200")))) ; 获取图层为GCD且名称为GC200的对象
  6.   (if ss
  7.     (progn
  8.       (setq fw (open "d:\\ex.dat" "w")) ; 打开文件准备写入
  9.       (setq sn (sslength ss)) ; 获取选择集中的对象数量
  10.       (setq i 0) ; 初始化循环变量
  11.       (while (< i sn)
  12.         (setq si (ssname ss i)) ; 获取当前对象
  13.         (setq pt (cdr (assoc 10 (entget si)))) ; 提取当前对象的3D坐标
  14.         (setq x (rtos (car pt) 2 3)) ; X坐标
  15.         (setq y (rtos (cadr pt) 2 3)) ; Y坐标
  16.         (setq e (rtos (caddr pt) 2 3)) ; Z坐标(高程)
  17.         
  18.         (princ (strcat (itoa (1+ i)) ",GCD," x "," y "," e "\n") fw) ; 写入文件
  19.         
  20.         (setq pz (nth 2 pt)) ; 提取Z值
  21.         (setq zh (+ zh pz)) ; 更新高程累计和
  22.         (setq pj (/ zh (1+ i))) ; 计算当前平均值
  23.         (setq si (rtos (1+ i) 2 0)) ; 当前点的数量
  24.         (setq zh1 (rtos zh 2 3)) ; 高程累计和
  25.         (setq pj1 (rtos pj 2 3)) ; 平均高程
  26.         (setq pdz (strcat "本次共拾取" si "点, 高程累计值:" zh1 ", 高程平均值: " pj1 ", 坐标文件在D盘;"))
  27.         
  28.         (setq i (1+ i)) ; 更新循环变量
  29.       )
  30.       (close fw) ; 关闭文件
  31.     )
  32.   )
  33.   (princ pdz) ; 输出结果到命令行
  34. )
7.101, 坐标文件在D盘;"
回复 支持 反对

使用道具 举报

发表于 2022-6-8 07:34:07 来自手机 | 显示全部楼层
感谢楼主无私奉献,受益匪浅!
发表于 2014-6-19 19:15:53 | 显示全部楼层
支持大师的源代码   学习了  测量界的大师啊
发表于 2014-6-20 08:10:19 | 显示全部楼层
不错的东西!!!!
发表于 2014-6-20 11:40:45 | 显示全部楼层
  1. (defun c:tt( / i L lst maxx maxy maxZ minx miny minZ pl pjZ sel ss x)
  2.   (vl-load-com)
  3.   (if (and (setq sel (entsel "\n请选择封闭范围线:"))
  4.            (eq (cdr (assoc 0 (entget (car sel)))) "LWPOLYLINE")
  5.            (vlax-curve-isClosed (vlax-ename->vla-object (car sel)))
  6.       )
  7.     (progn
  8.        (setq lst  (vl-remove-if 'not (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) (entget (car sel)))))
  9.        (setq minX (apply 'min (mapcar '(lambda (x) (car x)) lst))
  10.              minY (apply 'min (mapcar '(lambda (x) (cadr x)) lst))
  11.              maxX (apply 'max (mapcar '(lambda (x) (car x)) lst))
  12.              maxY (apply 'max (mapcar '(lambda (x) (cadr x)) lst))
  13.        )
  14.        (command "zoom" (list minX minY) (list maxX maxY))
  15.        (setq ss (ssget "_CP" lst '((0 . "INSERT") (2 . "GC200"))))
  16.        (if (and ss (> (sslength ss) 1))
  17.          (progn
  18.            (setq i 0 L (sslength ss))
  19.            (repeat L
  20.               (setq pl (cons (caddr (cdr (assoc 10 (entget (ssname ss i))))) pl)
  21.                     i  (1+ i)
  22.               )
  23.            )
  24.            (setq minZ (apply 'min pl)
  25.                  maxZ (apply 'max pl)
  26.                  pjZ  (/ (apply '+ pl) i)
  27.            )
  28.            (alert
  29.              (strcat
  30.                 "最大的高程值为:" (rtos maxZ 2 3)
  31.                 "\n"
  32.                 "最小的高程值为:" (rtos minZ 2 3)
  33.                 "\n"
  34.                 "平均的高程值为:" (rtos pjZ 2 3)
  35.                 "\n"
  36.                 "高程值的个数为:" (rtos i 2 0)
  37.              )
  38.            )
  39.          )
  40.          (alert "选择的区域范围无高程点!")
  41.        )
  42.     )
  43.     (alert "所选的封闭线不是经量多义线!或 不闭合!")
  44.   )
  45.   (princ)
  46. )
贴个类似的
 楼主| 发表于 2014-6-20 23:26:36 | 显示全部楼层
gzxl 发表于 2014-6-20 11:40
贴个类似的

筛选出最大值和最小值,可以借鉴
发表于 2014-7-8 06:32:19 | 显示全部楼层
很好!可用。顶~~~
发表于 2014-9-7 18:13:07 | 显示全部楼层
框选的不能用
发表于 2014-9-9 11:30:36 | 显示全部楼层
强烈支持,测绘界大师!!!
发表于 2014-11-8 23:12:22 | 显示全部楼层
很好 框选功能很实用cass下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 06:01 , Processed in 0.193199 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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