xuexicad1960
发表于 2011-2-19 21:16:31
回复 就一小卒 的帖子
又学到了cass的一个功能,
将等高线生成数据文件。 dat格式 这一步动作很快,接下来 用“查询指定点高程”命令访问生成的数据文件,这个读取的过程是真考验人的耐心,一般等高线文件都比较大,这个读取时间就更长,根据提示可随意的添加高程点这个过程是很轻松 ,不过一次没添加完,还要再读取dat文件,还是挺让人心急的,还有更好的办法吗?
461045462
发表于 2011-2-20 06:44:59
回复 就一小卒 的帖子
谢谢你的详细说明
等会我去操作试试。
生成数据文件来回操作,比较麻烦,如果能够简便些,可以直接在图面上根据需要标注就理想了。
谢谢
xuexicad1960
发表于 2011-2-22 16:24:39
参考了两个程序,编出了等高线间内插高程点的程序
;此程序在CASS下运行
(defun c:nc ()
(defun 2w (qq) (list (car qq)(cadr qq) 0.0))
(command "osnap" "endp") ;捕捉端点
(setq p1 (getpoint "\n捕捉第一根等高线上一点: ")
p2 (getpoint "\n捕捉另一等高线上一点: ")
h1 (caddr p1) ;返回p1的z 值
h2 (caddr p2) ;返回p2的z 值
dh (- h2 h1) ;返回p1 p2的高差
ds (distance (2w p1) (2w p2));返回p1 p2之间2w距离
)
(command "osnap" "non") ;取消捕捉
(setq pz (getpoint "\n指定内插高程点: "))
(while pz
(setq d1 (distance (2w p1) (2w pz)) ;返回p1 pz之间2w距离
dw (/ (* dh d1) ds) ;返出p1pz高差
z(+ h1 dw) ;p1的高程与p1和pz的高差之和
)
(setq pz (list (car pz) (cadr pz) z));定义当前高
(command "dd" "202101""1" pz"") ;设置地物编码202101一般高程点
)
(princ)
)
sy100
发表于 2011-2-26 11:22:51
本帖最后由 sy100 于 2011-2-26 11:25 编辑
谢谢xuexicad1960 !
本人也需要这样的程序。
能否将操作过程再简化一点呢,就是将程序加载并输入命令之后提示:捕捉第一根等高线上一点→捕捉另一等高线上一点→指定内插高程点。当高程点插入之后再提示:捕捉第一根等高线上一点→捕捉另一等高线上一点→指定内插高程点。如此自动循环, 按Esc键结束。
xuexicad1960
发表于 2011-2-26 23:15:00
回复 sy100 的帖子
你说的要自动循环, 按Esc键结束。我当时是考虑了写高程时,注记的大小和图的比例尺还有关系,就借用了cass中“dd”命令。dd在写高程时是连续的 ,我试着想加两个回车,让程序重新回到
命令提示符下,没有办到。现在只能手动回车再继续了,如有高手帮忙再完善一下这个程序,或按照这样的需求再写一个程序,我会非常高兴和大家一起探讨。
461045462
发表于 2011-3-4 06:38:15
本帖最后由 461045462 于 2011-3-4 06:40 编辑
将13楼的修改了部分,还是在cass下运作,感觉欠理想。我想让它在cad下直接操作,却没有做到,如果采用text方式要如何修改?望高手指教。
谢谢
(defun c:jgc1 (/ p1 p2 h1 h2 dh ds pz d1 z) ;等高线之间加高程值
(setvar "cmdecho" 0)
(defun 2w (qq) (list (car qq) (cadr qq) 0.0))
(SETVAR "OSMODE" 512)
(setq p1 (getpoint "\n捕捉第一根等高线上一点: ")
p2 (getpoint "\n捕捉另一等高线上一点: ")
h1 (caddr p1) ;返回p1的z 值
h2 (caddr p2) ;返回p2的z 值
dh (- h2 h1) ;返回p1 p2的高差
ds (distance (2w p1) (2w p2)) ;返回p1 p2之间2w距离
)
(setvar "osmode" 0)
(setq pz (getpoint "\n指定内插高程点: "))
(setq d1 (distance (2w p1) (2w pz)) ;返回p1 pz之间2w距离
dw (/ (* dh d1) ds) ;返出p1pz高差
z(+ h1 dw) ;p1的高程与p1和pz的高差之和
)
(setq pz (list (car pz) (cadr pz) z)) ;定义当前高
(command "dd" "202101" "1" pz "" "") ;设置地物编码202101一般高程点
;(command "text" "j" "ml" "1" "0" (rtos pz 2 2))
;用text命令语句要如何修改
(SETVAR "OSMODE" 512)
(princ)
(c:jgc1)
)
xuexicad1960
发表于 2011-4-18 16:49:47
回复 sy100 的帖子
经过一段时间的使用和学习,又把“内插高程点”的程序修改了一下,基本达到你说的要求,击右键或空格键退出,同时取消捕捉。欢迎提意见,共同学习。附程序如下:
;在CASS下运行,同时注意 确定内插高程点不要离捕捉的两点连线太远
(defun c:nc (/ p1 p2 h1 h2 dh ds pz dd z)
(defun 2w (dd)(list (car dd)(cadr dd) 0.0))
(SETVAR "OSMODE" 512)
(while
(setq p1 (getpoint "\n捕捉第一根等高线上一点: ")
h1 (caddr p1)) ;返回p1的z 值
(if (/= h1 0.0 )
(progn
(setq p2 (getpoint "\n捕捉另一等高线上一点: ")
h2 (caddr p2) ;返回p2的z 值
dh (- h2 h1) ;返回p1 p2的高差
ds (distance (2w p1) (2w p2));返回p1 p2之间2w距离
)
(setvar "osmode" 0)
(setq pz (getpoint "\n确定内插高程点: "))
(setq dd (distance (2w p1) (2w pz)) ;返回p1 pt之间2w距离
dw (/ (* dh dd) ds) ;返出p1pt高差
z(+ h1 dw) ;p1的高程与p1和pt的高差之
)
(setq pz (list (car pz) (cadr pz) z));定义当前高
(command "dd" "202101""1" pz "" "");设置地物编码202101一般高程点
)
)
(SETVAR "OSMODE" 512)
)
(setvar "osmode" 0)
(princ)
)
NetBee
发表于 2011-4-19 21:58:01
此程序不严谨。
461045462
发表于 2011-4-20 06:39:58
NetBee 发表于 2011-4-19 21:58 static/image/common/back.gif
此程序不严谨。
谢谢您的关注
请问能否提出一些具体的在哪方面存在不足之处,并给出指导意见?
谢谢
czb203
发表于 2011-11-20 00:11:48
测试一下,真的还不错啊 谢谢啊