czb203
发表于 2011-11-20 00:13:11
测试一下,真的还不错啊 谢谢啊
李龙山
发表于 2011-11-30 19:11:57
二楼版主的思路非常正确,其它程序本人认为结果是错的。
461045462
发表于 2011-12-8 21:07:59
李龙山 发表于 2011-11-30 19:11 static/image/common/back.gif
二楼版主的思路非常正确,其它程序本人认为结果是错的。
二楼版主的思路非常正确,其它程序结果并非全是错的,只是不很理想而已......
谢谢
李龙山
发表于 2011-12-15 12:24:18
本帖最后由 李龙山 于 2011-12-15 12:41 编辑
461045462 发表于 2011-12-8 21:07 static/image/common/back.gif
二楼版主的思路非常正确,其它程序结果并非全是错的,只是不很理想而已......
谢谢
(SETVAR "OSMODE" 512)
(setq p1 (getpoint "\n捕捉第一根等高线上一点: ")
p2 (getpoint "\n捕捉另一等高线上一点: ")
p1和p2不可能捕捉到离内插高程点最近的等高线上的点。只有采取2楼的函数才能做到。
例如: (command "osnap" "off")
(setq x1 (car (entsel "\n选择高程点旁边的一根等高线:"))
P1 (vlax-curve-getClosestPointTo x1 Pz)
pz为内插高程点,p1为等高线上离pz最近点。供楼主参考。
zhanglangjing
发表于 2012-2-16 16:37:40
很早就想写个程序自动加密高程点,但是一直效果和速度太慢,今日突然看见此文感觉不分享给大家有点过意不去。
(支持全测,反对加密)
如果你已经生成了等高线,但是觉得高程点不够多,想加密一下,有没有什么好的方法呢?答案是肯定的。
首先CASS里面就有这一个命令,在【工程应用】→【等高线生成数据文件】,就可以根据等高线,在等高线上生成若干个高程点。这样就会生成一个点文件,如果你想使用的话直接展点就可以了,是不是很简单,哈哈!
但是如果你象我一样还有别的想法,比如我不只想要等高线上的点,我还需要加密等高线中间的点,那怎么办呢?还是有办法的。而且主要也是用CASS里的这个命令,只不过我们需要变通一下。
我先讲一下思路:第一先由等高线提取高程点,刚才CASS那个命令已经为我们做到了。然后我们把生成的高程点再展到新的图形里面,然后再生成DTM,重新生成等高线。在这里生成等高线的时候就有个技巧了,你可以加密你的等高线了,比如你原来的等高线是1米的,现在你想加密它,那么这次你就可以生成等高距为0.5米的了,这样的话,你就能得到0.5米的高程点了,然后你再重复这个命令【工程应用】→【等高线生成数据文件】,就能得到你想要的高程点了不是,明白了吗?哈哈,是不是很简单。
声明一下:你的机器配置一定要好啊,不然是很费时的,甚至会死机!我就做了0.12米的等高线,差点死机!
下面详细说一下步骤:
1、打开你想要加密高程点的图形(废话),然后工程应用】→【等高线生成数据文件】,得到高程点文件。
2、新建图形文件,将刚才的高程点文件展绘到这里。注意高程展点的时候就不要设置高程点的距离了,越密越好(就是为0吗)。
3、高程点建立DTM,然后【等高线】→【绘制等高线】,输入等高距为你想要的高程数据,比如我输入0.12米,那么最后生成的等高线就会有*.12,*.24,*.36,……*.32 ……等等的等高线了。理论上你可以得到你想要的任何数值,只要你把等高距设置的足够小。
4、然后你再运行【工程应用】→【等高线生成数据文件】命令,就可以得到你想要的高程点了。
5、打完收工。
如果你的图形很大,要加密的点很多的话,要保证你的电脑配置,不然会死机的!
kx820506
发表于 2012-2-17 12:01:38
x想学习,不知道怎么样才能入门
461045462
发表于 2012-3-7 14:08:14
zhanglangjing 发表于 2012-2-16 16:37 static/image/common/back.gif
很早就想写个程序自动加密高程点,但是一直效果和速度太慢,今日突然看见此文感觉不分享给大家有点过意不去 ...
谢谢您的关注
您说的方法虽然可行,觉得较复杂,转换较慢,要重复使用这个命令【工程应用】→【等高线生成数据文件】。。。。
谢谢
004
发表于 2012-9-9 12:49:28
本帖最后由 004 于 2012-9-9 12:53 编辑
自己临时写的,可以用,但不精。。
;;;201107311130wkq004
(defun c:tt ()
(setvar "osmode" 512)
(command "layer" "s" "gcd" "")
(setq p1 (getpoint "\n请输入点位置:"))
(setq p2 (getpoint "\n请输入点位置:"))
(setq a1 (caddr p1))
(setq a2 (caddr p2))
;;;(setq a3 (/ (- a1 a2) 2))
;;;(setq a4 (- (caddr p1) a3))
(setq s1 (distance p1 p2))
(setvar "osmode" 0)
(setvar "thickness" 1610000)
(setq xh 1)
(while (= 1 xh)
(setq TMP(grread T 15 1)
MODE (car TMP)
val(cadr TMP)
)
(redraw)
(cond
((= 5 MODE)
(progn
(grdraw p1 val -1)
(grdraw p2 val -1)
(grdraw p1 p2 -1)
)
)
((= 3 MODE)
(progn
(setq val (list (car val) (cadr val)))
(setq ang1 (abs (- (atof (angtos (angle p1 val) 0 4))
(atof (angtos (angle p1 p2) 0 4))
)
)
)
(if (> ang1 180)
(setq ang1 (- 360 ang1))
)
(setq ang2 (abs (- (atof (angtos (angle p2 val) 0 4))
(atof (angtos (angle p2 p1) 0 4))
)
)
)
(if (> ang2 180)
(setq ang2 (- 360 ang2))
)
(if (< (+ ang1 ang2) 90)
(progn
(redraw)
(setq
dist1 (* (cos (* pi (/ ang1 180.0))) (distance p1 val))
)
(if (> a1 a2)
(setq bili+- -1)
(setq bili+- 1)
)
(setq gaocheng
(+ a1
(* bili+- (/ dist1 (distance p1 p2)) (abs (- a1 a2)))
)
)
(setq ptz (append val (list gaoCheng)))
;;; (setq p4 (subst gaocheng a1 val))
(setq text (rtos gaocheng 2 1))
;;; (setq p5 (list (+ (car p4) 1) (nth 1 p4) gaocheng))
;;; (command "point" p4)
;;; (command "text" p5 "2.0" "" text)
(entmake (list (cons 0 "POINT")
(cons 10 ptz)
)
)
(entmake
(list (cons 0 "TEXT")
(cons 1 text)
(cons 10 ptz)
(cons 40 2.0)
;;; (cons 73 2)
)
)
(setq xh 0)
)
)
)
)
((= 25 MODE)
;;右击
(progn
(redraw)
(setq xh 0)
)
)
)
)
(setvar "thickness" 0)
(command "layer" "s" "0" "")
(princ)
)
461045462
发表于 2012-9-10 15:49:56
004 发表于 2012-9-9 12:49 static/image/common/back.gif
自己临时写的,可以用,但不精。。
谢谢您的关注!
下载收藏了,等会试试,学习学习。
谢谢!
461045462
发表于 2012-9-10 20:24:02
等高线高程值加密可以参考:
南方CASS 内插高程点程序
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=93209&fromuid=376902