明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12519|回复: 14

CASS横断面提取程序,望大侠们改善改善

  [复制链接]
发表于 2013-11-17 15:13:48 | 显示全部楼层 |阅读模式


cass里面断面提取工作是非常复杂繁琐的,这个断面提取程序可以提取,但是不太完美,望大侠们按照下面几点要求改进一下:
1、数据输出改为距离。高差;
2、输入桩号后,选择高程点可否改为选横断线,按照横断线程序找寻线附近0.3范围内的高程自动计算,一个一个选择很麻烦,也容易出错;
3、数据输出格式能否按照
  29763
4 3.68 0.35 2.54 0.87 10.89 1.35 7.92 0.88
3 4.36 -0.42 3.78 -0.68 13.88 -1.57
中桩里程  
    左端面统计个数 左边距中桩距离 高差 距离上点距离 高差.......到左边最后一个数据
    左端面统计个数 右边距中桩距离 高差 距离上点距离 高差.......到右边最后一个数据

附图 和程序 ,希望大侠们改进改进


本帖子中包含更多资源

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

x
发表于 2015-9-8 10:59:52 | 显示全部楼层
用TrueTable-路桥专业版,可以批量提断面数据,非常快。
http://www.truesoftcenter.com/chs/products/truetable-road.html
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-11 23:37:26 来自手机 | 显示全部楼层
非常实用的代码分析。。。多谢
发表于 2013-11-17 21:54:29 | 显示全部楼层
这里有个,只供参考
  1. (defun c:tt ( / dist ename ept fdist file fistpt fpt gcdz i lename lept lobj lspt lst maxx maxy minx miny Name obj objname pt ptl rename rept robj rspt slen spt ss v x zpt zsdist)
  2.   (vl-load-com)
  3.   (while (setq ename (car (entsel "\n请选择断面线:")))
  4.     (if ename
  5.       (progn
  6.         (setvar "osmode" 33)
  7.         (setq zPt (getpoint "\n拾取断面起点:")
  8.               zPt (list (car zPt) (cadr zPt))
  9.         )
  10.         (setvar "osmode" 0)
  11.         (setq obj (vlax-ename->vla-object ename))
  12.         (setq objname (vlax-get obj 'ObjectName ))
  13.         (if (or (= objname "AcDbLine") (= objname "AcDbPolyline"))
  14.           (progn
  15.             (setq sPt (vlax-curve-getStartPoint obj)
  16.                   ePt (vlax-curve-getEndPoint obj)
  17.             )
  18.             (vla-Offset (vlax-ename->vla-object ename) -0.3) ;控制中线两边
  19.             (setq Lename (entlast)
  20.                   Lobj   (vlax-ename->vla-object Lename)
  21.                   Lspt   (vlax-curve-getStartPoint Lobj)
  22.                   Lept   (vlax-curve-getEndPoint Lobj)
  23.             )
  24.             (vla-Offset (vlax-ename->vla-object ename) 0.3) ;控制中线两边
  25.             (setq Rename (entlast)
  26.                   Robj   (vlax-ename->vla-object Rename)
  27.                   Rspt   (vlax-curve-getStartPoint Robj)
  28.                   Rept   (vlax-curve-getEndPoint Robj)
  29.             )
  30.             (setq lst (list Lspt Lept Rept Rspt))
  31.             (setq minX (apply 'min (mapcar '(lambda (x) (car x)) lst))
  32.                   minY (apply 'min (mapcar '(lambda (x) (cadr x)) lst))
  33.                   maxX (apply 'max (mapcar '(lambda (x) (car x)) lst))
  34.                   maxY (apply 'max (mapcar '(lambda (x) (cadr x)) lst))
  35.             )
  36.             (entdel Lename) (entdel Rename)
  37.             (command "zoom" (list minX minY) (list maxX maxY))
  38.             (setq i -1 ss (ssget "_CP" lst '((0 . "INSERT") (2 . "GC200"))))
  39.             (if ss
  40.               (progn
  41.                 (setq slen (sslength ss))
  42.                 (repeat slen
  43.                   (setq Name (ssname ss (setq i (1+ i))))
  44.                   (setq pt   (cdr (assoc 10 (entget Name))))
  45.                   (setq ptl  (cons pt ptl))
  46.                 )
  47.                 (setq ptl (gcd_sort ptl obj))
  48.                 (setq fpt (car ptl))
  49.                 (setq zsdist (distance zPt sPt)) ;线起点至断面中点的距离
  50.                 (if (setq file (getfiled "保存数据" "D:\\K0+000" "csv" 1))
  51.                   (progn
  52.                     (setq file (open file "a"))
  53.                     (write-line "距离,高程值" file)
  54.                     (while ptl
  55.                       (setq npt (car ptl))
  56.                       (setq pt (vlax-curve-getClosestPointTo obj npt))
  57.                       (setq dist (- (vlax-curve-getDistAtPoint obj pt) zsdist))
  58.                       (setq gcdz (caddr npt))
  59.                       (write-line (strcat (rtos dist 2 3) "," (rtos gcdz 2 3)) file)
  60.                       (setq ptl (cdr ptl))
  61.                     )
  62.                     (close file)
  63.                   )
  64.                 )
  65.               )
  66.             )
  67.           )
  68.         )
  69.         (setq ptl nil)
  70.       )
  71.     )
  72.   )
  73. )
  74. (defun gcd_sort (ptl obj / lst x n)
  75.   (if (= (type obj) 'ENAME) (setq curve (vlax-ename->vla-object obj)))
  76.   (setq lst (mapcar '(lambda (x /) (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj x))) ptl))
  77.   (mapcar '(lambda (n) (nth n ptl)) (vl-sort-i lst '<))
  78. )
 楼主| 发表于 2013-11-17 22:11:48 | 显示全部楼层
gzxl 发表于 2013-11-17 21:54
这里有个,只供参考

谢谢gzxl,我刚试了一下,因为图上横断面比较多,每次要提取个文件是不是很麻烦,可以提取到一个文件里面吗,还有就是提取的数据要求是距离、高差形式的
发表于 2013-11-17 22:29:25 | 显示全部楼层
cgwang1023 发表于 2013-11-17 22:11
谢谢gzxl,我刚试了一下,因为图上横断面比较多,每次要提取个文件是不是很麻烦,可以提取到一个文件里面 ...

画图绘图寻找懒的方法,同意
改代码您总不能懒了吧
 楼主| 发表于 2013-11-17 23:44:10 | 显示全部楼层
本帖最后由 cgwang1023 于 2013-11-17 23:46 编辑

我从其他地方看到你原来有个程序,怎么现在找不到了,能再给我发一个吗,50056697@qq.com
安装后界面在附件里


本帖子中包含更多资源

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

x
 楼主| 发表于 2013-11-17 23:50:26 | 显示全部楼层
gzxl 发表于 2013-11-17 22:29
画图绘图寻找懒的方法,同意
改代码您总不能懒了吧

我不会这些,看不懂代码,只是在中专里面学了一点,那都是十几年前了,早忘记了。
发表于 2014-5-14 22:06:42 | 显示全部楼层
可以考虑批量提取比较方便,顺便加上标注桩号和画出断面线就完美了呵呵
发表于 2014-6-21 10:33:26 | 显示全部楼层
本帖最后由 skg123 于 2014-6-21 10:37 编辑

我做hdm0的时候,当时是应用在公路上提取断面数据。测点要在 断面线0.3m范围内实际操作中很难做到(障碍物太多);所有挨个点取高程点(人工判断);你想把 统计格式写前面,我的这个程序不能修改实现,数据书写的顺序不同,我的是先计算后统计可以,你想先统计后计算,不好修改;我好想对纬地的数据格式理解错了,我没有用过纬地软件,只看过数据格式;
发表于 2014-7-12 15:28:59 | 显示全部楼层
像你推荐一款软件“灵宇断面”,可以在图上拾取横断面,横断面的数据用复合线连起来,复合线里面的高程都能生成断面数据,但是数据格式和纬地的不一样,要你自己在纬地里面转换为纬地格式。
发表于 2015-7-17 11:52:35 | 显示全部楼层
gzxl 发表于 2013-11-17 21:54
这里有个,只供参考

这个提取的是横断面吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:23 , Processed in 0.229650 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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