明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4648|回复: 9

CASS高程点 属性快过滤问题

[复制链接]
发表于 2015-7-8 17:43 | 显示全部楼层 |阅读模式
在CASS中,高程点过滤一般采用距离过滤 高程值过滤方法 ,有时是在测量图中,坎上 坎下点太密就根据距离过滤掉了,但是算土石方时又需要用,能否解码CASS高程点过滤,改为过滤点缩小比列或者移至“过滤高程点”图层,或者把过滤点(属性快)文字删除,保留点位,请大家探讨下。
 楼主| 发表于 2015-10-13 17:09 | 显示全部楼层

  1. (defun clearatt (entname / obj att atts)
  2. (setq obj (vlax-ename->vla-object entname) )

  3. (if (= (vla-get-objectName obj) "AcDbBlockReference")
  4.       (if (= (vla-get-hasattributes obj) :vlax-true)
  5. (progn
  6.    (setq atts (vlax-safearray->list
  7.          (vlax-variant-value (vla-getattributes obj))
  8.        )
  9.    )
  10.    (foreach att atts
  11. ;;;     (vla-put-textstring att "")
  12. ;;;     (vla-update att)
  13.      (vla-delete att)
  14.    )
  15. )
  16.       )     ;if
  17.     )

  18. )
  19. ;;;;;;;=========================================================================

  20. (gc)
  21. (alert "\n块原地过滤缩小命令PJZ")
  22. ;(command "_.layer" "s" "0" "off" "~TFT-GCD" "y" "")

  23. (defun sstolst (ss)
  24.   (vl-remove-if-not
  25.     '(lambda (x) (equal (type x) 'ename))
  26.     (mapcar 'cadr (ssnamex ss))
  27.   )
  28. )


  29. (defun deld(lst d / a b c)
  30.   (while(setq a(mapcar'+(car lst)'(0 0))
  31.         b(vl-remove-if'(lambda(x)(>(distance a x)d))(cdr lst))
  32.         lst(lst-(cdr lst)b))
  33.     (setq c(cons b c))
  34.     )
  35.   (apply'append c))

  36. ;;;;;;;;;;;;;;;
  37. (defun lst-(l1 l2)
  38. (vl-remove-if'(lambda(x)(member x l2))l1))


  39. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  40. (defun c:pjz(/ p1 p2 ss sn si i x y e fw pzxa pzxb pzx1zx pzxoku n pzx121 ptlst beishu ss_name ss_att ss_name_xy ssn)
  41.   ;(setq beishu(GETREAL "\n请输入缩放倍数(非负且大于0):"))
  42. (prompt "**从CASS中提取高程点计算高程累计和 和平均数,请在命令行输入 pjz **")
  43.   (setvar "osmode" 16384)
  44. (setq sn 0)
  45. (setq zh 0)
  46.   (setq ss(ssget  (list '(0 . "insert")  )))
  47. (if ss(progn
  48.   (setq fw(open "d:\\ex.dat" "w"))
  49.   (setq sn(sslength ss))
  50.   (setq i 0)
  51.   (while(< i sn)
  52.    (setq si(ssname ss i))
  53. ;=====提取坐标=================
  54.    (setq pt(cdr(assoc 10 (entget si))))
  55.    (setq x(rtos(car pt)2 7) y(rtos(cadr pt)2 7) e(rtos(caddr pt)2 7))
  56.    (setq pzxa(list (car pt) (cadr pt) (caddr pt)))
  57.     (setq pzxb (append pzxb (list pzxa)))

  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  59. (defun delsameok(l1 rcz / l2);;带容差去重(重复过的取第一次出现),有时处理坐标点需要考虑容差
  60.   (while l1
  61.     (setq l2(cons(car l1)l2)l1(vl-remove-if'(lambda (x)(equal(car l1)x rcz))(cdr l1))))
  62.   (reverse l2))
  63. ;;;;;;;;;;;;;;;;;;;;;;;;;
  64.    
  65.     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  66. (defun delsame(l1 rcz / l2);;带容差去重(重复过的不出现),有时处理坐标点需要考虑容差
  67.   (while (setq l1(vl-remove-if'(lambda (x)(equal(car l1)x rcz))(cdr l1)))
  68.     (setq l2(cons(car l1)l2)))
  69.   (reverse l2))
  70.     ;;;;;;;;;;;;;;;;;;;;;
  71.    

  72.    
  73.    (princ(strcat (itoa (1+ i))",GCD," x "," y "," e "\n") fw)
  74.    
  75.    (setq i(1+ i))
  76. ;=====计算平均值==============
  77. (setq pz (nth 2 pt));提取测量坐标洗z值
  78. (setq pz1 (rtos (nth 2 pt)));提取测量坐标系Z值
  79. (setq zh (+ zh pz))
  80. (setq pj (/ zh i))
  81. (setq si (rtos i 2 0))
  82. (setq zh1 (rtos zh 2 3))
  83. (setq pj1 (rtos pj 2 3))
  84. (setq pdz (strcat "本次共拾取" si "点,高程累计值:" zh1 ",高程平均值: "pj1 ",坐标文件在D盘;")) ;输出为数据格式(高程,累计和,平均值)

  85.   )
  86.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  87. (setq ptlst (vl-sort pzxb
  88.                    ;以下根据x坐标对表排序
  89.    '(lambda (e1 e2)
  90.             (< (car e1) (car e2) )
  91.       (< (cadr e1) (cadr e2) )   )   )    )
  92. ;;;;;;;;;;;;;;;;;-----------------------------------
  93. (setq pzxzx (deld ptlst (getreal "\n请输入过滤点间距<5米>:")
  94. ))
  95. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  96.   (foreach n pzxzx
  97. ;(xdelatt (setq pzxoku (ssget "c" (polar n 3.927 0.5) (polar n 0.785 0.5))         )   )

  98. ;(setq pzx121  (car (sstolst (ssget "c" (polar n 3.927 0.00001) (polar n 0.785 0.00001)))))
  99. (setq ssn 0)
  100.     (repeat (sslength ss)
  101.          (setq ss_name (ssname ss ssn))
  102.          (setq ss_att (entget ss_name))
  103.          (setq ss_name_xy (cdr (assoc '10 ss_att)))
  104.          ;(setq pt_ss_dis (distance pt ss_name_xy))
  105.          (if (equal n ss_name_xy)
  106.      ;(vla-ScaleEntity (vlax-ename->vla-object ss_name) (vla-get-InsertionPoint (vlax-ename->vla-object ss_name)) beishu)
  107.      (clearatt ss_name)
  108.      ;(setq ss (ssdel ss_name ss))
  109.          
  110.          )(setq ssn (1+ ssn))
  111.        )

  112.    

  113. ;(entmod (append (vl-remove-if '(lambda(x) (member (car x) '(41 42 43))) pzx121)  (list '(41 . 0.02) '(42 . 0.02) '(43 . 0.02) )))

  114.    
  115.       ;(command "_.scale" (ssget "c" (polar n 3.927 0.00001) (polar n 0.785 0.00001)) "" n "0.25")
  116.       ;(command "_.circle" n "2")

  117.       )
  118. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  119. ; (sssetfirst nil (ssget pzxpzx))
  120.   (close fw)

  121. ))
  122. (princ pdz)
  123. )
看看效果怎么样 73哥函数

本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +50 收起 理由
004 + 50 赞一个!

查看全部评分

发表于 2015-7-8 17:47 | 显示全部楼层
实际上还可以通过展点号把所有点的点位都展绘出来(不是高程点,但有高程值),这样就可以根据需要把过滤掉的高程点找出来
 楼主| 发表于 2015-7-8 17:51 | 显示全部楼层
llsheng_73 发表于 2015-7-8 17:47
实际上还可以通过展点号把所有点的点位都展绘出来(不是高程点,但有高程值),这样就可以根据需要把过滤掉 ...

就是一个一个找太慢 CASS当时没有想到这点 所以求源码
发表于 2015-7-9 20:44 | 显示全部楼层
不过这个问题值得讨论啊   高程点过滤不是太科学  
发表于 2015-7-13 21:29 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-7-13 21:31 编辑

既然要计算土石方,直接把所有高程点全展绘出来不就了事了?
毕竟土石方测量和地形图测量不一样,不会强求测点分布均匀
 楼主| 发表于 2015-7-13 21:44 | 显示全部楼层
llsheng_73 发表于 2015-7-13 21:29
既然要计算土石方,直接把所有高程点全展绘出来不就了事了?
毕竟土石方测量和地形图测量不一样,不会强求 ...

不是。有些图甲方既要图面漂亮,又要高程多。不得不删除部分高程注记完美图面。主要用于整理图面。删除块属性文字的函数我已经找到了
 楼主| 发表于 2015-7-13 21:45 | 显示全部楼层
(defun xdelatt (PZX / FIL SS)
  (princ "\n 删除块属性----------by lxx.2007.9")
  (princ "\n 选择要删除属性的块<全部>:")
  (if (not *cad)
    (setq *cad (vlax-get-acad-object))
  )
  ;(x-CleanCSet)
  (setq fil '((0 . "INSERT") (-4 . "&") (66 . 1)))
  (or (setq ss (ssget fil))
      (setq ss (ssget "x" fil))
  )
  (vla-eval *cad
     "for each i in thisdrawing.activeselectionset : for each n in i.getattributes : n.delete :next n :next i"
  )
)
(setq pzx (SSGET ))
(xdelatt PZX)
发表于 2015-7-15 20:26 | 显示全部楼层
感谢楼主经验分享,受益匪浅!
发表于 2015-10-24 00:39 | 显示全部楼层
地形图中照样要用,删除定向检查点,等测重的点.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 18:07 , Processed in 1.204784 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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