2017-04-17 5 views
10

Dans la NASA WorldWind, on peut assigner un leader de vitesse "direction de déplacement" aux symboles Milstd-2525. Cependant, ce chef de vitesse est noir, ce qui rend très difficile à voir sur le fond océanique bleu foncé. J'ai essayé de changer le matériau de couleur interne dans le TacticalSymbolAttributes, mais cela ne semble pas avoir d'effet (sur quoi que ce soit). La documentation ne fournit malheureusement aucune indication sur la façon de changer la couleur de la ligne.NASA Worldwind: Comment changer la couleur du leader de vitesse pour les symboles tactiques?

Est-il possible de changer la couleur de la ligne de repère de vitesse du symbole tactique Milstd-2525 dans Worldwind, et si oui, comment?

+0

Quelle version de WorldWind utilisez-vous? c'est-à-dire 1.X, 2.0, 2.0-986, 2.1 – Igor

+0

2.1.0. J'ai essentiellement suivi la branche master git. – stix

Répondre

5

La base de source codes of WorldWindJava on github, classe MilStd2525TacticalSymbol remplace la méthode nommée layoutDynamicModifiers. Dans cette méthode vous pouvez voir que pour DIRECTION_OF_MOVEMENT seulement éventuellement addLine (...) est appelé (Cette méthode est implémentée dans le super calss AbstractTacticalSymbol qui ajoute seulement une ligne à une liste nommée currentLines) et seulement SPEED_LEADER_SCALE pourrait être défini et d'autres propriétés pour la direction du mouvement ne pouvait pas être modifiée à l'extérieur.

@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); 
     } 
    } 
} 

dans la super classe AbstractTacticalSymbol, currentLines de terrain (qui contient la ligne de direction de déplacement) est utilisé dans une méthode nommée drawLines (...) qui tire ajouté des lignes de la liste mentionnée (ligne 2366 de classe). Dans la ligne 2364, vous pouvez voir que la couleur est définie sur noir.

gl.glColor4f(0f, 0f, 0f, opacity.floatValue()); 

Maintenant, je vous suggère d'étendre MilStd2525TacticalSymbol et faire suivant:

  1. étendre AbstractTacticalSymbol.Line de classe et de définir des champs pour stocker la couleur. Redéfinissez la méthode layoutDynamicModifiers et obtenez votre propre clé (par exemple DIRECTION_OF_MOVEMENT_COLOR) pour obtenir la couleur des modificateurs et utilisez cette couleur pour créer votre propre ligne et ajoutez-la à la liste currentLines (vous pouvez surcharger la méthode addLine à cette fin).
  2. Remplacez finalement drawLines pour utiliser la couleur du magasin dans votre propre classe Line et changez la couleur de gl avant la ligne de dessin (vous pouvez changer la couleur en noir lorsque la direction du mouvement est dessinée).
1

Je cours un Worldwind plus tôt, mais essayez de jeter un oeil à la méthode AbstractTacticalSymbol.java -> drawLines().

Par défaut, le glColor est noir avant de tracer les lignes.