@orbat-mapper/control-measures 0.9.0 → 0.11.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/dist/{index-nz-U5HlG.d.mts → index-CwSQl5SE.d.mts} +42 -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-D9mfP_gv.mjs → renderControlMeasure-DJo_s-lN.mjs} +628 -28
- package/package.json +1 -1
|
@@ -14,6 +14,12 @@ interface ControlMeasureDrawRule {
|
|
|
14
14
|
readonly id: string;
|
|
15
15
|
readonly minimumUserPoints: number;
|
|
16
16
|
readonly canonicalPointCount?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Canonical control-point slots that are derived geometry rather than user
|
|
19
|
+
* controls. Edit hosts omit vertex handles for these indices while retaining
|
|
20
|
+
* the points in the generator input.
|
|
21
|
+
*/
|
|
22
|
+
readonly hiddenControlPointIndices?: readonly number[];
|
|
17
23
|
/**
|
|
18
24
|
* Number of raw (clicked + rubber-band) points at which `derive` can already
|
|
19
25
|
* produce a renderable canonical shape, so the draw controller renders a live
|
|
@@ -219,7 +225,7 @@ declare function normalizeTextAmplifiers(input: TextAmplifiers | undefined): Can
|
|
|
219
225
|
//#region src/metadata.d.ts
|
|
220
226
|
type ControlMeasureGeometryType = Geometry["type"];
|
|
221
227
|
type ControlMeasureGeometry = "point" | "line" | "area";
|
|
222
|
-
declare const DRAW_RULE_IDS: readonly ["Area1", "Area5", "Area6", "Area7", "Area8", "Area11", "Area12", "Area15", "Area17", "Area21", "Area27", "Axis1", "Line1", "Line3", "Line9", "Line10", "Line23", "Line24", "Line26", "Line27", "Line29", "Point1", "Point2", "Point12", "Point18", "Rectangle", "Sector"];
|
|
228
|
+
declare const DRAW_RULE_IDS: readonly ["Area1", "Area5", "Area6", "Area7", "Area8", "Area11", "Area12", "Area15", "Area17", "Area21", "Area27", "Axis1", "Line1", "Line3", "Line9", "Line10", "Line11", "Line23", "Line24", "Line26", "Line27", "Line29", "Line31", "Line32", "Point1", "Point2", "Point12", "Point18", "Rectangle", "Sector"];
|
|
223
229
|
type DrawRuleId = (typeof DRAW_RULE_IDS)[number];
|
|
224
230
|
declare const PARAMETER_PRESENTATION_TIERS: readonly ["primary", "standard", "advanced"];
|
|
225
231
|
type ParameterPresentationTier = (typeof PARAMETER_PRESENTATION_TIERS)[number];
|
|
@@ -2480,6 +2486,34 @@ declare const DEFAULT_DISRUPT_MISSION_TASK_OPTIONS: Required<Omit<DisruptMission
|
|
|
2480
2486
|
/** Generates the DISRUPT mission task symbol (341000). */
|
|
2481
2487
|
declare function createDisruptMissionTaskSymbol(coordinates: Position[], options?: DisruptMissionTaskOptions): FeatureCollection<MultiLineString | Point>;
|
|
2482
2488
|
//#endregion
|
|
2489
|
+
//#region src/generators/cm34-mission-tasks/envelopment.d.ts
|
|
2490
|
+
interface EnvelopmentOptions extends LabelSizeOptions, ArcResolutionOptions {
|
|
2491
|
+
/** Arrowhead depth as a ratio of the arc diameter. */
|
|
2492
|
+
arrowheadLengthRatio?: number;
|
|
2493
|
+
/** Arrowhead base width as a ratio of the arc diameter. */
|
|
2494
|
+
arrowheadWidthRatio?: number;
|
|
2495
|
+
/** Position of the E label along the straight portion, from PT. 1 to PT. 2. */
|
|
2496
|
+
labelPosition?: number;
|
|
2497
|
+
/** Gap around the E label as a ratio of the straight portion. */
|
|
2498
|
+
labelGapRatio?: number;
|
|
2499
|
+
}
|
|
2500
|
+
/** Generates the Envelopment mission task symbol (343500). */
|
|
2501
|
+
declare function createEnvelopment(coordinates: Position[], options?: EnvelopmentOptions): FeatureCollection<MultiLineString | Point>;
|
|
2502
|
+
//#endregion
|
|
2503
|
+
//#region src/generators/cm34-mission-tasks/infiltration.d.ts
|
|
2504
|
+
interface InfiltrationOptions extends LabelSizeOptions, ArcResolutionOptions {
|
|
2505
|
+
/** Arrowhead depth as a ratio of the Point 1–Point 3 span. */
|
|
2506
|
+
arrowheadLengthRatio?: number;
|
|
2507
|
+
/** Arrowhead base width as a ratio of the Point 1–Point 3 span. */
|
|
2508
|
+
arrowheadWidthRatio?: number;
|
|
2509
|
+
/** Position of the IN label along the initial straight portion. */
|
|
2510
|
+
labelPosition?: number;
|
|
2511
|
+
/** Gap around the IN label as a ratio of the initial straight portion. */
|
|
2512
|
+
labelGapRatio?: number;
|
|
2513
|
+
}
|
|
2514
|
+
/** Generates the Infiltration mission task symbol (343800). */
|
|
2515
|
+
declare function createInfiltration(coordinates: Position[], options?: InfiltrationOptions): FeatureCollection<MultiLineString | Point>;
|
|
2516
|
+
//#endregion
|
|
2483
2517
|
//#region src/generators/cm34-mission-tasks/guard.d.ts
|
|
2484
2518
|
type GuardOptions = SecurityTaskOptions;
|
|
2485
2519
|
declare const DEFAULT_GUARD_OPTIONS: Required<Omit<SecurityTaskOptions, "labelSize" | "labelSizePixels">>;
|
|
@@ -2754,6 +2788,10 @@ declare const DEFAULT_BLOCK_OPTIONS: BlockOptions;
|
|
|
2754
2788
|
*/
|
|
2755
2789
|
declare function createBlock(coordinates: Position[], _options?: BlockOptions): FeatureCollection<LineString>;
|
|
2756
2790
|
//#endregion
|
|
2791
|
+
//#region src/generators/cm27-protection-areas/bridge-or-gap.d.ts
|
|
2792
|
+
type BridgeOrGapOptions = LabelSizeOptions;
|
|
2793
|
+
declare function createBridgeOrGap(coordinates: Position[], options?: BridgeOrGapOptions, textAmplifiers?: CanonicalTextAmplifiers): FeatureCollection<LineString | Point>;
|
|
2794
|
+
//#endregion
|
|
2757
2795
|
//#region src/generators/cm27-protection-areas/disrupt.d.ts
|
|
2758
2796
|
interface DisruptOptions {
|
|
2759
2797
|
middleArrowLengthRatio?: number;
|
|
@@ -3017,6 +3055,8 @@ declare const DEFINITIONS: {
|
|
|
3017
3055
|
delay: ControlMeasureDefinition<"delay", typeof createDelaySymbol>;
|
|
3018
3056
|
disengage: ControlMeasureDefinition<"disengage", typeof createDisengageSymbol>;
|
|
3019
3057
|
"disrupt-mission-task": ControlMeasureDefinition<"disrupt-mission-task", typeof createDisruptMissionTaskSymbol>;
|
|
3058
|
+
envelopment: ControlMeasureDefinition<"envelopment", typeof createEnvelopment>;
|
|
3059
|
+
infiltration: ControlMeasureDefinition<"infiltration", typeof createInfiltration>;
|
|
3020
3060
|
guard: ControlMeasureDefinition<"guard", typeof createGuardSymbol>;
|
|
3021
3061
|
isolate: ControlMeasureDefinition<"isolate", typeof createIsolateSymbol>;
|
|
3022
3062
|
penetrate: ControlMeasureDefinition<"penetrate", typeof createPenetrateSymbol>;
|
|
@@ -3034,6 +3074,7 @@ declare const DEFINITIONS: {
|
|
|
3034
3074
|
"frontal-attack": ControlMeasureDefinition<"frontal-attack", typeof createFrontalAttack>;
|
|
3035
3075
|
"turning-movement": ControlMeasureDefinition<"turning-movement", typeof createTurningMovement>;
|
|
3036
3076
|
block: ControlMeasureDefinition<"block", typeof createBlock>;
|
|
3077
|
+
"bridge-or-gap": ControlMeasureDefinition<"bridge-or-gap", typeof createBridgeOrGap>;
|
|
3037
3078
|
disrupt: ControlMeasureDefinition<"disrupt", typeof createDisrupt>;
|
|
3038
3079
|
fix: ControlMeasureDefinition<"fix", typeof createFix>;
|
|
3039
3080
|
"fix-mission-task": ControlMeasureDefinition<"fix-mission-task", typeof createFixMissionTaskSymbol>;
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { $ as ControlMeasureKind, $i as TextAmplifierDescriptor, $n as DEFAULT_AIRBORNE_ATTACK_OPTIONS, $r as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, $t as DEFAULT_DISENGAGE_OPTIONS, A as BaselineFrame, Ai as BoundaryOptions, An as BattleHandoverLineOptions, Ar as DEFAULT_PICKUP_ZONE_OPTIONS, At as FortifiedLineOptions, B as toSimpleStyle, Bi as DEFAULT_STROKE_WIDTH_CSS_PIXELS, Bn as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Br as MobileDefenseOptions, Bt as SeizeOptions, C as area27DrawRule, Ci as LightLineOptions, Cn as ProbableLineOfDeploymentOptions, Cr as SupportingAttackOptions, Ct as DEFAULT_TURNING_MOVEMENT_OPTIONS, D as getMidpointPerpendicularSignedDistance, Di as project, Dn as LineOfDepartureOptions, Dr as computeInitialWidthPoint, Dt as DEFAULT_FORTIFIED_AREA_OPTIONS, E as createMidpointPerpendicularDrawRule, Ei as haversineDistance, En as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, Er as calculateMetrics, Et as FrontalAttackOptions, F as EPSILON, Fi as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Fn as ReleaseLineOptions, Fr as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Ft as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, G as RenderOptions, Gi as ControlMeasureGeometry, Gn as FLOTOptions, Gr as DEFAULT_ENCIRCLEMENT_OPTIONS, Gt as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, H as applyBoxTransformOptions, Hi as MeasureTextRequest, Hn as DEFAULT_PHASE_LINE_OPTIONS, Hr as EngagementAreaOptions, Ht as ScreenOptions, I as getMetersPerPixel, Ii as DEFAULT_LINE_CAP, In as DEFAULT_HOLDING_LINE_OPTIONS, Ir as JointTacticalActionAreaOptions, It as WithdrawUnderPressureOptions, J as cloneControlMeasure, Ji as ControlMeasurePaintCapability, Jn as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, Jr as FinalProtectiveFireOptions, Jt as PenetrateOptions, K as renderControlMeasure, Ki as ControlMeasureGeometryType, Kn as AttackByFireOptions, Kr as EncirclementOptions, Kt as RearwardPassageOfLinesOptions, L as roundToFixed, Li as DEFAULT_LINE_JOIN, Ln as HoldingLineOptions, Lr as AssemblyAreaOptions, Lt as DEFAULT_WITHDRAW_OPTIONS, M as BaselineFrameOptions, Mi as BoxTransformDelta, Mn as DEFAULT_HANDOVER_LINE_OPTIONS, Mr as MineType, Mt as DEFAULT_ANTITANK_WALL_OPTIONS, N as BaselineFrameOrigin, Ni as ControlMeasureRenderContext, Nn as HandoverLineOptions, Nr as DEFAULT_LANDING_ZONE_OPTIONS, Nt as AntitankDitchOptions, O as pointOnMidpointPerpendicularAxis, Oi as sphericalBearing, On as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Or as AreaOfOperationsOptions, Ot as FortifiedAreaOptions, P as createBaselineFrame, Pi as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, Pn as DEFAULT_RELEASE_LINE_OPTIONS, Pr as LandingZoneOptions, Pt as DEFAULT_ANTITANK_DITCH_OPTIONS, Q as ControlMeasureId, Qi as ParameterSemanticRole, Qn as AirborneAttackOptions, Qr as controlMeasureIdFromFeature, Qt as DisruptMissionTaskOptions, R as SimpleStyleProps, Ri as DEFAULT_PORTRAYAL, Rn as BridgeheadLineOptions, Rr as DEFAULT_ASSEMBLY_AREA_OPTIONS, Rt as WithdrawOptions, S as containDrawRule, Si as DEFAULT_LIGHT_LINE_OPTIONS, Sn as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Sr as DEFAULT_SUPPORTING_ATTACK_OPTIONS, St as DEFAULT_BLOCK_OPTIONS, T as computeDefaultMidpointPerpendicularPoint, Ti as Point2D, Tn as LineOfDepartureContactOptions, Tr as MainAttackOptions, Tt as DEFAULT_FRONTAL_ATTACK_OPTIONS, U as foldsBoxTransformOptions, Ui as MeasuredText, Un as PhaseLineOptions, Ur as AreaDefenseOptions, Ut as DEFAULT_RETIRE_OPTIONS, V as resolveStyleHints, Vi as LogicalTextStyle, Vn as ForwardEdgeOfBattleAreaOptions, Vr as DEFAULT_ENGAGEMENT_AREA_OPTIONS, Vt as DEFAULT_SCREEN_OPTIONS, W as freezeOrientationOptions, Wi as ControlMeasureFillCapability, Wn as DEFAULT_FLOT_OPTIONS, Wr as DEFAULT_AREA_DEFENSE_OPTIONS, Wt as RetireOptions, X as CONTROL_MEASURE_IDS, Xi as ParamDescriptor, Xn as AttackHelicopterOptions, Xr as FeaturePartProps, Xt as GuardOptions, Y as isKind, Yi as PARAMETER_PRESENTATION_TIERS, Yn as SupportByFireOptions, Yr as ControlMeasureRender, Yt as DEFAULT_GUARD_OPTIONS, Z as CONTROL_MEASURE_METADATA, Zi as ParameterPresentationTier, Zn as DEFAULT_ATTACK_HELICOPTER_OPTIONS, Zr as StyleHints, Zt as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, _ as point12DrawRule, _i as DEFAULT_BATTLE_POSITION_OPTIONS, _n as BreachOptions, _r as BlockArrowOptions, _t as DEFAULT_FIX_OPTIONS, a as axis1DrawRule, aa as CanonicalTextAmplifiers, ai as DirectionOfSupportingAttackOptions, an as DEFAULT_TACTICAL_ARROW_OPTIONS, ar as GenericTextOptions, at as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, b as disruptDrawRule, bi as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, bn as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, br as ClassicArrowOptions, bt as DisruptOptions, c as line26DrawRule, ca as TEXT_AMPLIFIER_FIELDS, ci as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, cn as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, cr as DEFAULT_GENERIC_CIRCLE_OPTIONS, ct as ObstacleBypassDifficultOptions, d as turnDrawRule, da as TextAmplifiers, di as RetainOptions, dn as ClearOptions, dr as GenericRectangleOptions, dt as DEFAULT_MINEFIELD_OPTIONS, ea as parameterPresentationTierRank, ei as SECONDARY_DIRECTION_OF_FIRE_DASH, en as DisengageOptions, er as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, et as OptionsByKind, f as line1DrawRule, fa as canonicalTextAmplifierKey, fi as DEFAULT_STRONG_POINT_OPTIONS, fn as DEFAULT_CLEAR_OPTIONS, fr as DEFAULT_GENERIC_POLYGON_OPTIONS, ft as MinefieldOptions, g as staticPointDrawRule, ga as ControlMeasureDrawRule, gi as BattlePositionOptions, gn as DEFAULT_BYPASS_OPTIONS, gr as BlockArrowHeadStyle, gt as FixMissionTaskOptions, h as dynamicPointDrawRule, ha as AnchorTransformEvent, hi as DEFAULT_CONTAIN_OPTIONS, hn as BypassOptions, hr as GenericLineOptions, ht as DEFAULT_FIX_MISSION_TASK_OPTIONS, i as rectangleDrawRule, ia as AmplifierPlacements, ii as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, in as DEFAULT_COVER_OPTIONS, ir as DEFAULT_GENERIC_TEXT_OPTIONS, it as listControlMeasureMetadata, j as BaselineFrameNormal, ji as DEFAULT_BOUNDARY_OPTIONS, jn as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, jr as PickupZoneOptions, jt as AntitankWallOptions, k as snapToMidpointPerpendicular, ki as unproject, kn as LimitOfAdvanceOptions, kr as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, kt as DEFAULT_FORTIFIED_LINE_OPTIONS, l as line24DrawRule, la as TextAmplifierField, li as DirectionOfAttackAviationOptions, ln as CounterattackOptions, lr as GenericCircleOptions, lt as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, m as attackByFireDrawRule, ma as resolveAmplifierPlacement, mi as ContainOptions, mn as DEFAULT_CANALIZE_OPTIONS, mr as DEFAULT_GENERIC_LINE_OPTIONS, mt as TurnOptions, n as DEFAULT_AMBUSH_OPTIONS, na as resolveParameterSemanticRole, ni as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, nn as DelayOptions, nr as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, nt as getControlMeasureMetadataByValue, o as supportByFireDrawRule, oa as GeneratedLabelKey, oi as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, on as TacticalArrowOptions, or as DEFAULT_GENERIC_SECTOR_OPTIONS, ot as ObstacleBypassImpossibleOptions, p as ambushDrawRule, pa as normalizeTextAmplifiers, pi as StrongPointOptions, pn as CanalizeOptions, pr as GenericPolygonOptions, pt as DEFAULT_TURN_OPTIONS, q as ControlMeasure, qi as ControlMeasureMetadata, qn as DEFAULT_ATTACK_BY_FIRE_OPTIONS, qr as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, qt as DEFAULT_PENETRATE_OPTIONS, r as sectorDrawRule, ra as AmplifierPlacement, ri as PrincipalDirectionOfFireOptions, rn as CoverOptions, rr as RadarSearchDoctrineOptions, rt as getDefaultOptions, s as line27DrawRule, sa as LabelPlacementOverride, si as DirectionOfMainAttackOptions, sn as CounterattackByFireOptions, sr as GenericSectorOptions, st as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, t as AmbushOptions, ta as resolveParameterPresentationTier, ti as SecondaryDirectionOfFireOptions, tn as DEFAULT_DELAY_OPTIONS, tr as RADAR_SEARCH_DOCTRINE_FILL_COLOR, tt as getControlMeasureMetadata, u as line23DrawRule, ua as TextAmplifierKey, ui as DEFAULT_RETAIN_OPTIONS, un as DEFAULT_COUNTERATTACK_OPTIONS, ur as DEFAULT_GENERIC_RECTANGLE_OPTIONS, ut as ObstacleBypassEasyOptions, v as penetrateDrawRule, vi as DEFAULT_GENERIC_C2_LINE_OPTIONS, vn as DEFAULT_BREACH_OPTIONS, vr as DEFAULT_BLOCK_ARROW_OPTIONS, vt as FixOptions, w as MidpointPerpendicularDrawRuleOptions, wi as LabelSizeOptions, wn as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, wr as DEFAULT_MAIN_ATTACK_OPTIONS, wt as TurningMovementOptions, x as blockDrawRule, xi as EngineerWorkLineOptions, xn as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, xr as DEFAULT_CLASSIC_ARROW_OPTIONS, xt as BlockOptions, y as centerRadiusDrawRule, yi as GenericC2LineOptions, yn as BlockMissionTaskOptions, yr as ClassicArrowHeadStyle, yt as DEFAULT_DISRUPT_OPTIONS, z as SimpleStyleRender, zi as DEFAULT_STROKE_DASH_CSS_PIXELS, zn as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, zr as DEFAULT_MOBILE_DEFENSE_OPTIONS, zt as DEFAULT_SEIZE_OPTIONS } from "./index-
|
|
1
|
+
import { $ as ControlMeasureKind, $i as TextAmplifierDescriptor, $n as DEFAULT_AIRBORNE_ATTACK_OPTIONS, $r as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, $t as DEFAULT_DISENGAGE_OPTIONS, A as BaselineFrame, Ai as BoundaryOptions, An as BattleHandoverLineOptions, Ar as DEFAULT_PICKUP_ZONE_OPTIONS, At as FortifiedLineOptions, B as toSimpleStyle, Bi as DEFAULT_STROKE_WIDTH_CSS_PIXELS, Bn as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Br as MobileDefenseOptions, Bt as SeizeOptions, C as area27DrawRule, Ci as LightLineOptions, Cn as ProbableLineOfDeploymentOptions, Cr as SupportingAttackOptions, Ct as DEFAULT_TURNING_MOVEMENT_OPTIONS, D as getMidpointPerpendicularSignedDistance, Di as project, Dn as LineOfDepartureOptions, Dr as computeInitialWidthPoint, Dt as DEFAULT_FORTIFIED_AREA_OPTIONS, E as createMidpointPerpendicularDrawRule, Ei as haversineDistance, En as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, Er as calculateMetrics, Et as FrontalAttackOptions, F as EPSILON, Fi as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Fn as ReleaseLineOptions, Fr as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Ft as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, G as RenderOptions, Gi as ControlMeasureGeometry, Gn as FLOTOptions, Gr as DEFAULT_ENCIRCLEMENT_OPTIONS, Gt as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, H as applyBoxTransformOptions, Hi as MeasureTextRequest, Hn as DEFAULT_PHASE_LINE_OPTIONS, Hr as EngagementAreaOptions, Ht as ScreenOptions, I as getMetersPerPixel, Ii as DEFAULT_LINE_CAP, In as DEFAULT_HOLDING_LINE_OPTIONS, Ir as JointTacticalActionAreaOptions, It as WithdrawUnderPressureOptions, J as cloneControlMeasure, Ji as ControlMeasurePaintCapability, Jn as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, Jr as FinalProtectiveFireOptions, Jt as PenetrateOptions, K as renderControlMeasure, Ki as ControlMeasureGeometryType, Kn as AttackByFireOptions, Kr as EncirclementOptions, Kt as RearwardPassageOfLinesOptions, L as roundToFixed, Li as DEFAULT_LINE_JOIN, Ln as HoldingLineOptions, Lr as AssemblyAreaOptions, Lt as DEFAULT_WITHDRAW_OPTIONS, M as BaselineFrameOptions, Mi as BoxTransformDelta, Mn as DEFAULT_HANDOVER_LINE_OPTIONS, Mr as MineType, Mt as DEFAULT_ANTITANK_WALL_OPTIONS, N as BaselineFrameOrigin, Ni as ControlMeasureRenderContext, Nn as HandoverLineOptions, Nr as DEFAULT_LANDING_ZONE_OPTIONS, Nt as AntitankDitchOptions, O as pointOnMidpointPerpendicularAxis, Oi as sphericalBearing, On as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Or as AreaOfOperationsOptions, Ot as FortifiedAreaOptions, P as createBaselineFrame, Pi as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, Pn as DEFAULT_RELEASE_LINE_OPTIONS, Pr as LandingZoneOptions, Pt as DEFAULT_ANTITANK_DITCH_OPTIONS, Q as ControlMeasureId, Qi as ParameterSemanticRole, Qn as AirborneAttackOptions, Qr as controlMeasureIdFromFeature, Qt as DisruptMissionTaskOptions, R as SimpleStyleProps, Ri as DEFAULT_PORTRAYAL, Rn as BridgeheadLineOptions, Rr as DEFAULT_ASSEMBLY_AREA_OPTIONS, Rt as WithdrawOptions, S as containDrawRule, Si as DEFAULT_LIGHT_LINE_OPTIONS, Sn as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Sr as DEFAULT_SUPPORTING_ATTACK_OPTIONS, St as DEFAULT_BLOCK_OPTIONS, T as computeDefaultMidpointPerpendicularPoint, Ti as Point2D, Tn as LineOfDepartureContactOptions, Tr as MainAttackOptions, Tt as DEFAULT_FRONTAL_ATTACK_OPTIONS, U as foldsBoxTransformOptions, Ui as MeasuredText, Un as PhaseLineOptions, Ur as AreaDefenseOptions, Ut as DEFAULT_RETIRE_OPTIONS, V as resolveStyleHints, Vi as LogicalTextStyle, Vn as ForwardEdgeOfBattleAreaOptions, Vr as DEFAULT_ENGAGEMENT_AREA_OPTIONS, Vt as DEFAULT_SCREEN_OPTIONS, W as freezeOrientationOptions, Wi as ControlMeasureFillCapability, Wn as DEFAULT_FLOT_OPTIONS, Wr as DEFAULT_AREA_DEFENSE_OPTIONS, Wt as RetireOptions, X as CONTROL_MEASURE_IDS, Xi as ParamDescriptor, Xn as AttackHelicopterOptions, Xr as FeaturePartProps, Xt as GuardOptions, Y as isKind, Yi as PARAMETER_PRESENTATION_TIERS, Yn as SupportByFireOptions, Yr as ControlMeasureRender, Yt as DEFAULT_GUARD_OPTIONS, Z as CONTROL_MEASURE_METADATA, Zi as ParameterPresentationTier, Zn as DEFAULT_ATTACK_HELICOPTER_OPTIONS, Zr as StyleHints, Zt as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, _ as point12DrawRule, _i as DEFAULT_BATTLE_POSITION_OPTIONS, _n as BreachOptions, _r as BlockArrowOptions, _t as DEFAULT_FIX_OPTIONS, a as axis1DrawRule, aa as CanonicalTextAmplifiers, ai as DirectionOfSupportingAttackOptions, an as DEFAULT_TACTICAL_ARROW_OPTIONS, ar as GenericTextOptions, at as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, b as disruptDrawRule, bi as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, bn as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, br as ClassicArrowOptions, bt as DisruptOptions, c as line26DrawRule, ca as TEXT_AMPLIFIER_FIELDS, ci as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, cn as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, cr as DEFAULT_GENERIC_CIRCLE_OPTIONS, ct as ObstacleBypassDifficultOptions, d as turnDrawRule, da as TextAmplifiers, di as RetainOptions, dn as ClearOptions, dr as GenericRectangleOptions, dt as DEFAULT_MINEFIELD_OPTIONS, ea as parameterPresentationTierRank, ei as SECONDARY_DIRECTION_OF_FIRE_DASH, en as DisengageOptions, er as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, et as OptionsByKind, f as line1DrawRule, fa as canonicalTextAmplifierKey, fi as DEFAULT_STRONG_POINT_OPTIONS, fn as DEFAULT_CLEAR_OPTIONS, fr as DEFAULT_GENERIC_POLYGON_OPTIONS, ft as MinefieldOptions, g as staticPointDrawRule, ga as ControlMeasureDrawRule, gi as BattlePositionOptions, gn as DEFAULT_BYPASS_OPTIONS, gr as BlockArrowHeadStyle, gt as FixMissionTaskOptions, h as dynamicPointDrawRule, ha as AnchorTransformEvent, hi as DEFAULT_CONTAIN_OPTIONS, hn as BypassOptions, hr as GenericLineOptions, ht as DEFAULT_FIX_MISSION_TASK_OPTIONS, i as rectangleDrawRule, ia as AmplifierPlacements, ii as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, in as DEFAULT_COVER_OPTIONS, ir as DEFAULT_GENERIC_TEXT_OPTIONS, it as listControlMeasureMetadata, j as BaselineFrameNormal, ji as DEFAULT_BOUNDARY_OPTIONS, jn as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, jr as PickupZoneOptions, jt as AntitankWallOptions, k as snapToMidpointPerpendicular, ki as unproject, kn as LimitOfAdvanceOptions, kr as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, kt as DEFAULT_FORTIFIED_LINE_OPTIONS, l as line24DrawRule, la as TextAmplifierField, li as DirectionOfAttackAviationOptions, ln as CounterattackOptions, lr as GenericCircleOptions, lt as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, m as attackByFireDrawRule, ma as resolveAmplifierPlacement, mi as ContainOptions, mn as DEFAULT_CANALIZE_OPTIONS, mr as DEFAULT_GENERIC_LINE_OPTIONS, mt as TurnOptions, n as DEFAULT_AMBUSH_OPTIONS, na as resolveParameterSemanticRole, ni as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, nn as DelayOptions, nr as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, nt as getControlMeasureMetadataByValue, o as supportByFireDrawRule, oa as GeneratedLabelKey, oi as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, on as TacticalArrowOptions, or as DEFAULT_GENERIC_SECTOR_OPTIONS, ot as ObstacleBypassImpossibleOptions, p as ambushDrawRule, pa as normalizeTextAmplifiers, pi as StrongPointOptions, pn as CanalizeOptions, pr as GenericPolygonOptions, pt as DEFAULT_TURN_OPTIONS, q as ControlMeasure, qi as ControlMeasureMetadata, qn as DEFAULT_ATTACK_BY_FIRE_OPTIONS, qr as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, qt as DEFAULT_PENETRATE_OPTIONS, r as sectorDrawRule, ra as AmplifierPlacement, ri as PrincipalDirectionOfFireOptions, rn as CoverOptions, rr as RadarSearchDoctrineOptions, rt as getDefaultOptions, s as line27DrawRule, sa as LabelPlacementOverride, si as DirectionOfMainAttackOptions, sn as CounterattackByFireOptions, sr as GenericSectorOptions, st as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, t as AmbushOptions, ta as resolveParameterPresentationTier, ti as SecondaryDirectionOfFireOptions, tn as DEFAULT_DELAY_OPTIONS, tr as RADAR_SEARCH_DOCTRINE_FILL_COLOR, tt as getControlMeasureMetadata, u as line23DrawRule, ua as TextAmplifierKey, ui as DEFAULT_RETAIN_OPTIONS, un as DEFAULT_COUNTERATTACK_OPTIONS, ur as DEFAULT_GENERIC_RECTANGLE_OPTIONS, ut as ObstacleBypassEasyOptions, v as penetrateDrawRule, vi as DEFAULT_GENERIC_C2_LINE_OPTIONS, vn as DEFAULT_BREACH_OPTIONS, vr as DEFAULT_BLOCK_ARROW_OPTIONS, vt as FixOptions, w as MidpointPerpendicularDrawRuleOptions, wi as LabelSizeOptions, wn as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, wr as DEFAULT_MAIN_ATTACK_OPTIONS, wt as TurningMovementOptions, x as blockDrawRule, xi as EngineerWorkLineOptions, xn as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, xr as DEFAULT_CLASSIC_ARROW_OPTIONS, xt as BlockOptions, y as centerRadiusDrawRule, yi as GenericC2LineOptions, yn as BlockMissionTaskOptions, yr as ClassicArrowHeadStyle, yt as DEFAULT_DISRUPT_OPTIONS, z as SimpleStyleRender, zi as DEFAULT_STROKE_DASH_CSS_PIXELS, zn as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, zr as DEFAULT_MOBILE_DEFENSE_OPTIONS, zt as DEFAULT_SEIZE_OPTIONS } from "./index-CwSQl5SE.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 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, dynamicPointDrawRule, foldsBoxTransformOptions, freezeOrientationOptions, getControlMeasureMetadata, getControlMeasureMetadataByValue, 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-DJo_s-lN.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 { Q as ControlMeasureId, da as TextAmplifiers } from "../index-
|
|
1
|
+
import { Q as ControlMeasureId, da as TextAmplifiers } from "../index-CwSQl5SE.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-DJo_s-lN.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}. */
|
|
@@ -214,6 +214,9 @@ function vecNorm(v) {
|
|
|
214
214
|
const m = vecMag(v);
|
|
215
215
|
return m === 0 ? [0, 0] : [v[0] / m, v[1] / m];
|
|
216
216
|
}
|
|
217
|
+
function midpoint(a, b) {
|
|
218
|
+
return vecScale(vecAdd(a, b), .5);
|
|
219
|
+
}
|
|
217
220
|
function pointToPointDistance(p1, p2) {
|
|
218
221
|
const dx = p2[0] - p1[0];
|
|
219
222
|
const dy = p2[1] - p1[1];
|
|
@@ -560,7 +563,7 @@ function samePosition(a, b) {
|
|
|
560
563
|
}
|
|
561
564
|
//#endregion
|
|
562
565
|
//#region src/draw-rules/area1.ts
|
|
563
|
-
function derive$
|
|
566
|
+
function derive$14(points) {
|
|
564
567
|
return clonePositions(points);
|
|
565
568
|
}
|
|
566
569
|
/**
|
|
@@ -580,9 +583,9 @@ const area1DrawRule = {
|
|
|
580
583
|
id: "area1",
|
|
581
584
|
minimumUserPoints: 3,
|
|
582
585
|
closedRing: true,
|
|
583
|
-
derive: derive$
|
|
586
|
+
derive: derive$14,
|
|
584
587
|
transform(event) {
|
|
585
|
-
return derive$
|
|
588
|
+
return derive$14(event.next);
|
|
586
589
|
}
|
|
587
590
|
};
|
|
588
591
|
//#endregion
|
|
@@ -622,14 +625,14 @@ const containDrawRule = createMidpointPerpendicularDrawRule({
|
|
|
622
625
|
* that fixes both the radius and the bearing of the symbol's opening. Both
|
|
623
626
|
* points are user-clicked, so the canonical array is just the (clamped) input.
|
|
624
627
|
*/
|
|
625
|
-
function derive$
|
|
628
|
+
function derive$13(points) {
|
|
626
629
|
return clonePositions(points.slice(0, 2));
|
|
627
630
|
}
|
|
628
631
|
const centerRadiusDrawRule = {
|
|
629
632
|
id: "area15:center-radius",
|
|
630
633
|
minimumUserPoints: 2,
|
|
631
634
|
canonicalPointCount: 2,
|
|
632
|
-
derive: derive$
|
|
635
|
+
derive: derive$13,
|
|
633
636
|
transform(event) {
|
|
634
637
|
const { previous, next, activePointIndex } = event;
|
|
635
638
|
if (activePointIndex === 0 && previous.length >= 2 && next.length >= 2) {
|
|
@@ -638,7 +641,7 @@ const centerRadiusDrawRule = {
|
|
|
638
641
|
const origin = previous[1];
|
|
639
642
|
return [clonePosition(next[0]), [origin[0] + dx, origin[1] + dy]];
|
|
640
643
|
}
|
|
641
|
-
return derive$
|
|
644
|
+
return derive$13(next);
|
|
642
645
|
}
|
|
643
646
|
};
|
|
644
647
|
/** Backward-compatible doctrinal name for Area15's shared center-radius rule. */
|
|
@@ -702,16 +705,16 @@ const point12DrawRule = createMidpointPerpendicularDrawRule({ id: "point12:obsta
|
|
|
702
705
|
* Point1 — a single anchor point (e.g. Text's center). One user click commits
|
|
703
706
|
* the measure; dragging the point simply translates it.
|
|
704
707
|
*/
|
|
705
|
-
function derive$
|
|
708
|
+
function derive$12(points) {
|
|
706
709
|
return clonePositions(points.slice(0, 1));
|
|
707
710
|
}
|
|
708
711
|
const pointDrawRule = {
|
|
709
712
|
id: "point1:anchor",
|
|
710
713
|
minimumUserPoints: 1,
|
|
711
714
|
canonicalPointCount: 1,
|
|
712
|
-
derive: derive$
|
|
715
|
+
derive: derive$12,
|
|
713
716
|
transform(event) {
|
|
714
|
-
return derive$
|
|
717
|
+
return derive$12(event.next);
|
|
715
718
|
}
|
|
716
719
|
};
|
|
717
720
|
//#endregion
|
|
@@ -738,10 +741,10 @@ const SECTOR_ANGLE_SNAP_RADIANS = Math.PI / 36;
|
|
|
738
741
|
* independently control a radius and a true-north azimuth. Dragging the anchor
|
|
739
742
|
* translates both edge points so the sector retains its size and orientation.
|
|
740
743
|
*/
|
|
741
|
-
function derive$
|
|
744
|
+
function derive$11(points) {
|
|
742
745
|
return clonePositions(points.slice(0, 3));
|
|
743
746
|
}
|
|
744
|
-
function guidePoints$
|
|
747
|
+
function guidePoints$2(points) {
|
|
745
748
|
return points.length < 3 ? clonePositions(points) : [];
|
|
746
749
|
}
|
|
747
750
|
/** Snap one radial Sector handle to a true-north angular increment. */
|
|
@@ -764,9 +767,9 @@ const sectorDrawRule = {
|
|
|
764
767
|
minimumUserPoints: 3,
|
|
765
768
|
canonicalPointCount: 3,
|
|
766
769
|
showGuide: true,
|
|
767
|
-
guidePoints: guidePoints$
|
|
770
|
+
guidePoints: guidePoints$2,
|
|
768
771
|
constrainAngles,
|
|
769
|
-
derive: derive$
|
|
772
|
+
derive: derive$11,
|
|
770
773
|
transform(event) {
|
|
771
774
|
const { previous, next, activePointIndex } = event;
|
|
772
775
|
if (activePointIndex === 0 && previous.length >= 3 && next.length >= 3) {
|
|
@@ -778,7 +781,7 @@ const sectorDrawRule = {
|
|
|
778
781
|
[previous[2][0] + dx, previous[2][1] + dy]
|
|
779
782
|
];
|
|
780
783
|
}
|
|
781
|
-
return derive$
|
|
784
|
+
return derive$11(next);
|
|
782
785
|
}
|
|
783
786
|
};
|
|
784
787
|
//#endregion
|
|
@@ -833,20 +836,20 @@ const ambushDrawRule = createMidpointPerpendicularDrawRule({
|
|
|
833
836
|
});
|
|
834
837
|
//#endregion
|
|
835
838
|
//#region src/draw-rules/line1.ts
|
|
836
|
-
function derive$
|
|
839
|
+
function derive$10(points) {
|
|
837
840
|
return clonePositions(points);
|
|
838
841
|
}
|
|
839
842
|
const line1DrawRule = {
|
|
840
843
|
id: "line1",
|
|
841
844
|
minimumUserPoints: 2,
|
|
842
|
-
derive: derive$
|
|
845
|
+
derive: derive$10,
|
|
843
846
|
transform(event) {
|
|
844
|
-
return derive$
|
|
847
|
+
return derive$10(event.next);
|
|
845
848
|
}
|
|
846
849
|
};
|
|
847
850
|
//#endregion
|
|
848
851
|
//#region src/draw-rules/line3.ts
|
|
849
|
-
function derive$
|
|
852
|
+
function derive$9(points) {
|
|
850
853
|
return clonePositions(points);
|
|
851
854
|
}
|
|
852
855
|
/**
|
|
@@ -861,23 +864,23 @@ const line3DrawRule = {
|
|
|
861
864
|
id: "line3",
|
|
862
865
|
minimumUserPoints: 3,
|
|
863
866
|
canonicalPointCount: 3,
|
|
864
|
-
derive: derive$
|
|
867
|
+
derive: derive$9,
|
|
865
868
|
transform(event) {
|
|
866
|
-
return derive$
|
|
869
|
+
return derive$9(event.next);
|
|
867
870
|
}
|
|
868
871
|
};
|
|
869
872
|
//#endregion
|
|
870
873
|
//#region src/draw-rules/line9.ts
|
|
871
|
-
function derive$
|
|
874
|
+
function derive$8(points) {
|
|
872
875
|
return clonePositions(points);
|
|
873
876
|
}
|
|
874
877
|
const line9DrawRule = {
|
|
875
878
|
id: "line9",
|
|
876
879
|
minimumUserPoints: 2,
|
|
877
880
|
canonicalPointCount: 2,
|
|
878
|
-
derive: derive$
|
|
881
|
+
derive: derive$8,
|
|
879
882
|
transform(event) {
|
|
880
|
-
return derive$
|
|
883
|
+
return derive$8(event.next);
|
|
881
884
|
}
|
|
882
885
|
};
|
|
883
886
|
//#endregion
|
|
@@ -952,6 +955,28 @@ const turnDrawRule = {
|
|
|
952
955
|
}
|
|
953
956
|
};
|
|
954
957
|
//#endregion
|
|
958
|
+
//#region src/draw-rules/line11.ts
|
|
959
|
+
function firstFour(points) {
|
|
960
|
+
return clonePositions(points.slice(0, 4));
|
|
961
|
+
}
|
|
962
|
+
function guidePoints$1(points) {
|
|
963
|
+
if (points.length <= 2) return clonePositions(points);
|
|
964
|
+
if (points.length === 3) return [];
|
|
965
|
+
return clonePositions(points.slice(2, 4));
|
|
966
|
+
}
|
|
967
|
+
/** Line11 — four independent anchors defining the two sides of a bridge or gap. */
|
|
968
|
+
const bridgeOrGapDrawRule = {
|
|
969
|
+
id: "line11:bridge-or-gap",
|
|
970
|
+
minimumUserPoints: 4,
|
|
971
|
+
canonicalPointCount: 4,
|
|
972
|
+
showGuide: true,
|
|
973
|
+
guidePoints: guidePoints$1,
|
|
974
|
+
derive: firstFour,
|
|
975
|
+
transform(event) {
|
|
976
|
+
return firstFour(event.next);
|
|
977
|
+
}
|
|
978
|
+
};
|
|
979
|
+
//#endregion
|
|
955
980
|
//#region src/draw-rules/line23.ts
|
|
956
981
|
/**
|
|
957
982
|
* Line23 anchor draw rule for the Clear mission task.
|
|
@@ -984,7 +1009,7 @@ const line24DrawRule = createMidpointPerpendicularDrawRule({
|
|
|
984
1009
|
});
|
|
985
1010
|
//#endregion
|
|
986
1011
|
//#region src/draw-rules/line26.ts
|
|
987
|
-
function derive$
|
|
1012
|
+
function derive$7(points) {
|
|
988
1013
|
if (points.length === 2) {
|
|
989
1014
|
const [p1, p2] = points;
|
|
990
1015
|
const dx = p2[0] - p1[0];
|
|
@@ -1023,9 +1048,9 @@ const line26DrawRule = {
|
|
|
1023
1048
|
minimumUserPoints: 4,
|
|
1024
1049
|
minimumPreviewPoints: 2,
|
|
1025
1050
|
canonicalPointCount: 4,
|
|
1026
|
-
derive: derive$
|
|
1051
|
+
derive: derive$7,
|
|
1027
1052
|
transform(event) {
|
|
1028
|
-
return derive$
|
|
1053
|
+
return derive$7(event.next);
|
|
1029
1054
|
}
|
|
1030
1055
|
};
|
|
1031
1056
|
//#endregion
|
|
@@ -1038,7 +1063,7 @@ function deriveArcPoint(p1, p2, p4) {
|
|
|
1038
1063
|
if (!arc) return [(p2[0] + p4[0]) / 2, (p2[1] + p4[1]) / 2];
|
|
1039
1064
|
return unproject(arc.midpoint[0], arc.midpoint[1]);
|
|
1040
1065
|
}
|
|
1041
|
-
function derive$
|
|
1066
|
+
function derive$6(points) {
|
|
1042
1067
|
if (points.length < 2) return clonePositions(points);
|
|
1043
1068
|
const [p1, p2] = points;
|
|
1044
1069
|
if (points.length === 2) {
|
|
@@ -1077,7 +1102,7 @@ const line27DrawRule = {
|
|
|
1077
1102
|
minimumUserPoints: 3,
|
|
1078
1103
|
minimumPreviewPoints: 2,
|
|
1079
1104
|
canonicalPointCount: 4,
|
|
1080
|
-
derive: derive$
|
|
1105
|
+
derive: derive$6,
|
|
1081
1106
|
transform(event) {
|
|
1082
1107
|
const { previous, next, activePointIndex } = event;
|
|
1083
1108
|
if (activePointIndex === 0 && previous.length >= 4 && next.length >= 4) {
|
|
@@ -1109,6 +1134,124 @@ const line27DrawRule = {
|
|
|
1109
1134
|
}
|
|
1110
1135
|
};
|
|
1111
1136
|
//#endregion
|
|
1137
|
+
//#region src/draw-rules/line31.ts
|
|
1138
|
+
function derive$5(points) {
|
|
1139
|
+
if (points.length === 2) {
|
|
1140
|
+
const [c1, c3] = points;
|
|
1141
|
+
const start = project(c1[0], c1[1]);
|
|
1142
|
+
const span = vecSub(project(c3[0], c3[1]), start);
|
|
1143
|
+
const p2 = vecAdd(start, vecScale(span, .5));
|
|
1144
|
+
const p4 = vecAdd(vecAdd(start, vecScale(span, .75)), vecScale([-span[1], span[0]], .25));
|
|
1145
|
+
return clonePositions([
|
|
1146
|
+
c1,
|
|
1147
|
+
unproject(p2[0], p2[1]),
|
|
1148
|
+
c3,
|
|
1149
|
+
unproject(p4[0], p4[1])
|
|
1150
|
+
]);
|
|
1151
|
+
}
|
|
1152
|
+
const derived = clonePositions(points.slice(0, 4));
|
|
1153
|
+
if (derived.length < 3) return derived;
|
|
1154
|
+
const [c1, c2, c3] = derived;
|
|
1155
|
+
const p1 = project(c1[0], c1[1]);
|
|
1156
|
+
const p2 = project(c2[0], c2[1]);
|
|
1157
|
+
const straight = vecSub(p2, p1);
|
|
1158
|
+
if (vecMag(straight) === 0) return derived;
|
|
1159
|
+
const diameter = vecMag(vecSub(project(c3[0], c3[1]), p2));
|
|
1160
|
+
const anchor = vecAdd(p2, vecScale(vecNorm(straight), diameter));
|
|
1161
|
+
derived[2] = unproject(anchor[0], anchor[1]);
|
|
1162
|
+
return derived;
|
|
1163
|
+
}
|
|
1164
|
+
/**
|
|
1165
|
+
* The snapped PT. 4 for a semicircle spanning PT. 2 → PT. 3, in projected
|
|
1166
|
+
* meters. PT. 4 is the top of the selected semicircle, not a free point on its
|
|
1167
|
+
* circumference, so crossing the diameter flips which side holds the arc.
|
|
1168
|
+
* Returns `null` for a degenerate (zero-length) diameter.
|
|
1169
|
+
*/
|
|
1170
|
+
function orientationPoint(p2, p3, p4) {
|
|
1171
|
+
const diameter = vecSub(p3, p2);
|
|
1172
|
+
if (diameter[0] === 0 && diameter[1] === 0) return null;
|
|
1173
|
+
const apex = vecAdd(midpoint(p2, p3), vecScale([-diameter[1], diameter[0]], quarterArcSide(p2, p3, p4) / 2));
|
|
1174
|
+
return unproject(apex[0], apex[1]);
|
|
1175
|
+
}
|
|
1176
|
+
function snapOrientationToArc(points) {
|
|
1177
|
+
if (points.length < 4) return points;
|
|
1178
|
+
const snapped = orientationPoint(project(points[1][0], points[1][1]), project(points[2][0], points[2][1]), project(points[3][0], points[3][1]));
|
|
1179
|
+
if (snapped) points[3] = snapped;
|
|
1180
|
+
return points;
|
|
1181
|
+
}
|
|
1182
|
+
/** Line31 anchors for Envelopment; PT. 3 is constrained parallel to PT. 1 → PT. 2. */
|
|
1183
|
+
const line31DrawRule = {
|
|
1184
|
+
id: "line31:envelopment",
|
|
1185
|
+
minimumUserPoints: 2,
|
|
1186
|
+
minimumPreviewPoints: 2,
|
|
1187
|
+
canonicalPointCount: 4,
|
|
1188
|
+
derive: derive$5,
|
|
1189
|
+
transform(event) {
|
|
1190
|
+
const { activePointIndex, next, previous } = event;
|
|
1191
|
+
if (next.length < 4) return derive$5(next);
|
|
1192
|
+
if (activePointIndex === 1) {
|
|
1193
|
+
const points = clonePositions(next.slice(0, 4));
|
|
1194
|
+
const p1 = project(points[0][0], points[0][1]);
|
|
1195
|
+
const p2 = project(points[1][0], points[1][1]);
|
|
1196
|
+
const p3 = project(points[2][0], points[2][1]);
|
|
1197
|
+
const p4 = project(points[3][0], points[3][1]);
|
|
1198
|
+
const span = vecSub(p3, p1);
|
|
1199
|
+
const lengthSquared = vecDot(span, span);
|
|
1200
|
+
if (lengthSquared === 0) return points;
|
|
1201
|
+
const slid = vecAdd(p1, vecScale(span, Math.min(1, Math.max(0, vecDot(vecSub(p2, p1), span) / lengthSquared))));
|
|
1202
|
+
points[1] = unproject(slid[0], slid[1]);
|
|
1203
|
+
const snapped = orientationPoint(slid, p3, p4);
|
|
1204
|
+
if (snapped) points[3] = snapped;
|
|
1205
|
+
return points;
|
|
1206
|
+
}
|
|
1207
|
+
if (activePointIndex === 3) return snapOrientationToArc(clonePositions(next.slice(0, 4)));
|
|
1208
|
+
if ((activePointIndex === 0 || activePointIndex === 2) && previous.length >= 4) {
|
|
1209
|
+
const oldP1 = project(previous[0][0], previous[0][1]);
|
|
1210
|
+
const oldP2 = project(previous[1][0], previous[1][1]);
|
|
1211
|
+
const oldSpan = vecMag(vecSub(project(previous[2][0], previous[2][1]), oldP1));
|
|
1212
|
+
const straightRatio = oldSpan === 0 ? .5 : vecMag(vecSub(oldP2, oldP1)) / oldSpan;
|
|
1213
|
+
const points = clonePositions(next.slice(0, 4));
|
|
1214
|
+
const p1 = project(points[0][0], points[0][1]);
|
|
1215
|
+
const p3 = project(points[2][0], points[2][1]);
|
|
1216
|
+
const p4 = project(points[3][0], points[3][1]);
|
|
1217
|
+
const slid = vecAdd(p1, vecScale(vecSub(p3, p1), straightRatio));
|
|
1218
|
+
points[1] = unproject(slid[0], slid[1]);
|
|
1219
|
+
const snapped = orientationPoint(slid, p3, p4);
|
|
1220
|
+
if (snapped) points[3] = snapped;
|
|
1221
|
+
return points;
|
|
1222
|
+
}
|
|
1223
|
+
return snapOrientationToArc(derive$5(next));
|
|
1224
|
+
}
|
|
1225
|
+
};
|
|
1226
|
+
//#endregion
|
|
1227
|
+
//#region src/draw-rules/line32.ts
|
|
1228
|
+
function derive$4(points) {
|
|
1229
|
+
if (points.length === 2) {
|
|
1230
|
+
const [c1, c3] = points;
|
|
1231
|
+
const p2 = midpoint(project(c1[0], c1[1]), project(c3[0], c3[1]));
|
|
1232
|
+
return clonePositions([
|
|
1233
|
+
c1,
|
|
1234
|
+
unproject(p2[0], p2[1]),
|
|
1235
|
+
c3
|
|
1236
|
+
]);
|
|
1237
|
+
}
|
|
1238
|
+
return clonePositions(points.slice(0, 3));
|
|
1239
|
+
}
|
|
1240
|
+
/** Line32 anchors for the two-click Infiltration mission task. */
|
|
1241
|
+
const line32DrawRule = {
|
|
1242
|
+
id: "line32:infiltration",
|
|
1243
|
+
minimumUserPoints: 2,
|
|
1244
|
+
minimumPreviewPoints: 2,
|
|
1245
|
+
canonicalPointCount: 3,
|
|
1246
|
+
hiddenControlPointIndices: [1],
|
|
1247
|
+
derive: derive$4,
|
|
1248
|
+
transform(event) {
|
|
1249
|
+
const { activePointIndex, next } = event;
|
|
1250
|
+
if (next.length >= 3 && (activePointIndex === 0 || activePointIndex === 2)) return derive$4([next[0], next[2]]);
|
|
1251
|
+
return derive$4(next);
|
|
1252
|
+
}
|
|
1253
|
+
};
|
|
1254
|
+
//#endregion
|
|
1112
1255
|
//#region src/draw-rules/area8.ts
|
|
1113
1256
|
function derive$3(points) {
|
|
1114
1257
|
if (points.length < 2) return clonePositions(points);
|
|
@@ -6402,6 +6545,167 @@ const BLOCK = defineControlMeasure({
|
|
|
6402
6545
|
previewSample: { controlPoints: [[0, .4], [0, -.4]] }
|
|
6403
6546
|
});
|
|
6404
6547
|
//#endregion
|
|
6548
|
+
//#region src/generators/cm27-protection-areas/bridge-or-gap.ts
|
|
6549
|
+
const FLARE_COMPONENT_RATIO = .25;
|
|
6550
|
+
const DEFAULT_BRIDGE_OR_GAP_OPTIONS = {};
|
|
6551
|
+
const BRIDGE_OR_GAP_METADATA = {
|
|
6552
|
+
id: "bridge-or-gap",
|
|
6553
|
+
name: "Bridge or Gap",
|
|
6554
|
+
description: "An area within a minefield or obstacle belt, free of live mines or obstacles, whose width and direction allow a friendly force to pass through in tactical formation.",
|
|
6555
|
+
entity: "Protection Areas",
|
|
6556
|
+
entityType: "Bridge or Gap",
|
|
6557
|
+
value: "271100",
|
|
6558
|
+
minCoordinates: 4,
|
|
6559
|
+
maxCoordinates: 4,
|
|
6560
|
+
geometry: "line",
|
|
6561
|
+
geometryTypes: ["LineString", "Point"],
|
|
6562
|
+
paints: {
|
|
6563
|
+
stroke: true,
|
|
6564
|
+
fill: "none",
|
|
6565
|
+
text: true
|
|
6566
|
+
},
|
|
6567
|
+
drawRule: "Line11",
|
|
6568
|
+
capturesLabelSize: true,
|
|
6569
|
+
textAmplifiers: [
|
|
6570
|
+
{
|
|
6571
|
+
key: "T",
|
|
6572
|
+
label: "Unique designation",
|
|
6573
|
+
description: "Field T — the bridge or gap's unique designation.",
|
|
6574
|
+
maxLength: 21
|
|
6575
|
+
},
|
|
6576
|
+
{
|
|
6577
|
+
key: "W",
|
|
6578
|
+
label: "Effective from (DTG)",
|
|
6579
|
+
description: "Field W — date-time group the bridge or gap becomes effective.",
|
|
6580
|
+
placeholder: "051030Z",
|
|
6581
|
+
maxLength: 16
|
|
6582
|
+
},
|
|
6583
|
+
{
|
|
6584
|
+
key: "W1",
|
|
6585
|
+
label: "Effective to (DTG)",
|
|
6586
|
+
description: "Field W1 — date-time group the bridge or gap ceases to be effective.",
|
|
6587
|
+
placeholder: "051600Z",
|
|
6588
|
+
maxLength: 16
|
|
6589
|
+
}
|
|
6590
|
+
]
|
|
6591
|
+
};
|
|
6592
|
+
/**
|
|
6593
|
+
* One side: its two anchors, plus a 45-degree flare at each end splaying away
|
|
6594
|
+
* from the gap. `outward` only picks which way the side's own perpendicular
|
|
6595
|
+
* points -- the flare stays square to this side, so both ends flare by the
|
|
6596
|
+
* same quarter-length in each axis.
|
|
6597
|
+
*/
|
|
6598
|
+
function sideCoordinates(start, end, outward) {
|
|
6599
|
+
const side = vecSub(end, start);
|
|
6600
|
+
const length = vecMag(side);
|
|
6601
|
+
if (length < 1e-6) return void 0;
|
|
6602
|
+
const along = vecScale(side, 1 / length);
|
|
6603
|
+
const normal = [-along[1], along[0]];
|
|
6604
|
+
const component = length * FLARE_COMPONENT_RATIO;
|
|
6605
|
+
const flareOut = vecScale(normal, vecDot(normal, outward) >= 0 ? component : -component);
|
|
6606
|
+
return {
|
|
6607
|
+
coordinates: [
|
|
6608
|
+
vecAdd(vecAdd(start, vecScale(along, -component)), flareOut),
|
|
6609
|
+
start,
|
|
6610
|
+
end,
|
|
6611
|
+
vecAdd(vecAdd(end, vecScale(along, component)), flareOut)
|
|
6612
|
+
].map((point) => unproject(point[0], point[1])),
|
|
6613
|
+
along,
|
|
6614
|
+
length
|
|
6615
|
+
};
|
|
6616
|
+
}
|
|
6617
|
+
function addLabels(features, frame, options, textAmplifiers) {
|
|
6618
|
+
const { points, side1, side2, across, center } = frame;
|
|
6619
|
+
const averageDirection = vecAdd(side1.along, side2.along);
|
|
6620
|
+
const along = vecMag(averageDirection) >= 1e-6 ? vecNorm(averageDirection) : side1.along;
|
|
6621
|
+
const sizeProps = labelSizeProps(options);
|
|
6622
|
+
const labels = [];
|
|
6623
|
+
if (textAmplifiers.T) pushLabel(labels, center, textAmplifiers.T, labelRotationAlong(along), sizeProps, void 0, "T");
|
|
6624
|
+
const row = [];
|
|
6625
|
+
if (textAmplifiers.W) row.push([
|
|
6626
|
+
"W",
|
|
6627
|
+
textAmplifiers.W,
|
|
6628
|
+
-1,
|
|
6629
|
+
"end"
|
|
6630
|
+
]);
|
|
6631
|
+
if (textAmplifiers.W1) row.push([
|
|
6632
|
+
"W1",
|
|
6633
|
+
textAmplifiers.W1,
|
|
6634
|
+
1,
|
|
6635
|
+
"start"
|
|
6636
|
+
]);
|
|
6637
|
+
if (row.length > 0) {
|
|
6638
|
+
const averageLength = (side1.length + side2.length) / 2;
|
|
6639
|
+
const windowRotation = labelRotationAlong(across);
|
|
6640
|
+
const rowCenter = vecAdd(midpoint(points[1], points[3]), vecScale(along, averageLength * FLARE_COMPONENT_RATIO + resolveLabelOffsetMeters(options, 1)));
|
|
6641
|
+
const separatorOffset = resolveLabelOffsetMeters(options, .15);
|
|
6642
|
+
const paired = row.length === 2;
|
|
6643
|
+
for (const [field, text, sign, anchor] of row) pushLabel(labels, paired ? vecAdd(rowCenter, vecScale(across, sign * separatorOffset)) : rowCenter, text, windowRotation, sizeProps, paired ? anchor : void 0, field);
|
|
6644
|
+
}
|
|
6645
|
+
features.push(...labels);
|
|
6646
|
+
}
|
|
6647
|
+
function createBridgeOrGap(coordinates, options = {}, textAmplifiers = {}) {
|
|
6648
|
+
const points = coordinates.slice(0, 4).map((position) => project(position[0], position[1]));
|
|
6649
|
+
const [p1, p2, p3, p4] = points;
|
|
6650
|
+
const mid12 = midpoint(p1, p2);
|
|
6651
|
+
const mid34 = midpoint(p3, p4);
|
|
6652
|
+
const betweenMidpoints = vecSub(mid12, mid34);
|
|
6653
|
+
const outward1 = vecMag(betweenMidpoints) >= 1e-6 ? vecNorm(betweenMidpoints) : vecNorm([p1[1] - p2[1], p2[0] - p1[0]]);
|
|
6654
|
+
const outward2 = vecScale(outward1, -1);
|
|
6655
|
+
const side1 = sideCoordinates(p1, p2, outward1);
|
|
6656
|
+
const side2 = sideCoordinates(p3, p4, outward2);
|
|
6657
|
+
if (!side1 || !side2) return {
|
|
6658
|
+
type: "FeatureCollection",
|
|
6659
|
+
features: []
|
|
6660
|
+
};
|
|
6661
|
+
const features = [{
|
|
6662
|
+
type: "Feature",
|
|
6663
|
+
properties: { part: "side-1" },
|
|
6664
|
+
geometry: {
|
|
6665
|
+
type: "LineString",
|
|
6666
|
+
coordinates: side1.coordinates
|
|
6667
|
+
}
|
|
6668
|
+
}, {
|
|
6669
|
+
type: "Feature",
|
|
6670
|
+
properties: { part: "side-2" },
|
|
6671
|
+
geometry: {
|
|
6672
|
+
type: "LineString",
|
|
6673
|
+
coordinates: side2.coordinates
|
|
6674
|
+
}
|
|
6675
|
+
}];
|
|
6676
|
+
addLabels(features, {
|
|
6677
|
+
points,
|
|
6678
|
+
side1,
|
|
6679
|
+
side2,
|
|
6680
|
+
across: outward2,
|
|
6681
|
+
center: midpoint(mid12, mid34)
|
|
6682
|
+
}, options, textAmplifiers);
|
|
6683
|
+
return {
|
|
6684
|
+
type: "FeatureCollection",
|
|
6685
|
+
features
|
|
6686
|
+
};
|
|
6687
|
+
}
|
|
6688
|
+
const BRIDGE_OR_GAP = defineControlMeasure({
|
|
6689
|
+
metadata: BRIDGE_OR_GAP_METADATA,
|
|
6690
|
+
generator: createBridgeOrGap,
|
|
6691
|
+
defaultOptions: DEFAULT_BRIDGE_OR_GAP_OPTIONS,
|
|
6692
|
+
rule: bridgeOrGapDrawRule,
|
|
6693
|
+
previewSample: {
|
|
6694
|
+
controlPoints: [
|
|
6695
|
+
[-.35, -.7],
|
|
6696
|
+
[-.35, .45],
|
|
6697
|
+
[.35, -.7],
|
|
6698
|
+
[.35, .45]
|
|
6699
|
+
],
|
|
6700
|
+
textAmplifiers: {
|
|
6701
|
+
T: "T",
|
|
6702
|
+
W: "W",
|
|
6703
|
+
W1: "W1"
|
|
6704
|
+
},
|
|
6705
|
+
options: { labelSize: 55 }
|
|
6706
|
+
}
|
|
6707
|
+
});
|
|
6708
|
+
//#endregion
|
|
6405
6709
|
//#region src/generators/cm99-generic-arrows/blockArrow.ts
|
|
6406
6710
|
const DEFAULT_SMOOTH_RESOLUTION$5 = 12;
|
|
6407
6711
|
const MIN_SMOOTH_RESOLUTION$1 = 2;
|
|
@@ -10195,6 +10499,299 @@ const DISRUPT_MISSION_TASK = defineControlMeasure({
|
|
|
10195
10499
|
previewSample: { controlPoints: [[0, .4], [0, -.4]] }
|
|
10196
10500
|
});
|
|
10197
10501
|
//#endregion
|
|
10502
|
+
//#region src/generators/cm34-mission-tasks/envelopment.ts
|
|
10503
|
+
const DEFAULT_ENVELOPMENT_OPTIONS = {
|
|
10504
|
+
arrowheadLengthRatio: .1,
|
|
10505
|
+
arrowheadWidthRatio: .12,
|
|
10506
|
+
labelPosition: .6,
|
|
10507
|
+
labelGapRatio: .18,
|
|
10508
|
+
resolution: 64
|
|
10509
|
+
};
|
|
10510
|
+
const ENVELOPMENT_METADATA = {
|
|
10511
|
+
id: "envelopment",
|
|
10512
|
+
name: "Envelopment",
|
|
10513
|
+
description: "A form of maneuver in which an attacking force avoids an enemy’s principal defense by attacking along an assailable flank.",
|
|
10514
|
+
entity: "Mission Tasks",
|
|
10515
|
+
entityType: "Envelopment",
|
|
10516
|
+
value: "343500",
|
|
10517
|
+
minCoordinates: 4,
|
|
10518
|
+
maxCoordinates: 4,
|
|
10519
|
+
geometry: "line",
|
|
10520
|
+
geometryTypes: ["MultiLineString", "Point"],
|
|
10521
|
+
paints: {
|
|
10522
|
+
stroke: true,
|
|
10523
|
+
fill: "none",
|
|
10524
|
+
text: true
|
|
10525
|
+
},
|
|
10526
|
+
drawRule: "Line31",
|
|
10527
|
+
capturesLabelSize: true,
|
|
10528
|
+
params: [
|
|
10529
|
+
{
|
|
10530
|
+
key: "arrowheadLengthRatio",
|
|
10531
|
+
presentationTier: "advanced",
|
|
10532
|
+
label: "Arrowhead length",
|
|
10533
|
+
description: "Arrowhead length as a ratio of the arc diameter",
|
|
10534
|
+
type: "number",
|
|
10535
|
+
min: .01,
|
|
10536
|
+
max: .5,
|
|
10537
|
+
step: .01
|
|
10538
|
+
},
|
|
10539
|
+
{
|
|
10540
|
+
key: "arrowheadWidthRatio",
|
|
10541
|
+
presentationTier: "advanced",
|
|
10542
|
+
label: "Arrowhead width",
|
|
10543
|
+
description: "Arrowhead width as a ratio of the arc diameter",
|
|
10544
|
+
type: "number",
|
|
10545
|
+
min: .01,
|
|
10546
|
+
max: .5,
|
|
10547
|
+
step: .01
|
|
10548
|
+
},
|
|
10549
|
+
{
|
|
10550
|
+
key: "labelPosition",
|
|
10551
|
+
presentationTier: "advanced",
|
|
10552
|
+
label: "Label position",
|
|
10553
|
+
description: "Position of the E label along the straight portion",
|
|
10554
|
+
type: "number",
|
|
10555
|
+
min: 0,
|
|
10556
|
+
max: 1,
|
|
10557
|
+
step: .01
|
|
10558
|
+
},
|
|
10559
|
+
{
|
|
10560
|
+
key: "labelGapRatio",
|
|
10561
|
+
presentationTier: "advanced",
|
|
10562
|
+
label: "Label gap",
|
|
10563
|
+
description: "Size of the straight-line cutout holding the E label",
|
|
10564
|
+
type: "number",
|
|
10565
|
+
min: 0,
|
|
10566
|
+
max: 1,
|
|
10567
|
+
step: .01
|
|
10568
|
+
},
|
|
10569
|
+
...ARC_RESOLUTION_PARAMS
|
|
10570
|
+
]
|
|
10571
|
+
};
|
|
10572
|
+
/** Generates the Envelopment mission task symbol (343500). */
|
|
10573
|
+
function createEnvelopment(coordinates, options = {}) {
|
|
10574
|
+
const [c1, c2, c3, c4] = coordinates;
|
|
10575
|
+
const p1 = project(c1[0], c1[1]);
|
|
10576
|
+
const p2 = project(c2[0], c2[1]);
|
|
10577
|
+
const diameterAnchor = project(c3[0], c3[1]);
|
|
10578
|
+
const p4 = project(c4[0], c4[1]);
|
|
10579
|
+
const straight = vecSub(p2, p1);
|
|
10580
|
+
const straightLength = vecMag(straight);
|
|
10581
|
+
const diameter = vecMag(vecSub(diameterAnchor, p2));
|
|
10582
|
+
if (straightLength < 1e-6 || diameter < 1e-6) return {
|
|
10583
|
+
type: "FeatureCollection",
|
|
10584
|
+
features: []
|
|
10585
|
+
};
|
|
10586
|
+
const straightDirection = vecNorm(straight);
|
|
10587
|
+
const p3 = vecAdd(p2, vecScale(straightDirection, diameter));
|
|
10588
|
+
const labelPoint = vecAdd(p1, vecScale(straight, clamp01(options.labelPosition ?? DEFAULT_ENVELOPMENT_OPTIONS.labelPosition)));
|
|
10589
|
+
const gapHalf = straightLength * clamp01(options.labelGapRatio ?? DEFAULT_ENVELOPMENT_OPTIONS.labelGapRatio) / 2;
|
|
10590
|
+
const gapStart = vecAdd(labelPoint, vecScale(straightDirection, -gapHalf));
|
|
10591
|
+
const gapEnd = vecAdd(labelPoint, vecScale(straightDirection, gapHalf));
|
|
10592
|
+
const center = midpoint(p2, p3);
|
|
10593
|
+
const startRadius = vecSub(p2, center);
|
|
10594
|
+
let bulgeRadius = [-startRadius[1], startRadius[0]];
|
|
10595
|
+
if (vecDot(vecSub(p4, center), bulgeRadius) < 0) bulgeRadius = vecScale(bulgeRadius, -1);
|
|
10596
|
+
const arc = sampleProjectedArc(center, startRadius, bulgeRadius, 0, Math.PI, normalizeArcResolution(options.resolution) / 2);
|
|
10597
|
+
const arrowhead = createArrowHead$1(p3, vecNorm(vecScale(bulgeRadius, -1)), diameter * Math.max(0, options.arrowheadLengthRatio ?? DEFAULT_ENVELOPMENT_OPTIONS.arrowheadLengthRatio), diameter * Math.max(0, options.arrowheadWidthRatio ?? DEFAULT_ENVELOPMENT_OPTIONS.arrowheadWidthRatio));
|
|
10598
|
+
return {
|
|
10599
|
+
type: "FeatureCollection",
|
|
10600
|
+
features: [{
|
|
10601
|
+
type: "Feature",
|
|
10602
|
+
properties: { part: "envelopment" },
|
|
10603
|
+
geometry: {
|
|
10604
|
+
type: "MultiLineString",
|
|
10605
|
+
coordinates: [
|
|
10606
|
+
[c1, unproject(gapStart[0], gapStart[1])],
|
|
10607
|
+
[unproject(gapEnd[0], gapEnd[1]), c2],
|
|
10608
|
+
arc,
|
|
10609
|
+
arrowhead
|
|
10610
|
+
]
|
|
10611
|
+
}
|
|
10612
|
+
}, createLabelFeature(labelPoint, "E", labelRotationAlong(straightDirection), options)]
|
|
10613
|
+
};
|
|
10614
|
+
}
|
|
10615
|
+
const ENVELOPMENT = defineControlMeasure({
|
|
10616
|
+
metadata: ENVELOPMENT_METADATA,
|
|
10617
|
+
generator: createEnvelopment,
|
|
10618
|
+
defaultOptions: DEFAULT_ENVELOPMENT_OPTIONS,
|
|
10619
|
+
rule: line31DrawRule,
|
|
10620
|
+
previewSample: {
|
|
10621
|
+
controlPoints: [
|
|
10622
|
+
[-.9, -.25],
|
|
10623
|
+
[-.15, -.25],
|
|
10624
|
+
[.85, -.25],
|
|
10625
|
+
[.35, .45]
|
|
10626
|
+
],
|
|
10627
|
+
options: { labelSize: 100 }
|
|
10628
|
+
}
|
|
10629
|
+
});
|
|
10630
|
+
//#endregion
|
|
10631
|
+
//#region src/generators/cm34-mission-tasks/infiltration.ts
|
|
10632
|
+
const DEFAULT_INFILTRATION_OPTIONS = {
|
|
10633
|
+
arrowheadLengthRatio: .1,
|
|
10634
|
+
arrowheadWidthRatio: .1,
|
|
10635
|
+
labelPosition: .6,
|
|
10636
|
+
labelGapRatio: .24,
|
|
10637
|
+
resolution: 64
|
|
10638
|
+
};
|
|
10639
|
+
const INFILTRATION_METADATA = {
|
|
10640
|
+
id: "infiltration",
|
|
10641
|
+
name: "Infiltration",
|
|
10642
|
+
description: "Moves forces through or into an area occupied by enemy forces without detection.",
|
|
10643
|
+
entity: "Mission Tasks",
|
|
10644
|
+
entityType: "Infiltration",
|
|
10645
|
+
value: "343800",
|
|
10646
|
+
minCoordinates: 3,
|
|
10647
|
+
maxCoordinates: 3,
|
|
10648
|
+
geometry: "line",
|
|
10649
|
+
geometryTypes: ["MultiLineString", "Point"],
|
|
10650
|
+
paints: {
|
|
10651
|
+
stroke: true,
|
|
10652
|
+
fill: "none",
|
|
10653
|
+
text: true
|
|
10654
|
+
},
|
|
10655
|
+
drawRule: "Line32",
|
|
10656
|
+
capturesLabelSize: true,
|
|
10657
|
+
params: [
|
|
10658
|
+
{
|
|
10659
|
+
key: "arrowheadLengthRatio",
|
|
10660
|
+
presentationTier: "advanced",
|
|
10661
|
+
label: "Arrowhead length",
|
|
10662
|
+
description: "Arrowhead length as a ratio of the Point 1–Point 3 span",
|
|
10663
|
+
type: "number",
|
|
10664
|
+
min: .01,
|
|
10665
|
+
max: .5,
|
|
10666
|
+
step: .01
|
|
10667
|
+
},
|
|
10668
|
+
{
|
|
10669
|
+
key: "arrowheadWidthRatio",
|
|
10670
|
+
presentationTier: "advanced",
|
|
10671
|
+
label: "Arrowhead width",
|
|
10672
|
+
description: "Arrowhead width as a ratio of the Point 1–Point 3 span",
|
|
10673
|
+
type: "number",
|
|
10674
|
+
min: .01,
|
|
10675
|
+
max: .5,
|
|
10676
|
+
step: .01
|
|
10677
|
+
},
|
|
10678
|
+
{
|
|
10679
|
+
key: "labelPosition",
|
|
10680
|
+
presentationTier: "advanced",
|
|
10681
|
+
label: "Label position",
|
|
10682
|
+
description: "Position of the IN label along the initial straight portion",
|
|
10683
|
+
type: "number",
|
|
10684
|
+
min: 0,
|
|
10685
|
+
max: 1,
|
|
10686
|
+
step: .01
|
|
10687
|
+
},
|
|
10688
|
+
{
|
|
10689
|
+
key: "labelGapRatio",
|
|
10690
|
+
presentationTier: "advanced",
|
|
10691
|
+
label: "Label gap",
|
|
10692
|
+
description: "Size of the initial-line cutout holding the IN label",
|
|
10693
|
+
type: "number",
|
|
10694
|
+
min: 0,
|
|
10695
|
+
max: 1,
|
|
10696
|
+
step: .01
|
|
10697
|
+
},
|
|
10698
|
+
...ARC_RESOLUTION_PARAMS
|
|
10699
|
+
]
|
|
10700
|
+
};
|
|
10701
|
+
const CENTERED_BEND_SINE = 2 * .1;
|
|
10702
|
+
const CENTERED_BEND_COSINE = Math.sqrt(1 - CENTERED_BEND_SINE * CENTERED_BEND_SINE);
|
|
10703
|
+
/**
|
|
10704
|
+
* Resolves the common tangent direction of the two Line32 quarter-circles.
|
|
10705
|
+
* For the doctrinal construction, PT. 1 and PT. 3 lie on parallel tangents on
|
|
10706
|
+
* opposite sides of PT. 2. Their midpoint offset from PT. 2 therefore lies on
|
|
10707
|
+
* that tangent axis. For a derived, centered PT. 2 the axis is mathematically
|
|
10708
|
+
* underdetermined, so a proportional doctrinal bend resolves it.
|
|
10709
|
+
*/
|
|
10710
|
+
function tangentDirection(p1, p2, p3) {
|
|
10711
|
+
const axis = vecSub(vecScale(p2, 2), vecAdd(p1, p3));
|
|
10712
|
+
const span = vecSub(p3, p1);
|
|
10713
|
+
const spanLength = vecMag(span);
|
|
10714
|
+
let direction;
|
|
10715
|
+
if (vecMag(axis) < spanLength * .02) {
|
|
10716
|
+
const chord = vecNorm(span);
|
|
10717
|
+
direction = [chord[0] * CENTERED_BEND_COSINE - chord[1] * CENTERED_BEND_SINE, chord[0] * CENTERED_BEND_SINE + chord[1] * CENTERED_BEND_COSINE];
|
|
10718
|
+
} else direction = vecNorm(axis);
|
|
10719
|
+
if (vecDot(direction, span) < 0) direction = vecScale(direction, -1);
|
|
10720
|
+
return direction;
|
|
10721
|
+
}
|
|
10722
|
+
/** Generates the Infiltration mission task symbol (343800). */
|
|
10723
|
+
function createInfiltration(coordinates, options = {}) {
|
|
10724
|
+
const [c1, c2, c3] = coordinates;
|
|
10725
|
+
const p1 = project(c1[0], c1[1]);
|
|
10726
|
+
const p2 = project(c2[0], c2[1]);
|
|
10727
|
+
const p3 = project(c3[0], c3[1]);
|
|
10728
|
+
const spanLength = vecMag(vecSub(p3, p1));
|
|
10729
|
+
if (spanLength < 1e-6) return {
|
|
10730
|
+
type: "FeatureCollection",
|
|
10731
|
+
features: []
|
|
10732
|
+
};
|
|
10733
|
+
const along = tangentDirection(p1, p2, p3);
|
|
10734
|
+
const normal = [-along[1], along[0]];
|
|
10735
|
+
const signedRadius = vecDot(vecSub(p1, p2), normal);
|
|
10736
|
+
const radius = Math.abs(signedRadius);
|
|
10737
|
+
if (radius < 1e-6) return {
|
|
10738
|
+
type: "FeatureCollection",
|
|
10739
|
+
features: []
|
|
10740
|
+
};
|
|
10741
|
+
const sideRadius = vecScale(normal, (signedRadius < 0 ? -1 : 1) * radius);
|
|
10742
|
+
const alongRadius = vecScale(along, radius);
|
|
10743
|
+
const firstCenter = vecSub(p2, alongRadius);
|
|
10744
|
+
const arcStart = vecAdd(firstCenter, sideRadius);
|
|
10745
|
+
const secondCenter = vecAdd(p2, alongRadius);
|
|
10746
|
+
const arcEnd = vecSub(secondCenter, sideRadius);
|
|
10747
|
+
const straight = vecSub(arcStart, p1);
|
|
10748
|
+
const straightLength = vecMag(straight);
|
|
10749
|
+
if (straightLength < 1e-6) return {
|
|
10750
|
+
type: "FeatureCollection",
|
|
10751
|
+
features: []
|
|
10752
|
+
};
|
|
10753
|
+
const arcResolution = normalizeArcResolution(options.resolution) / 2;
|
|
10754
|
+
const firstArc = sampleProjectedArc(firstCenter, sideRadius, alongRadius, 0, Math.PI / 2, arcResolution);
|
|
10755
|
+
const secondArc = sampleProjectedArc(secondCenter, vecScale(alongRadius, -1), vecScale(sideRadius, -1), 0, Math.PI / 2, arcResolution);
|
|
10756
|
+
const labelPoint = vecAdd(p1, vecScale(straight, clamp01(options.labelPosition ?? DEFAULT_INFILTRATION_OPTIONS.labelPosition)));
|
|
10757
|
+
const gapHalf = straightLength * clamp01(options.labelGapRatio ?? DEFAULT_INFILTRATION_OPTIONS.labelGapRatio) / 2;
|
|
10758
|
+
const gapStart = vecAdd(labelPoint, vecScale(along, -gapHalf));
|
|
10759
|
+
const gapEnd = vecAdd(labelPoint, vecScale(along, gapHalf));
|
|
10760
|
+
const arrowhead = createArrowHead$1(p3, along, spanLength * Math.max(0, options.arrowheadLengthRatio ?? DEFAULT_INFILTRATION_OPTIONS.arrowheadLengthRatio), spanLength * Math.max(0, options.arrowheadWidthRatio ?? DEFAULT_INFILTRATION_OPTIONS.arrowheadWidthRatio));
|
|
10761
|
+
return {
|
|
10762
|
+
type: "FeatureCollection",
|
|
10763
|
+
features: [{
|
|
10764
|
+
type: "Feature",
|
|
10765
|
+
properties: { part: "infiltration" },
|
|
10766
|
+
geometry: {
|
|
10767
|
+
type: "MultiLineString",
|
|
10768
|
+
coordinates: [
|
|
10769
|
+
[c1, unproject(gapStart[0], gapStart[1])],
|
|
10770
|
+
[unproject(gapEnd[0], gapEnd[1]), unproject(arcStart[0], arcStart[1])],
|
|
10771
|
+
firstArc,
|
|
10772
|
+
secondArc,
|
|
10773
|
+
[unproject(arcEnd[0], arcEnd[1]), c3],
|
|
10774
|
+
arrowhead
|
|
10775
|
+
]
|
|
10776
|
+
}
|
|
10777
|
+
}, createLabelFeature(labelPoint, "IN", labelRotationAlong(along), options)]
|
|
10778
|
+
};
|
|
10779
|
+
}
|
|
10780
|
+
const INFILTRATION = defineControlMeasure({
|
|
10781
|
+
metadata: INFILTRATION_METADATA,
|
|
10782
|
+
generator: createInfiltration,
|
|
10783
|
+
defaultOptions: DEFAULT_INFILTRATION_OPTIONS,
|
|
10784
|
+
rule: line32DrawRule,
|
|
10785
|
+
previewSample: {
|
|
10786
|
+
controlPoints: [
|
|
10787
|
+
[-.9, .25],
|
|
10788
|
+
[-.05, 0],
|
|
10789
|
+
[.9, -.25]
|
|
10790
|
+
],
|
|
10791
|
+
options: { labelSize: 100 }
|
|
10792
|
+
}
|
|
10793
|
+
});
|
|
10794
|
+
//#endregion
|
|
10198
10795
|
//#region src/generators/cm34-mission-tasks/guard.ts
|
|
10199
10796
|
const DEFAULT_GUARD_OPTIONS = DEFAULT_SECURITY_TASK_OPTIONS;
|
|
10200
10797
|
const GUARD_METADATA = {
|
|
@@ -16040,6 +16637,8 @@ const DEFINITIONS = {
|
|
|
16040
16637
|
delay: DELAY,
|
|
16041
16638
|
disengage: DISENGAGE,
|
|
16042
16639
|
"disrupt-mission-task": DISRUPT_MISSION_TASK,
|
|
16640
|
+
envelopment: ENVELOPMENT,
|
|
16641
|
+
infiltration: INFILTRATION,
|
|
16043
16642
|
guard: GUARD,
|
|
16044
16643
|
isolate: ISOLATE,
|
|
16045
16644
|
penetrate: PENETRATE,
|
|
@@ -16076,6 +16675,7 @@ const DEFINITIONS = {
|
|
|
16076
16675
|
}
|
|
16077
16676
|
}),
|
|
16078
16677
|
block: BLOCK,
|
|
16678
|
+
"bridge-or-gap": BRIDGE_OR_GAP,
|
|
16079
16679
|
disrupt: DISRUPT,
|
|
16080
16680
|
fix: FIX,
|
|
16081
16681
|
"fix-mission-task": FIX_MISSION_TASK,
|
package/package.json
CHANGED