Ответ 1
База исходные коды WorldWindJava для github, класс MilStd2525TacticalSymbol отменяет метод с именем layoutDynamicModifiers. В этом методе вы можете видеть, что для DIRECTION_OF_MOVEMENT вызывается только addLine (...) (этот метод реализован в супер-calss 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);
}
}
}
В суперклассе 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 перед линией рисования (вы можете изменить цвет в черный цвет после направления движения).