先用CASS生成的三角网,记得三角网中任何三角形都不能穿越地形特征线,要符合地形地貌
然后用下面这个小代码将三角网(三维多段线转化成三维面 3DFACE)
- (defun vxs (e / i v lst)
- (setq i 0)
- (while
- (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
- (setq lst (cons v lst))
- )
- (reverse lst))
- ;;;;;;;;;;;;;;;
- (setq ssa (ssget '((0 . "POLYLINE") (8 . "sjw"))))
- (setq ii 0
- no 0
- )
- (repeat (sslength ssa)
- (setq en (ssname ssa ii)
- ptb (vxs en)
- pzx (append pzx (list ptb))
- ii (1+ ii) )
- ; (setq pzx (list (car pt) (cadr pt) (caddr pt)))
-
- )
- ;(write-line (strcat pzx) fff)
- ; (close fff)
- ;(princ (strcat "\n坐标已存入"" wjm ""中"))
-
- ;(setvar "cmdecho" cm)
- (princ)
- (foreach n pzx
- (entmake (list '(0 . "3dface") (cons 10 (nth 0 n))
- (cons 11 (nth 1 n))
- (cons 12 (nth 2 n))
- (cons 13 (nth 0 n))
- '(8 . "0")
- '(62 . 3)
- ) )
- )
然后用 CONVTOSURFACE命令 将三维面3DFACE转换为曲面(平面,分散的曲面SURFACE PLANE),再用命令UNION(CAD2008不行,要高版本,2016使用可以)将分散的曲面SURFACE PLANE合并成完整的曲面SURFACE
以标高最低点Z值画LWPOLYLINE多段线围住三角网一圈,并用拉伸命令EXTRUDE拉伸,高度为最高Z值减去最低点Z值形成三维实体3D solid
用剖切命令SLICE将三维实体剖切,选合并成完整的曲面SURFACE为参照,删除不要的剖切后实体,剩余的就是要算体积的实体
用MASSPROP命令计算实体体积 完成
这只是我的小小想法, 不足之处, 还望谅解、 指点,谢谢
|