明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yanshengjiang

南方CASS 内插高程点程序

    [复制链接]
发表于 2012-7-16 16:57 | 显示全部楼层
楼主帮忙看下我的算不算精简程序?
发表于 2012-7-17 21:41 | 显示全部楼层
changyiran 发表于 2012-7-16 11:00
也发个内插的吧,不需要选等高线

首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:
1.请输入搜索距离,不好掌握范围
2.等高线不能拟合,选择重量复合线
发表于 2012-7-18 10:08 | 显示全部楼层
461045462 发表于 2012-7-17 21:41
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:

第一个问题好解决,搜索距离可以尽可能往大的输,一般为图上两相邻等高线之间距离的最大值即可,就算输大点例如1000(估计对所有图形这个距离是足够了)对程序的效率也可以说没有任何影响。至于第二个问题,不知道我理解的对不对,你的意思是不是说如果等高线是拟合的话程序就不能用了?
发表于 2012-7-18 10:10 | 显示全部楼层
461045462 发表于 2012-7-17 21:41
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:

第一个问题好解决,搜索距离可以尽可能往大的输,一般为图上两相邻等高线之间距离的最大值即可,就算输大点例如1000(估计对所有图形这个距离是足够了)对程序的效率也可以说没有任何影响。至于第二个问题,不知道我理解的对不对,你的意思是不是说如果等高线是拟合的话程序就不能用了?
发表于 2012-7-18 12:39 | 显示全部楼层
461045462 发表于 2012-7-17 21:41
首先谢谢changyiran 的分享!
收藏了,学习学习。
试了试,觉得有些待改进:

这个符合你的要求,距离100是足够了,不管是拟不拟合也都行,你试下!
  1. (defun c:tqgc(/ BZ DGJ DGX1 DGX2 DGXGS EL1 EL2 EN GC1 GC2 H J JLB SS SSJL VLA XHB YSZB ZJD ZJDZB ZXZB);对等高线附近位置进行高程注记
  2.   (setq ssjl 100)
  3.   (while (setq zjd(getpoint"\n请选择注记点位置:"))
  4.        (setq zjd(list(car zjd)(cadr zjd)));三维点转换为二维点
  5.        (setq yszb(list(+ ssjl (car zjd))(+ ssjl (cadr zjd)))zxzb(list(- (car zjd)ssjl)(- (cadr zjd)ssjl)));构造搜索范围框
  6.        (setq ss(ssget "c"yszb zxzb'((0 . "*polyline")(8 . "dgx")))jlb'()j -1)
  7.        (if (and ss(>= (setq dgxgs(sslength ss))2))
  8.        (progn
  9.          (repeat dgxgs
  10.      (setq en(ssname ss(setq j(1+ j))))
  11.      (setq vla(vlax-ename->vla-object en));转换成vla对象
  12.      (setq zjdzb(vlax-curve-getClosestPointTo vla zjd));获得离注记点最近的曲线上的点的坐标
  13.      (setq jlb(cons (list (distance zjd zjdzb)zjdzb)jlb));构造图元名和相应距离表
  14.          )
  15.          (setq xhb(VL-SORT-I  jlb'(lambda(x y)(< (car x)(car y)))));返回按距离从小到大排序后的表
  16.          (setq jl1(car(nth(car xhb)jlb))jl2(car(nth(cadr xhb)jlb)));获得指定点与离指定点最近的两条等高线之间的距离
  17.          (setq gc1(caddr(cadr(nth(car xhb)jlb)))gc2(caddr(cadr(nth(cadr xhb)jlb))));获得离指定点最近的两条等高线的高程值
  18.          (setq bz(/ jl1 (+ jl1 jl2)));获得两距离比值
  19.          (setq dgj(- gc2 gc1))
  20.          (setq h (+ gc1 (* dgj bz)))
  21.          (command "drawgcd" "" zjd h "")
  22.        )
  23.        (alert"没有找到等高线!")
  24.    )
  25.   )
  26.   (alert"注记完毕")
  27.   (princ)
  28. )

点评

附件在22楼 麻烦您看看 谢谢!  发表于 2012-7-20 22:14
标注的两点高程有些有误,传上附近麻烦您看看。谢谢!  发表于 2012-7-20 22:10

评分

参与人数 1金钱 +20 收起 理由
461045462 + 20 赞一个!

查看全部评分

发表于 2012-7-18 20:31 | 显示全部楼层
本帖最后由 461045462 于 2012-7-18 20:38 编辑
changyiran 发表于 2012-7-18 12:39
这个符合你的要求,距离100是足够了,不管是拟不拟合也都行,你试下!


谢谢!
现在拟合也能标注了,很好。
能否再提提需要改进的:
等高线在同一个高程值内,比如山顶;同高的开阔地,同一高程等高线回合时,标注有误
或许要求太高,不好意思。
见谅。

发表于 2012-7-18 20:34 | 显示全部楼层
changyiran 发表于 2012-7-18 10:10
第一个问题好解决,搜索距离可以尽可能往大的输,一般为图上两相邻等高线之间距离的最大值即可,就算输大 ...

谢谢!
是这个意思。
后面已经修改好了!
发表于 2012-7-19 09:19 | 显示全部楼层
461045462 发表于 2012-7-18 20:31
谢谢!
现在拟合也能标注了,很好。
能否再提提需要改进的:

你好,能不能发个附件,最好把你说的这几种情况都标注出来,让我看下具体的情况。
发表于 2012-7-19 21:11 | 显示全部楼层
changyiran 发表于 2012-7-19 09:19
你好,能不能发个附件,最好把你说的这几种情况都标注出来,让我看下具体的情况。

传上一个附件麻烦您看看。
谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-7-20 18:48 | 显示全部楼层
461045462 发表于 2012-7-19 21:11
传上一个附件麻烦您看看。
谢谢!

我的这个程序其实是针对两条等高线之间的点的高程注记来编写的,所以你的这个问题不好解决,希望你能想出个好办法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-10 13:42 , Processed in 0.145428 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表