changyiran
发表于 2012-7-16 16:57:33
楼主帮忙看下我的算不算精简程序?
461045462
发表于 2012-7-17 21:41:52
changyiran 发表于 2012-7-16 11:00 static/image/common/back.gif
也发个内插的吧,不需要选等高线
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:
1.请输入搜索距离,不好掌握范围
2.等高线不能拟合,选择重量复合线
changyiran
发表于 2012-7-18 10:08:12
461045462 发表于 2012-7-17 21:41 static/image/common/back.gif
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:
第一个问题好解决,搜索距离可以尽可能往大的输,一般为图上两相邻等高线之间距离的最大值即可,就算输大点例如1000(估计对所有图形这个距离是足够了)对程序的效率也可以说没有任何影响。至于第二个问题,不知道我理解的对不对,你的意思是不是说如果等高线是拟合的话程序就不能用了?
changyiran
发表于 2012-7-18 10:10:02
461045462 发表于 2012-7-17 21:41 static/image/common/back.gif
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:
第一个问题好解决,搜索距离可以尽可能往大的输,一般为图上两相邻等高线之间距离的最大值即可,就算输大点例如1000(估计对所有图形这个距离是足够了)对程序的效率也可以说没有任何影响。至于第二个问题,不知道我理解的对不对,你的意思是不是说如果等高线是拟合的话程序就不能用了?
changyiran
发表于 2012-7-18 12:39:18
461045462 发表于 2012-7-17 21:41 static/image/common/back.gif
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:
这个符合你的要求,距离100是足够了,不管是拟不拟合也都行,你试下!(defun c:tqgc(/ BZ DGJ DGX1 DGX2 DGXGS EL1 EL2 EN GC1 GC2 H J JLB SS SSJL VLA XHB YSZB ZJD ZJDZB ZXZB);对等高线附近位置进行高程注记
(setq ssjl 100)
(while (setq zjd(getpoint"\n请选择注记点位置:"))
(setq zjd(list(car zjd)(cadr zjd)));三维点转换为二维点
(setq yszb(list(+ ssjl (car zjd))(+ ssjl (cadr zjd)))zxzb(list(- (car zjd)ssjl)(- (cadr zjd)ssjl)));构造搜索范围框
(setq ss(ssget "c"yszb zxzb'((0 . "*polyline")(8 . "dgx")))jlb'()j -1)
(if (and ss(>= (setq dgxgs(sslength ss))2))
(progn
(repeat dgxgs
(setq en(ssname ss(setq j(1+ j))))
(setq vla(vlax-ename->vla-object en));转换成vla对象
(setq zjdzb(vlax-curve-getClosestPointTo vla zjd));获得离注记点最近的曲线上的点的坐标
(setq jlb(cons (list (distance zjd zjdzb)zjdzb)jlb));构造图元名和相应距离表
)
(setq xhb(VL-SORT-Ijlb'(lambda(x y)(< (car x)(car y)))));返回按距离从小到大排序后的表
(setq jl1(car(nth(car xhb)jlb))jl2(car(nth(cadr xhb)jlb)));获得指定点与离指定点最近的两条等高线之间的距离
(setq gc1(caddr(cadr(nth(car xhb)jlb)))gc2(caddr(cadr(nth(cadr xhb)jlb))));获得离指定点最近的两条等高线的高程值
(setq bz(/ jl1 (+ jl1 jl2)));获得两距离比值
(setq dgj(- gc2 gc1))
(setq h (+ gc1 (* dgj bz)))
(command "drawgcd" "" zjd h "")
)
(alert"没有找到等高线!")
)
)
(alert"注记完毕")
(princ)
)
461045462
发表于 2012-7-18 20:31:24
本帖最后由 461045462 于 2012-7-18 20:38 编辑
changyiran 发表于 2012-7-18 12:39 http://bbs.mjtd.com/static/image/common/back.gif
这个符合你的要求,距离100是足够了,不管是拟不拟合也都行,你试下!
谢谢!
现在拟合也能标注了,很好。
能否再提提需要改进的:
等高线在同一个高程值内,比如山顶;同高的开阔地,同一高程等高线回合时,标注有误
或许要求太高,不好意思。
见谅。
461045462
发表于 2012-7-18 20:34:27
changyiran 发表于 2012-7-18 10:10 static/image/common/back.gif
第一个问题好解决,搜索距离可以尽可能往大的输,一般为图上两相邻等高线之间距离的最大值即可,就算输大 ...
谢谢!
是这个意思。
后面已经修改好了!
changyiran
发表于 2012-7-19 09:19:44
461045462 发表于 2012-7-18 20:31 static/image/common/back.gif
谢谢!
现在拟合也能标注了,很好。
能否再提提需要改进的:
你好,能不能发个附件,最好把你说的这几种情况都标注出来,让我看下具体的情况。
461045462
发表于 2012-7-19 21:11:05
changyiran 发表于 2012-7-19 09:19 static/image/common/back.gif
你好,能不能发个附件,最好把你说的这几种情况都标注出来,让我看下具体的情况。
传上一个附件麻烦您看看。
谢谢!
changyiran
发表于 2012-7-20 18:48:38
461045462 发表于 2012-7-19 21:11 static/image/common/back.gif
传上一个附件麻烦您看看。
谢谢!
我的这个程序其实是针对两条等高线之间的点的高程注记来编写的,所以你的这个问题不好解决,希望你能想出个好办法。