想写一个等高线内插的小程序,思路不太清晰,求达人提点
处理等高线的情况太多了CASS自带的等高线内插太蹩脚了
想自己写个等高线内插程序
希望两条等高线中间内插一条等高线就OK了,
求达人给个构思。
本帖最后由 阿然 于 2012-12-8 10:48 编辑
我有个想法,没实践过,获取两条等高线的长度,然后按照等比例步长用(vlax-curve-getPointAtDist curve-objdist)获取在两条等高线的点,然后取这两个点的中点,得到一串点表,根据这些点表绘制polyline
(vl-load-com)
(setq *AcadDoc* (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(setq *MoSpace* (vla-get-ModelSpace *AcadDoc*))
(defun c:dgx-insert (/ pline1 pline2len1 len2
step step1 step2i pt
pt1 pt2 ptlistptlistlen
ptsafearray elev1 elev2 elev newpline
)
(if (setq pline1 (vlax-ename->vla-object
(car (entsel "\n选择第一条等高线:"))
)
)
(if(setq pline2 (vlax-ename->vla-object
(car (entsel "\n选择第二条等高线:"))
)
)
(progn
(setq len1 (vlax-get-property pline1 'length)
len2 (vlax-get-property pline2 'length)
elev1 (vlax-get-property pline1 'Elevation )
elev2 (vlax-get-property pline2 'Elevation )
elev (/ (+ elev1 elev2) 2)
)
(if (setq step (getint "\n请输入内插步长:"))
(setqstep1 (/ len1 step)
step2 (/ len2 step)
i 0
)
)
(while (<= i step)
(setqpt1 (vlax-curve-getPointAtDist pline1 (* i step1))
pt2 (vlax-curve-getpointatdist pline2 (* i step2))
)
(setq pt (mapcar '(lambda (x y) (/ (+ x y) 2.0)) pt1 pt2))
(setq ptlist (append ptlist pt))
(setq i (1+ i))
)
(setq ptlistlen (1- (length ptlist)))
(setq ptsafearray
(vlax-make-safearray
vlax-vbdouble
(cons 0 ptlistlen)
)
)
(setq ptsafearray (vlax-safearray-fill ptsafearray ptlist))
(setq newpline (vla-AddPolyline *mospace* ptsafearray))
(vlax-put-property newpline 'Elevation elev)
)
)
)
)
CASS内插处理起来真的太费力了,等高线生成之后要处理的问题太多了。 阿然 发表于 2012-12-8 10:02 static/image/common/back.gif
我有个想法,没实践过,获取两条等高线的长度,然后按照等比例步长用(vlax-curve-getPointAtDist curve-obj ...
这思路很赞 本帖最后由 yarp 于 2012-12-8 11:08 编辑
http://bbs.mjtd.com/thread-95698-1-1.html
我用arx写的,用lisp的可能太慢了。
我的坐标计算器中也集成了这个功能,基本上可以在所有版本cad中用。
基本思路就是从中线上向前搜索,找到下一个点,该点分别到两根线的最近距离相等或为一定比例,再继续向前搜索。
所附的dwg文件是内插出来的效果,中间的是内插线。
附上代码,2004测试通过 还是不太智能化。。。 非常感谢! 直接等比例插线并不符合实际地形,某一段可能离两条线的距离相等,另一段可能离一条线近点,离另一条远些,地形平缓的时候甚至走向都与旁边两条等高线迥异,按比例插线局限太大。 阿然 发表于 2012-12-8 10:02
我有个想法,没实践过,获取两条等高线的长度,然后按照等比例步长用(vlax-curve-getPointAtDist curve-obj ...
代码运行的时候出错了
页:
[1]