Concepts ​
Terms used throughout the Control Measures and TacticalDraw guides.
Core terms ​
Control measure. A tactical military graphic defined by MIL-STD-2525 or APP-6, such as Block, Ambush, Fortified Area, or Attack-by-Fire. See the catalog for the complete list.
Graphic. One persisted, selectable tactical object and its derived render. A graphic may be a control measure, generic graphic, point symbol, or Image.
Render. The GeoJSON FeatureCollection produced by renderControlMeasure. A graphic can contain several features—for example, an arrow shaft and head. Stable feature IDs let you match parts after an edit.
Snapshot. A { graphic, render } pair captured at one point in time. draw(), edit(), and change listeners return snapshots. Because graphic is a defensive copy, you can safely keep it after the session ends.
Point symbol. A MIL-STD-2525 or APP-6 unit symbol at one position. It is a graphic, but not a control measure, and uses the same TacticalDraw lifecycle. Its renderer is optional; see Optional point symbols.
Image. A host-resource-backed graphic centered at one geographic position. It carries width, rotation, opacity, and immutable intrinsic dimensions while the host owns acquisition and storage. See Host-backed Images.
Points and validity ​
Draw rule. The logic that turns user-placed points into a control measure, including derived points and reshape behavior. For example, the Block rule keeps its stem square when a vertex moves. TacticalDraw applies each kind's rule automatically, so the host does not need kind-specific interaction code.
Input contract. A kind's coordinate requirements. Every coordinate must be a finite [longitude, latitude] pair, and the list must contain enough points. The renderer ignores points beyond the declared maximum.
Validation mode. How the renderer handles an input-contract failure: silent returns an empty render, warn also logs a warning, and throw raises an error. Set it per render call, not as a control-measure option.
Geometric degeneracy. Valid points that cannot form a shape—for example, two coincident points creating a zero-length baseline. This always produces an empty render without a message, regardless of validation mode. It can occur temporarily while the user is drawing.
Drawing and editing ​
Map adapter. The engine-independent bridge between TacticalDraw and a map. It handles GeoJSON rendering, interactions, and viewport calculations without containing control-measure logic. The same TacticalDraw code therefore works with any engine that has an adapter. See Engines.
Engine. A map library. TacticalDraw provides adapters for OpenLayers, MapLibre GL JS, and Leaflet, all behind the same interface.
Rubber-band guide. A line through the current points to the pointer during a variable-length draw or edit. Areas also show a closing segment. It appears alongside the graphic preview and can be disabled per call.
Sizing ​
Some dimensions are independent of the control points, including FLOT scallop radius, fortified-line tooth size, antitank-ditch tooth height, and label height. Labels use labelSize for meters or labelSizePixels for pixels. The following terms apply to all such dimensions.
Size anchor. Whether a dimension stays fixed relative to the ground or the screen. The stored graphic options carry this choice.
- Ground-anchored: measured in meters. Its geographic size stays fixed, so its on-screen size changes with zoom.
- Screen-anchored: measured in pixels. TacticalDraw rebuilds its geometry after view changes to keep its on-screen size fixed.
Baking. Converting a pixel size to meters at the zoom level where a draw or edit finishes. The result becomes ground-anchored. This is the default; choose a screen anchor to retain pixel sizing. Active previews remain screen-anchored until commit.
Size input unit. The pixels or meters supplied by the user. Meter values are always ground-anchored. Pixel values bake to meters by default and remain screen-anchored only when requested.
Label size clamp band. The allowed pixel range for ground-anchored label text, calculated as clamp(labelSize / resolution, min, max). Configure it per layer with TextStyleOptions.textSizeMinPixels and textSizeMaxPixels; the default is 8–24 pixels. This is a layer style, not stored graphic data. Screen-anchored labels keep their pixel size without clamping.
Styling ​
Symbol color. The shared stroke and fill color of a control measure, defaulting to black. Override either channel when needed—for example, to make an area fill transparent. See Styling.
Filledness. Whether a symbol part is solid or outlined. Doctrine defines this per part and the generator applies it; geometry type alone does not decide it. An arrowhead is solid, while area measures such as Block may be outlined.
Fill pattern. How a filled part is painted: solid, hatch, reverse-hatch, cross-hatch, horizontal, vertical, or dots. Patterns use the resolved fill color and fixed geometry. Renderers without pattern support fall back to a solid fill. Mine-area measures also use six intrinsic mine-* pictogram patterns selected by their Modifier 1 value.
Color alpha. The alpha channel in color, strokeColor, or fillColor. Hit-testing respects this value, so a fully transparent fill provides no selection surface.
Graphic opacity. A display-time multiplier from 0 to 1, stored as style.opacity. Hit-testing ignores it, so even opacity: 0 remains selectable. Final alpha equals graphic opacity multiplied by color alpha. Point symbols fade as one SVG; control-measure parts fade individually and may appear darker where they overlap. See Graphic opacity.