surfer 8 scripter 学习笔记(5)简单实战VB与Surfer


感觉认识实例:


一、Application

       属性

       Caption  主窗体标题

       WindowState   主窗体状态(srfWindowStateMaximized ,  SrfWindowStateMinimized,即最大化最小等)

       Documents      所拥的Document集合

       ShowStatusBar  是否显示状态栏

       ShowToolBars   是否显示工具栏

       Visible                 是否显示窗体(默认不显示)

       ActiveDocument     当前活动Document对象

        

        方法:

        GridConvert       各种Grid文件的转换

        GridSplineSmooth     插值时平滑网格数据

         Quit                              退出Surfer


二、Documents

        派生两对象:PlotDocument  和  WksDocument

        PlotDocument含形状对象:ShapeCollection集合

         ShapeCollection集合有:Rectangle,PloyLine,ContourMap,BaseMap,Axes,ScaleBars,

                                                       Symbol(符号),Text(文本)

         创建新文档用Add方法。

 

         主要属性:

          Saved       最近修改是否保存

          Type          Document类型(srfDocPlot,srfDocWks,srfDocGrid  三种类型)


          常用方法:

           Activate            使Document窗体为当前窗体

           Close              关闭

           Save                 保存(指定一文件)

           SaveAs            另存为


先来一个简单操作的例子。

下面在VB中操作surfer

在VB中引用surfer 8 Type library  

然后按下建立,可以看到VB就可以操作surfer了。


command1是调用surfer ,    command2是关闭

由上例可以看出,实际上和操作excel是一样的。

比如:用VB打开了surfer,退出VB,surfer并不关闭。原因是VB没有向surfer发出关闭命令。





三:Shapes Collection

        绘图集合,这是操作的重点。

       属性:

       Rotation     设置或返回旋转角度

       Selected      是否选中


        方法:

        Delete     删除

        Deselect    取消选中

        Select         选中




四、 Selection Collection

         大多命令都是对选择中的对象有效。所以选中才有更效地进行操作。

        注意:从选中集合中删除对象,只表明对象不在选中之列,实际还在存在 的。




五: 名字参数


         Surfer支持位置参数,就是平时的参数,同时它还支持名字参数,即命名参数。

         比如:  msgbox(Prompt:="提示框来了", Button:=vbOKOnly)

         命名参数的好处就是顺序可以乱,程序自动确定相应的参数值。对于一个函数或方法有很多参数进,好处是显而晚风的。




第一个实例只有surfer的壳子,没有内容,正如excel打开后,没有book和sheet一样。

需要添加一些文档、图形及表之类的。



六、开始的过程一般这样:

        dim srf  as Object

        set  srf=createobject("surfer.Application") ‘即dim srf as new surfer.application


       主程序创建出来后,就要加入东西:

       dim doc  as object   '定义绘图对象

      set   doc=srf.documents.add(1)  '加入一个对象,这个1表示srfDocPlot 即绘图文档


       生成一个surfer绘图窗体:

       dim winPlot  as object

       Set  winPlot=doc.windows(1)     '设置一个新绘图窗体。


现在加一个绘图窗体。


注意:在vb中都是用I开头的接口,比如文档对象:IDocument。所以找不到对象时,试试I开头的。或者F2从对象浏览器中查找

           




七、操作图形

       VB并不能把surfer”拿进“来进行操作,它只是控制它。

       常用的图形方法,就是用VB控制surfer,让surfer来做它专精的事,最后的结果保存为图片。然后VB再把这个图片入到VB程序中来。

      

       任意原始数据在处理前都必须进行网格化,形成均匀的网格文件,为下一步的绘图做好准备。


       网格化方法是Application的方法,它有50多个参数,吓!是这么多!如果用位置参数固定位置写的话,得累死人。

        所以这里用命名参数法,特定指定同个就行了,其余采用默认值。命名参数的好处就体现出现了。


       这里采用surfer8中samples例子文件列中DEMOGRID.dat数据来网格化。

        

Option Explicit
Dim srf As New Surfer.Application '类似excel

Private Sub Command1_Click()
    Dim doc     As Surfer.IDocument '类似book
    Dim winPlot As Surfer.IWindow   '类似sheet

    srf.Caption = "白话魔法师"  '标题
    srf.Visible = True
    Set doc = srf.Documents.Add(srfDocPlot)
    Set winPlot = doc.Windows(srfWinPlot)
    '网格化一个dat文件
    srf.GridData DataFile:=App.Path & "\DEMOGRID.Dat", xCol:=1, yCol:=2, zCol:=3, algorithm:=srfKriging, showreport:=False, _
            outgrid:=App.Path & "\DEMOGRID.grd"
End Sub

        DataFile是数据源,即Dat文件所在

        outgrid是目标所在,即保存位置

      结果:在工程保存目录 中存放网格文件。


      回顾一下对象模型,对于图形的操作,理清创建对象的先后


      Application->Documents->PlotDocument->Shapes->mapFrame->Overlays->这才到了我们的各种图


      添加图形时返回的是mapFrame对象,含坐标系及相应的通用属性。

      比如: set mapFrame=shapes.addContourMap("demogrid.grid")

      它并不是等值线本身,因为它包含坐标轴等,要取得等值线就得在这个集合中取第一项。

     如:  Set contourMap=MapFrame.overLays(1)


再看一个例子:


     

Option Explicit
Dim srf As New Surfer.Application '类似excel

Private Sub Command1_Click()
    Dim doc     As Surfer.IDocument '类似book
    Dim winPlot As Surfer.IWindow   '类似sheet

    srf.Visible = True          '设置为真便于我们查看后面程序的情况,正式发布时为False
    Set doc = srf.Documents.Add(srfDocPlot)
    Set winPlot = doc.Windows(srfWinPlot)
    '网格化一个dat文件
    srf.GridData DataFile:=App.Path & "\DEMOGRID.Dat", xCol:=1, yCol:=2, zCol:=3, algorithm:=srfKriging, showreport:=False, _
            outgrid:=App.Path & "\DEMOGRID.grd"
    Dim Shapes   As Surfer.IShapes
    Dim mapFrame As Surfer.IMapFrame '各种图形总称,不是wireFrame

    
    Set Shapes = doc.Shapes
    Set mapFrame = Shapes.AddSurface(App.Path & "\DEMOGRID.grd")  '加入表面图(曲面图)
    Set mapFrame = Shapes.AddContourMap(App.Path & "\DEMOGRID.grd") '加入等值线
    
    
    '这样doc中的shapes集合中就有两个图了,下面进行叠加
    doc.Selection.DeselectAll '先清除全部所选择
    Shapes(1).Selected = True  '第一个图选中(曲面图)
    Shapes(2).Selected = True  '第二个图选中(等值线图)
    doc.Selection.OverlayMaps  '图层叠加
    

    If Dir(App.Path & "1.jpg") <> "" Then '检测是否有文件,有就删除它
        Kill App.Path & "1.jpg"
    End If
    doc.Export App.Path & "1.jpg"    '输出图片
    Picture1.Picture = LoadPicture(App.Path & "1.jpg") '加载到VB中
    
'    srf.Documents.CloseAll srfSaveChangesNo   '不提示存盘进行关闭
'    srf.Quit
End Sub









  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值