乐筑天下

帖子
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 16

[编程交流] 自动选择轮廓

[复制链接]

53

主题

302

帖子

249

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
265
发表于 2022-7-5 15:27:05 | 显示全部楼层 |阅读模式
大家好,
我有一系列闭合等高线,从2.0m到3.0m,间隔0.1m。我可以通过使用measuregeom命令并选择一条等高线来手动获取由每条等高线包围的区域。我试图看看是否可以用lisp从上到下指向轮廓。这能做到吗?。
提前感谢您的建议。
 
芦荟
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 15:33:26 | 显示全部楼层
 
磨尖?
您希望区域结果显示在哪里?
 
  1. (defun c:demo (/ data ss e)
  2. (setq data nil
  3.        ss
  4.             (ssget '(
  5.                      (0 . "LWPOLYLINE")
  6.                      (-4 . "&=")
  7.                      (70 . 1)
  8.                     )
  9.             )
  10. )
  11. (repeat (sslength ss)
  12.    (setq e (ssname ss 0))
  13.    (setq
  14.      data (cons
  15.             (list (cdr (assoc 38 (entget e))) (vlax-curve-getarea e))
  16.             data
  17.           )
  18.    )
  19.    (ssdel e ss)
  20. )
  21. (foreach itm (vl-sort data '(lambda (a b) (< (car a) (car b))))
  22.    (princ (strcat "\nContour: "
  23.                   (rtos (car itm))
  24.                   "\t"
  25.                   (rtos (cadr itm))
  26.           )
  27.    )
  28. )
  29. (textscr)
  30. (princ)
  31. )
回复

举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:36:27 | 显示全部楼层
Pbe考虑了这个问题,但不得不做一些其他事情,使用ssget F应该可以消除对数据排序的需要,但可能意味着需要更多的选择。
 
这是真正快速的尝试,只是为了方法
  1. (defun c:conar ( / ss x pt1 pt2)
  2. (setq pt1 (getpoint "1st point"))
  3. (setq pt2 (getpoint pt1 "2nd point"))
  4. (setq ss (ssget "F" (list pt1 pt2)(list (cons 0 "Lwpolyline"))))
  5. (repeat (setq x (sslength ss))
  6. (alert (strcat "area is " (rtos (vla-get-area (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))2 2)))
  7. )
  8. )
  9. (c:conar)
回复

举报

53

主题

302

帖子

249

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
265
发表于 2022-7-5 15:38:29 | 显示全部楼层
谢谢pbe。它起作用了。然而,我需要指向轮廓。让我解释一下我想做什么:
我有一个很大的土地面积,比如说50公顷,就像一个最高轮廓为3米的盆地。在中心,约15公顷的平坦区域,轮廓为2米。中间有0.1间隔的闭合轮廓。水以每秒10立方米的速度流入盆地。我想展示这个区域是如何被时间填充的,比如高亮显示轮廓,并在屏幕上指示特定轮廓被填充的时间。在这种情况下,我忽略了液压的影响。有没有可能不用指点(可能我只能指点一次)?。
当做
芦荟
回复

举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 15:42:58 | 显示全部楼层
 
这是个好主意,但昨晚我在想,给定值上可能有多个轮廓,这意味着仍需要收集所有数据。
 
162707k74ii87h8hpy668y.jpg
 
  1. (defun c:demo (/ data ss e level data)
  2. (setq data nil
  3.        ss
  4.             (ssget '(
  5.                      (0 . "LWPOLYLINE")
  6.                      (-4 . "&=")
  7.                      (70 . 1)
  8.                     )
  9.             )
  10. )
  11. (repeat (sslength ss)
  12.    (setq e (ssname ss 0)
  13.          level (cdr (assoc 38 (entget e)))
  14.          area (vlax-curve-getarea e))
  15.    (setq data   
  16.            (if (setq f (assoc level data))
  17.            (subst (list level (+ area (Cadr f))) f data)
  18.         (cons
  19.              (list level area )
  20.              data
  21.            )            
  22.                    )
  23.          )
  24.          
  25.          
  26.    (ssdel e ss)
  27. )
  28.      
  29. (foreach itm (vl-sort data '(lambda (a b) (< (car a) (car b))))
  30.    (princ (strcat "\nContour: "
  31.                   (rtos (car itm))
  32.                   "\t"
  33.                   (rtos (cadr itm))
  34.           )
  35.    )
  36. )
  37. (textscr)
  38. (princ)
  39. )

 
但话说回来,我可能会完全离开。
回复

举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 15:47:59 | 显示全部楼层
 
如果将示例图形与所需结果一起发布,则更容易理解。
回复

举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:50:54 | 显示全部楼层
可能使用外部边界作为极限,在这种情况下,max Z然后查找所有内部。我同意,但对于一个简单的形状,需要一个dwg。
 
Pbe通过在整个形状上拖动两点,我所做的确实有效。我测试了一个类似的形状。我刚刚在工作中完成了这个练习,我所做的将会很有用,但由于我们仍在玩这个形状,我下次会使用它。
 
体积是两个面积/2*高度的总和。
 
像CIV3d这样的软件是逐片进行体积计算的。
回复

举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 15:54:24 | 显示全部楼层
 
很高兴知道这一点,为我们节省了很多时间去弄清楚轮廓是怎么回事
 
迫不及待地想看看事情进展如何。
回复

举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:00:14 | 显示全部楼层
Pbe试一试,我需要检查VOL,只需将您的图像单面降低或升高,然后从内到外拾取。一个双孔需要做不同的工作,这就是为什么你有体积计算软件,它从一个三角不规则网络。
 
  1. (defun c:conar ( / ss x pt1 pt2 a1 a2 z1 z2 vol adiff volinc)
  2. (setq pt1 (getpoint "1st point"))
  3. (setq pt2 (getpoint pt1 "2nd point"))
  4. (setq ss (ssget "F" (list pt1 pt2)(list (cons 0 "Lwpolyline"))))
  5. (setq x (sslength ss))
  6. (setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
  7. (setq a1 (vla-get-area obj))
  8. (setq z1 (vla-get-elevation obj))
  9. (setq vol 0.0)
  10. (repeat  x
  11. (setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
  12. (setq z2 (vla-get-elevation obj))
  13. (setq a2 (vla-get-area obj))
  14. (setq diff (- z1 z2))
  15. (setq adiff (/ (+ a1 a2) 2.0))
  16. (setq volinc (* diff adiff))
  17. (setq vol (+ volinc  vol))
  18. (alert (strcat  "\nTotal vol is " (rtos vol 2 2) "\nElev " (rtos z2 2 2) " - " (rtos z1 2 2) "\nPart vol is " (rtos volinc 2 2 )))
  19. ( setq a1 a2)
  20. (setq z1 z2)
  21. )
  22. )
  23. (c:conar)
回复

举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 16:01:42 | 显示全部楼层
非常好的Bigal
回复

举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁體中文

GMT+8, 2025-3-15 03:04 , Processed in 1.358420 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表