cgwang1023 发表于 2013-11-17 15:13:48

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



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
中桩里程
    左端面统计个数 左边距中桩距离 高差 距离上点距离 高差.......到左边最后一个数据
    左端面统计个数 右边距中桩距离 高差 距离上点距离 高差.......到右边最后一个数据

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


unionsoft 发表于 2015-9-8 10:59:52

用TrueTable-路桥专业版,可以批量提断面数据,非常快。
http://www.truesoftcenter.com/chs/products/truetable-road.html
http://www.truesoftcenter.com/chs/products/TrueTable-road.files/TT-ROAD.jpg

f4800 发表于 2020-11-11 23:37:26

非常实用的代码分析。。。多谢

gzxl 发表于 2013-11-17 21:54:29

这里有个,只供参考(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)
(vl-load-com)
(while (setq ename (car (entsel "\n请选择断面线:")))
    (if ename
      (progn
      (setvar "osmode" 33)
      (setq zPt (getpoint "\n拾取断面起点:")
            zPt (list (car zPt) (cadr zPt))
      )
      (setvar "osmode" 0)
      (setq obj (vlax-ename->vla-object ename))
      (setq objname (vlax-get obj 'ObjectName ))
      (if (or (= objname "AcDbLine") (= objname "AcDbPolyline"))
          (progn
            (setq sPt (vlax-curve-getStartPoint obj)
                  ePt (vlax-curve-getEndPoint obj)
            )
            (vla-Offset (vlax-ename->vla-object ename) -0.3) ;控制中线两边
            (setq Lename (entlast)
                  Lobj   (vlax-ename->vla-object Lename)
                  Lspt   (vlax-curve-getStartPoint Lobj)
                  Lept   (vlax-curve-getEndPoint Lobj)
            )
            (vla-Offset (vlax-ename->vla-object ename) 0.3) ;控制中线两边
            (setq Rename (entlast)
                  Robj   (vlax-ename->vla-object Rename)
                  Rspt   (vlax-curve-getStartPoint Robj)
                  Rept   (vlax-curve-getEndPoint Robj)
            )
            (setq lst (list Lspt Lept Rept Rspt))
            (setq minX (apply 'min (mapcar '(lambda (x) (car x)) lst))
                  minY (apply 'min (mapcar '(lambda (x) (cadr x)) lst))
                  maxX (apply 'max (mapcar '(lambda (x) (car x)) lst))
                  maxY (apply 'max (mapcar '(lambda (x) (cadr x)) lst))
            )
            (entdel Lename) (entdel Rename)
            (command "zoom" (list minX minY) (list maxX maxY))
            (setq i -1 ss (ssget "_CP" lst '((0 . "INSERT") (2 . "GC200"))))
            (if ss
            (progn
                (setq slen (sslength ss))
                (repeat slen
                  (setq Name (ssname ss (setq i (1+ i))))
                  (setq pt   (cdr (assoc 10 (entget Name))))
                  (setq ptl(cons pt ptl))
                )
                (setq ptl (gcd_sort ptl obj))
                (setq fpt (car ptl))
                (setq zsdist (distance zPt sPt)) ;线起点至断面中点的距离
                (if (setq file (getfiled "保存数据" "D:\\K0+000" "csv" 1))
                  (progn
                  (setq file (open file "a"))
                  (write-line "距离,高程值" file)
                  (while ptl
                      (setq npt (car ptl))
                      (setq pt (vlax-curve-getClosestPointTo obj npt))
                      (setq dist (- (vlax-curve-getDistAtPoint obj pt) zsdist))
                      (setq gcdz (caddr npt))
                      (write-line (strcat (rtos dist 2 3) "," (rtos gcdz 2 3)) file)
                      (setq ptl (cdr ptl))
                  )
                  (close file)
                  )
                )
            )
            )
          )
      )
      (setq ptl nil)
      )
    )
)
)
(defun gcd_sort (ptl obj / lst x n)
(if (= (type obj) 'ENAME) (setq curve (vlax-ename->vla-object obj)))
(setq lst (mapcar '(lambda (x /) (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj x))) ptl))
(mapcar '(lambda (n) (nth n ptl)) (vl-sort-i lst '<))
)

cgwang1023 发表于 2013-11-17 22:11:48

gzxl 发表于 2013-11-17 21:54 static/image/common/back.gif
这里有个,只供参考

谢谢gzxl,我刚试了一下,因为图上横断面比较多,每次要提取个文件是不是很麻烦,可以提取到一个文件里面吗,还有就是提取的数据要求是距离、高差形式的

gzxl 发表于 2013-11-17 22:29:25

cgwang1023 发表于 2013-11-17 22:11 static/image/common/back.gif
谢谢gzxl,我刚试了一下,因为图上横断面比较多,每次要提取个文件是不是很麻烦,可以提取到一个文件里面 ...

画图绘图寻找懒的方法,同意
改代码您总不能懒了吧

cgwang1023 发表于 2013-11-17 23:44:10

本帖最后由 cgwang1023 于 2013-11-17 23:46 编辑

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


cgwang1023 发表于 2013-11-17 23:50:26

gzxl 发表于 2013-11-17 22:29 static/image/common/back.gif
画图绘图寻找懒的方法,同意
改代码您总不能懒了吧

我不会这些,看不懂代码,只是在中专里面学了一点,那都是十几年前了,早忘记了。

ann2008 发表于 2014-5-14 22:06:42

可以考虑批量提取比较方便,顺便加上标注桩号和画出断面线就完美了呵呵

skg123 发表于 2014-6-21 10:33:26

本帖最后由 skg123 于 2014-6-21 10:37 编辑

我做hdm0的时候,当时是应用在公路上提取断面数据。测点要在 断面线0.3m范围内实际操作中很难做到(障碍物太多);所有挨个点取高程点(人工判断);你想把 统计格式写前面,我的这个程序不能修改实现,数据书写的顺序不同,我的是先计算后统计可以,你想先统计后计算,不好修改;我好想对纬地的数据格式理解错了,我没有用过纬地软件,只看过数据格式;

wzb0113 发表于 2014-7-12 15:28:59

像你推荐一款软件“灵宇断面”,可以在图上拾取横断面,横断面的数据用复合线连起来,复合线里面的高程都能生成断面数据,但是数据格式和纬地的不一样,要你自己在纬地里面转换为纬地格式。

yxh1202 发表于 2015-7-17 11:52:35

gzxl 发表于 2013-11-17 21:54 static/image/common/back.gif
这里有个,只供参考

这个提取的是横断面吗
页: [1] 2
查看完整版本: CASS横断面提取程序,望大侠们改善改善