被隐藏的自动化方法 SetNodes
用自动化功能绘制填充等值线图或者影像图的时候,总是会遇到使用自定义的色谱。
以往是把等级取出来,逐级设置,非常繁琐。
或者把自定义的色谱写入到一个.clr
色谱文件中,再用 ColorMap.LoadFile
方法把该色谱文件调入。这个方法不但繁琐,硬盘上还多出不必要的文件。
偶尔在翻阅官方脚本的时候,发现 ColorMap 对象居然有一个 SetNodes 方法,而这个方法居然在帮助文件里面一点痕迹都没有。
但用起来真的又方便又简洁,比如官方脚本的例子:
ContourLayer.LevelMethod = SrfConLevelMethodAdvanced
ContourLayer.FillContours = True
'设置用来创建定制色谱的节点位置和颜色。
'节点位置值从 0.0 (最小值) 到 1.0 (最大值)。
Dim Positions(3) As Double
Positions(0)=0.0
Positions(1)=0.3
Positions(2)=0.6
Positions(3)=1.0
Dim Colors(3) As Long
Colors(0)=srfColorOrange
Colors(1)=srfColorCyan
Colors(2)=srfColorGreen
Colors(3)=srfColorBlack
ContourLayer.FillForegroundColorMap.SetNodes(Positions:=Positions, Colors:=Colors)
ContourLayer.ApplyFillToLevels(1, 1, 0)
再来,假设要绘制的等值线图,等级从负到正,现在要求 0 值区域用白色表示,其他红色渐变,无需等值线无需标注,看看脚本怎么写:
With ContourLayer
'先将等级方法设置为简单。
.LevelMethod = SrfConLevelMethodSimple
'等值线光滑中等
.SmoothContours = srfConSmoothMed
'主等值线线条无需显示
.MajorLine.Style = "Invisible"
'次等值线线条也无需显示
.MinorLine.Style = "Invisible"
'不要主等值线标注
.ShowMajorLabels = False
'也不要次等值线标注
.ShowMinorLabels = False
'要设置等值线填充,第一步开启填充
.FillContours = True
'允许图层透明
.FillTransparent = True
'把色谱分三段,中间是 0 值的节点位置
Dim pos(2) As Double
pos(0) = 0.0
pos(1) = .FillForegroundColorMap.DatToPos(0)
pos(2) = 1.0
Dim colors(2) As Long
colors(0) = srfColorRed
colors(1) = srfColorWhite
colors(2) = srfColorRed
'第二步载入或设置色谱。
'Surfer 13 帮助文件里居然没有 SetNodes
.FillForegroundColorMap.SetNodes(Positions:=pos, colors:=colors)
'第三步应用填充设置,不按部就班就得不到结果。
.ApplyFillToLevels(1, 1, 0)
End With
有了 SetNodes 方法,自定义色谱确实方便多了。
为什么说被隐藏了呢?因为这是 Surfer 8 时代的方法,之后就消失在帮助文件里面。