明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5362|回复: 15

根据图面三角网计算喷锚边坡表面积并统计

[复制链接]
发表于 2015-8-4 17:52 | 显示全部楼层 |阅读模式
根据图面三角网计算喷锚边坡表面积并统计,解决工程中基坑边坡喷锚面积统计问题,前提是测量数据准确、三角网符合实际地形。
  1. (defun vxs (e / i v lst)
  2.   (setq i 0)
  3.   (while
  4.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  5.      (setq lst (cons v lst))
  6.   )
  7.   (reverse lst))
  8. ;;;;;;;;;;;;;;;



  9. (defun c:tt11 ( / lst ent pts pt demj zmj ) ;标记三角网表面积

  10.   (setq lst (ssget '( (0 . "polyline") (8 . "sjw")) ) )
  11. (setq i 0)
  12. (setq zmj 0.000)
  13.   
  14. (while  (< i (sslength lst))

  15. (setq ent (ssname lst i))

  16. (setq pts (vxs ent))
  17.   (setq len (length pts))
  18. (setq pt (mapcar
  19.   '(lambda(x)
  20.     (/ x len)
  21.   )
  22.   (apply
  23.     'mapcar
  24.     (cons '+ pts)
  25.   )
  26. )
  27. )

  28. (setq    AcadObject   (vlax-get-acad-object)

  29.           AcadDocument (vla-get-ActiveDocument Acadobject)

  30.           mSpace    (vla-get-ModelSpace Acaddocument)) ;初始化系统


  31.   

  32.   (setq demj (vlax-curve-getArea  (vlax-ename->vla-object ent)))
  33.   
  34.   (entmake (list (cons 0  "TEXT") (cons 1 (rtos demj 2 3)) (cons 10 pt)
  35.                (cons 40 0.5)
  36.                (cons 8 "三角网表面积")
  37.                ))


  38.   
  39.   
  40.   
  41. (setq zmj(+ zmj demj))

  42. (setq i (+ i 1))
  43.   
  44.   
  45.   )
  46. (entmake (list (cons 0  "TEXT") (cons 1 (rtos zmj 2 3)) (cons 10 (getpoint "\请输入总表面积插入点"))
  47.                (cons 40 3)
  48.                (cons 8 "三角网表面积")
  49.                ))
  50. (print zmj)
  51.   (princ)

  52. )

评分

参与人数 2明经币 +4 金钱 +30 收起 理由
gzxl + 1 很给力!
yfy2003 + 3 + 30

查看全部评分

 楼主| 发表于 2021-11-10 21:46 | 显示全部楼层
选择节点少于3个的三维多段线

  1. (defun vxs (e / i v lst)
  2.   (setq i 0)
  3.   (while
  4.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  5.      (setq lst (cons v lst))
  6.   )
  7.   (reverse lst))
  8. ;;;;;;;;;;;;;;;

  9. (defun c:xz11 (/ kk lst i ent pts len)

  10. (setq lst (ssget '( (0 . "polyline") (8 . "0,sjw")) ) )
  11. (setq i 0)

  12. (setq kk (ssadd))
  13. (while  (< i (sslength lst))

  14. (setq ent (ssname lst i))

  15. (setq pts (vxs ent))
  16.   (setq len (length pts))

  17. (if (< len 3) (ssadd ent kk)) ;;;选择节点少于3个的三维多段线


  18. (setq i (+ i 1))
  19.   
  20.   
  21.   )

  22. (sssetfirst nil kk)
  23.   
  24.   )

发表于 2021-5-18 15:44 | 显示全部楼层
那个大神能 把下图中,选中的多段线范围内边面积求出,那就厉害了。

CASS自带有表面积计算功能,处理的方法是下图多段线内在生成很多小三角,再计算面积。

我们编程可以用海伦公式计算单个三角的面积,累计也行。

编程用comand 命令调用CASS的表面功能,只能循环4次,批量处理超过4次就现在了使用。

本帖子中包含更多资源

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

x
发表于 2019-6-25 09:14 | 显示全部楼层
有更新吗?楼主?
 楼主| 发表于 2015-8-4 17:57 | 显示全部楼层
  1. GreenWood(181976640) 2015-8-4 16:18:15
  2. @树櫴希德
  3. ;;查找并删除角度较小的三角网
  4. (defun c:tt(/ ss i en lens)
  5.   (if (and (setq ss(ssget '((0 . "POLYLINE")(8 . "TIN"))))
  6.            (> (sslength ss) 0)
  7.            (setq i 0)
  8.           )
  9.     (while (setq en(ssname ss i))
  10.       (setq lens (vlens en)
  11.             lens (vl-sort lens '<)
  12.             )
  13.       (if (< (/ (car lens) (last lens)) 0.01);修改这里0.001~~~
  14.        (entdel en)
  15.        )
  16.       (setq i (1+ i))
  17.     )
  18.    )
  19. )
  20. ;;;;;;;;;;;;;;;;;;
  21. GreenWood(181976640) 2015-8-4 16:08:21
  22. 那特么更简单了
  23. (defun c:tt(/)
  24.    (prompt "三角形中心(我不知道是什么心,反正在里面就是了)")
  25.     (setq ent(car (entsel)))
  26.     (if (= (vlax-curve-getEndParam ent) 3.0)
  27.       (progn
  28.        (setq pt1 (vlax-curve-getPointAtParam ent 1.0)
  29.              pt2 (vlax-curve-getPointAtParam ent 2.0)
  30.              pt3 (vlax-curve-getPointAtParam ent 3.0)
  31.             )
  32.         (setq pt (mapcar '(lambda (x y z) (/ (+ x y z) 3.0)) pt1 pt2 pt3))
  33.         (entmake (list '(0 . "CIRCLE") (cons 10 pt) (cons 40 5)))
  34.       )
  35.     )
  36.    (princ)
  37. );end defun
发表于 2015-8-5 08:43 | 显示全部楼层
作者真乃测绘接的创新研究型人才啊,占个沙发先。只要你一出作品,我肯定光顾。不错,很实用的东西。
发表于 2015-8-5 08:50 | 显示全部楼层
厉害!!!!
 楼主| 发表于 2015-8-5 21:04 | 显示全部楼层
  1. (defun tt (lst / a l1)
  2. (setq l1 nil
  3.         l1 (list (list (car lst)))
  4.         lst (cdr lst)
  5. )
  6. (while lst
  7.         (setq a (car lst)
  8.                 lst (cdr lst)
  9.         )
  10.         (if (= 1 (- a (caar l1)))
  11.                 (setq l1 (cons (cons a (car l1)) (cdr l1)))
  12.                 (setq l1 (cons (list a) l1))
  13.         )
  14. )       
  15. (reverse (mapcar 'reverse l1))
  16. )
  17. (setq lis'(1 2 3 4 5   11  20 21 22 23 24))

  18. 命令: (tt lis)
  19. ((1 2 3 4 5) (11) (20 21 22 23 24))

点评

(tt'(26 1 2 3 4 5 11 20 21 22 23 24 25 ))=>((26) (1 2 3 4 5) (11) (20 21 22 23 24 25))???  发表于 2015-8-9 09:08
发表于 2015-8-5 21:06 | 显示全部楼层
发表于 2015-8-7 22:50 | 显示全部楼层
太牛逼了你
 楼主| 发表于 2015-8-7 23:50 | 显示全部楼层



  1. (defun c:tt11 ( / lst ent pts pt demj zmj i) ;求平均数
  2. (setq lst (ssget '((0 . "text,mtext") (1 . "*[0-9]*")   )   )  )
  3.   
  4. (setq i 0)
  5. (setq zmj 0.000)
  6.   
  7. (while  (< i (sslength lst))

  8. (setq ent (ssname lst i))



  9.   

  10.   (setq demj (atof(cdr (assoc 1 (entget ent)))))
  11.   
  12.   

  13.   
  14.   
  15.   
  16. (setq zmj(+ zmj demj))

  17. (setq i (+ i 1))
  18.   
  19.   
  20.   )
  21. (entmake (list (cons 0  "TEXT") (cons 1 (strcat "总和"(rtos zmj 2 3) "平均数" (rtos (/ zmj i) 2 3) )) (cons 10 (getpoint "\请输入总和插入点"))
  22.                (cons 40 3)
  23.                (cons 8 "总和")
  24.                ))
  25. (print zmj)
  26.   (print (/ zmj i))
  27.   (princ)

  28. )
发表于 2015-8-9 08:57 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-8-9 09:05 编辑
树櫴希德 发表于 2015-8-7 23:50

  1. (defun c:tt11 ( / p zmj i) ;求平均数
  2.   (if(setq i -1 zmj 0
  3.            lst(ssget '((0 . "text,mtext") (1 . "*[0-9]*")))
  4.            p(getpoint "\n请指定总和插入点"))
  5.     (entmake(list'(0 . "TEXT")
  6.                  (cons 1(strcat"总和"
  7.                                (rtos(repeat(sslength lst)
  8.                                       (setq i(1+ i)
  9.                                             zmj(+(atof(cdr (assoc 1 (entget (ssname lst i)))))zmj)))2 3)
  10.                                "平均数"(rtos(/ zmj(1+ i))2 3)))
  11.                  (cons 10 p)
  12.                  '(40 . 3)
  13.                  '(8 . "总和"))))
  14.   )

另外,事实上"A123.4Bc"也符合过滤条件(1 . "*[0-9]*"),也就是说想选中全数值文本得用别的过滤条件或者采用别的手段
         为了保证rtos最后一个参数起作用,需要设置系统变量DIMZIN
发表于 2015-8-9 12:03 | 显示全部楼层
不知道后面的明码是干什么用的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 08:58 , Processed in 0.214606 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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