爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7007|回复: 4

[vbscript] 通过脚本摆放颜色标尺

[复制链接]

新浪微博达人勋

发表于 2015-10-27 11:50:29 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 holz 于 2015-10-27 11:53 编辑

颜色标尺的摆放位置,手工操作当然只管用鼠标拖就是了,所见即所得么。

要通过 Automation 接口来摆放标尺,就要关注几个参数:
1、参照物,可以是页面边界、拐角、中心甚至是任意一个点,也可以是文档中的任一个对象。本例用标尺对应的原图作为参照。
2、XY坐标,在 Surfer 中,要换为 Left 和 Top 参数。
3、旋转角度,因为定位标尺可能要用到标尺本身的宽高值,而对象旋转后其本身的宽高值会改变,所以必须首先按要求设置标尺的旋转。

  1. '======================================================================
  2. '功能:演示颜色刻度尺的定位,通过对话框选定参数,
  3. '      可以将颜色刻度尺放到原图的方位上。
  4. '环境:在 Scripter 5 + Surfer 13 下测试通过。
  5. '作者:Holz (holz@21cn.com)
  6. '日期:2015年10月27日
  7. '免责:有写注释的习惯。一些注释因为在编写代码过程懒得切换中文输入法,
  8. '      直接用烂到爆的英文写了,不喜勿喷。
  9. '      Use on your own risk!
  10. '======================================================================
  11. Sub Main
  12.         Dim SurferApp As Object
  13.         ' Run Surfer and get the handle
  14.         Set SurferApp=CreateObject("Surfer.Application")
  15.         ' Make Surfer visible to check the demo on the fly
  16.         SurferApp.Visible=True

  17.         Dim Plot As Object
  18.         ' Add an empty Plot window
  19.         Set Plot=SurferApp.Documents.Add

  20.         Dim MapFrame As Object
  21.         ' Use the sample file for demo
  22.         Set MapFrame=Plot.Shapes.AddContourMap(SurferApp.Path+"\Samples\demogrid.grd")
  23.         Dim ContourLayer As Object
  24.         Set ContourLayer=MapFrame.Overlays(1)
  25.         ' Set FillContours option to True then you can treat the fill
  26.         ContourLayer.FillContours=True

  27.         ' The default level method in Surfer 13 is Advanced
  28.         ' i.e. LevelMethod = srfConLevelMethodAdvanced
  29.         ' set to srfConLevelMethodLogarithmic to use logarithmic scaling
  30.         ContourLayer.LevelMethod=SrfConLevelMethodSimple

  31.         ' Use LoadFile(FileName) to load a Specified CLR or LVL file.
  32.         ContourLayer.FillForegroundColorMap.LoadPreset ("Rainbow")

  33.         ' Show the Color scale
  34.         ContourLayer.ShowColorScale=True
  35.         Dim ConScale As Object
  36.         Set ConScale=ContourLayer.ColorScale

  37.         Dim ScalePos(7) As String
  38.         ScalePos(0)="东"
  39.         ScalePos(1)="北东"
  40.         ScalePos(2)="北"
  41.         ScalePos(3)="北西"
  42.         ScalePos(4)="西"
  43.         ScalePos(5)="南西"
  44.         ScalePos(6)="南"
  45.         ScalePos(7)="南东"
  46.         While(1)
  47.                 Begin Dialog UserDialog 400,126,"设置颜色标尺参数" ' %GRID:10,7,1,1
  48.                         ListBox 10,7,160,112,ScalePos(),.ListBox1
  49.                         Text 200,7,160,14,"标尺与原图的距离:",.Text1
  50.                         TextBox 200,28,110,14,.TextBox1
  51.                         OKButton 190,91,90,21
  52.                         CancelButton 310,91,70,21
  53.                 End Dialog
  54.                 Dim dlg As UserDialog
  55.                 dlg.textbox1="0.985"
  56.                 dlg.listbox1=0
  57.                 ' User click Cancel to exit the while loop and end this script
  58.                 If Dialog(dlg)=0 Then Exit While

  59.                 Dim OffPos As Single
  60.                 OffPos=Val(dlg.textbox1)
  61.                 ' Position the color scale, 8 direction
  62.                 PosScale(MapFrame, ConScale, ScalePos(dlg.listbox1),OffPos)
  63.         Wend
  64. End Sub

  65. Sub PosScale(MF As Object, CS As Object, O As String, A As Single)
  66.         Dim x0 As Double, y0 As Double
  67.         Dim h0 As Double, w0 As Double
  68.         Dim h1 As Double, w1 As Double

  69.         Debug.Print "将把颜色标尺放到原图的" & O & "向。 自行转到 Surfer 主窗口看效果。"

  70.         Select Case O
  71.                 Case "东" 'E
  72.                         CS.Rotation=0
  73.                         x0=MF.Left
  74.                         y0=MF.Top
  75.                         h0=MF.Height
  76.                         w0=MF.Width
  77.                         h1=CS.Height
  78.                         w1=CS.Width
  79.                         CS.Left=x0+w0+A
  80.                         CS.Top=y0-0.5*(h0-h1)
  81.                 Case "北东" 'NE
  82.                         CS.Rotation=45
  83.                         x0=MF.Left
  84.                         y0=MF.Top
  85.                         h0=MF.Height
  86.                         w0=MF.Width
  87.                         h1=CS.Height
  88.                         w1=CS.Width
  89.                         CS.Left=x0+w0-0.5*w1+A
  90.                         CS.Top=y0+0.5*h1+A
  91.                 Case "北" 'N
  92.                         CS.Rotation=90
  93.                         x0=MF.Left
  94.                         y0=MF.Top
  95.                         h0=MF.Height
  96.                         w0=MF.Width
  97.                         h1=CS.Height
  98.                         w1=CS.Width
  99.                         CS.Left=x0+0.5*(w0-w1)
  100.                         CS.Top=y0+2.0*A
  101.                 Case "北西" 'NW
  102.                         CS.Rotation=135
  103.                         x0=MF.Left
  104.                         y0=MF.Top
  105.                         h0=MF.Height
  106.                         w0=MF.Width
  107.                         h1=CS.Height
  108.                         w1=CS.Width
  109.                         CS.Left=x0-0.5*w1-A
  110.                         CS.Top=y0+0.5*h1+A
  111.                 Case "西" 'W
  112.                         CS.Rotation=0
  113.                         x0=MF.Left
  114.                         y0=MF.Top
  115.                         h0=MF.Height
  116.                         w0=MF.Width
  117.                         h1=CS.Height
  118.                         w1=CS.Width
  119.                         CS.Left=x0-w1-A
  120.                         CS.Top=y0-0.5*(h0-h1)
  121.                 Case "南西" 'SW
  122.                         CS.Rotation=225
  123.                         x0=MF.Left
  124.                         y0=MF.Top
  125.                         h0=MF.Height
  126.                         w0=MF.Width
  127.                         h1=CS.Height
  128.                         w1=CS.Width
  129.                         CS.Left=x0-0.5*w1-A
  130.                         CS.Top=y0-h0+0.5*h1-A
  131.                 Case "南" 'S
  132.                         CS.Rotation=90
  133.                         x0=MF.Left
  134.                         y0=MF.Top
  135.                         h0=MF.Height
  136.                         w0=MF.Width
  137.                         h1=CS.Height
  138.                         w1=CS.Width
  139.                         CS.Left=x0+0.5*(w0-w1)
  140.                         CS.Top=y0-h0-A
  141.                 Case "南东" 'SE
  142.                         CS.Rotation=315
  143.                         x0=MF.Left
  144.                         y0=MF.Top
  145.                         h0=MF.Height
  146.                         w0=MF.Width
  147.                         h1=CS.Height
  148.                         w1=CS.Width
  149.                         CS.Left=x0+w0-0.5*w1+A
  150.                         CS.Top=y0-h0+0.5*h1-A
  151.         End Select
  152. End Sub


评分

参与人数 3金钱 +25 贡献 +4 收起 理由
Rainch + 5 赞一个!
chengxf + 10 + 2 赞一个!
mofangbao + 10 + 2

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-28 08:43:37 | 显示全部楼层
学习、学习,再学习                                   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-29 20:56:24 | 显示全部楼层
习、学习,再学习  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-10 12:32:09 | 显示全部楼层
学习了~~路过~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-28 14:56:33 | 显示全部楼层
学习了····努力中····
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表