This guide uses the APP-6A symbology to describe the military symbology functionality. The functionality available for MIL-STD 2525b is exactly the same.

You just need to substitute APP6A with MS2525b in all class names and method names, and app6a with milstd2525b in all package names.

In addition, the LuciadLightspeed support for APP-6B, APP-6C, APP-6D, MIL-STD 2525c and MIL-STD 2525d standards relies on the same APIs as its support for the APP-6A and MIL-STD 2525b standards. This means that you can use the APP-6A API in the same way for APP-6B, APP-6C and APP-6D symbology, and that you can use the MIL-STD 2525b API for MIL-STD 2525c and MIL-STD 2525d symbology.

To define military symbols according to the MIL-STD 2525b and APP-6A standards, you must specify the symbol’s properties. These properties consist of the symbol ID, general information about the symbol and what it depicts, and its geometrical properties.

Defining the symbol ID and general symbol properties

The core interface to represent an APP-6A symbol is ILcdAPP6ACoded. This interface defines the methods to access the Symbol ID Code (SIDC), as well as the text modifiers associated with the symbol:

  • The SIDC is an identifier that provides the information necessary to identify and display a symbol. Each symbol defined in the MIL-STD 2525b and APP-6A standard has a unique symbol ID code. For MIL-STD 2525b, MIL-STD 2525c, APP-6A, and APP-6B this identifier is a 15-character alphanumeric code. For APP-6C, APP-6D and MIL-STD 2525d, the identifier is a 20-digit or 30-digit numeric code.

  • Text modifiers are a fixed set of features that further designate the meaning of a symbol. Table Table 1, “List of common text modifiers for APP-6A and MIL-STD 2525b” shows an overview of the common modifiers available for APP-6A and MIL-STD 2525b, and the corresponding field names in ILcdAPP6ACoded and ILcdMS2525bCoded. Additional text modifiers are documented in the API reference documentation for ILcdAPP6ACoded and ILcdMS2525bCoded.

Table 1. List of common text modifiers for APP-6A and MIL-STD 2525b
APP-6A / MIL-STD 2525b modifier Field in ILcdAPP6ACoded / ILcdMS2525bCoded

Quantity of Equipment / Quantity

sQuantityOfEquipment / sQuantity

Reinforced or Reduced

sReinforcedOrReduced

Staff Comments

sStaffComments

Additional Information

sAdditionalInformation

Evaluation Rating

sEvaluationRating

Combat Effectiveness

sCombatEffectiveness

Signature Equipment

sSignatureEquipment

Hostile

sHostile

IFF/SIF

sIFFSIF

Unique Designation

sUniqueDesignation

Type of Equipment / Type

sTypeOfEquipment / sType

Date/Time Group

sDateTimeGroup

Altitude/Depth

sAltitudeDepth

Location

sLocationLabel

Speed

sSpeedLabel

Special C2 Headquarters

sSpecialHeadquarters

Effective time

sEffectiveTime

Direction of movement

sMovementDirection

Title number of higher echelon command

sHigherFormation

The interface ILcdAPP6ACoded has an editable extension, ILcdEditableAPP6ACoded, which is used to set the symbol ID code or a text modifier. Note that not all text modifiers are applicable to each symbol: both standards define different symbol groups, which have a separate set of applicable text modifiers. More information about these modifiers can be found in the standard itself.

Both the APP-6A and MIL-STD 2525b domain objects implement the ILcdDataObject interface. You can find the data model and properties for these interface in the TLcdAPP6ADataTypes and TLcdMS2525bDataTypes respectively. These classes feature a static data property that you can use to retrieve information about a domain object at runtime. To retrieve the information, use the getValue(TLcdDataProperty aDataProperty) method. You can also retrieve all of the properties in table Table 1, “List of common text modifiers for APP-6A and MIL-STD 2525b” using the generic ILcdDataObject interface. Please refer to the API reference for more information.

Defining the geometric properties of a symbol

The geometric properties of a symbol are defined in the interface ILcdAPP6AShape. The following properties are included:

  • Knowledge of whether the symbol is a line or not.

  • An associated ILcdPointList object that defines its geometry.

  • A buffer width for times when the symbol is represented as a buffer.

This interface also has an editable extension, ILcdEditableAPP6AShape, which allows you to change the buffer width. Note that this value is only taken into account for symbols that are represented as a buffer.

Defining a symbol with TLcdEditableAPP6AObject

Program: Construction of models with APP-6A and APP-6C objects
// Create a model with a model reference and model descriptor.
// To indicate that a model contains APP-6A objects, the class
// TLcdAPP6AModelDescriptor can be used as model descriptor.
TLcdVectorModel app6AModel = new TLcdVectorModel(new TLcdGeodeticReference());
app6AModel.setModelDescriptor(new TLcdAPP6AModelDescriptor(null, "APP-6A", "APP-6A", null));

// Create an APP-6A symbol: an unmanned aerial vehicle unit. This symbol has one point
// that indicates its position. When a symbol is created, the minimum number of points
// needed to draw the symbol is created.
// A value for the text modifier "Unique Designation" is also set.
TLcdEditableAPP6AObject object =
    new TLcdEditableAPP6AObject("STGAUCVU----USG", ELcdAPP6Standard.APP_6A);
object.move2DPoint(0, 27, 46); // Move the object
object.putTextModifier(ILcdAPP6ACoded.sUniqueDesignation, "Regular");
app6AModel.addElement(object, ILcdFireEventMode.NO_EVENT);

// Create another model for APP-6C objects.
TLcdVectorModel app6CModel = new TLcdVectorModel(new TLcdGeodeticReference());
app6CModel.setModelDescriptor(new TLcdAPP6AModelDescriptor(null, "APP-6C", "APP-6C", null));

// Create an APP-6C symbol: an occluded front, which is a polyline of 2
// or more points. Two points are present by default.
object = new TLcdEditableAPP6AObject("10004500001107000000", ELcdAPP6Standard.APP_6C);
ILcd2DEditablePointList pointList = object.get2DEditablePointList();
pointList.move2DPoint(0, 5, 30); // Move the first point
pointList.move2DPoint(1, 3, 35); // Move the second point
pointList.insert2DPoint(2, 4, 40); // Insert a third point.
app6CModel.addElement(object, ILcdFireEventMode.NO_EVENT);

Two arguments are supplied to construct a TLcdEditableAPP6AObject instance in this sample: the symbol ID code, represented by a String, and the symbology standard, represented by an ELcdAPP6Standard instance. TLcdEditableAPP6AObject offers many convenience methods to manipulate the symbol ID code and text modifiers. See the Customizing symbol properties guide for more information.

When an instance of TLcdEditableAPP6AObject is constructed, the minimum number of points needed to draw the symbol is created automatically. Some symbols allow you to add more points manually. An icon symbol, on the other hand, always has exactly one point for example.

To determine how many points are required for a particular symbol, use the interface ILcdRestrictedLengthPointList. This is an extension of ILcdPointList that provides extra information about the minimum and maximum number of points needed. By default, a new TLcdEditableAPP6AObject object uses an ILcdRestrictedLengthPointList, which you retrieve through the method getPointList(). Its method getMinPointCount() returns a positive number to indicate the exact number of points needed, or a negative number to define the number of points that are required at least. For example, the result for a point symbol is 1 because it always requires exactly one point, while the result for an area symbol is -3, because it requires at least three points but optionally more.

Configuring the style

Next to a geometry and a set of textual properties, a military symbol can have various style settings that determine how it is rendered on a map. This includes the icon size for point-based symbols, the font to be used for labels, various color settings, and so on.

In the API, the symbology style settings are defined in a style object. For APP-6A symbols, the styling is represented by the interface ILcdAPP6AStyle and its default implementation TLcdDefaultAPP6AStyle, both available in the package com.luciad.symbology.app6a.view.gxy. All style settings have default values, based upon the corresponding military symbology standard where applicable. If you want to change the style settings, it is recommended to use the default implementation TLcdDefaultAPP6AStyle. Using the default implementation is preferable over creating your own implementation, because it is convenient, and because the interface is subject to changes in future versions of the API, to add new style settings for instance.

When you have defined a style, you can link it with a military symbol in two ways:

  1. You can associate the style directly with one or more military symbols. In APP-6A, this relation is represented by the interface ILcdAPP6AStyled. This interface provides one method, getAPP6AStyle(), that returns the style in the form of an ILcdAPP6AStyle instance. When the APP-6A symbol is rendered, the implementation will automatically check whether the object is of the type ILcdAPP6AStyled. If positive, its associated style is used for the rendering. If negative, a default style is used. See the next bullet for more information. Note that the default APP-6A domain object in the API, TLcdEditableAPP6AObject, does not implement ILcdAPP6AStyled. The samples however illustrate how to extend this class and implement ILcdAPP6AStyled appropriately, see samples.symbology.common.app6.StyledEditableAPP6Object.

  2. Use a default style for each military symbol that does not have an associated style. This default style can be configured on the painters that are responsible for rendering the object on a map. The type of view determines how you need to configure a default style on a painter. Refer to Using military symbols in a GXY view for a GXY view, and to Using military symbols in a Lightspeed view for a Lightspeed view.