CAD中高程点提取横断面数据的方法

在CDA中已有横断面高程数据如下图

想要生成横断面数据文件,文件格式为下
24080 4 1.0070 0.2260 1.8980 0.7860 3.0110 0.0470 4.0110 0.0470
3 8.6560 2.8530 14.9200 5.8730 31.5370 16.7330
24100 2 2.256 1.4050 3.1310 0.8060
1 7.6410 4.2700

中桩桩号
数据组数 平距 高差 平距 高差 平距 高差 平距 高差 (左)
数据组数 平距 高差 平距 高差 平距 高差 平距 高差 (右)
中桩桩号
数据组数 平距 高差 平距 高差 平距 高差 平距 高差 (左)
数据组数 平距 高差 平距 高差 平距 高差 平距 高差 (右)
(平距及高差都是相对于中桩的)
请教各位高手及专家!谢谢诶
请问有高手可以编程吗?费用好说的啊!

1、首先需要打开软件。

2、接下来开始点击上方栏工具。

3、然后接着点击数据提取。

4、在打开的页面中勾选CREAT A NEW DATA。

5、然后在弹出的页面中接着点击NEXT。

6、文件类型为DXE,最后保存即可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-21

方法1:结合EXCEL,先用ID命令依次点取各点,之后从命令行选择X,Y,Z坐标数据,导入用EXCEL中计算。

方法2:用lisp编程。大概写了下,边桩数量7个,前4个一组,后3个一组,按你给的格式定的,先选取桩号,然后是中桩,再是边桩,然后是下一组桩号,中桩,边桩,以此类推,源代码:



;;从这里开始往下复制

(defun getinput ()

  (setq ss1 (ssget '((0 . "TEXT,MTEXT")))

tt  (entget (ssname ss1 0))

ttt (cdr (assoc 1 tt))

aa  (getpoint "\n点取中桩点:")

ax  (car aa)

ay  (cadr aa)

az  (caddr aa)

bb  (getpoint "\n点取第一个边桩点:")

bx  (car bb)

by  (cadr bb)

bz  (caddr bb)

bzz (abs (- bz az))

bl  (sqrt (- (expt (distance aa bb) 2) (expt bzz 2)))

cc  (getpoint "\n点取第二个边桩点:")

cx  (car cc)

cy  (cadr cc)

cz  (caddr cc)

czz (abs (- cz az))

cl  (sqrt (- (expt (distance aa cc) 2) (expt czz 2)))

dd  (getpoint "\n点取第三个边桩点:")

dx  (car dd)

dy  (cadr dd)

dz  (caddr dd)

dzz (abs (- dz az))

dl  (sqrt (- (expt (distance aa dd) 2) (expt dzz 2)))

ee  (getpoint "\n点取边第四个桩点:")

ex  (car ee)

ey  (cadr ee)

ez  (caddr ee)

ezz (abs (- ez az))

el  (sqrt (- (expt (distance aa ee) 2) (expt ezz 2)))

ff  (getpoint "\n点取另一侧第一个边桩点:")

fx  (car ff)

fy  (cadr ff)

fz  (caddr ff)

fzz (abs (- fz az))

fl  (sqrt (- (expt (distance aa ff) 2) (expt fzz 2)))

gg  (getpoint "\n点取另一侧第二个边桩点:")

gx  (car gg)

gy  (cadr gg)

gz  (caddr gg)

gzz (abs (- gz az))

gl  (sqrt (- (expt (distance aa gg) 2) (expt gzz 2)))

hh  (getpoint "\n点取另一侧第三个边桩点:\n")

hx  (car hh)

hy  (cadr hh)

hz  (caddr hh)

hzz (abs (- hz az))

hl  (sqrt (- (expt (distance aa hh) 2) (expt hzz 2)))

  )

  (list

    (cons 10 bl)

    (cons 11 bzz)

    (cons 12 cl)

    (cons 13 czz)

    (cons 14 dl)

    (cons 15 dzz)

    (cons 16 el)

    (cons 17 ezz)

    (cons 18 fl)

    (cons 19 fzz)

    (cons 20 gl)

    (cons 21 gzz)

    (cons 22 hl)

    (cons 23 hzz)

    (cons 24 ttt)

  )

)



(defun c:hdm ()

  (setq num  0

ctim (menucmd "M=$(edtime,$(getvar,date),H:MM:MM)")

  )

  (write-file

    "d:\\横断面数据.txt"

    "\n*********************************\n"

  )

  (write-file "d:\\横断面数据.txt" "*****")

  (write-file "d:\\横断面数据.txt" ctim)

  (write-file "d:\\横断面数据.txt" "*****\n")

  (write-file

    "d:\\横断面数据.txt"

    "*********************************\n"

  )

  (while (>= num 0)

    (setq data (getinput)

 bl   (cdr (assoc 10 data))

 bzz  (cdr (assoc 11 data))

 cl   (cdr (assoc 12 data))

 czz  (cdr (assoc 13 data))

 dl   (cdr (assoc 14 data))

 dzz  (cdr (assoc 15 data))

 el   (cdr (assoc 16 data))

 ezz  (cdr (assoc 17 data))

 fl   (cdr (assoc 18 data))

 fzz  (cdr (assoc 19 data))

 gl   (cdr (assoc 20 data))

 gzz  (cdr (assoc 21 data))

 hl   (cdr (assoc 22 data))

 hzz  (cdr (assoc 23 data))

 ttt  (cdr (assoc 24 data))

    )

    (if (/= ttt "")

      (progn

(write-file "d:\\横断面数据.txt" ttt)

(write-file "d:\\横断面数据.txt" "\n")

      )

    )

    (if (not ttt)

      (

       (write-file "d:\\横断面数据.txt" "桩号缺失!\n")

      )

    )

    (setq num (+ num 1))

    (write-file "d:\\横断面数据.txt" (rtos num 2 0))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos bl 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos bzz 2 4))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos cl 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos czz 2 4))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos dl 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos dzz 2 4))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos el 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos ezz 2 4))

    (write-file "d:\\横断面数据.txt" "\n")

    (setq num (+ num 1))

    (write-file "d:\\横断面数据.txt" (rtos num 2 0))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos fl 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos fzz 2 4))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos gl 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos gzz 2 4))

    (write-file "d:\\横断面数据.txt" "      ")

    (write-file "d:\\横断面数据.txt" (rtos hl 2 4))

    (write-file "d:\\横断面数据.txt" "   ")

    (write-file "d:\\横断面数据.txt" (rtos hzz 2 4))

    (write-file "d:\\横断面数据.txt" "\n\n")

  )

)



(defun write-file (filename content)

  (setq stream (open filename "a")

  )

  (princ content stream)

  (close stream)

)

;;复制到这一行为止

把上面源代码存入写字板内,另存成XX.LSP,

CAD-->工具-->加载应用程序-->选XX.LSP-->确定。

命令行输入hdm开始执行;看命令行提示。最后在D:\横断面数据.tx内输出结果如下样式,我CAD里的图形没有Z坐标高差所以高差都为0:


追问

数据组数是指每侧有几个点,这个是根据测量的数据变化的,不是固定值。我发消息给你了,

追答

看到了,详情慢慢联系修改吧。

本回答被提问者采纳
第2个回答  推荐于2017-09-10
CAD中高程点一般有两种方式存在,一是文本方式(文本高是高程),二是块的方式(块中属性是高程)
提取横断面数据也就是提取横断面上的高程点的起点距与高程,需采用编程解决
编程思路如下:
1 在断面位置画一根辅助线,
2 搜索辅助线两侧一定范围内的高程点
3 将高程点的高程投射到辅助线上,得出起点距(也就是该点到辅助线端点的距离)与高程
4 将得到的起点距与高程输出到某个文件保存,比如TXT文件,或者EXCEL文件
第3个回答  2019-06-10
这个问题成处理方法是需要利用 CAD插件可以轻松处理,10秒批量完成数百个断面, 通测工作室 开发有专业的插件处理
第4个回答  2022-02-07
根据高程点 提取断面数据 纬地 eicad cass 鸿业等
相似回答