在 github 上的 WorldWindJava 源代码 基础上,MilStd2525TacticalSymbol
类重写了名为 layoutDynamicModifiers
的方法。在这个方法中,你可以看到只有对于 DIRECTION_OF_MOVEMENT
最终调用了 addLine(...)
方法(该方法是在超类 AbstractTacticalSymbol
中实现的,它仅将一行添加到名为 currentLines
的列表中),并且只有可以设置 SPEED_LEADER_SCALE
和其他方向属性无法在外部更改。
@Override
protected void layoutDynamicModifiers(DrawContext dc, AVList modifiers, OrderedSymbol osym)
{
this.currentLines.clear();
if (!this.isShowGraphicModifiers())
return;
Object o = this.getModifier(SymbologyConstants.DIRECTION_OF_MOVEMENT);
if (o != null && o instanceof Angle)
{
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);
}
}
}
在超类
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
的颜色(您可以在绘制移动方向后将颜色改回黑色)。