最近想批量生成测线的多层纵断面,可是当前的cad vba程序只能生成单测线的多层纵断面,于是,在网络上找现成的工具,比如cass和civil3d,发现它们不能满足要求(也有可能是不会用),不但如此,还把autocad给搞崩了。将所有autocad的程序全部卸载删除,重新安装才好。最终,还是决定自己写。
遇到主要的问题是无法自动从surfer的grid中获取测线某层埋深值。之前程序的这一步是手动的,用到的工具是Surfer里的Residuals命令窗口,见下图。
Surfer的Residuals命令
bing搜索的解决方案都是上面这个手动操作方法。然后,用deepseek搜索一下,看是否来点灵感。扎心的是最核心代码让自己补充。

deepseek搜索结果
剩下最后一个方法:看Surfer说明书。用关键字Residuals搜索,还真找到解决办法。
Sub Main
Dim SurferApp As Object
Set SurferApp = CreateObject("Surfer.Application")
SurferApp.Visible = True
'Specifies the grid and data files to use
GridFile = SurferApp.Path+"\Samples\demogrid.grd"
DataFile = SurferApp.Path+"\Samples\demogrid.dat"

'Uses Grid Residuals and stores the residuals in Column D
Set Wks = SurferApp.GridResiduals(InGrid:=GridFile, DataFile:=DataFile, _
xCol:=1, yCol:=2, zCol:=3, ResidCol:=4)
'Saves the worksheet with the residuals
Wks.SaveAs(FileName:="C:\temp\GridResiduals.dat")
'Closes the worksheet
Wks.Close
End Sub
这段程序的意思就是,将上面那个手动操作改成自动执行程序。
参考文献
Surfer20帮助手册