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 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 2525 and APP-6 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-6 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 2525 and APP-6 standards 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-6 and MIL-STD 2525” shows an overview of the common modifiers available for APP-6 and MIL-STD 2525, and the corresponding field names in
ILcdAPP6ACoded
andILcdMS2525bCoded
. Additional text modifiers are documented in the API reference documentation forILcdAPP6ACoded
andILcdMS2525bCoded
.
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 the properties in table Table 1, “List of common text modifiers for APP-6 and MIL-STD 2525” 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
// 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 a ELcdAPP6Standard
. 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.
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 class TLcdMilitarySymbolStyle
,
All style settings have default values, based upon the corresponding military symbology standard where applicable.
When you have defined a style, you can link it with a military symbol in two ways:
-
You can associate the style directly with one or more military symbols. In APP-6A, this relation is represented by the interface
ILcdStyledMilitarySymbol
. This interface provides one method,getMilitarySymbolStyle()
, that returns the style in the form of aTLcdMilitarySymbolStyle
instance. When the APP-6A symbol is rendered, the implementation will automatically check whether the object is of the typeILcdStyledMilitarySymbol
. 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 implementILcdStyledMilitarySymbol
. The samples however illustrate how to extend this class and implementILcdStyledMilitarySymbol
appropriately, seesamples.symbology.common.app6.StyledEditableAPP6Object
. -
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.