被隐藏的自动化方法 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 时代的方法,之后就消失在帮助文件里面。

results matching ""

    No results matching ""