在NASA WorldWind中,可以为Milstd-2525符号分配“行进方向”速度领导者。但是,此速度领先者是黑色的,因此很难在深蓝色的海洋背景下看清。我尝试过更改TacticalSymbolAttributes中的内部颜色 Material ,但这似乎没有效果(对任何事物)。不幸的是,文档没有提供有关如何更改线条颜色的任何线索。

是否可以在Worldwind中更改Milstd-2525战术符号的速度领导线的颜色,如果可以,如何更改?

最佳答案

source codes of WorldWindJava on github类是 MilStd2525TacticalSymbol 的基础,它覆盖了名为layoutDynamicModifiers的方法。在此方法中,您可以看到对于DIRECTION_OF_MOVEMENT仅最终会调用addLine(...)(此方法在父类(super class)AbstractTacticalSymbol中实现,该类仅在名为currentLines的列表中添加一行),并且只能设置SPEED_LEADER_SCALE,而无法设置移动方向的其他属性在外部进行更改。

@Override
protected void layoutDynamicModifiers(DrawContext dc, AVList modifiers, OrderedSymbol osym)
{
    this.currentLines.clear();

    if (!this.isShowGraphicModifiers())
        return;

    // Direction of Movement indicator. Placed either at the center of the icon or at the bottom of the symbol
    // layout.
    Object o = this.getModifier(SymbologyConstants.DIRECTION_OF_MOVEMENT);
    if (o != null && o instanceof Angle)
    {
        // The length of the direction of movement line is equal to the height of the symbol frame. See
        // MIL-STD-2525C section 5.3.4.1.c, page 33.
        double length = this.iconRect.getHeight();
        Object d = this.getModifier(SymbologyConstants.SPEED_LEADER_SCALE);
        if (d != null && d instanceof Number)
            length *= ((Number) d).doubleValue();

        if (this.useGroundHeadingIndicator)
        {
            List<? extends Point2D> points = MilStd2525Util.computeGroundHeadingIndicatorPoints(dc, osym.placePoint,
                (Angle) o, length, this.iconRect.getHeight());
            this.addLine(dc, Offset.BOTTOM_CENTER, points, LAYOUT_RELATIVE, points.size() - 1, osym);
        }
        else
        {
            List<? extends Point2D> points = MilStd2525Util.computeCenterHeadingIndicatorPoints(dc,
                osym.placePoint, (Angle) o, length);
            this.addLine(dc, Offset.CENTER, points, null, 0, osym);
        }
    }
}

在父类(super class) AbstractTacticalSymbol 中,字段currentLines(包含移动方向的线)用于名为drawLines(...)的方法中,该方法将添加的行绘制到所提及的列表(类的行2366)中。在2364行中,您可以看到颜色设置为黑色。
gl.glColor4f(0f, 0f, 0f, opacity.floatValue());

现在,我建议您扩展MilStd2525TacticalSymbol并执行以下操作:
  • 扩展了类AbstractTacticalSymbol.Line并定义了一些字段来存储颜色。
  • 覆盖方法layoutDynamicModifiers并获取您自己的键(例如DIRECTION_OF_MOVEMENT_COLOR)以从修饰符获取颜色,并使用此给定的颜色创建自己的行并将其添加到currentLines列表中(您可以为此目的覆盖方法addLine)。
  • 最终会覆盖drawLines以在自己的Line类中使用存储颜色,并在绘制线之前更改gl的颜色(绘制运动方向后,可以将颜色更改回黑色)。
  • 09-27 18:15