自动选择轮廓
大家好,我有一系列闭合等高线,从2.0m到3.0m,间隔0.1m。我可以通过使用measuregeom命令并选择一条等高线来手动获取由每条等高线包围的区域。我试图看看是否可以用lisp从上到下指向轮廓。这能做到吗?。
提前感谢您的建议。
芦荟
磨尖?
您希望区域结果显示在哪里?
(defun c:demo (/ data ss e)
(setq data nil
ss
(ssget '(
(0 . "LWPOLYLINE")
(-4 . "&=")
(70 . 1)
)
)
)
(repeat (sslength ss)
(setq e (ssname ss 0))
(setq
data (cons
(list (cdr (assoc 38 (entget e))) (vlax-curve-getarea e))
data
)
)
(ssdel e ss)
)
(foreach itm (vl-sort data '(lambda (a b) (< (car a) (car b))))
(princ (strcat "\nContour: "
(rtos (car itm))
"\t"
(rtos (cadr itm))
)
)
)
(textscr)
(princ)
) Pbe考虑了这个问题,但不得不做一些其他事情,使用ssget F应该可以消除对数据排序的需要,但可能意味着需要更多的选择。
这是真正快速的尝试,只是为了方法
(defun c:conar ( / ss x pt1 pt2)
(setq pt1 (getpoint "1st point"))
(setq pt2 (getpoint pt1 "2nd point"))
(setq ss (ssget "F" (list pt1 pt2)(list (cons 0 "Lwpolyline"))))
(repeat (setq x (sslength ss))
(alert (strcat "area is " (rtos (vla-get-area (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))2 2)))
)
)
(c:conar)
谢谢pbe。它起作用了。然而,我需要指向轮廓。让我解释一下我想做什么:
我有一个很大的土地面积,比如说50公顷,就像一个最高轮廓为3米的盆地。在中心,约15公顷的平坦区域,轮廓为2米。中间有0.1间隔的闭合轮廓。水以每秒10立方米的速度流入盆地。我想展示这个区域是如何被时间填充的,比如高亮显示轮廓,并在屏幕上指示特定轮廓被填充的时间。在这种情况下,我忽略了液压的影响。有没有可能不用指点(可能我只能指点一次)?。
当做
芦荟
这是个好主意,但昨晚我在想,给定值上可能有多个轮廓,这意味着仍需要收集所有数据。
(defun c:demo (/ data ss e level data)
(setq data nil
ss
(ssget '(
(0 . "LWPOLYLINE")
(-4 . "&=")
(70 . 1)
)
)
)
(repeat (sslength ss)
(setq e (ssname ss 0)
level (cdr (assoc 38 (entget e)))
area (vlax-curve-getarea e))
(setq data
(if (setq f (assoc level data))
(subst (list level (+ area (Cadr f))) f data)
(cons
(list level area )
data
)
)
)
(ssdel e ss)
)
(foreach itm (vl-sort data '(lambda (a b) (< (car a) (car b))))
(princ (strcat "\nContour: "
(rtos (car itm))
"\t"
(rtos (cadr itm))
)
)
)
(textscr)
(princ)
)
但话说回来,我可能会完全离开。
如果将示例图形与所需结果一起发布,则更容易理解。 可能使用外部边界作为极限,在这种情况下,max Z然后查找所有内部。我同意,但对于一个简单的形状,需要一个dwg。
Pbe通过在整个形状上拖动两点,我所做的确实有效。我测试了一个类似的形状。我刚刚在工作中完成了这个练习,我所做的将会很有用,但由于我们仍在玩这个形状,我下次会使用它。
体积是两个面积/2*高度的总和。
像CIV3d这样的软件是逐片进行体积计算的。
很高兴知道这一点,为我们节省了很多时间去弄清楚轮廓是怎么回事
迫不及待地想看看事情进展如何。 Pbe试一试,我需要检查VOL,只需将您的图像单面降低或升高,然后从内到外拾取。一个双孔需要做不同的工作,这就是为什么你有体积计算软件,它从一个三角不规则网络。
(defun c:conar ( / ss x pt1 pt2 a1 a2 z1 z2 vol adiff volinc)
(setq pt1 (getpoint "1st point"))
(setq pt2 (getpoint pt1 "2nd point"))
(setq ss (ssget "F" (list pt1 pt2)(list (cons 0 "Lwpolyline"))))
(setq x (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(setq a1 (vla-get-area obj))
(setq z1 (vla-get-elevation obj))
(setq vol 0.0)
(repeatx
(setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(setq z2 (vla-get-elevation obj))
(setq a2 (vla-get-area obj))
(setq diff (- z1 z2))
(setq adiff (/ (+ a1 a2) 2.0))
(setq volinc (* diff adiff))
(setq vol (+ volincvol))
(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 )))
( setq a1 a2)
(setq z1 z2)
)
)
(c:conar)
非常好的Bigal
页:
[1]
2