16699988885 发表于 2024-12-5 12:31:27

从CASS中提取高程点计算高程平均数、最大值和最小值

(defun c:pjz (/ p1 p2 ss sn si i x y e fw min-z max-z)
(prompt "\n**从CASS中提取高程点计算高程平均数、最大值和最小值,请在命令行输入 pjz **")
(setq sn 0) ; 初始化计数器
(setq zh 0) ; 初始化高程总和(用于计算平均值)
(setq min-z nil) ; 初始化最小高程
(setq max-z nil) ; 初始化最大高程
(setq ss (ssget (list (cons 8 "GCD") (cons 2 "GC200")))) ; 获取图层为GCD且名称为GC200的对象
(if ss
    (progn
      (setq fw (open "d:\\ex.dat" "w")) ; 打开文件准备写入
      (setq sn (sslength ss)) ; 获取选择集中的对象数量
      (setq i 0) ; 初始化循环变量
      (while (< i sn)
      (setq si (ssname ss i)) ; 获取当前对象
      (setq pt (cdr (assoc 10 (entget si)))) ; 提取当前对象的3D坐标
      (setq x (rtos (car pt) 2 3)) ; X坐标
      (setq y (rtos (cadr pt) 2 3)) ; Y坐标
      (setq e (rtos (caddr pt) 2 3)) ; Z坐标(高程)

      (princ (strcat (itoa (1+ i)) ",GCD," x "," y "," e "\n") fw) ; 写入文件

      (setq pz (nth 2 pt)) ; 提取Z值
      (setq zh (+ zh pz)) ; 更新高程总和
      (if (or (null min-z) (< pz min-z))
          (setq min-z pz)
      )
      (if (or (null max-z) (> pz max-z))
          (setq max-z pz)
      )

      (setq i (1+ i)) ; 更新循环变量
      )
      (close fw) ; 关闭文件
    )
)
(if (> sn 0)
    (progn
      (setq pj (/ zh sn)) ; 计算平均高程
      (setq pdz (strcat "本次共拾取" (itoa sn) "点, 高程平均值: " (rtos pj 2 3)
                        ", 最小高程: " (rtos min-z 2 3)
                        ", 最大高程: " (rtos max-z 2 3)
                        ", 坐标文件在D盘;"))
      (princ pdz) ; 输出结果到命令行
    )
    (princ "\n没有找到符合条件的点。")
)
)

言戲無軍 发表于 2024-12-5 15:39:32

挺好的功能

16699988885 发表于 2024-12-6 16:41:43

言戲無軍 发表于 2024-12-5 15:39
挺好的功能

大佬 帮忙下载一个文件可以吗?权限不够谢谢
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188620&highlight=%B8%DF%B3%CC%B5%E3

feiyike 发表于 2024-12-9 20:42:09

16699988885 发表于 2024-12-6 16:41
大佬 帮忙下载一个文件可以吗?权限不够谢谢
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=18862 ...

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=18862

江湖夜雨 发表于 2025-4-9 09:16:57

楼主,你的程序在CAD2024中,显示 输入的列表有缺陷,无法执行,请问是怎么回事?
页: [1]
查看完整版本: 从CASS中提取高程点计算高程平均数、最大值和最小值