@orbat-mapper/control-measures 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/{index-DelKQdBf.d.mts → index-BzMR6vIE.d.mts} +17 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/preview/index.d.mts +1 -1
- package/dist/preview/index.mjs +1 -1
- package/dist/{renderControlMeasure-DYcehsHK.mjs → renderControlMeasure-YkkjLyTx.mjs} +343 -155
- package/media/bridge-or-gap.svg +1 -0
- package/media/envelopment.svg +1 -0
- package/media/infiltration.svg +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -197,6 +197,7 @@ code.
|
|
|
197
197
|
| <img src="media/minefield.svg" width="96" height="48" alt=""> | `minefield` | Minefield | `270701` |
|
|
198
198
|
| <img src="media/minefield-dynamic.svg" width="96" height="48" alt=""> | `minefield-dynamic` | Minefield (Dynamic) | `270707` |
|
|
199
199
|
| <img src="media/mined-area.svg" width="96" height="48" alt=""> | `mined-area` | Mined Area | `270800` |
|
|
200
|
+
| <img src="media/bridge-or-gap.svg" width="96" height="48" alt=""> | `bridge-or-gap` | Bridge or Gap | `271100` |
|
|
200
201
|
|
|
201
202
|
### Protection Lines
|
|
202
203
|
|
|
@@ -230,6 +231,8 @@ code.
|
|
|
230
231
|
| <img src="media/seize.svg" width="96" height="48" alt=""> | `seize` | Seize | `342300` |
|
|
231
232
|
| <img src="media/withdraw.svg" width="96" height="48" alt=""> | `withdraw` | Withdraw | `342400` |
|
|
232
233
|
| <img src="media/withdraw-under-pressure.svg" width="96" height="48" alt=""> | `withdraw-under-pressure` | Withdraw Under Pressure | `342500` |
|
|
234
|
+
| <img src="media/envelopment.svg" width="96" height="48" alt=""> | `envelopment` | Envelopment | `343500` |
|
|
235
|
+
| <img src="media/infiltration.svg" width="96" height="48" alt=""> | `infiltration` | Infiltration | `343800` |
|
|
233
236
|
| <img src="media/rearward-passage-of-lines.svg" width="96" height="48" alt=""> | `rearward-passage-of-lines` | Rearward Passage of Lines | `344200` |
|
|
234
237
|
| <img src="media/disengage.svg" width="96" height="48" alt=""> | `disengage` | Disengage | `344400` |
|
|
235
238
|
|
|
@@ -805,6 +805,22 @@ declare function createEngineerWorkLine(positions: Position[], options?: Enginee
|
|
|
805
805
|
//#region src/generators/cm11-command-control-lines/generic-c2-line.d.ts
|
|
806
806
|
/** Configuration options for the Generic command and control line. */
|
|
807
807
|
interface GenericC2LineOptions extends LineLabelOptions, SmoothLineOptions {
|
|
808
|
+
/** Field B echelon glyph. Empty, `"none"`, or unknown renders no glyph. @default "none" */
|
|
809
|
+
echelon?: string;
|
|
810
|
+
/** Echelon glyph height in meters (ground-anchored). @default 750 */
|
|
811
|
+
echelonSize?: number;
|
|
812
|
+
/** Echelon glyph height in screen pixels (screen-anchored). @default 16 */
|
|
813
|
+
echelonSizePixels?: number;
|
|
814
|
+
/** Gap on each side of the echelon glyph, as a ratio of its height. @default 0.3 */
|
|
815
|
+
echelonPadding?: number;
|
|
816
|
+
/** Number of echelon glyphs distributed along the whole line. @default 1 */
|
|
817
|
+
labelRepetitions?: number;
|
|
818
|
+
/** Spread of repeated echelons around the midpoint. @default 1 */
|
|
819
|
+
labelSpacing?: number;
|
|
820
|
+
/** Position of a single echelon along the line by cumulative arc length. @default 0.5 */
|
|
821
|
+
labelPosition?: number;
|
|
822
|
+
/** Orient echelons along the line or using Boundary's standard placement. @default "along" */
|
|
823
|
+
labelOrientation?: "along" | "standard";
|
|
808
824
|
/**
|
|
809
825
|
* Optional phase line naming: renders `PL <name>` just beyond each end of
|
|
810
826
|
* the line, additive to the H/T/W/W1 amplifier labels. Empty or
|
|
@@ -831,7 +847,7 @@ declare const DEFAULT_GENERIC_C2_LINE_OPTIONS: GenericC2LineOptions;
|
|
|
831
847
|
* (inset from the tip, anchored toward the line's interior), one at
|
|
832
848
|
* `base + perp·offset` and the other at `base − perp·offset`.
|
|
833
849
|
*/
|
|
834
|
-
declare function createGenericC2Line(positions: Position[], options?: GenericC2LineOptions, textAmplifiers?: CanonicalTextAmplifiers, context?: ControlMeasureGeneratorContext): FeatureCollection<LineString | Point>;
|
|
850
|
+
declare function createGenericC2Line(positions: Position[], options?: GenericC2LineOptions, textAmplifiers?: CanonicalTextAmplifiers, context?: ControlMeasureGeneratorContext): FeatureCollection<LineString | MultiLineString | MultiPolygon | Point>;
|
|
835
851
|
//#endregion
|
|
836
852
|
//#region src/internal/area-labels.d.ts
|
|
837
853
|
/** Shared placement options for the centered-label area measures. */
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { $ as CONTROL_MEASURE_METADATA, $i as ControlMeasurePaintCapability, $n as DEFAULT_ATTACK_HELICOPTER_OPTIONS, $r as StyleHints, $t as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, A as BaselineFrame, Ai as sphericalBearing, An as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Ar as AreaOfOperationsOptions, At as FortifiedAreaOptions, B as toSimpleStyle, Bi as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Bn as BridgeheadLineOptions, Br as DEFAULT_ASSEMBLY_AREA_OPTIONS, Bt as WithdrawOptions, C as area27DrawRule, Ci as EngineerWorkLineOptions, Cn as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, Cr as DEFAULT_CLASSIC_ARROW_OPTIONS, Ct as BlockOptions, D as getMidpointPerpendicularSignedDistance, Di as Point2D, Dn as LineOfDepartureContactOptions, Dr as MainAttackOptions, Dt as DEFAULT_FRONTAL_ATTACK_OPTIONS, E as createMidpointPerpendicularDrawRule, Ei as LabelSizeOptions, En as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Er as DEFAULT_MAIN_ATTACK_OPTIONS, Et as TurningMovementOptions, F as EPSILON, Fi as ControlMeasureOptionHandle, Fn as HandoverLineOptions, Fr as DEFAULT_LANDING_ZONE_OPTIONS, Ft as AntitankDitchOptions, G as foldsBoxTransformOptions, Gi as DEFAULT_STROKE_WIDTH_CSS_PIXELS, Gn as PhaseLineOptions, Gr as AreaDefenseOptions, Gt as DEFAULT_RETIRE_OPTIONS, H as dragControlMeasureOptionHandle, Hi as DEFAULT_LINE_JOIN, Hn as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Hr as MobileDefenseOptions, Ht as SeizeOptions, I as getMetersPerPixel, Ii as ControlMeasureOptionHandleDragEvent, In as DEFAULT_RELEASE_LINE_OPTIONS, Ir as LandingZoneOptions, It as DEFAULT_ANTITANK_DITCH_OPTIONS, J as renderControlMeasure, Ji as MeasuredText, Jn as AttackByFireOptions, Jr as EncirclementOptions, Jt as RearwardPassageOfLinesOptions, K as freezeOrientationOptions, Ki as LogicalTextStyle, Kn as DEFAULT_FLOT_OPTIONS, Kr as DEFAULT_AREA_DEFENSE_OPTIONS, Kt as RetireOptions, L as roundToFixed, Li as ControlMeasureOptionHandles, Ln as ReleaseLineOptions, Lr as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Lt as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, M as BaselineFrameOptions, Mi as BoundaryOptions, Mn as BattleHandoverLineOptions, Mr as DEFAULT_PICKUP_ZONE_OPTIONS, Mt as FortifiedLineOptions, N as BaselineFrameOrigin, Ni as DEFAULT_BOUNDARY_OPTIONS, Nn as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Nr as PickupZoneOptions, Nt as AntitankWallOptions, O as pointOnMidpointPerpendicularAxis, Oi as haversineDistance, On as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, Or as calculateMetrics, Ot as FrontalAttackOptions, P as createBaselineFrame, Pi as BoxTransformDelta, Pn as DEFAULT_HANDOVER_LINE_OPTIONS, Pr as MineType, Pt as DEFAULT_ANTITANK_WALL_OPTIONS, Q as CONTROL_MEASURE_IDS, Qi as ControlMeasureMetadata, Qn as AttackHelicopterOptions, Qr as FeaturePartProps, Qt as GuardOptions, R as SimpleStyleProps, Ri as ControlMeasureRenderContext, Rn as DEFAULT_HOLDING_LINE_OPTIONS, Rr as JointTacticalActionAreaOptions, Rt as WithdrawUnderPressureOptions, S as containDrawRule, Si as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, Sn as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, Sr as ClassicArrowOptions, St as DisruptOptions, T as computeDefaultMidpointPerpendicularPoint, Ti as LightLineOptions, Tn as ProbableLineOfDeploymentOptions, Tr as SupportingAttackOptions, Tt as DEFAULT_TURNING_MOVEMENT_OPTIONS, U as getControlMeasureOptionHandles, Ui as DEFAULT_PORTRAYAL, Un as ForwardEdgeOfBattleAreaOptions, Ur as DEFAULT_ENGAGEMENT_AREA_OPTIONS, Ut as DEFAULT_SCREEN_OPTIONS, V as resolveStyleHints, Vi as DEFAULT_LINE_CAP, Vn as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, Vr as DEFAULT_MOBILE_DEFENSE_OPTIONS, Vt as DEFAULT_SEIZE_OPTIONS, W as applyBoxTransformOptions, Wi as DEFAULT_STROKE_DASH_CSS_PIXELS, Wn as DEFAULT_PHASE_LINE_OPTIONS, Wr as EngagementAreaOptions, Wt as ScreenOptions, X as cloneControlMeasure, Xi as ControlMeasureGeometry, Xn as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, Xr as FinalProtectiveFireOptions, Xt as PenetrateOptions, Y as ControlMeasure, Yi as ControlMeasureFillCapability, Yn as DEFAULT_ATTACK_BY_FIRE_OPTIONS, Yr as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Yt as DEFAULT_PENETRATE_OPTIONS, Z as isKind, Zi as ControlMeasureGeometryType, Zn as SupportByFireOptions, Zr as ControlMeasureRender, Zt as DEFAULT_GUARD_OPTIONS, _ as point12DrawRule, _a as canonicalTextAmplifierKey, _i as DEFAULT_CONTAIN_OPTIONS, _n as BypassOptions, _r as GenericLineOptions, _t as DEFAULT_FIX_MISSION_TASK_OPTIONS, a as axis1DrawRule, aa as parameterPresentationTierRank, ai as PrincipalDirectionOfFireOptions, an as CoverOptions, ar as RadarSearchDoctrineOptions, at as getDefaultOptions, b as disruptDrawRule, ba as AnchorTransformEvent, bi as DEFAULT_GENERIC_C2_LINE_OPTIONS, bn as DEFAULT_BREACH_OPTIONS, br as DEFAULT_BLOCK_ARROW_OPTIONS, bt as FixOptions, c as line26DrawRule, ca as AmplifierPlacement, ci as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, cn as TacticalArrowOptions, cr as DEFAULT_GENERIC_SECTOR_OPTIONS, ct as ObstacleBypassImpossibleOptions, d as turnDrawRule, da as GeneratedLabelKey, di as DirectionOfAttackAviationOptions, dn as CounterattackOptions, dr as GenericCircleOptions, dt as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, ea as PARAMETER_PRESENTATION_TIERS, ei as controlMeasureIdFromFeature, en as DisruptMissionTaskOptions, er as AirborneAttackOptions, et as ControlMeasureId, f as line1DrawRule, fa as LabelPlacementOverride, fi as DEFAULT_RETAIN_OPTIONS, fn as DEFAULT_COUNTERATTACK_OPTIONS, fr as DEFAULT_GENERIC_RECTANGLE_OPTIONS, ft as ObstacleBypassEasyOptions, g as staticPointDrawRule, ga as TextAmplifiers, gi as ContainOptions, gn as DEFAULT_CANALIZE_OPTIONS, gr as DEFAULT_GENERIC_LINE_OPTIONS, gt as TurnOptions, h as dynamicPointDrawRule, ha as TextAmplifierKey, hi as StrongPointOptions, hn as CanalizeOptions, hr as GenericPolygonOptions, ht as DEFAULT_TURN_OPTIONS, i as rectangleDrawRule, ia as TextAmplifierDescriptor, ii as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, in as DelayOptions, ir as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, it as getControlMeasureMetadataByValue, j as BaselineFrameNormal, ji as unproject, jn as LimitOfAdvanceOptions, jr as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, jt as DEFAULT_FORTIFIED_LINE_OPTIONS, k as snapToMidpointPerpendicular, ki as project, kn as LineOfDepartureOptions, kr as computeInitialWidthPoint, kt as DEFAULT_FORTIFIED_AREA_OPTIONS, l as line24DrawRule, la as AmplifierPlacements, li as DirectionOfMainAttackOptions, ln as CounterattackByFireOptions, lr as GenericSectorOptions, lt as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, m as attackByFireDrawRule, ma as TextAmplifierField, mi as DEFAULT_STRONG_POINT_OPTIONS, mn as DEFAULT_CLEAR_OPTIONS, mr as DEFAULT_GENERIC_POLYGON_OPTIONS, mt as MinefieldOptions, n as DEFAULT_AMBUSH_OPTIONS, na as ParameterPresentationTier, ni as SECONDARY_DIRECTION_OF_FIRE_DASH, nn as DisengageOptions, nr as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, nt as OptionsByKind, o as supportByFireDrawRule, oa as resolveParameterPresentationTier, oi as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, on as DEFAULT_COVER_OPTIONS, or as DEFAULT_GENERIC_TEXT_OPTIONS, ot as listControlMeasureMetadata, p as ambushDrawRule, pa as TEXT_AMPLIFIER_FIELDS, pi as RetainOptions, pn as ClearOptions, pr as GenericRectangleOptions, pt as DEFAULT_MINEFIELD_OPTIONS, q as RenderOptions, qi as MeasureTextRequest, qn as FLOTOptions, qr as DEFAULT_ENCIRCLEMENT_OPTIONS, qt as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, r as sectorDrawRule, ra as ParameterSemanticRole, ri as SecondaryDirectionOfFireOptions, rn as DEFAULT_DELAY_OPTIONS, rr as RADAR_SEARCH_DOCTRINE_FILL_COLOR, rt as getControlMeasureMetadata, s as line27DrawRule, sa as resolveParameterSemanticRole, si as DirectionOfSupportingAttackOptions, sn as DEFAULT_TACTICAL_ARROW_OPTIONS, sr as GenericTextOptions, st as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, t as AmbushOptions, ta as ParamDescriptor, ti as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, tn as DEFAULT_DISENGAGE_OPTIONS, tr as DEFAULT_AIRBORNE_ATTACK_OPTIONS, tt as ControlMeasureKind, u as line23DrawRule, ua as CanonicalTextAmplifiers, ui as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, un as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, ur as DEFAULT_GENERIC_CIRCLE_OPTIONS, ut as ObstacleBypassDifficultOptions, v as penetrateDrawRule, va as normalizeTextAmplifiers, vi as BattlePositionOptions, vn as DEFAULT_BYPASS_OPTIONS, vr as BlockArrowHeadStyle, vt as FixMissionTaskOptions, w as MidpointPerpendicularDrawRuleOptions, wi as DEFAULT_LIGHT_LINE_OPTIONS, wn as PROBABLE_LINE_OF_DEPLOYMENT_DASH, wr as DEFAULT_SUPPORTING_ATTACK_OPTIONS, wt as DEFAULT_BLOCK_OPTIONS, x as blockDrawRule, xa as ControlMeasureDrawRule, xi as GenericC2LineOptions, xn as BlockMissionTaskOptions, xr as ClassicArrowHeadStyle, xt as DEFAULT_DISRUPT_OPTIONS, y as centerRadiusDrawRule, ya as resolveAmplifierPlacement, yi as DEFAULT_BATTLE_POSITION_OPTIONS, yn as BreachOptions, yr as BlockArrowOptions, yt as DEFAULT_FIX_OPTIONS, z as SimpleStyleRender, zi as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, zn as HoldingLineOptions, zr as AssemblyAreaOptions, zt as DEFAULT_WITHDRAW_OPTIONS } from "./index-
|
|
1
|
+
import { $ as CONTROL_MEASURE_METADATA, $i as ControlMeasurePaintCapability, $n as DEFAULT_ATTACK_HELICOPTER_OPTIONS, $r as StyleHints, $t as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, A as BaselineFrame, Ai as sphericalBearing, An as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Ar as AreaOfOperationsOptions, At as FortifiedAreaOptions, B as toSimpleStyle, Bi as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Bn as BridgeheadLineOptions, Br as DEFAULT_ASSEMBLY_AREA_OPTIONS, Bt as WithdrawOptions, C as area27DrawRule, Ci as EngineerWorkLineOptions, Cn as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, Cr as DEFAULT_CLASSIC_ARROW_OPTIONS, Ct as BlockOptions, D as getMidpointPerpendicularSignedDistance, Di as Point2D, Dn as LineOfDepartureContactOptions, Dr as MainAttackOptions, Dt as DEFAULT_FRONTAL_ATTACK_OPTIONS, E as createMidpointPerpendicularDrawRule, Ei as LabelSizeOptions, En as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Er as DEFAULT_MAIN_ATTACK_OPTIONS, Et as TurningMovementOptions, F as EPSILON, Fi as ControlMeasureOptionHandle, Fn as HandoverLineOptions, Fr as DEFAULT_LANDING_ZONE_OPTIONS, Ft as AntitankDitchOptions, G as foldsBoxTransformOptions, Gi as DEFAULT_STROKE_WIDTH_CSS_PIXELS, Gn as PhaseLineOptions, Gr as AreaDefenseOptions, Gt as DEFAULT_RETIRE_OPTIONS, H as dragControlMeasureOptionHandle, Hi as DEFAULT_LINE_JOIN, Hn as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Hr as MobileDefenseOptions, Ht as SeizeOptions, I as getMetersPerPixel, Ii as ControlMeasureOptionHandleDragEvent, In as DEFAULT_RELEASE_LINE_OPTIONS, Ir as LandingZoneOptions, It as DEFAULT_ANTITANK_DITCH_OPTIONS, J as renderControlMeasure, Ji as MeasuredText, Jn as AttackByFireOptions, Jr as EncirclementOptions, Jt as RearwardPassageOfLinesOptions, K as freezeOrientationOptions, Ki as LogicalTextStyle, Kn as DEFAULT_FLOT_OPTIONS, Kr as DEFAULT_AREA_DEFENSE_OPTIONS, Kt as RetireOptions, L as roundToFixed, Li as ControlMeasureOptionHandles, Ln as ReleaseLineOptions, Lr as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Lt as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, M as BaselineFrameOptions, Mi as BoundaryOptions, Mn as BattleHandoverLineOptions, Mr as DEFAULT_PICKUP_ZONE_OPTIONS, Mt as FortifiedLineOptions, N as BaselineFrameOrigin, Ni as DEFAULT_BOUNDARY_OPTIONS, Nn as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Nr as PickupZoneOptions, Nt as AntitankWallOptions, O as pointOnMidpointPerpendicularAxis, Oi as haversineDistance, On as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, Or as calculateMetrics, Ot as FrontalAttackOptions, P as createBaselineFrame, Pi as BoxTransformDelta, Pn as DEFAULT_HANDOVER_LINE_OPTIONS, Pr as MineType, Pt as DEFAULT_ANTITANK_WALL_OPTIONS, Q as CONTROL_MEASURE_IDS, Qi as ControlMeasureMetadata, Qn as AttackHelicopterOptions, Qr as FeaturePartProps, Qt as GuardOptions, R as SimpleStyleProps, Ri as ControlMeasureRenderContext, Rn as DEFAULT_HOLDING_LINE_OPTIONS, Rr as JointTacticalActionAreaOptions, Rt as WithdrawUnderPressureOptions, S as containDrawRule, Si as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, Sn as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, Sr as ClassicArrowOptions, St as DisruptOptions, T as computeDefaultMidpointPerpendicularPoint, Ti as LightLineOptions, Tn as ProbableLineOfDeploymentOptions, Tr as SupportingAttackOptions, Tt as DEFAULT_TURNING_MOVEMENT_OPTIONS, U as getControlMeasureOptionHandles, Ui as DEFAULT_PORTRAYAL, Un as ForwardEdgeOfBattleAreaOptions, Ur as DEFAULT_ENGAGEMENT_AREA_OPTIONS, Ut as DEFAULT_SCREEN_OPTIONS, V as resolveStyleHints, Vi as DEFAULT_LINE_CAP, Vn as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, Vr as DEFAULT_MOBILE_DEFENSE_OPTIONS, Vt as DEFAULT_SEIZE_OPTIONS, W as applyBoxTransformOptions, Wi as DEFAULT_STROKE_DASH_CSS_PIXELS, Wn as DEFAULT_PHASE_LINE_OPTIONS, Wr as EngagementAreaOptions, Wt as ScreenOptions, X as cloneControlMeasure, Xi as ControlMeasureGeometry, Xn as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, Xr as FinalProtectiveFireOptions, Xt as PenetrateOptions, Y as ControlMeasure, Yi as ControlMeasureFillCapability, Yn as DEFAULT_ATTACK_BY_FIRE_OPTIONS, Yr as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Yt as DEFAULT_PENETRATE_OPTIONS, Z as isKind, Zi as ControlMeasureGeometryType, Zn as SupportByFireOptions, Zr as ControlMeasureRender, Zt as DEFAULT_GUARD_OPTIONS, _ as point12DrawRule, _a as canonicalTextAmplifierKey, _i as DEFAULT_CONTAIN_OPTIONS, _n as BypassOptions, _r as GenericLineOptions, _t as DEFAULT_FIX_MISSION_TASK_OPTIONS, a as axis1DrawRule, aa as parameterPresentationTierRank, ai as PrincipalDirectionOfFireOptions, an as CoverOptions, ar as RadarSearchDoctrineOptions, at as getDefaultOptions, b as disruptDrawRule, ba as AnchorTransformEvent, bi as DEFAULT_GENERIC_C2_LINE_OPTIONS, bn as DEFAULT_BREACH_OPTIONS, br as DEFAULT_BLOCK_ARROW_OPTIONS, bt as FixOptions, c as line26DrawRule, ca as AmplifierPlacement, ci as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, cn as TacticalArrowOptions, cr as DEFAULT_GENERIC_SECTOR_OPTIONS, ct as ObstacleBypassImpossibleOptions, d as turnDrawRule, da as GeneratedLabelKey, di as DirectionOfAttackAviationOptions, dn as CounterattackOptions, dr as GenericCircleOptions, dt as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, ea as PARAMETER_PRESENTATION_TIERS, ei as controlMeasureIdFromFeature, en as DisruptMissionTaskOptions, er as AirborneAttackOptions, et as ControlMeasureId, f as line1DrawRule, fa as LabelPlacementOverride, fi as DEFAULT_RETAIN_OPTIONS, fn as DEFAULT_COUNTERATTACK_OPTIONS, fr as DEFAULT_GENERIC_RECTANGLE_OPTIONS, ft as ObstacleBypassEasyOptions, g as staticPointDrawRule, ga as TextAmplifiers, gi as ContainOptions, gn as DEFAULT_CANALIZE_OPTIONS, gr as DEFAULT_GENERIC_LINE_OPTIONS, gt as TurnOptions, h as dynamicPointDrawRule, ha as TextAmplifierKey, hi as StrongPointOptions, hn as CanalizeOptions, hr as GenericPolygonOptions, ht as DEFAULT_TURN_OPTIONS, i as rectangleDrawRule, ia as TextAmplifierDescriptor, ii as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, in as DelayOptions, ir as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, it as getControlMeasureMetadataByValue, j as BaselineFrameNormal, ji as unproject, jn as LimitOfAdvanceOptions, jr as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, jt as DEFAULT_FORTIFIED_LINE_OPTIONS, k as snapToMidpointPerpendicular, ki as project, kn as LineOfDepartureOptions, kr as computeInitialWidthPoint, kt as DEFAULT_FORTIFIED_AREA_OPTIONS, l as line24DrawRule, la as AmplifierPlacements, li as DirectionOfMainAttackOptions, ln as CounterattackByFireOptions, lr as GenericSectorOptions, lt as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, m as attackByFireDrawRule, ma as TextAmplifierField, mi as DEFAULT_STRONG_POINT_OPTIONS, mn as DEFAULT_CLEAR_OPTIONS, mr as DEFAULT_GENERIC_POLYGON_OPTIONS, mt as MinefieldOptions, n as DEFAULT_AMBUSH_OPTIONS, na as ParameterPresentationTier, ni as SECONDARY_DIRECTION_OF_FIRE_DASH, nn as DisengageOptions, nr as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, nt as OptionsByKind, o as supportByFireDrawRule, oa as resolveParameterPresentationTier, oi as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, on as DEFAULT_COVER_OPTIONS, or as DEFAULT_GENERIC_TEXT_OPTIONS, ot as listControlMeasureMetadata, p as ambushDrawRule, pa as TEXT_AMPLIFIER_FIELDS, pi as RetainOptions, pn as ClearOptions, pr as GenericRectangleOptions, pt as DEFAULT_MINEFIELD_OPTIONS, q as RenderOptions, qi as MeasureTextRequest, qn as FLOTOptions, qr as DEFAULT_ENCIRCLEMENT_OPTIONS, qt as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, r as sectorDrawRule, ra as ParameterSemanticRole, ri as SecondaryDirectionOfFireOptions, rn as DEFAULT_DELAY_OPTIONS, rr as RADAR_SEARCH_DOCTRINE_FILL_COLOR, rt as getControlMeasureMetadata, s as line27DrawRule, sa as resolveParameterSemanticRole, si as DirectionOfSupportingAttackOptions, sn as DEFAULT_TACTICAL_ARROW_OPTIONS, sr as GenericTextOptions, st as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, t as AmbushOptions, ta as ParamDescriptor, ti as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, tn as DEFAULT_DISENGAGE_OPTIONS, tr as DEFAULT_AIRBORNE_ATTACK_OPTIONS, tt as ControlMeasureKind, u as line23DrawRule, ua as CanonicalTextAmplifiers, ui as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, un as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, ur as DEFAULT_GENERIC_CIRCLE_OPTIONS, ut as ObstacleBypassDifficultOptions, v as penetrateDrawRule, va as normalizeTextAmplifiers, vi as BattlePositionOptions, vn as DEFAULT_BYPASS_OPTIONS, vr as BlockArrowHeadStyle, vt as FixMissionTaskOptions, w as MidpointPerpendicularDrawRuleOptions, wi as DEFAULT_LIGHT_LINE_OPTIONS, wn as PROBABLE_LINE_OF_DEPLOYMENT_DASH, wr as DEFAULT_SUPPORTING_ATTACK_OPTIONS, wt as DEFAULT_BLOCK_OPTIONS, x as blockDrawRule, xa as ControlMeasureDrawRule, xi as GenericC2LineOptions, xn as BlockMissionTaskOptions, xr as ClassicArrowHeadStyle, xt as DEFAULT_DISRUPT_OPTIONS, y as centerRadiusDrawRule, ya as resolveAmplifierPlacement, yi as DEFAULT_BATTLE_POSITION_OPTIONS, yn as BreachOptions, yr as BlockArrowOptions, yt as DEFAULT_FIX_OPTIONS, z as SimpleStyleRender, zi as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, zn as HoldingLineOptions, zr as AssemblyAreaOptions, zt as DEFAULT_WITHDRAW_OPTIONS } from "./index-BzMR6vIE.mjs";
|
|
2
2
|
import { a as PatternId, c as PatternPoint, d as ControlMeasureStyle, f as FillPattern, i as NON_SOLID_FILL_PATTERNS, l as PatternStroke, n as FillPatternCommand, o as PatternPaint, r as FillPatternDefinition, s as PatternPathOperation, t as FILL_PATTERN_DEFINITIONS, u as getFillPatternDefinition } from "./patterns-CcQmmOuJ.mjs";
|
|
3
3
|
export { type AirborneAttackOptions, type AmbushOptions, type AmplifierPlacement, type AmplifierPlacements, type AnchorTransformEvent, type AntitankDitchOptions, type AntitankWallOptions, type AreaDefenseOptions, type AreaOfOperationsOptions, type AssemblyAreaOptions, type AttackByFireOptions, type AttackHelicopterOptions, type BaselineFrame, type BaselineFrameNormal, type BaselineFrameOptions, type BaselineFrameOrigin, type BattleHandoverLineOptions, type BattlePositionOptions, type BlockArrowHeadStyle, type BlockArrowOptions, type BlockMissionTaskOptions, type BlockOptions, type BoundaryOptions, type BoxTransformDelta, type BreachOptions, type BridgeheadLineOptions, type BypassOptions, CONTROL_MEASURE_IDS, CONTROL_MEASURE_METADATA, type CanalizeOptions, type CanonicalTextAmplifiers, type ClassicArrowHeadStyle, type ClassicArrowOptions, type ClearOptions, type ContainOptions, type ControlMeasure, type ControlMeasureDrawRule, type ControlMeasureFillCapability, type ControlMeasureGeometry, type ControlMeasureGeometryType, type ControlMeasureId, type ControlMeasureKind, type ControlMeasureMetadata, type ControlMeasureOptionHandle, type ControlMeasureOptionHandleDragEvent, type ControlMeasureOptionHandles, type ControlMeasurePaintCapability, type ControlMeasureRender, type ControlMeasureRenderContext, type ControlMeasureStyle, type CounterattackByFireOptions, type CounterattackOptions, type CoverOptions, DEFAULT_AIRBORNE_ATTACK_OPTIONS, DEFAULT_AMBUSH_OPTIONS, DEFAULT_ANTITANK_DITCH_OPTIONS, DEFAULT_ANTITANK_WALL_OPTIONS, DEFAULT_AREA_DEFENSE_OPTIONS, DEFAULT_AREA_OF_OPERATIONS_OPTIONS, DEFAULT_ASSEMBLY_AREA_OPTIONS, DEFAULT_ATTACK_BY_FIRE_OPTIONS, DEFAULT_ATTACK_HELICOPTER_OPTIONS, DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, DEFAULT_BATTLE_POSITION_OPTIONS, DEFAULT_BLOCK_ARROW_OPTIONS, DEFAULT_BLOCK_MISSION_TASK_OPTIONS, DEFAULT_BLOCK_OPTIONS, DEFAULT_BOUNDARY_OPTIONS, DEFAULT_BREACH_OPTIONS, DEFAULT_BRIDGEHEAD_LINE_OPTIONS, DEFAULT_BYPASS_OPTIONS, DEFAULT_CANALIZE_OPTIONS, DEFAULT_CLASSIC_ARROW_OPTIONS, DEFAULT_CLEAR_OPTIONS, DEFAULT_CONTAIN_OPTIONS, DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, DEFAULT_COUNTERATTACK_OPTIONS, DEFAULT_COVER_OPTIONS, DEFAULT_DELAY_OPTIONS, DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, DEFAULT_DISENGAGE_OPTIONS, DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, DEFAULT_DISRUPT_OPTIONS, DEFAULT_ENCIRCLEMENT_OPTIONS, DEFAULT_ENGAGEMENT_AREA_OPTIONS, DEFAULT_ENGINEER_WORK_LINE_OPTIONS, DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, DEFAULT_FIX_MISSION_TASK_OPTIONS, DEFAULT_FIX_OPTIONS, DEFAULT_FLOT_OPTIONS, DEFAULT_FORTIFIED_AREA_OPTIONS, DEFAULT_FORTIFIED_LINE_OPTIONS, DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, DEFAULT_FRONTAL_ATTACK_OPTIONS, DEFAULT_GENERIC_C2_LINE_OPTIONS, DEFAULT_GENERIC_CIRCLE_OPTIONS, DEFAULT_GENERIC_LINE_OPTIONS, DEFAULT_GENERIC_POLYGON_OPTIONS, DEFAULT_GENERIC_RECTANGLE_OPTIONS, DEFAULT_GENERIC_SECTOR_OPTIONS, DEFAULT_GENERIC_TEXT_OPTIONS, DEFAULT_GUARD_OPTIONS, DEFAULT_HANDOVER_LINE_OPTIONS, DEFAULT_HOLDING_LINE_OPTIONS, DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, DEFAULT_LABEL_HEIGHT_CSS_PIXELS, DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, DEFAULT_LANDING_ZONE_OPTIONS, DEFAULT_LIGHT_LINE_OPTIONS, DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, DEFAULT_LINE_OF_DEPARTURE_OPTIONS, DEFAULT_MAIN_ATTACK_OPTIONS, DEFAULT_MINEFIELD_OPTIONS, DEFAULT_MOBILE_DEFENSE_OPTIONS, DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, DEFAULT_PENETRATE_OPTIONS, DEFAULT_PHASE_LINE_OPTIONS, DEFAULT_PICKUP_ZONE_OPTIONS, DEFAULT_PORTRAYAL, DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, DEFAULT_RELEASE_LINE_OPTIONS, DEFAULT_RETAIN_OPTIONS, DEFAULT_RETIRE_OPTIONS, DEFAULT_SCREEN_OPTIONS, DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, DEFAULT_SEIZE_OPTIONS, DEFAULT_STROKE_DASH_CSS_PIXELS, DEFAULT_STROKE_WIDTH_CSS_PIXELS, DEFAULT_STRONG_POINT_OPTIONS, DEFAULT_SUPPORTING_ATTACK_OPTIONS, DEFAULT_SUPPORT_BY_FIRE_OPTIONS, DEFAULT_TACTICAL_ARROW_OPTIONS, DEFAULT_TURNING_MOVEMENT_OPTIONS, DEFAULT_TURN_OPTIONS, DEFAULT_WITHDRAW_OPTIONS, DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, type DelayOptions, type DirectionOfAttackAviationOptions, type DirectionOfMainAttackOptions, type DirectionOfSupportingAttackOptions, type DisengageOptions, type DisruptMissionTaskOptions, type DisruptOptions, EPSILON, type EncirclementOptions, type EngagementAreaOptions, type EngineerWorkLineOptions, FILL_PATTERN_DEFINITIONS, type FLOTOptions, type FeaturePartProps, type FillPattern, type FillPatternCommand, type FillPatternDefinition, type FinalProtectiveFireOptions, type FixMissionTaskOptions, type FixOptions, type FortifiedAreaOptions, type FortifiedLineOptions, type ForwardEdgeOfBattleAreaOptions, type FrontalAttackOptions, type GeneratedLabelKey, type GenericC2LineOptions, type GenericCircleOptions, type GenericLineOptions, type GenericPolygonOptions, type GenericRectangleOptions, type GenericSectorOptions, type GenericTextOptions, type GuardOptions, type HandoverLineOptions, type HoldingLineOptions, type JointTacticalActionAreaOptions, type LabelPlacementOverride, type LabelSizeOptions, type LandingZoneOptions, type LightLineOptions, type LimitOfAdvanceOptions, type LineOfDepartureContactOptions, type LineOfDepartureOptions, type LogicalTextStyle, type MainAttackOptions, type MeasureTextRequest, type MeasuredText, type MidpointPerpendicularDrawRuleOptions, type MineType, type MinefieldOptions, type MobileDefenseOptions, NON_SOLID_FILL_PATTERNS, type ObstacleBypassDifficultOptions, type ObstacleBypassEasyOptions, type ObstacleBypassImpossibleOptions, type OptionsByKind, PARAMETER_PRESENTATION_TIERS, PROBABLE_LINE_OF_DEPLOYMENT_DASH, type ParamDescriptor, type ParameterPresentationTier, type ParameterSemanticRole, type PatternId, type PatternPaint, type PatternPathOperation, type PatternPoint, type PatternStroke, type PenetrateOptions, type PhaseLineOptions, type PickupZoneOptions, type Point2D, type PrincipalDirectionOfFireOptions, type ProbableLineOfDeploymentOptions, RADAR_SEARCH_DOCTRINE_FILL_COLOR, RADAR_SEARCH_DOCTRINE_STROKE_COLOR, type RadarSearchDoctrineOptions, type RearwardPassageOfLinesOptions, type ReleaseLineOptions, type RenderOptions, type RetainOptions, type RetireOptions, SECONDARY_DIRECTION_OF_FIRE_DASH, type ScreenOptions, type SecondaryDirectionOfFireOptions, type SeizeOptions, type SimpleStyleProps, type SimpleStyleRender, type StrongPointOptions, type StyleHints, type SupportByFireOptions, type SupportingAttackOptions, TEXT_AMPLIFIER_FIELDS, type TacticalArrowOptions, type TextAmplifierDescriptor, type TextAmplifierField, type TextAmplifierKey, type TextAmplifiers, type TurnOptions, type TurningMovementOptions, type WithdrawOptions, type WithdrawUnderPressureOptions, ambushDrawRule, applyBoxTransformOptions, area27DrawRule, attackByFireDrawRule, axis1DrawRule, blockDrawRule, calculateMetrics, canonicalTextAmplifierKey, centerRadiusDrawRule, cloneControlMeasure, computeDefaultMidpointPerpendicularPoint, computeInitialWidthPoint, containDrawRule, controlMeasureIdFromFeature, createBaselineFrame, createMidpointPerpendicularDrawRule, disruptDrawRule, dragControlMeasureOptionHandle, dynamicPointDrawRule, foldsBoxTransformOptions, freezeOrientationOptions, getControlMeasureMetadata, getControlMeasureMetadataByValue, getControlMeasureOptionHandles, getDefaultOptions, getFillPatternDefinition, getMetersPerPixel, getMidpointPerpendicularSignedDistance, haversineDistance, isKind, line1DrawRule, line23DrawRule, line24DrawRule, line26DrawRule, line27DrawRule, listControlMeasureMetadata, normalizeTextAmplifiers, parameterPresentationTierRank, penetrateDrawRule, point12DrawRule, pointOnMidpointPerpendicularAxis, project, rectangleDrawRule, renderControlMeasure, resolveAmplifierPlacement, resolveParameterPresentationTier, resolveParameterSemanticRole, resolveStyleHints, roundToFixed, sectorDrawRule, snapToMidpointPerpendicular, sphericalBearing, staticPointDrawRule, supportByFireDrawRule, toSimpleStyle, turnDrawRule, unproject };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as DEFAULT_DISRUPT_OPTIONS, $t as DEFAULT_STROKE_DASH_CSS_PIXELS, A as DEFAULT_RETIRE_OPTIONS, An as createBaselineFrame, At as DEFAULT_CONTAIN_OPTIONS, B as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Bt as DEFAULT_AREA_DEFENSE_OPTIONS, C as DEFAULT_MAIN_ATTACK_OPTIONS, Cn as containDrawRule, Ct as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, D as DEFAULT_WITHDRAW_OPTIONS, Dn as getMidpointPerpendicularSignedDistance, Dt as DEFAULT_BOUNDARY_OPTIONS, E as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, En as createMidpointPerpendicularDrawRule, Et as DEFAULT_LIGHT_LINE_OPTIONS, F as DEFAULT_FORTIFIED_LINE_OPTIONS, Fn as sphericalBearing, Ft as DEFAULT_ANTITANK_DITCH_OPTIONS, G as DEFAULT_HOLDING_LINE_OPTIONS, Gt as canonicalTextAmplifierKey, H as DEFAULT_HANDOVER_LINE_OPTIONS, Ht as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, I as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, In as unproject, It as DEFAULT_ASSEMBLY_AREA_OPTIONS, J as DEFAULT_FLOT_OPTIONS, Jt as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, K as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, Kt as normalizeTextAmplifiers, L as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Ln as EPSILON, Lt as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, M as DEFAULT_PENETRATE_OPTIONS, Mn as computeInitialWidthPoint, Mt as DEFAULT_ATTACK_HELICOPTER_OPTIONS, N as DEFAULT_FRONTAL_ATTACK_OPTIONS, Nn as haversineDistance, Nt as DEFAULT_ATTACK_BY_FIRE_OPTIONS, O as DEFAULT_SEIZE_OPTIONS, On as pointOnMidpointPerpendicularAxis, Ot as DEFAULT_BLOCK_ARROW_OPTIONS, P as DEFAULT_FORTIFIED_AREA_OPTIONS, Pn as project, Pt as DEFAULT_ANTITANK_WALL_OPTIONS, Q as DEFAULT_ENCIRCLEMENT_OPTIONS, Qt as DEFAULT_PORTRAYAL, R as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Rn as getMetersPerPixel, Rt as DEFAULT_MOBILE_DEFENSE_OPTIONS, S as DEFAULT_MINEFIELD_OPTIONS, Sn as centerRadiusDrawRule, St as DEFAULT_BREACH_OPTIONS, T as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Tn as computeDefaultMidpointPerpendicularPoint, Tt as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, U as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Ut as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, V as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Vt as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, W as DEFAULT_RELEASE_LINE_OPTIONS, Wt as TEXT_AMPLIFIER_FIELDS, X as DEFAULT_FIX_OPTIONS, Xt as DEFAULT_LINE_CAP, Y as DEFAULT_FIX_MISSION_TASK_OPTIONS, Yt as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Z as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Zt as DEFAULT_LINE_JOIN, _ as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, _n as staticPointDrawRule, _t as DEFAULT_GENERIC_LINE_OPTIONS, a as DEFINITIONS, an as axis1DrawRule, at as DEFAULT_TACTICAL_ARROW_OPTIONS, b as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, bn as disruptDrawRule, bt as DEFAULT_CANALIZE_OPTIONS, c as getDefaultOptions, cn as line26DrawRule, ct as DEFAULT_SUPPORTING_ATTACK_OPTIONS, d as DEFAULT_TURN_OPTIONS, dn as turnDrawRule, dt as RADAR_SEARCH_DOCTRINE_FILL_COLOR, en as DEFAULT_STROKE_WIDTH_CSS_PIXELS, et as DEFAULT_GUARD_OPTIONS, f as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, fn as line1DrawRule, ft as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, g as SECONDARY_DIRECTION_OF_FIRE_DASH, gn as sectorDrawRule, gt as DEFAULT_GENERIC_POLYGON_OPTIONS, h as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, hn as dynamicPointDrawRule, ht as DEFAULT_GENERIC_RECTANGLE_OPTIONS, i as CONTROL_MEASURE_METADATA, in as rectangleDrawRule, it as DEFAULT_COVER_OPTIONS, j as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, jn as calculateMetrics, jt as DEFAULT_BATTLE_POSITION_OPTIONS, k as DEFAULT_SCREEN_OPTIONS, kn as snapToMidpointPerpendicular, kt as DEFAULT_BLOCK_OPTIONS, l as listControlMeasureMetadata, ln as line24DrawRule, lt as DEFAULT_CLEAR_OPTIONS, m as DEFAULT_STRONG_POINT_OPTIONS, mn as attackByFireDrawRule, mt as DEFAULT_GENERIC_SECTOR_OPTIONS, n as resolveStyleHints, nn as DEFAULT_AMBUSH_OPTIONS, nt as DEFAULT_DISENGAGE_OPTIONS, o as getControlMeasureMetadata, on as supportByFireDrawRule, ot as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, p as DEFAULT_RETAIN_OPTIONS, pn as ambushDrawRule, pt as DEFAULT_GENERIC_TEXT_OPTIONS, q as DEFAULT_PHASE_LINE_OPTIONS, qt as resolveAmplifierPlacement, r as CONTROL_MEASURE_IDS, rn as DEFAULT_AIRBORNE_ATTACK_OPTIONS, rt as DEFAULT_DELAY_OPTIONS, s as getControlMeasureMetadataByValue, sn as line27DrawRule, st as DEFAULT_COUNTERATTACK_OPTIONS, t as renderControlMeasure, tt as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, u as DEFAULT_TURNING_MOVEMENT_OPTIONS, un as line23DrawRule, ut as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, v as DEFAULT_PICKUP_ZONE_OPTIONS, vn as point12DrawRule, vt as DEFAULT_GENERIC_CIRCLE_OPTIONS, w as DEFAULT_LANDING_ZONE_OPTIONS, wn as area27DrawRule, wt as DEFAULT_GENERIC_C2_LINE_OPTIONS, x as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, xn as blockDrawRule, xt as DEFAULT_BYPASS_OPTIONS, y as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, yn as penetrateDrawRule, yt as DEFAULT_CLASSIC_ARROW_OPTIONS, z as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, zn as roundToFixed, zt as DEFAULT_ENGAGEMENT_AREA_OPTIONS } from "./renderControlMeasure-
|
|
1
|
+
import { $ as DEFAULT_DISRUPT_OPTIONS, $t as DEFAULT_STROKE_DASH_CSS_PIXELS, A as DEFAULT_RETIRE_OPTIONS, An as createBaselineFrame, At as DEFAULT_CONTAIN_OPTIONS, B as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Bt as DEFAULT_AREA_DEFENSE_OPTIONS, C as DEFAULT_MAIN_ATTACK_OPTIONS, Cn as containDrawRule, Ct as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, D as DEFAULT_WITHDRAW_OPTIONS, Dn as getMidpointPerpendicularSignedDistance, Dt as DEFAULT_BOUNDARY_OPTIONS, E as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, En as createMidpointPerpendicularDrawRule, Et as DEFAULT_LIGHT_LINE_OPTIONS, F as DEFAULT_FORTIFIED_LINE_OPTIONS, Fn as sphericalBearing, Ft as DEFAULT_ANTITANK_DITCH_OPTIONS, G as DEFAULT_HOLDING_LINE_OPTIONS, Gt as canonicalTextAmplifierKey, H as DEFAULT_HANDOVER_LINE_OPTIONS, Ht as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, I as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, In as unproject, It as DEFAULT_ASSEMBLY_AREA_OPTIONS, J as DEFAULT_FLOT_OPTIONS, Jt as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, K as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, Kt as normalizeTextAmplifiers, L as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Ln as EPSILON, Lt as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, M as DEFAULT_PENETRATE_OPTIONS, Mn as computeInitialWidthPoint, Mt as DEFAULT_ATTACK_HELICOPTER_OPTIONS, N as DEFAULT_FRONTAL_ATTACK_OPTIONS, Nn as haversineDistance, Nt as DEFAULT_ATTACK_BY_FIRE_OPTIONS, O as DEFAULT_SEIZE_OPTIONS, On as pointOnMidpointPerpendicularAxis, Ot as DEFAULT_BLOCK_ARROW_OPTIONS, P as DEFAULT_FORTIFIED_AREA_OPTIONS, Pn as project, Pt as DEFAULT_ANTITANK_WALL_OPTIONS, Q as DEFAULT_ENCIRCLEMENT_OPTIONS, Qt as DEFAULT_PORTRAYAL, R as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Rn as getMetersPerPixel, Rt as DEFAULT_MOBILE_DEFENSE_OPTIONS, S as DEFAULT_MINEFIELD_OPTIONS, Sn as centerRadiusDrawRule, St as DEFAULT_BREACH_OPTIONS, T as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Tn as computeDefaultMidpointPerpendicularPoint, Tt as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, U as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Ut as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, V as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Vt as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, W as DEFAULT_RELEASE_LINE_OPTIONS, Wt as TEXT_AMPLIFIER_FIELDS, X as DEFAULT_FIX_OPTIONS, Xt as DEFAULT_LINE_CAP, Y as DEFAULT_FIX_MISSION_TASK_OPTIONS, Yt as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Z as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Zt as DEFAULT_LINE_JOIN, _ as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, _n as staticPointDrawRule, _t as DEFAULT_GENERIC_LINE_OPTIONS, a as DEFINITIONS, an as axis1DrawRule, at as DEFAULT_TACTICAL_ARROW_OPTIONS, b as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, bn as disruptDrawRule, bt as DEFAULT_CANALIZE_OPTIONS, c as getDefaultOptions, cn as line26DrawRule, ct as DEFAULT_SUPPORTING_ATTACK_OPTIONS, d as DEFAULT_TURN_OPTIONS, dn as turnDrawRule, dt as RADAR_SEARCH_DOCTRINE_FILL_COLOR, en as DEFAULT_STROKE_WIDTH_CSS_PIXELS, et as DEFAULT_GUARD_OPTIONS, f as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, fn as line1DrawRule, ft as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, g as SECONDARY_DIRECTION_OF_FIRE_DASH, gn as sectorDrawRule, gt as DEFAULT_GENERIC_POLYGON_OPTIONS, h as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, hn as dynamicPointDrawRule, ht as DEFAULT_GENERIC_RECTANGLE_OPTIONS, i as CONTROL_MEASURE_METADATA, in as rectangleDrawRule, it as DEFAULT_COVER_OPTIONS, j as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, jn as calculateMetrics, jt as DEFAULT_BATTLE_POSITION_OPTIONS, k as DEFAULT_SCREEN_OPTIONS, kn as snapToMidpointPerpendicular, kt as DEFAULT_BLOCK_OPTIONS, l as listControlMeasureMetadata, ln as line24DrawRule, lt as DEFAULT_CLEAR_OPTIONS, m as DEFAULT_STRONG_POINT_OPTIONS, mn as attackByFireDrawRule, mt as DEFAULT_GENERIC_SECTOR_OPTIONS, n as resolveStyleHints, nn as DEFAULT_AMBUSH_OPTIONS, nt as DEFAULT_DISENGAGE_OPTIONS, o as getControlMeasureMetadata, on as supportByFireDrawRule, ot as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, p as DEFAULT_RETAIN_OPTIONS, pn as ambushDrawRule, pt as DEFAULT_GENERIC_TEXT_OPTIONS, q as DEFAULT_PHASE_LINE_OPTIONS, qt as resolveAmplifierPlacement, r as CONTROL_MEASURE_IDS, rn as DEFAULT_AIRBORNE_ATTACK_OPTIONS, rt as DEFAULT_DELAY_OPTIONS, s as getControlMeasureMetadataByValue, sn as line27DrawRule, st as DEFAULT_COUNTERATTACK_OPTIONS, t as renderControlMeasure, tt as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, u as DEFAULT_TURNING_MOVEMENT_OPTIONS, un as line23DrawRule, ut as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, v as DEFAULT_PICKUP_ZONE_OPTIONS, vn as point12DrawRule, vt as DEFAULT_GENERIC_CIRCLE_OPTIONS, w as DEFAULT_LANDING_ZONE_OPTIONS, wn as area27DrawRule, wt as DEFAULT_GENERIC_C2_LINE_OPTIONS, x as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, xn as blockDrawRule, xt as DEFAULT_BYPASS_OPTIONS, y as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, yn as penetrateDrawRule, yt as DEFAULT_CLASSIC_ARROW_OPTIONS, z as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, zn as roundToFixed, zt as DEFAULT_ENGAGEMENT_AREA_OPTIONS } from "./renderControlMeasure-YkkjLyTx.mjs";
|
|
2
2
|
import { FILL_PATTERN_DEFINITIONS, NON_SOLID_FILL_PATTERNS, getFillPatternDefinition } from "./patterns.mjs";
|
|
3
3
|
//#region src/metadata.ts
|
|
4
4
|
const PARAMETER_PRESENTATION_TIERS = [
|
package/dist/preview/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { et as ControlMeasureId, ga as TextAmplifiers } from "../index-
|
|
1
|
+
import { et as ControlMeasureId, ga as TextAmplifiers } from "../index-BzMR6vIE.mjs";
|
|
2
2
|
import { f as FillPattern } from "../patterns-CcQmmOuJ.mjs";
|
|
3
3
|
import { FeatureCollection, Geometry } from "geojson";
|
|
4
4
|
|
package/dist/preview/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as DEFINITIONS, t as renderControlMeasure } from "../renderControlMeasure-
|
|
1
|
+
import { a as DEFINITIONS, t as renderControlMeasure } from "../renderControlMeasure-YkkjLyTx.mjs";
|
|
2
2
|
import { FILL_PATTERN_DEFINITIONS, NON_SOLID_FILL_PATTERNS } from "../patterns.mjs";
|
|
3
3
|
//#region src/preview/index.ts
|
|
4
4
|
/** Side length (SVG units) of the repeating non-mine tile in {@link PREVIEW_FILL_PATTERNS}. */
|
|
@@ -280,7 +280,7 @@ const SHAFT_WIDTH_OPTION_HANDLE_ID = "shaft-width";
|
|
|
280
280
|
/**
|
|
281
281
|
* Creates the definition-owned rear-/shaft-width handle pair shared by every
|
|
282
282
|
* variable-width arrow body. Callers supply only how their own geometry maps
|
|
283
|
-
* onto {@link WidthHandleGeometry}; placement (the two ends of the
|
|
283
|
+
* onto {@link WidthHandleGeometry}; placement (the two ends of the right edge)
|
|
284
284
|
* and the drag math (perpendicular distance from the dragged point to the
|
|
285
285
|
* matching centerline segment, over the reference half-width) live here once.
|
|
286
286
|
*/
|
|
@@ -288,15 +288,15 @@ function createWidthOptionHandles(config) {
|
|
|
288
288
|
return {
|
|
289
289
|
get(controlPoints, options) {
|
|
290
290
|
const geometry = config.geometry(controlPoints, options);
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
if (!
|
|
291
|
+
const rearRight = geometry?.rightEdge[0];
|
|
292
|
+
const neckRight = geometry?.rightEdge.at(-1);
|
|
293
|
+
if (!rearRight || !neckRight) return [];
|
|
294
294
|
return [{
|
|
295
295
|
id: REAR_WIDTH_OPTION_HANDLE_ID,
|
|
296
|
-
position: unproject(
|
|
296
|
+
position: unproject(rearRight[0], rearRight[1])
|
|
297
297
|
}, {
|
|
298
298
|
id: SHAFT_WIDTH_OPTION_HANDLE_ID,
|
|
299
|
-
position: unproject(
|
|
299
|
+
position: unproject(neckRight[0], neckRight[1])
|
|
300
300
|
}];
|
|
301
301
|
},
|
|
302
302
|
drag({ controlPoints, options, handleId, position }) {
|
|
@@ -328,7 +328,7 @@ function createVariableWidthAttackOptionHandles(resolveCoordinates = (points) =>
|
|
|
328
328
|
if (!geometry || !outerLeft) return null;
|
|
329
329
|
return {
|
|
330
330
|
spine: geometry.shaftCenterline,
|
|
331
|
-
|
|
331
|
+
rightEdge: geometry.shaftRight,
|
|
332
332
|
referenceHalfWidth: vecMag(vecSub(outerLeft, geometry.ptBase))
|
|
333
333
|
};
|
|
334
334
|
},
|
|
@@ -1697,6 +1697,16 @@ const ECHELON_PARAM_OPTIONS = [{
|
|
|
1697
1697
|
label: spec.label,
|
|
1698
1698
|
value
|
|
1699
1699
|
}))];
|
|
1700
|
+
/**
|
|
1701
|
+
* Effective echelon glyph height in meters. Screen-anchored when a pixel size
|
|
1702
|
+
* is supplied with a live resolution; ground-anchored (meters) otherwise.
|
|
1703
|
+
* Clamped strictly positive.
|
|
1704
|
+
*/
|
|
1705
|
+
function resolveEchelonHeight(echelonSize, echelonSizePixels, metersPerPixel) {
|
|
1706
|
+
let h = echelonSize;
|
|
1707
|
+
if (echelonSizePixels !== void 0 && metersPerPixel !== void 0 && metersPerPixel > 0) h = echelonSizePixels * metersPerPixel;
|
|
1708
|
+
return Math.max(EPSILON, h);
|
|
1709
|
+
}
|
|
1700
1710
|
function resolveEchelon(echelon) {
|
|
1701
1711
|
const key = echelon.trim().toLowerCase();
|
|
1702
1712
|
if (key.length === 0) return void 0;
|
|
@@ -2677,6 +2687,36 @@ function labelRotationAlong(dir) {
|
|
|
2677
2687
|
const rendered = -Math.atan2(dir[1], dir[0]);
|
|
2678
2688
|
return normalizeRadians(Math.PI - keepTextLeftToRight(rendered));
|
|
2679
2689
|
}
|
|
2690
|
+
const BOUNDARY_UNIT_LABEL_FIELDS = {
|
|
2691
|
+
unit1: {
|
|
2692
|
+
designator: "T",
|
|
2693
|
+
country: "AS"
|
|
2694
|
+
},
|
|
2695
|
+
unit2: {
|
|
2696
|
+
designator: "T1",
|
|
2697
|
+
country: "AS1"
|
|
2698
|
+
}
|
|
2699
|
+
};
|
|
2700
|
+
/** Resolves two echelon-unit rows from a caller-selected set of amplifiers. */
|
|
2701
|
+
function unitLabelsFromAmplifiers(amplifiers, fields = BOUNDARY_UNIT_LABEL_FIELDS) {
|
|
2702
|
+
return [{
|
|
2703
|
+
side: 1,
|
|
2704
|
+
designator: amplifiers[fields.unit1.designator] ?? "",
|
|
2705
|
+
country: amplifiers[fields.unit1.country] ?? ""
|
|
2706
|
+
}, {
|
|
2707
|
+
side: -1,
|
|
2708
|
+
designator: amplifiers[fields.unit2.designator] ?? "",
|
|
2709
|
+
country: amplifiers[fields.unit2.country] ?? ""
|
|
2710
|
+
}];
|
|
2711
|
+
}
|
|
2712
|
+
/** Text size shared by an echelon glyph and its associated unit labels. */
|
|
2713
|
+
function echelonUnitLabelSize(echelonHeight, echelonSizePixels, metersPerPixel) {
|
|
2714
|
+
const screenAnchored = echelonSizePixels !== void 0 && metersPerPixel !== void 0 && metersPerPixel > 0;
|
|
2715
|
+
return {
|
|
2716
|
+
properties: screenAnchored ? { textSizePixels: echelonSizePixels } : { textSizeMeters: echelonHeight },
|
|
2717
|
+
screenAnchored
|
|
2718
|
+
};
|
|
2719
|
+
}
|
|
2680
2720
|
/**
|
|
2681
2721
|
* Emits a single combined `T (AS)` label per unit side (APP-6/MIL-STD-2525):
|
|
2682
2722
|
* designator and country code share one text row rather than stacking.
|
|
@@ -2693,6 +2733,37 @@ function pushUnitLabels(out, frame, units) {
|
|
|
2693
2733
|
}
|
|
2694
2734
|
}
|
|
2695
2735
|
/**
|
|
2736
|
+
* Emits Boundary-style unit labels around echelon groups. Along-line groups
|
|
2737
|
+
* straddle the line; standard-orientation groups on north/south segments form
|
|
2738
|
+
* one row crossing it, anchored outward from the glyph.
|
|
2739
|
+
*/
|
|
2740
|
+
function pushEchelonUnitLabels(out, groups, units, echelonHeight, labelPadding, labelSize) {
|
|
2741
|
+
for (const { center, along, perp, rotateGroup, readingAxis, glyphWidth } of groups) {
|
|
2742
|
+
if (rotateGroup) {
|
|
2743
|
+
const sign = vecDot(perp, readingAxis) >= 0 ? 1 : -1;
|
|
2744
|
+
const clearance = glyphWidth / 2 + Math.max(0, labelPadding) * echelonHeight;
|
|
2745
|
+
pushUnitLabels(out, {
|
|
2746
|
+
center,
|
|
2747
|
+
perp: vecScale(readingAxis, sign),
|
|
2748
|
+
offset: clearance,
|
|
2749
|
+
rotation: labelRotationAlong(readingAxis),
|
|
2750
|
+
labelSize
|
|
2751
|
+
}, units.map((unit) => ({
|
|
2752
|
+
...unit,
|
|
2753
|
+
textAnchor: unit.side === sign ? "start" : "end"
|
|
2754
|
+
})));
|
|
2755
|
+
continue;
|
|
2756
|
+
}
|
|
2757
|
+
pushUnitLabels(out, {
|
|
2758
|
+
center,
|
|
2759
|
+
perp,
|
|
2760
|
+
offset: (.45 + Math.max(0, labelPadding)) * echelonHeight,
|
|
2761
|
+
rotation: labelRotationAlong(along),
|
|
2762
|
+
labelSize
|
|
2763
|
+
}, units);
|
|
2764
|
+
}
|
|
2765
|
+
}
|
|
2766
|
+
/**
|
|
2696
2767
|
* Walks `verts` (projected meters) into non-degenerate {@link LineSegment}s,
|
|
2697
2768
|
* skipping coincident vertices (ADR-0014, silent) the same way Boundary's
|
|
2698
2769
|
* gap-carving does. Empty or fully-degenerate input yields `totalLength: 0`
|
|
@@ -2725,6 +2796,15 @@ function clampLinePosition(value, fallback) {
|
|
|
2725
2796
|
return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : fallback;
|
|
2726
2797
|
}
|
|
2727
2798
|
/**
|
|
2799
|
+
* Resolves a label/group repetition count to a positive whole number. Takes
|
|
2800
|
+
* `unknown` because the params panel's `visibleWhen` callbacks receive loosely
|
|
2801
|
+
* typed options; non-finite input falls back to a single group.
|
|
2802
|
+
*/
|
|
2803
|
+
function resolveLabelRepetitions(value) {
|
|
2804
|
+
const numeric = Number(value ?? 1);
|
|
2805
|
+
return Number.isFinite(numeric) ? Math.max(1, Math.round(numeric)) : 1;
|
|
2806
|
+
}
|
|
2807
|
+
/**
|
|
2728
2808
|
* Resolves the point at `fraction` (clamped to `[0, 1]`) of `totalLength`
|
|
2729
2809
|
* along `segments`, walking cumulative arc length exactly like Boundary's
|
|
2730
2810
|
* label-group placement: the segment containing the target distance absorbs
|
|
@@ -3906,16 +3986,6 @@ function pointOnRing(segs, target) {
|
|
|
3906
3986
|
seg
|
|
3907
3987
|
};
|
|
3908
3988
|
}
|
|
3909
|
-
/**
|
|
3910
|
-
* Effective echelon glyph height in meters. Screen-anchored when a pixel size
|
|
3911
|
-
* is supplied with a live resolution; ground-anchored (meters) otherwise.
|
|
3912
|
-
* Clamped strictly positive.
|
|
3913
|
-
*/
|
|
3914
|
-
function resolveEchelonHeight(echelonSize, echelonSizePixels, metersPerPixel) {
|
|
3915
|
-
let h = echelonSize;
|
|
3916
|
-
if (echelonSizePixels !== void 0 && metersPerPixel !== void 0 && metersPerPixel > 0) h = echelonSizePixels * metersPerPixel;
|
|
3917
|
-
return Math.max(EPSILON, h);
|
|
3918
|
-
}
|
|
3919
3989
|
/** Wraps `x` into `[0, 1)`, treating `x` as a fraction (matches the arc-length wrap below). */
|
|
3920
3990
|
function wrap01(x) {
|
|
3921
3991
|
return (x % 1 + 1) % 1;
|
|
@@ -7110,6 +7180,7 @@ function calculateBlockArrowGeometry(coordinates, options) {
|
|
|
7110
7180
|
ring,
|
|
7111
7181
|
spine,
|
|
7112
7182
|
leftSide,
|
|
7183
|
+
rightSide,
|
|
7113
7184
|
pathLength
|
|
7114
7185
|
};
|
|
7115
7186
|
}
|
|
@@ -7134,7 +7205,7 @@ const BLOCK_ARROW = defineControlMeasure({
|
|
|
7134
7205
|
if (!geometry) return null;
|
|
7135
7206
|
return {
|
|
7136
7207
|
spine: geometry.spine,
|
|
7137
|
-
|
|
7208
|
+
rightEdge: geometry.rightSide,
|
|
7138
7209
|
referenceHalfWidth: geometry.pathLength / 2
|
|
7139
7210
|
};
|
|
7140
7211
|
},
|
|
@@ -7168,70 +7239,22 @@ function normalizeSmoothResolution$1(value) {
|
|
|
7168
7239
|
return Math.min(MAX_SMOOTH_RESOLUTION$1, Math.max(MIN_SMOOTH_RESOLUTION$1, Math.round(value)));
|
|
7169
7240
|
}
|
|
7170
7241
|
//#endregion
|
|
7171
|
-
//#region src/
|
|
7172
|
-
|
|
7173
|
-
|
|
7174
|
-
|
|
7175
|
-
|
|
7176
|
-
|
|
7177
|
-
|
|
7178
|
-
|
|
7179
|
-
|
|
7180
|
-
|
|
7181
|
-
echelonSizePixels: 16,
|
|
7182
|
-
echelonPadding: .3,
|
|
7183
|
-
labelRepetitions: 1,
|
|
7184
|
-
labelSpacing: 1,
|
|
7185
|
-
labelPosition: .5,
|
|
7186
|
-
labelPadding: .4,
|
|
7187
|
-
labelOrientation: "along",
|
|
7188
|
-
smooth: false,
|
|
7189
|
-
smoothResolution: DEFAULT_SMOOTH_RESOLUTION$4
|
|
7190
|
-
};
|
|
7191
|
-
const BOUNDARY_METADATA = {
|
|
7192
|
-
id: "boundary",
|
|
7193
|
-
name: "Boundary",
|
|
7194
|
-
description: "Delineates the area of responsibility between two adjacent units, labeled with the echelon and the designators of the units it separates.",
|
|
7195
|
-
entity: "Command and Control Lines",
|
|
7196
|
-
entityType: "Boundary",
|
|
7197
|
-
value: "110100",
|
|
7198
|
-
minCoordinates: 2,
|
|
7199
|
-
geometry: "line",
|
|
7200
|
-
geometryTypes: [
|
|
7201
|
-
"MultiLineString",
|
|
7202
|
-
"MultiPolygon",
|
|
7203
|
-
"Point"
|
|
7204
|
-
],
|
|
7205
|
-
paints: {
|
|
7206
|
-
stroke: true,
|
|
7207
|
-
fill: "fixed",
|
|
7208
|
-
text: true
|
|
7209
|
-
},
|
|
7210
|
-
drawRule: "Line1",
|
|
7211
|
-
params: [
|
|
7212
|
-
{
|
|
7213
|
-
key: "smooth",
|
|
7214
|
-
label: "Smooth",
|
|
7215
|
-
description: "Round the boundary's corners by curving it through the control points.",
|
|
7216
|
-
type: "boolean"
|
|
7217
|
-
},
|
|
7218
|
-
{
|
|
7219
|
-
key: "smoothResolution",
|
|
7220
|
-
presentationTier: "advanced",
|
|
7221
|
-
label: "Smooth resolution",
|
|
7222
|
-
description: "Number of samples per segment when smooth mode is enabled.",
|
|
7223
|
-
type: "number",
|
|
7224
|
-
min: 2,
|
|
7225
|
-
max: 64,
|
|
7226
|
-
step: 1,
|
|
7227
|
-
visibleWhen: (opts) => Boolean(opts.smooth)
|
|
7228
|
-
},
|
|
7242
|
+
//#region src/internal/line-echelon.ts
|
|
7243
|
+
/**
|
|
7244
|
+
* The echelon and group-distribution controls shared by the line measures that
|
|
7245
|
+
* stamp Field B onto their geometry (Boundary, Generic command and control
|
|
7246
|
+
* line). `subject` names the geometry in the user-facing copy ("line",
|
|
7247
|
+
* "boundary"). Callers spread these into their own `params` and add whatever
|
|
7248
|
+
* else they carry (e.g. Boundary's unit-label padding).
|
|
7249
|
+
*/
|
|
7250
|
+
function echelonLineParams(subject) {
|
|
7251
|
+
return [
|
|
7229
7252
|
{
|
|
7230
7253
|
key: "echelon",
|
|
7231
7254
|
presentationTier: "primary",
|
|
7232
7255
|
semanticRole: "doctrinal",
|
|
7233
7256
|
label: "Echelon",
|
|
7234
|
-
description:
|
|
7257
|
+
description: `Field B unit-size amplifier, drawn on the ${subject}`,
|
|
7235
7258
|
type: "enum",
|
|
7236
7259
|
options: ECHELON_PARAM_OPTIONS
|
|
7237
7260
|
},
|
|
@@ -7269,7 +7292,7 @@ const BOUNDARY_METADATA = {
|
|
|
7269
7292
|
key: "labelRepetitions",
|
|
7270
7293
|
presentationTier: "advanced",
|
|
7271
7294
|
label: "Label groups",
|
|
7272
|
-
description:
|
|
7295
|
+
description: `Number of label groups spaced evenly along the whole ${subject}`,
|
|
7273
7296
|
type: "number",
|
|
7274
7297
|
min: 1,
|
|
7275
7298
|
max: 5,
|
|
@@ -7279,7 +7302,7 @@ const BOUNDARY_METADATA = {
|
|
|
7279
7302
|
key: "labelPosition",
|
|
7280
7303
|
presentationTier: "advanced",
|
|
7281
7304
|
label: "Label position",
|
|
7282
|
-
description:
|
|
7305
|
+
description: `Position of the label group along the ${subject}, from the first point (0) to the last (1)`,
|
|
7283
7306
|
type: "number",
|
|
7284
7307
|
min: 0,
|
|
7285
7308
|
max: 1,
|
|
@@ -7296,7 +7319,122 @@ const BOUNDARY_METADATA = {
|
|
|
7296
7319
|
max: 2,
|
|
7297
7320
|
step: .05,
|
|
7298
7321
|
visibleWhen: (opts) => resolveLabelRepetitions(opts.labelRepetitions) > 1
|
|
7322
|
+
}
|
|
7323
|
+
];
|
|
7324
|
+
}
|
|
7325
|
+
/** A placement with nothing in it — the result for a degenerate line. */
|
|
7326
|
+
const EMPTY_LINE_ECHELON_PLACEMENT = {
|
|
7327
|
+
strokes: [],
|
|
7328
|
+
fills: [],
|
|
7329
|
+
gaps: [],
|
|
7330
|
+
groups: []
|
|
7331
|
+
};
|
|
7332
|
+
/**
|
|
7333
|
+
* Distributes `labelRepetitions` echelon groups along `verts` and builds the
|
|
7334
|
+
* glyph geometry for each. `spec` may be `undefined` — the groups are still
|
|
7335
|
+
* placed (so a caller can label them) but no glyph or gap is emitted.
|
|
7336
|
+
*/
|
|
7337
|
+
function placeEchelonsAlongLine(verts, spec, h, options) {
|
|
7338
|
+
const { labelRepetitions, labelPosition, defaultLabelPosition, labelSpacing, labelOrientation, echelonPadding } = options;
|
|
7339
|
+
const { segments, totalLength } = polylineSegments(verts);
|
|
7340
|
+
if (totalLength < 1e-6) return EMPTY_LINE_ECHELON_PLACEMENT;
|
|
7341
|
+
const reps = resolveLabelRepetitions(labelRepetitions);
|
|
7342
|
+
const singleGroupPosition = clampLinePosition(labelPosition, defaultLabelPosition);
|
|
7343
|
+
const strokes = [];
|
|
7344
|
+
const fills = [];
|
|
7345
|
+
const gaps = [];
|
|
7346
|
+
const groups = [];
|
|
7347
|
+
for (let k = 0; k < reps; k++) {
|
|
7348
|
+
const evenFraction = (k + 1) / (reps + 1);
|
|
7349
|
+
const fraction = Math.min(1, Math.max(0, reps === 1 ? singleGroupPosition : .5 + (evenFraction - .5) * labelSpacing));
|
|
7350
|
+
const target = fraction * totalLength;
|
|
7351
|
+
const { point: center, along, perp } = pointAlongPolyline(segments, totalLength, fraction);
|
|
7352
|
+
const rotateGroup = labelOrientation === "standard" && Math.abs(along[0]) < Math.abs(along[1]);
|
|
7353
|
+
const readingAxis = perp[0] >= 0 ? perp : vecScale(perp, -1);
|
|
7354
|
+
let glyphWidth = 0;
|
|
7355
|
+
if (spec) {
|
|
7356
|
+
const glyph = buildEchelonGlyph(center, rotateGroup ? readingAxis : along, rotateGroup ? [-readingAxis[1], readingAxis[0]] : perp, h, spec);
|
|
7357
|
+
glyphWidth = glyph.width;
|
|
7358
|
+
strokes.push(...glyph.strokes);
|
|
7359
|
+
fills.push(...glyph.fills);
|
|
7360
|
+
const halfGap = (rotateGroup ? h : glyphWidth) / 2 + Math.max(0, echelonPadding) * h;
|
|
7361
|
+
gaps.push({
|
|
7362
|
+
g0: target - halfGap,
|
|
7363
|
+
g1: target + halfGap
|
|
7364
|
+
});
|
|
7365
|
+
}
|
|
7366
|
+
groups.push({
|
|
7367
|
+
center,
|
|
7368
|
+
along,
|
|
7369
|
+
perp,
|
|
7370
|
+
rotateGroup,
|
|
7371
|
+
readingAxis,
|
|
7372
|
+
glyphWidth
|
|
7373
|
+
});
|
|
7374
|
+
}
|
|
7375
|
+
return {
|
|
7376
|
+
strokes,
|
|
7377
|
+
fills,
|
|
7378
|
+
gaps,
|
|
7379
|
+
groups
|
|
7380
|
+
};
|
|
7381
|
+
}
|
|
7382
|
+
//#endregion
|
|
7383
|
+
//#region src/generators/cm11-command-control-lines/boundary.ts
|
|
7384
|
+
const DEFAULT_SMOOTH_RESOLUTION$4 = 12;
|
|
7385
|
+
/** Default options for the Boundary control measure. */
|
|
7386
|
+
const DEFAULT_BOUNDARY_OPTIONS = {
|
|
7387
|
+
echelon: "battalion",
|
|
7388
|
+
echelonSize: 750,
|
|
7389
|
+
echelonSizePixels: 16,
|
|
7390
|
+
echelonPadding: .3,
|
|
7391
|
+
labelRepetitions: 1,
|
|
7392
|
+
labelSpacing: 1,
|
|
7393
|
+
labelPosition: .5,
|
|
7394
|
+
labelPadding: .4,
|
|
7395
|
+
labelOrientation: "along",
|
|
7396
|
+
smooth: false,
|
|
7397
|
+
smoothResolution: DEFAULT_SMOOTH_RESOLUTION$4
|
|
7398
|
+
};
|
|
7399
|
+
const BOUNDARY_METADATA = {
|
|
7400
|
+
id: "boundary",
|
|
7401
|
+
name: "Boundary",
|
|
7402
|
+
description: "Delineates the area of responsibility between two adjacent units, labeled with the echelon and the designators of the units it separates.",
|
|
7403
|
+
entity: "Command and Control Lines",
|
|
7404
|
+
entityType: "Boundary",
|
|
7405
|
+
value: "110100",
|
|
7406
|
+
minCoordinates: 2,
|
|
7407
|
+
geometry: "line",
|
|
7408
|
+
geometryTypes: [
|
|
7409
|
+
"MultiLineString",
|
|
7410
|
+
"MultiPolygon",
|
|
7411
|
+
"Point"
|
|
7412
|
+
],
|
|
7413
|
+
paints: {
|
|
7414
|
+
stroke: true,
|
|
7415
|
+
fill: "fixed",
|
|
7416
|
+
text: true
|
|
7417
|
+
},
|
|
7418
|
+
drawRule: "Line1",
|
|
7419
|
+
params: [
|
|
7420
|
+
{
|
|
7421
|
+
key: "smooth",
|
|
7422
|
+
label: "Smooth",
|
|
7423
|
+
description: "Round the boundary's corners by curving it through the control points.",
|
|
7424
|
+
type: "boolean"
|
|
7425
|
+
},
|
|
7426
|
+
{
|
|
7427
|
+
key: "smoothResolution",
|
|
7428
|
+
presentationTier: "advanced",
|
|
7429
|
+
label: "Smooth resolution",
|
|
7430
|
+
description: "Number of samples per segment when smooth mode is enabled.",
|
|
7431
|
+
type: "number",
|
|
7432
|
+
min: 2,
|
|
7433
|
+
max: 64,
|
|
7434
|
+
step: 1,
|
|
7435
|
+
visibleWhen: (opts) => Boolean(opts.smooth)
|
|
7299
7436
|
},
|
|
7437
|
+
...echelonLineParams("boundary"),
|
|
7300
7438
|
{
|
|
7301
7439
|
key: "labelPadding",
|
|
7302
7440
|
presentationTier: "advanced",
|
|
@@ -7362,80 +7500,21 @@ const BOUNDARY_METADATA = {
|
|
|
7362
7500
|
*/
|
|
7363
7501
|
function createBoundary(positions, options = {}, textAmplifiers = {}, context = {}) {
|
|
7364
7502
|
const { echelon = DEFAULT_BOUNDARY_OPTIONS.echelon, echelonSize = DEFAULT_BOUNDARY_OPTIONS.echelonSize, echelonSizePixels, echelonPadding = DEFAULT_BOUNDARY_OPTIONS.echelonPadding, metersPerPixel, labelRepetitions = DEFAULT_BOUNDARY_OPTIONS.labelRepetitions, labelSpacing = DEFAULT_BOUNDARY_OPTIONS.labelSpacing, labelPosition = DEFAULT_BOUNDARY_OPTIONS.labelPosition, labelPadding = DEFAULT_BOUNDARY_OPTIONS.labelPadding, labelOrientation = DEFAULT_BOUNDARY_OPTIONS.labelOrientation, smooth = DEFAULT_BOUNDARY_OPTIONS.smooth, smoothResolution = DEFAULT_BOUNDARY_OPTIONS.smoothResolution } = options;
|
|
7365
|
-
const
|
|
7366
|
-
const unit1Country = textAmplifiers.AS ?? "";
|
|
7367
|
-
const unit2Designator = textAmplifiers.T1 ?? "";
|
|
7368
|
-
const unit2Country = textAmplifiers.AS1 ?? "";
|
|
7369
|
-
let h = echelonSize;
|
|
7370
|
-
if (echelonSizePixels !== void 0 && metersPerPixel !== void 0 && metersPerPixel > 0) h = echelonSizePixels * metersPerPixel;
|
|
7371
|
-
h = Math.max(EPSILON, h);
|
|
7372
|
-
const reps = resolveLabelRepetitions(labelRepetitions);
|
|
7373
|
-
const singleGroupPosition = clampLinePosition(labelPosition, DEFAULT_BOUNDARY_OPTIONS.labelPosition);
|
|
7503
|
+
const h = resolveEchelonHeight(echelonSize, echelonSizePixels, metersPerPixel);
|
|
7374
7504
|
const spec = resolveEchelon(echelon);
|
|
7375
|
-
const
|
|
7376
|
-
const labelSize = screenAnchored ? { textSizePixels: echelonSizePixels } : { textSizeMeters: h };
|
|
7505
|
+
const { properties: labelSize, screenAnchored } = echelonUnitLabelSize(h, echelonSizePixels, metersPerPixel);
|
|
7377
7506
|
const rawVerts = positions.map((p) => project(p[0], p[1]));
|
|
7378
7507
|
const verts = smooth ? catmullRom(rawVerts, normalizeSmoothResolution$2(smoothResolution, DEFAULT_SMOOTH_RESOLUTION$4)) : rawVerts;
|
|
7379
|
-
const glyphStrokes = [];
|
|
7380
|
-
const glyphFills = [];
|
|
7381
7508
|
const labelFeatures = [];
|
|
7382
|
-
const gaps =
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
|
|
7388
|
-
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
along: frame.along,
|
|
7392
|
-
perp: frame.perp
|
|
7393
|
-
};
|
|
7394
|
-
const units = [{
|
|
7395
|
-
side: 1,
|
|
7396
|
-
designator: unit1Designator,
|
|
7397
|
-
country: unit1Country
|
|
7398
|
-
}, {
|
|
7399
|
-
side: -1,
|
|
7400
|
-
designator: unit2Designator,
|
|
7401
|
-
country: unit2Country
|
|
7402
|
-
}];
|
|
7403
|
-
const rotateGroup = labelOrientation === "standard" && Math.abs(seg.along[0]) < Math.abs(seg.along[1]);
|
|
7404
|
-
const readingAxis = seg.perp[0] >= 0 ? seg.perp : vecScale(seg.perp, -1);
|
|
7405
|
-
const glyphAlong = rotateGroup ? readingAxis : seg.along;
|
|
7406
|
-
const glyphPerp = rotateGroup ? [-readingAxis[1], readingAxis[0]] : seg.perp;
|
|
7407
|
-
let glyphWidth = 0;
|
|
7408
|
-
if (spec) {
|
|
7409
|
-
const { strokes, fills, width } = buildEchelonGlyph(center, glyphAlong, glyphPerp, h, spec);
|
|
7410
|
-
glyphWidth = width;
|
|
7411
|
-
glyphStrokes.push(...strokes);
|
|
7412
|
-
glyphFills.push(...fills);
|
|
7413
|
-
const halfGap = (rotateGroup ? h : width) / 2 + Math.max(0, echelonPadding) * h;
|
|
7414
|
-
gaps.push({
|
|
7415
|
-
g0: target - halfGap,
|
|
7416
|
-
g1: target + halfGap
|
|
7417
|
-
});
|
|
7418
|
-
}
|
|
7419
|
-
if (rotateGroup) {
|
|
7420
|
-
const sign = vecDot(seg.perp, readingAxis) >= 0 ? 1 : -1;
|
|
7421
|
-
const clearance = glyphWidth / 2 + Math.max(0, labelPadding) * h;
|
|
7422
|
-
units[0].textAnchor = sign > 0 ? "start" : "end";
|
|
7423
|
-
units[1].textAnchor = sign > 0 ? "end" : "start";
|
|
7424
|
-
pushUnitLabels(labelFeatures, {
|
|
7425
|
-
center,
|
|
7426
|
-
perp: vecScale(readingAxis, sign),
|
|
7427
|
-
offset: clearance,
|
|
7428
|
-
rotation: labelRotationAlong(readingAxis),
|
|
7429
|
-
labelSize
|
|
7430
|
-
}, units);
|
|
7431
|
-
} else pushUnitLabels(labelFeatures, {
|
|
7432
|
-
center,
|
|
7433
|
-
perp: seg.perp,
|
|
7434
|
-
offset: (.45 + Math.max(0, labelPadding)) * h,
|
|
7435
|
-
rotation: labelRotationAlong(seg.along),
|
|
7436
|
-
labelSize
|
|
7437
|
-
}, units);
|
|
7438
|
-
}
|
|
7509
|
+
const { strokes: glyphStrokes, fills: glyphFills, gaps, groups } = placeEchelonsAlongLine(verts, spec, h, {
|
|
7510
|
+
labelRepetitions,
|
|
7511
|
+
labelPosition,
|
|
7512
|
+
defaultLabelPosition: DEFAULT_BOUNDARY_OPTIONS.labelPosition,
|
|
7513
|
+
labelSpacing,
|
|
7514
|
+
labelOrientation,
|
|
7515
|
+
echelonPadding
|
|
7516
|
+
});
|
|
7517
|
+
pushEchelonUnitLabels(labelFeatures, groups, unitLabelsFromAmplifiers(textAmplifiers), h, labelPadding, labelSize);
|
|
7439
7518
|
const hostileLabelOptions = screenAnchored ? {
|
|
7440
7519
|
labelSizePixels: echelonSizePixels,
|
|
7441
7520
|
metersPerPixel,
|
|
@@ -7722,8 +7801,26 @@ const ENGINEER_WORK_LINE = defineControlMeasure({
|
|
|
7722
7801
|
});
|
|
7723
7802
|
//#endregion
|
|
7724
7803
|
//#region src/generators/cm11-command-control-lines/generic-c2-line.ts
|
|
7804
|
+
const GENERIC_C2_UNIT_LABEL_FIELDS = {
|
|
7805
|
+
unit1: {
|
|
7806
|
+
designator: "T1",
|
|
7807
|
+
country: "AS1"
|
|
7808
|
+
},
|
|
7809
|
+
unit2: {
|
|
7810
|
+
designator: "T2",
|
|
7811
|
+
country: "AS2"
|
|
7812
|
+
}
|
|
7813
|
+
};
|
|
7725
7814
|
/** Default options for the Generic command and control line. */
|
|
7726
7815
|
const DEFAULT_GENERIC_C2_LINE_OPTIONS = {
|
|
7816
|
+
echelon: "none",
|
|
7817
|
+
echelonSize: 750,
|
|
7818
|
+
echelonSizePixels: 16,
|
|
7819
|
+
echelonPadding: .3,
|
|
7820
|
+
labelRepetitions: 1,
|
|
7821
|
+
labelSpacing: 1,
|
|
7822
|
+
labelPosition: .5,
|
|
7823
|
+
labelOrientation: "along",
|
|
7727
7824
|
includePrefix: true,
|
|
7728
7825
|
smooth: false,
|
|
7729
7826
|
smoothResolution: 12
|
|
@@ -7731,22 +7828,42 @@ const DEFAULT_GENERIC_C2_LINE_OPTIONS = {
|
|
|
7731
7828
|
const GENERIC_C2_LINE_METADATA = {
|
|
7732
7829
|
id: "generic-c2-line",
|
|
7733
7830
|
name: "Generic command and control line",
|
|
7734
|
-
description: "Illustrative command-and-control-style line (not part of MIL-STD-2525E) carrying optional additional-information/designation text above it and an effective date-time-group window below it.",
|
|
7831
|
+
description: "Illustrative command-and-control-style line (not part of MIL-STD-2525E) carrying optional echelon glyphs, additional-information/designation text above it, and an effective date-time-group window below it.",
|
|
7735
7832
|
entity: "Command and Control Lines",
|
|
7736
7833
|
entityType: "Generic",
|
|
7737
7834
|
value: "110400",
|
|
7738
7835
|
minCoordinates: 2,
|
|
7739
7836
|
geometry: "line",
|
|
7740
|
-
geometryTypes: [
|
|
7837
|
+
geometryTypes: [
|
|
7838
|
+
"LineString",
|
|
7839
|
+
"MultiLineString",
|
|
7840
|
+
"MultiPolygon",
|
|
7841
|
+
"Point"
|
|
7842
|
+
],
|
|
7741
7843
|
paints: {
|
|
7742
7844
|
stroke: true,
|
|
7743
|
-
fill: "
|
|
7845
|
+
fill: "fixed",
|
|
7744
7846
|
text: true
|
|
7745
7847
|
},
|
|
7746
7848
|
drawRule: "Line1",
|
|
7747
7849
|
capturesLabelSize: true,
|
|
7748
7850
|
params: [
|
|
7749
7851
|
...SMOOTH_LINE_PARAMS,
|
|
7852
|
+
...echelonLineParams("line"),
|
|
7853
|
+
{
|
|
7854
|
+
key: "labelOrientation",
|
|
7855
|
+
presentationTier: "advanced",
|
|
7856
|
+
label: "Label orientation",
|
|
7857
|
+
description: "Orient the echelon along the line or perpendicular on mostly north-south segments.",
|
|
7858
|
+
type: "enum",
|
|
7859
|
+
options: [{
|
|
7860
|
+
value: "along",
|
|
7861
|
+
label: "Along the line"
|
|
7862
|
+
}, {
|
|
7863
|
+
value: "standard",
|
|
7864
|
+
label: "Standard (MIL-STD-2525E)"
|
|
7865
|
+
}]
|
|
7866
|
+
},
|
|
7750
7867
|
{
|
|
7751
7868
|
key: "phaseLineName",
|
|
7752
7869
|
presentationTier: "primary",
|
|
@@ -7789,6 +7906,30 @@ const GENERIC_C2_LINE_METADATA = {
|
|
|
7789
7906
|
description: "Field T — unique designation of the line, shown above it near each end.",
|
|
7790
7907
|
maxLength: 21
|
|
7791
7908
|
},
|
|
7909
|
+
{
|
|
7910
|
+
key: "T1",
|
|
7911
|
+
label: "Unit 1 designation",
|
|
7912
|
+
description: "Field T1 — designation of unit 1 on the left-of-travel side.",
|
|
7913
|
+
maxLength: 32
|
|
7914
|
+
},
|
|
7915
|
+
{
|
|
7916
|
+
key: "AS1",
|
|
7917
|
+
label: "Unit 1 country",
|
|
7918
|
+
description: "Field AS1 — country code of unit 1 on the left-of-travel side.",
|
|
7919
|
+
maxLength: 8
|
|
7920
|
+
},
|
|
7921
|
+
{
|
|
7922
|
+
key: "T2",
|
|
7923
|
+
label: "Unit 2 designation",
|
|
7924
|
+
description: "Field T2 — designation of unit 2 on the right-of-travel side.",
|
|
7925
|
+
maxLength: 32
|
|
7926
|
+
},
|
|
7927
|
+
{
|
|
7928
|
+
key: "AS2",
|
|
7929
|
+
label: "Unit 2 country",
|
|
7930
|
+
description: "Field AS2 — country code of unit 2 on the right-of-travel side.",
|
|
7931
|
+
maxLength: 8
|
|
7932
|
+
},
|
|
7792
7933
|
{
|
|
7793
7934
|
key: "W",
|
|
7794
7935
|
label: "Effective from (DTG)",
|
|
@@ -7814,19 +7955,66 @@ const GENERIC_C2_LINE_METADATA = {
|
|
|
7814
7955
|
* `base + perp·offset` and the other at `base − perp·offset`.
|
|
7815
7956
|
*/
|
|
7816
7957
|
function createGenericC2Line(positions, options = {}, textAmplifiers = {}, context = {}) {
|
|
7817
|
-
const { phaseLineName, includePrefix = true, smooth, smoothResolution, ...sizeOptions } = options;
|
|
7958
|
+
const { echelon = DEFAULT_GENERIC_C2_LINE_OPTIONS.echelon, echelonSize = DEFAULT_GENERIC_C2_LINE_OPTIONS.echelonSize, echelonSizePixels, echelonPadding = DEFAULT_GENERIC_C2_LINE_OPTIONS.echelonPadding, labelRepetitions = DEFAULT_GENERIC_C2_LINE_OPTIONS.labelRepetitions, labelSpacing = DEFAULT_GENERIC_C2_LINE_OPTIONS.labelSpacing, labelPosition = DEFAULT_GENERIC_C2_LINE_OPTIONS.labelPosition, labelOrientation = DEFAULT_GENERIC_C2_LINE_OPTIONS.labelOrientation, phaseLineName, includePrefix = true, smooth, smoothResolution, ...sizeOptions } = options;
|
|
7818
7959
|
const verts = smoothLineVerts(positions.map((p) => project(p[0], p[1])), {
|
|
7819
7960
|
smooth,
|
|
7820
7961
|
smoothResolution
|
|
7821
7962
|
}, 12);
|
|
7822
|
-
const features = [
|
|
7963
|
+
const features = [];
|
|
7964
|
+
const spec = resolveEchelon(echelon);
|
|
7965
|
+
const h = resolveEchelonHeight(echelonSize, echelonSizePixels, sizeOptions.metersPerPixel);
|
|
7966
|
+
const { strokes: glyphStrokes, fills: glyphFills, gaps, groups } = spec ? placeEchelonsAlongLine(verts, spec, h, {
|
|
7967
|
+
labelRepetitions,
|
|
7968
|
+
labelPosition,
|
|
7969
|
+
defaultLabelPosition: DEFAULT_GENERIC_C2_LINE_OPTIONS.labelPosition,
|
|
7970
|
+
labelSpacing,
|
|
7971
|
+
labelOrientation,
|
|
7972
|
+
echelonPadding
|
|
7973
|
+
}) : EMPTY_LINE_ECHELON_PLACEMENT;
|
|
7974
|
+
const gappedCoordinates = gaps.length > 0 ? buildGappedLine(verts, gaps) : [];
|
|
7975
|
+
if (gappedCoordinates.length > 0) features.push({
|
|
7976
|
+
type: "Feature",
|
|
7977
|
+
properties: { part: "generic-c2-line" },
|
|
7978
|
+
geometry: {
|
|
7979
|
+
type: "MultiLineString",
|
|
7980
|
+
coordinates: gappedCoordinates
|
|
7981
|
+
}
|
|
7982
|
+
});
|
|
7983
|
+
else if (gaps.length === 0) features.push({
|
|
7823
7984
|
type: "Feature",
|
|
7824
7985
|
properties: { part: "generic-c2-line" },
|
|
7825
7986
|
geometry: {
|
|
7826
7987
|
type: "LineString",
|
|
7827
7988
|
coordinates: smooth ? verts.map((v) => unproject(v[0], v[1])) : positions
|
|
7828
7989
|
}
|
|
7829
|
-
}
|
|
7990
|
+
});
|
|
7991
|
+
if (glyphStrokes.length > 0) features.push({
|
|
7992
|
+
type: "Feature",
|
|
7993
|
+
properties: { part: "echelon" },
|
|
7994
|
+
geometry: {
|
|
7995
|
+
type: "MultiLineString",
|
|
7996
|
+
coordinates: glyphStrokes
|
|
7997
|
+
}
|
|
7998
|
+
});
|
|
7999
|
+
if (glyphFills.length > 0) features.push({
|
|
8000
|
+
type: "Feature",
|
|
8001
|
+
properties: {
|
|
8002
|
+
part: "echelon",
|
|
8003
|
+
fill: true,
|
|
8004
|
+
style: SOLID_ACCENT_FILL
|
|
8005
|
+
},
|
|
8006
|
+
geometry: {
|
|
8007
|
+
type: "MultiPolygon",
|
|
8008
|
+
coordinates: glyphFills.map((ring) => [ring])
|
|
8009
|
+
}
|
|
8010
|
+
});
|
|
8011
|
+
if (Boolean(textAmplifiers.T1 || textAmplifiers.AS1 || textAmplifiers.T2 || textAmplifiers.AS2) && groups.length > 0) {
|
|
8012
|
+
const unitLabels = [];
|
|
8013
|
+
const units = unitLabelsFromAmplifiers(textAmplifiers, GENERIC_C2_UNIT_LABEL_FIELDS);
|
|
8014
|
+
const { properties: labelSize } = echelonUnitLabelSize(h, echelonSizePixels, sizeOptions.metersPerPixel);
|
|
8015
|
+
pushEchelonUnitLabels(unitLabels, groups, units, h, sizeOptions.labelPadding ?? .4, labelSize);
|
|
8016
|
+
features.push(...unitLabels);
|
|
8017
|
+
}
|
|
7830
8018
|
const above = [textAmplifiers.H, textAmplifiers.T].filter((v) => Boolean(v)).join(" ");
|
|
7831
8019
|
const below = [textAmplifiers.W, textAmplifiers.W1].filter((v) => Boolean(v)).join(" - ");
|
|
7832
8020
|
const trimmedPhaseLineName = phaseLineName?.trim();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 48" width="96" height="48" role="img" aria-label="Bridge or Gap"><rect x="0" y="0" width="96" height="48" rx="6" fill="#f8fafc" stroke="#e2e8f0"/><path d="M34.72 43.00 L40.71 37.01 L40.71 13.05 L34.72 7.06" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M61.28 43.00 L55.29 37.01 L55.29 13.05 L61.28 7.06" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><g transform="rotate(270.000 48.000 25.031)"><text x="48" y="25.031363088057898" fill="#1e293b" font-family="sans-serif" font-size="2.0588555277236815" font-weight="600" text-anchor="middle" dominant-baseline="central">T</text></g><g transform="rotate(0.000 47.692 5.000)"><text x="47.691632854479664" y="5" fill="#1e293b" font-family="sans-serif" font-size="2.0588555277236815" font-weight="600" text-anchor="end" dominant-baseline="central">W</text></g><g transform="rotate(0.000 48.308 5.000)"><text x="48.30836714552034" y="5" fill="#1e293b" font-family="sans-serif" font-size="2.0588555277236815" font-weight="600" text-anchor="start" dominant-baseline="central">W1</text></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 48" width="96" height="48" role="img" aria-label="Envelopment"><rect x="0" y="0" width="96" height="48" rx="6" fill="#f8fafc" stroke="#e2e8f0"/><path d="M5.00 35.88 L23.17 35.88" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M29.58 35.88 L40.64 35.88" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M40.64 35.88 L40.75 33.55 L41.09 31.24 L41.66 28.98 L42.44 26.78 L43.44 24.68 L44.64 22.68 L46.02 20.81 L47.59 19.08 L49.32 17.51 L51.19 16.12 L53.20 14.92 L55.30 13.93 L57.49 13.15 L59.75 12.58 L62.06 12.24 L64.39 12.12 L66.72 12.24 L69.03 12.58 L71.29 13.15 L73.49 13.93 L75.59 14.92 L77.59 16.12 L79.46 17.51 L81.19 19.08 L82.76 20.81 L84.15 22.68 L85.35 24.68 L86.34 26.78 L87.12 28.98 L87.69 31.24 L88.04 33.55 L88.15 35.88" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M91.00 31.13 L88.15 35.88 L85.30 31.13" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><g transform="rotate(0.000 26.381 35.878)"><text x="26.38121546961327" y="35.87845303867403" fill="#1e293b" font-family="sans-serif" font-size="7.68" font-weight="600" text-anchor="middle" dominant-baseline="central">E</text></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 48" width="96" height="48" role="img" aria-label="Infiltration"><rect x="0" y="0" width="96" height="48" rx="6" fill="#f8fafc" stroke="#e2e8f0"/><path d="M5.00 9.82 L18.76 9.82" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M25.64 9.82 L33.67 9.82" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M33.67 9.82 L34.84 9.88 L36.00 10.05 L37.14 10.34 L38.23 10.73 L39.29 11.24 L40.30 11.84 L41.24 12.54 L42.11 13.32 L42.90 14.19 L43.59 15.14 L44.20 16.14 L44.70 17.20 L45.10 18.30 L45.38 19.44 L45.55 20.59 L45.61 21.77" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M45.61 21.77 L45.67 22.94 L45.84 24.10 L46.13 25.24 L46.52 26.34 L47.03 27.40 L47.63 28.40 L48.32 29.35 L49.11 30.22 L49.98 31.00 L50.92 31.70 L51.93 32.30 L52.99 32.81 L54.09 33.20 L55.22 33.48 L56.38 33.66 L57.56 33.71" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M57.56 33.71 L91.00 33.71" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><path d="M82.08 29.25 L91.00 33.71 L82.08 38.18" fill="none" stroke="#1e293b" stroke-width="1.25" stroke-linejoin="round" stroke-linecap="round"/><g transform="rotate(360.000 22.200 9.824)"><text x="22.200000000000003" y="9.824333333333334" fill="#1e293b" font-family="sans-serif" font-size="7.68" font-weight="600" text-anchor="middle" dominant-baseline="central">IN</text></g></svg>
|
package/package.json
CHANGED