明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 461045462

等高线之间标注高程值

  [复制链接]
发表于 2011-2-19 21:16:31 | 显示全部楼层
回复 就一小卒 的帖子

又学到了cass的一个功能,   
  将等高线生成数据文件。 dat格式    这一步动作很快,接下来 用“查询指定点高程”命令访问生成的数据文件,这个读取的过程是真考验人的耐心,一般等高线文件都比较大,这个读取时间就更长,根据提示可随意的添加高程点这个过程是很轻松 ,不过一次没添加完,还要再读取dat文件,还是挺让人心急的,还有更好的办法吗?
 楼主| 发表于 2011-2-20 06:44:59 | 显示全部楼层
回复 就一小卒 的帖子

谢谢你的详细说明
等会我去操作试试。
生成数据文件来回操作,比较麻烦,如果能够简便些,可以直接在图面上根据需要标注就理想了。
谢谢
发表于 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)
)
发表于 2011-2-26 11:22:51 | 显示全部楼层
本帖最后由 sy100 于 2011-2-26 11:25 编辑

谢谢xuexicad1960 !
本人也需要这样的程序。
能否将操作过程再简化一点呢,就是将程序加载并输入命令之后提示:捕捉第一根等高线上一点→捕捉另一等高线上一点→指定内插高程点。当高程点插入之后再提示:捕捉第一根等高线上一点→捕捉另一等高线上一点→指定内插高程点。如此自动循环, 按Esc键结束。
发表于 2011-2-26 23:15:00 | 显示全部楼层
回复 sy100 的帖子

你说的要自动循环, 按Esc键结束。我当时是考虑了写高程时,注记的大小和图的比例尺还有关系,就借用了cass中“dd”命令。dd在写高程时是连续的 ,我试着想加两个回车,让程序重新回到
命令提示符下,没有办到。现在只能手动回车再继续了,如有高手帮忙再完善一下这个程序,或按照这样的需求再写一个程序,我会非常高兴和大家一起探讨。
 楼主| 发表于 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)
)

发表于 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)
    )
发表于 2011-4-19 21:58:01 | 显示全部楼层
此程序不严谨。
 楼主| 发表于 2011-4-20 06:39:58 | 显示全部楼层
NetBee 发表于 2011-4-19 21:58
此程序不严谨。

谢谢您的关注
请问能否提出一些具体的在哪方面存在不足之处,并给出指导意见?
谢谢
发表于 2011-11-20 00:11:48 | 显示全部楼层
测试一下,真的还不错啊 谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-30 15:13 , Processed in 0.165667 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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