回 帖 发 新 帖 刷新版面

主题:[讨论]surfer做等值线问题,急急急!!!

用surfer做等值线,然后用VB来显示,功能已可以实现,可是要怎样才能让图形占满整个PictureBox呢,而不是只显示很小的一块? 
  大家帮帮忙,急急急...

回复列表 (共5个回复)

沙发

用循环的办法找出横坐标的最大值和最小值,在找出纵坐标的最大值和最小值。
然后 Picture1.Scale (横坐标最小值,纵坐标最大值)-(横坐标最大值,纵坐标最小值)

后面在里面坐图的位置,不用转换,直接使用原来的指就可以了。

板凳

XY坐标的值是可知的,X最大值为14040,最小值为0,Y最大值为8880,最小为0,下面是我TXT文件的内容,你帮我看看问题出在哪?还是显示小图!

0,0,0
14040,8880,0
14040,0,0
0,8880,0
9840,2730,3
10710,5265,3
9330,4620,5
9270,5625,6
9120,7335,7
8175,4860,4
7590,4260,3
7380,7620,4
6360,6990,4
4920,6000,3
4875,4980,3
3360,5580,4
5970,4260,5
6480,2580,2
6210,1740,2
6585,1170,3
2985,3060,4
2280,3600,3
2325,4395,4
3690,4140,12

3 楼

Private Sub Form_Load()
    Dim 数据组数 As Integer                 '从此向下6行,如果在其他过程中有可能使用
    Dim 数据() As Integer                   '的话,就把它们移到“通用”的“声明”。
    Dim 横轴最大值 As Integer
    Dim 横轴最小值 As Integer
    Dim 纵轴最大数 As Integer
    Dim 纵轴最小数 As Integer
    
    Open "数据.txt" For Input As #1
    Do
        数据组数 = InputBox("数据一共有多少组?")
        If 数据组数 < 1 Or 数据组数 > 60000 Then      '这个条件,你自己看着设置
            MsgBox "数据组数太离谱了!重新输入。"
        Else
            Exit Do
        End If
    Loop
    ReDim 数据(2, 数据组数)
    For i = 1 To 数据组数
        Input #1, 数据(0, i), 数据(1, i), 数据(2, i)
        If i = 1 Then
            横轴最大值 = 数据(0, i)
            横轴最小值 = 数据(0, i)
            纵轴最大数 = 数据(1, i)
            纵轴最小数 = 数据(1, i)
        Else
            If 横轴最大值 < 数据(0, i) Then 横轴最大值 = 数据(0, i)
            If 横轴最小值 > 数据(0, i) Then 横轴最小值 = 数据(0, i)
            If 纵轴最大数 < 数据(1, i) Then 纵轴最大数 = 数据(1, i)
            If 纵轴最小数 > 数据(1, i) Then 纵轴最小数 = 数据(1, i)
        End If
    Next i
    Me.Move 0, 0, Screen.Width, Screen.Height
    Picture1.Move 50, 50, Me.Width - 100, Me.Height - 1000
    Picture1.Scale (横轴最小值, 纵轴最大值)-(横轴最大值, 纵轴最小值)
End Sub

4 楼

这是操作surfer吗,以下是我的代码,帮忙看看
Dim strInFile, strGridFile, strOutFile As String

  On Error Resume Next
  
  With dlgcommon1
    .DialogTitle = "打开数据文件"
    .Flags = 0
    .CancelError = True
    .FileName = ""
    .Filter = "数据文件 (*.txt;*.dat;*.xls)|*.txt;*.dat;*.xls"
    .ShowOpen
    If Len(.FileName) = 0 Then   '如果没有文件名则退出
        Exit Sub
    End If
    strInFile = .FileName   '获取选中的文件名
  End With

  strGridFile = Left(strInFile, Val(InStrRev(strInFile, ".")) - 1) + ".grd"   '把扩展名改为.grd
  Set objSurfer = CreateObject("Surfer.Application")   '创建Surfer对象
  objSurfer.Visible = False   'surfer软件本身不在前台显示
  

  objSurfer.GridData DataFile:=strInFile, Algorithm:=srfKriging, _
  DupMethod:=srfDupNone, ShowReport:=False, OutGrid:=strGridFile   '把离散的数据文件转换为格网文件
  Set objPlot = objSurfer.Documents.Add(srfDocPlot)   '创建srf文档
  Set objMapFrame = objPlot.Shapes.AddContourMap(strGridFile)   '创建等值线图并添加到文档
  objPlot.Export FileName:=Left(strInFile, Val(InStrRev(strInFile, ".")) - 1) + ".bmp"   '输出bmp
  Picture1.Picture = LoadPicture(Left(strInFile, Val(InStrRev(strInFile, ".")) - 1) + ".bmp")   '显示bmp

5 楼

surfer是什么,我不知道。
我只知道你的数据在txt文件里,在一个图片框里可以使用我的代码做些事情。

我来回复

您尚未登录,请登录后再回复。点此登录或注册