ADD: added APP-6 Symbols to the Map

This commit is contained in:
hwinkel
2023-09-05 18:46:34 +02:00
parent 6d2a1d7556
commit 658830bab6
221 changed files with 73498 additions and 21 deletions

5
node_modules/milsymbol/.editorconfig generated vendored Normal file
View File

@@ -0,0 +1,5 @@
root = true
[*]
indent_style = space
indent_size = 2

19
node_modules/milsymbol/.eslintrc.js generated vendored Normal file
View File

@@ -0,0 +1,19 @@
module.exports = {
extends: "eslint:recommended",
env: {
browser: true,
commonjs: true
},
parserOptions: {
ecmaVersion: 6,
sourceType: "module"
},
plugins: ["prettier"],
rules: {
"prettier/prettier": "error",
"linebreak-style": ["error", "unix"],
"no-console": ["error", { allow: ["info", "warn", "error"] }],
"no-unused-vars": ["error", { vars: "all", args: "none" }],
semi: ["error", "always"]
}
};

5
node_modules/milsymbol/.travis.yml generated vendored Normal file
View File

@@ -0,0 +1,5 @@
language: node_js
node_js:
- "10"
script:
- npm run build

427
node_modules/milsymbol/CHANGELOG.md generated vendored Normal file
View File

@@ -0,0 +1,427 @@
# Change Log
## 2.0.0
### Added
- Added support for Engagement Bars
- Use the option engagementBar to set the bar text
- Use the option engagementType to define "TARGET", "NON-TARGET", or "EXPIRED" as type
- Added support for the field country as specified in APP-6 D
- Added support for the field installationComposition as specified in APP-6 D
- Added possiblity to control more color on symbol level
- Support for speed leaders
- Support for text background color using infoBackground and infoBackgroundFrame options
### Changed
- `symbol.getProperties()` is removed and `symbol.getMetadata()` should be used instead.
- ms.getHqStafLength changed to ms.getHqStaffLength, fixed spelling
- ms.setHqStafLength changed to ms.setHqStaffLength, fixed spelling
- Thanks to @okwolf we moved from webpack to rollup for development
- Where there are multiple text fields in the same position, they are now joined
by a / instead of a space
- Changed location of feint/dummy indicator to be more similar to images in
standard documents
- Make it possible to set infoColor to a Color Mode
### Deprecated
### Removed
- `symbol.getProperties()` is removed (use `symbol.getMetadata()` instead)
- `ms.setAutoSVG` has now been removed.
### Fixed
- Fields commonIdentifier (AF) and equipmentTeardownTime (AE) had swiched
places, now corrected
- The condition bar is now drawn below the headquartersElement field
- Some natural events in 2525C was framed even if they shouldn't be
### Security
- Prevented XSS issue where malicious code could be inserted into text fields of SVG symbols, all < and > are now encoded to prevent this.
## 1.3.3 14 NOV 2017
### Added
### Changed
- Updated and moved the unit generator from dev to examples.
### Deprecated
### Removed
### Fixed
- The option infoColor was not set when used, this is now fixed, again.
- The option hqStaffLength was not set when used, this is now fixed.
- Fill opacity affected outline opacity as well in canvas output.
### Security
## 1.3.2 13 NOV 2017
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Following symbols were drawn as fixed wing instead of rotary wing
- WAR.SOFUNT.AVN.ROT.ATK
- WAR.SOFUNT.AVN.ROT.UTY
- WAR.SOFUNT.AVN.ROT.UTY.LIT
- WAR.SOFUNT.AVN.ROT.UTY.MDM
- WAR.SOFUNT.AVN.ROT.UTY.HVY
- The option infoColor was not set when used, this is now fixed.
### Security
## 1.3.1 17 OCT 2017
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fixed canvas output in Microsoft Edge 14
### Security
## 1.3.0 21 AUG 2017
### Added
- symbol.getOptions(_includeStyle_) will return the options that are set on the
symbol.
- symbol.getStyle() will return the style options that are set on the symbol.
- Added files for intellisense when used in Visual Studio Code
### Changed
- Options and Style are now stored in separate Objects on the symbol for better
structure.
- ms.Symbol and setOptions can now take any number of arguments from 0 to n.
### Deprecated
### Removed
### Fixed
- ArcGIS example had to be updated because of change of how Options and Style
are stored.
- monoColor was initialized as `false` instead of an empty string, this is now
corrected and makes the correct status modifiers to be used by default.
- 10031000001104000000 was drawn with an icon IW instead of IO (Since it is IW
in 2525C, but that is now fiexed.)
- Fixed the size of the sensor icon used in 2525D
### Security
## 1.2.1 12 JUN 2017
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Altitude/Depth was sometimes not labeled on 2525D symbols
- Typo in Changelog
### Security
## 1.2.0 11 JUN 2017
### Added
- Added build-amd, to build an AMD only module you can now run `npm run build-amd`
### Changed
- isValid(option) can now take an bolean input that makes it return a validaton
object with extended information about the vadility.
- isValid now validates the mobility modifier as well as the symbol icon.
- Updated ENERGY FACITILIES INFRASTRUCTURE to better representation of the
standard.
### Deprecated
### Removed
- Removed all methods that was deprecated in milsymbol 1.0.0
### Fixed
- The quantiy field would be cut if the content was wider than the symbol, this
is now fixed so that the symbol size adopts to to width of the quantity field.
- Fixed Land Unit M1 10 command and control that was displayed in as a Y instead
of C2.
- Some modifiers on Signals Intelligence symbols in 2525C was incorrect
### Security
## 1.1.0 16 APR 2017
I would like to thank @okwolf that has contributed with unit tests and some code
reorganization.
### Added
- It is now possible to use `sidc` or `SIDC` in an options object.
- It is now possible to initiate a symbol with just an options object
`ms.Symbol({options})`.
- ms.Symbol().isValid() now returns a boolean representing if it was possible to
find the symbol icon for the provided SIDC.
- The source code for the unit generator is now provided in the dev folder.
- Added 2525B symbols that are missing in 2525C, so now we have full support for
2525B as well.
- Initial unit tests added to the repository.
### Changed
### Deprecated
### Removed
### Fixed
- Fix for that tactical points with labels with large font sizes might draw too
narrow so that part of the label can't be seen.
- Fix for that units with invalid icon part in the SIDC did not get the upside
down question mark when canvas output was used.
- G-F-PTS--- TACGRP.FSUPP.PNT.TGT.PTGT and G-C-FSTP-- 2.X.2.3.1.1.1 POINT/SINGLE
TARGET now uses altitudeDepth instead of additionalInformation1 to display the
target altitude.
- Made sure that tactical points that dosen't have labels in the specifications
don't get labels even if they are set.
### Security
## 1.0.0 03 MAR 2017
- Milsymbol is now split into several modules and built with
[webpack](https://webpack.github.io/), this makes the code easier to maintain.
- Avoid getting and setting properties directly, use methods for this when they
are available, in the future properties might change names.
### Added
- colorMode property can now be set to a string representing the name of a
registered color mode.
- symbol.getSize() returns an object with the width and height of the symbol.
- symbol.getAnchor() returns an object with the x and y offset of the symbol.
- symbol.getOctagonAnchor() returns an object with the x and y offset of the
octagon center.
- bbox.merge(another-bbox), use this instead of MS.bboxMax for merging bounding
boxes.
- Milsymbol can now be used as a AMD/CommonJS/etc... module, by requiering
`milsymbol`, the global `var` is called ms.
- ms.getVersion() that returns the version as a string.
- ms.addSIDCicons(sidcFunction, type) for adding sidc functions.
- ms.addLabelOverrides(labelFunction, type) for adding label functions.
- ms.addSymbolPart(part) should be used instead of MS.addMarkerParts(part)
- ms.getSymbolParts() should be used instead of MS.getMarkerParts()
- ms.setSymbolParts(parts) should be used instead of MS.setMarkerParts(parts)
- ms.BBox() should be used instead of MS.bbox(). (Since it is a class...)
- ms.ColorMode() should be used instead of MS.colorMode(). (Since it is a
class...)
- ms.Symbol() should be used instead of MS.symbol(). (Since it is a class...)
- Tactical points is now part of _/dist/milsymbol.js_, no need to include any
extra files.
- Tactical points now supports APP6-B ANNEX E.
- Symbols with an invalid icon in the SIDC will now be rendered with an upside
down ?. (According to MIL-STD-2525D)
### Changed
- **Global variable is now `ms` instead of `MS`.**
- Feint/Dummy indicator drawn as specified in MIL-STD-2525D change 1.
### Deprecated
- Avoid setting properties directly, use setOptions(options) instead.
- Do not use .XML anymore, use asSVG() instead, **if needed set `ms.autoSVG = true`**. ms.autoSVG will be removed in a future version.
- getMarker(), it's not needed anymore, symbols are automatically updated when
options are updated using setOptions().
- MS.bboxMax(), use bbox.merge() instead.
- MS.addLetterSIDCicons(), use ms.addSIDCicons() instead.
- MS.addNumberSIDCicons(), use ms.addSIDCicons() instead.
- MS.addLetterLabelOverrides(), use ms.addLabelOverrides() instead.
- MS.addNumberLabelOverrides(), use ms.addLabelOverrides() instead.
- MS.buildingBlock() return an object instead.
- MS.addMarkerParts(part) use ms.addSymbolPart(part) instead.
- MS.getMarkerParts() use ms.getSymbolParts() instead.
- MS.setMarkerParts(parts) use ms.setSymbolParts(parts) instead.
- MS.bbox() use ms.BBox() instead. (Since it is a class...)
- MS.colorMode() use ms.ColorMode() instead. (Since it is a class...)
- MS.symbol() use ms.Symbol instead. (Since it is a class...)
### Removed
- MS.rotate() has been removed, use json drawInstruction instead.
- MS.scale() has been removed, use json drawInstruction instead.
- MS.translate() has been removed, use json drawInstruction instead.
### Fixed
- Fixed a bug that prevented specialHeadquarters to be drawn on Canvas output.
### Security
## 0.6.0 25 DEC 2016
### Added
- Support for outlines on symbols using properties `outlineColor` and
`outlineWidth`.
- toDataURL() that returns a base 64 encoding of the SVG symbol. (See
deprication of _asImage()_)
- Possibility to Add/Update existing SIDC.
- Possibility to Add/Update the icon parts that constructs the icons.
- Support for tactical point symbols in MIL-STD-2525C.
### Changed
### Deprecated
- _asImage()_ since it returns a data url and not an image.
### Removed
### Fixed
### Security
## 0.5.6 14 MAY 2016
### Added
- asCanvas() is now also supported in Internet Explorer 11, this makes it
simpler to integrate with Open Layers 3 and Cesium
- Added back the possibility to create effects with SVG filters in custom
extensions
## 0.5.5 13 JAN 2016
### Added
- Native Canvas output
### Changed
- Made several changes to the code to reduce the code size
## 0.5.1 24 JUL 2015
### Changed
- Minor documentation updates
## 0.5.0 - 20 JUL 2015
### Added
- New API
- Much faster
- Support point symbols from MIL-STD-2525D
- New examples
## 0.4.5 - 24 NOV 2014
### Added
- Now supports MIL-STD-2525C Emergency Management Symbols
- Speeeeed, the code now runs 3-5 times faster when you are creating a lot of
symbols. (1000 random symbols can be created in less than 1 second, my test
record is 0.25 seconds on a modern iMac running Safari.)
- Added an example showing generation of 1000 random symbols.

20
node_modules/milsymbol/CONTRIBUTING.md generated vendored Normal file
View File

@@ -0,0 +1,20 @@
# Contributing
I welcome contributions from anyone and everyone. If you want to make any major changes please open an issue first, but for small changes you can simply create a pull.
Before you make an contribution, please read GitHub Terms of Service: (Everything works as you think it works, but just make sure that you have the right to contribute the code you want to hand over.)
https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license
## Coding standards
Code that you write should be validated with the included .eslintrc file, and formated with the standard settings in prettier. The recommended editor is VS Code and configuration files are included in the project.
https://github.com/eslint/eslint
https://github.com/prettier/prettier
During development the code can be built by running `npm run build`. This will format all code with prettier, run the tests, and build your code.
## Examples
If you would like to contribute with examples of milsymbol usage, please create them in the same structure as bl.ocks use, and include a preview.png with the size 960\*500px. https://bl.ocks.org/-/about

21
node_modules/milsymbol/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2017 Måns Beckman - www.spatialillusions.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

123
node_modules/milsymbol/README.md generated vendored Normal file
View File

@@ -0,0 +1,123 @@
# Milsymbol
[![Build Status](https://travis-ci.org/spatialillusions/milsymbol.svg?branch=master)](https://travis-ci.org/spatialillusions/milsymbol)
Milsymbol is a small library in pure javascript that creates military unit symbols according to MIL-STD-2525 and STANAG APP-6.
![Figure 13](https://github.com/spatialillusions/milsymbol/blob/master/docs/images/milsymbol.png?raw=true)
```javascript
new ms.Symbol("sfgpewrh--mt", {
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
direction: (750 * 360) / 6400,
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
}).asSVG();
```
Compared to reference figure from MIL-STD-2525C:
![Figure 13](https://github.com/spatialillusions/milsymbol/blob/master/docs/images/figure13.png?raw=true)
## Milsymbol summary
Milsymbol supports a lot of different options:
- NATO or US standards (MIL-STD-2525C, MIL-STD-2525D, STANAG APP-6 B, STANAG APP-6 D)
- Filled/Unfilled symbols
- Framed/Unframed symbols
- Text fields
- Movement indicators
- SVG/Canvas output (using SVG or Canvas draw instructions)
- Outlines of symbols
- and much more...
For detailed descriptions of what is possible with milsymbol, see the API documentation under /docs.
Milsymbol can be integrated with most common javascript libraries, such as:
- Angular
- Cesium
- D3
- LeafLet
- Node.js
- Open Layers 3
- and also in ScriptEngine in Java, and QtJSEngine in C++...
Examples of some of the integrations are included with milsymbol.
You can find all documentaion and examples at:
http://spatialillusions.com/milsymbol/
## Getting started
You can download [milsymbol from GitHub](https://github.com/spatialillusions/milsymbol "milsymbol"), or install it using npm:
`npm install milsymbol`
To create your first symbol you use the symbol method to create a symbol object:
`ms.Symbol(SIDC,{options})`
To make a symbol for an infantry platoon the syntax would be:
`var sym = new ms.Symbol("SFG-UCI----D");`
And `sym` will now be a symbol object containing information about the size and draw instructions.
But you want something to put on your screen, and since milsymbol provides different ways to draw symbol, using SVG or Canvas, you will have to use the method that provides you with the output you want, so we use `asCanvas()` or `asSVG()` that returns a canvas element containing the symbol or a XML representation of the SVG:
`var canvasElement = sym.asCanvas();`
And if you don't want to make it step by step, you can chain it all together like this:
`var canvasElement = new ms.Symbol("SFG-UCI----D").asCanvas();`
![Infantry Platoon](https://github.com/spatialillusions/milsymbol/blob/master/docs/images/infantry-platoon.png?raw=true)
Options you provided to your symbol can change the size of the symbol, define if it should be filled/unfilled, add text information, and much more; you can read more about all properties and methods in the API documentation provided with milsymbol.
The options can be set when you create your symbol:
`var sym = new ms.Symbol("SFG-UCI----D",{size:35}).asCanvas();`
Or they can be updated at any time using `setOptions(options)`:
```
var sym = new ms.Symbol("SFG-UCI----D");
sym.setOptions({size:35});
var canvasElement = sym.asCanvas();
```
Your symbol object will also contain information about what offset that should be used to get a correct placement, this information can be retrieved with `getAnchor()` and it will return an object with the x and y offset, you will also have access to information about what size the created symbol have and detailed information about colors used.
The library is built on the idea that everything used inside milsymbol should be accessable outside milsymbol so that it is easy to extend the library with custom functionallity.
## Technology
Milsymbol uses pure javascript to create SVG, Scalable Vector Graphics, and also has built in for native Canvas support.
- No external dependencies, just one javascript file required
- Super fast, can create 1000 symbols in less than 25 milliseconds (SVG output)
The symbols are created using building blocks defined in the code and no images or fonts are used, this makes it possible to modify almost every aspect of the symbols, such as fill, frame, color, size, stroke width and easily switch between APP6 and 2525 symbology.
To see what is possible with milsymbol use the unit test documents in the docs folder that lists all tabels and figures from the different standards using MilSymbol. (The documents use milsymbol to render every image that you see, look into the code if you want to see how it is done.)
Milsymbol can easily be extended with new functionality and examples of this can be found at: https://github.com/spatialillusions/milsymbol-extensions
## Contact
Milsymbol is created and maintained by Måns Beckman
- http://www.spatialillusions.com to see more examples of what milsymbol can be used for
- https://twitter.com/spatialillusion for milsymbol and mapping/military related information
## Licensing
MIT, See [LICENSE](LICENSE) for details.
Even if I'm giving it away for free, I don't mind if you would like to send me some cool company giveaways or unit badges. Just send me an email and and I will provide you with my address.

18
node_modules/milsymbol/dev/README.md generated vendored Normal file
View File

@@ -0,0 +1,18 @@
# Development resources
Some minor notes and resources so that we don't forget things.
* octagon.svg, base template for creating icons in SVG format.
## Create prerelease
* Update `package.json`, set `version` to a prerelease version, e.g. `2.0.0-rc1`
* Run `npm pack` to create package
* Run `npm publish <package>.tgz --tag next` to publish the package under the `next` tag
* Run `npm install --save package@next` to install prerelease package
## Create release
* Update `package.json`, set `version` to version, e.g. `2.0.0`
* Run `npm publish` to publish
* Create release on GitHub with tag `v2.0.0`

62
node_modules/milsymbol/dev/octagon.svg generated vendored Normal file
View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="200"
height="200"
viewBox="0 0 200 200"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="hexagon.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.895"
inkscape:cx="100"
inkscape:cy="100"
inkscape:document-units="px"
inkscape:current-layer="svg2"
showgrid="false"
units="px"
inkscape:window-width="1280"
inkscape:window-height="751"
inkscape:window-x="0"
inkscape:window-y="953"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="opacity:1;fill:none;fill-opacity:0.503497;fill-rule:nonzero;stroke:#0000ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-opacity:1"
d="m 120,60 0,80 m -40,-80 0,80 m -20,-20 80,0 m 0,-40 -80,0 M 100,50 135.355,64.6447 150,100 135.355,135.355 100,150 64.6447,135.355 50,100 64.6447,64.6447 Z"
id="path3336"
inkscape:connector-curvature="0" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-852.362)" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

29613
node_modules/milsymbol/dist/milsymbol.development.js generated vendored Normal file

File diff suppressed because one or more lines are too long

27
node_modules/milsymbol/dist/milsymbol.js generated vendored Normal file

File diff suppressed because one or more lines are too long

1
node_modules/milsymbol/dist/milsymbol.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

967
node_modules/milsymbol/docs/README.md generated vendored Normal file
View File

@@ -0,0 +1,967 @@
# Milsymbol Documentation
## Installing
You can download the latest release directly from GitHub if you want to:
https://github.com/spatialillusions/milsymbol/releases/latest
You can also get milsymbol using npm:
```
npm install milsymbol --save
```
AMD, CommonJS, and vanilla environments are supported. The module is always
named 'milsymbol' and in vanilla, a 'ms' global is exported:
```html
<script src="dist/milsymbol.js"></script>
<script>
var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 });
</script>
```
In a framework like [Dojo](https://dojotoolkit.org) you can load milsymbol like
this:
```html
<html>
<body>
<script src="dojo/dojo.js" data-dojo-config="async: true"></script>
<script src="app/milsymbol.js"></script>
<script>
require(["milsymbol"], function(ms) {
var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 });
});
</script>
</body>
</html>
```
This way of loading milsymbol makes it possible to use Dojo from an external
source, like js.arcgis.com.
If you only are using it with local sources or if you are uploading it to ArcGIS
Web AppBuilder, you can rebuild it by running `npm run build-amd`, and now you
can `require(["app/milsymbol"].....` if _milsymbol.js_ is placed in your app
folder. See more about building under [Building milsymbol](#building-milsymbol).
# Creating military unit symbols
Each symbol created with milsymbol is its own object and the properties of the
object can be updated or added after that the symbol object is created. The
symbol object also has methods to provide the symbol in different formats and
to provide information about the created symbol.
All functionality in milsymbol is normally found under the `ms` namespace, but
if you have imported milsymbol to another variable, you will have to use that
instead of `ms`.
## ms.Symbol(_arg1, arg2 ... argN_)
Initiates a new symbol object, where arg1-argN are options objects. If you
provide an argument that isn't an object we will assume that it is the SIDC for
the symbol.
Even if options can be provided or updated after the symbol object is created,
the performance will be better if you provide them directly when you create the
symbol, or to provide no arguments at all, this is because every time you update
some options the symbol will automatically be updated.
```javascript
var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 });
```
Once you have initiated your symbol, you can use different methods to request
rendering of the symbol or get information about the symbol. It is also
possible to chain methods directly to the initiation:
```javascript
var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 }).asSVG();
```
**General options**
It is possible to add any custom options to your options object as well as the
options listed below.
| Option | Type | Default | Description |
| ------ | ------ | ------- | ----------------------- |
| sidc | String | '' | The SIDC for the symbol |
**Modifier options**
The following options are modifiers, text or graphical, that are defined in the
standard documents.
| Option | Type | Default | Description |
| --------------------- | ------ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| additionalInformation | String | '' | A text modifier for units, equipment, and installations; content is implementation specific. <br/>**Field H** _20 Characters_ |
| altitudeDepth | String | '' | A text modifier for units, equipment, and installations, that displays either altitude flight level, depth for submerged objects; or height of equipment or structures on the ground. <br/>**Field X** _14 Characters_ |
| combatEffectiveness | String | '' | A text modifier for units and installations that indicates unit effectiveness or installation capability. <br/>**Field K** _5 Characters_ |
| commonIdentifier | String | '' | Example: "Hawk" for Hawk SAM system. <br/>**Field AF** |
| country | String | '' | Three letter representing the country. <br/>**Field AC** |
| direction | Number | undefined | At the moment all directions should be in degrees and not in mils. Set to an undefined to remove the direction arrow. <br/>**Field Q** |
| dtg | String | '' | A text modifier for units, equipment, and installations that displays DTG format: DDHHMMSSZMONYYYY or "O/O" for on order. <br/>**Field W** _16 Characters_ |
| engagementBar | String | '' | Engagement bar text, shall be arranged as follows: A:BBB-CC. <br/>**Field AO** |
| engagementType | String | '' | Engagement bar type, should be one of the following "TARGET", "NON-TARGET", or "EXPIRED" |
| equipmentTeardownTime | String | '' | Equipment teardown time in minutes. <br/>**Field AE** |
| evaluationRating | String | '' | A text modifier for units, equipment, and installations that consists of a one-letter reliability rating and a one-number credibility rating.<br/>**Field J** _2 Characters_ |
| guardedUnit | String | '' | During ballistic missile defence, some tracks are designated as guarded by a particular unit. <br/>**Field AQ** _2 Characters_ |
| headquartersElement | String | '' | Example: Tactical Operations Centre put as 'TOC'. <br/>**Field AH** |
| higherFormation | String | '' | A text modifier for units that indicates number or title of higher echelon command (corps are designated by Roman numerals). <br/>**Field M** _21 Characters_ |
| hostile | String | '' | A text modifier for equipment; letters "ENY" denote hostile symbols. <br/>**Field N** _3 Characters_ |
| iffSif | String | '' | A text modifier displaying IFF/SIF Identification modes and codes. <br/>**Field P** _5 Characters_ |
| location | String | '' | A text modifier for units, equipment, and installations that displays a symbol's location in degrees, minutes, and seconds (or in UTM or other applicable display format). <br/>**Field Y** _19 Characters_ |
| platformType | String | '' | "ELNOT" or "CENOT" <br/>**Field AD** |
| quantity | String | '' | A text modifier in an equipment symbol that identifies the number of items present. <br/>**Field C** or **Field R** _9 Characters_ |
| reinforcedReduced | String | '' | A text modifier in a unit symbol that displays (+) for reinforced, (-) for reduced, (±) reinforced and reduced. <br/>**Field F** _3 Characters_ |
| sigint | String | '' | M = Mobile, S = Static, or U = Uncertain. <br/>**Field R2** |
| specialDesignator | String | '' | Special track designators, such as Non-Real Time (NRT) and Tactically Significant (SIG) tracks, are denoted here.<br/>**Field AR** _3 Characters_ |
| signatureEquipment | String | '' | A text modifier for hostile equipment; "!" indicates detectable electronic signatures. <br/>**Field L** _1 Character_ |
| specialHeadquarters | String | '' | A text modifier for units; indicator is contained inside the frame; contains the name of the special C2 Headquarters. <br/>**Field AA** _9 Characters_ |
| speed | String | '' | A text modifier for units and equipment that displays velocity as set forth in MIL-STD-6040. <br/>**Field Z** _8 Characters_ |
| speedLeader | Number | 0 | This is the length of the speed leader in pixels, this will be independet of the size of the symbol. |
| staffComments | String | '' | A text modifier for units, equipment and installations; content is implementation specific. <br/>**Field G** _20 Characters_ |
| targetNumber | String | '' | A six character text modifier used in Fire Support operations to uniquely designate targets in accordance with STANAG 2147, where characters 1 and 2 are alphabetic, and characters 3-6 are numeric: AANNNN. <br/>**Field AP** _6 Characters_ |
| type | String | '' | A text modifier for equipment that indicates types of equipment. <br/>**Field V** _24 Characters_ |
| uniqueDesignation | String | '' | A text modifier for units, equipment, and installations that uniquely identifies a particular symbol or track number. Identifies acquisitions number when used with SIGINT symbology.<br/>**Field T** _21 Characters_ |
**Style options**
The following options are style options that changes the look of the symbol in
different ways.
| Option | Type | Default | Description |
| -------------------- | ------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| alternateMedal | Boolean | false | MIL-STD-2525D lets you choose between MEDAL and alternate MEDAL icons for mine warfare symbols, the default in milsymbol is using MEDAL icons, but you can change this using setting this property to true. |
| civilianColor | Boolean | true | 2525C specifics purple as an optional color for civilian symbols. Of course we like color so we set this as default. |
| colorMode | ColorMode or String | 'Light' | This is the option for setting what Color object to use for the fill of the symbols. It can be set to a Color object, or a string representing the name of a registered Color object. You can use ms.ColorMode to create a new color mode, or ms.getColorMode to get an existing color mode. **Note that the string is not a single color, it is a name of a registered color mode**, by default "Light", "Medium", and "Dark" are registered color modes. |
| fill | Boolean | true | Should your symbol be filled with color. |
| fillColor | String | "" | Override the fill color of the symbol with any color string. |
| fillOpacity | Number | 1 | The opacity of the symbol fill color. |
| fontfamily | String | 'Arial' | Changes the font family for all texts surrounding the icon. |
| frame | Boolean | true | Should your symbol have a frame. All symbols support to be unframed, not just the ones specified in 2525B. |
| frameColor | ColorMode | false | Changes the color of the frame of the symbol |
| hqStaffLength | Number | undefined | Overrides the global Headquarters staff length |
| icon | Boolean | true | Should your symbol have an icon. |
| infoBackground | ColorMode or String | "" | Changes the color of the information background |
| infoBackgroundFrame | ColorMode or String | "" | Changes the color of the frame of the information background |
| iconColor | ColorMode | false | Changes the color of the icon of the symbol |
| infoColor | ColorMode or String | Same color as the frame outline | This will be used for texts in the text fields surrounding the symbol. It is a ColorMode, or a string color that is either a keyword or a numerical RGB specification. |
| infoFields | Boolean | true | If you have set some text fields and direction but don't want them to be displayed you can set infoFields to false. This makes it possible to initiate the object with all information you got but not display it. |
| infoOutlineColor | String or `false` | rgb(239, 239, 239) | The color of the outline that should be drawn around text fields, or `false` to use the value of `outlineColor`. |
| infoOutlineWidth | Number or `false` | false | The width of the outline that should be drawn around text fields, or `false` to use the value of `outlineWidth`. |
| infoSize | Number | 40 | The size of the text fields surrounding the symbol. This is relative to the size of the symbol, so you can consider 40 to be 40% of the default size that is 100. |
| monoColor | String | '' | A color that is either a keyword or a numerical RGB specification. If you set this the symbol will be monochrome and unfilled using the color provided. |
| outlineColor | ColorMode or String | rgb(239, 239, 239) | A color that is either a keyword or a numerical RGB specification. The color of the outline of the symbol, if any. Defaults to an off-white color. |
| outlineWidth | Number | 0 | The width of the outline that should be drawn around all symbol parts, if any. |
| padding | Number | 0 | Milsymbol usually tries to fit the bounds for the symbol as snug as possible, but in some cases you want to add some extra padding around your symbol, then simply set this option to any number. |
| size | Number | 100 | The L value for your symbol, where the L value is the width of the icon octagon. |
| simpleStatusModifier | Boolean | false | Should the symbol use simplified status modifiers, this is the default for unfilled symbols and can be forced for filled symbols using this option. |
| standard | String | '' | This is a way to override the default standard set for milsymbol. You can set this variable to "2525" or "APP6" depending on what standard you prefer. |
| square | Boolean | false | Should the symbol be square with the insertion point in the center. |
| strokeWidth | Number | 3 | The stroke width of the symbol. |
**Returns**
```javascript
Object this
```
---
### asCanvas(_factor_)
Returns the symbol as a Canvas Element. It is possible to provide a resolution
factor if a symbol with a higher resolution is wanted, this won't affect
numbers reported by `getSize()`, `getAnchor()` or `getOctagonAnchor()`.
**Returns**
```javascript
Canvas Element
```
---
### asDOM()
Returns the symbol as a SVG DOM Element.
**Returns**
```javascript
DOM Element
```
---
### asSVG()
Returns the symbol as a SVG string.
**Returns**
```javascript
String;
```
---
### getAnchor()
Getting the anchor point where the symbol should be inserted measured from the top
left corner of the symbol.
**Returns**
```javascript
Object {x:Number, y:Number}
```
---
### getColors()
Gets the colors used for this symbol.
**Returns**
```javascript
Object {
black: ColorMode, // Black parts of the symbol.
fillColor: ColorMode, // Symbol fill color.
frameColor: ColorMode, // Symbol frame color.
iconColor: ColorMode, // Icon color.
iconFillColor: ColorMode, // Icon fill color.
none: ColorMode, // Transparent parts of the symbol.
white: ColorMode // White parts of the symbol.
}
```
---
### getMetadata()
Gets all metadata that is computed for the SIDC of this symbol.
**Returns**
```javascript
Object {
activity: Boolean, // Is it an Activity
affiliation: String, // Affiliation it is shown as (Friend/Hostile...)
baseAffilation: String, // Affiliation it belongs to (Friend/Hostile...)
baseDimension: String, // Dimension it belongs to (Air/Ground...)
baseGeometry: Object, // Geometry is a combination of dimension and affiliation (AirFriend/GroundHostile...)
civilian: Boolean, // Is it Civilian
condition: String, // What condition is it in
context: String, // Context of the symbol (Reality/Exercise...)
dimension: String, // Dimension it is shown as (Air/Ground...) for example Ground Equipment is shown with the same shape as Sea.
dimensionUnknown: Boolean, // Is the dimension unknown
echelon: String, //What echelon (Platoon/Company...)
faker: Boolean, // Is it a Faker
fenintDummy: Boolean, // Is it a feint/dummy
fill: Boolean, // Standard says it should be filled
frame: Boolean, // Standard says it should be framed
functionid: String, // Part of SIDC referring to the icon.
headquarters: Boolean, // Is it a Headquarters
installation: Boolean, // Is it an Instalation
joker: Boolean, // Is it a Joker
mobility: String, // What mobility (Tracked/Sled...)
notpresent: String, // Is it Anticipated or Pending
numberSIDC: Boolean, // Is the SIDC number based
space: Boolean, // Is it in Space
taskForce: Boolean // Is it a task force
}
```
---
### getOptions(_includeStyle_)
Get the options that are set on the symbol. If includeStyle is set to `false`
style information will not be included in the returned options if it is set to
`true` or left out style information will be included in the returned options.
**Returns**
```javascript
Object;
```
---
### getOctagonAnchor()
Getting the center of the symbol octagon measured from the top left corner of
the symbol.
**Returns**
```javascript
Object {x:Number, y:Number}
```
---
### getSize()
Gets the size of the current symbol.
**Returns**
```javascript
Object {width:Number, height:Number}
```
---
### getStyle()
Gets the style part of the symbol options of the current symbol.
**Returns**
```javascript
Object;
```
---
### isValid(_extended_)
If extended is set to `true` it will return an object with the validity of
different parts of the symbol code, if extended is omitted or set to false it
will return a boolean representing if it was possible to find an icon for the
provided SIDC or not. In the future, this might validate other parameters as
well.
**Returns**
```javascript
Boolean or Object
```
---
### setOptions(_arg1, arg2 ... argN_)
This sets the options for a symbol and updates the symbol, the arguments are
options Objects in the same way as when you create a new symbol, where an
updated SIDC can be included in the options object (`sidc: String`). If
setOptions is called without an options object, the symbol is simply updated.
**Returns**
```javascript
this;
```
---
### toDataURL()
Returns the SVG of a symbol as a base 64 encoded string, this can be useful in
some cases where you want to assign the output as a source for an image element.
If you want a PNG as a base 64 encoded string, simply call
`.asCanvas().toDataURL()`.
**Returns**
```javascript
String;
```
---
# Developing milsymbol
This describes more advanced development with milsymbol, this includes adding
your own symbols, overwriting existing icons and in other ways modifying the
standard output from milsymbol.
The base concept for milsymbol has been that everything that is used internally
to build up the symbols should be possible to modify, this makes it possible to
do everything from changing colors to adding completely new parts to the
generated symbols.
All the following code can be used to inject functionality into milsymbol
externally, but you can also choose to build your own version of milsymbol.
## Building milsymbol
Milsymbol is built using [webpack](https://webpack.js.org), and if you installed
milsymbol npm everything you need to build milsymbol should have been installed
as well since they are listed as devDependencies in package.json, if you don't
have npm installed, you will have to install it to build milsymbol.
The structure of the code is that the webpack config (_webpack.config.js_) is
located in the root directory, and the entry point (_index.js_) and all other
source code is under `/src`.
Once you have changed the parts of the code that you want to change, you simply
run:
```
npm run build
```
Webpack will then build milsymbol and minify the output into `/dist`.
It is also possible to build an un-minified version of milsymbol by running:
```
npm run build-dev
```
And finally tests are located in the `/test` and you can run the tests by
running:
```
npm run test
```
## Draw instruction
The symbols in milsymbol are drawn using JSON draw instructions
`drawInstruction`, these are then converted into Canvas draw instructions, or
SVG output.
If you are creating your own JSON geometries for usage in milsymbol, they should
have the origo at 100,100, and the hight and width of the icon octagon is 100.
There is a sample SVG representing the symbol octagon available in the `dev
folder.
The following different kinds of draw instructions can be used in milsymbol:
```javascript
Object {
type: 'path',
d: String, // SVG path data
fill: String, // Fill color or set to false if none
fillopacity: Number, // Fill opacity {Optional}
stroke: String, // Stroke color or set to false if none
strokedasharray: String, // {Optional}
strokewidth: Number, // Width of the stroke {Optional}
}
```
```javascript
Object {
type: 'circle',
cx: Number, // Center x
cy: Number, // Center y
r: Number, // Radius
fill: String, // Fill color or set to false if none
fillopacity: Number, // Fill opacity {Optional}
stroke: String, // Stroke color or set to false if none
strokedasharray: String, // {Optional}
strokewidth: Number, // Width of the stroke {Optional}
}
```
```javascript
Object {
type: 'text',
x: Number,
y: Number,
textanchor: String,
fontsize: Number,
fontfamily: String,
fontweight: String,
fill: String, // Fill color or set to false if none
fillopacity: Number, // Fill opacity {Optional}
stroke: String, // Stroke color or set to false if none
strokedasharray: String, // {Optional}
strokewidth: Number, // Width of the stroke {Optional}
}
```
```javascript
Object {
type: 'translate',
x: Number, // Move x
y: Number, // Move y
draw: drawInstruction
}
```
```javascript
Object {
type: 'rotate',
degree: Number, // Rotation angle
x: Number, // Rotate center x
y: Number, // Rotate center y
draw: drawInstruction
}
```
```javascript
Object {
type: 'scale',
factor: Number, // Factor to scale
draw: drawInstruction
}
```
```javascript
Object {
type: 'svg',
svg: String // Full SVG XML
}
```
Several draw instructions can be grouped together in an Array to for a more
complex part of a symbol, this is also a `drawInstruction` and the code will
handle both Objects and Arrays.
```javascript
Array [
drawInstruction,
drawInstruction,
drawInstruction,
drawInstruction,
...
]
```
---
## ms.BBox({box})
```javascript
Object {
x1: Number, // Left coordinate {Optional}
y1: Number, // Top coordinate {Optional}
x2: Number, // Right coordinate {Optional}
y2: Number, // Bottom coordinate {Optional}
}
```
Creates a bounding box Object. It is initiated with an optional object. Values
that are omitted will default to 100, and if an object isn't provided all values
will default to 100.
**Returns**
```javascript
Object {
x1: Number, // Left coordinate
y1: Number, // Top coordinate
x2: Number, // Right coordinate
y2: Number, // Bottom coordinate
width: Function, // Returns box width
height: Function, // Returns box height
merge(box): Function // Merges one box with another and returns the original box
}
```
## ms.ColorMode(civilian, friend, hostile, neutral, unknown)
```javascript
civilian: String,
friend: String,
hostile: String,
neutral: String,
unknown: String,
```
Creates a ColorMode Object with colors used for different affiliations.
**Returns**
```javascript
Object {
Civilian: String,
Friend: String,
Hostile: String,
Neutral: String,
Unknown: String
}
```
---
## ms.addIconParts(iconFunction)
```javascript
iconFunction: Function;
```
Adds an icon function to milsymbol. All icons on the symbols in milsymbol are
built by different icon parts, it can be one for Infantry and one for Armor, add
them together and you will have the icon for Armored Infantry. By reusing icon
parts as much as possible the size of milsymbol is reduced.
If you want to override built-in icon parts or add new to use with custom SIDC,
you can do this by adding an icon function.
Example:
```javascript
ms.addIconParts(function(
iconParts,
metadata,
colors,
std2525,
monoColor,
alternateMedal
) {
/*
iconParts: Object - The existing object of icon parts
metadata: Object - properties object
colors: Object - color object
std2525: Boolean - Is it 2525 then true, otherwise false
alternateMedal: Boolean - true/false for sea mine stuff
*/
// Adding a custom part for tactical graphics
iconParts["TP.HARBOR"] = {
type: "path",
fill: false,
d: "M 80,140 50,60 150,60 120,140"
};
/*
Since we are modifying directly to the existing object of icon parts,
we don't have to return anything.
*/
});
```
**Returns**
```javascript
Object ms
```
## ms.addLabelOverrides(labelFunction, type)
```javascript
labelFunction: Function,
type: String // 'letter' or 'number' depending on the type of the SIDC
```
Adds label overrides to milsymbol. If you have some symbols that you want to
have labels that differ from how ordinary symbols are labeled, such as tactical
graphics, you can add label override functions that place the labels
differently.
Example:
```javascript
ms.addLabelOverrides(
function tacticalPoints(sidc) {
/*
sidc: Object - The existing object of label overrides
*/
/*
Creates an override for SIDC 'G-G-GPPK--', each option
listed will be applied to the text drawInstruction
*/
sidc["G-G-GPPK--"] = {
additionalInformation: {
stroke: false,
textanchor: "middle",
x: 100,
y: -70,
fontsize: 40
},
hostile: {
stroke: false,
textanchor: "start",
x: 150,
y: 45,
fontsize: 40
},
uniqueDesignation: {
stroke: false,
textanchor: "start",
x: 150,
y: 0,
fontsize: 80
},
dtg: { stroke: false, textanchor: "end", x: 50, y: -30, fontsize: 40 },
dtg1: { stroke: false, textanchor: "end", x: 50, y: 10, fontsize: 40 }
};
/*
Since we are modifying directly to the existing object of overrides,
we don't have to return anything.
*/
},
"letter" //Setting letter as SIDC type
);
```
**Returns**
```javascript
Object ms
```
## ms.addSIDCicons(sidcFunction, type)
```javascript
sidcFunction: Function,
type: String // 'letter' or 'number' depending on the type on the SIDC
```
Adds a function for creating icons representing different SIDCs. It is possible
to add custom SIDC, or to modify existing SIDC by adding a custom SIDC function.
Example:
```javascript
ms.addSIDCicons(
function tacticalPoints(sidc, bbox, icnParts, std2525) {
/*
sidc: Object - The existing object of SIDC
bbox: Object - The existing object of Bounding Boxes for SIDC
iconParts: Object - The existing object of icon parts
std2525: Boolean - Is it 2525 then true, otherwise false
*/
// Creating a new SIDC
sidc["G-T-D-----"] = icn["TP.DESTROY"];
bbox["G-T-D-----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
// If we don't provide a bounding box, it will be set to the bounds of the icon octagon
sidc["G-T-I-----"] = icn["TP.INTERDICT"];
/*
Since we are modifying directly to the existing object of SIDCs,
we don't have to return anything.
*/
},
"letter" //Setting letter as SIDC type
);
```
**Returns**
```javascript
Object ms
```
## ms.addSymbolPart(part)
```javascript
part: function
```
Adds a new symbol function to milsymbol. A symbol function is a function that
returns an Object with two drawInstruction and one bounding box, like this:
```javascript
Object {
pre: drawInstruction, // This is to be drawn before anything else
post: drawInstruction, // This is to be drawn after anything else
bbox: bbox // The bounding box of the added drawInstructions
}
```
By inserting a pre and a post drawInstruction, we are able to draw parts of
the symbol that requires information, such as bounding boxes, previously drawn,
but to draw them before the other parts are drawn. It's quite clever, trust me.
**Returns**
```javascript
Object ms
```
## ms.getColorMode(mode)
```javascript
mode: String; // Name of a color mode registered with setColorMode
```
Gets a color mode that has been registered with `setColorMode`. When milsymbol is
initiated the following color modes are registered automatically:
| Color mode name | Description |
| --------------- | ------------------------------------------------- |
| Light | Light fill colors. |
| Medium | Medium fill colors. |
| Dark | Dark fill colors. |
| FrameColor | Frame colors for unfilled symbols. |
| IconColor | Icon colors for unfilled and unframed symbols. |
| Black | This is all black. |
| White | This is all white. |
| OffWhite | This is off white, used for white parts of icons. |
| None | This is no color, used to turn colors off. |
**Returns**
```javascript
Object {
Civilian: String,
Friend: String,
Hostile: String,
Neutral: String,
Unknown: String
}
```
## ms.getDashArrays()
Gets the different dash arrays used for dashed lines.
**Returns**
```javascript
Object {
pending: String, // The value for the stroke-dasharray used for symbols with a pending status.
anticipated: String, // The value for the stroke-dasharray used for symbols with an anticipated status.
feintDummy: String // The value for the stroke-dasharray used for the feint/dummy modifier.
}
```
## ms.getHqStaffLength()
Gets the length of the HQ staff used for HQ symbols.
**Returns**
```javascript
Number;
```
## ms.getSymbolParts()
This gets all symbol functions that have been inserted by `ms.addSymbolPart`.
**Returns**
```javascript
Array [
symbolFunction,
symbolFunction,
symbolFunction,
...
]
```
## ms.getVersion()
Gets the version of milsymbol.
**Returns**
```javascript
String;
```
## ms.outline(drawInstruction, outline, stroke, color)
```javascript
drawInstruction: drawInstruction,
outline: Number,
stroke: Number,
color: String
```
Takes the drawInstruction in the input and modifies them so that they only are
stroked.
Outline is the outline width, stroke is the original stroke width, and color is
the color the outline should have.
**Returns**
```javascript
Array or Object
```
## ms.setColorMode(name, colormode)
```javascript
name: String,
colormode: ColorMode
```
Register a ColorMode with a name or override an existing ColorMode.
**Returns**
```javascript
Object ColorMode
```
## ms.setDashArrays(pending, anticipated, feintDummy)
```javascript
pending: String, // The value for the stroke-dasharray used for symbols with a pending status.
anticipated: String, // The value for the stroke-dasharray used for symbols with an anticipated status.
feintDummy: String // The value for the stroke-dasharray used for the feint/dummy modifier.
```
Sets the dash arrays used for dashed lines.
Example:
```javascript
var dashObj = ms.setDashArrays("4,4", "8,12", "8,8");
```
**Returns**
```javascript
Object {
pending: String,
anticipated: String,
feintDummy: String
}
```
## ms.setHqStaffLength(staff_length)
```javascript
staf_length: Number;
```
Sets the length of the HQ staff used for HQ symbols.
**Returns**
```javascript
Number;
```
## ms.setStandard(standard)
```javascript
standard: String; // '2525' or 'APP6'
```
This sets the preferred standard.
Sometimes APP6 and 2525 differ in symbols. Default we are using 2525 symbology,
but you can select to follow APP6 instead. (All possible SIDC will have some
kind of symbol no matter setting, so you will always get a symbol.)
**Returns**
```javascript
Boolean; // true if the standard was set, otherwise false
```
## ms.setSymbolParts(parts)
```javascript
parts: Array; // Array of symbolFunctions
```
Replaces the current symbol functions with an Array of symbol functions. This
can be used to modify the symbol functions that are built into milsymbol.
**Returns**
```javascript
Object ms
```

BIN
node_modules/milsymbol/docs/images/figure13.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

1
node_modules/milsymbol/docs/images/figure13.svg generated vendored Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny" width="385.9333333333333" height="98.7" viewBox="-405.33333333333337 -14 1102.6666666666665 282"><g transform="translate(0,160)" stroke-width="4" stroke="black" fill="none"><path d="M 50,1 l 100,0"></path><circle cx="55" cy="8" r="8"></circle><circle cx="70" cy="8" r="8"></circle><circle cx="130" cy="8" r="8"></circle><circle cx="145" cy="8" r="8"></circle></g><circle cx="100" cy="100" r="60" stroke-width="4" stroke="black" fill="rgb(128,224,255)" fill-opacity="1"></circle><g transform="translate(0,160)"><g transform="rotate(42.1875,100,100)"><path d="M100,100 l0,-75 -5,3 5,-15 5,15 -5,-3" stroke-width="4" stroke="black" fill="black"></path></g></g><path d="M 100,160l0,100" stroke-width="4" stroke="black" fill="black"></path><text x="100" y="30" text-anchor="middle" font-size="40" font-family="Arial" stroke-width="4" stroke="none" fill="black">200</text><text x="20" y="40" text-anchor="end" font-size="40" font-family="Arial" stroke-width="4" stroke="none" fill="black">30140000ZSEP97</text><text x="20" y="80" text-anchor="end" font-size="40" font-family="Arial" stroke-width="4" stroke="none" fill="black">0900000.0E570306.0N</text><text x="20" y="120" text-anchor="end" font-size="40" font-family="Arial" stroke-width="4" stroke="none" fill="black">MACHINE GUN</text><text x="180" y="80" text-anchor="start" font-size="40" font-family="Arial" stroke-width="4" stroke="none" fill="black">FOR REINFORCEMENTS</text><text x="180" y="120" text-anchor="start" font-size="40" font-family="Arial" stroke-width="4" stroke="none" fill="black">ADDED SUPPORT FOR JJ</text><path d="m 100,60 0,80 M 85,75 100,60 115,75" stroke-width="4" stroke="black" fill="none"></path><path d="m 85,110 30,0 m -30,-20 30,0 m -30,10 30,0" stroke-width="4" stroke="black" fill="none"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
node_modules/milsymbol/docs/images/infantry-platoon.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

BIN
node_modules/milsymbol/docs/images/milsymbol.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

127
node_modules/milsymbol/docs/letter-sidc.js generated vendored Normal file
View File

@@ -0,0 +1,127 @@
var size = 70;
ms._autoValidation = true;
function generatenavigation() {
var i = 0;
var indexoftables = "";
document.querySelectorAll("h2, h3").forEach(function(d) {
i++;
d.id = "heading-" + i;
indexoftables +=
'<a href="#heading-' +
i +
'" class="index-' +
d.tagName.toLowerCase() +
'">' +
d.textContent +
"</a><br>\n";
});
document.getElementById("indexoftables").innerHTML = indexoftables;
i = 0;
var indexoffigures = "";
document.querySelectorAll("figure").forEach(function(d) {
i++;
d.id = "figure-" + i;
d = d.getElementsByTagName("figcaption").item(0);
indexoffigures +=
'<a href="#figure-' + i + '">' + d.textContent + "</a><br>\n";
});
document.getElementById("indexoffigures").innerHTML = indexoffigures;
}
function remarks(remark) {
if (remark == "Wrong SIDC in standard") return { monoColor: "Red" };
if (["N/A"].indexOf(remark) != -1) {
return { monoColor: "Silver" };
} else {
return {};
}
}
function labels(icon) {
if (icon.hierarchy.split(".")[0] == "TACGRP") {
return {
infoColor: "Silver",
additionalInformation: "H",
additionalInformation1: "H1",
hostile: "N",
uniqueDesignation: "T",
dtg: "W",
dtg1: "W1",
altitudeDepth: "X"
};
} else {
return {};
}
}
function renderSymbolSet(symbolset) {
var output = "";
var i;
output += "<h2>" + symbolset.name + "</h2>";
output += "<table border=1><thead><tr><th>Description</th><th>Icon</th>";
output += "<th>Remarks</th></tr></thead>";
for (i = 0; i < symbolset.mainIcon.length; i++) {
output += "<tr";
if (symbolset.mainIcon[i].remarks == "N/A") output += ' class="na"';
output += "><td><b>" + symbolset.mainIcon[i].hierarchy + "</b>";
for (var j = 0; j < symbolset.mainIcon[i].names.length; j++) {
if (j == symbolset.mainIcon[i].names.length - 1) {
output += "<br><b>" + symbolset.mainIcon[i].names[j] + "</b>";
} else {
if (
symbolset.mainIcon[i].names[j] &&
!(
symbolset.mainIcon[i].hasOwnProperty("geometry") &&
symbolset.mainIcon[i].geometry != "POINT"
)
)
output += "<br><em>" + symbolset.mainIcon[i].names[j] + "</em>";
}
}
output +=
"<br><em>SIDC:</em> " +
symbolset.mainIcon[i]["codingscheme"] +
"*" +
symbolset.mainIcon[i]["battledimension"] +
"*" +
symbolset.mainIcon[i].functionid;
if (
!(
symbolset.mainIcon[i].hasOwnProperty("geometry") &&
symbolset.mainIcon[i].geometry != "POINT"
)
) {
output +=
"</td><td>" +
new ms.Symbol(
symbolset.mainIcon[i]["codingscheme"] +
"F" +
symbolset.mainIcon[i]["battledimension"] +
"P" +
symbolset.mainIcon[i].functionid,
{ size: size },
remarks(symbolset.mainIcon[i].remarks),
labels(symbolset.mainIcon[i])
).asSVG();
output += "</td>";
} else {
output += "</td><td>" + symbolset.mainIcon[i].geometry;
output += "</td>";
}
output +=
"<td>" +
(symbolset.mainIcon[i].remarks ? symbolset.mainIcon[i].remarks : "") +
"</td></tr>";
}
output += "</table>";
return output;
}

107
node_modules/milsymbol/docs/milsymbol-2525b-ch2.html generated vendored Normal file
View File

@@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Milsymbol 2525B</title>
<link rel="stylesheet" href="style.css" />
<script src="../dist/milsymbol.development.js"></script>
<script src="milstd-2525.js"></script>
<script src="letter-sidc.js"></script>
</head>
<body onload="generatenavigation();">
<h1>Milsymbol MIL-STD-2525B change 2 Implementation</h1>
This page shows figures and tables from MIL-STD-2525B change 2 drawn with milsymbol.
<br> All symbols are drawn using milsymbol when the page is loaded, no images or other external resources than
milsymbol are
used.
<br>
<br>
<b>INDEX OF TABLES</b>
<br>
<div id="indexoftables"></div>
<br>
<b>INDEX OF FIGURES</b>
<br>
<div id="indexoffigures"></div>
<br>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].WAR.SPC // Space
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].WAR.AIRTRK // Air
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].WAR.GRDTRK // Ground
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].WAR.SSUF // Sea surface
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].WAR.SBSUF // Sea subsurface
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].WAR.SOFUNT // SOF
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].TACGRP
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].SIGINT // OTHER
)
);
</script>
<script>
document.write(
renderSymbolSet(
milstd2525["ms2525b"].MOOTW // OTHER
)
);
</script>
</body>
</html>

2609
node_modules/milsymbol/docs/milsymbol-2525c.html generated vendored Normal file

File diff suppressed because it is too large Load Diff

2998
node_modules/milsymbol/docs/milsymbol-2525d.html generated vendored Normal file

File diff suppressed because it is too large Load Diff

1212
node_modules/milsymbol/docs/milsymbol-APP6b.html generated vendored Normal file

File diff suppressed because it is too large Load Diff

1759
node_modules/milsymbol/docs/milsymbol-APP6d.html generated vendored Normal file

File diff suppressed because it is too large Load Diff

315
node_modules/milsymbol/docs/number-sidc.js generated vendored Normal file
View File

@@ -0,0 +1,315 @@
var size = 70;
/*
// Since we don't have any geometry types in APP-6 D controle measures, let us get them from 2525D
var control = milstd["ms2525d"]["25"]["main icon"];
var std2525lookup = {};
for (var i = 0; i < control.length; i++) {
std2525lookup[control[i]["Code"]] = control[i].geometry;
}
for (var j = 0; j < milstd["app6d"]["25"]["main icon"].length; j++) {
milstd["app6d"]["25"]["main icon"][j].geometry = std2525lookup[milstd["app6d"]["25"]["main icon"][j]["Code"]];
}
*/
/*
ms.addSymbolPart(function debug() {
//This debug function is a minimal example of how to extend milsymbol.
//Create a variable to store your geometries
var drawArray1 = [];
var drawArray2 = [];
//Get a new bounding box and modify it if your geometry extends outside the current bounds.
var gbbox = new ms.BBox();
//Draws the icon octagon
drawArray2.push({
type: "path",
fill: false,
stroke: "rgb(0,0,255)",
strokewidth: 0.8,
d:
"m 120,60 0,80 m -40,-80 0,80 m -20,-20 80,0 m 0,-40 -80,0 M 100,50 135.35534,64.64466 150,100 135.35534,135.35534 100,150.00002 64.644661,135.35534 50,100 64.644661,64.64466 z"
});
return { pre: drawArray1, post: drawArray2, bbox: gbbox };
});
//*/
function generatenavigation() {
var i = 0;
var indexoftables = "";
document.querySelectorAll("h2, h3").forEach(function(d) {
i++;
d.id = "heading-" + i;
indexoftables +=
'<a href="#heading-' +
i +
'" class="index-' +
d.tagName.toLowerCase() +
'">' +
d.textContent +
"</a><br>\n";
});
document.getElementById("indexoftables").innerHTML = indexoftables;
i = 0;
var indexoffigures = "";
document.querySelectorAll("figure").forEach(function(d) {
i++;
d.id = "figure-" + i;
d = d.getElementsByTagName("figcaption").item(0);
indexoffigures +=
'<a href="#figure-' + i + '">' + d.textContent + "</a><br>\n";
});
document.getElementById("indexoffigures").innerHTML = indexoffigures;
}
function remarks(remark) {
if (
["From MIL-STD-2525.", "Simplification of MIL-STD-2525 icon TBD."].indexOf(
remark
) != -1
) {
return { monoColor: "Silver" };
} else {
return {};
}
}
function labels(icon) {
return {
infoColor: "Silver",
quantity: "C",
additionalInformation: "H",
additionalInformation1: "H1",
hostile: "N",
uniqueDesignation: "T",
uniqueDesignation1: "T1",
dtg: "W",
dtg1: "W1",
altitudeDepth: "X",
location: "Y",
targetNumber: "AP"
};
}
function renderSymbolSet(symbolset) {
var output = "";
var i;
output += "<h2>" + symbolset.name + "</h2>";
output += "<h3>" + symbolset.name + " Main Icon</h3>";
output += "<table border=1><thead><tr><th>Description</th><th>Icon</th>";
if (symbolset.symbolset == 36) output += "<th>Alternate Icon</th>";
output += "<th>Remarks</th></tr></thead>";
for (i = 0; i < symbolset.mainIcon.length; i++) {
var symbol = new ms.Symbol(
"1003" +
symbolset.symbolset +
"0000" +
symbolset.mainIcon[i]["Code"] +
"0000",
{ size: size },
remarks(symbolset.mainIcon[i]["Remarks"]),
symbolset.symbolset == 25 ? labels() : {}
);
output += "<tr";
if (
["N/A", "For training or hierarchical purposes only"].indexOf(
symbolset.mainIcon[i]["Remarks"]
) != -1
) {
output += ' class="na"';
}
if (
!symbol.isValid() &&
!(
symbolset.mainIcon[i].hasOwnProperty("Geometric Rendering") &&
symbolset.mainIcon[i]["Geometric Rendering"] != "Point"
)
) {
output += ' style="background-color:red"';
console.warn(
symbolset.mainIcon[i]["Entity Subtype"] ||
symbolset.mainIcon[i]["Entity Type"] ||
symbolset.mainIcon[i]["Entity"] +
"\n" +
symbol.getOptions().sidc +
"\n" +
symbol.isValid(true)
);
}
output +=
"><td><b>" +
(symbolset.mainIcon[i]["Entity Subtype"] ||
symbolset.mainIcon[i]["Entity Type"] ||
symbolset.mainIcon[i]["Entity"]) +
"</b>";
if (
!(
symbolset.mainIcon[i].hasOwnProperty("Geometric Rendering") &&
symbolset.mainIcon[i]["Geometric Rendering"] != "Point"
)
) {
output +=
"<br><br><em>Type:</em> " +
(symbolset.mainIcon[i]["Entity Subtype"]
? "Entity Subtype"
: symbolset.mainIcon[i]["Entity Type"]
? "Entity Type"
: "Entity");
if (symbolset.mainIcon[i]["Entity Subtype"]) {
output +=
"<br><em>Entity/Entity Type:</em> " +
symbolset.mainIcon[i]["Entity"] +
"/" +
symbolset.mainIcon[i]["Entity Type"];
} else {
if (symbolset.mainIcon[i]["Entity Type"]) {
output += "<br><em>Entity:</em> " + symbolset.mainIcon[i]["Entity"];
}
}
output += "<br><em>Symbol Set Code:</em> " + symbolset.symbolset;
}
output += "<br><em>Code:</em> " + symbolset.mainIcon[i]["Code"];
if (
!(
symbolset.mainIcon[i].hasOwnProperty("Geometric Rendering") &&
symbolset.mainIcon[i]["Geometric Rendering"] != "Point"
)
) {
output +=
"</td><td>" +
"<!--" +
"1003" +
symbolset.symbolset +
"0000" +
symbolset.mainIcon[i]["Code"] +
"0000" +
"-->" +
symbol.asSVG();
output += "</td>";
} else {
output += "</td><td>" + symbolset.mainIcon[i]["Geometric Rendering"];
output += "</td>";
}
if (symbolset.symbolset == 36) {
output +=
"<td>" +
new ms.Symbol(
"1003" +
symbolset.symbolset +
"0000" +
symbolset.mainIcon[i]["Code"] +
"0000",
{ size: size, alternateMedal: true },
remarks(symbolset.mainIcon[i]["Remarks"])
).asSVG();
output += "</td>";
}
output +=
"<td>" +
(symbolset.mainIcon[i]["Remarks"]
? symbolset.mainIcon[i]["Remarks"]
: "") +
"</td></tr>";
}
output += "</table>";
if (symbolset.modifier1.length) {
output += "<h3>" + symbolset.name + " Modifier 1</h3>";
output +=
"<table border=1><thead><tr><th>Description</th><th>Icon</th><th>Remarks</th></tr></thead>";
for (i = 0; i < symbolset.modifier1.length; i++) {
var symbol = new ms.Symbol(
"1003" +
symbolset.symbolset +
"0000000000" +
symbolset.modifier1[i]["Code"] +
"00",
{ size: size },
remarks(symbolset.modifier1[i]["Remarks"])
);
output += "<tr";
if (
symbolset.modifier1[i]["Code"].length == 2 &&
symbolset.modifier1[i]["Code"] != 99 &&
!symbol.isValid() &&
!(symbolset.symbolset == "25" && symbolset.modifier1[i]["Code"] <= 12) // mobility modifiers we don't support
) {
output += ' style="background-color:red"';
console.warn(
symbolset.modifier1[i]["First Modifier"] +
"\n" +
symbol.getOptions().sidc +
"\n" +
symbol.isValid(true)
);
}
output += "><td><b>" + symbolset.modifier1[i]["First Modifier"] + "</b>";
output += "<br><br><em>Symbol Set Code:</em> " + symbolset.symbolset;
output += "<br><em>Code:</em> " + symbolset.modifier1[i]["Code"];
output += "</td><td>";
if (
symbolset.modifier1[i]["Code"] != 99 &&
!isNaN(symbolset.modifier1[i]["Code"])
)
output += symbol.asSVG();
output += "</td><td>" + symbolset.modifier1[i]["Remarks"] + "</td></tr>";
}
output += "</table>";
}
if (symbolset.modifier2.length != 0) {
output += "<h3>" + symbolset.name + " Modifier 2</h3>";
output +=
"<table border=1><thead><tr><th>Description</th><th>Icon</th><th>Remarks</th></tr></thead>";
for (i = 0; i < symbolset.modifier2.length; i++) {
var symbol = new ms.Symbol(
"1003" +
symbolset.symbolset +
"000000000000" +
symbolset.modifier2[i]["Code"],
{ size: size },
remarks(symbolset.modifier2[i]["Remarks"])
);
output += "<tr";
if (
symbolset.modifier2[i]["Code"].length == 2 &&
symbolset.modifier2[i]["Code"] != 99 &&
!symbol.isValid()
) {
output += ' style="background-color:red"';
console.warn(
symbolset.modifier2[i]["Second Modifier"] +
"\n" +
symbol.getOptions().sidc +
"\n" +
symbol.isValid(true)
);
}
output += "><td><b>" + symbolset.modifier2[i]["Second Modifier"] + "</b>";
output += "<br><br><em>Symbol Set Code:</em> " + symbolset.symbolset;
output += "<br><em>Code:</em> " + symbolset.modifier2[i]["Code"];
output += "</td><td>";
if (
symbolset.modifier2[i]["Code"] != 99 &&
!isNaN(symbolset.modifier2[i]["Code"])
)
output += symbol.asSVG();
output += "</td><td>" + symbolset.modifier2[i]["Remarks"] + "</td></tr>";
}
output += "</table>";
}
return output;
}

58
node_modules/milsymbol/docs/style.css generated vendored Normal file
View File

@@ -0,0 +1,58 @@
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
"Segoe UI Symbol";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
max-width: 80%;
margin: auto;
}
em {
color: #ccc;
}
figure {
text-align: center;
}
svg {
max-width: 100%;
}
table {
border-collapse: collapse;
margin: auto;
width: 100%;
table-layout: fixed;
margin-bottom: 1rem;
}
table,
td,
th {
border: solid 1px #ccc;
padding: 5px;
text-align: center;
}
thead {
font-weight: bold;
background-color: rgb(243, 243, 243);
display: table-header-group;
}
tr td:nth-child(1) {
text-align: left;
}
.index-h3 {
margin-left: 15px;
}
.na {
background-color: #eee;
color: #999;
}

11
node_modules/milsymbol/examples/README.md generated vendored Normal file
View File

@@ -0,0 +1,11 @@
# Examples
These examples shows different functionality and ways to use milsymbol with external libraries.
There are also several other resouces online that demonstrates milsymbol usage, for example:
- Cesium http://cesiumjs.org/2016/07/20/Cesium-and-milsymbol/
- SAPUI5 https://blogs.sap.com/2016/07/28/adding-military-map-symbols-to-your-sapui5-applications/
- Scala https://github.com/workingDog/ScalaMS
If you would like to contribute with examples of milsymbol usage, please create them in the same structure as bl.ocks use. https://bl.ocks.org/-/about

88
node_modules/milsymbol/examples/angular/app.js generated vendored Executable file
View File

@@ -0,0 +1,88 @@
angular
.module("symbolTestApp", [])
.directive("milsymbol", [
"$log",
function($log) {
function createSymbolCode(scope) {
var size = scope.size || 20;
var symbol = new ms.Symbol(scope.sic, {
size: size,
uniqueDesignation: scope.uniqueDesignation
});
scope.code = symbol.toDataURL();
return symbol;
}
function link(scope, element, attrs) {
var mysymbol = createSymbolCode(scope);
scope.code = mysymbol.toDataURL();
scope.$watch("sic", function(newValue, oldValue) {
if (newValue !== oldValue) {
mysymbol = createSymbolCode(scope);
}
});
scope.$watch("uniqueDesignation", function(newValue, oldValue) {
if (newValue !== oldValue) {
mysymbol.setOptions({ uniqueDesignation: scope.uniqueDesignation });
scope.code = mysymbol.toDataURL();
}
});
scope.$watch("size", function(newValue, oldValue) {
if (newValue !== oldValue) {
mysymbol.setOptions({ size: scope.size });
scope.code = mysymbol.toDataURL();
}
});
}
return {
restrict: "E",
replace: true,
scope: {
sic: "@sic",
size: "@size",
uniqueDesignation: "@"
},
template: function(element, attrs) {
return '<img class="symbol-sm" ng-src="{{code}}"/>';
},
link: link
};
}
])
.controller("ListSymbolsController", [
"$scope",
function($scope) {
$scope.symbols = [
"SFG*UCDSS-*****",
"SNG*UCDSS-*****",
"SHG*UCDSS-*****",
"SUG*UCDSV-*****",
"SFG*UCDSV-*****",
"SNG*UCDSV-*****",
"SHG*UCDSV-*****",
"SUG*UCDM--*****",
"SFG*UCDM--*****",
"SNG*UCDM--*****",
"SHG*UCDM--*****",
"SUG*UCDML-*****",
"SFG*UCDML-*****",
"SNG*UCDML-*****",
"SHG*UCDML-*****",
"SUG*UCDMLA*****",
"SFG*UCDMLA*****",
"SNG*UCDMLA*****",
"SHG*UCDMLA*****"
];
}
])
.controller("SymbolController", [
"$scope",
function($scope) {
$scope.symbolSize = 40;
$scope.sidc = "SFG-UCI----D";
$scope.uniqueDesignation = "";
}
]);

71
node_modules/milsymbol/examples/angular/index.html generated vendored Executable file
View File

@@ -0,0 +1,71 @@
<!doctype html>
<html ng-app="symbolTestApp">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.symbol-table td {
vertical-align: top;
}
.list-of-symbols img.symbol-sm {
vertical-align: middle;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js"></script>
<script src="../../dist/milsymbol.js"></script>
<script src="app.js"></script>
</head>
<body>
<p>Example:</p>
<code>
<pre>
&lt;milsymbol sic="SFG-UCIZ---B" size="40"&gt;&lt;/milsymbol&gt;
</pre>
</code>
<p>
<milsymbol sic="SFG-UCIZ---B" size="40"></milsymbol>
</p>
<div ng-controller="ListSymbolsController" class="list-of-symbols">
<span ng-repeat="symbol in symbols">
<milsymbol sic="{{symbol}}" size="40"></milsymbol>
</span>
</div>
<h2>Two way bindings</h2>
<div ng-controller="SymbolController">
<table class="symbol-table">
<tr>
<td>
<form>
Size:
<br>
<input type="number" ng-model="symbolSize" placeholder="Symbol size" ng-model-options="{ debounce: 500 }">
<br> SIDC:
<br>
<input type="text" ng-model="sidc" placeholder="Symbol identification code" ng-model-options="{ debounce: 500 }">
<br> Unique designation:
<br>
<input type="text" ng-model="uniqueDesignation" placeholder="uniqueDesignation" ng-model-options="{ debounce: 500 }">
<br>
</form>
</td>
<td>
<milsymbol sic="{{sidc}}" size="{{symbolSize}}" unique-designation="{{uniqueDesignation}}"></milsymbol>
</td>
</tr>
</table>
</div>
</body>
</html>

BIN
node_modules/milsymbol/examples/angular/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

8
node_modules/milsymbol/examples/angular/readme.md generated vendored Normal file
View File

@@ -0,0 +1,8 @@
## Angular
A demo of a simple Angular.js directive for drawing milsymbol symbols.
This example was created by https://github.com/kjellmf Kjell Magne Fauske

152
node_modules/milsymbol/examples/arcgis3d/index.html generated vendored Normal file
View File

@@ -0,0 +1,152 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>ArcGIS JS API + milsymbol</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<!--
This is GeoJSON containing our units.
It will be availabel in a global variable called 'situation'
-->
<script src="../situation.json"></script>
<link rel="stylesheet" href="https://js.arcgis.com/4.6/esri/css/main.css">
<script src="https://js.arcgis.com/4.6/"></script>
<script src="../../dist/milsymbol.js"></script>
<script>
require([
"esri/Map",
"esri/views/SceneView",
"esri/layers/FeatureLayer",
"esri/layers/support/Field",
"esri/renderers/UniqueValueRenderer",
"esri/geometry/Point",
"esri/symbols/PointSymbol3D",
"esri/symbols/IconSymbol3DLayer",
"milsymbol",
"dojo/_base/array",
"dojo/on",
"dojo/dom",
"dojo/domReady!"
], function (
Map, SceneView, FeatureLayer, Field, UniqueValueRenderer, Point, PointSymbol3D,
IconSymbol3DLayer,
ms,
arrayUtils, on, dom
) {
var map = new Map({
basemap: "dark-gray",
ground: "world-elevation"
});
var view = new SceneView({
container: "viewDiv",
map: map,
camera: {
position: {
x: 16, // lon
y: 45, // lat
z: 1500000 // elevation in meters
},
//scale: 15000000,
//center: [16, 60],
tilt: 45
}
});
// Create iconSymbol and add to renderer
var unknown = new ms.Symbol("SPZ---------", { size: 15, square: true });
var unknownUnit = new PointSymbol3D({
symbolLayers: [new IconSymbol3DLayer({
resource: {
href: unknown.toDataURL()
},
size: unknown.getSize().width
})]
});
var renderer = new UniqueValueRenderer({
field: "name", // I know the name is the Unique Designation for the unit
defaultSymbol: unknownUnit
});
// Add a unique icon for each unit
arrayUtils.map(situation.features, function (feature, i) {
var unit = new ms.Symbol(feature.properties.SIDC, { size: 20, square: true });
renderer.addUniqueValueInfo(feature.properties.name,
new PointSymbol3D({
symbolLayers: [new IconSymbol3DLayer({
resource: {
href: unit.asCanvas(3).toDataURL()
},
size: Math.max(unit.getSize().height, unit.getSize().width)
})]
})
)
});
var fields = [
{
name: "ObjectID",
alias: "ObjectID",
type: "oid"
}, {
name: "name",
alias: "name",
type: "string"
}, {
name: "SIDC",
alias: "SIDC",
type: "string"
}];
var graphics = arrayUtils.map(situation.features, function (feature, i) {
return {
geometry: new Point({
x: feature.geometry.coordinates[0],
y: feature.geometry.coordinates[1]
}),
// select only the attributes you care about
attributes: {
ObjectID: i,
name: feature.properties.name,
SIDC: feature.properties.SIDC,
}
};
});
var lyr = new FeatureLayer({
source: graphics,
fields: fields,
objectIdField: "ObjectID",
renderer: renderer,
spatialReference: {
wkid: 4326
},
geometryType: "point"
});
map.add(lyr);
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>

BIN
node_modules/milsymbol/examples/arcgis3d/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

3
node_modules/milsymbol/examples/arcgis3d/readme.md generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# ArcGIS JS API
This is a sample for how to use milsymbol in the ArcGIS JS API 4.6.

217
node_modules/milsymbol/examples/d3-list/index.html generated vendored Normal file
View File

@@ -0,0 +1,217 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style>
.node-text {
font: 12px sans-serif;
}
.link {
fill: none;
stroke: rgb(200, 200, 200);
shape-rendering: crispEdges;
stroke-dasharray: 2, 2;
}
.indicator {
stroke: rgb(100, 100, 100);
}
</style>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="../../dist/milsymbol.js"></script>
<script src="../situation.json"></script>
</head>
<body>
<div id="orbat"></div>
<script>
var duration = 300;
var margin = { top: 15, right: 20, bottom: 10, left: 30 };
var svg = d3.select("#orbat")
.append("svg")
.attr("width", 500)
.attr("height", 500)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
function geoJson2tree(data, name, command) {
var rawdata = {};
for (var key in data.features) {
rawdata[data.features[key].properties[name]] = data.features[key];
rawdata[data.features[key].properties[name]].suborgs = [];
data.features[key].name = data.features[key].properties[name].replace('&#228;', 'ä').replace('&#229;', 'å');
data.features[key].sidc = data.features[key].properties["SIDC"];
}
var tree = { "name": "milsymbol ORBAT", "sidc": "SUGP------", "suborgs": [] };
for (var key in rawdata) {
if (rawdata.hasOwnProperty(rawdata[key].properties[command])) {
rawdata[rawdata[key].properties[command]].suborgs.push(rawdata[key]);
} else {
var newCommand = { "name": rawdata[key].properties[command], "sidc": "SFGP------", "suborgs": [rawdata[key]] };
rawdata[rawdata[key].properties[command]] = newCommand;
tree.suborgs.push(newCommand);
}
}
return tree;
}
var structure = geoJson2tree(situation, "name", "command");
var d3cluster = d3.tree().nodeSize([0, 20]);;
var d3hirarcy = d3.hierarchy(structure, function (d) { return d.suborgs; });
d3hirarcy.x0 = 0;
d3hirarcy.y0 = 0;
update(svg, d3cluster, d3hirarcy, d3hirarcy);
function update(svg, d3cluster, d3hirarcy, source) {
var barHeight = 25;
// Compute the new tree layout.
var nodes = d3cluster(d3hirarcy),
links = nodes.links();
var height = Math.max(500, nodes.descendants().length * barHeight + margin.top + margin.bottom);
d3.select("#orbat").select("svg").transition()
.duration(duration)
.attr("height", height);
// Compute the "layout".
var i = 0;
nodes.eachBefore(function (d) {
//console.log('d.x0 '+d.x0 +' === d.x ' + ((i++) * barHeight) + ' === d.name ' + d.data.name)
d.x = (i++) * barHeight;
});
//update existing
var node = svg.selectAll("g.node")
.data(d3hirarcy.descendants(), function (d) { return d.id || (d.id = ++i); });
node.transition()
.duration(duration)
.attr("transform", function (d) { return "translate(" + (d.y) + "," + (d.x) + ")"; });
node.select(".indicator").transition()
.duration(duration)
.attr("fill", function (d) { if (d._children) { return "rgb(250,250,250)" } else { return "rgb(100,100,100)" } })
.attr("transform", function (d) { if (d._children) { return "translate(-21,0) rotate(0)" } else { return "translate(-21,0) rotate(45)" } })
//Enter new nodes
var newNode = node.enter().append("g")
.attr("class", "node")
.attr("transform", function (d) { return "translate(" + (source.y0) + "," + (source.x0) + ")"; })
.style("opacity", 1e-6);
newNode.transition()
.duration(duration)
.attr("transform", function (d) { return "translate(" + (d.y) + "," + (d.x) + ")"; })
.style("opacity", 1);
newNode.each(function (d) {
if (d.children || d._children) {
d3.select(this)
.append("path")
.attr("class", "indicator")
.attr("d", "M -0,-5 l 5,5 -5,5 z")
.attr("fill", function (d) { if (d._children) { return "rgb(250,250,250)" } else { return "rgb(100,100,100)" } })
.attr("transform", function (d) { if (d._children) { return "translate(-21,0) rotate(0)" } else { return "translate(-21,0) rotate(45)" } })
.on("click", function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
update(svg, d3cluster, d3hirarcy, d);
});
}
})
//milsymbol icon
newNode.append("g")
.attr("class", "symbol")
.attr("transform", function (d) {
if (d.data.sidc) d.data.symbol = new ms.Symbol(d.data.sidc, { size: 15 });
return "translate(" + (-d.data.symbol.getOctagonAnchor().x) + "," + (-d.data.symbol.getOctagonAnchor().y) + ")";
})
.each(function (d) { this.appendChild(d.data.symbol.asDOM()) })
newNode.append("text")
.attr("class", "node-text")
.attr("dy", 3)
.attr("x", 20)
.style("text-anchor", "start")
.text(function (d) { return d.data.name; });
//Remove old nodes
node.exit()
.transition()
.duration(duration)
.attr("transform", function (d) {
return "translate(" + source.y + "," + source.x + ")";
})
.style("opacity", 1e-6)
.remove();
//Link code
var link = svg.selectAll("path.link")
.data(d3hirarcy.descendants().slice(1), function (link) { return link.id + ':' + link.parent.id; });
// Transition links to their new position.
link.transition()
.duration(duration)
.attr("d", function (d) {
return "M" + d.parent.y + "," + d.parent.x
+ " l"
+ " 0," + (d.x - d.parent.x) + " "
+ (d.y - d.parent.y) / 2 + "," + 0 + " "
+ "L" + d.y + "," + d.x;
});
var newLink = link.enter()
.insert("path", "g")
.attr("class", "link")
.attr("d", function (d) {
return "M" + source.y0 + "," + source.x0
+ " l"
+ " 0," + (source.x0 - source.x0) + " "
+ (source.y0 - source.y0) / 2 + "," + 0 + " "
+ "L" + source.y0 + "," + source.x0;
});
newLink.transition()
.duration(duration)
.attr("d", function (d) {
return "M" + d.parent.y + "," + d.parent.x
+ " l"
+ " 0," + (d.x - d.parent.x) + " "
+ (d.y - d.parent.y) / 2 + "," + 0 + " "
+ "L" + d.y + "," + d.x;
});
// Transition exiting nodes to the parent's new position.
link.exit().transition()
.duration(duration)
.attr("d", function (d) {
return "M" + source.y0 + "," + source.x0
+ " l"
+ " 0," + (source.x0 - source.x0) + " "
+ (source.y0 - source.y0) / 2 + "," + 0 + " "
+ "L" + source.y0 + "," + source.x0;
})
.remove();
// if click
// Old positions for transition.
nodes.each(function (d) {
d.x0 = d.x;
d.y0 = d.y;
});
}
</script>
</body>

BIN
node_modules/milsymbol/examples/d3-list/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

5
node_modules/milsymbol/examples/d3-list/readme.md generated vendored Normal file
View File

@@ -0,0 +1,5 @@
## D3 Orbat list
Shows an ORBAT structure similar to a folder list in a file manager. It is possible to hide/show subunits by clicking on the arrow next to a unit symbol.
This example is using D3 version 5 for rendering the ORBAT.

220
node_modules/milsymbol/examples/d3-tree/index.html generated vendored Normal file
View File

@@ -0,0 +1,220 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style>
.link {
fill: none;
stroke: rgb(200, 200, 200);
shape-rendering: crispEdges;
}
</style>
<script src="https://d3js.org/d3.v3.min.js"></script>
<script src="../../dist/milsymbol.js"></script>
<script src="../situation.json"></script>
</head>
<body onload="renderOrbat()">
Orientation of the tree:
<input onclick="update()" type="radio" name="orientation" value="vertical">Top to Bottom
<input onclick="update()" type="radio" name="orientation" value="horisontal" checked>Left to Right
<br>
<div id="orbattree"></div>
<script>
function geoJson2tree(data, name, command) {
var rawdata = {};
for (var key in data.features) {
rawdata[data.features[key].properties[name]] = data.features[key];
rawdata[data.features[key].properties[name]].children = [];
}
var tree = { "properties": { "orbatName": "milsymbol Orbat", "SIDC": "SUGP------" }, "children": [] };
for (var key in rawdata) {
if (rawdata.hasOwnProperty(rawdata[key].properties[command])) {
rawdata[rawdata[key].properties[command]].children.push(rawdata[key]);
} else {
var newCommand = { "properties": { "name": rawdata[key].properties[command], "SIDC": "SFGP------" }, "children": [rawdata[key]] };
rawdata[rawdata[key].properties[command]] = newCommand;
tree.children.push(newCommand);
}
}
return tree;
}
var structure = geoJson2tree(situation, "name", "command");
var tree, diagonal, svg;
var p = 0,
duration = 750,
root;
var sof, orientation, _source;
var margin = { top: 100, right: 200, bottom: 200, left: 100 };
function renderOrbat() {
tree = d3.layout.tree()
.separation(function (a, b) { return a.parent === b.parent ? 1 : 1; })
svg = d3.select("#orbattree").append("svg")
.attr("width", 500)
.attr("height", 500)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
structure.x0 = 500 / 2;
structure.y0 = 0;
function collapse(d) {
if (d.children) {
d._children = d.children;
d._children.forEach(collapse);
d.children = null;
}
}
structure.children.forEach(collapse);
update(structure);
}
function update(source) {
var radios = document.getElementsByName('orientation');
for (var i = 0, length = radios.length; i < length; i++) {
if (radios[i].checked) {
orientation = radios[i].value;
break;
}
}
if (orientation == "horisontal") { tree.nodeSize([70, 200]) } else { tree.nodeSize([120, 150]) };
// Compute the new tree layout.
var nodes = tree.nodes(structure),
links = tree.links(nodes);
var minX = 0;
var maxX = 0;
var maxY = 0;
nodes.forEach(function (d) {
maxY = Math.max(d.y, maxY);
maxX = Math.max(d.x, maxX);
minX = Math.min(d.x, minX)
});
nodes.forEach(function (d) { d.x = d.x - minX; });
if (orientation == "horisontal") {
d3.select("#orbattree").select("svg").transition()
.duration(duration)
.attr("height", (maxX - minX) + margin.top + margin.bottom)
.attr("width", maxY + margin.left + margin.right);
} else {
d3.select("#orbattree").select("svg").transition()
.duration(duration)
.attr("width", (maxX - minX) + margin.top + margin.bottom)
.attr("height", maxY + margin.left + margin.right);
}
// Update the nodes…
var node = svg.selectAll("g.node")
.data(nodes, function (d) { return d.id || (d.id = ++p); });
// Enter any new nodes at the parent's previous position.
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.attr("transform", function (d) { return orientation == "horisontal" ? ("translate(" + source.y0 + "," + source.x0 + ")") : ("translate(" + source.x0 + "," + source.y0 + ")"); })
.on("click", click)
// Transition nodes to their new position.
var nodeUpdate = node.transition()
.duration(duration)
.attr("transform", function (d) { return orientation == "horisontal" ? ("translate(" + d.y + "," + d.x + ")") : ("translate(" + d.x + "," + d.y + ")"); });
//Update all node symbols so that the color reflect if they have hidden children or not.
node.select(".symbol").remove()
node.append("g")
.attr("class", "symbol")
.attr("transform", function (d) {
if (d.properties.SIDC) d.symbol = new ms.Symbol(d.properties.SIDC, { size: 30, uniqueDesignation: (d.properties.name), colorMode: (d._children && d._children != "" ? ms.getColorMode("Medium") : ms.getColorMode("Light")) });
return "translate(" + (-d.symbol.octagonAnchor.x) + "," + (-d.symbol.octagonAnchor.y) + ")"
})
.each(function (d) { this.appendChild(d.symbol.asDOM()) })
// Transition exiting nodes to the parent's new position.
var nodeExit = node.exit().transition()
.duration(duration)
.attr("transform", function (d) { return orientation == "horisontal" ? ("translate(" + source.y + "," + source.x + ")") : ("translate(" + source.x + "," + source.y + ")"); })
.remove();
// Update the links…
var link = svg.selectAll("path.link")
.data(links, function (d) { return d.target.id; });
// Enter any new links at the parent's previous position.
link.enter().insert("path", "g")
.attr("class", "link")
.attr("d", function (d) {
var o = { x: source.x0, y: source.y0 };
return elbow({ source: o, target: o });
});
// Transition links to their new position.
link.transition()
.duration(duration)
.attr("d", elbow);
// Transition exiting nodes to the parent's new position.
link.exit().transition()
.duration(duration)
.attr("d", function (d) {
var o = { x: source.x, y: source.y };
return elbow({ source: o, target: o });
})
.remove();
// Stash the old positions for transition.
nodes.forEach(function (d) {
d.x0 = d.x;
d.y0 = d.y;
});
root = structure;
_source = source;
}
// Toggle children on click.
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
update(d);
}
function expand(d) {
if (d._children) {
d.children = d._children;
d._children = null;
}
}
// Draws the line between nodes
function elbow(d, i) {
if (orientation == "horisontal") return "M" + d.source.y + "," + d.source.x
+ " l" + (d.target.y - d.source.y) / 2 + "," + 0 + " "
+ " 0," + (d.target.x - d.source.x) + " "
+ "L" + d.target.y + "," + d.target.x;
return "M" + d.source.x + "," + d.source.y
+ " l" + 0 + "," + (d.target.y - d.source.y) / 2 + " "
+ " " + (d.target.x - d.source.x) + ",0 "
+ "L" + d.target.x + "," + d.target.y;
}
</script>
</body>

BIN
node_modules/milsymbol/examples/d3-tree/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

5
node_modules/milsymbol/examples/d3-tree/readme.md generated vendored Normal file
View File

@@ -0,0 +1,5 @@
## D3 Orbat tree
Shows an ORBAT structure in a tree view similar to how it would displayed in a power point presentation. It is possible to show/hide subunits by clicking on the units, when a unit has hidden subunits it will be displayed in a slightly darker color.
This example is using D3 version 3 for rendering the ORBAT.

100
node_modules/milsymbol/examples/es6-import/index.html generated vendored Normal file
View File

@@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<h1>ES6 imports</h1>
This sample shows how milsymbol can be imported as ES6 modules. You will have to allow CORS in your browser if you run it
locally, or place the sample on a server.
<br>
<br>
<table border="1">
<tr>
<td>
We have imported land equipment, so here you should see a SVG and a Canvas symbol.
</td>
<td>
We have not imported icons for 2525D, so this should display a symbol with missing main icon, and an indcator that something
has gone wrong.
</td>
</tr>
<tr>
<td>
<br> SVG Example:
<br>
<div id="SVG-imported"></div>
</td>
<td>
<br> SVG Example:
<br>
<div id="SVG-notimported"></div>
</td>
</tr>
<tr>
<td>
Canvas Example:
<br>
<div id="Canvas-imported">
<p></p>
</div>
</td>
<td>
Canvas Example:
<br>
<div id="Canvas-notimported">
<p></p>
</div>
</td>
</tr>
</table>
<script type="module">
import { ms, std2525c } from '../../index.esm.js';
ms.addIcons(std2525c);
var color = "yellow";
var outline = 3;
var symbol = new ms.Symbol("sfgpewrh--mt", {
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
direction: (750 * 360 / 6400),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N",
outlineColor: color,
outlineWidth: outline
});
document.getElementById("SVG-imported").innerHTML = symbol.asSVG();
document.getElementById("Canvas-imported").replaceChild(
symbol.asCanvas(),
document.getElementById("Canvas-imported").firstChild);
var symbol = new ms.Symbol("10031500001101030000", {
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
direction: (750 * 360 / 6400),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N",
outlineColor: color,
outlineWidth: outline
});
document.getElementById("SVG-notimported").innerHTML = symbol.asSVG();
document.getElementById("Canvas-notimported").replaceChild(
symbol.asCanvas(),
document.getElementById("Canvas-notimported").firstChild);
</script>
</body>

3
node_modules/milsymbol/examples/es6-import/readme.md generated vendored Normal file
View File

@@ -0,0 +1,3 @@
## ES6 Imports
This shows how milsymbol supports ES6 imports so that you can import only exactly what you need.

71
node_modules/milsymbol/examples/leaflet-divicons/index.html generated vendored Executable file
View File

@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style type="text/css">
html,
body,
.mymap {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js"></script>
<script src="../../dist//milsymbol.js"></script>
<script src="../situation.json"></script>
</head>
<body onload="init()">
<script>
function init() {
var osmAttr = '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>';
var OSM = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: osmAttr }),
latlng = L.latLng(59, 16);
var map = L.map('map', { center: latlng, zoom: 5, layers: [OSM] });
var iconSize = {
"Team/Crew": 5,
"Squad": 10,
"Section": 15,
"Platoon/detachment": 20,
"Company/battery/troop": 25,
"Battalion/squadron": 30,
"Regiment/group": 35,
"Brigade": 40,
"Division": 45,
"Corps/MEF": 50,
"Army": 55,
"Army Group/front": 60,
"Region/Theater": 65,
"Command": 70
};
L.geoJson(situation, {
pointToLayer: function (feature, latlng) {
var mysymbol = new ms.Symbol(
feature.properties.SIDC, {
uniqueDesignation: feature.properties.name
})
// Now that we have a symbol we can ask for the echelon and set the symbol size
mysymbol = mysymbol.setOptions({ size: iconSize[mysymbol.getMetadata().echelon] });
var myicon = L.divIcon({
className: '',
html: mysymbol.asSVG(),
iconAnchor: new L.Point(mysymbol.getAnchor().x, mysymbol.getAnchor().y)
});
return L.marker(latlng, { icon: myicon, draggable: true });
}
}).addTo(map);
}
</script>
<div id="map" class="mymap"></div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

View File

@@ -0,0 +1,5 @@
## milsymbol in LeafLet - L.divIcon()
You can use the SVG XML output directly in a L.divIcon(), this way you can also add other HTML information to your markers if you want to. This is the simplest way of using milsymbol in LeafLet, but might run into performance issues if you are using a very large number of symbols.
This example is using LeafLet 1.3.1.

View File

@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style type="text/css">
html,
body,
.mymap {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js"></script>
<script src="../../dist//milsymbol.js"></script>
<script src="../situation.json"></script>
</head>
<body onload="init()">
<script>
function init() {
var osmAttr = '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>';
var OSM = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: osmAttr }),
latlng = L.latLng(59, 16);
var map = L.map('map', { center: latlng, zoom: 5, layers: [OSM] });
var iconSize = {
"Team/Crew": 5,
"Squad": 10,
"Section": 15,
"Platoon/detachment": 20,
"Company/battery/troop": 25,
"Battalion/squadron": 30,
"Regiment/group": 35,
"Brigade": 40,
"Division": 45,
"Corps/MEF": 50,
"Army": 55,
"Army Group/front": 60,
"Region/Theater": 65,
"Command": 70
};
L.geoJson(situation, {
pointToLayer: function (feature, latlng) {
var mysymbol = new ms.Symbol(
feature.properties.SIDC, {
uniqueDesignation: feature.properties.name
})
// Now that we have a symbol we can ask for the echelon and set the symbol size
mysymbol = mysymbol.setOptions({ size: iconSize[mysymbol.getMetadata().echelon] });
var myicon = L.icon({
iconUrl: mysymbol.toDataURL(),
iconAnchor: [mysymbol.getAnchor().x, mysymbol.getAnchor().y],
});
return L.marker(latlng, { icon: myicon, draggable: true });
}
}).addTo(map);
}
</script>
<div id="map" class="mymap"></div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

View File

@@ -0,0 +1,5 @@
## milsymbol in LeafLet - L.icon()
Using the toDataURL() method in milsymbol makes it possible to assign the output from milsymbol as an image source. This way you can use the output from milsymbol in ordinary L.icon() markers in LeafLet.
This example is using LeafLet 1.3.1 but will work without any problem in in LeafLet 0.7.3+.

90
node_modules/milsymbol/examples/openlayers/index.html generated vendored Normal file
View File

@@ -0,0 +1,90 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style type="text/css">
html,
body,
.mymap {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
<script src="https://openlayers.org/en/v4.6.5/build/ol.js" type="text/javascript"></script>
<script src="../../dist/milsymbol.js"></script>
<script src="../situation.json"></script>
</head>
<body onload="init()">
<script>
function init() {
var iconSize = {
"Team/Crew": 5,
"Squad": 10,
"Section": 15,
"Platoon/detachment": 20,
"Company/battery/troop": 25,
"Battalion/squadron": 30,
"Regiment/group": 35,
"Brigade": 40,
"Division": 45,
"Corps/MEF": 50,
"Army": 55,
"Army Group/front": 60,
"Region/Theater": 65,
"Command": 70
};
var vectorSource = new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(situation, { featureProjection: 'EPSG:3857' })
});
var ratio = window.devicePixelRatio || 1;
vectorSource.forEachFeature(function (f) {
var mysymbol = new ms.Symbol(
f.getProperties().SIDC, {
uniqueDesignation: f.getProperties().name
});
// Now that we have a symbol we can ask for the echelon and set the symbol size
var mycanvas = mysymbol.setOptions({ size: iconSize[mysymbol.getMetadata().echelon] * ratio }).asCanvas();
f.setStyle(new ol.style.Style({
image: new ol.style.Icon(({
scale: 1 / ratio,
anchor: [mysymbol.getAnchor().x, mysymbol.getAnchor().y],
anchorXUnits: 'pixels',
anchorYUnits: 'pixels',
imgSize: [Math.floor(mysymbol.getSize().width), Math.floor(mysymbol.getSize().height)],
img: (mycanvas)
}))
}));
})
var vectorLayer = new ol.layer.Vector({
source: vectorSource
});
var rasterLayer = new ol.layer.Tile({
preload: 4,
source: new ol.source.OSM()
});
var map = new ol.Map({
layers: [rasterLayer, vectorLayer],
target: document.getElementById('map'),
view: new ol.View({
center: ol.proj.transform([16, 59], 'EPSG:4326', 'EPSG:3857'),
zoom: 5
})
});
}
</script>
<div id="map" class="mymap"></div>
</body>
</html>

BIN
node_modules/milsymbol/examples/openlayers/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

7
node_modules/milsymbol/examples/openlayers/readme.md generated vendored Normal file
View File

@@ -0,0 +1,7 @@
## milsymbol in open layers 4 - ol.style.Icon()
Using the asCanvas() method in milsymbol makes it possible to assign the output from milsymbol as an image source. This way you can use the output from milsymbol in ol.style.Icon() in Open Layers. This should be able to handle a very large number of symbols.
If a style function is used for the symbols some sort of symbol cache should be used so that it won't have to regenerate all symbols at each interaction with the map. In this example however each symbol is set as a style on each feature.
This example uses Open Layers v4.6.5.

65
node_modules/milsymbol/examples/outline/index.html generated vendored Normal file
View File

@@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script src="../../dist/milsymbol.js"></script>
</head>
<body onload="example()">
Outline Color:
<select id="outlineColor" onchange="example()">
<option>Silver</option>
<option>Red</option>
<option SELECTED>Yellow</option>
<option>Lime</option>
<option>Aqua</option>
<option>Fuchsia</option>
</select> Outline Width:
<select id="outlineWidth" onchange="example()">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4" SELECTED>4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
<br> SVG Example:
<br>
<div id="SVG"></div>
Canvas Example:
<br>
<div id="Canvas">
<p></p>
</div>
<script>
function example() {
var color = document.getElementById("outlineColor")[document.getElementById("outlineColor").selectedIndex].value;
var outline = document.getElementById("outlineWidth")[document.getElementById("outlineWidth").selectedIndex].value;
var symbol = new ms.Symbol("sfgpewrh--mt", {
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
direction: (750 * 360 / 6400),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N",
outlineColor: color,
outlineWidth: outline
});
document.getElementById("SVG").innerHTML = symbol.asSVG();
document.getElementById("Canvas").replaceChild(
symbol.asCanvas(),
document.getElementById("Canvas").firstChild);
}
</script>
</body>

BIN
node_modules/milsymbol/examples/outline/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

3
node_modules/milsymbol/examples/outline/readme.md generated vendored Normal file
View File

@@ -0,0 +1,3 @@
## Outline
This shows how symbol outline is supported for both Canvas and SVG output.

80
node_modules/milsymbol/examples/situation.json generated vendored Normal file
View File

@@ -0,0 +1,80 @@
var situation = {"name":"Layer","type":"FeatureCollection",
"crs": {"type": "name","properties": {"name": "EPSG:4326"}},
"features":[
{"type":"Feature","geometry":{"type":"Point","coordinates":[13.9264527063343,56.2888907165595]},"properties":{"SIDC":"SFGPU------E***","name":"1.C2 komp","fullname":"1.C2 komp/FTS/INSS","command":"FTS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[19.1604869967705,65.5966818958909]},"properties":{"SIDC":"SFGPUCRV---F***","name":"1.Jbat","fullname":"1.Jbat/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.0825282191617,59.6410393541284]},"properties":{"SIDC":"SFGPUUMSE--F***","name":"1.TKbat","fullname":"1.TKbat/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.780633496933,59.519251526265]},"properties":{"SIDC":"SFGPUULM---F***","name":"13.S&#228;kbat","fullname":"13.S&#228;kbat/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[15.4831849611643,60.496055634923]},"properties":{"SIDC":"SFGPUCI----F***","name":"17.Hvbat","fullname":"17.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[15.4200004438307,60.4762802902876]},"properties":{"SIDC":"SFGPUCI----E***","name":"171.Inskomp","fullname":"171.Inskomp/17.Hvbat/MRM/INSS","command":"17.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[15.6404774841138,60.6056416321666]},"properties":{"SIDC":"SFGPUCI----E***","name":"172.Inskomp","fullname":"172.Inskomp/17.Hvbat/MRM/INSS","command":"17.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[15.4164505691297,60.5385137626812]},"properties":{"SIDC":"SFGPUCI----E***","name":"173.Bevkomp","fullname":"173.Bevkomp/17.Hvbat/MRM/INSS","command":"17.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[15.5053934908843,60.4263401694757]},"properties":{"SIDC":"SFGPUCVF---C***","name":"174.Flyggrp","fullname":"174.Flyggrp/17.Hvbat/MRM/INSS","command":"17.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[15.5216822502589,60.419327747011]},"properties":{"SIDC":"SFGPUCE----D***","name":"176.Piplut","fullname":"176.Piplut/17.Hvbat/MRM/INSS","command":"17.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.1037137456012,60.6361002727779]},"properties":{"SIDC":"SFGPUCI---AF***","name":"18.Hvbat","fullname":"18.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.3850455958827,60.4752381559049]},"properties":{"SIDC":"SFGPUCI----E***","name":"181.Inskomp","fullname":"181.Inskomp/18.Hvbat/MRM/INSS","command":"18.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.2481190991353,60.6879397848107]},"properties":{"SIDC":"SFGPUCI----E***","name":"182.Inskomp","fullname":"182.Bevkomp/18.Hvbat/MRM/INSS","command":"18.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.950573155785,60.6022297757445]},"properties":{"SIDC":"SFGPUCI----E***","name":"183.Bevkomp","fullname":"183.Bevkomp/18.Hvbat/MRM/INSS","command":"18.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.1491618529446,60.6869685133959]},"properties":{"SIDC":"SFGPUCI----E***","name":"184.Bevkomp","fullname":"184.Bevkomp/18.Hvbat/MRM/INSS","command":"18.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.3149184570537,60.7041912539079]},"properties":{"SIDC":"SFGPUCIN---D***","name":"185.B&#229;tplut","fullname":"185.B&#229;tplut/18.Hvbat/MRM/INSS","command":"18.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.9544316326947,60.5942398164611]},"properties":{"SIDC":"SFGPUCV----C***","name":"186.Flyggrp","fullname":"186.Flyggrp/18.Hvbat/MRM/INSS","command":"18.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.8344930025655,58.3095662564668]},"properties":{"SIDC":"SFGPUCIN---E***","name":"2.Amfkopmp","fullname":"2.Amfkopmp/1.Amfbat/INSS","command":"1.Amfbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.238582993542,59.0273709214064]},"properties":{"SIDC":"SFGPUCIZ--AH***","name":"2.Brig","fullname":"2.Brig/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.5257695946588,59.6080831533645]},"properties":{"SIDC":"SFGPU------E***","name":"2.C2 komp","fullname":"2.C2 komp/FTS/INSS","command":"FTS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.5999674748142,59.8939088257096]},"properties":{"SIDC":"SFGPUCI----F***","name":"21.Hvbat","fullname":"21.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.6127430007003,59.8793264746759]},"properties":{"SIDC":"SFGPUCI----E***","name":"211.Inskomp","fullname":"211.Inskomp/21.Hvbat/MRM/INSS","command":"21.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.6790891592872,59.8516064004869]},"properties":{"SIDC":"SFGPUCI----E***","name":"212.Inskomp","fullname":"212.Inskomp/21.Hvbat/MRM/INSS","command":"21.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.599908566094,59.8843330402968]},"properties":{"SIDC":"SFGPUCI----E***","name":"213.Bevkomp","fullname":"213.Bevkomp/21.Hvbat/MRM/INSS","command":"21.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.7617207065384,59.8337348887318]},"properties":{"SIDC":"SFGPUCR----E***","name":"214.Undkomp","fullname":"214.Undkomp/21.Hvbat/MRM/INSS","command":"21.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.6121638147886,59.5846318503743]},"properties":{"SIDC":"SFGPUCI---AF***","name":"22.Hvbat","fullname":"22.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.6430089244942,59.5925659173492]},"properties":{"SIDC":"SFGPUCI----E***","name":"221.Inskomp","fullname":"221.Inskomp/22.Hvbat/MRM/INSS","command":"22.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.4735776622532,59.5949156484754]},"properties":{"SIDC":"SFGPUCI----E***","name":"222.Inskomp","fullname":"222.Inskomp/22.Hvbat/MRM/INSS","command":"22.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.6352555986967,59.6089215756093]},"properties":{"SIDC":"SFGPUCI----E***","name":"223.Bevkomp","fullname":"223.Bevkomp/22.Hvbat/MRM/INSS","command":"22.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.87063109525,59.6173011010681]},"properties":{"SIDC":"SFGPUCI---AF***","name":"23.Hvbat","fullname":"23.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.5604585736757,59.5554732494588]},"properties":{"SIDC":"SFGPUCI----E***","name":"231.Insatskomp","fullname":"231.Insatskomp/23.Hvbat/MRM/INSS","command":"23.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.9310725132708,59.6491761113177]},"properties":{"SIDC":"SFGPUCI----E***","name":"232.Inskomp","fullname":"232.Inskomp/23.Hvbat/MRM/INSS","command":"23.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.0767771140349,59.5346781274677]},"properties":{"SIDC":"SFGPUCI----E***","name":"233.Bevkomp","fullname":"233.Bevkomp/23.Hvbat/MRM/INSS","command":"23.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.0421139475026,59.6823055916381]},"properties":{"SIDC":"SFGPUCR----E***","name":"234.Undkomp","fullname":"234.Undkomp/231.Insatskomp/23.Hvbat/MRM/INSS","command":"231.Insatskomp"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.0047624165287,59.3682656063121]},"properties":{"SIDC":"SFGPUCI----F***","name":"24.Hvbat","fullname":"24.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.0582952723693,59.3437207025862]},"properties":{"SIDC":"SFGPUCI----E***","name":"241.Inskomp","fullname":"241.Inskomp/24.Hvbat/MRM/INSS","command":"24.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.0427345876287,59.3878935131493]},"properties":{"SIDC":"SFGPUCI----E***","name":"242.Inskomp","fullname":"242.Inskomp/24.Hvbat/MRM/INSS","command":"24.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.9887873122416,59.3679806773642]},"properties":{"SIDC":"SFGPUCI----E***","name":"243.Bevkomp","fullname":"243.Bevkomp/24.Hvbat/MRM/INSS","command":"24.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.6525600727753,59.1758837474931]},"properties":{"SIDC":"SFGPUCI---AF***","name":"25.Hvbat","fullname":"25.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.5631993602988,59.1885260991916]},"properties":{"SIDC":"SFGPUCI----E***","name":"251.Inskomp","fullname":"251.Inskomp/25.Hvbat/MRM/INSS","command":"25.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.6425607048154,59.1849086466696]},"properties":{"SIDC":"SFGPUCI----E***","name":"252.Inskomp","fullname":"252.Inskomp/25.Hvbat/MRM/INSS","command":"25.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.96853711074,59.230339821515]},"properties":{"SIDC":"SFGPUCI----E***","name":"253.Bevkomp","fullname":"253.Bevkomp/25.Hvbat/MRM/INSS","command":"25.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.5888719568663,59.1482356463323]},"properties":{"SIDC":"SFGPUCV----C***","name":"254.Flygrp","fullname":"254.Flygrp/25.Hvbat/MRM/INSS","command":"25.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.8785925128308,59.4212404022248]},"properties":{"SIDC":"SFGPUCI----F***","name":"26.Hvbat","fullname":"26.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.7949588383521,59.4770735483453]},"properties":{"SIDC":"SFGPUCI----E***","name":"261.Inskomp","fullname":"261.Inskomp/26.Hvbat/MRM/INSS","command":"26.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.8500350117106,59.3225576100611]},"properties":{"SIDC":"SFGPUCI----E***","name":"262.Inskomp","fullname":"262.Inskomp/26.Hvbat/MRM/INSS","command":"26.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.5448433996879,59.5639094709462]},"properties":{"SIDC":"SFGPUCI----E***","name":"263.Bevkomp","fullname":"263.Bevkomp/26.Hvbat/MRM/INSS","command":"26.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.9251348976686,58.788897275522]},"properties":{"SIDC":"SFGPUCI---AF***","name":"27.Hvbat","fullname":"27.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.3371891732959,59.4451412409949]},"properties":{"SIDC":"SFGPUCI----E***","name":"271.Inskomp","fullname":"271.Inskomp/27.Hvbat/MRM/INSS","command":"27.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.082800659594,58.6782294848051]},"properties":{"SIDC":"SFGPUCI----E***","name":"272.Inskomp","fullname":"272.Inskomp/27.Hvbat/MRM/INSS","command":"27.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.0006536972256,59.3832532426125]},"properties":{"SIDC":"SFGPUCI----E***","name":"273.Bevkomp","fullname":"273.Bevkomp/27.Hvbat/MRM/INSS","command":"27.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[16.9079560228281,58.7870863572724]},"properties":{"SIDC":"SFGPUCI----E***","name":"274.Bevkomp","fullname":"274.Bevkomp/27.Hvbat/MRM/INSS","command":"27.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.1100925705783,58.6576254848673]},"properties":{"SIDC":"SFGPUCIN---D***","name":"275.B&#229;tplut","fullname":"275.B&#229;tplut/27.Hvbat/MRM/INSS","command":"27.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.6949238081347,59.7329226388356]},"properties":{"SIDC":"SFGPUCVF---C***","name":"276.Flygrp","fullname":"276.Flygrp/27.Hvbat/MRM/INSS","command":"27.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.918446596707,59.7527539262468]},"properties":{"SIDC":"SFGPUCI---AF***","name":"28.Hvbat","fullname":"28.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[19.0745672792682,59.7522865395695]},"properties":{"SIDC":"SFGPUCI----E***","name":"281.Inskomp","fullname":"281.Inskomp/28.Hvbat/MRM/INSS","command":"28.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.404457393663,59.4733011004266]},"properties":{"SIDC":"SFGPUCI----E***","name":"282.Inskomp","fullname":"282.Inskomp/28.Hvbat/MRM/INSS","command":"28.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.7611861642108,60.1721322504235]},"properties":{"SIDC":"SFGPUCI----E***","name":"283.Bevkomp","fullname":"283.Bevkomp/28.Hvbat/MRM/INSS","command":"28.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.9200740471087,59.659477110883]},"properties":{"SIDC":"SFGPUCIN---D***","name":"285.B&#229;tplut","fullname":"285.B&#229;tplut/28.Hvbat/MRM/INSS","command":"28.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.1478042099952,59.0133940148515]},"properties":{"SIDC":"SFGPUCI---AF***","name":"29.Hvbat","fullname":"29.Hvbat/MRM/INSS","command":"MRM"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.9474091680565,58.9007367380092]},"properties":{"SIDC":"SFGPUCI----E***","name":"291.Inskomp","fullname":"291.Inskomp/29.Hvbat/MRM/INSS","command":"29.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.9123833108742,58.978425556121]},"properties":{"SIDC":"SFGPUCI----E***","name":"292.Inskomp","fullname":"292.Inskomp/29.Hvbat/MRM/INSS","command":"29.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.13004786866,59.00328613617]},"properties":{"SIDC":"SFGPUCI---AE***","name":"293.Bevkomp","fullname":"293.Bevkomp/29.Hvbat/MRM/INSS","command":"29.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.1466322493951,59.0055778253211]},"properties":{"SIDC":"SFGPUCIN---E***","name":"294.B&#229;tkomp","fullname":"294.B&#229;tkomp/29.Hvbat/MRM/INSS","command":"29.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.81232094932,59.0132052680749]},"properties":{"SIDC":"SFGPUCVF---C***","name":"295.Flyggrp","fullname":"295.Flyggrp/29.Hvbat/MRM/INSS","command":"29.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.9630401612886,58.9201421392025]},"properties":{"SIDC":"SFGPUUA----D***","name":"296.CBRN-plut","fullname":"296.CBRN-plut/29.Hvbat/MRM/INSS","command":"29.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[17.0912400648531,59.6752503667144]},"properties":{"SIDC":"SFGPUCIZ--AH***","name":"3.Brig","fullname":"3.Brig/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.3757960465676,57.6593216201101]},"properties":{"SIDC":"SFGPUCI----F***","name":"32.Hvbat","fullname":"32.Hvbat/ROL/INSS","command":"ROL"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[14.5083138429234,58.5267401451999]},"properties":{"SIDC":"SFGPUCR----F***","name":"32.Undbat","fullname":"32.Undbat/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.339848149358,57.6629965607029]},"properties":{"SIDC":"SFGPUCI----E***","name":"321.Bevkomp","fullname":"321.Bevkomp/32.Hvbat/MRM/INSS","command":"32.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.7849567501258,57.7144456428729]},"properties":{"SIDC":"SFGPUCI----E***","name":"322.Bevkomp","fullname":"322.Bevkomp/32.Hvbat/MRM/INSS","command":"32.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.8380782160119,57.6871504761097]},"properties":{"SIDC":"SFGPUCIN---D***","name":"323.B&#229;tplut","fullname":"323.B&#229;tplut/32.Hvbat/MRM/INSS","command":"32.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.3764345279372,57.680341585177]},"properties":{"SIDC":"SFGPUCI----E***","name":"324.Inskomp","fullname":"324.Inskomp/32.Hvbat/MRM/INSS","command":"32.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[18.3288080139839,57.6513690562457]},"properties":{"SIDC":"SFGPUCVF---C***","name":"325.Flyggrp","fullname":"325.Flyggrp/32.Hvbat/MRM/INSS","command":"32.Hvbat"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[12.9062389032177,56.6929160077324]},"properties":{"SIDC":"SFGPUCD----F***","name":"61.Lvbat","fullname":"61.Lvbat/INSS","command":"INSS"}}
,{"type":"Feature","geometry":{"type":"Point","coordinates":[12.8927072589139,56.6451408696477]},"properties":{"SIDC":"SFGPUCD----F***","name":"62.Lvbat","fullname":"62.Lvbat/INSS","command":"INSS"}}
]}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

View File

@@ -0,0 +1,3 @@
## Canvas Speed Example
This shows the speed of milsymbol and contains one example for **Canvas rendering**. It will render 1000 symbols with or without text fields and display the time it takes for milsymbol to generate the symbols. The example will repeat every three seconds to simulate new input to the system, this will also show milsymbols capability to populate the symbol cache and improve speed for each iteration.

44
node_modules/milsymbol/examples/speed-svg/index.html generated vendored Normal file

File diff suppressed because one or more lines are too long

BIN
node_modules/milsymbol/examples/speed-svg/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

3
node_modules/milsymbol/examples/speed-svg/readme.md generated vendored Normal file
View File

@@ -0,0 +1,3 @@
## SVG Speed Example
This shows the speed of milsymbol and contains one example for **SVG rendering**. It will render 1000 symbols with or without text fields and display the time it takes for milsymbol to generate the symbols. The example will repeat every three seconds to simulate new input to the system, this will also show milsymbols capability to populate the symbol cache and improve speed for each iteration.

248
node_modules/milsymbol/examples/style/index.html generated vendored Normal file
View File

@@ -0,0 +1,248 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script src="../../dist/milsymbol.js"></script>
</head>
<body>
<center>
Base symbol without any special style settings <br />
<script>
document.write(
new ms.Symbol("sfgpewrh--mt", {
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
}).asSVG()
);
</script>
<br />
<br />
Unframed symobl (notice the moved mobility indicator) <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ frame: false }
).asSVG()
);
</script>
<br />
<br />
Unfilled symbol (color changes automatically when unfilled) <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ fill: false }
).asSVG()
);
</script>
<br />
<br />No info around symbol (information is set but not displayed) <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ infoFields: false }
).asSVG()
);
</script>
<br />
<br />Set built in color mode <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ colorMode: "Dark" }
).asSVG()
);
</script>
<br />
<br />Set custom color mode <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{
colorMode: ms.ColorMode(
"purple",
"blue",
"red",
"green",
"yellow"
)
}
).asSVG()
);
</script>
<br />
<br />Fill opacity <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ fillOpacity: 0.5 }
).asSVG()
);
</script>
<br />
<br />Change info color <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ infoColor: "lightgray" }
).asSVG()
);
</script>
<br />
<br />Change info font <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ fontfamily: "times" }
).asSVG()
);
</script>
<br />
<br />Change info size <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ infoSize: 60 }
).asSVG()
);
</script>
<br />
<br />
Set symbol outline <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ outlineColor: "yellow", outlineWidth: 5 }
).asSVG()
);
</script>
<br />
<br />Set info background <br />
<script>
document.write(
new ms.Symbol(
"sfgpewrh--mt",
{
size: 35,
quantity: 200,
staffComments: "for reinforcements".toUpperCase(),
additionalInformation: "added support for JJ".toUpperCase(),
type: "machine gun".toUpperCase(),
dtg: "30140000ZSEP97",
location: "0900000.0E570306.0N"
},
{ infoBackground: "black", infoColor: "white" }
).asSVG()
);
</script>
<br />
<br />
</center>
</body>
</html>

BIN
node_modules/milsymbol/examples/style/preview.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

3
node_modules/milsymbol/examples/style/readme.md generated vendored Normal file
View File

@@ -0,0 +1,3 @@
## Style
This shows some, but not all, style options that can be set for a milsymbol symbol.

223
node_modules/milsymbol/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,223 @@
type ColorMode = {
Civilian: string;
Friend: string;
Hostile: string;
Neutral: string;
Unknown: string;
};
type SymbolOptions = {
additionalInformation?: string;
alternateMedal?: boolean;
altitudeDepth?: string;
auxiliaryEquipmentIndicator?: string;
civilianColor?: boolean;
colorMode?: ColorMode | string;
combatEffectiveness?: string;
commonIdentifier?: string;
country?: string;
direction?: string;
dtg?: string;
engagementBar?: string;
engagementType?: string;
equipmentTeardownTime?: string;
evaluationRating?: string;
fill?: boolean;
fillOpacity?: number;
fontfamily?: string;
frame?: boolean;
frameColor?: ColorMode;
guardedUnit?: string;
headquartersElement?: string;
higherFormation?: string;
hostile?: string;
hqStaffLength?: number;
icon?: boolean;
iconColor?: ColorMode | string;
iffSif?: string;
infoBackground?: ColorMode | string;
infoBackgroundFrame?: ColorMode | string;
infoColor?: ColorMode | string;
infoFields?: boolean;
infoOutlineColor?: string;
infoOutlineWidth?: number;
infoSize?: number;
installationComposition?: string;
location?: string;
monoColor?: string;
outlineColor?: ColorMode | string;
outlineWidth?: number;
padding?: number;
platformType?: string;
quantity?: string;
reinforcedReduced?: string;
sidc?: string;
sigint?: string;
signatureEquipment?: string;
simpleStatusModifier?: boolean;
size?: number;
specialDesignator?: string;
specialHeadquarters?: string;
speed?: string;
speedLeader?: number;
square?: boolean;
staffComments?: string;
standard?: string;
strokeWidth?: number;
type?: string;
uniqueDesignation?: string;
};
type BaseAffiliation = "" | "Hostile" | "Friend" | "Neutral" | "Unknown";
type Affiliation = "undefined" | BaseAffiliation;
type Context = "Reality" | "Exercise" | "Simulation";
// Dimension it belongs to (Air/Ground...)
type BaseDimension = "" | "Air" | "Ground" | "Sea" | "Subsurface";
// Dimension it is shown as (Air/Ground...) for example Ground Equipment is shown with the same shape as Sea.
type Dimension = "undefined" | "LandDismountedIndividual" | BaseDimension;
// What condition is it in
type Condition = "" | "Present" | "Planned" | "FullyCapable" | "Damaged" | "Destroyed" | "FullToCapacity";
type Echelon =
""
| "Team/Crew"
| "Squad"
| "Section"
| "Platoon/detachment"
| "Company/battery/troop"
| "Battalion/squadron"
| "Regiment/group"
| "Brigade"
| "Division"
| "Corps/MEF"
| "Army"
| "Army Group/front"
| "Region/Theater"
| "Command";
type Mobility =
""
| "Wheeled limited cross country"
| "Wheeled cross country"
| "Tracked"
| "Wheeled and tracked combination"
| "Towed"
| "Rail"
| "Pack animals"
| "Over snow (prime mover)"
| "Sled"
| "Barge"
| "Amphibious"
| "Short towed array"
| "Long towed Array";
type Leadership = "Leader Individual" | "Deputy Individual";
type SymbolMetadata = {
activity: boolean; // Is it an Activity
affiliation: Affiliation; // Affiliation it is shown as (Friend/Hostile...)
baseAffilation: BaseAffiliation; // Affiliation it belongs to (Friend/Hostile...)
baseDimension: BaseDimension; // Dimension it belongs to (Air/Ground...)
baseGeometry: Object; // Geometry is a combination of dimension and affiliation (AirFriend/GroundHostile...)
civilian: boolean; // Is it Civilian
condition: Condition; // What condition is it in
context: Context; // Context of the symbol (Reality/Exercise...)
dimension: Dimension; // Dimension it is shown as (Air/Ground...) for example Ground Equipment is shown with the same shape as Sea.
dimensionUnknown: boolean; // Is the dimension unknown
dismounted?: boolean; // Land Dismounted Individual should have special icons
echelon: Echelon; //What echelon (Platoon/Company...)
faker: boolean; // Is it a Faker
fenintDummy: boolean; // Is it a feint/dummy
fill: boolean; // Standard says it should be filled
frame: boolean; // Standard says it should be framed
functionid: string; // Part of SIDC referring to the icon.
headquarters: boolean; // Is it a Headquarters
installation: boolean; // Is it an Instalation
joker: boolean; // Is it a Joker
leadership?: Leadership;
mobility?: Mobility; // What mobility (Tracked/Sled...)
notpresent: string; // Is it Anticipated or Pending
numberSIDC: boolean; // Is the SIDC number based
space: boolean; // Is it in Space
taskForce: boolean; // Is it a task force
unit: boolean; // Is this equipment or not
};
type SymbolColors = {
black: ColorMode; // Black parts of the symbol.
fillColor: ColorMode; // Symbol fill color.
frameColor: ColorMode; // Symbol frame color.
iconColor: ColorMode; // Icon color.
iconFillColor: ColorMode; // Icon fill color.
none: ColorMode; // Transparent parts of the symbol.
white: ColorMode; // White parts of the symbol.
};
export class Symbol {
constructor(
code: string | SymbolOptions,
...options: SymbolOptions[]
);
asCanvas(factor?: number): HTMLCanvasElement;
asDOM(): Element;
asSVG(): string;
getAnchor(): { x: number; y: number };
getColors(): SymbolColors;
getOctagonAnchor(): { x: number; y: number };
getOptions(includeStyle?: boolean): SymbolOptions;
getMetadata(): SymbolMetadata;
getSize(): { width: number; height: number };
getStyle(): SymbolOptions;
isValid(extended?: boolean): boolean | Object;
setOptions(opts: SymbolOptions): Symbol;
toDataURL(): string;
}
interface Box {
x1: number,
y1: number,
x2: number,
y2: number,
}
interface BBoxObject extends Box {
width(): number,
height(): number,
/** Merges one box with another returns the original box */
merge(box: Box): this
}
/** Creates a bounding box object */
export function BBox(box?: Partial<Box>): BBoxObject;
/** Creates a ColorMode Object with colors used for different affiliations. */
export function ColorMode(civilian: string, friend: string, hostile: string, neutral: string, unknown: string): ColorMode;
/** Gets a color mode that has been registred with setColorMode */
export function getColorMode(mode: string): ColorMode;
/** Register a ColorMode with a name or override an existing ColorMode. */
export function setColorMode(name: string, colormode: ColorMode): ColorMode;
/** Gets the length of the HQ staf used for HQ symbols. */
export function getHqStaffLength(): number;
/** Sets the length of the HQ staf used for HQ symbols. */
export function setHqStaffLength(staff_length: number): number;
interface DashObject {
pending: string,
anticipated: string,
feintDummy: string
}
/** Gets the diffrent dash arrays used for dashed lines. */
export function getDashArrays(): DashObject;
/** Sets the dash arrays used for dashed lines */
export function setDashArrays(pending: string, anticipated: string, feintDummy: string): DashObject;
// Gets the version of milsymbol.
export function getVersion(): string;
/** Sets the preferred standard. */
export function setStandard(standard: "2525" | "APP6"): boolean;

77
node_modules/milsymbol/index.esm.js generated vendored Normal file
View File

@@ -0,0 +1,77 @@
/* ***************************************************************************************
ES6 version of milsymbol
*************************************************************************************** */
export { ms } from "./src/milsymbol.js";
export { app6b, std2525b, std2525c } from "./src/lettersidc.js";
export {
space as letterspace,
air as letterair,
ground as letterground,
equipment as letterequipment,
installations as letterinstallations,
sea as lettersea,
subsurface as lettersubsurface,
sof as lettersof,
signalsIntelligence as lettersignalsIntelligence,
stabilityoperations as letterstabilityoperations,
emergencymanagementsymbols as letteremergencymanagementsymbols,
std2525bextra as letterstd2525bextra,
tacticalpoints2525 as lettertacticalpoints2525,
tacticalpointsapp6 as lettertacticalpointsapp6
} from "./src/lettersidc.js";
export { app6d, std2525d } from "./src/numbersidc.js";
export {
air as numberair,
airmissile as numberairmissile,
space as numberspace,
spacemissile as numberspacemissile,
landunit as numberlandunit,
landcivilian as numberlandcivilian,
landequipment as numberlandequipment,
landinstallation as numberlandinstallation,
sea as numbersea,
subsurface as numbersubsurface,
minewarfare as numberminewarfare,
activites as numberactivites,
signalsintelligence as numbersignalsintelligence,
cyberspace as numbercyberspace,
dismountedindividual as numberdismountedindividual,
tacticalpoints as numbertacticalpoints
} from "./src/numbersidc.js";
export { default as path2d } from "./src/ms/path2d.js";
/* ***************************************************************************************
ES6 version of milsymbol
******************************************************************************************
To import all and have the same functionality as ordinary milsymbol, do the following:
(Or just import the things that you need)
import {
ms, // Base for milsymbol
app6b, // APP6-B
std2525b, // 2525B
std2525c, // 2525C
app6d, // APP6-D
std2525d, // 2525D
path2d // Pollyfill for Path2D in IE or node-canvas
} from "./index.esm.js";
ms.addIcons(app6b);
ms.addIcons(std2525b);
ms.addIcons(std2525c);
ms.addIcons(app6d);
ms.addIcons(std2525d);
ms.Path2D = path2d;
******************************************************************************************
Minimal version only supporting number based SIDC for land equipment:
import {
ms,
numberlandequipment
} from "./index.esm.js";
ms.addIcons(numberlandequipment);
*/

31
node_modules/milsymbol/index.js generated vendored Normal file
View File

@@ -0,0 +1,31 @@
/* ***************************************************************************************
Creating the base of milsymbol
******************************************************************************************
To import all and have the same functionality as ordinary milsymbol, do the following:
(Or just import the things that you need)
*/
import {
ms, // Base for milsymbol
app6b, // APP6-B
std2525b, // 2525B
std2525c, // 2525C
app6d, // APP6-D
std2525d, // 2525D
path2d // Pollyfill for Path2D in IE or node-canvas
} from "./index.esm.js";
ms.addIcons(app6b);
ms.addIcons(std2525b);
ms.addIcons(std2525c);
ms.addIcons(app6d);
ms.addIcons(std2525d);
ms.Path2D = path2d;
/* ***************************************************************************************
This draws the symbol octagon, can be good for debugging.
*************************************************************************************** */
//import debug from "./symbolfunctions/debug.js";
//ms.addSymbolPart(debug);
export default ms;

48
node_modules/milsymbol/package.json generated vendored Normal file
View File

@@ -0,0 +1,48 @@
{
"name": "milsymbol",
"version": "2.2.0",
"description": "Milsymbol.js is a small library in pure javascript that creates symbols according to MIL-STD-2525 and APP6.",
"main": "dist/milsymbol.js",
"exports": "./index.js",
"types": "index.d.ts",
"directories": {
"doc": "docs",
"example": "examples"
},
"scripts": {
"lint": "eslint src test --fix",
"prebuild": "npm run lint && npm test",
"build": "npm run bundle && npm run minify",
"build-amd": "npm run bundle-amd && npm run minify-amd",
"bundle": "rollup -c",
"bundle-amd": "rollup -c rollup.config.amd.js",
"minify": "uglifyjs dist/milsymbol.development.js -o dist/milsymbol.js --comments --compress --mangle --source-map",
"minify-amd": "uglifyjs dist/amd/milsymbol.development.js -o dist/amd/milsymbol.js --comments --compress --mangle --source-map",
"test": "tead --coverage"
},
"repository": {
"type": "git",
"url": "https://github.com/spatialillusions/milsymbol"
},
"author": "Måns Beckman (http://www.spatialillusions.com)",
"license": "MIT",
"bugs": {
"url": "https://github.com/spatialillusions/milsymbol/issues"
},
"homepage": "https://github.com/spatialillusions/milsymbol",
"devDependencies": {
"eslint": "^5.16.0",
"eslint-plugin-prettier": "^3.4.1",
"mil-std-2525": "^0.2.5",
"milstd": "^0.1.6",
"prettier": "^1.19.1",
"rollup": "^0.58.2",
"rollup-plugin-copy": "^0.2.3",
"stanag-app6": "^0.2.0",
"tead": "^0.5.3",
"uglify-js": "^3.17.4"
},
"babel": {
"presets": "env"
}
}

44
node_modules/milsymbol/rollup.config.amd.js generated vendored Normal file
View File

@@ -0,0 +1,44 @@
import copy from "rollup-plugin-copy";
export default [
{
input: "index.js",
output: {
file: "dist/amd/milsymbol.development.js",
format: "amd",
banner:
"/**!\n" +
"* @license\n" +
"* The MIT License (MIT)\n" +
"* \n" +
"* Copyright (c) 2017 Måns Beckman - www.spatialillusions.com\n" +
"* \n" +
"* Permission is hereby granted, free of charge, to any person obtaining a copy\n" +
'* of this software and associated documentation files (the "Software"), to deal\n' +
"* in the Software without restriction, including without limitation the rights\n" +
"* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" +
"* copies of the Software, and to permit persons to whom the Software is\n" +
"* furnished to do so, subject to the following conditions:\n" +
"* \n" +
"* The above copyright notice and this permission notice shall be included in all\n" +
"* copies or substantial portions of the Software.\n" +
"* \n" +
'* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n' +
"* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" +
"* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" +
"* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" +
"* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" +
"* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" +
"* SOFTWARE.\n" +
"* \n" +
"* More information can be found at www.spatialillusions.com \n" +
"*/"
},
plugins: [
copy({
"node_modules/milstd2525/milstd2525.js": "docs/milstd-2525.js",
"node_modules/stanagapp6/stanagapp6.js": "docs/stanag-app6.js",
verbose: true
})
]
}
];

49
node_modules/milsymbol/rollup.config.js generated vendored Normal file
View File

@@ -0,0 +1,49 @@
import copy from "rollup-plugin-copy";
export default [
{
input: "index.js",
output: {
file: "dist/milsymbol.development.js",
format: "umd",
amd: {
id: "milsymbol"
},
banner:
"/**!\n" +
"* @license\n" +
"* The MIT License (MIT)\n" +
"* \n" +
"* Copyright (c) 2017 Måns Beckman - www.spatialillusions.com\n" +
"* \n" +
"* Permission is hereby granted, free of charge, to any person obtaining a copy\n" +
'* of this software and associated documentation files (the "Software"), to deal\n' +
"* in the Software without restriction, including without limitation the rights\n" +
"* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" +
"* copies of the Software, and to permit persons to whom the Software is\n" +
"* furnished to do so, subject to the following conditions:\n" +
"* \n" +
"* The above copyright notice and this permission notice shall be included in all\n" +
"* copies or substantial portions of the Software.\n" +
"* \n" +
'* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n' +
"* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" +
"* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" +
"* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" +
"* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" +
"* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" +
"* SOFTWARE.\n" +
"* \n" +
"* More information can be found at www.spatialillusions.com \n" +
"*/",
name: "ms"
},
plugins: [
copy({
"node_modules/mil-std-2525/milstd2525.js": "docs/milstd-2525.js",
"node_modules/stanag-app6/stanagapp6.js": "docs/stanag-app6.js",
verbose: true
})
]
}
];

69
node_modules/milsymbol/src/colormodes.js generated vendored Normal file
View File

@@ -0,0 +1,69 @@
/* ***************************************************************************************
Default color modes
*************************************************************************************** */
export default {
Black: {
Civilian: "black",
Friend: "black",
Hostile: "black",
Neutral: "black",
Unknown: "black"
},
Dark: {
Civilian: "rgb(80,0,80)",
Friend: "rgb(0,107,140)",
Hostile: "rgb(200,0,0)",
Neutral: "rgb(0,160,0)",
Unknown: "rgb(225,220,0)"
},
FrameColor: {
Civilian: "rgb(255,0,255)",
Friend: "rgb(0, 255, 255)",
Hostile: "rgb(255, 0, 0)",
Neutral: "rgb(0, 255, 0)",
Unknown: "rgb(255, 255, 0)"
},
IconColor: {
Civilian: "rgb(255,0,255)",
Friend: "rgb(0, 255, 255)",
Hostile: "rgb(255, 0, 0)",
Neutral: "rgb(0, 255, 0)",
Unknown: "rgb(255, 255, 0)"
},
Light: {
Civilian: "rgb(255,161,255)",
Friend: "rgb(128,224,255)",
Hostile: "rgb(255,128,128)",
Neutral: "rgb(170,255,170)",
Unknown: "rgb(255,255,128)"
},
Medium: {
Civilian: "rgb(128,0,128)",
Friend: "rgb(0,168,220)",
Hostile: "rgb(255,48,49)",
Neutral: "rgb(0,226,110)",
Unknown: "rgb(255,255,0)"
},
None: {
Civilian: false,
Friend: false,
Hostile: false,
Neutral: false,
Unknown: false
},
OffWhite: {
Civilian: "rgb(239, 239, 239)",
Friend: "rgb(239, 239, 239)",
Hostile: "rgb(239, 239, 239)",
Neutral: "rgb(239, 239, 239)",
Unknown: "rgb(239, 239, 239)"
},
White: {
Civilian: "white",
Friend: "white",
Hostile: "white",
Neutral: "white",
Unknown: "white"
}
};

74
node_modules/milsymbol/src/iconparts/2525b.js generated vendored Normal file
View File

@@ -0,0 +1,74 @@
import { defaultProperties } from "./iconparts-functions.js";
export default function(
iconParts,
metadata,
colors,
STD2525,
monoColor,
alternateMedal
) {
// 2525B extra icon parts
/*
iconParts
The existing object of icon parts
metadata
properties object
colors
color object
STD2525
Is it 2525 then true, otherwise false
alternateMedal
true/false for sea mine stuff
*/
var affiliation = metadata.affiliation || "Friend";
//If hostile and not monoColor, make it red, otherwise use the iconColor.
var iconColor = colors.iconColor[affiliation];
//var numberSIDC = metadata.numberSIDC;
var icn = {};
icn["2525B.ASWSUB"] = {
type: "path",
d:
"m 80,85 40,0 0,-20 -40,0 z m 20,-30 0,40 m -40,15 15,15 50,0 15,-15 -15,-15 -50,0 z"
}; //WAR.SBSUF.SUB.STN.ASWSUB
icn["2525B.NCBTT.STN"] = [
{ type: "path", fill: false, d: "m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60" },
{ type: "text", stroke: false, x: 100, y: 145, fontsize: 30, text: "NC" }
]; //WAR.SSUF.NCBTT.STN
icn["2525B.STN.ASWSHP"] = [
{ type: "path", fill: false, d: "m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60" },
{ type: "text", stroke: false, x: 100, y: 145, fontsize: 30, text: "AS" }
]; //WAR.SSUF.CBTT.STN.ASWSHP
icn["2525B.STN.PKT"] = [
{ type: "path", fill: false, d: "m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60" },
{ type: "text", stroke: false, x: 100, y: 145, fontsize: 30, text: "PK" }
]; //WAR.SSUF.CBTT.STN.PKT
icn["2525B.STN.RSC"] = [
{ type: "path", fill: false, d: "m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60" },
{ type: "text", stroke: false, x: 100, y: 145, fontsize: 30, text: "RS" }
]; //WAR.SSUF.NCBTT.STN.RSC
icn["2525B.STN"] = {
type: "path",
fill: false,
d:
"m 70,85 c 20,0 40,0 60,0 0,10 0,20 0,30 -20,0 -40,0 -60,0 0,-10 0,-20 0,-30 z m 30,-15 c 0,20 0,40 0,60 m 35,-5 C 120,148 82.7,149 66.8,126 49.2,105 59.1,69.2 85.2,60.1 103,53.1 124,59.4 135,74.8"
}; //WAR.SSUF.CBTT.STN
icn["2525B.SUB.STN"] = [
{ type: "path", d: "m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60" },
{ type: "text", stroke: false, x: 100, y: 145, fontsize: 30, text: "SS" }
]; //WAR.SBSUF.SUB.STN
for (var key in icn) {
if (!icn.hasOwnProperty(key)) continue;
if (iconParts.hasOwnProperty(key)) console.warn("Override of: " + key);
defaultProperties.call(this, icn[key], iconColor);
iconParts[key] = icn[key];
}
}

526
node_modules/milsymbol/src/iconparts/air.js generated vendored Normal file
View File

@@ -0,0 +1,526 @@
import {
defaultProperties,
text,
textm1,
textm2
} from "./iconparts-functions.js";
export default function(
iconParts,
metadata,
colors,
STD2525,
monoColor,
alternateMedal
) {
/*
iconParts
The existing object of icon parts
metadata
properties object
colors
color object
STD2525
Is it 2525 then true, otherwise false
alternateMedal
true/false for sea mine stuff
*/
var frame = metadata.frame;
var affiliation = metadata.affiliation || "Friend";
//var baseGeometry = metadata.baseGeometry;
var numberSIDC = metadata.numberSIDC;
//var fillColor = colors.fillColor[affiliation];
var iconColor = colors.iconColor[affiliation];
var iconFillColor = colors.iconFillColor[affiliation];
// var none = colors.none[affiliation];
var black = colors.black[affiliation];
//var white = colors.white[affiliation];
//var numberSIDC = metadata.numberSIDC;
var icn = {};
icn["AR.I.MILITARY"] = text("MIL");
icn["AR.I.CIVILIAN"] = text("CIV");
icn["AR.I.CIVILIAN"].fill =
STD2525 || numberSIDC ? iconFillColor : !frame ? iconFillColor : false;
icn["AR.I.CIVILIAN"].stroke = black;
icn["AR.I.CIVILIAN"].strokewidth = 3;
icn["AR.I.MILITARY FIXED WING"] = {
type: "path",
d:
"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"
};
icn["AR.I.CIVILIAN FIXED WING"] = {
type: "path",
fill: false,
d:
"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"
};
icn["AR.I.FF.CIVILIAN FIXED WING"] = {
type: "path",
stroke: black,
d:
"M62,80 l30,0 0,-10 16,0 0,10 30,0 0,15 -30,0 0,25 10,0 0,5 -36,0 0,-5 10,0 0,-25 -30,0 Z M95,70 l0,-5 10,0 0,5",
fill: STD2525 ? iconFillColor : false
};
icn["AR.I.MILITARY ROTARY WING"] = {
type: "path",
d: "M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"
};
icn["AR.I.CIVILIAN ROTARY WING"] = {
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d: "M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"
};
icn["AR.I.FF.CIVILIAN ROTARY WING"] = [
{
type: "path",
stroke: black,
d:
"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",
fill: false
},
{
type: "path",
stroke: black,
fill: STD2525 ? iconFillColor : false,
d:
"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"
}
];
icn["AR.I.MILITARY BALLOON"] = [
{ type: "circle", cx: 100, cy: 95, r: 15 },
{ type: "path", d: "M95,110 l0,10 10,0 0,-10 z" }
];
icn["AR.I.FF.MILITARY BALLOON"] = [
{ type: "path", d: "M90,115 l20,0 0,20 -20,0 z" },
{ type: "circle", cx: 100, cy: 90, r: 35 }
];
icn["AR.I.CIVILIAN BALLOON"] = [
{
type: "circle",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
cx: 100,
cy: 95,
r: 15
},
{
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d: "M95,110 l0,10 10,0 0,-10 z"
}
];
icn["AR.I.FF.CIVILIAN BALLOON"] = [
{
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d: "M90,125 l20,0 0,10 -20,0 z"
},
{
type: "circle",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
cx: 100,
cy: 90,
r: 35
}
];
icn["AR.I.MILITARY AIRSHIP"] = {
type: "path",
d:
"m 110,110 10,10 10,0 -5,-15 m 0,-10 5,-15 -10,0 -10,10 m 17.2,10 c 0,6.1 -12.2,11.1 -27.2,11.1 -15,0 -27.2,-5 -27.2,-11.1 0,-6.1 12.2,-11.1 27.2,-11.1 15,0 27.2,5 27.2,11.1 z"
};
icn["AR.I.CIVILIAN AIRSHIP"] = {
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d:
"m 110,110 10,10 10,0 -5,-15 m 0,-10 5,-15 -10,0 -10,10 m 17.2,10 c 0,6.1 -12.2,11.1 -27.2,11.1 -15,0 -27.2,-5 -27.2,-11.1 0,-6.1 12.2,-11.1 27.2,-11.1 15,0 27.2,5 27.2,11.1 z"
};
icn["AR.I.UNMANNED AERIAL VEHICLE"] = {
type: "path",
d: "m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",
stroke: false
};
icn["AR.I.AIR DECOY"] = {
type: "path",
d:
"M65,95 l15,-15 0,30 Z M92.5,95 l15,-15 0,30 Z M120,95 l15,-15 0,30 Z M65,120 l70,0 0,-5 -70,0 Z"
};
icn["SU.IC.AIR DECOY DSymbol"] = {
type: "path",
d:
"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"
};
icn["AR.I.MEDICAL EVACUATION"] = {
type: "path",
d: "M93,83 l14,0 0,10 10,0 0,14 -10,0 0,10 -14,0 0,-10 -10,0 0,-14 10,0 Z"
};
icn["AR.I.ATTACK/STRIKE"] = text("A");
icn["AR.I.BOMBER"] = text("B");
icn["AR.I.CARGO"] = text("C");
icn["AR.I.ESCORT"] = text("E");
icn["AR.I.FIGHTER"] = text("F");
icn["AR.I.FIGHTER INTERCEPTOR"] = text("I");
icn["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"] = text("J");
icn["AR.I.TANKER"] = text("K");
icn["AR.I.PATROL"] = text("P");
icn["AR.I.RECONNAISSANCE"] = text("R");
icn["AR.I.2525 PHOTOGRAPHIC"] = text("X");
icn["AR.I.TRAINER"] = text("T");
icn["AR.I.UTILITY"] = text("U");
icn["AR.I.VSTOL"] = text(STD2525 && !numberSIDC ? "L" : "V");
icn["AR.I.AIRBORNE COMMAND POST"] =
STD2525 && !numberSIDC ? text("D") : text("ACP");
icn["AR.I.AIRBORNE EARLY WARNING"] =
STD2525 && !numberSIDC ? text("W") : text("AEW");
icn["AR.I.ANTISURFACE WARFARE"] =
STD2525 && !numberSIDC ? text("N") : text("ASUW");
icn["AR.I.ANTISUBMARINE WARFARE"] =
STD2525 && !numberSIDC ? text("S") : text("ASW");
icn["AR.I.COMMUNICATIONS"] = STD2525 && !numberSIDC ? text("Y") : text("COM");
icn["AR.I.COMBAT SEARCH AND RESCUE"] = text("CSAR");
icn["AR.I.ELECTRONIC SUPPORT MEASURES"] = STD2525 ? text("Z") : text("ESM");
icn["AR.I.GOVERNMENT"] = text("GOV");
icn["AR.I.MINE COUNTERMEASURES"] = text("MCM");
icn["AR.I.PERSONNEL RECOVERY"] = STD2525 ? text("H") : text("PRO");
icn["AR.I.PASSENGER"] = text("PX");
icn["AR.I.SEARCH AND RESCUE"] = text("SAR");
icn["AR.I.SUPRESSION OF ENEMY AIR DEFENCE"] = text("SEAD");
icn["AR.I.SPECIAL OPERATIONS FORCES"] = text("SOF");
icn["AR.I.ULTRA LIGHT"] = text("UL");
icn["AR.I.VIP"] = text("VIP");
icn["AR.I.FF.MILITARY FIXED WING"] = {
type: "path",
d:
"m 99.2,58.2 c -3,0.8 -2.5,5.8 -2.5,5.8 l -0.3,16 -37.2,36.5 1.3,4.6 L 96.7,96.6 97,128.6 l -8.5,8.2 0,4.6 9.3,-4.2 c 0.7,0.6 1.8,1.7 1.8,1.7 0,0 1.2,-1.1 1.9,-1.7 l 9.3,4.2 0,-4.6 -8.5,-8.2 0.3,-32 36.2,24.5 1.3,-4.6 -37.2,-36.5 -0.3,-16 c 0,0 0.5,-5 -2.5,-5.8 -0.4,-0.1 -0.7,-0.1 -1.1,0 z",
stroke: false
};
//2525D
icn["AR.I.FIXED-WING DSymbol"] = {
type: "path",
d: STD2525
? "M 99.4 80.8 C 97.9 81.1 98.1 83.4 98.1 83.4 L 98 90.7 L 78.6 107.4 L 79.3 109.4 L 98.1 98.3 L 98.3 112.9 L 93.9 116.6 L 93.9 118.7 L 98.8 116.8 C 99.1 117 99.7 117.5 99.7 117.5 C 99.7 117.5 100.4 117 100.7 116.8 L 105.6 118.7 L 105.6 116.6 L 101.1 112.9 L 101.3 98.3 L 120.2 109.4 L 120.9 107.4 L 101.5 90.7 L 101.3 83.4 C 101.3 83.4 101.6 81.1 100 80.8 C 99.8 80.8 99.6 80.8 99.4 80.8 z"
: "M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"
};
icn["AR.I.CIVILIAN FIXED-WING DSymbol"] = {
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d: STD2525
? "m 75.1,90.3 19.6,0 0,-6.5 10.5,0 0,6.5 19.6,0 0,9.7 -19.6,0 0,16.2 6.5,0 0,3.2 -23.6,0 0,-3.2 6.5,0 0,-16.2 -19.6,0 z m 21.6,-6.5 0,-3.2 6.5,0 0,3.2"
: "M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"
};
icn["AR.I.FIGHTER/BOMBER"] = text("F/B");
icn["AR.I.ELECTRONIC SUPPORT"] = STD2525 ? text("ES") : text("ESM");
icn["AR.I.PERSONNEL RECOVERY DSymbol"] = text("PR");
icn["AR.I.PHOTOGRAPHIC RECONNAISSANCE"] = text("PH");
icn["AR.I.ELECTRONIC ATTACK (EA)"] = text("EA");
icn["AR.I.VERTICAL-TAKEOFF UAV (VT-UAV)"] = {
type: "path",
d:
"m 70,85 30,10 30,-10 0,-5 -30,5 -30,-5 z m -10,5 40,15 40,-15 0,30 -40,-15 -40,15 z"
};
icn["AR.I.TETHERED LIGHTER THAN AIR"] = {
type: "path",
d:
"M 75,110 85,95 m -5,20 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m 15,-6 0,11 10,0 0,-11 m 10,-14 c 0,8.3 -6.7,15 -15,15 -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 z"
};
icn["AR.I.CIVILIAN TETHERED LIGHTER THAN AIR"] = {
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d:
"M 75,110 85,95 m -5,20 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m 15,-6 0,11 10,0 0,-11 m 10,-14 c 0,8.3 -6.7,15 -15,15 -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 z"
};
icn["AR.I.CIVILIAN UNMANNED AERIAL VEHICLE"] = {
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d: "m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"
};
icn["AR.I.WEAPON"] = text("WPN");
icn["AR.I.UNDERWATER DECOY DSymbol"] = {
type: "path",
d:
"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"
};
icn["AR.I.BOMB"] = text("BOMB");
icn["AR.I.MANUAL TRACK"] = text("MAN");
icn["AIR.M1.ATTACK"] = textm1("A");
icn["AIR.M1.BOMBER"] = textm1("B");
icn["AIR.M1.CARGO"] = textm1("C");
icn["AIR.M1.FIGHTER"] = textm1("F");
icn["AIR.M1.INTERCEPTOR"] = textm1("I");
icn["AIR.M1.TANKER"] = textm1("K");
icn["AIR.M1.UTILITY"] = textm1("U");
icn["AIR.M1.VSTOL"] = textm1(STD2525 && !numberSIDC ? "L" : "V");
icn["AIR.M1.PASSENGER"] = textm1("PX");
icn["AIR.M1.ULTRA LIGHT"] = textm1("UL");
icn["AIR.M1.AIRBORNE COMMAND POST"] =
STD2525 && !numberSIDC ? textm1("D") : textm1("ACP");
icn["AIR.M1.ANTISURFACE WARFARE"] =
STD2525 && !numberSIDC ? textm1("N") : textm1("ASUW");
icn["AIR.M1.AIRBORNE EARLY WARNING"] =
STD2525 && !numberSIDC ? textm1("W") : textm1("AEW");
icn["AIR.M1.GOVERNMENT"] = textm1("GOV");
icn["AIR.M1.MEDEVAC"] = {
type: "path",
stroke: false,
d: "M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"
};
icn["AIR.M1.ESCORT"] = textm1("E");
icn["AIR.M1.INTENSIVE CARE"] = textm1("IC");
icn["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"] = textm1("J");
icn["AIR.M1.PATROL"] = textm1("P");
icn["AIR.M1.RECONNAISSANCE"] = textm1("R");
icn["AIR.M1.TRAINER"] = textm1("T");
icn["AIR.M1.PHOTOGRAPHIC"] =
STD2525 && !numberSIDC ? textm1("X") : textm1("PH");
icn["AIR.M1.PERSONNEL RECOVERY"] = textm1("PR");
icn["AIR.M1.ANTISUBMARINE WARFARE"] =
STD2525 && !numberSIDC ? textm1("S") : textm1("ASW");
icn["AIR.M1.COMMUNICATIONS"] =
STD2525 && !numberSIDC ? textm1("Y") : textm1("COM");
icn["AIR.M1.ELECTRONIC SURVEILLANCE MEASURES"] = STD2525
? textm1("Z")
: textm1("ESM");
icn["AIR.M1.MINE COUNTERMEASURES"] = textm1("MCM");
icn["AIR.M1.SEARCH AND RESCUE"] = textm1("SAR");
icn["AIR.M1.SPECIAL OPERATIONS FORCES"] = textm1("SOF");
icn["AIR.M1.SURFACE WARFARE"] = textm1("SUW");
icn["AIR.M1.VIP"] = textm1("VIP");
icn["AIR.M1.COMBAT SEARCH AND RESCUE"] =
STD2525 && !numberSIDC ? textm1("H") : textm1("CSAR");
icn["AIR.M1.SUPRESSION OF ENEMY AIR DEFENCE"] = textm1("SEAD");
icn["AIR.M1.UNMANNED AERIAL VEHICLE"] = {
type: "path",
stroke: false,
d: "m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"
};
icn["AIR.M1.BOOM-ONLY"] = textm1("B");
icn["AIR.M1.DROUGE-ONLY"] = textm1("D");
//2525D
icn["AIR.M1.ELECTRONIC SUPPORT (ES)"] = STD2525
? textm1("ES")
: textm1("ESM");
icn["AIR.M1.HIJACKER"] = textm1("HJ");
icn["AIR.M1.CYBERSPACE"] = textm1("CYB");
icn["AIR.M1.FIGHTER/BOMBER"] = textm1("F/B");
icn["AIR.M1.ELECTRONIC ATTACK (EA)"] = textm1("EA");
icn["AIR.M1.MULTIMISSION"] = textm1("MM");
icn["AIR.M1.HIJACKING"] = textm1("H");
icn["AIR.M1.ASW HELO-LAMPS"] = textm1("LP");
icn["AIR.M1.ASW HELO - SH-60R"] = textm1("60R");
icn["AIR.M2.HEAVY"] = textm2("H");
icn["AIR.M2.MEDIUM"] = textm2("M");
icn["AIR.M2.LIGHT"] = textm2("L");
icn["AIR.M2.BOOM-ONLY"] = textm2("B");
icn["AIR.M2.DROUGE-ONLY"] = textm2("D");
icn["AIR.M2.BOOM AND DROUGE"] = textm2("B/D");
icn["AIR.M2.CLOSE RANGE"] = textm2("CR");
icn["AIR.M2.SHORT RANGE"] = textm2("SR");
icn["AIR.M2.MEDIUM RANGE"] = textm2("MR");
icn["AIR.M2.LONG RANGE"] = textm2("LR");
icn["AIR.M2.PHOTOGRAPHIC"] = textm2("P");
icn["AIR.M2.CYBERSPACE"] = textm2("CYB");
//2525D
icn["AIR.M2.DOWNLINKED"] = {
type: "text",
stroke: false,
x: 100,
y: 140,
fontsize: 25,
text: "DL"
};
icn["AIR.MISSILE.ICON"] = {
type: "path",
d: "M90,135 l0,-10 5,-5 0,-55 5,-5 5,5 0,55 5,5 0,10 -10,-10 z"
};
if (STD2525 || numberSIDC)
icn["AIR.MISSILE.ICON"].fill = frame
? colors.fillColor.Unknown
: colors.iconFillColor.Unknown;
icn["AIR.MISSILE.IC.ANTIBALLISTIC MISSILE"] = {
type: "text",
stroke: false,
x: 100,
y: 110,
fontsize: 25,
text: "ABM"
};
icn["AIR.MISSILE.IC.BOMB"] = {
type: "text",
stroke: false,
x: 100,
y: 110,
fontsize: 25,
text: "BOMB"
};
icn["AIR.MISSILE.M1.AIR"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "A"
};
icn["AIR.MISSILE.M1.SURFACE"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "S"
};
icn["AIR.MISSILE.M1.SUBSURFACE"] = [
{ type: "text", stroke: false, x: 68, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 68, y: 125, fontsize: 30, text: "U" }
];
icn["AIR.MISSILE.M1.SPACE"] = [
{ type: "text", stroke: false, x: 68, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 68, y: 125, fontsize: 30, text: "P" }
];
icn["AIR.MISSILE.M1.ANTI-BALLISTIC"] = [
{ type: "text", stroke: false, x: 68, y: 95, fontsize: 30, text: "A" },
{ type: "text", stroke: false, x: 68, y: 125, fontsize: 30, text: "B" }
];
icn["AIR.MISSILE.M1.BALLISTIC"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "B"
};
icn["AIR.MISSILE.M1.CRUISE"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "C"
};
icn["AIR.MISSILE.M1.LAND"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "L"
};
//2525D
icn["AIR.MISSILE.M1.INTERCEPTOR"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "I"
};
icn["AIR.MISSILE.M2.AIR"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "A"
};
icn["AIR.MISSILE.M2.SURFACE"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "S"
};
icn["AIR.MISSILE.M2.SUBSURFACE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "U" }
];
icn["AIR.MISSILE.M2.SPACE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "P" }
];
icn["AIR.MISSILE.M2.LAUNCHED"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "L"
};
icn["AIR.MISSILE.M2.MISSILE"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "M"
};
//2525D
icn["AIR.MISSILE.M2.PATRIOT"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "P"
};
icn["AIR.MISSILE.M2.STANDARD MISSILE - 2 (SM-2)"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "2" }
];
icn["AIR.MISSILE.M2.STANDARD MISSILE - 6 (SM-6)"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "6" }
];
icn["AIR.MISSILE.M2.EVOLVED SEA SPARROW MISSILE (ESSM)"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "S" }
];
icn["AIR.MISSILE.M2.ROLLING AIRFRAME MISSILE (RAM)"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "R"
};
icn["AIR.MISSILE.M2.SHORT RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["AIR.MISSILE.M2.MEDIUM RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "M" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["AIR.MISSILE.M2.INTERMEDIATE RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "I" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["AIR.MISSILE.M2.LONG RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "L" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["AIR.MISSILE.M2.INTERCONTINENTAL"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "I" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "C" }
];
for (var key in icn) {
if (!icn.hasOwnProperty(key)) continue;
if (iconParts.hasOwnProperty(key)) console.warn("Override of: " + key);
defaultProperties.call(this, icn[key], iconColor);
iconParts[key] = icn[key];
}
}

4593
node_modules/milsymbol/src/iconparts/ground.js generated vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,90 @@
export function defaultProperties(instructions, iconColor) {
if (typeof instructions === "object") {
if (Array.isArray(instructions)) {
for (var i = 0; i < instructions.length; i++) {
defaultProperties.call(this, instructions[i], iconColor);
}
return;
}
instructions.icon = true;
if (instructions.type == "text") {
if (!instructions.hasOwnProperty("fontfamily"))
instructions.fontfamily = "Arial";
if (!instructions.hasOwnProperty("fontweight"))
instructions.fontweight = "bold";
if (!instructions.hasOwnProperty("textanchor"))
instructions.textanchor = "middle";
if (!instructions.hasOwnProperty("stroke")) instructions.stroke = false;
}
if (!instructions.hasOwnProperty("fill")) instructions.fill = iconColor;
if (!instructions.hasOwnProperty("stroke")) instructions.stroke = iconColor;
return;
}
}
export function text(str) {
var size = 42;
var y = 115;
if (str.length == 1) {
size = 45;
y = 115;
}
if (str.length == 3) {
size = 35;
y = 110;
}
if (str.length >= 4) {
size = 32;
y = 110;
}
var t = {
type: "text",
stroke: false,
textanchor: "middle",
x: 100,
y: y,
fontsize: size,
text: str
};
return t;
}
export function textm1(str) {
var size = 30;
if (str.length == 3) {
size = 25;
}
if (str.length >= 4) {
size = 22;
}
return {
type: "text",
stroke: false,
textanchor: "middle",
x: 100,
y: 77,
fontsize: size,
text: str
};
}
export function textm2(str) {
var size = 30;
var y = 145;
if (str.length == 3) {
size = 25;
y = 140;
}
if (str.length >= 4) {
size = 20;
y = 135;
}
return {
type: "text",
stroke: false,
textanchor: "middle",
x: 100,
y: y,
fontsize: size,
text: str
};
}

554
node_modules/milsymbol/src/iconparts/sea.js generated vendored Normal file
View File

@@ -0,0 +1,554 @@
import {
defaultProperties,
text,
textm1,
textm2
} from "./iconparts-functions.js";
export default function(
iconParts,
metadata,
colors,
STD2525,
monoColor,
alternateMedal
) {
/*
iconParts
The existing object of icon parts
metadata
properties object
colors
color object
STD2525
Is it 2525 then true, otherwise false
alternateMedal
true/false for sea mine stuff
*/
var frame = metadata.frame;
var affiliation = metadata.affiliation || "Friend";
//var baseGeometry = metadata.baseGeometry;
var numberSIDC = metadata.numberSIDC;
//var fillColor = colors.fillColor[affiliation];
var iconColor = colors.iconColor[affiliation];
var iconFillColor = colors.iconFillColor[affiliation];
// var none = colors.none[affiliation];
var black = colors.black[affiliation];
var white = colors.white[affiliation];
//var numberSIDC = metadata.numberSIDC;
var icn = {};
icn["SE.IC.MILITARY"] = text("MIL");
icn["SE.IC.MANUAL TRACK"] = text("MAN");
icn["SE.IC.COMBATANT"] = [
{
type: "path",
d:
"m 86.9,110 c -3.6,2 -7.2,3.9 -10.8,5.9 2.1,2.9 6.7,3.9 10,2.1 2.6,-0.9 4.7,-3.8 3.1,-6.1 -0.8,-0.6 -1.5,-1.3 -2.3,-1.9 z m 26.3,0.1 c 3.6,2 7.2,3.9 10.8,5.9 -2.1,2.9 -6.7,3.9 -10,2.1 -2.6,-0.9 -4.7,-3.8 -3.1,-6.1 0.8,-0.6 1.5,-1.3 2.3,-1.9 z",
fill: false
},
{
type: "path",
d:
"m 112.9,110 c -5.6,-4 -11.3,-7.9 -16.1,-12.5 -4.2,-4.5 -7,-9.8 -9.2,-15.1 -0.8,4.4 -0.9,9.3 2.4,13.2 3.6,4.5 8.6,8.1 13.5,11.8 2.3,1.7 4.7,3.3 7.1,4.8 0.8,-0.7 1.5,-1.5 2.3,-2.2 m -25.7,0 c 5.6,-4 11.3,-7.9 16.1,-12.5 4.2,-4.5 7,-9.8 9.2,-15.1 0.8,4.4 0.9,9.3 -2.4,13.2 -3.6,4.5 -8.6,8.1 -13.5,11.8 -2.3,1.7 -4.7,3.3 -7.1,4.8 -0.8,-0.7 -1.5,-1.5 -2.3,-2.2",
fill: white,
strokewidth: 2
}
];
icn["SE.IC.SURFACE COMBATANT, LINE"] = {
type: "path",
stroke: false,
d:
"m 100,120 -25,-17 15,2 0,-10 5,0 0,-5 -15,0 0,-5 15,0 0,-5 10,0 0,5 15,0 0,5 -15,0 0,5 5,0 0,10 15,-2 z"
};
icn["SE.IC.CARRIER"] = {
type: "path",
d: "m 80,100 20,20 20,-20 -20,0 0,-20 -20,0 z"
};
icn["SE.IC.BATTLESHIP"] = text("BB");
icn["SE.IC.CIVILIAN"] = text("CIV");
icn["SE.IC.CIVILIAN"].fill =
STD2525 || numberSIDC ? iconFillColor : !frame ? iconFillColor : false;
icn["SE.IC.CIVILIAN"].stroke = black;
icn["SE.IC.CIVILIAN"].strokewidth = 3;
icn["SE.IC.CRUISER"] = text("CC");
icn["SE.IC.CRUISER, GUIDED MISSILE"] = text("CG");
icn["SE.IC.DESTROYER"] = text("DD");
icn["SE.IC.FRIGATE"] = text("FF");
icn["SE.IC.CORVETTE"] = text("FS");
icn["SE.IC.LITTORAL COMBATANT SHIP"] = text("LL");
icn["SE.IC.AMPHIBIOUS WARFARE SHIP"] = {
type: "path",
d: "m 100,120 20,0 m -20,0 -20,-20 10,0 0,-20 20,0 0,20 10,0 z"
};
icn["SE.IC.AMPHIBIOUS FORCE FLAGSHIP"] = text("LCC");
icn["SE.IC.AMPHIBIOUS ASSAULT"] = text("LA");
icn["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"] = text("LHA");
icn["SE.IC.AMPHIBIOUS ASSAULT SHIP, MULTI-PURPOSE"] = text("LHD");
icn["SE.IC.AMPHIBIOUS TRANSPORT, DOCK"] = text("LPD");
icn["SE.IC.AMPHIBIOUS ASSAULT SHIP, HELICOPTER"] = text("LPH");
icn["SE.IC.LANDING SHIP"] = text("LS");
icn["SE.IC.LANDING CRAFT"] = text("LC");
icn["SE.IC.MINE WARFARE VESSEL"] = {
type: "path",
d:
"m 98.3,81 0,4.1 c -2.4,0.3 -4.6,1.4 -6.4,2.9 l -3.5,-3.5 -2.4,2.4 3.6,3.6 c -0.9,1.3 -1.5,4.9 -1.8,6.5 l -10.8,0 0,3 3,0 20,20 20,-20 3,0 0,-3 -10,0 c -1,-1.7 -2,-5.3 -3,-6.7 l 4,-3.7 -2,-2.4 -4,3.6 c -2,-1.4 -4,-2.4 -6,-2.7 l 0,-4.1 z"
};
icn["SE.IC.MINELAYER"] = text("ML");
icn["SE.IC.MINESWEEPER"] = text("MS");
icn["SE.IC.MINESWEEPER, DRONE"] = text("MSD");
icn["SE.IC.MINEHUNTER"] = text("MH");
icn["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"] = text(STD2525 ? "MA" : "MCS");
icn["SE.IC.MINE COUNTERMEASURES"] = text("MCM");
icn["SE.IC.SEA SURFACE DECOY"] = {
type: "path",
d:
"M 105,110 90,95 105,80 z M 85,110 70,95 85,80 z m 40,-30 -15,15 15,15 z m -55,40 0,-5 55,0 0,5 z"
};
icn["SE.IC.PATROL"] = {
type: "path",
d: "m 80,100 20,20 20,-20 -10,0 0,-20 -20,0 0,20 z"
};
icn["SE.IC.PATROL CRAFT"] = text("PC");
icn["SE.IC.PATROL ANTI SUBMARINE WARFARE"] = {
type: "path",
d: "m 100,120 -25,-25 5,-5 10,10 5,0 0,-20 10,0 0,20 5,0 10,-10 5,5 z"
};
icn["SE.IC.PATROL ANTISHIP MISSILE"] = text("PM");
icn["SE.IC.PATROL TORPEDO"] = text("PT");
icn["SE.IC.PATROL GUN"] = text("PG");
icn["SE.IC.PATROL SHIP"] = [];
icn["SE.IC.MILITARY SPEEDBOAT"] = {
type: "path",
stroke: false,
d: "m 120,120 -40,0 -15,-25 15,0 5,-15 10,0 -5,15 45,0 z"
};
icn["SE.IC.MILITARY SPEEDBOAT, RIGID-HULL INFLATABLE BOAT"] = [
{
type: "path",
stroke: false,
d:
"M 85 80 L 80 95 L 65 95 L 80 120 L 120 120 L 135 95 L 90 95 L 95 80 L 85 80 z M 87 100.7 L 93.1 100.7 C 94.6 100.7 95.7 100.8 96.4 101.1 C 97.1 101.3 97.7 101.8 98.1 102.4 C 98.5 103.1 98.7 103.8 98.7 104.7 C 98.7 105.8 98.4 106.7 97.8 107.4 C 97.1 108.1 96.2 108.5 94.9 108.7 C 95.6 109.1 96.1 109.4 96.5 109.9 C 96.9 110.3 97.4 111.1 98.1 112.2 L 99.9 115 L 96.4 115 L 94.3 111.9 C 93.6 110.8 93.1 110.1 92.8 109.8 C 92.5 109.5 92.2 109.3 91.9 109.2 C 91.6 109.1 91.2 109 90.5 109 L 89.9 109 L 89.9 115 L 87 115 L 87 100.7 z M 101.5 100.7 L 107.2 100.7 C 108.3 100.7 109.2 100.7 109.7 100.8 C 110.3 100.9 110.8 101.1 111.2 101.4 C 111.7 101.7 112 102.1 112.3 102.6 C 112.6 103.1 112.7 103.7 112.8 104.3 C 112.7 105 112.6 105.6 112.2 106.1 C 111.9 106.7 111.4 107.1 110.8 107.4 C 111.6 107.7 112.3 108.1 112.8 108.7 C 113.2 109.3 113.5 110 113.5 110.8 C 113.5 111.5 113.3 112.1 113 112.8 C 112.7 113.4 112.3 113.8 111.8 114.2 C 111.2 114.6 110.6 114.8 109.8 114.9 C 109.3 115 108.2 115 106.3 115 L 101.5 115 L 101.5 100.7 z M 104.3 103.1 L 104.3 106.4 L 106.3 106.4 C 107.4 106.4 108.1 106.3 108.3 106.3 C 108.8 106.3 109.2 106.1 109.5 105.8 C 109.8 105.5 109.9 105.1 109.9 104.7 C 109.9 104.2 109.8 103.9 109.6 103.6 C 109.3 103.3 109 103.2 108.5 103.1 C 108.2 103.1 107.4 103.1 106 103.1 L 104.3 103.1 z M 89.9 103.1 L 89.9 106.8 L 92 106.8 C 93.4 106.8 94.3 106.7 94.6 106.6 C 95 106.4 95.2 106.3 95.4 106 C 95.6 105.7 95.7 105.3 95.8 104.9 C 95.7 104.4 95.6 104 95.3 103.7 C 95.1 103.4 94.7 103.2 94.3 103.2 C 94 103.1 93.3 103.1 92.2 103.1 L 89.9 103.1 z M 104.3 108.8 L 104.3 112.6 L 107 112.6 C 108.1 112.6 108.7 112.6 109 112.5 C 109.4 112.4 109.8 112.2 110.1 111.9 C 110.3 111.6 110.5 111.2 110.5 110.7 C 110.5 110.3 110.4 109.9 110.2 109.6 C 109.9 109.3 109.6 109.1 109.3 109 C 108.9 108.8 108 108.8 106.7 108.8 L 104.3 108.8 z"
},
{
type: "text",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
stroke: false,
x: 100,
y: 115,
fontsize: 20,
text: "RB"
}
];
icn["SE.IC.MILITARY JETSKI"] = {
type: "path",
stroke: false,
d: "m 135,105 0,15 -60,0 -10,-15 20,-25 10,0 0,10 -5,0 -5,15 z"
};
icn["SE.IC.UNMANNED SURFACE WATER VEHICLE"] = {
type: "path",
d: "m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",
stroke: false
};
icn["SE.IC.NAVY TASK ORGANIZATION UNIT"] = [
{ type: "path", d: "m 110,80 15,15 0,25 M 90,80 75,95 l 0,25", fill: false }
];
if (STD2525)
icn["SE.IC.NAVY TASK ORGANIZATION UNIT"].push({
type: "path",
d: "m 100,80 -15,15 0,25 30,0 0,-25 -15,-15"
});
icn["SE.IC.NAVY TASK FORCE"] = [
icn["SE.IC.NAVY TASK ORGANIZATION UNIT"],
{
type: "text",
stroke: false,
x: 100,
y: STD2525 ? 150 : 120,
fontsize: 30,
text: "TF"
}
];
icn["SE.IC.NAVY TASK GROUP"] = [
icn["SE.IC.NAVY TASK ORGANIZATION UNIT"],
{
type: "text",
stroke: false,
x: 100,
y: STD2525 ? 150 : 120,
fontsize: 30,
text: "TG"
}
];
icn["SE.IC.NAVY TASK UNIT"] = [
icn["SE.IC.NAVY TASK ORGANIZATION UNIT"],
{
type: "text",
stroke: false,
x: 100,
y: STD2525 ? 150 : 120,
fontsize: 30,
text: "TU"
}
];
icn["SE.IC.NAVY TASK ELEMENT"] = [
icn["SE.IC.NAVY TASK ORGANIZATION UNIT"],
{
type: "text",
stroke: false,
x: 100,
y: STD2525 ? 150 : 120,
fontsize: 30,
text: "TE"
}
];
icn["SE.IC.CONVOY"] = {
type: "path",
d: "m 80,115 -20,0 0,-35 80,0 0,35 -20,0 0,-20 -40,0 z"
};
icn["SE.IC.NONCOMBATANT"] = {
type: "path",
d: "m 80,100 0,-20 40,0 0,20 15,0 0,20 -70,0 0,-20 z"
};
icn["SE.IC.AUXILIARY SHIP"] = text(STD2525 ? "AR" : "AA");
icn["SE.IC.AMMUNITION SHIP"] = text("AE");
icn["SE.IC.STORES SHIP"] = text("AF");
icn["SE.IC.AUXILIARY FLAG OR COMMAND SHIP"] = text("AGF");
icn["SE.IC.INTELLIGENCE COLLECTOR"] = text(STD2525 ? "JI" : "AI");
icn["SE.IC.OCEAN RESEARCH SHIP"] = text("AGO");
icn["SE.IC.SURVEY SHIP"] = text("AGS");
icn["SE.IC.HOSPITAL SHIP"] = text("AH");
icn["SE.IC.CARGO SHIP"] = text("AK");
icn["SE.IC.COMBAT SUPPORT SHIP, FAST"] = text("AOE");
icn["SE.IC.OILER, REPLENISHMENT"] = text("AO");
icn["SE.IC.REPAIR SHIP"] = text("AR");
icn["SE.IC.SUBMARINE TENDER"] = text("AS");
icn["SE.IC.TUG, OCEAN GOING"] = text(STD2525 ? "AS" : "AT");
icn["SE.IC.SERVICE CRAFT, YARD, GENERAL"] = STD2525 ? text("YY") : text("YT");
icn["SE.IC.BARGE, NOT SELF-PROPELLED"] = text("YB");
icn["SE.IC.BARGE, SELF-PROPELLED"] = text("YS");
icn["SE.IC.TUG, HARBOUR"] = text("YT");
icn["SE.IC.LAUNCH"] = text("YFT");
icn["SE.IC.MERCHANT SHIP, GENERAL"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: "m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"
};
icn["SE.IC.CARGO, GENERAL"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "text",
stroke: false,
x: 100,
y: 115,
fontsize: 30,
text: STD2525 ? "CA" : "A"
}
];
icn["SE.IC.CONTAINER SHIP"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "C" }
];
icn["SE.IC.DREDGE"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "D" }
];
icn["SE.IC.RADAR"] = {
type: "path",
d: "M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",
fill: false
};
icn["SE.IC.ROLL ON-ROLL OFF"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "text",
stroke: false,
x: 100,
y: 115,
fontsize: STD2525 ? "30" : "30",
text: STD2525 ? "RO" : "E"
}
];
icn["SE.IC.FERRY"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "text",
stroke: false,
x: 100,
y: 115,
fontsize: 30,
text: STD2525 ? "FE" : "F"
}
];
icn["SE.IC.HEAVY LIFT"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "H" }
];
icn["SE.IC.HOVERCRAFT"] = {
type: "path",
d: STD2525
? "m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z"
: "m 90,80 0,15.6 C 78.4,96.9 70,100.6 70,105 c 0,5.5 13.4,10 30,10 16.6,0 30,-4.5 30,-10 0,-4.4 -8.4,-8.1 -20,-9.4 L 110,80 90,80 z m -15,40 50,0"
};
icn["SE.IC.HOVERCRAFT 2525D"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "J" }
];
icn["SE.IC.HOVERCRAFT CIVILIAN"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: STD2525
? "m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z"
: "m 90,80 0,15.6 C 78.4,96.9 70,100.6 70,105 c 0,5.5 13.4,10 30,10 16.6,0 30,-4.5 30,-10 0,-4.4 -8.4,-8.1 -20,-9.4 L 110,80 90,80 z m -15,40 50,0"
};
icn["SE.IC.HOVERCRAFT NONCOMBATANT"] = [
{
type: "path",
d: "m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z",
strokewidth: false
},
STD2525
? {
type: "text",
fill: white,
stroke: false,
x: 100,
y: 120,
fontsize: 30,
text: "NC"
}
: []
];
icn["SE.IC.MERCHANT SHIP, LASH CARRIER (WITH BARGES)"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "L" }
];
icn["SE.IC.OILER/TANKER"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "text",
stroke: false,
x: 100,
y: 115,
fontsize: 30,
text: STD2525 ? "OT" : "O"
}
];
icn["SE.IC.PASSENGER SHIP"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "text",
stroke: false,
x: 100,
y: 115,
fontsize: 30,
text: STD2525 ? "PA" : "P"
}
];
icn["SE.IC.TUG, OCEAN GOING CIVILIAN"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "text",
stroke: false,
x: 100,
y: 115,
fontsize: 30,
text: STD2525 ? "TU" : "T"
}
];
icn["SE.IC.TOW"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "TW" }
];
icn["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "HZ" }
];
icn["SE.IC.JUNK/DHOW"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "QJ" }
];
icn["SE.IC.BARGE, NOT SELF-PROPELLED"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "text", stroke: false, x: 100, y: 115, fontsize: 30, text: "YB" }
];
icn["SE.IC.HOSPITAL SHIP2"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{
type: "path",
stroke: false,
d:
"m 95,95 0,-15 10,0 0,15 15,0 0,10 -15,0 0,15 -10,0 0,-15 -15,0 0,-10 z"
}
];
icn["SE.IC.FISHING VESSEL"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 75,100 0,-15 20,0 0,15 50,0 -15,35 -60,0 -15,-35 z M 105,57.4 105,100 m 30,-35 -30,35"
};
icn["SE.IC.DRIFTER"] = [
icn["SE.IC.FISHING VESSEL"],
{ type: "text", stroke: false, x: 100, y: 125, fontsize: 30, text: "DF" }
];
icn["SE.IC.TRAWLER"] = [
icn["SE.IC.FISHING VESSEL"],
{ type: "text", stroke: false, x: 100, y: 125, fontsize: 30, text: "TR" }
];
icn["SE.IC.FISHING VESSEL DREDGE"] = [
icn["SE.IC.FISHING VESSEL"],
{ type: "text", stroke: false, x: 100, y: 125, fontsize: 30, text: "DR" }
];
icn["SE.IC.LAW ENFORCEMENT VESSEL"] = [
icn["SE.IC.MERCHANT SHIP, GENERAL"],
{ type: "path", d: "m 135,100 -15,35 -10,0 15,-35 z" }
];
icn["SE.IC.LEISURE CRAFT, SAILING BOAT"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: "m 105,55 0,40 35,0 z m -5,-5 0,50 m 45,0 -15,35 -60,0 -15,-35 z"
};
icn["SE.IC.LEISURE CRAFT, MOTORIZED"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: "m 70,97.4 15,-30 10,0 -15,30 65,0 -15,35 -60,0 -15,-35 z"
};
icn["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"] = [
icn["SE.IC.LEISURE CRAFT, MOTORIZED"],
{ type: "text", stroke: false, x: 100, y: 125, fontsize: 30, text: "RB" }
];
icn["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"] = [
icn["SE.IC.LEISURE CRAFT, MOTORIZED"],
{ type: "text", stroke: false, x: 100, y: 125, fontsize: 30, text: "SP" }
];
icn["SE.IC.LEISURE CRAFT, JETSKI"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: "m 85,60 -30,45 10,15 75,0 0,-20 -60,0 10,-30 5,0 0,-10 z"
};
icn["SE.IC.UNMANNED SURFACE WATER VEHICLE (USV)"] = {
type: "path",
fill: STD2525 || numberSIDC ? iconFillColor : false,
stroke: black,
d: "m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"
};
icn["SE.IC.OWN SHIP"] = {
type: "path",
fill: false,
stroke: monoColor ? iconColor : iconFillColor,
d:
"m 50,100 100,0 m -50,-50 0,100 m 50,-50 c 0,27.6 -22.4,50 -50,50 -27.6,0 -50,-22.4 -50,-50 0,-27.6 22.4,-50 50,-50 27.6,0 50,22.4 50,50 z"
};
icn["SE.IC.DITCHED AIRCRAFT"] = {
type: "path",
fill: monoColor ? iconColor : iconFillColor,
stroke: monoColor ? iconColor : iconFillColor,
d:
"m 145,120 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 10,10 25,-30 -10,-10 10,-10 20,20 -10,35 -15,-15 -15,15 z"
};
icn["SE.IC.PERSON IN WATER"] = {
type: "path",
fill: monoColor ? iconColor : iconFillColor,
stroke: monoColor ? iconColor : iconFillColor,
d:
"m 105,110 10,-10 0,-15 5,0 0,20 -10,10 z m -10,0 -10,-10 0,-15 -5,0 0,20 10,10 z m 5,-5 0,-10 -5,0 -5,-5 0,-10 5,-5 10,0 5,5 0,10 -5,5 -5,0 m -15,25 15,-15 m 45,15 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 45,15 -15,-15"
};
icn["SE.IC.DISTRESSED VESSEL"] = {
type: "path",
fill: monoColor ? iconColor : iconFillColor,
stroke: monoColor ? iconColor : iconFillColor,
d:
"m 120,65 -20,20 20,-20 m -5,55 -35,-35 0,-20 45,45 z m -30,0 -15,-15 m -15,15 15,-15 m 45,15 15,-15 m 15,15 -15,-15 m -45,15 15,-15"
};
icn["SE.IC.SEA MINELIKE"] = {
type: "path",
fill: monoColor ? iconColor : iconFillColor,
stroke: monoColor ? iconColor : iconFillColor,
d:
"m 117.7,75 c 3.5,-3.5 7.1,-7.1 7.1,-7.1 l 7.1,7.1 -7.1,7.1 m -49.5,0 c -3.5,-3.5 -7.1,-7.1 -7.1,-7.1 l 7.1,-7.1 7.1,7.1 M 95,70 c 0,-5 0,-10 0,-10 l 10,0 0,10 m 25,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 16.6,0 30,13.4 30,30 z"
};
icn["SE.IC.NAVIGATIONAL"] = {
type: "path",
fill: false,
stroke: monoColor ? iconColor : "red",
d: "m 75,90 -10,10 70,0 -10,10"
};
icn["SE.IC.ICEBERG"] = {
type: "path",
fill: monoColor ? iconColor : iconFillColor,
stroke: monoColor ? iconColor : iconFillColor,
d: "m 75,100 25,-30 25,30 -5,15 -5,-5 -15,20 -15,-20 -5,5 z m -15,0 80,0"
};
icn["SE.IC.FUSED TRACK"] = [
text("?"),
{
type: "path",
fill: false,
d: "m 70,65 10,35 -10,35 60,0 -10,-35 10,-35 z"
}
];
icn["SE.M1.OWN SHIP"] = textm1("OWN");
icn["SE.M1.ANTIAIR WARFARE"] = textm1("AAW");
icn["SE.M1.ANTISUBMARINE WARFARE"] = textm1("ASW");
icn["SE.M1.ESCORT"] = textm1("E");
icn["SE.M1.ELECTRONIC WARFARE"] = textm1("EW");
icn["SE.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"] = textm1("ISR");
icn["SE.M1.MINE COUNTER MEASURES"] = textm1("MCM");
icn["SE.M1.MISSILE DEFENSE"] = textm1("MD");
icn["SE.M1.MEDICAL"] = textm1("ME");
icn["SE.M1.MINE COUNTERMEASURES"] = textm1("MCM");
icn["SE.M1.MINE WARFARE"] = textm1("MIW");
icn["SE.M1.REMOTE MULTI-MISSION VEHIHLE"] = textm1("RMV");
icn["SE.M1.SPECIAL OPERATIONS FORCE"] = textm1("SOF");
icn["SE.M1.SURFACE WARFARE"] = textm1("SUW");
icn["SE.M1.BALLISTIC MISSILE"] = textm1("B");
icn["SE.M1.GUIDED MISSILE"] = textm1("G");
icn["SE.M1.OTHER GUIDED MISSILE"] = textm1("M");
icn["SE.M1.TORPEDO"] = textm1("T");
icn["SE.M1.CYBERSPACE"] = textm1("CYB");
icn["SE.M1.HIJACKER"] = textm1("HJ");
icn["SE.M2.CYBERSPACE"] = textm2("CYB");
icn["SE.M1.DRONE-EQUIPPED"] = {
type: "path",
stroke: false,
d: "m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"
};
icn["SE.M1.HELICOPTER-EQUIPPED"] = textm1("H");
icn["SE.M1.BALLISTIC MISSILE DEFENSE, SHOOTER"] = textm1("BM");
icn[
"SE.M1.BALLISTIC MISSILE DEFENSE, LONG- RANGE SURVEILLANCE AND TRACK (LRS&T)"
] = textm1("ST");
icn["SE.M1.SEA-BASE X-BAND"] = textm1("SBX");
icn["SE.M1.HIJACKING/HIJACKED"] = textm1("H");
icn["SE.M2.ANTISUBMARINE WARFARE"] = textm2("ASW");
icn["SE.M2.MINE WARFARE"] = textm2("MIW");
icn["SE.M2.SURFACE WARFARE"] = textm2("SUW");
icn["SE.M2.NUCLEAR POWERED"] = textm2("N");
icn["SE.M2.HEAVY"] = textm2("H");
icn["SE.M2.LIGHT"] = textm2("L");
icn["SE.M2.MEDIUM"] = textm2("M");
icn["SE.M2.DOCK"] = textm2("D");
icn["SE.M2.LOGISTICS"] = textm2("LOG");
icn["SE.M2.TANK"] = textm2("T");
icn["SE.M2.VEHICLE"] = textm2("V");
icn["SE.M2.FAST"] = textm2("F");
icn["SE.M2.AIR-CUSHIONED"] = textm2("J");
icn["SE.M2.AIR-CUSHIONED (USA ONLY)"] = textm2("AC");
icn["SE.M2.HYDROFOIL"] = textm2("K");
icn["SE.M2.AUTONOMOUS CONTROL"] = textm2("AUT");
icn["SE.M2.REMOTELY PILOTED"] = textm2("RP");
icn["SE.M2.EXPENDABLE"] = textm2("EXP");
for (var key in icn) {
if (!icn.hasOwnProperty(key)) continue;
if (iconParts.hasOwnProperty(key)) console.warn("Override of: " + key);
defaultProperties.call(this, icn[key], iconColor);
iconParts[key] = icn[key];
}
}

View File

@@ -0,0 +1,384 @@
import {
defaultProperties,
text,
textm1,
textm2
} from "./iconparts-functions.js";
export default function(
iconParts,
metadata,
colors,
STD2525,
monoColor,
alternateMedal
) {
/*
iconParts
The existing object of icon parts
metadata
properties object
colors
color object
STD2525
Is it 2525 then true, otherwise false
alternateMedal
true/false for sea mine stuff
*/
var affiliation = metadata.affiliation || "Friend";
//If hostile and not monoColor, make it red, otherwise use the iconColor.
var iconColor = colors.iconColor[affiliation];
//var numberSIDC = metadata.numberSIDC;
var icn = {};
// SIGNALS INTELLIGENCE ==========================================================
//if(symbol.codingscheme == "I"){
icn["SI.IC.COMMUNICATIONS"] = {
type: "path",
d:
"m 93,120 14,0 0,0 m -7,-27 0,27 m 2,-25 8,2 -5,5 13,3 m -20,-10 -8,2 5,5 -14,3 m 21,-13 8,-2 -5,-5 13,-3 m -37,0 14,3 -5,5 8,2",
fill: false
};
icn["SI.IC.RADAR"] = {
type: "path",
d: "m 115,90 -15,15 0,-15 -15,15 M 80,85 c 0,25 15,35 35,35",
fill: false
};
icn["SI.I.JAMMER / ELECTRONIC COUNTER-MEASURES"] = text("J");
icn["SI.M1.ANTI-AIRCRAFT FIRE CONTROL"] = textm1("AA");
icn["SI.M1.AIRBORNE SEARCH AND BOMBING"] = textm1("AB");
icn["SI.M1.AIRBORNE INTERCEPT"] = textm1("AI");
icn["SI.M1.ALTIMETER"] = textm1("AL");
icn["SI.M1.AIRBORNE RECONNAISSANCE AND MAPPING"] = textm1("AM");
icn["SI.M1.AIR TRAFFIC CONTROL"] = textm1("AT");
icn["SI.M1.BEACON TRANSPONDER (NOT IFF)"] = textm1("BN");
icn["SI.M1.BATTLEFIELD SURVEILLANCE"] = textm1("BS");
icn["SI.M1.CONTROLLED APPROACH"] = textm1("CA");
icn["SI.M1.CONTROLLED INTERCEPT"] = textm1("CI");
icn["SI.M1.CELLULAR/MOBILE"] = textm1("CM");
icn["SI.M1.COASTAL SURVEILLANCE"] = textm1("CS");
icn["SI.M1.CYBER"] = textm1("CYB");
icn["SI.M1.DECOY/MIMIC"] = textm1("DC");
icn["SI.M1.DATA TRANSMISSION"] = textm1("DT");
icn["SI.M1.EARTH SURVEILLANCE"] = textm1("ES");
icn["SI.M1.EARLY WARNING"] = textm1("EW");
icn["SI.M1.FIRE CONTROL"] = textm1("FC");
icn["SI.M1.GROUND MAPPING"] = textm1("GM");
icn["SI.M1.HEIGHT FINDING"] = textm1("HF");
icn["SI.M1.HARBOR SURVEILLANCE"] = textm1("HS");
icn["SI.M1.IDENTIFICATION, FRIEND OR FOE (INTERROGATOR)"] = textm1("IF");
icn["SI.M1.INSTRUMENT LANDING SYSTEM"] = textm1("IL");
icn["SI.M1.IONOSPHERIC SOUNDING"] = textm1("IS");
icn["SI.M1.IDENTIFICATION, FRIEND OR FOE (TRANSPONDER)"] = textm1("IT");
icn["SI.M1.BARRAGE JAMMER"] = textm1("JB");
icn["SI.M1.CLICK JAMMER"] = textm1("JC");
icn["SI.M1.DECEPTIVE JAMMER"] = textm1("JD");
icn["SI.M1.FREQUENCY SWEPT JAMMER"] = textm1("JF");
icn["SI.M1.JAMMER (GENERAL)"] = textm1("JG");
icn["SI.M1.NOISE JAMMER"] = textm1("JN");
icn["SI.M1.PULSED JAMMER"] = textm1("JP");
icn["SI.M1.REPEATER JAMMER"] = textm1("JR");
icn["SI.M1.SPOT NOISE JAMMER"] = textm1("JS");
icn["SI.M1.TRANSPONDER JAMMER"] = textm1("JT");
icn["SI.M1.MISSILE ACQUISITION"] = textm1("MA");
icn["SI.M1.MISSILE CONTROL"] = textm1("MC");
icn["SI.M1.MISSILE DOWNLINK"] = textm1("MD");
icn["SI.M1.METEOROLOGICAL"] = textm1("ME");
icn["SI.M1.MULTI-FUNCTION"] = textm1("MF");
icn["SI.M1.MISSILE GUIDANCE"] = textm1("MG");
icn["SI.M1.MISSILE HOMING"] = textm1("MH");
icn["SI.M1.MISSILE TRACKING"] = textm1("MT");
icn["SI.M1.NAVIGATIONAL/GENERAL"] = textm1("NA");
icn["SI.M1.NAVIGATIONAL/DISTANCE MEASURING EQUIPMENT"] = textm1("ND");
icn["SI.M1.NAVIGATION/TERRAIN FOLLOWING"] = textm1("NT");
icn["SI.M1.NAVIGATIONAL/WEATHER AVOIDANCE"] = textm1("NW");
icn["SI.M1.OMNI-LINE OF SIGHT (LOS)"] = textm1("OL");
icn["SI.M1.PROXIMITY USE"] = textm1("PF");
icn["SI.M1.POINT-TO-POINT LINE OF SIGHT (LOS)"] = textm1("PP");
icn["SI.M1.INSTRUMENTATION"] = textm1("RI");
icn["SI.M1.RANGE ONLY"] = textm1("RO");
icn["SI.M1.SONOBUOY"] = textm1("SB");
icn["SI.M1.SATELLITE DOWNLINK"] = textm1("SD");
icn["SI.M1.SPACE"] = textm1("SP");
icn["SI.M1.SURFACE SEARCH"] = textm1("SS");
icn["SI.M1.SHELL TRACKING"] = textm1("ST");
icn["SI.M1.SATELLITE UPLINK"] = textm1("SU");
icn["SI.M1.TARGET ACQUISITION"] = textm1("TA");
icn["SI.M1.TARGET ILLUMINATION"] = textm1("TI");
icn["SI.M1.TROPOSPHERIC SCATTER"] = textm1("TS");
icn["SI.M1.TARGET TRACKING"] = textm1("TT");
icn["SI.M1.UNKNOWN"] = textm1("UN");
icn["SI.M1.VIDEO REMOTING"] = textm1("VR");
icn["SI.M1.EXPERIMENTAL"] = textm1("XP");
icn["SI.M1.ALPHA"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "A"
};
icn["SI.M1.BRAVO"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "B"
};
icn["SI.M1.CHARLIE"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "C"
};
icn["SI.M1.DELTA"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "D"
};
icn["SI.M1.ECHO"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "E"
};
icn["SI.M1.FOXTROT"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "F"
};
icn["SI.M1.HOTEL"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "H"
};
icn["SI.M1.INDY"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "I"
};
icn["SI.M1.MIKE"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "M"
};
icn["SI.M1.OSCAR"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "O"
};
icn["SI.M1.PAPA"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "P"
};
icn["SI.M1.SIERRA"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "S"
};
icn["SI.M1.TANGO"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "T"
};
icn["SI.M1.UNIFORM"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 25,
text: "U"
};
icn["SI.M2.ALPHA"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "A"
};
icn["SI.M2.BRAVO"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "B"
};
icn["SI.M2.CHARLIE"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "C"
};
icn["SI.M2.CYBER"] = textm2("CYB");
icn["SI.M2.DELTA"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "D"
};
icn["SI.M2.ECHO"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "E"
};
icn["SI.M2.FOXTROT"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "F"
};
icn["SI.M2.GOLF"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "G"
};
icn["SI.M2.INDY"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "I"
};
icn["SI.M2.LIMA"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "L"
};
icn["SI.M2.MIKE"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "M"
};
icn["SI.M2.NOVEMBER"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "N"
};
icn["SI.M2.PAPA"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "P"
};
icn["SI.M2.SIERRA"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "S"
};
icn["SI.M2.TANGO"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "T"
};
icn["SI.M2.UNIFORM"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "U"
};
icn["SI.M2.WHISKEY"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 25,
text: "W"
};
icn["SI.M3.SPACE"] = {
type: "text",
stroke: false,
x: 100,
y: 75,
fontsize: 25,
text: "S"
};
icn["SI.M3.GROUND"] = {
type: "text",
stroke: false,
x: 100,
y: 75,
fontsize: 25,
text: "G"
};
for (var key in icn) {
if (!icn.hasOwnProperty(key)) continue;
if (iconParts.hasOwnProperty(key)) console.warn("Override of: " + key);
defaultProperties.call(this, icn[key], iconColor);
iconParts[key] = icn[key];
}
}

424
node_modules/milsymbol/src/iconparts/space.js generated vendored Normal file
View File

@@ -0,0 +1,424 @@
import {
defaultProperties,
text,
textm1,
textm2
} from "./iconparts-functions.js";
export default function(
iconParts,
metadata,
colors,
STD2525,
monoColor,
alternateMedal
) {
/*
iconParts
The existing object of icon parts
metadata
properties object
colors
color object
STD2525
Is it 2525 then true, otherwise false
alternateMedal
true/false for sea mine stuff
*/
var affiliation = metadata.affiliation || "Friend";
var frame = metadata.frame;
var numberSIDC = metadata.numberSIDC;
//If hostile and not monoColor, make it red, otherwise use the iconColor.
var iconColor = colors.iconColor[affiliation];
var iconFillColor = colors.iconFillColor[affiliation];
var none = colors.none[affiliation];
var black = colors.black[affiliation];
//var numberSIDC = metadata.numberSIDC;
var icn = {};
icn["SP.I.ANTISATELLITE WEAPON"] = {
type: "path",
d:
"m 100,110 0,9 m 0,-34 0,5 m 0,-9 -2,4 4,0 z m -10,9 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"
};
icn["SP.I.ASTRONOMICAL SATELLITE"] = {
type: "path",
d:
"m 97,90 -1,-9 8,0 -1,9 m -5,20 1,9 2,0 1,-9 m 8,-10 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
};
icn["SP.I.BIOSATELLITE"] = {
type: "path",
d:
"m 100,89 c 0,4.4 -3.6,8 -8,8 -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 4.4,0 8,3.6 8,8 z m -10,10 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0 m -17,-25 17,10 -1,2 -14,-7"
};
icn["SP.I.CAPSULE"] = {
type: "path",
d: "m 85,115 c -2,5 32,5 30,0 l -5,-30 c -1,-5 -19,-5 -20,0 z"
};
icn["SP.I.CIVILIAN ASTRONOMICAL SATELLITE"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 97,90 -1,-9 8,0 -1,9 m -5,20 1,9 2,0 1,-9 m 8,-10 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
};
icn["SP.I.CIVILIAN BIOSATELLITE"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 100,89 c 0,4.4 -3.6,8 -8,8 -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 4.4,0 8,3.6 8,8 z m -10,10 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0 m -17,-25 17,10 -1,2 -14,-7"
};
icn["SP.I.CIVILIAN CAPSULE"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: "m 85,115 c -2,5 32,5 30,0 l -5,-30 c -1,-5 -19,-5 -20,0 z"
};
icn["SP.I.CIVILIAN COMMUNICATIONS SATELLITE"] = [
{
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
},
{ type: "path", fill: false, d: "m 100,90 0,9 M 75,81 c 16,12 34,12 50,0" }
];
icn["SP.I.CIVILIAN EARTH OBSERVATION SATELLITE"] = [
{
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 107,113 c 0,3.9 -3.1,7 -7,7 -3.9,0 -7,-3.1 -7,-7 0,-3.9 3.1,-7 7,-7 3.9,0 7,3.1 7,7 z m -17,-33 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"
},
{ type: "path", fill: false, d: "m 88,107 c 8,-9 16,-9 24,0" }
];
icn["SP.I.CIVILIAN MINIATURIZED SATELLITE"] = [
{
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 91.1,92 0,16 17.8,0 0,-16 z m 22.2,0 0,16 22.2,0 0,-16 z m -26.6,0 -22.2,0 0,16 22.2,0 z m 0,8 4.4,0 m 17.8,0 4.4,0"
},
{
type: "path",
fill: false,
d:
"m 90,119 10,-9 10,9 m -20,-38 10,9 10,-9 m 35,9 -10,10 10,10 M 55,90 65,100 55,110"
}
];
icn["SP.I.CIVILIAN NAVIGATIONAL SATELLITE"] = [
{
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
},
{
type: "path",
fill: false,
d: "m 88,87 c 8,6 16,6 24,0 m -20,8 8,-14 8,14"
}
];
icn["SP.I.CIVILIAN ORBITER SHUTTLE"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d: "m 89,115 6,-25 c 3,-12 7,-12 10,0 l 6,25 -10,0 -1,5 -1,-5 z"
};
icn["SP.I.CIVILIAN SATELLITE"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 110,100 10,0 m -40,0 10,0 m -10,-10 -25,0 0,20 25,0 z m 40,0 0,20 25,0 0,-20 z m -30,0 0,20 20,0 0,-20 z"
};
icn["SP.I.CIVILIAN SPACE STATION"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 97.5,112.5 0,7.5 5,0 0,-7.5 z m 0,-32.5 5,0 0,26.4 -5,0 z m -0.3,7.6 C 83.3,88.2 72.5,93.5 72.5,100 c 0,6.9 12.3,12.5 27.5,12.5 15.2,0 27.5,-5.6 27.5,-12.5 0,-6.5 -11,-11.9 -25,-12.4 l 0,5.6 c 9.9,0.4 17.5,3.2 17.5,6.6 0,3.7 -8.9,6.7 -19.8,6.7 -10.9,0 -19.8,-3 -19.8,-6.7 0,-3.4 7.4,-6.1 17.1,-6.6 l 0,-5.6 c -0.1,0 -0.2,-0 -0.3,0 z"
};
icn["SP.I.CIVILIAN TETHERED SATELLITE"] = {
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 120,87 -20,12 m 33,-12 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 0,-3.6 2.9,-6.5 6.5,-6.5 3.6,0 6.5,2.9 6.5,6.5 z m -23,22 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
};
icn["SP.I.CIVILIAN WEATHER SATELLITE"] = [
{
type: "path",
fill: STD2525 ? iconFillColor : !frame ? iconFillColor : false,
d:
"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
},
{
type: "text",
stroke: false,
textanchor: "middle",
x: 100,
y: 95,
fontsize: 25,
text: "WX"
}
];
icn["SP.I.CIVILIAN"] = text("CIV");
icn["SP.I.CIVILIAN"].fill =
STD2525 || numberSIDC ? iconFillColor : !frame ? iconFillColor : false;
icn["SP.I.CIVILIAN"].stroke = black;
icn["SP.I.CIVILIAN"].strokewidth = 3;
icn["SP.I.COMMUNICATIONS SATELLITE"] = [
{
type: "path",
d:
"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
},
{ type: "path", fill: false, d: "m 100,90 0,9 M 75,81 c 16,12 34,12 50,0" }
];
icn["SP.M1.CYBERSPACE"] = textm1("CYB");
icn["SP.M2.CYBERSPACE"] = textm2("CYB");
icn["SP.I.EARTH OBSERVATION SATELLITE"] = [
{
type: "path",
d:
"m 107,113 c 0,3.9 -3.1,7 -7,7 -3.9,0 -7,-3.1 -7,-7 0,-3.9 3.1,-7 7,-7 3.9,0 7,3.1 7,7 z m -17,-33 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"
},
{ type: "path", fill: false, d: "m 88,107 c 8,-9 16,-9 24,0" }
];
icn["SP.I.FF.CREWED SPACE VEHICLE"] = {
type: "path",
stroke: false,
d:
"m 100.3,62.4 c -1.8,-0 -4.3,3.7 -4.5,5.4 -2.5,11.3 -3.4,23.1 -6.2,33.4 -2.9,6.7 -6.8,8.3 -9.9,12.1 -3,3.6 -8.5,10.4 -8.5,10.4 l 0,6.4 c 0,0 5.9,0.9 8.9,1.2 3,0.2 8.7,0.1 8.7,0.1 l 0.3,4.3 4.3,0.2 0.2,3.1 5.8,0 0.9,6.5 0.9,-6.4 5.8,0 0.2,-3.1 4.3,-0.2 0.3,-4.3 c 0,0 5.7,0.1 8.7,-0.1 3,-0.2 8.9,-1.2 8.9,-1.2 l 0,-6.4 c 0,0 -5.5,-6.7 -8.5,-10.3 -3.1,-3.8 -7,-5.4 -9.9,-12.1 -2.8,-10.4 -3.7,-22.2 -6.2,-33.4 -0.3,-2.9 -2.7,-5.5 -4.5,-5.5 z"
};
icn["SP.I.FF.SATELLITE"] = [
{
type: "path",
stroke: false,
d:
"m 115,70 20,0 0,55 -20,0 z m -25,5 20,0 0,45 -20,0 z m -25,-5 20,0 0,55 -20,0 z"
},
{
type: "path",
fill: false,
d: "M80,135 c10,-10 30,-10 40,0 M100,127 L100,100 M70,100 L130,100"
}
];
icn["SP.I.FF.SPACE STATION"] = [
{
type: "path",
d:
"m 103.1,97.4 c -12.4,0.3 -25.7,0.1 -36.7,6.7 -4.1,2.1 -8.5,5.9 -7.8,11 0.2,3.7 0.3,7.4 0.5,11.1 6.2,7.8 16.6,10.4 26,11.8 14,1.8 28.5,1.2 42.1,-3 5.2,-1.7 10.4,-4.3 14.2,-8.3 0.3,-5.1 -0.3,-10.4 0.7,-15.3 -1.2,-4.3 -5.9,-6.4 -9.7,-8.2 -9.2,-4 -19.3,-5.4 -29.2,-5.6 z m -3.2,9.6 c 10.1,-0.2 20.5,1.9 29.1,7.4 -13,8.4 -29.6,9.7 -44.3,6.1 -4.9,-1.3 -9.7,-3.3 -13.7,-6.4 8.8,-4.9 18.9,-6.9 28.9,-7.2 z",
fill: STD2525 ? iconFillColor : none
},
{
type: "path",
fill: false,
stroke: "black",
d:
"m 96.9,107 c 0.7,-8.1 1.4,-16.3 2.1,-24.4 M 89.3,121.8 c 3.1,-13.2 6.2,-26.3 9.3,-39.5 4.9,12.7 9.7,25.5 14.6,38.2 m 27.8,-5.3 c -0.1,3.9 -0.2,7.8 -0.3,11.6 M 58.6,113.3 c 0.2,4.5 0.3,9 0.5,13.5 m -0.5,-1.2 c 3.5,6.3 11,8.6 17.6,10.5 16.4,4.1 33.9,3.9 50.1,-0.8 5.5,-1.8 11.8,-4.3 14.7,-9.7 m 0.5,-13 c -0.5,5.4 -6.1,8.1 -10.5,10 -15.4,5.7 -32.4,6.1 -48.5,3.6 -7.9,-1.4 -16.3,-3.4 -22.2,-9.2 -3.6,-3.9 -0.9,-9.6 3.4,-11.7 8.3,-5.2 18.3,-6.6 27.9,-7.5 13.5,-1 27.5,0 40.2,5.1 4.2,1.8 9.3,4.6 9.7,9.7 z m -13.3,1.6 c -8.2,-5.9 -18.8,-6.8 -28.6,-7 -9.5,0.1 -19.5,1.2 -27.6,6.4 l -0.6,0.5 m 58.9,-2.6 c -0.8,4.8 -6.1,6.4 -10,7.8 -13.2,3.7 -27.4,3.7 -40.5,-0 -3.8,-1.2 -8.1,-2.8 -9.8,-6.7 -0.7,-4.9 5,-7.1 8.7,-8.5 12.7,-4 26.6,-4 39.5,-1 4.4,1.2 9.8,2.8 11.9,7.3 l 0.1,0.5 0,0.5 z"
},
{
type: "path",
fill: "black",
stroke: false,
d:
"M 75.2,93.1 C 88.9,87 102.6,80.8 116.3,74.7 c 2.3,1.3 4.7,2.6 7,3.9 -13.7,6 -27.3,12 -41,18 -2.4,-1.2 -4.8,-2.3 -7.2,-3.5 z"
}
];
icn["SP.I.MANUAL TRACK"] = text("MAN");
icn["SP.I.MILITARY"] = text("MIL");
icn["SP.I.MINIATURIZED SATELLITE"] = [
{
type: "path",
d:
"m 91.1,92 0,16 17.8,0 0,-16 z m 22.2,0 0,16 22.2,0 0,-16 z m -26.6,0 -22.2,0 0,16 22.2,0 z m 0,8 4.4,0 m 17.8,0 4.4,0"
},
{
type: "path",
fill: false,
d:
"m 90,119 10,-9 10,9 m -20,-38 10,9 10,-9 m 35,9 -10,10 10,10 M 55,90 65,100 55,110"
}
];
icn["SP.I.NAVIGATIONAL SATELLITE"] = [
{
type: "path",
d:
"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
},
{
type: "path",
fill: false,
d: "m 88,87 c 8,6 16,6 24,0 m -20,8 8,-14 8,14"
}
];
icn["SP.I.ORBITER SHUTTLE"] = {
type: "path",
d: "m 89,115 6,-25 c 3,-12 7,-12 10,0 l 6,25 -10,0 -1,5 -1,-5 z"
};
icn["SP.I.RE-ENTRY VEHICLE"] = text("RV");
icn["SP.I.RECONNAISSANCE SATELLITE"] = {
type: "path",
d:
"m 106,100 9,20 m -21,-20 -9,20 m 17,-20 3,20 m -7,-20 -3,20 m 15,-30 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
};
icn["SP.I.SATELLITE, GENERAL"] = text("SAT");
icn["SP.I.SATELLITE"] = {
type: "path",
d:
"m 110,100 10,0 m -40,0 10,0 m -10,-10 -25,0 0,20 25,0 z m 40,0 0,20 25,0 0,-20 z m -30,0 0,20 20,0 0,-20 z"
};
icn["SP.I.SPACE LAUNCH VEHICLE"] = text("SLV");
icn["SP.I.SPACE STATION"] = {
type: "path",
d:
"m 97.5,112.5 0,7.5 5,0 0,-7.5 z m 0,-32.5 5,0 0,26.4 -5,0 z m -0.3,7.6 C 83.3,88.2 72.5,93.5 72.5,100 c 0,6.9 12.3,12.5 27.5,12.5 15.2,0 27.5,-5.6 27.5,-12.5 0,-6.5 -11,-11.9 -25,-12.4 l 0,5.6 c 9.9,0.4 17.5,3.2 17.5,6.6 0,3.7 -8.9,6.7 -19.8,6.7 -10.9,0 -19.8,-3 -19.8,-6.7 0,-3.4 7.4,-6.1 17.1,-6.6 l 0,-5.6 c -0.1,0 -0.2,-0 -0.3,0 z"
};
icn["SP.I.SPACE VEHICLE"] = text("SV");
icn["SP.I.TETHERED SATELLITE"] = {
type: "path",
d:
"m 120,87 -20,12 m 33,-12 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 0,-3.6 2.9,-6.5 6.5,-6.5 3.6,0 6.5,2.9 6.5,6.5 z m -23,22 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
};
icn["SP.I.WEATHER SATELLITE"] = [
{
type: "path",
d:
"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"
},
{
type: "text",
stroke: false,
textanchor: "middle",
x: 100,
y: 100,
fontsize: 25,
text: "WX"
}
];
icn["SP.M1.GEOSTATIONARY ORBIT (GO)"] = textm1("GO");
icn["SP.M1.GEOSYNCHRONOUS ORBIT (GSO)"] = textm1("GSO");
icn["SP.M1.HIGH EARTH ORBIT (HEO)"] = textm1("HEO");
icn["SP.M1.LOW EARTH ORBIT (LEO)"] = textm1("LEO");
icn["SP.M1.MEDIUM EARTH ORBIT (MEO)"] = textm1("MEO");
icn["SP.M1.MOLNIYA ORBIT (MO)"] = textm1("MO");
icn["SP.M2.INFRARED"] = textm2("IR");
icn["SP.M2.OPTICAL"] = textm2("O");
icn["SP.M2.RADAR"] = textm2("R");
icn["SP.M2.SIGNALS INTELLIGENCE (SIGINT)"] = textm2("SI"); //Space Missile
icn["SPACE.MISSILE.ICON"] = {
type: "path",
d: "M90,135 l0,-10 5,-5 0,-55 5,-5 5,5 0,55 5,5 0,10 -10,-10 z"
};
if (STD2525 || numberSIDC)
icn["SPACE.MISSILE.ICON"].fill = frame
? colors.fillColor.Unknown
: colors.iconFillColor.Unknown;
icn["SPACE.MISSILE.M1.BALLISTIC"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "B"
};
icn["SPACE.MISSILE.M1.INTERCEPTOR"] = {
type: "text",
stroke: false,
x: 68,
y: 110,
fontsize: 30,
text: "I"
};
icn["SPACE.MISSILE.M1.SPACE"] = [
{ type: "text", stroke: false, x: 68, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 68, y: 125, fontsize: 30, text: "P" }
];
icn["SPACE.MISSILE.M2.ARROW"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "A" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["SPACE.MISSILE.M2.GROUND-BASED INTERCEPTOR (GBI)"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "G"
};
icn["SPACE.MISSILE.M2.INTERCONTINENTAL"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "I" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "C" }
];
icn["SPACE.MISSILE.M2.INTERMEDIATE RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "I" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["SPACE.MISSILE.M2.LONG RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "L" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["SPACE.MISSILE.M2.MEDIUM RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "M" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["SPACE.MISSILE.M2.PATRIOT"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "P"
};
icn["SPACE.MISSILE.M2.SHORT RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["SPACE.MISSILE.M2.SPACE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "P" }
];
icn["SPACE.MISSILE.M2.STANDARD MISSILE - 3 (SM-3)"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "3" }
];
icn["SPACE.MISSILE.M2.STANDARD MISSILE - TERMINAL PHASE (SM-T)"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "S" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "T" }
];
icn["SPACE.MISSILE.M2.TERMINAL HIGH-ALTITUDE AREA DEFENSE (THAAD)"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "T"
};
icn["SPACE.MISSILE.M2.CLOSE RANGE"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "C" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "R" }
];
icn["SPACE.MISSILE.M2.DEBRIS"] = [
{ type: "text", stroke: false, x: 132, y: 95, fontsize: 30, text: "D" },
{ type: "text", stroke: false, x: 132, y: 125, fontsize: 30, text: "B" }
];
icn["SPACE.MISSILE.M2.UNKNOWN"] = {
type: "text",
stroke: false,
x: 132,
y: 110,
fontsize: 30,
text: "U"
};
icn["SPACE.PLANET LANDER"] = text("PL");
//*/
for (var key in icn) {
if (!icn.hasOwnProperty(key)) continue;
if (iconParts.hasOwnProperty(key)) console.warn("Override of: " + key);
defaultProperties.call(this, icn[key], iconColor);
iconParts[key] = icn[key];
}
}

1108
node_modules/milsymbol/src/iconparts/subsurface.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

3845
node_modules/milsymbol/src/iconparts/tactical-points.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

79
node_modules/milsymbol/src/lettersidc.js generated vendored Normal file
View File

@@ -0,0 +1,79 @@
/* ***************************************************************************************
Letter based SIDC
*************************************************************************************** */
import space from "./lettersidc/sidc/space.js";
import air from "./lettersidc/sidc/air.js";
import ground from "./lettersidc/sidc/ground.js";
import equipment from "./lettersidc/sidc/equipment.js";
import installations from "./lettersidc/sidc/installations.js";
import sea from "./lettersidc/sidc/sea.js";
import subsurface from "./lettersidc/sidc/subsurface.js";
import sof from "./lettersidc/sidc/sof.js";
import signalsIntelligence from "./lettersidc/sidc/signalsIntelligence.js";
import stabilityoperations from "./lettersidc/sidc/stabilityoperations.js";
import emergencymanagementsymbols from "./lettersidc/sidc/emergencymanagementsymbols.js";
// Adding support for symbols in MIL-STD-2525B change 2 that are missing in 2525C
import std2525bextra from "./lettersidc/sidc/2525b-ch2.js";
import tacticalpoints2525 from "./lettersidc/sidc/tactical-points-2525.js";
import tacticalpointsapp6 from "./lettersidc/sidc/tactical-points-app6.js";
var app6b = [
space,
air,
ground,
equipment,
installations,
sea,
subsurface,
sof,
tacticalpointsapp6
];
var std2525b = [
space,
air,
ground,
equipment,
installations,
sea,
subsurface,
sof,
signalsIntelligence,
stabilityoperations,
std2525bextra,
tacticalpoints2525
];
var std2525c = [
space,
air,
ground,
equipment,
installations,
sea,
subsurface,
sof,
signalsIntelligence,
stabilityoperations,
emergencymanagementsymbols,
tacticalpoints2525
];
export {
app6b,
std2525b,
std2525c,
space,
air,
ground,
equipment,
installations,
sea,
subsurface,
sof,
signalsIntelligence,
stabilityoperations,
emergencymanagementsymbols,
std2525bextra,
tacticalpoints2525,
tacticalpointsapp6
};

11
node_modules/milsymbol/src/lettersidc/geticons.js generated vendored Normal file
View File

@@ -0,0 +1,11 @@
//import { ms } from "../ms.js";
export function geticons(ms, iconParts, STD2525) {
var iconSIDC = {};
var iconBbox = {};
for (var i in ms._iconSIDC.letter) {
if (!ms._iconSIDC.letter.hasOwnProperty(i)) continue;
ms._iconSIDC.letter[i].call(this, iconSIDC, iconBbox, iconParts, STD2525);
}
return { icons: iconSIDC, bbox: iconBbox };
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

385
node_modules/milsymbol/src/lettersidc/metadata.js generated vendored Normal file
View File

@@ -0,0 +1,385 @@
//import { ms } from "../ms.js";
export function metadata(ms, metadata, mapping) {
this.options.sidc = this.options.sidc.toUpperCase();
var codingscheme =
this.options.sidc.charAt(0) != "" ? this.options.sidc.charAt(0) : "-";
var affiliation =
this.options.sidc.charAt(1) != "" ? this.options.sidc.charAt(1) : "-";
var battledimension =
this.options.sidc.charAt(2) != "" ? this.options.sidc.charAt(2) : "-";
var status =
this.options.sidc.charAt(3) != "" ? this.options.sidc.charAt(3) : "-";
var functionid = (metadata.functionid =
this.options.sidc.substr(4, 6) != ""
? this.options.sidc.substr(4, 6)
: "------");
var symbolmodifier11 =
this.options.sidc.charAt(10) != "" ? this.options.sidc.charAt(10) : "-";
var symbolmodifier12 =
this.options.sidc.charAt(11) != "" ? this.options.sidc.charAt(11) : "-";
/*
var countrycode = this.options.sidc.substr(12, 2) != ""
? this.options.sidc.substr(12, 2)
: "--";
var orderofbattle = this.options.sidc.charAt(14) != "" ? this.options.sidc.charAt(14) : "-";
*/
if (["H", "S", "J", "K"].indexOf(affiliation) > -1)
metadata.affiliation = mapping.affiliation[0];
if (["F", "A", "D", "M"].indexOf(affiliation) > -1)
metadata.affiliation = mapping.affiliation[1];
if (["N", "L"].indexOf(affiliation) > -1)
metadata.affiliation = mapping.affiliation[2];
if (["P", "U", "G", "W", "O"].indexOf(affiliation) > -1)
metadata.affiliation = mapping.affiliation[3];
if (["P", "A"].indexOf(battledimension) > -1)
metadata.dimension = mapping.dimension[0];
if (["G", "Z", "F", "X"].indexOf(battledimension) > -1)
metadata.dimension = mapping.dimension[1];
if (["S"].indexOf(battledimension) > -1)
metadata.dimension = mapping.dimension[2];
if (["U"].indexOf(battledimension) > -1)
metadata.dimension = mapping.dimension[3];
//dimension is in Space
if (battledimension == "P" && codingscheme != "O") metadata.space = true;
//codingscheme that are Activities
if (codingscheme == "O" && ["V", "O", "R"].indexOf(battledimension) > -1) {
metadata.activity = true;
}
//SymbolSets that are control-measure
if (codingscheme == "G") metadata.controlMeasure = true;
//symbolmodifier11 that are Installations
if (symbolmodifier11 == "H") metadata.installation = true;
//Planned/Anticipated/Suspect symbols should have a dashed outline
if (this.style.frame && status == "A")
metadata.notpresent = ms._dashArrays.anticipated;
if (this.style.frame && ["P", "A", "S", "G", "M"].indexOf(affiliation) > -1) {
metadata.notpresent = ms._dashArrays.pending;
}
//Should it have a Condition Bar
if (status == "C") metadata.condition = mapping.status[2];
if (status == "D") metadata.condition = mapping.status[3];
if (status == "X") metadata.condition = mapping.status[4];
if (status == "F") metadata.condition = mapping.status[5];
//Is it part of Exercise Symbols
if (["G", "W", "D", "L", "M", "J", "K"].indexOf(affiliation) > -1) {
metadata.context = mapping.context[1];
}
//Framing of SO tactical symbols differs slightly from C2 Symbology: UEI tactical symbols in that there is only one battle dimension: ground.
if (codingscheme == "O") metadata.dimension = mapping.dimension[1];
//Framing of EMS tactical symbols differs slightly from C2 Symbology: UEI tactical symbols in that there is only one battle dimension: ground.
if (codingscheme == "E") metadata.dimension = mapping.dimension[1];
//First save the dimensionType and affiliationType before we modifies it...
metadata.baseDimension = metadata.dimension;
metadata.baseAffilation = metadata.affiliation;
//Joker and faker should have the shape of friendly
if (affiliation == "J") metadata.joker = true;
if (affiliation == "K") metadata.faker = true;
if (metadata.joker || metadata.faker) {
metadata.affiliation = mapping.affiliation[1];
}
//Ground Equipment should have the same geometry as sea Friend...
if (
codingscheme == "S" &&
battledimension == "G" &&
functionid.charAt(0) == "E"
)
metadata.dimension = mapping.dimension[2];
//Signal INTELLIGENCE Ground should have the same geometry as sea Friend...
if (codingscheme == "I" && battledimension == "G")
metadata.dimension = mapping.dimension[2];
//Some EMS symbosls should have the same geometry as sea Friend...
if (
codingscheme == "E" &&
((battledimension == "O" &&
[
"AB----",
"AE----",
"AF----",
"BB----",
"CB----",
"CC----",
"DB----",
"DDB---",
"DEB---",
"DFB---",
"DGB---",
"DHB---",
"DIB---",
"DJB---",
"DLB---",
"DMB---",
"DOB---",
"EA----",
"EB----",
"EC----",
"ED----",
"EE----"
].indexOf(functionid) > -1) ||
(battledimension == "F" &&
["BA----", "MA----", "MC----"].indexOf(functionid) > -1))
) {
metadata.dimension = mapping.dimension[2];
}
//Setting up Headquarters/task force/dummy
if (
["F", "G", "C", "D"].indexOf(symbolmodifier11) > -1 ||
(symbolmodifier11 == "H" && symbolmodifier12 == "B")
) {
metadata.feintDummy = true;
}
if (["A", "B", "C", "D"].indexOf(symbolmodifier11) > -1) {
metadata.headquarters = true;
}
if (battledimension == "G" && functionid == "UH----") {
metadata.headquarters = true;
}
if (["E", "B", "G", "D"].indexOf(symbolmodifier11) > -1) {
metadata.taskForce = true;
}
//Setting up Echelon/Mobility/Towed Array Amplifier
if (symbolmodifier12 == "A") metadata.echelon = mapping.echelonMobility[11]; //Team/Crew
if (symbolmodifier12 == "B" && symbolmodifier11 != "H") {
metadata.echelon = mapping.echelonMobility[12]; //Squad
}
if (symbolmodifier12 == "C") metadata.echelon = mapping.echelonMobility[13]; //Section
if (symbolmodifier12 == "D") metadata.echelon = mapping.echelonMobility[14]; //Platoon/detachment
if (symbolmodifier12 == "E") metadata.echelon = mapping.echelonMobility[15]; //Company/battery/troop
if (symbolmodifier12 == "F") metadata.echelon = mapping.echelonMobility[16]; //Battalion/squadron
if (symbolmodifier12 == "G") metadata.echelon = mapping.echelonMobility[17]; //Regiment/group
if (symbolmodifier12 == "H") metadata.echelon = mapping.echelonMobility[18]; //Brigade
if (symbolmodifier12 == "I") metadata.echelon = mapping.echelonMobility[21]; //Division
if (symbolmodifier12 == "J") metadata.echelon = mapping.echelonMobility[22]; //Corps/MEF
if (symbolmodifier12 == "K") metadata.echelon = mapping.echelonMobility[23]; //Army
if (symbolmodifier12 == "L" && symbolmodifier11 != "N") {
metadata.echelon = mapping.echelonMobility[24]; //Army Group/front
}
if (symbolmodifier12 == "M") metadata.echelon = mapping.echelonMobility[25]; //Region/Theater
if (symbolmodifier12 == "N") metadata.echelon = mapping.echelonMobility[26]; //Command
if (symbolmodifier11 == "M") {
switch (symbolmodifier12) {
case "O":
metadata.mobility = mapping.echelonMobility[31]; //Wheeled limited cross country
break;
case "P":
metadata.mobility = mapping.echelonMobility[32]; //Wheeled cross country
break;
case "Q":
metadata.mobility = mapping.echelonMobility[33]; //Tracked
break;
case "R":
metadata.mobility = mapping.echelonMobility[34]; //Wheeled and tracked combination
break;
case "S":
metadata.mobility = mapping.echelonMobility[35]; //Towed
break;
case "T":
metadata.mobility = mapping.echelonMobility[36]; //Rail
break;
case "U":
metadata.mobility = mapping.echelonMobility[41]; //Over snow (prime mover)
break;
case "V":
metadata.mobility = mapping.echelonMobility[42]; //Sled
break;
case "W":
metadata.mobility = mapping.echelonMobility[37]; //Pack animals
break;
case "X":
metadata.mobility = mapping.echelonMobility[51]; //Barge
break;
case "Y":
metadata.mobility = mapping.echelonMobility[52]; //Amphibious
break;
default:
metadata.mobility = undefined;
}
}
if (symbolmodifier11 == "N") {
switch (symbolmodifier12) {
case "S":
metadata.mobility = mapping.echelonMobility[61]; //Short towed array
break;
case "L":
metadata.mobility = mapping.echelonMobility[62]; //Long towed Array
break;
default:
metadata.mobility = undefined;
}
}
//This is for 2525
//Civilian stuff
if (
(battledimension == "A" && functionid.charAt(0) == "C") ||
(battledimension == "G" && functionid.substring(0, 3) == "EVC") ||
(battledimension == "S" && functionid.charAt(0) == "X")
) {
metadata.civilian = true;
}
//Colors will be have to be fixed in symbolColors
if (battledimension == "Z" || battledimension == "X") {
if (["P", "U", "F", "N", "H", "A", "S", "G", "W"].indexOf(affiliation) > -1)
metadata.dimensionUnknown = true;
//To get the correct geometry for a lot of stuff later we will have to modify the affliationType.
if (["F", "A"].indexOf(affiliation) > -1) metadata.dimension = "Sea";
//If battle dimension is unknown and the affiliation is D,L,M,J,K we should not have a symbol
if (["D", "L", "M", "J", "K"].indexOf(affiliation) > -1)
metadata.affiliation = "none";
}
//Forcing unframing of symbols that shouldn't have a frame.
if (
battledimension == "S" &&
[
"O-----",
"ED----",
"EP----",
"EV----",
"ZM----",
"ZN----",
"ZI----"
].indexOf(functionid) > -1
) {
metadata.frame = false;
}
if (
codingscheme == "E" &&
battledimension == "N" &&
[
"AA----",
"AB----",
"AC----",
"AD----",
"AE----",
"AG----",
"BB----",
"BC----",
"BF----",
"BM----",
"-C-----",
"CA----",
"CB----",
"CC----",
"CD----",
"CE----"
].indexOf(functionid) > -1
) {
metadata.frame = false;
}
if (
codingscheme == "W" &&
battledimension == "S" &&
[
"WSVE--",
"WSD-LI",
"WSFGSO",
"WSGRL-",
"WSR-LI",
"WSDSLM",
"WSS-LI",
"WSTMH-",
"WST-FC",
"WSTSS-"
].indexOf(functionid) > -1
) {
metadata.frame = false;
}
//We have some special symbols that should be unframed but filled, like mines, let us fix them.
if (
battledimension == "U" &&
[
"WM----",
"WMD---",
"WMG---",
"WMGD--",
"WMGX--",
"WMGE--",
"WMGC--",
"WMGR--",
"WMGO--",
"WMM---",
"WMMD--",
"WMMX--",
"WMME--",
"WMMC--",
"WMMR--",
"WMMO--",
"WMF---",
"WMFD--",
"WMFX--",
"WMFE--",
"WMFC--",
"WMFR--",
"WMFO--",
"WMO---",
"WMOD--",
"WMX---",
"WME---",
"WMA---",
"WMC---",
"WMR---",
"WMB---",
"WMBD--",
"WMN---",
"WMS---",
"WMSX--",
"WMSD--",
"WD----",
"WDM---",
"WDMG--",
"WDMM--",
"ND----",
"E-----",
"V-----",
"X-----",
"NBS---",
"NBR---",
"NBW---",
"NM----",
"NA----"
].indexOf(functionid) > -1
) {
if (metadata.STD2525) {
metadata.fill = false;
if (functionid == "WD----") {
metadata.fill = true;
}
if (
["ND----", "NBS---", "NBR---", "NBW---", "NM----", "NA----"].indexOf(
functionid
) > -1
) {
metadata.fill = true;
metadata.frame = false;
}
} else {
metadata.frame = false;
if (["E-----", "V-----", "X-----"].indexOf(functionid) > -1) {
metadata.fill = false;
metadata.frame = false;
}
}
}
//Some symbols in EMS and symbols from tactical graphics
if (
this.options.sidc.substr(0, 3) == "WAS" ||
this.options.sidc.substr(0, 3) == "WOS" ||
codingscheme == "G"
) {
metadata.frame = false;
}
//This is for APP6 tactical points with frames
if (
codingscheme == "G" &&
battledimension == "O" &&
["V", "L", "P", "I"].indexOf(functionid.charAt(0)) > -1
) {
metadata.frame = true;
metadata.dimension = mapping.dimension[1];
}
return metadata;
}

View File

@@ -0,0 +1,27 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import std2525bicons from "../../iconparts/2525b.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [std2525bicons],
icons: function std2525b(sId, bbox, icn, _STD2525) {
// These symbols are in 2525B but not in 2525C and because of this they need to be added
// The icons are in iconparts/2525b.js
sId["S-S-S-----"] = icn["2525B.STN"]; //WAR.SSUF.CBTT.STN
sId["S-S-SP----"] = icn["2525B.STN.PKT"]; //WAR.SSUF.CBTT.STN.PKT
sId["S-S-SA----"] = icn["2525B.STN.ASWSHP"]; //WAR.SSUF.CBTT.STN.ASWSHP
sId["S-S-NN----"] = icn["2525B.NCBTT.STN"]; //WAR.SSUF.NCBTT.STN
sId["S-S-NNR---"] = icn["2525B.STN.RSC"]; //WAR.SSUF.NCBTT.STN.RSC
sId["S-U-SS----"] = icn["2525B.SUB.STN"]; //WAR.SBSUF.SUB.STN
sId["S-U-SSA---"] = icn["2525B.ASWSUB"]; //WAR.SBSUF.SUB.STN.ASWSUB
// Tactical points
sId["G-O-SBWD--"] = icn["TP.WRECK, DANGEROUS"]; //TACGRP.OTH.SSUBSR.BTMRTN.WRKD
bbox["G-O-SBXD--"] = { x1: 35, x2: 165, y1: 70, y2: 130 };
}
};

298
node_modules/milsymbol/src/lettersidc/sidc/air.js generated vendored Normal file
View File

@@ -0,0 +1,298 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/air.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function air(sId, bbox, icn, _STD2525) {
// AIR ===========================================================================
sId["S-A-------"] = [];
sId["S-A-M-----"] = [icn["AR.I.MILITARY"]];
sId["S-A-MF----"] = [icn["AR.I.FF.MILITARY FIXED WING"]];
sId["S-A-MFB---"] = [icn["AR.I.BOMBER"]];
sId["S-A-MFF---"] = [icn["AR.I.FIGHTER"]];
sId["S-A-MFFI--"] = [icn["AR.I.FIGHTER INTERCEPTOR"]];
sId["S-A-MFT---"] = [icn["AR.I.TRAINER"]];
sId["S-A-MFA---"] = [icn["AR.I.ATTACK/STRIKE"]];
sId["S-A-MFL---"] = [icn["AR.I.VSTOL"]];
sId["S-A-MFK---"] = [icn["AR.I.TANKER"]];
sId["S-A-MFKB--"] = [icn["AR.I.TANKER"], icn["AIR.M1.BOOM-ONLY"]];
sId["S-A-MFKD--"] = [icn["AR.I.TANKER"], icn["AIR.M1.DROUGE-ONLY"]];
sId["S-A-MFC---"] = [icn["AR.I.CARGO"]];
sId["S-A-MFCL--"] = [icn["AR.I.CARGO"], icn["AIR.M2.LIGHT"]];
sId["S-A-MFCM--"] = [icn["AR.I.CARGO"], icn["AIR.M2.MEDIUM"]];
sId["S-A-MFCH--"] = [icn["AR.I.CARGO"], icn["AIR.M2.HEAVY"]];
sId["S-A-MFJ---"] = [icn["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]];
sId["S-A-MFO---"] = [icn["AR.I.MEDICAL EVACUATION"]];
sId["S-A-MFR---"] = [icn["AR.I.RECONNAISSANCE"]];
sId["S-A-MFRW--"] = [icn["AR.I.AIRBORNE EARLY WARNING"]];
sId["S-A-MFRZ--"] = [icn["AR.I.ELECTRONIC SUPPORT MEASURES"]];
sId["S-A-MFRX--"] = _STD2525
? [icn["AR.I.2525 PHOTOGRAPHIC"]]
: [icn["AR.I.RECONNAISSANCE"], icn["AIR.M2.PHOTOGRAPHIC"]];
sId["S-A-MFP---"] = [icn["AR.I.PATROL"]];
sId["S-A-MFPN--"] = [icn["AR.I.ANTISURFACE WARFARE"]];
sId["S-A-MFPM--"] = [icn["AR.I.MINE COUNTERMEASURES"]];
sId["S-A-MFU---"] = [icn["AR.I.UTILITY"]];
sId["S-A-MFUL--"] = [icn["AR.I.UTILITY"], icn["AIR.M2.LIGHT"]];
sId["S-A-MFUM--"] = [icn["AR.I.UTILITY"], icn["AIR.M2.MEDIUM"]];
sId["S-A-MFUH--"] = [icn["AR.I.UTILITY"], icn["AIR.M2.HEAVY"]];
sId["S-A-MFY---"] = [icn["AR.I.COMMUNICATIONS"]];
sId["S-A-MFH---"] = [icn["AR.I.PERSONNEL RECOVERY"]];
sId["S-A-MFD---"] = [icn["AR.I.AIRBORNE COMMAND POST"]];
sId["S-A-MFQ---"] = [icn["AR.I.UNMANNED AERIAL VEHICLE"]];
sId["S-A-MFQA--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.ATTACK"]
];
sId["S-A-MFQB--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.BOMBER"]
];
sId["S-A-MFQC--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.CARGO"]
];
sId["S-A-MFQD--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.AIRBORNE COMMAND POST"]
];
sId["S-A-MFQF--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.FIGHTER"]
];
sId["S-A-MFQH--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.COMBAT SEARCH AND RESCUE"]
];
sId["S-A-MFQJ--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]
];
sId["S-A-MFQK--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.TANKER"]
];
sId["S-A-MFQL--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.VSTOL"]
];
sId["S-A-MFQM--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-A-MFQI--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.MINE COUNTERMEASURES"]
];
sId["S-A-MFQN--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.ANTISURFACE WARFARE"]
];
sId["S-A-MFQP--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.PATROL"]
];
sId["S-A-MFQR--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.RECONNAISSANCE"]
];
sId["S-A-MFQRW-"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.AIRBORNE EARLY WARNING"]
];
sId["S-A-MFQRZ-"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.ELECTRONIC SURVEILLANCE MEASURES"]
];
sId["S-A-MFQRX-"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.PHOTOGRAPHIC"]
];
sId["S-A-MFQS--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.ANTISUBMARINE WARFARE"]
];
sId["S-A-MFQT--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.TRAINER"]
];
sId["S-A-MFQU--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.UTILITY"]
];
sId["S-A-MFQY--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.COMMUNICATIONS"]
];
sId["S-A-MFQO--"] = [
icn["AR.I.UNMANNED AERIAL VEHICLE"],
icn["AIR.M1.MEDEVAC"]
];
sId["S-A-MFS---"] = [icn["AR.I.ANTISUBMARINE WARFARE"]];
sId["S-A-MFM---"] = [icn["AR.I.SPECIAL OPERATIONS FORCES"]];
sId["S-A-MH----"] = [icn["AR.I.MILITARY ROTARY WING"]];
sId["S-A-MHA---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.ATTACK"]
];
sId["S-A-MHS---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.ANTISUBMARINE WARFARE"]
];
sId["S-A-MHU---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.UTILITY"]
];
sId["S-A-MHUL--"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.UTILITY"],
icn["AIR.M2.LIGHT"]
];
sId["S-A-MHUM--"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.UTILITY"],
icn["AIR.M2.MEDIUM"]
];
sId["S-A-MHUH--"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.UTILITY"],
icn["AIR.M2.HEAVY"]
];
sId["S-A-MHI---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.MINE COUNTERMEASURES"]
];
sId["S-A-MHH---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.COMBAT SEARCH AND RESCUE"]
];
sId["S-A-MHR---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.RECONNAISSANCE"]
];
sId["S-A-MHQ---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.UNMANNED AERIAL VEHICLE"]
];
sId["S-A-MHC---"] = [icn["AR.I.MILITARY ROTARY WING"], icn["AIR.M1.CARGO"]];
sId["S-A-MHCL--"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.CARGO"],
icn["AIR.M2.LIGHT"]
];
sId["S-A-MHCM--"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.CARGO"],
icn["AIR.M2.MEDIUM"]
];
sId["S-A-MHCH--"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.CARGO"],
icn["AIR.M2.HEAVY"]
];
sId["S-A-MHT---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.TRAINER"]
];
sId["S-A-MHO---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.MEDEVAC"]
];
sId["S-A-MHM---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-A-MHD---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.AIRBORNE COMMAND POST"]
];
sId["S-A-MHK---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.TANKER"]
];
sId["S-A-MHJ---"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]
];
sId["S-A-ML----"] = [icn["AR.I.FF.MILITARY BALLOON"]];
sId["S-A-MV----"] = [icn["AR.I.VIP"]];
sId["S-A-ME----"] = [icn["AR.I.ESCORT"]];
sId["S-A-W-----"] = [icn["AIR.MISSILE.ICON"]];
sId["S-A-WM----"] = [icn["AIR.MISSILE.ICON"]];
sId["S-A-WMS---"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.SURFACE"],
icn["AIR.MISSILE.M2.LAUNCHED"]
];
sId["S-A-WMSS--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.SURFACE"],
icn["AIR.MISSILE.M2.SURFACE"]
];
sId["S-A-WMSA--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.SURFACE"],
icn["AIR.MISSILE.M2.AIR"]
];
sId["S-A-WMSU--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.SURFACE"],
icn["AIR.MISSILE.M2.SUBSURFACE"]
];
sId["S-A-WMSB--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.IC.ANTIBALLISTIC MISSILE"]
];
sId["S-A-WMA---"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.AIR"],
icn["AIR.MISSILE.M2.LAUNCHED"]
];
sId["S-A-WMAS--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.AIR"],
icn["AIR.MISSILE.M2.SURFACE"]
];
sId["S-A-WMAA--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.AIR"],
icn["AIR.MISSILE.M2.AIR"]
];
sId["S-A-WMAP--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.AIR"],
icn["AIR.MISSILE.M2.SPACE"]
];
sId["S-A-WMU---"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.SUBSURFACE"],
icn["AIR.MISSILE.M2.SURFACE"]
];
sId["S-A-WML---"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.LAND"],
icn["AIR.MISSILE.M2.AIR"]
];
sId["S-A-WMCM--"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.CRUISE"],
icn["AIR.MISSILE.M2.MISSILE"]
];
sId["S-A-WMB---"] = [
icn["AIR.MISSILE.ICON"],
icn["AIR.MISSILE.M1.BALLISTIC"],
icn["AIR.MISSILE.M2.MISSILE"]
];
sId["S-A-WB----"] = [icn["AIR.MISSILE.IC.BOMB"]];
sId["S-A-WD----"] = [icn["AR.I.AIR DECOY"]];
sId["S-A-C-----"] = [icn["AR.I.CIVILIAN"]];
sId["S-A-CF----"] = [icn["AR.I.FF.CIVILIAN FIXED WING"]];
sId["S-A-CH----"] = [icn["AR.I.FF.CIVILIAN ROTARY WING"]];
sId["S-A-CL----"] = [icn["AR.I.FF.CIVILIAN BALLOON"]];
}
};

View File

@@ -0,0 +1,354 @@
import { ms } from "../../ms.js";
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/ground.js";
import tacticalpoints from "../../iconparts/tactical-points.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons, tacticalpoints],
icons: function emergencymanagementsymbols(sId, bbox, icn, _STD2525) {
//Adds support for 2525C Emergency Management Symbols
sId["E-I-A-----"] = [icn["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]];
sId["E-I-AC----"] = [icn["ST.IC.GROUP"], icn["AC.M1.RIOT"]];
sId["E-I-B-----"] = [icn["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]];
sId["E-I-BA----"] = [icn["ST.IC.BOMB"], icn["AC.M1.THREAT"]];
sId["E-I-BC----"] = [
icn["ST.IC.EXPLOSION"],
ms._scale(0.6, icn["ST.IC.BOMB"])
];
sId["E-I-BD----"] = [icn["ST.IC.GROUP"], icn["ST.M1.LOOT"]];
sId["E-I-BF----"] = [icn["AC.IC.SHOOTING"]];
sId["E-I-C-----"] = [icn["AC.IC.FIRE EVENT"]];
sId["E-I-CA----"] = [icn["AC.IC.HOT SPOT"]];
sId["E-I-CB----"] = [icn["AC.IC.NON-REsIdENTIAL FIRE"]];
sId["E-I-CC----"] = [icn["AC.IC.FIRE ORIGIN"]];
sId["E-I-CD----"] = [icn["AC.IC.REsIdENTIAL FIRE"]];
sId["E-I-CE----"] = [icn["AC.IC.SCHOOL FIRE"]];
sId["E-I-CF----"] = [icn["AC.IC.SMOKE"]];
sId["E-I-CG----"] = [icn["AC.IC.SPECIAL NEEDS FIRE"]];
sId["E-I-CH----"] = [icn["AC.IC.WILD FIRE"]];
sId["E-I-D-----"] = [icn["AC.IC.HAZARDOUS MATERIALS INCIDENT"]];
sId["E-I-DA----"] = [icn["AC.IC.CHEMICAL AGENT"]];
sId["E-I-DB----"] = [icn["AC.IC.CORROSIVE MATERIAL"]];
sId["E-I-DC----"] = [icn["AC.IC.HAZARDOUS WHEN WET"]];
sId["E-I-DD----"] = [icn["AC.IC.EXPLOSIVE MATERIAL"]];
sId["E-I-DE----"] = [icn["AC.IC.FLAMMABLE GAS"]];
sId["E-I-DF----"] = [icn["AC.IC.FLAMMABLE LIQUID"]];
sId["E-I-DG----"] = [icn["AC.IC.FLAMMABLE SOLID"]];
sId["E-I-DH----"] = [icn["AC.IC.NON-FLAMMABLE GAS"]];
sId["E-I-DI----"] = [icn["AC.IC.ORGANIC PEROXIDE"]];
sId["E-I-DJ----"] = [icn["AC.IC.OXIDIZER"]];
sId["E-I-DK----"] = [icn["AC.IC.RADIOACTIVE MATERIAL"]];
sId["E-I-DL----"] = [icn["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]];
sId["E-I-DM----"] = [icn["AC.IC.TOXIC GAS"]];
sId["E-I-DN----"] = [icn["AC.IC.TOXIC INFECTIOUS MATERIAL"]];
sId["E-I-DO----"] = [icn["AC.IC.UNEXPLODED ORDNANCE"]];
sId["E-I-E-----"] = [
icn["ST.M1.INCIDENT"],
icn["ST.IC.HIJACKING (AIRPLANE)"]
];
sId["E-I-EA----"] = [
icn["ST.M1.ACCIDENT"],
icn["ST.IC.HIJACKING (AIRPLANE)"]
];
sId["E-I-F-----"] = [icn["ST.M1.INCIDENT"], icn["ST.IC.HIJACKING (BOAT)"]];
sId["E-I-FA----"] = [icn["ST.M1.ACCIDENT"], icn["ST.IC.HIJACKING (BOAT)"]];
sId["E-I-G-----"] = [icn["ST.M1.INCIDENT"], icn["GR.EQ.TRAIN LOCOMOTIVE"]];
sId["E-I-GA----"] = [icn["ST.M1.ACCIDENT"], icn["GR.EQ.TRAIN LOCOMOTIVE"]];
sId["E-I-GB----"] = [
icn["GR.EQ.TRAIN LOCOMOTIVE"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["E-I-H-----"] = [
icn["ST.M1.INCIDENT"],
icn["ST.IC.KNOWN INSURGENT VEHICLE"]
];
sId["E-I-HA----"] = [
icn["ST.M1.ACCIDENT"],
icn["ST.IC.KNOWN INSURGENT VEHICLE"]
];
sId["E-N-A-----"] = []; // N/A
sId["E-N-AA----"] = [icn["AC.IC.AFTERSHOCK"]];
sId["E-N-AB----"] = [icn["AC.IC.AVALANCHE"]];
sId["E-N-AC----"] = [icn["AC.IC.EARTHQUAKE EPICENTER"]];
sId["E-N-AD----"] = [icn["AC.IC.LANDSLIDE"]];
sId["E-N-AE----"] = [icn["AC.IC.SUBSIDENCE"]];
sId["W-S-WSVE--"] = [icn["AC.IC.VOLCANIC ERUPTION"]];
sId["E-N-AG----"] = [icn["AC.IC.VOLCANIC THREAT"]];
sId["W-S-WSD-LI"] = [icn["ATMOSPHERIC.IC.DRIZZLE.INTERMITTENT LIGHT"]];
sId["E-N-B-----"] = []; // N/A
sId["E-N-BB----"] = [icn["AC.IC.DROUGHT"]];
sId["E-N-BC----"] = [icn["AC.IC.FLOOD"]];
sId["W-S-WSFGSO"] = [icn["ATMOSPHERIC.IC.FOG.SKY OBSCURED"]];
sId["W-S-WSGRL-"] = [
icn["ATMOSPHERIC.IC.HAIL.LIGHT NOT ASSOCIATED WITH THUNDER"]
];
sId["E-N-BF----"] = [icn["AC.IC.INVERSION"]];
sId["W-S-WSR-LI"] = [icn["ATMOSPHERIC.IC.RAIN.INTERMITTENT LIGHT"]];
sId["W-S-WSDSLM"] = [icn["ATMOSPHERIC.IC.DUST OR SAND.LIGHT TO MODERATE"]];
sId["W-S-WSS-LI"] = [icn["ATMOSPHERIC.IC.SNOW.INTERMITTENT LIGHT"]];
sId["W-S-WSTMH-"] = [
icn["ATMOSPHERIC.IC.STORMS.THUNDERSTORM LIGHT TO MODERATE - WITH HAIL"]
];
sId["W-S-WST-FC"] = [
icn["ATMOSPHERIC.IC.STORMS.FUNNEL CLOUD (TORNADO/WATERSPOUT)"]
];
sId["W-S-WSTSS-"] = [
icn["ATMOSPHERIC.IC.TROPICAL STORM SYSTEMS.TROPICAL STORM"]
];
sId["E-N-BM----"] = [icn["AC.IC.TSUNAMI"]];
sId["E-N-C-----"] = []; // N/A
sId["E-N-CA----"] = [icn["AC.IC.BIRD"]];
sId["E-N-CB----"] = [icn["AC.IC.INSECT"]];
sId["E-N-CC----"] = [icn["AC.IC.MICROBIAL"]];
sId["E-N-CD----"] = [icn["AC.IC.REPTILE"]];
sId["E-N-CE----"] = [icn["AC.IC.RODENT"]];
sId["E-O-A-----"] = sId["E-O-AA----"] = sId["E-O-AB----"] = sId[
"E-O-AC----"
] = sId["E-O-AD----"] = [icn["GR.IC.EMERGENCY MEDICAL OPERATION"]];
sId["E-O-AE----"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.M1.MEDEVAC"]
];
sId["E-O-AF----"] = [
ms._translate(0, 10, ms._scale(0.8, icn["GR.I.FF.CIVILIAN ROTARY WING"])),
icn["GR.M1.MEDEVAC"]
];
sId["E-O-AG----"] = [icn["AC.IC.HEALTH DEPARTMENT FACILITY"]];
sId["E-O-AJ----"] = [icn["AC.IC.MEDICAL FACILITIES OUTPATIENT"]];
sId["E-O-AK----"] = [icn["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]];
sId["E-O-AL----"] = [icn["AC.IC.PHARMACY"]];
sId["E-O-AM----"] = [icn["AC.IC.TRIAGE"]];
sId["E-O-B-----"] = sId["E-O-BA----"] = sId["E-O-BB----"] = sId[
"E-O-BC----"
] = [icn["GR.IC.FF.EMERGENCY OPERATION"]];
sId["E-O-BD----"] = [
ms._scale(0.7, icn["GR.IC.FF.EMERGENCY OPERATION"]),
icn["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]
];
sId["E-O-BE----"] = [
ms._scale(0.7, icn["GR.IC.FF.EMERGENCY OPERATION"]),
icn["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]
];
sId["E-O-BF----"] = [
ms._scale(0.7, icn["GR.IC.FF.EMERGENCY OPERATION"]),
icn["AC.M1.EMERGENCY OPERATIONS CENTER"]
];
sId["E-O-BG----"] = [icn["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]];
sId["E-O-BH----"] = [
ms._scale(0.7, icn["GR.IC.FF.EMERGENCY OPERATION"]),
icn["AC.M1.EMERGENCY SHELTER"]
];
sId["E-O-BI----"] = [
ms._scale(0.7, icn["GR.IC.FF.EMERGENCY OPERATION"]),
icn["AC.M1.EMERGENCY STAGING AREA"]
];
sId["E-O-BJ----"] = [icn["GR.IC.FF.EMERGENCY OPERATION"]];
sId["E-O-BK----"] = sId["S-G-USSW--"];
sId["E-O-BL----"] = [
icn["ST.IC.FOOD DISTRIBUTION"],
icn["AC.M1.EMERGENCY"]
];
sId["E-O-C-----"] = sId["E-O-CA----"] = sId["E-O-CB----"] = sId[
"E-O-CE----"
] = [icn["GR.IC.FIRE PROTECTION"]];
sId["E-O-CC----"] = [icn["AC.IC.FIRE HYDRANT"]];
sId["E-O-CD----"] = [icn["AC.IC.OTHER WATER SUPPLY LOCATION"]];
sId["E-O-D-----"] = sId["E-O-DA----"] = sId["E-O-DB----"] = sId[
"E-O-DC----"
] = [icn["GR.IC.FF.LAW ENFORCEMENT"]];
sId["E-O-DD----"] = sId["E-O-DDA---"] = sId["E-O-DDB---"] = sId[
"E-O-DDC---"
] = [
icn[
"GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"
]
];
sId["E-O-DE----"] = sId["E-O-DEA---"] = sId["E-O-DEB---"] = sId[
"E-O-DEC---"
] = [icn["GR.IC.FF.BORDER PATROL"]];
sId["E-O-DF----"] = sId["E-O-DFA---"] = sId["E-O-DFB---"] = sId[
"E-O-DFC---"
] = [icn["GR.IC.FF.CUSTOMS SERVICE"]];
sId["E-O-DG----"] = sId["E-O-DGA---"] = sId["E-O-DGB---"] = sId[
"E-O-DGC---"
] = [icn["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]];
sId["E-O-DH----"] = sId["E-O-DHA---"] = sId["E-O-DHB---"] = sId[
"E-O-DHC---"
] = [icn["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]];
sId["E-O-DI----"] = sId["E-O-DIA---"] = sId["E-O-DIB---"] = sId[
"E-O-DIC---"
] = [icn["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]];
sId["E-O-DJ----"] = sId["E-O-DJB---"] = sId["E-O-DJC---"] = [
icn["GR.IC.LAW ENFORCEMENT"]
];
sId["E-O-DK----"] = [icn["GR.IC.FF.PRISON"]];
sId["E-O-DL----"] = sId["E-O-DLA---"] = sId["E-O-DLB---"] = sId[
"E-O-DLC---"
] = [icn["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]];
sId["E-O-DM----"] = sId["E-O-DMA---"] = sId["E-O-DMB---"] = sId[
"E-O-DMC---"
] = [icn["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]];
sId["E-O-DN----"] = sId["E-O-DNA---"] = sId["E-O-DNC---"] = [
icn["GR.IC.LAW ENFORCEMENT VESSEL"]
];
sId["E-O-DO----"] = sId["E-O-DOA---"] = sId["E-O-DOB---"] = sId[
"E-O-DOC---"
] = [icn["GR.IC.FF.US MARSHALS SERVICE"]];
sId["E-O-EA----"] = [
ms._scale(0.6, icn["GR.EQ.SENSOR"]),
icn["GR.M1.BIOLOGICAL"]
];
sId["E-O-EB----"] = [
ms._scale(0.6, icn["GR.EQ.SENSOR"]),
icn["GR.M1.CHEMICAL"]
];
sId["E-O-EC----"] = [
ms._scale(0.6, icn["GR.EQ.SENSOR"]),
icn["GR.M1.INTRUSION"]
];
sId["E-O-ED----"] = [
ms._scale(0.6, icn["GR.EQ.SENSOR"]),
icn["GR.M1.NUCLEAR"]
];
sId["E-O-EE----"] = [
ms._scale(0.6, icn["GR.EQ.SENSOR"]),
icn["GR.M1.RADIOLOGICAL"]
];
sId["E-F-A-----"] = [icn["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]];
sId["E-F-AA----"] = [icn["GR.IN.IC.AGRICULTURAL LABORATORY"]];
sId["E-F-AB----"] = [icn["GR.IN.IC.ANIMAL FEEDLOT"]];
sId["E-F-AC----"] = [
icn["ST.IC.FOOD DISTRIBUTION"],
icn["AC.M1.COMMERCIAL"]
];
sId["E-F-AD----"] = [icn["GR.IN.IC.FARM/RANCH"]];
sId["E-F-AE----"] = [
icn["ST.IC.FOOD DISTRIBUTION"],
icn["AC.M1.PRODUCTION"]
];
sId["E-F-AF----"] = [icn["ST.IC.FOOD DISTRIBUTION"], icn["AC.M1.RETAIL"]];
sId["E-F-AG----"] = [icn["GR.IN.IC.GRAIN STORAGE"]];
sId["E-F-B-----"] = [
icn["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]
];
sId["E-F-BA----"] = [icn["GR.IN.IC.ATM"]];
sId["E-F-BB----"] = [icn["GR.IN.IC.BANK"]];
sId["E-F-BC----"] = [icn["GR.IN.IC.BULLION STORAGE"]];
sId["E-F-BD----"] = [icn["GR.IN.IC.FEDERAL RESERVE BANK"]];
sId["E-F-BE----"] = [icn["GR.IN.IC.FINANCIAL EXCHANGE"]];
sId["E-F-BF----"] = [icn["GR.IN.IC.FINANCIAL SERVICES, OTHER"]];
sId["E-F-C-----"] = [icn["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]];
sId["E-F-CA----"] = [icn["GR.IN.IC.CHEMICAL PLANT"]];
sId["E-F-CB----"] = [icn["GR.IN.IC.FIREARMS MANUFACTURER"]];
sId["E-F-CC----"] = [icn["GR.IN.IC.FIREARMS RETAILER"]];
sId["E-F-CD----"] = [icn["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]];
sId["E-F-CE----"] = [icn["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]];
sId["E-F-CF----"] = [icn["GR.IN.IC.INDUSTRIAL SITE"]];
sId["E-F-CG----"] = [icn["GR.IN.IC.LANDFILL"]];
sId["E-F-CH----"] = [icn["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]];
sId["E-F-CI----"] = [icn["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]];
sId["E-F-CJ----"] = [icn["GR.IN.IC.TOXIC RELEASE INVENTORY"]];
sId["E-F-D-----"] = [icn["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]];
sId["E-F-DA----"] = [icn["GR.IN.IC.COLLEGE/UNIVERSITY"]];
sId["E-F-DB----"] = [icn["GR.IN.IC.SCHOOL"]];
sId["E-F-EA----"] = [
ms._translate(0, 15, ms._scale(0.75, icn["GR.IN.IC.ELECTRIC POWER"])),
icn["AC.M1.GENERATION STATION"]
];
sId["E-F-EB----"] = [icn["GR.IN.IC.NATURAL GAS FACILITY"]];
sId["E-F-EE----"] = [icn["GR.IN.IC.PROPANE FACILITY"]];
sId["E-F-F-----"] = [icn["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]];
sId["E-F-G-----"] = [icn["GR.IN.IC.MILITARY INFRASTRUCTURE"]];
sId["E-F-GA----"] = [icn["GR.IN.IC.BASE"], icn["AC.M1.MILITARY ARMORY"]];
sId["E-F-H-----"] = [icn["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]];
sId["E-F-HA----"] = [icn["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]];
sId["E-F-HB----"] = [icn["GR.IN.IC.POST OFFICE"]];
sId["E-F-I-----"] = [icn["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]];
sId["E-F-IA----"] = [icn["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]];
sId["E-F-IB----"] = [icn["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]];
sId["E-F-IC----"] = [icn["GR.IN.IC.RECREATIONAL AREA"]];
sId["E-F-ID----"] = [icn["GR.IN.IC.RELIGIOUS INSTITUTION"]];
sId["E-F-J-----"] = [icn["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]];
sId["E-F-JA----"] = [icn["GR.IN.IC.ADULT DAY CARE"]];
sId["E-F-JB----"] = [icn["GR.IN.IC.CHILD DAY CARE"]];
sId["E-F-JC----"] = [icn["GR.IN.IC.ELDER CARE"]];
sId["E-F-K-----"] = [icn["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]];
sId["E-F-KB----"] = [icn["GR.IN.IC.TELECOMMUNICATIONS TOWER"]];
sId["E-F-LA----"] = [icn["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]];
sId["G-M-BCB---"] = [icn["GR.IN.IC.BRIDGE"]];
bbox["G-M-BCB---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sId["E-F-LD----"] = [
icn["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]
];
sId["E-F-LE----"] = [icn["GR.IC.FERRY"]];
sId["E-F-LF----"] = [icn["GR.IN.IC.HELICOPTER LANDING SITE"]];
sId["W-S-ML----"] = [icn["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE LOCK"]];
sId["E-F-LH----"] = [icn["GR.IC.MAINTENANCE"]];
sId["E-F-LJ----"] = [icn["GR.IC.RAILHEAD"]];
sId["E-F-LK----"] = [icn["GR.IN.IC.REST STOP"]];
sId["W-S-HPBA--"] = [
icn["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE SHIP ANCHORAGE"]
];
sId["E-F-LM----"] = [icn["GR.IN.IC.TOLL FACILITY"]];
/*sId["G-S-PO----"] = [
icn["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE.TRAFFIC CONTROL POINT"]
];*/
sId["G-S-PO----"] = icn["TP.TRAFFIC CONTROL POST"]; //TACGRP.CSS.PNT.TCP
bbox["G-S-PO----"] = { x1: 60, x2: 140, y1: -60 };
sId["E-F-LO----"] = [icn["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]];
sId["E-F-LP----"] = [icn["GR.IN.IC.TUNNEL"]];
sId["E-F-MA----"] = [icn["GR.IN.IC.CONTROL VALVE"]];
sId["E-F-MB----"] = [icn["GR.IN.IC.DAM"]];
sId["E-F-MC----"] = [icn["GR.IN.IC.DISCHARGE OUTFALL"]];
sId["E-F-MD----"] = [icn["GR.IN.IC.GROUND WATER WELL"]];
sId["E-F-ME----"] = [icn["GR.IN.IC.PUMPING STATION"]];
sId["E-F-MF----"] = [icn["GR.IN.IC.RESERVOIR"]];
sId["E-F-MG----"] = [icn["GR.IN.IC.STORAGE TOWER"]];
sId["E-F-MH----"] = [icn["GR.IN.IC.SURFACE WATER INTAKE"]];
sId["E-F-MI----"] = [icn["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]];
// In other apendixes as well...
sId["O-O-D-----"] = [icn["ST.IC.DEMONSTRATION"]];
sId["O-I-R-----"] = [icn["ST.IC.GROUP"]];
sId["O-V-B-----"] = [icn["ST.IC.BOMB"]];
sId["O-V-P-----"] = [icn["ST.IC.POISONING"]];
sId["O-O-HA----"] = [
icn["ST.IC.HIJACKING (AIRPLANE)"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["O-O-HV----"] = [
icn["ST.IC.HIJACKING (BOAT)"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["O-O-HT----"] = [
icn["ST.IC.KNOWN INSURGENT VEHICLE"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["S-G-IXH---"] = [icn["GR.IC.FF.MEDICAL TREATMENT FACILITY"]];
sId["S-S-NM----"] = [icn["GR.IC.HOSPITAL SHIP"]];
sId["E-O-BK----"] = [icn["GR.IC.FF.SUPPLY"], icn["GR.IC.WATER"]];
sId["S-G-UULC--"] = [icn["GR.IC.LAW ENFORCEMENT"]];
sId["S-S-XL----"] = [icn["GR.IC.LAW ENFORCEMENT VESSEL"]];
sId["S-G-ES----"] = [icn["GR.EQ.SENSOR"]];
sId["S-G-IUE---"] = [icn["GR.IN.IC.ELECTRIC POWER"]];
sId["S-G-IUEN--"] = [
icn["GR.IN.IC.ELECTRIC POWER"],
icn["GR.IN.IC.ELECTRIC POWER NUCLEAR"]
];
sId["S-G-IRP---"] = [icn["GR.IC.FF.CLASS III"]];
sId["S-G-IB----"] = [icn["GR.IN.IC.BASE"]];
sId["S-G-IUT---"] = [icn["GR.IN.IC.TELECOMMUNICATIONS"]];
sId["S-G-IT----"] = [icn["GR.IC.TRANSPORTATION"]];
sId["S-G-IBA---"] = [
icn["GR.IC.TRANSPORTATION"],
icn["GR.IC.AIRPORT OF DEBARKATION"]
];
sId["S-G-IBN---"] = [icn["GR.IC.NAVAL"]];
sId["S-G-IUP---"] = [icn["GR.IC.WATER"]];
}
};

763
node_modules/milsymbol/src/lettersidc/sidc/equipment.js generated vendored Normal file
View File

@@ -0,0 +1,763 @@
import { ms } from "../../ms.js";
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/ground.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function equipment(sId, bbox, icn, _STD2525) {
//Adds support for equipment
sId["S-G-E-----"] = [];
sId["S-G-EW----"] = []; // N/A
sId["S-G-EWM---"] = [icn["GR.EQ.MISSILE LAUNCHER"]];
sId["S-G-EWMA--"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]
];
sId["S-G-EWMAS-"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWMASR"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.SHORT RANGE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]
];
sId["S-G-EWMASE"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.SHORT RANGE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]
];
sId["S-G-EWMAI-"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWMAIR"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.INTERMEDIATE RANGE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]
];
sId["S-G-EWMAIE"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.INTERMEDIATE RANGE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]
];
sId["S-G-EWMAL-"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.LONG RANGE"]
];
sId["S-G-EWMALR"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.LONG RANGE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]
];
sId["S-G-EWMALE"] = [
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],
icn["GR.EQ.LONG RANGE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]
];
sId["S-G-EWMAT-"] = [
ms._translate(
0,
-15,
ms._scale(0.7, icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])
),
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"]
];
sId["S-G-EWMATR"] = [
ms._translate(
0,
-15,
ms._scale(0.7, icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])
),
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]
];
sId["S-G-EWMATE"] = [
ms._translate(
0,
-15,
ms._scale(0.7, icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])
),
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"],
icn["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]
];
sId["S-G-EWMS--"] = [icn["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]];
sId["S-G-EWMSS-"] = [
icn["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWMSI-"] = [
icn["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWMSL-"] = [
icn["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],
icn["GR.EQ.LONG RANGE"]
];
sId["S-G-EWMT--"] = [icn["GR.EQ.ANTITANK MISSILE LAUNCHER"]];
sId["S-G-EWMTL-"] = [
icn["GR.EQ.ANTITANK MISSILE LAUNCHER"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWMTM-"] = [
icn["GR.EQ.ANTITANK MISSILE LAUNCHER"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWMTH-"] = [
icn["GR.EQ.ANTITANK MISSILE LAUNCHER"],
icn["GR.EQ.LONG RANGE"]
];
sId["S-G-EWS---"] = [icn["GR.EQ.SINGLE ROCKET LAUNCHER"]];
sId["S-G-EWSL--"] = [
icn["GR.EQ.SINGLE ROCKET LAUNCHER"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWSM--"] = [
icn["GR.EQ.SINGLE ROCKET LAUNCHER"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWSH--"] = [
icn["GR.EQ.SINGLE ROCKET LAUNCHER"],
icn["GR.EQ.LONG RANGE"]
];
sId["S-G-EWX---"] = [icn["GR.EQ.MULTIPLE ROCKET LAUNCHER"]];
sId["S-G-EWXL--"] = [
icn["GR.EQ.MULTIPLE ROCKET LAUNCHER"],
ms._translate(0, 10, icn["GR.EQ.SHORT RANGE"])
];
sId["S-G-EWXM--"] = [
icn["GR.EQ.MULTIPLE ROCKET LAUNCHER"],
ms._translate(0, 10, icn["GR.EQ.INTERMEDIATE RANGE"])
];
sId["S-G-EWXH--"] = [
icn["GR.EQ.MULTIPLE ROCKET LAUNCHER"],
ms._translate(0, 10, icn["GR.EQ.LONG RANGE"])
];
sId["S-G-EWT---"] = [icn["GR.EQ.ANTITANK ROCKET LAUNCHER"]];
sId["S-G-EWTL--"] = [
icn["GR.EQ.ANTITANK ROCKET LAUNCHER"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWTM--"] = [
icn["GR.EQ.ANTITANK ROCKET LAUNCHER"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWTH--"] = [
icn["GR.EQ.ANTITANK ROCKET LAUNCHER"],
icn["GR.EQ.LONG RANGE"]
];
sId["S-G-EWR---"] = [icn["GR.EQ.RIFLE"]];
sId["S-G-EWRR--"] = [icn["GR.EQ.RIFLE"], icn["GR.EQ.SHORT RANGE"]];
sId["S-G-EWRL--"] = [icn["GR.EQ.RIFLE"], icn["GR.EQ.INTERMEDIATE RANGE"]];
sId["S-G-EWRH--"] = [icn["GR.EQ.RIFLE"], icn["GR.EQ.LONG RANGE"]];
sId["S-G-EWZ---"] = [icn["GR.EQ.GRENADE LAUNCHER"]];
sId["S-G-EWZL--"] = [
icn["GR.EQ.GRENADE LAUNCHER"],
ms._translate(0, 20, icn["GR.EQ.SHORT RANGE"])
];
sId["S-G-EWZM--"] = [
icn["GR.EQ.GRENADE LAUNCHER"],
ms._translate(0, 20, icn["GR.EQ.INTERMEDIATE RANGE"])
];
sId["S-G-EWZH--"] = [
icn["GR.EQ.GRENADE LAUNCHER"],
ms._translate(0, 20, icn["GR.EQ.LONG RANGE"])
];
sId["S-G-EWO---"] = [icn["GR.EQ.MORTAR"]];
sId["S-G-EWOL--"] = [icn["GR.EQ.MORTAR"], icn["GR.EQ.SHORT RANGE"]];
sId["S-G-EWOM--"] = [icn["GR.EQ.MORTAR"], icn["GR.EQ.INTERMEDIATE RANGE"]];
sId["S-G-EWOH--"] = [icn["GR.EQ.MORTAR"], icn["GR.EQ.LONG RANGE"]];
sId["S-G-EWH---"] = [icn["GR.EQ.HOWITZER"]];
sId["S-G-EWHL--"] = [icn["GR.EQ.HOWITZER"], icn["GR.EQ.SHORT RANGE"]];
sId["S-G-EWHLS-"] = [
ms._translate(
0,
-15,
ms._scale(0.8, [icn["GR.EQ.HOWITZER"], icn["GR.EQ.SHORT RANGE"]])
),
icn["GR.EQ.HOWITZER TRACKED"]
];
sId["S-G-EWHM--"] = [
icn["GR.EQ.HOWITZER"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWHMS-"] = [
ms._translate(
0,
-15,
ms._scale(0.8, [icn["GR.EQ.HOWITZER"], icn["GR.EQ.INTERMEDIATE RANGE"]])
),
icn["GR.EQ.HOWITZER TRACKED"]
];
sId["S-G-EWHH--"] = [icn["GR.EQ.HOWITZER"], icn["GR.EQ.LONG RANGE"]];
sId["S-G-EWHHS-"] = [
ms._translate(
0,
-15,
ms._scale(0.8, [icn["GR.EQ.HOWITZER"], icn["GR.EQ.LONG RANGE"]])
),
icn["GR.EQ.HOWITZER TRACKED"]
];
sId["S-G-EWG---"] = [icn["GR.EQ.ANTITANK GUN"]];
sId["S-G-EWGL--"] = [icn["GR.EQ.ANTITANK GUN"], icn["GR.EQ.SHORT RANGE"]];
sId["S-G-EWGM--"] = [
icn["GR.EQ.ANTITANK GUN"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWGH--"] = [icn["GR.EQ.ANTITANK GUN"], icn["GR.EQ.LONG RANGE"]];
sId["S-G-EWGR--"] = [icn["GR.EQ.RECOILLESS GUN"]];
sId["S-G-EWD---"] = [icn["GR.EQ.DIRECT FIRE GUN"]];
sId["S-G-EWDL--"] = [
icn["GR.EQ.DIRECT FIRE GUN"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWDLS-"] = [
ms._translate(
0,
-15,
ms._scale(0.8, [icn["GR.EQ.DIRECT FIRE GUN"], icn["GR.EQ.SHORT RANGE"]])
),
icn["GR.EQ.HOWITZER TRACKED"]
];
sId["S-G-EWDM--"] = [
icn["GR.EQ.DIRECT FIRE GUN"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWDMS-"] = [
ms._translate(
0,
-15,
ms._scale(0.8, [
icn["GR.EQ.DIRECT FIRE GUN"],
icn["GR.EQ.INTERMEDIATE RANGE"]
])
),
icn["GR.EQ.HOWITZER TRACKED"]
];
sId["S-G-EWDH--"] = [icn["GR.EQ.DIRECT FIRE GUN"], icn["GR.EQ.LONG RANGE"]];
sId["S-G-EWDHS-"] = [
ms._translate(
0,
-15,
ms._scale(0.8, [icn["GR.EQ.DIRECT FIRE GUN"], icn["GR.EQ.LONG RANGE"]])
),
icn["GR.EQ.HOWITZER TRACKED"]
];
sId["S-G-EWA---"] = [icn["GR.EQ.AIR DEFENCE GUN"]];
sId["S-G-EWAL--"] = [
icn["GR.EQ.AIR DEFENCE GUN"],
icn["GR.EQ.SHORT RANGE"]
];
sId["S-G-EWAM--"] = [
icn["GR.EQ.AIR DEFENCE GUN"],
icn["GR.EQ.INTERMEDIATE RANGE"]
];
sId["S-G-EWAH--"] = [icn["GR.EQ.AIR DEFENCE GUN"], icn["GR.EQ.LONG RANGE"]];
sId["S-G-EV----"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
]
];
sId["S-G-EVA---"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.ARMOURED VEHICLE"]
];
sId["S-G-EVAT--"] = [icn["GR.EQ.TANK"]];
sId["S-G-EVATL-"] = [icn["GR.EQ.TANK"], icn["GR.EQ.LIGHT TANK"]];
sId["S-G-EVATLR"] = sId["S-G-EVATW-"] = [
icn["GR.EQ.TANK"],
icn["GR.EQ.LIGHT TANK"],
icn["GR.EQ.TANK RECOVERY VEHICLE"]
];
sId["S-G-EVATM-"] = [icn["GR.EQ.TANK"], icn["GR.EQ.MEDIUM TANK"]];
sId["S-G-EVATMR"] = sId["S-G-EVATX-"] = [
icn["GR.EQ.TANK"],
icn["GR.EQ.MEDIUM TANK"],
icn["GR.EQ.TANK RECOVERY VEHICLE"]
];
sId["S-G-EVATH-"] = [icn["GR.EQ.TANK"], icn["GR.EQ.HEAVY TANK"]];
sId["S-G-EVATHR"] = sId["S-G-EVATY-"] = [
icn["GR.EQ.TANK"],
icn["GR.EQ.HEAVY TANK"],
icn["GR.EQ.TANK RECOVERY VEHICLE"]
];
sId["S-G-EVAA--"] = [icn["GR.EQ.ARMOURED PERSONNEL CARRIER"]];
sId["S-G-EVAAR-"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER"],
icn["GR.EQ.TANK RECOVERY VEHICLE"]
];
sId["S-G-EVAI--"] = [icn["GR.EQ.ARMOURED FIGHTING VEHICLE"]];
sId["S-G-EVAC--"] = [
icn["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]
];
sId["S-G-EVAS--"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER COMBAT SERVICE SUPPORT VEHICLE"]
];
sId["S-G-EVAL--"] = [
icn["GR.EQ.ARMOURED FIGHTING VEHICLE"],
icn["GR.EQ.CROSS-COUNTRY"]
];
sId["S-G-EVU---"] = [icn["GR.EQ.UTILITY VEHICLE"]];
sId["S-G-EVUB--"] = [icn["GR.EQ.BUS"]];
sId["S-G-EVUS--"] = [icn["GR.EQ.SEMI-TRAILER TRUCK"]];
sId["S-G-EVUSL-"] = [
icn["GR.EQ.SEMI-TRAILER TRUCK"],
icn["GR.EQ.UTILITY VEHICLE LIGHT"]
];
sId["S-G-EVUSM-"] = [
icn["GR.EQ.SEMI-TRAILER TRUCK"],
icn["GR.EQ.UTILITY VEHICLE MEDIUM"]
];
sId["S-G-EVUSH-"] = [
icn["GR.EQ.SEMI-TRAILER TRUCK"],
icn["GR.EQ.UTILITY VEHICLE HEAVY"]
];
sId["S-G-EVUL--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.LIMITED CROSS-COUNTRY"]
];
sId["S-G-EVUX--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.CROSS-COUNTRY"]
];
sId["S-G-EVUR--"] = [icn["GR.EQ.WATER VEHICLE"]];
sId["S-G-EVUT--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]
];
sId["S-G-EVUTL-"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],
icn["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]
];
sId["S-G-EVUTH-"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],
icn["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]
];
sId["S-G-EVUA--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.MEDICAL EVACUATION"]
];
sId["S-G-EVUAA-"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER"],
icn["GR.EQ.MEDICAL EVACUATION"]
];
sId["S-G-EVE---"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
ms._scale(0.7, icn["GR.IC.ENGINEER"])
];
sId["S-G-EVEB--"] = [icn["GR.EQ.BRIDGE"]];
sId["S-G-EVEE--"] = [icn["GR.EQ.EARTHMOVER"]];
//.X.3.2.2.3.2 .1 WRONG SIDC
//sId['S-G-EVEE--'] = [];
sId["S-G-EVEC--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.LIMITED CROSS-COUNTRY"],
ms._scale(0.6, icn["GR.IC.ENGINEER"])
];
sId["S-G-EVEM--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.MINE LAYING VEHICLE"]
];
sId["S-G-EVEMA-"] = [
icn["GR.EQ.MINE CLEARING EQUIPMENT"],
icn["GR.EQ.TANK"]
];
sId["S-G-EVEMV-"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER"],
icn["GR.EQ.ARMORED CARRIER WITH VOLCANO"]
];
sId["S-G-EVEMT-"] = [
icn["GR.EQ.MINE CLEARING EQUIPMENT"],
ms._translate(0, -10, icn["GR.EQ.LIMITED CROSS-COUNTRY"])
];
sId["S-G-EVEML-"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.LIMITED CROSS-COUNTRY"],
icn["GR.EQ.ARMORED CARRIER WITH VOLCANO"]
];
sId["S-G-EVEA--"] = [icn["GR.EQ.MINE CLEARING EQUIPMENT"]];
sId["S-G-EVEAA-"] = [
icn["GR.EQ.MINE CLEARING EQUIPMENT"],
icn["GR.EQ.TANK"]
];
sId["S-G-EVEAT-"] = [
icn["GR.EQ.MINE CLEARING EQUIPMENT"],
ms._translate(0, -10, icn["GR.EQ.LIMITED CROSS-COUNTRY"])
];
sId["S-G-EVEMSM"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER"],
icn["GR.EQ.MINE SCATTERABLE"]
];
sId["S-G-EVED--"] = [icn["GR.EQ.DOZER"]];
sId["S-G-EVEDA-"] = [icn["GR.EQ.DOZER ARMORED"]];
sId["S-G-EVES--"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER"],
ms._scale(0.6, icn["GR.IC.ENGINEER"])
];
sId["S-G-EVER--"] = [
icn["GR.EQ.ARMOURED PERSONNEL CARRIER"],
ms._scale(0.6, icn["GR.IC.ENGINEER"]),
icn["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]
];
sId["S-G-EVEH--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.LIMITED CROSS-COUNTRY"],
icn["GR.EQ.UTILITY VEHICLE BACKHOE"]
];
sId["S-G-EVEF--"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.CROSS-COUNTRY"],
icn["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]
];
sId["S-G-EVD---"] = [
icn["GR.EQ.UTILITY VEHICLE"],
icn["GR.EQ.CROSS-COUNTRY"],
ms._scale(0.7, icn["GR.IC.DRILLING"])
];
sId["S-G-EVT---"] = [icn["GR.EQ.TRAIN LOCOMOTIVE"]];
sId["S-G-EVC---"] = [icn["GR.I.CIVILIAN"]];
sId["S-G-EVCA--"] = [icn["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]];
sId["S-G-EVCAL-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"]
];
sId["S-G-EVCAM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]
];
sId["S-G-EVCAH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"]
];
sId["S-G-EVCO--"] = [icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]];
sId["S-G-EVCOL-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"]
];
sId["S-G-EVCOM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]
];
sId["S-G-EVCOH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"]
];
sId["S-G-EVCM--"] = [
icn["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]
];
sId["S-G-EVCML-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"]
];
sId["S-G-EVCMM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]
];
sId["S-G-EVCMH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"]
];
sId["S-G-EVCU--"] = [icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]];
sId["S-G-EVCUL-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"]
];
sId["S-G-EVCUM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]
];
sId["S-G-EVCUH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"]
];
sId["S-G-EVCJ--"] = [icn["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]];
sId["S-G-EVCJL-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"]
];
sId["S-G-EVCJM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]
];
sId["S-G-EVCJH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"]
];
sId["S-G-EVCT--"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCTL-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCTM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCTH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCF--"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCFL-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.LIGHT"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCFM-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVCFH-"] = [
icn["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],
icn["GR.EQ.CIVILIAN VEHICLE.HEAVY"],
icn["GR.EQ.CIVILIAN VEHICLE.TRAILER"]
];
sId["S-G-EVM---"] = [icn["GR.EQ.PACK ANIMAL"]];
sId["S-G-EVS---"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.MISSILE SUPPORT"]
];
sId["S-G-EVST--"] = _STD2525 // For some strange reason app6 uses this code for other things...
? [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.MISSILE TRANSLOADER"]
]
: [icn["GR.EQ.TRAIN LOCOMOTIVE"]];
sId["S-G-EVSR--"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.MISSILE TRANSPORTER"]
];
sId["S-G-EVSC--"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.MISSILE CRANE/LOADING DEVICE"]
];
sId["S-G-EVSP--"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]
];
sId["S-G-EVSW--"] = [
icn[
"GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"
],
icn["GR.EQ.MISSILE WARHEAD TRANSPORTER"]
];
sId["S-G-ES----"] = [icn["GR.EQ.SENSOR"]];
sId["S-G-ESR---"] = [icn["GR.EQ.RADAR"]];
sId["S-G-ESE---"] = [icn["GR.EQ.SENSOR EMPLACED"]];
sId["S-G-EXI---"] = [icn["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]];
sId["S-G-EX----"] = []; // N/A
sId["S-G-EXL---"] = [icn["GR.EQ.LASER"]];
sId["S-G-EXN---"] = [icn["GR.EQ.CBRN EQUIPMENT"]];
sId["S-G-EXF---"] = [icn["GR.EQ.FLAME THROWER"]];
sId["S-G-EXM---"] = [icn["GR.EQ.LAND MINES"]];
sId["S-G-EXMC--"] = [icn["GR.EQ.ANTIPERSONNEL LAND MINE"]];
sId["S-G-EXML--"] = [icn["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]];
//This sets up the bounding boxes for equipment to have the bottom at the right place. (this will be used for mobility when unframed)
var equipmentBottom = {
"E-----": 0,
"EWM---": 140,
"EWMA--": 140,
"EWMAS-": 140,
EWMASR: 140,
EWMASE: 140,
"EWMAI-": 140,
EWMAIR: 140,
EWMAIE: 140,
"EWMAL-": 140,
EWMALR: 140,
EWMALE: 140,
"EWMAT-": 153,
EWMATR: 153,
EWMATE: 153,
"EWMS--": 140,
"EWMSS-": 140,
"EWMSI-": 140,
"EWMSL-": 140,
"EWMT--": 140,
"EWMTL-": 140,
"EWMTM-": 140,
"EWMTH-": 140,
"EWS---": 140,
"EWSL--": 140,
"EWSM--": 140,
"EWSH--": 140,
"EWX---": 140,
"EWXL--": 140,
"EWXM--": 140,
"EWXH--": 140,
"EWT---": 140,
"EWTL--": 140,
"EWTM--": 140,
"EWTH--": 140,
"EWR---": 140,
"EWRL--": 140,
"EWRM--": 140,
"EWRH--": 140,
"EWZ---": 140,
"EWZL--": 140,
"EWZM--": 140,
"EWZH--": 140,
"EWO---": 140,
"EWOL--": 140,
"EWOM--": 140,
"EWOH--": 140,
"EWH---": 140,
"EWHL--": 140,
"EWHLS-": 130,
"EWHM--": 140,
"EWHMS-": 130,
"EWHH--": 140,
"EWHHS-": 130,
"EWG---": 140,
"EWGL--": 140,
"EWGM--": 140,
"EWGH--": 140,
"EWGR--": 140,
"EWD---": 140,
"EWDL--": 140,
"EWDLS-": 130,
"EWDM--": 140,
"EWDMS-": 130,
"EWDH--": 140,
"EWDHS-": 130,
"EWA---": 140,
"EWAL--": 140,
"EWAM--": 140,
"EWAH--": 140,
"EV----": 129,
"EVA---": 129,
"EVAT--": 130,
"EVATL-": 130,
EVATLR: 130,
"EVATM-": 130,
EVATMR: 130,
"EVATH-": 130,
EVATHR: 130,
"EVAA--": 130,
"EVAAR-": 130,
"EVAI--": 130,
"EVAC--": 130,
"EVAS--": 130,
"EVAL--": 140,
"EVU---": 130,
"EVAB--": 130,
"EVUS--": 140,
"EVUSL-": 140,
"EVUSM-": 140,
"EVUSH-": 140,
"EVUL--": 140,
"EVUX--": 140,
"EVUR--": 130,
"EVUTL-": 130,
"EVUTH-": 130,
"EVUA--": 130,
"EVUAA-": 130,
"EVE---": 129,
"EVEB--": 130,
"EVEE--": 130,
"EVEC--": 140,
"EVEM--": 130,
"EVEMA-": 130,
"EVEMV-": 130,
"EVEMT-": 130,
"EVEML-": 140,
"EVEA--": 120,
"EVEAA-": 130,
"EVEAT-": 130,
EVEMSM: 130,
"EVED--": 130,
"EVEDA-": 130,
"EVES--": 130,
"EVER--": 130,
"EVEH--": 140,
"EVEF--": 140,
"EVD---": 140,
"EVT--": 130,
"EVC---": 119,
"EVCA--": 132.5,
"EVCAL-": 132.5,
"EVCAM-": 132.5,
"EVCAH-": 132.5,
"EVCO--": 132.5,
"EVCOL-": 132.5,
"EVCOM-": 132.5,
"EVCOH-": 132.5,
"EVCM--": 132.5,
"EVCML-": 132.5,
"EVCMM-": 132.5,
"EVCMH-": 132.5,
"EVCU--": 132.5,
"EVCUL-": 132.5,
"EVCUM-": 132.5,
"EVCUH-": 132.5,
"EVCJ--": 132.5,
"EVCJL-": 132.5,
"EVCJM-": 132.5,
"EVCJH-": 132.5,
"EVCT--": 132.5,
"EVCTL-": 132.5,
"EVCTM-": 132.5,
"EVCTH-": 132.5,
"EVCF--": 132.5,
"EVCFL-": 132.5,
"EVCFM-": 132.5,
"EVCFH-": 132.5,
"EVM---": 125,
"EVS---": 129,
"EVST--": 129,
"EVSR--": 129,
"EVSC--": 129,
"EVSP--": 129,
"EVSW--": 129,
"ES----": 140,
"ESR---": 120,
"ESE---": 136,
"EXI---": 119,
"EXL---": 145,
"EXN---": 140,
"EXF---": 135,
"EXM---": 130,
"EXMC--": 122,
"EXML--": 122
};
for (var key in equipmentBottom) {
if (!equipmentBottom.hasOwnProperty(key)) continue;
bbox["S-G-" + key] = {
x1: 50,
x2: 150,
y1: 50,
y2: equipmentBottom[key]
};
}
}
};

1167
node_modules/milsymbol/src/lettersidc/sidc/ground.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,84 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/ground.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function installations(sId, bbox, icn, _STD2525) {
//Adds support for installations
sId["S-G-I-----"] = [];
sId["S-G-IR----"] = [icn["GR.IN.IC.RAW MATERIAL PRODUCTION/STORAGE"]];
sId["S-G-IRM---"] = [icn["GR.IN.IC.MINE"]];
sId["S-G-IRP---"] = [icn["GR.IC.FF.CLASS III"]];
sId["S-G-IRN---"] = [icn["GR.IC.CBRN"]];
sId["S-G-IRNB--"] = [icn["GR.IC.CBRN"], icn["GR.M1.BIOLOGICAL"]];
sId["S-G-IRNC--"] = [icn["GR.IC.CBRN"], icn["GR.M1.CHEMICAL"]];
sId["S-G-IRNN--"] = [icn["GR.IC.CBRN"], icn["GR.M1.NUCLEAR"]];
sId["S-G-IP----"] = [icn["GR.IN.IC.PROCESSING FACILITY"]];
sId["S-G-IPD---"] = [icn["GR.IC.CBRN"], icn["GR.M1.DECONTAMINATION"]];
sId["S-G-IE----"] = [icn["GR.IC.EQUIPMENT MANUFACTURE"]];
sId["S-G-IU----"] = [icn["GR.IN.IC.UTILITY FACILITY"]];
sId["S-G-IUR---"] = [icn["GR.IN.IC.RESEARCH"]];
sId["S-G-IUT---"] = [icn["GR.IN.IC.TELECOMMUNICATIONS"]];
sId["S-G-IUE---"] = [icn["GR.IN.IC.ELECTRIC POWER"]];
sId["S-G-IUEN--"] = [
icn["GR.IN.IC.ELECTRIC POWER"],
icn["GR.IN.IC.ELECTRIC POWER NUCLEAR"]
];
sId["S-G-IUED--"] = [
icn["GR.IN.IC.ELECTRIC POWER"],
icn["GR.IN.IC.ELECTRIC POWER DAM"]
];
sId["S-G-IUEF--"] = [
icn["GR.IN.IC.ELECTRIC POWER"],
icn["GR.IN.IC.ELECTRIC POWER FOSSIL"]
];
sId["S-G-IUP---"] = [icn["GR.IC.WATER"]];
sId["S-G-IM----"] = []; // N/A
sId["S-G-IMF---"] = [icn["GR.IN.IC.ATOMIC ENERGY"]];
sId["S-G-IMFA--"] = [
icn["GR.IN.IC.ATOMIC ENERGY"],
icn["GR.IN.M2.ATOMIC ENERGY REACTOR"]
];
sId["S-G-IMFP--"] = [
icn["GR.IN.IC.ATOMIC ENERGY"],
icn["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]
];
sId["S-G-IMFPW-"] = [
icn["GR.IN.IC.ATOMIC ENERGY WEAPONS GRADE"],
icn["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]
];
sId["S-G-IMFS--"] = [
icn["GR.IN.IC.ATOMIC ENERGY"],
icn["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]
];
sId["S-G-IMA---"] = [icn["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]];
sId["S-G-IME---"] = [icn["GR.IC.FF.CLASS V"]];
sId["S-G-IMG---"] = [icn["GR.EQ.TANK"]];
sId["S-G-IMV---"] = [icn["GR.IC.MAINTENANCE"]];
sId["S-G-IMN---"] = [icn["GR.EQ.DOZER"]];
sId["S-G-IMNB--"] = [icn["GR.IN.IC.BRIDGE"]];
sId["S-G-IMC---"] = [
icn["GR.IC.CBRN"],
icn["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]
];
sId["S-G-IMS---"] = [icn["GR.IC.NAVAL"], icn["GR.IN.M2.SHIP CONSTRUCTION"]];
sId["S-G-IMM---"] = [icn["GR.IC.MISSILE"]];
sId["S-G-IG----"] = [icn["GR.I.GOVERNMENT"]];
sId["S-G-IB----"] = [icn["GR.IN.IC.BASE"]];
sId["S-G-IBA---"] = [
icn["GR.IC.TRANSPORTATION"],
icn["GR.IC.AIRPORT OF DEBARKATION"]
];
sId["S-G-IBN---"] = [icn["GR.IC.NAVAL"]];
sId["S-G-IT----"] = [icn["GR.IC.TRANSPORTATION"]];
sId["S-G-IX----"] = [icn["GR.IC.FF.MEDICAL"]];
sId["S-G-IXH---"] = [icn["GR.IC.FF.MEDICAL TREATMENT FACILITY"]];
sId["S-G-IRR---"] = sId["S-G-IRSR--"] = [
icn["GR.IN.IC.SEA SURFACE INSTALLATION, OIL RIG/PLATFORM"]
];
}
};

134
node_modules/milsymbol/src/lettersidc/sidc/sea.js generated vendored Normal file
View File

@@ -0,0 +1,134 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/sea.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function sea(sId, bbox, icn, _STD2525) {
// SEA ===========================================================================
sId["S-S-------"] = [];
sId["S-S-C-----"] = [icn["SE.IC.COMBATANT"]];
sId["S-S-CL----"] = [icn["SE.IC.SURFACE COMBATANT, LINE"]];
sId["S-S-CLCV--"] = [icn["SE.IC.CARRIER"]];
sId["S-S-CLBB--"] = [icn["SE.IC.BATTLESHIP"]];
sId["S-S-CLCC--"] = [icn["SE.IC.CRUISER"]];
sId["S-S-CLDD--"] = [icn["SE.IC.DESTROYER"]];
sId["S-S-CLFF--"] = [icn["SE.IC.FRIGATE"]];
sId["S-S-CLLL--"] = [icn["SE.IC.LITTORAL COMBATANT SHIP"]];
sId["S-S-CLLLAS"] = [
icn["SE.IC.LITTORAL COMBATANT SHIP"],
icn["SE.M2.ANTISUBMARINE WARFARE"]
];
sId["S-S-CLLLMI"] = [
icn["SE.IC.LITTORAL COMBATANT SHIP"],
icn["SE.M2.MINE WARFARE"]
];
sId["S-S-CLLLSU"] = [
icn["SE.IC.LITTORAL COMBATANT SHIP"],
icn["SE.M2.SURFACE WARFARE"]
];
sId["S-S-CA----"] = [icn["SE.IC.AMPHIBIOUS WARFARE SHIP"]];
sId["S-S-CALA--"] = [
_STD2525
? icn["SE.IC.AMPHIBIOUS ASSAULT"]
: icn["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]
];
sId["S-S-CALS--"] = [icn["SE.IC.LANDING SHIP"]];
sId["S-S-CALSM-"] = [icn["SE.IC.LANDING SHIP"], icn["SE.M2.MEDIUM"]];
sId["S-S-CALST-"] = [icn["SE.IC.LANDING SHIP"], icn["SE.M2.TANK"]];
sId["S-S-CALC--"] = [icn["SE.IC.LANDING CRAFT"]];
sId["S-S-CM----"] = [icn["SE.IC.MINE WARFARE VESSEL"]];
sId["S-S-CMML--"] = [icn["SE.IC.MINELAYER"]];
sId["S-S-CMMS--"] = [icn["SE.IC.MINESWEEPER"]];
sId["S-S-CMMH--"] = [icn["SE.IC.MINEHUNTER"]];
sId["S-S-CMMA--"] = [icn["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]];
sId["S-S-CMMD--"] = [icn["SE.IC.MINESWEEPER, DRONE"]];
sId["S-S-CP----"] = [icn["SE.IC.PATROL"]];
sId["S-S-CPSB--"] = [icn["SE.IC.PATROL CRAFT"]];
sId["S-S-CPSU--"] = [icn["SE.IC.PATROL ANTI SUBMARINE WARFARE"]];
sId["S-S-CPSUM-"] = [icn["SE.IC.PATROL ANTISHIP MISSILE"]];
sId["S-S-CPSUT-"] = [icn["SE.IC.PATROL TORPEDO"]];
sId["S-S-CPSUG-"] = [icn["SE.IC.PATROL GUN"]];
sId["S-S-CH----"] = [icn["SE.IC.HOVERCRAFT"]];
//1.X.4.1.6 in 2525 listed as 1.X.4.1.7
sId["S-S-G-----"] = [icn["SE.IC.NAVY TASK ORGANIZATION UNIT"]];
//1.X.4.1.6.1 in 2525 listed as 1.X.4.1.7.1 Different SIDC listed let's support both
sId["S-S-GF----"] = sId["S-S-GT----"] = [icn["SE.IC.NAVY TASK FORCE"]];
//1.X.4.1.6.2 in 2525 listed as 1.X.4.1.7.2
sId["S-S-GG----"] = [icn["SE.IC.NAVY TASK GROUP"]];
//1.X.4.1.6.3 in 2525 listed as 1.X.4.1.7.3
sId["S-S-GU----"] = [icn["SE.IC.NAVY TASK UNIT"]];
sId["S-S-GE----"] = [icn["SE.IC.NAVY TASK ELEMENT"]];
//1.X.4.1.6.5 in 2525 listed as 1.X.4.1.7.4
sId["S-S-GC----"] = [icn["SE.IC.CONVOY"]];
sId["S-S-CD----"] = [icn["SE.IC.SEA SURFACE DECOY"]];
sId["S-S-CU----"] = [icn["SE.IC.UNMANNED SURFACE WATER VEHICLE"]];
sId["S-S-CUM---"] = [
icn["SE.IC.UNMANNED SURFACE WATER VEHICLE"],
icn["SE.M1.MINE COUNTERMEASURES"]
];
sId["S-S-CUS---"] = [
icn["SE.IC.UNMANNED SURFACE WATER VEHICLE"],
icn["SE.M1.ANTISUBMARINE WARFARE"]
];
sId["S-S-CUN---"] = [
icn["SE.IC.UNMANNED SURFACE WATER VEHICLE"],
icn["SE.M1.SURFACE WARFARE"]
];
sId["S-S-CUR---"] = [
icn["SE.IC.UNMANNED SURFACE WATER VEHICLE"],
icn["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]
];
sId["S-S-N-----"] = [icn["SE.IC.NONCOMBATANT"]];
sId["S-S-NR----"] = [icn["SE.IC.AUXILIARY SHIP"]];
sId["S-S-NRA---"] = [icn["SE.IC.AMMUNITION SHIP"]];
sId["S-S-NRO---"] = [icn["SE.IC.OILER, REPLENISHMENT"]];
//1.X.4.2.2 Different SIDC listed let's support both
sId["S-S-NF----"] = sId["S-S-NFT---"] = [icn["SE.IC.TUG, OCEAN GOING"]];
sId["S-S-NI----"] = [icn["SE.IC.INTELLIGENCE COLLECTOR"]];
sId["S-S-NM----"] = [icn["SE.IC.HOSPITAL SHIP"]];
sId["S-S-NS----"] = [icn["SE.IC.SERVICE CRAFT, YARD, GENERAL"]];
sId["S-S-NR----"] = [icn["SE.IC.REPAIR SHIP"]];
sId["S-S-NTS---"] = [icn["SE.IC.SUBMARINE TENDER"]];
sId["S-S-NH----"] = [icn["SE.IC.HOVERCRAFT NONCOMBATANT"]];
//sId["S-S-NS----"] = [icn["SE.IC.TUG, HARBOUR"]];
sId["S-S-X-----"] = []; // N/A
sId["S-S-XM----"] = [icn["SE.IC.MERCHANT SHIP, GENERAL"]];
sId["S-S-XMC---"] = [icn["SE.IC.CARGO, GENERAL"]];
sId["S-S-XME---"] = sId["S-S-XMR---"] = [icn["SE.IC.ROLL ON-ROLL OFF"]];
sId["S-S-XMO---"] = [icn["SE.IC.OILER/TANKER"]];
sId["S-S-XMT---"] = sId["S-S-XMTU--"] = [
icn["SE.IC.TUG, OCEAN GOING CIVILIAN"]
];
sId["S-S-XMF---"] = [icn["SE.IC.FERRY"]];
sId["S-S-XMP---"] = [icn["SE.IC.PASSENGER SHIP"]];
sId["S-S-XMH---"] = [icn["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]];
sId["S-S-XMD---"] = [icn["SE.IC.DREDGE"]];
sId["S-S-XMTO--"] = [icn["SE.IC.TOW"]];
sId["S-S-XF----"] = [icn["SE.IC.FISHING VESSEL"]];
sId["S-S-XFDF--"] = [icn["SE.IC.DRIFTER"]];
sId["S-S-XFTR--"] = [icn["SE.IC.TRAWLER"]];
sId["S-S-XFDR--"] = [icn["SE.IC.FISHING VESSEL DREDGE"]];
sId["S-S-XR----"] = [icn["SE.IC.LEISURE CRAFT, SAILING BOAT"]];
sId["S-S-XL----"] = [icn["SE.IC.LAW ENFORCEMENT VESSEL"]];
sId["S-S-XH----"] = [icn["SE.IC.HOVERCRAFT CIVILIAN"]];
sId["S-S-XA----"] = [icn["SE.IC.LEISURE CRAFT, MOTORIZED"]];
sId["S-S-XAR---"] = [
icn["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]
];
sId["S-S-XAS---"] = [icn["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]];
sId["S-S-XP----"] = [icn["SE.IC.LEISURE CRAFT, JETSKI"]];
sId["S-S-O-----"] = [icn["SE.IC.OWN SHIP"]];
sId["S-S-E-----"] = []; // N/A
sId["S-S-ED----"] = [icn["SE.IC.DITCHED AIRCRAFT"]];
sId["S-S-EP----"] = [icn["SE.IC.PERSON IN WATER"]];
sId["S-S-EV----"] = [icn["SE.IC.DISTRESSED VESSEL"]];
sId["S-S-Z-----"] = []; // N/A
sId["S-S-ZM----"] = [icn["SE.IC.SEA MINELIKE"]];
sId["S-S-ZN----"] = [icn["SE.IC.NAVIGATIONAL"]];
sId["S-S-ZI----"] = [icn["SE.IC.ICEBERG"]];
}
};

View File

@@ -0,0 +1,486 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import signalsintelligence from "../../iconparts/signals-intelligence.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [signalsintelligence],
icons: function signalsIntelligence(sId, bbox, icn, _STD2525) {
//Adds support for 2525C Signals Intelligence
sId["I-P-S-----"] = []; // N/A
sId["I-P-SC----"] = []; // N/A
sId["I-P-SCD---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.SIERRA"],
icn["SI.M2.DELTA"],
icn["SI.M3.SPACE"]
];
sId["I-P-SR----"] = []; // N/A
sId["I-P-SRD---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.DELTA"],
icn["SI.M2.TANGO"],
icn["SI.M3.SPACE"]
];
sId["I-P-SRE---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ECHO"],
icn["SI.M2.SIERRA"],
icn["SI.M3.SPACE"]
];
sId["I-P-SRI---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.INDY"],
icn["SI.M2.FOXTROT"],
icn["SI.M3.SPACE"]
];
sId["I-P-SRM---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.FOXTROT"],
icn["SI.M3.SPACE"]
];
sId["I-P-SRT---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.ALPHA"],
icn["SI.M3.SPACE"]
];
sId["I-P-SRS---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.SIERRA"],
icn["SI.M2.PAPA"],
icn["SI.M3.SPACE"]
];
sId["I-P-SRU---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.UNIFORM"],
icn["SI.M2.NOVEMBER"],
icn["SI.M3.SPACE"]
];
sId["I-A-S-----"] = []; // N/A
sId["I-A-SC----"] = []; // N/A
sId["I-A-SCC---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.MIKE"]
];
sId["I-A-SCO---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.OSCAR"],
icn["SI.M2.LIMA"]
];
sId["I-A-SCP---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.PAPA"],
icn["SI.M2.PAPA"]
];
sId["I-A-SCS---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.SIERRA"],
icn["SI.M2.UNIFORM"]
];
sId["I-A-SR----"] = []; // N/A
sId["I-A-SRAI--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ALPHA"],
icn["SI.M2.INDY"]
];
sId["I-A-SRAS--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ALPHA"],
icn["SI.M2.BRAVO"]
];
sId["I-A-SRC---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.INDY"]
];
sId["I-A-SRD---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.DELTA"],
icn["SI.M2.TANGO"]
];
sId["I-A-SRE---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ECHO"],
icn["SI.M2.WHISKEY"]
];
sId["I-A-SRF---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.FOXTROT"],
icn["SI.M2.CHARLIE"]
];
sId["I-A-SRI---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.INDY"],
icn["SI.M2.FOXTROT"]
];
sId["I-A-SRMA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.ALPHA"]
];
sId["I-A-SRMD--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.DELTA"]
];
sId["I-A-SRMG--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.GOLF"]
];
sId["I-A-SRMT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.TANGO"]
];
sId["I-A-SRMF--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.FOXTROT"]
];
sId["I-A-SRTI--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.INDY"]
];
sId["I-A-SRTA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.ALPHA"]
];
sId["I-A-SRTT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.TANGO"]
];
sId["I-A-SRU---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.UNIFORM"],
icn["SI.M2.NOVEMBER"]
];
sId["I-G-S-----"] = []; // N/A
sId["I-G-SC----"] = []; // N/A
sId["I-G-SCC---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.MIKE"],
icn["SI.M3.GROUND"]
];
sId["I-G-SCO---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.OSCAR"],
icn["SI.M2.LIMA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SCP---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.PAPA"],
icn["SI.M2.PAPA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SCS---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.SIERRA"],
icn["SI.M2.UNIFORM"],
icn["SI.M3.GROUND"]
];
sId["I-G-SCT---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.TANGO"],
icn["SI.M2.SIERRA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SR----"] = []; // N/A
sId["I-G-SRAT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ALPHA"],
icn["SI.M2.TANGO"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRAA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ALPHA"],
icn["SI.M2.ALPHA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRB---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.BRAVO"],
icn["SI.M2.SIERRA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRCS--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.SIERRA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRCA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.ALPHA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRD---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.DELTA"],
icn["SI.M2.TANGO"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRE---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ECHO"],
icn["SI.M2.WHISKEY"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRF---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.FOXTROT"],
icn["SI.M2.CHARLIE"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRH---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.HOTEL"],
icn["SI.M2.FOXTROT"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRI---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.INDY"],
icn["SI.M2.FOXTROT"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRMM--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.ECHO"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRMA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.ALPHA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRMG--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.GOLF"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRMT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.TANGO"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRMF--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.FOXTROT"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRS---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.SIERRA"],
icn["SI.M2.TANGO"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRTA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.ALPHA"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRTI--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.INDY"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRTT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.TANGO"],
icn["SI.M3.GROUND"]
];
sId["I-G-SRU---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.UNIFORM"],
icn["SI.M2.NOVEMBER"],
icn["SI.M3.GROUND"]
];
sId["I-S-S-----"] = []; // N/A
sId["I-S-SC----"] = []; // N/A
sId["I-S-SCC---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.MIKE"]
];
sId["I-S-SCO---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.OSCAR"],
icn["SI.M2.LIMA"]
];
sId["I-S-SCP---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.PAPA"],
icn["SI.M2.PAPA"]
];
sId["I-S-SCS---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.SIERRA"],
icn["SI.M2.UNIFORM"]
];
sId["I-S-SR----"] = []; // N/A
sId["I-S-SRAT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ALPHA"],
icn["SI.M2.TANGO"]
];
sId["I-S-SRAA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ALPHA"],
icn["SI.M2.ALPHA"]
];
sId["I-S-SRCA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.ALPHA"]
];
sId["I-S-SRCI--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.CHARLIE"],
icn["SI.M2.INDY"]
];
sId["I-S-SRD---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.DELTA"],
icn["SI.M2.TANGO"]
];
sId["I-S-SRE---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ECHO"],
icn["SI.M2.WHISKEY"]
];
sId["I-S-SRF---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.FOXTROT"],
icn["SI.M2.CHARLIE"]
];
sId["I-S-SRH---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.HOTEL"],
icn["SI.M2.FOXTROT"]
];
sId["I-S-SRI---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.INDY"],
icn["SI.M2.FOXTROT"]
];
sId["I-S-SRMM--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.ECHO"]
];
sId["I-S-SRMA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.ALPHA"]
];
sId["I-S-SRMG--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.GOLF"]
];
sId["I-S-SRMT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.TANGO"]
];
sId["I-S-SRMF--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.FOXTROT"]
];
sId["I-S-SRS---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.SIERRA"],
icn["SI.M2.SIERRA"]
];
sId["I-S-SRTA--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.ALPHA"]
];
sId["I-S-SRTI--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.INDY"]
];
sId["I-S-SRTT--"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.TANGO"]
];
sId["I-S-SRU---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.UNIFORM"],
icn["SI.M2.NOVEMBER"]
];
sId["I-U-S-----"] = []; // N/A
sId["I-U-SC----"] = []; // N/A
sId["I-U-SCO---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.OSCAR"],
icn["SI.M2.LIMA"]
];
sId["I-U-SCP---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.PAPA"],
icn["SI.M2.PAPA"]
];
sId["I-U-SCS---"] = [
icn["SI.IC.COMMUNICATIONS"],
icn["SI.M1.SIERRA"],
icn["SI.M2.UNIFORM"]
];
sId["I-U-SR----"] = []; // N/A
sId["I-U-SRD---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.DELTA"],
icn["SI.M2.TANGO"]
];
sId["I-U-SRE---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.ECHO"],
icn["SI.M2.WHISKEY"]
];
sId["I-U-SRM---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.MIKE"],
icn["SI.M2.FOXTROT"]
];
sId["I-U-SRS---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.SIERRA"],
icn["SI.M2.SIERRA"]
];
sId["I-U-SRT---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.TANGO"],
icn["SI.M2.ALPHA"]
];
sId["I-U-SRU---"] = [
icn["SI.IC.RADAR"],
icn["SI.M1.UNIFORM"],
icn["SI.M2.NOVEMBER"]
];
}
};

137
node_modules/milsymbol/src/lettersidc/sidc/sof.js generated vendored Normal file
View File

@@ -0,0 +1,137 @@
import { ms } from "../../ms.js";
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/ground.js";
import icons_air from "../../iconparts/air.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons, icons_air],
icons: function sof(sId, bbox, icn, _STD2525) {
// SOF ===========================================================================
sId["S-F-------"] = [icn["GR.IC.SPECIAL OPERATIONS FORCES"]];
sId["S-F-A-----"] = [
icn["AR.I.MILITARY ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-AF----"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-AFA---"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.ATTACK"]
];
sId["S-F-AFK---"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.REFUEL"]
];
sId["S-F-AFU---"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.UTILITY"]
];
sId["S-F-AFUL--"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["AIR.M2.LIGHT"]
];
sId["S-F-AFUM--"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["AIR.M2.MEDIUM"]
];
sId["S-F-AFUH--"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["AIR.M2.HEAVY"]
];
sId["S-F-AV----"] = [
icn["AR.I.MILITARY FIXED WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.VSTOL"]
];
sId["S-F-AH----"] = _STD2525
? [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["GR.IC.AVIATION ROTARY WING 2525C"]
]
: [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-AHH---"] = [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.COMBAT SEARCH AND RESCUE"]
];
sId["S-F-AHA---"] = [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.ATTACK"]
];
sId["S-F-AHU---"] = [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["SOF.M2.UTILITY"]
];
sId["S-F-AHUL--"] = [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["AIR.M2.LIGHT"]
];
sId["S-F-AHUM--"] = [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["AIR.M2.MEDIUM"]
];
sId["S-F-AHUH--"] = [
icn["GR.IC.AVIATION ROTARY WING"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"],
icn["AIR.M2.HEAVY"]
];
sId["S-F-SN----"] = sId["S-F-N-----"] = [
icn["GR.IC.NAVAL"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-SNS---"] = sId["S-F-NS----"] = [icn["GR.IC.SEA-AIR-LAND"]];
sId["S-F-SNU---"] = sId["S-F-NU----"] = [
icn["SOF.IC.UNDERWATER DEMOLITION TEAM"]
];
sId["S-F-SNB---"] = sId["S-F-NB----"] = [
icn["GR.IC.COMBATANT"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-SNN---"] = sId["S-F-NN----"] = [
icn["GR.IC.SUBMARINE NUCLEAR PROPULSION"],
icn["AIR.M1.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-G-----"] = [
icn["GR.IC.FF.INFANTRY"],
icn["GR.IC.SPECIAL OPERATIONS FORCES"]
];
sId["S-F-GS----"] = [icn["GR.IC.SPECIAL FORCES"]];
sId["S-F-GR----"] = sId["S-F-GSR---"] = [
icn["GR.IC.FF.INFANTRY"],
icn["AIR.M1.RECONNAISSANCE"],
icn["GR.M2.AIRBORNE"]
];
sId["S-F-GP----"] = sId["S-F-GSP---"] = [
icn["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]
];
sId["S-F-GPA---"] = sId["S-F-GSPA--"] = [
icn["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"],
ms._translate(0, -30, ms._scale(0.7, icn["AR.I.MILITARY FIXED WING"]))
];
sId["S-F-GC----"] = sId["S-F-GCA---"] = [icn["GR.IC.CIVIL AFFAIRS"]];
sId["S-F-GB----"] = sId["S-F-B-----"] = [
icn["GR.IC.SPECIAL OPERATIONS FORCES"],
icn["GR.M2.SUPPORT"]
];
}
};

18
node_modules/milsymbol/src/lettersidc/sidc/space.js generated vendored Normal file
View File

@@ -0,0 +1,18 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/space.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function space(sId, bbox, icn, _STD2525) {
// SPACE =========================================================================
sId["S-P-------"] = [];
sId["S-P-S-----"] = [icn["SP.I.FF.SATELLITE"]];
sId["S-P-V-----"] = [icn["SP.I.FF.CREWED SPACE VEHICLE"]];
sId["S-P-T-----"] = [icn["SP.I.FF.SPACE STATION"]];
sId["S-P-L-----"] = [icn["SP.I.SPACE LAUNCH VEHICLE"]];
}
};

View File

@@ -0,0 +1,118 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/ground.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function stabilityoperations(sId, bbox, icn, _STD2525) {
//Adds support for 2525C Stability Operations
sId["O-V-A-----"] = [icn["ST.IC.ARSON/FIRE"]];
sId["O-V-M-----"] = [icn["ST.IC.KILLING VICTIM"]];
sId["O-V-MA----"] = [icn["ST.IC.KILLING VICTIM"], icn["ST.M1.MURDER"]];
sId["O-V-MB----"] = [
icn["ST.IC.KILLING VICTIM"],
icn["ST.M1.EXECUTION (WRONGFUL KILLING)"]
];
sId["O-V-MC----"] = [
icn["ST.IC.KILLING VICTIM"],
icn["ST.M1.ASSASSINATION"]
];
sId["O-V-B-----"] = [icn["ST.IC.BOMB"]];
sId["O-V-Y-----"] = [icn["ST.IC.BOOBY TRAP"]];
sId["O-V-D-----"] = [icn["ST.IC.DRIVE-BY SHOOTING"]];
sId["O-V-S-----"] = [icn["ST.IC.SNIPING"]];
sId["O-V-P-----"] = [icn["ST.IC.POISONING"]];
sId["O-V-E-----"] = [icn["ST.IC.EXPLOSION"]];
sId["O-V-EI----"] = [icn["ST.IC.EXPLOSION"], icn["ST.IC.IED"]];
sId["O-L-B-----"] = [icn["ST.IC.BLACK LIST LOCATION"]];
sId["O-L-G-----"] = [icn["ST.IC.GRAY LIST LOCATION"]];
sId["O-L-W-----"] = [icn["ST.IC.WHITE LIST LOCATION"]];
sId["O-L-M-----"] = [icn["ST.IC.MASS GRAVE LOCATION"]];
sId["O-O-P-----"] = [icn["ST.IC.PATROLLING"]];
sId["O-O-R-----"] = []; // N/A
sId["O-O-RW----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.WILLING"]];
sId["O-O-RC----"] = [
icn["ST.IC.INDIVIDUAL"],
icn["ST.M1.COERCED/IMPRESSED"]
];
sId["O-O-D-----"] = [icn["ST.IC.DEMONSTRATION"]];
sId["O-O-M-----"] = [icn["ST.IC.MINE LAYING"]];
sId["O-O-Y-----"] = [icn["ST.IC.PSYCHOLOGICAL OPERATIONS"]];
sId["O-O-YT----"] = [
icn["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]
];
sId["O-O-YW----"] = [
icn["ST.IC.PSYCHOLOGICAL OPERATIONS"],
icn["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]
];
sId["O-O-YH----"] = [
icn["ST.IC.PSYCHOLOGICAL OPERATIONS"],
icn["ST.M1.HOUSE-TO-HOUSE"]
];
sId["O-O-F-----"] = [icn["ST.IC.SEARCHING"]];
sId["O-O-S-----"] = [icn["ST.IC.SPY"]];
sId["O-O-O-----"] = [icn["ST.IC.FOOD DISTRIBUTION"]];
sId["O-O-E-----"] = [icn["ST.IC.EXTORTION"]];
sId["O-O-H-----"] = []; // N/A
sId["O-O-HT----"] = [
icn["ST.IC.KNOWN INSURGENT VEHICLE"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["O-O-HA----"] = [
icn["ST.IC.HIJACKING (AIRPLANE)"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["O-O-HV----"] = [
icn["ST.IC.HIJACKING (BOAT)"],
icn["ST.M1.HIJACKING/HIJACKED"]
];
sId["O-O-K-----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.KIDNAPPING"]];
sId["O-O-KA----"] = [
icn["ST.IC.INDIVIDUAL"],
icn["ST.M1.KIDNAPPING"],
icn["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]
];
sId["O-O-A-----"] = [icn["ST.IC.ARREST"]];
sId["O-O-U-----"] = [icn["ST.IC.DRUG RELATED ACTIVITIES"]];
sId["O-O-C-----"] = [icn["ST.IC.COMPOSITE LOSS"]];
sId["O-O-CA----"] = [icn["ST.IC.COMPOSITE LOSS"], icn["ST.M1.COMBAT"]];
sId["O-O-CB----"] = [icn["ST.IC.COMPOSITE LOSS"], icn["ST.M1.ACCIDENT"]];
sId["O-O-CC----"] = [icn["ST.IC.COMPOSITE LOSS"], icn["ST.M1.OTHER"]];
sId["O-I-R-----"] = [icn["ST.IC.GROUP"]];
sId["O-I-S-----"] = [icn["ST.IC.SAFE HOUSE"]];
sId["O-I-G-----"] = [icn["ST.IC.GRAFFITI"]];
sId["O-I-V-----"] = [icn["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]];
sId["O-I-I-----"] = [icn["ST.IC.KNOWN INSURGENT VEHICLE"]];
sId["O-I-D-----"] = [
icn["ST.IC.KNOWN INSURGENT VEHICLE"],
icn["ST.M1.DRUG"]
];
sId["O-I-F-----"] = [icn["ST.IC.INTERNAL SECURITY FORCE"]];
sId["O-P-------"] = [icn["ST.IC.INDIVIDUAL"]];
sId["O-P-A-----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.LEADER"]];
sId["O-P-B-----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.TARGETED"]];
sId["O-P-C-----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.TERRORIST"]];
sId["O-G-------"] = [icn["ST.IC.GROUP"]];
sId["O-G-A-----"] = [
icn["ST.IC.GROUP"],
icn["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]
];
sId["O-G-B-----"] = [
icn["ST.IC.GROUP"],
icn["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]
];
sId["O-G-C-----"] = [icn["ST.IC.GROUP"], icn["ST.M1.TERRORIST"]];
sId["O-G-D-----"] = [icn["ST.IC.GROUP"], icn["ST.M1.RELIGIOUS"]];
sId["O-G-E-----"] = [icn["ST.IC.GROUP"], icn["ST.M1.FOREIGN FIGHTERS"]];
sId["O-G-F-----"] = [icn["ST.IC.GROUP"], icn["ST.M1.GANG"]];
sId["O-R-------"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.RAPE"]];
sId["O-R-A-----"] = [
icn["ST.IC.INDIVIDUAL"],
icn["ST.M1.RAPE"],
icn["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]
];
}
};

View File

@@ -0,0 +1,169 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import icons from "../../iconparts/subsurface.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [icons],
icons: function subsurface(sId, bbox, icn, _STD2525) {
// SUBSURFACE ====================================================================
sId["S-U-------"] = [];
sId["S-U-S-----"] = [icn["SU.IC.SUBMARINE"]];
sId["S-U-SF----"] = [icn["SU.IC.SUBMARINE, SURFACED"]];
sId["S-U-SB----"] = [icn["SU.IC.SUBMARINE, BOTTOMED"]];
sId["S-U-SR----"] = [icn["SU.IC.SUBMARINE"], icn["SU.M2.CERTSUB"]];
sId["S-U-SX----"] = [icn["SU.IC.NON-SUBMARINE"]];
sId["S-U-SN----"] = [icn["SU.IC.SUBMARINE NUCLEAR PROPULSION"]];
sId["S-U-SNF---"] = [icn["SU.IC.SUBMARINE NUCLEAR PROPULSION, SURFACED"]];
sId["S-U-SNA---"] = [
icn["SU.IC.SUBMARINE NUCLEAR PROPULSION"],
icn["SU.IC.SUBMARINE ATTACK (SSN)"]
];
sId["S-U-SNM---"] = [
icn["SU.IC.SUBMARINE NUCLEAR PROPULSION"],
icn["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]
];
sId["S-U-SNG---"] = [
icn["SU.IC.SUBMARINE NUCLEAR PROPULSION"],
icn["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]
];
sId["S-U-SNB---"] = [
icn["SU.IC.SUBMARINE NUCLEAR PROPULSION"],
icn["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]
];
sId["S-U-SC----"] = [icn["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"]];
sId["S-U-SCF---"] = [
icn["SU.IC.SUBMARINE CONVENTIONAL PROPULSION, SURFACED"]
];
sId["S-U-SCA---"] = [
icn["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],
icn["SU.IC.SUBMARINE ATTACK (SSN)"]
];
sId["S-U-SCM---"] = [
icn["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],
icn["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]
];
sId["S-U-SCG---"] = [
icn["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],
icn["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]
];
sId["S-U-SCB---"] = [
icn["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],
icn["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]
];
sId["S-U-SO----"] = [icn["SU.IC.OTHER SUBMERSIBLE"]];
sId["S-U-SOF---"] = [icn["SU.IC.OTHER SUBMERSIBLE, SURFACED"]];
sId["S-U-SU----"] = [
icn[
"SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"
]
];
sId["S-U-SUM---"] = [
icn[
"SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"
],
icn["SU.M1.MINE COUNTERMEASURES"]
];
sId["S-U-SUS---"] = [
icn[
"SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"
],
icn["SU.M1.ANTISUBMARINE WARFARE"]
];
sId["S-U-SUN---"] = [
icn[
"SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"
],
icn["SU.M1.SURFACE WARFARE"]
];
sId["S-U-S1----"] = [
icn["SU.IC.SUBMARINE"],
icn["SU.M2.POSSIBLE SUBMARINE - LOW 1"]
];
sId["S-U-S2----"] = [
icn["SU.IC.SUBMARINE"],
icn["SU.M2.POSSIBLE SUBMARINE - LOW 2"]
];
sId["S-U-S3----"] = [
icn["SU.IC.SUBMARINE"],
icn["SU.M2.POSSIBLE SUBMARINE - HIGH 3"]
];
sId["S-U-S4----"] = [
icn["SU.IC.SUBMARINE"],
icn["SU.M2.POSSIBLE SUBMARINE - HIGH 4"]
];
sId["S-U-SL----"] = [
icn["SU.IC.SUBMARINE"],
icn["SU.M2.PROBABLE SUBMARINE"]
];
sId["S-U-SK----"] = [icn["SU.IC.SUBMARINE, SNORKELING"]];
sId["S-U-W-----"] = [icn["SU.IC.UNDERWATER WEAPON"]];
sId["S-U-WT----"] = [icn["SU.IC.TORPEDO"]];
sId["S-U-WM----"] = [icn["SU.IC.SEA MINE"]];
sId["S-U-WMD---"] = [icn["SU.IC.SEA MINE NEUTRALIZED"]];
sId["S-U-WMG---"] = [icn["SU.IC.SEA MINE - BOTTOM"]];
sId["S-U-WMGD--"] = [icn["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]];
sId["S-U-WMGX--"] = [icn["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]];
sId["S-U-WMGE--"] = [icn["SU.IC.SEA MINE MILEC - BOTTOM"]];
sId["S-U-WMGC--"] = [icn["SU.IC.SEA MINE MILCO - BOTTOM"]];
sId["S-U-WMGR--"] = [icn["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]];
sId["S-U-WMGO--"] = [
icn["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]
];
sId["S-U-WMM---"] = [icn["SU.IC.SEA MINE - MOORED"]];
sId["S-U-WMMD--"] = [icn["SU.IC.SEA MINE NEUTRALIZED - MOORED"]];
sId["S-U-WMMX--"] = [icn["SU.IC.SEA MINE EXERCISE MINE - MOORED"]];
sId["S-U-WMME--"] = [icn["SU.IC.SEA MINE MILEC - MOORED"]];
sId["S-U-WMMC--"] = [icn["SU.IC.SEA MINE MILCO - MOORED"]];
sId["S-U-WMMR--"] = [icn["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]];
sId["S-U-WMMO--"] = [
icn["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]
];
sId["S-U-WMF---"] = [icn["SU.IC.SEA MINE - FLOATING"]];
sId["S-U-WMFD--"] = [icn["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]];
sId["S-U-WMFX--"] = [icn["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]];
sId["S-U-WMFE--"] = [icn["SU.IC.SEA MINE MILEC - FLOATING"]];
sId["S-U-WMFC--"] = [icn["SU.IC.SEA MINE MILCO - FLOATING"]];
sId["S-U-WMFR--"] = [
icn["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]
];
sId["S-U-WMFO--"] = [
icn["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]
];
sId["S-U-WMO---"] = [icn["SU.IC.SEA MINE (IN OTHER POSITION)"]];
sId["S-U-WMOD--"] = [icn["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]];
sId["S-U-WMX---"] = [icn["SU.IC.SEA MINE EXERCISE MINE"]];
sId["S-U-WME---"] = [icn["SU.IC.SEA MINE MILEC"]];
sId["S-U-WMA---"] = [icn["SU.IC.SEA MINE MINE ANCHOR"]];
sId["S-U-WMC---"] = [icn["SU.IC.SEA MINE MILCO"]];
sId["S-U-WMR---"] = [icn["SU.IC.SEA MINE NEGATIVE REACQUISITION"]];
sId["S-U-WMB---"] = [icn["SU.IC.SEA MINE GENERAL OBSTRUCTOR"]];
sId["S-U-WMBD--"] = [icn["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]];
sId["S-U-WMN---"] = [icn["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"]];
sId["S-U-WMS---"] = [icn["SU.IC.SEA MINE - RISING"]];
sId["S-U-WMSX--"] = [icn["SU.IC.SEA MINE EXERCISE MINE - RISING"]];
sId["S-U-WMSD--"] = [icn["SU.IC.SEA MINE NEUTRALIZED - RISING"]];
sId["S-U-WV----"] = [
icn[
"SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"
]
];
sId["S-U-WD----"] = [icn["SU.IC.UNDERWATER DECOY"]];
sId["S-U-WDM---"] = [icn["SU.IC.SEA MINE DECOY"]];
sId["S-U-WDMG--"] = [icn["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]];
sId["S-U-WDMM--"] = [icn["SU.IC.SEA MINE DECOY, MOORED"]];
sId["S-U-N-----"] = [icn["SU.IC.NON-SUBMARINE"]];
sId["S-U-ND----"] = [icn["SU.IC.DIVER, CIVILIAN"]];
sId["S-U-NB----"] = []; // N/A
sId["S-U-E-----"] = [icn["SU.IC.ENVIRONMENTAL REPORT LOCATION"]];
sId["S-U-V-----"] = [icn["SU.IC.DIVE REPORT LOCATION"]];
sId["S-U-X-----"] = [icn["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]];
sId["S-U-NBS---"] = [icn["SU.IC.SEABED INSTALLATION/MANMADE"]];
sId["S-U-NBR---"] = [icn["SU.IC.SEABED ROCK/STONE, OBSTACLE, OTHER"]];
sId["S-U-NBW---"] = [icn["SU.IC.WRECK"]];
sId["S-U-NM----"] = [icn["SU.IC.MARINE LIFE"]];
sId["S-U-NA----"] = [icn["SU.IC.SEA ANOMALY"]];
}
};

View File

@@ -0,0 +1,393 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import tacticalpoints from "../../iconparts/tactical-points.js";
import labels from "../labels/tactical-points-2525.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [tacticalpoints],
labels: labels,
icons: function tacticalPoints(sidc, bbox, icn, std2525) {
// Tactical Point Symbols =========================================================================
sidc["G-T-D-----"] = icn["TP.DESTROY"]; //TACGRP.TSK.DSTY
bbox["G-T-D-----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
sidc["G-T-I-----"] = icn["TP.INTERDICT"]; //TACGRP.TSK.ITDT
bbox["G-T-I-----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
sidc["G-T-N-----"] = icn["TP.NEUTRALIZE"]; //TACGRP.TSK.NEUT
bbox["G-T-N-----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
sidc["G-G-GPUUD-"] = icn["TP.DATUM"]; //TACGRP.C2GM.GNL.PNT.USW.UH2.DTM
bbox["G-G-GPUUD-"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPUUB-"] = icn["TP.BRIEF CONTACT"]; //TACGRP.C2GM.GNL.PNT.USW.UH2.BCON
bbox["G-G-GPUUB-"] = { x1: 50, x2: 150, y1: 0, y2: 100 };
sidc["G-G-GPUUL-"] = icn["TP.LOST CONTACT"]; //TACGRP.C2GM.GNL.PNT.USW.UH2.LCON
bbox["G-G-GPUUL-"] = { x1: 50, x2: 150, y1: 0, y2: 100 };
sidc["G-G-GPUUS-"] = icn["TP.SINKER"]; //TACGRP.C2GM.GNL.PNT.USW.UH2.SNK
bbox["G-G-GPUUS-"] = { x1: 50, x2: 150, y1: 0, y2: 100 };
sidc["G-G-GPUY--"] = icn["TP.SONOBUOY"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY
bbox["G-G-GPUY--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYP-"] = icn["TP.SONOBUOY PATTERN CENTER"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.PTNCTR
bbox["G-G-GPUYP-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYD-"] = icn["TP.SONOBUOY DIFAR"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.DIFAR
bbox["G-G-GPUYD-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYL-"] = icn["TP.SONOBUOY LOFAR"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.LOFAR
bbox["G-G-GPUYL-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYC-"] = icn["TP.SONOBUOY CASS"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.CASS
bbox["G-G-GPUYC-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYS-"] = icn["TP.SONOBUOY DICASS"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.DICASS
bbox["G-G-GPUYS-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYB-"] = icn["TP.SONOBUOY BT"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.BT
bbox["G-G-GPUYB-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYA-"] = icn["TP.SONOBUOY ANM"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.ANM
bbox["G-G-GPUYA-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYV-"] = icn["TP.SONOBUOY VLAD"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.VLAD
bbox["G-G-GPUYV-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYT-"] = icn["TP.SONOBUOY ATAC"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.ATAC
bbox["G-G-GPUYT-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYR-"] = icn["TP.SONOBUOY RO"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.RO
bbox["G-G-GPUYR-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYK-"] = icn["TP.SONOBUOY KINGPIN"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.KGP
bbox["G-G-GPUYK-"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-G-GPUYX-"] = icn["TP.SONOBUOY EXPIRED"]; //TACGRP.C2GM.GNL.PNT.USW.SNBY.EXP
bbox["G-G-GPUYX-"] = { x1: 40, x2: 160, y1: -10, y2: 160 };
sidc["G-G-GPUS--"] = icn["TP.SEARCH"]; //TACGRP.C2GM.GNL.PNT.USW.SRH
bbox["G-G-GPUS--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPUSA-"] = icn["TP.SEARCH AREA"]; //TACGRP.C2GM.GNL.PNT.USW.SRH.ARA
bbox["G-G-GPUSA-"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPUSD-"] = icn["TP.DIP POSITION"]; //TACGRP.C2GM.GNL.PNT.USW.SRH.DIPPSN
bbox["G-G-GPUSD-"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPUSC-"] = icn["TP.SEARCH CENTER"]; //TACGRP.C2GM.GNL.PNT.USW.SRH.CTR
bbox["G-G-GPUSC-"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPR---"] = icn["TP.REFERENCE POINT"]; //TACGRP.C2GM.GNL.PNT.REFPNT
bbox["G-G-GPR---"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRN--"] = icn["TP.NAVIGATIONAL REFERENCE"]; //TACGRP.C2GM.GNL.PNT.REFPNT.NAVREF
bbox["G-G-GPRN--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRS--"] = icn["TP.SPECIAL POINT"]; //TACGRP.C2GM.GNL.PNT.REFPNT.SPLPNT
bbox["G-G-GPRS--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRD--"] = icn["TP.DLRP"]; //TACGRP.C2GM.GNL.PNT.REFPNT.DLRP
bbox["G-G-GPRD--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRP--"] = icn["TP.POINT OF INTENDED MOVEMENT"]; //TACGRP.C2GM.GNL.PNT.REFPNT.PIM
bbox["G-G-GPRP--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRM--"] = icn["TP.MARSHALL POINT"]; //TACGRP.C2GM.GNL.PNT.REFPNT.MRSH
bbox["G-G-GPRM--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRW--"] = icn["TP.REFERENCE POINT WAYPOINT"]; //TACGRP.C2GM.GNL.PNT.REFPNT.WAP
bbox["G-G-GPRW--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRC--"] = icn["TP.CORRIDOR TAB"]; //TACGRP.C2GM.GNL.PNT.REFPNT.CRDRTB
bbox["G-G-GPRC--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-G-GPRI--"] = icn["TP.POINT OF INTEREST"]; //TACGRP.C2GM.GNL.PNT.REFPNT.PNTINR
bbox["G-G-GPRI--"] = { x1: 50, x2: 150, y1: -25 };
sidc["G-G-GPWA--"] = icn["TP.AIM POINT"]; //TACGRP.C2GM.GNL.PNT.WPN.AIMPNT
bbox["G-G-GPWA--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPWD--"] = icn["TP.DROP POINT"]; //TACGRP.C2GM.GNL.PNT.WPN.DRPPNT
bbox["G-G-GPWD--"] = { x1: 50, x2: 150, y1: 50, y2: 120 };
sidc["G-G-GPWE--"] = icn["TP.ENTRY POINT"]; //TACGRP.C2GM.GNL.PNT.WPN.ENTPNT
bbox["G-G-GPWE--"] = { x1: 50, x2: 150, y1: 50 };
sidc["G-G-GPWG--"] = icn["TP.GROUND ZERO"]; //TACGRP.C2GM.GNL.PNT.WPN.GRDZRO
bbox["G-G-GPWG--"] = { x1: 50, x2: 150, y1: 30 };
sidc["G-G-GPWM--"] = icn["TP.MSL DETECT POINT"]; //TACGRP.C2GM.GNL.PNT.WPN.MSLPNT
bbox["G-G-GPWM--"] = { x1: 50, x2: 150, y1: 30 };
sidc["G-G-GPWI--"] = icn["TP.IMPACT POINT"]; //TACGRP.C2GM.GNL.PNT.WPN.IMTPNT
bbox["G-G-GPWI--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPWP--"] = icn["TP.PREDICTED IMPACT POINT"]; //TACGRP.C2GM.GNL.PNT.WPN.PIPNT
bbox["G-G-GPWP--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPF---"] = icn["TP.FORMATION"]; //TACGRP.C2GM.GNL.PNT.FRMN
bbox["G-G-GPF---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPH---"] = icn["TP.HARBOR"]; //TACGRP.C2GM.GNL.PNT.HBR
bbox["G-G-GPH---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPHQ--"] = icn["TP.HARBOR POINT Q"]; //TACGRP.C2GM.GNL.PNT.HBR.PNTQ
bbox["G-G-GPHQ--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPHA--"] = icn["TP.HARBOR POINT A"]; //TACGRP.C2GM.GNL.PNT.HBR.PNTA
bbox["G-G-GPHA--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPHY--"] = icn["TP.HARBOR POINT Y"]; //TACGRP.C2GM.GNL.PNT.HBR.PNTY
bbox["G-G-GPHY--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPHX--"] = icn["TP.HARBOR POINT X"]; //TACGRP.C2GM.GNL.PNT.HBR.PNTX
bbox["G-G-GPHX--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPO---"] = icn["TP.ROUTE"]; //TACGRP.C2GM.GNL.PNT.RTE
bbox["G-G-GPO---"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPOZ--"] = icn["TP.ROUTE RENDEZVOUS"]; //TACGRP.C2GM.GNL.PNT.RTE.RDV
bbox["G-G-GPOZ--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-G-GPOD--"] = icn["TP.ROUTE DIVERSIONS"]; //TACGRP.C2GM.GNL.PNT.RTE.DVSN
bbox["G-G-GPOD--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-G-GPOW--"] = icn["TP.ROUTE WAYPOINT"]; //TACGRP.C2GM.GNL.PNT.RTE.WAP
bbox["G-G-GPOW--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-G-GPOP--"] = icn["TP.ROUTE PIM"]; //TACGRP.C2GM.GNL.PNT.RTE.PIM
bbox["G-G-GPOP--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-G-GPOR--"] = icn["TP.ROUTE POINT R"]; //TACGRP.C2GM.GNL.PNT.RTE.PNTR
bbox["G-G-GPOR--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-G-GPA---"] = icn["TP.AIR CONTROL POINT"]; //TACGRP.C2GM.GNL.PNT.ACTL
bbox["G-G-GPA---"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAP--"] = icn["TP.COMBAT AIR PATROL (CAP)"]; //TACGRP.C2GM.GNL.PNT.ACTL.CAP
bbox["G-G-GPAP--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAW--"] = icn["TP.AIRBORNE EARLY WARNING (AEW)"]; //TACGRP.C2GM.GNL.PNT.ACTL.ABNEW
bbox["G-G-GPAW--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAK--"] = icn["TP.TANKING"]; //TACGRP.C2GM.GNL.PNT.ACTL.TAK
bbox["G-G-GPAK--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAA--"] = icn["TP.FIXED WING"]; //TACGRP.C2GM.GNL.PNT.ACTL.ASBWF
bbox["G-G-GPAA--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAH--"] = icn["TP.ROTARY WING"]; //TACGRP.C2GM.GNL.PNT.ACTL.ASBWR
bbox["G-G-GPAH--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAB--"] = icn["TP.SUCAP - FIXED WING"]; //TACGRP.C2GM.GNL.PNT.ACTL.SUWF
bbox["G-G-GPAB--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAC--"] = icn["TP.SUCAP - ROTARY WING"]; //TACGRP.C2GM.GNL.PNT.ACTL.SUWR
bbox["G-G-GPAC--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAD--"] = icn["TP.MIW - FIXED WING"]; //TACGRP.C2GM.GNL.PNT.ACTL.MIWF
bbox["G-G-GPAD--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAE--"] = icn["TP.MIW - ROTARY WING"]; //TACGRP.C2GM.GNL.PNT.ACTL.MIWR
bbox["G-G-GPAE--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-G-GPAS--"] = icn["TP.STRIKE IP"]; //TACGRP.C2GM.GNL.PNT.ACTL.SKEIP
bbox["G-G-GPAS--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAT--"] = icn["TP.TACAN"]; //TACGRP.C2GM.GNL.PNT.ACTL.TCN
bbox["G-G-GPAT--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAO--"] = icn["TP.TOMCAT"]; //TACGRP.C2GM.GNL.PNT.ACTL.TMC
bbox["G-G-GPAO--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAR--"] = icn["TP.RESCUE"]; //TACGRP.C2GM.GNL.PNT.ACTL.RSC
bbox["G-G-GPAR--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAL--"] = icn["TP.REPLENISH"]; //TACGRP.C2GM.GNL.PNT.ACTL.RPH
bbox["G-G-GPAL--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAF--"] = icn["TP.UNMANNED AERIAL SYSTEM"]; //TACGRP.C2GM.GNL.PNT.ACTL.UA
bbox["G-G-GPAF--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAG--"] = icn["TP.VTUA"]; //TACGRP.C2GM.GNL.PNT.ACTL.VTUA
bbox["G-G-GPAG--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAI--"] = icn["TP.ORBIT"]; //TACGRP.C2GM.GNL.PNT.ACTL.ORB
bbox["G-G-GPAI--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAJ--"] = icn["TP.ORBIT - FIGURE EIGHT"]; //TACGRP.C2GM.GNL.PNT.ACTL.ORBF8
bbox["G-G-GPAJ--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAM--"] = icn["TP.ORBIT - RACE TRACK"]; //TACGRP.C2GM.GNL.PNT.ACTL.ORBRT
bbox["G-G-GPAM--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPAN--"] = icn["TP.ORBIT - RANDOM, CLOSED"]; //TACGRP.C2GM.GNL.PNT.ACTL.ORBRD
bbox["G-G-GPAN--"] = { x1: 60, x2: 140, y1: 30, y2: 170 };
sidc["G-G-GPP---"] = icn["TP.ACTION POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT
bbox["G-G-GPP---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPK--"] = icn["TP.ACTION CHECK POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.CHKPNT
bbox["G-G-GPPK--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPC--"] = icn["TP.CONTACT POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.CONPNT
bbox["G-G-GPPC--"] = { x1: 55, x2: 145, y1: -10 };
sidc["G-G-GPPO--"] = icn["TP.COORDINATION POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.CRDPNT
bbox["G-G-GPPO--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-GPPD--"] = icn["TP.DECISION POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.DCNPNT
bbox["G-G-GPPD--"] = { x1: 30, x2: 170, y1: 25, y2: 160 };
sidc["G-G-GPPL--"] = icn["TP.ACTION LINKUP POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.LNKUPT
bbox["G-G-GPPL--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPP--"] = icn["TP.ACTION PASSAGE POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.PSSPNT
bbox["G-G-GPPP--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPR--"] = icn["TP.ACTION RALLY POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.RAYPNT
bbox["G-G-GPPR--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPE--"] = icn["TP.ACTION RELEASE POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.RELPNT
bbox["G-G-GPPE--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPS--"] = icn["TP.ACTION START POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.STRPNT
bbox["G-G-GPPS--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPA--"] = icn["TP.ACTION AMNESTY POINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.AMNPNT
bbox["G-G-GPPA--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-GPPW--"] = icn["TP.WAYPOINT"]; //TACGRP.C2GM.GNL.PNT.ACTPNT.WAP
bbox["G-G-GPPW--"] = { x1: 60, x2: 140, y1: 60, y2: 140 };
sidc["G-G-GPC---"] = icn["TP.SEA SURFACE CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL
bbox["G-G-GPC---"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCU--"] = icn["TP.(USV) CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.USV
bbox["G-G-GPCU--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCUR-"] = icn["TP.(RMV) USV CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.USV.RMV
bbox["G-G-GPCUR-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCUA-"] = icn["TP.USV - ASW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.USV.ASW
bbox["G-G-GPCUA-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCUS-"] = icn["TP.USV - SUW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.USV.SUW
bbox["G-G-GPCUS-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCUM-"] = icn["TP.USV - MIW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.USV.MIW
bbox["G-G-GPCUM-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCA--"] = icn["TP.ASW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.ASW
bbox["G-G-GPCA--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCS--"] = icn["TP.SUW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.SUW
bbox["G-G-GPCS--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCM--"] = icn["TP.MIW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.MIW
bbox["G-G-GPCM--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCP--"] = icn["TP.PICKET CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.PKT
bbox["G-G-GPCP--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCR--"] = icn["TP.RENDEZVOUS CONTROL POINT"]; //TACGRP.C2GM.GNL.PNT.SCTL.RDV
bbox["G-G-GPCR--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCC--"] = icn["TP.RESCUE CONTROL POINT"]; //TACGRP.C2GM.GNL.PNT.SCTL.RSC
bbox["G-G-GPCC--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCE--"] = icn["TP.REPLENISHMENT CONTROL POINT"]; //TACGRP.C2GM.GNL.PNT.SCTL.REP
bbox["G-G-GPCE--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPCN--"] = icn["TP.NONCOMBATANT CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.SCTL.NCBTT
bbox["G-G-GPCN--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPB---"] = icn["TP.SUB SURFACE CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL
bbox["G-G-GPB---"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPBU--"] = icn["TP.(UUV) CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL.UUV
bbox["G-G-GPBU--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPBUA-"] = icn["TP.UUV - ASW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL.UUV.ASW
bbox["G-G-GPBUA-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPBUS-"] = icn["TP.UUV - SUW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL.UUV.SUW
bbox["G-G-GPBUS-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPBUM-"] = icn["TP.UUV - MIW CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL.UUV.MIW
bbox["G-G-GPBUM-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPBS--"] = icn["TP.SUBMARINE CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL.SBSTN
bbox["G-G-GPBS--"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-GPBSA-"] = icn["TP.ASW SUBMARINE CONTROL STATION"]; //TACGRP.C2GM.GNL.PNT.UCTL.SBSTN.ASW
bbox["G-G-GPBSA-"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-G-APP---"] = icn["TP.AIR CONTROL POINT (ACP)"]; //TACGRP.C2GM.AVN.PNT.ACP
bbox["G-G-APP---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-APC---"] = icn["TP.COMMUNICATIONS CHECKPOINT"]; //TACGRP.C2GM.AVN.PNT.COMMCP
bbox["G-G-APC---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-G-APU---"] = icn["TP.PULL-UP POINT"]; //TACGRP.C2GM.AVN.PNT.PUP
bbox["G-G-APU---"] = { x1: 50, x2: 240, y1: 50, y2: 150 };
sidc["G-G-APD---"] = icn["TP.DOWNED AIRCREW PICKUP POINT"]; //TACGRP.C2GM.AVN.PNT.DAPP
bbox["G-G-APD---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-G-PN----"] = icn["TP.DUMMY MINEFIELD"]; //TACGRP.C2GM.DCPN.DMYMS
bbox["G-G-PN----"] = { x1: 40, x2: 160, y1: -10, y2: 140 };
sidc["G-G-DPT---"] = icn["TP.TARGET REFERENCE"]; //TACGRP.C2GM.DEF.PNT.TGTREF
sidc["G-G-DPO---"] = icn["TP.OBSERVATION POST/OUTPOST"]; //TACGRP.C2GM.DEF.PNT.OBSPST
bbox["G-G-DPO---"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-G-DPOC--"] = icn["TP.COMBAT OUTPOST"]; //TACGRP.C2GM.DEF.PNT.OBSPST.CBTPST
bbox["G-G-DPOC--"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-G-DPOR--"] = icn["TP.OBSERVATION POST/RECONNAISSANCE"]; //TACGRP.C2GM.DEF.PNT.OBSPST.RECON
bbox["G-G-DPOR--"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-G-DPOF--"] = icn["TP.FORWARD OBSERVER POSITION"]; //TACGRP.C2GM.DEF.PNT.OBSPST.FWDOP
bbox["G-G-DPOF--"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-G-DPOS--"] = icn["TP.SENSOR OUTPOST"]; //TACGRP.C2GM.DEF.PNT.OBSPST.SOP
bbox["G-G-DPOS--"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-G-DPON--"] = icn["TP.CBRN OBSERVATION POST"]; //TACGRP.C2GM.DEF.PNT.OBSPST.CBRNOP
bbox["G-G-DPON--"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-G-OPP---"] = icn["TP.POINT OF DEPARTURE"]; //TACGRP.C2GM.OFF.PNT.PNTD
bbox["G-G-OPP---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-OAOF--"] = icn["TP.FIXED AND PREFABRICATED"]; //TACGRP.MOBSU.OBST.ATO.TDTSM.FIXPFD
bbox["G-M-OAOF--"] = { x1: 60, x2: 140, y1: 30 };
sidc["G-M-OAOM--"] = icn["TP.TETRAHEDRONS"]; //TACGRP.MOBSU.OBST.ATO.TDTSM.MVB
bbox["G-M-OAOM--"] = { x1: 60, x2: 140, y1: 30 };
sidc["G-M-OAOP--"] = icn["TP.TETRAHEDRONS MOVABLE"]; //TACGRP.MOBSU.OBST.ATO.TDTSM.MVBPFD
bbox["G-M-OAOP--"] = { x1: 60, x2: 140, y1: 30 };
sidc["G-M-OB----"] = icn["TP.BOOBY TRAP"]; //TACGRP.MOBSU.OBST.BBY
sidc["G-M-OMU---"] = icn["TP.UNSPECIFIED MINE"]; //TACGRP.MOBSU.OBST.MNE.USPMNE
sidc["G-M-OMT---"] = icn["TP.ANTITANK MINE (AT)"]; //TACGRP.MOBSU.OBST.MNE.ATMNE
sidc["G-M-OMD---"] = icn["TP.(AT) ANTIHANDLING DEVICE"]; //TACGRP.MOBSU.OBST.MNE.ATMAHD
bbox["G-M-OMD---"] = { x1: 60, x2: 140, y1: 40, y2: 195 };
sidc["G-M-OME---"] = icn["TP.(AT) DIRECTIONAL"]; //TACGRP.MOBSU.OBST.MNE.ATMDIR
bbox["G-M-OME---"] = { x1: 60, x2: 140, y1: 10, y2: 140 };
sidc["G-M-OMP---"] = icn["TP.ANTIPERSONNEL (AP) MINES"]; //TACGRP.MOBSU.OBST.MNE.APMNE
sidc["G-M-OMW---"] = icn["TP.WIDE AREA MINES"]; //TACGRP.MOBSU.OBST.MNE.WAMNE
sidc["G-M-OFS---"] = icn["TP.MINEFIELDS STATIC"]; //TACGRP.MOBSU.OBST.MNEFLD.STC
bbox["G-M-OFS---"] = { x1: 40, x2: 160, y1: 60, y2: 140 };
sidc["G-M-OHTL--"] = icn["TP.TOWER LOW"]; //TACGRP.MOBSU.OBST.AVN.TWR.LOW
bbox["G-M-OHTL--"] = { x1: 50, x2: 150, y1: 30, y2: 120 };
sidc["G-M-OHTH--"] = icn["TP.TOWER HIGH"]; //TACGRP.MOBSU.OBST.AVN.TWR.HIGH
bbox["G-M-OHTH--"] = { x1: 50, x2: 150, y1: 30, y2: 120 };
sidc["G-M-BCP---"] = icn["TP.ENGINEER REGULATING POINT"]; //TACGRP.MOBSU.OBSTBP.CSGSTE.ERP
bbox["G-M-BCP---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-SE----"] = icn["TP.EARTHWORK/FORTIFICATION"]; //TACGRP.MOBSU.SU.ESTOF
sidc["G-M-SF----"] = icn["TP.FORT"]; //TACGRP.MOBSU.SU.FRT
sidc["G-M-SS----"] = icn["TP.SURFACE SHELTER"]; //TACGRP.MOBSU.SU.SUFSHL
sidc["G-M-SU----"] = icn["TP.UNDERGROUND SHELTER"]; //TACGRP.MOBSU.SU.UGDSHL
sidc["G-M-NZ----"] = icn["TP.NUCLEAR DETONATIONS GROUND ZERO"]; //TACGRP.MOBSU.CBRN.NDGZ
bbox["G-M-NZ----"] = { x1: 60, x2: 140, y1: -20 };
sidc["G-M-NF----"] = icn["TP.NUCLEAR FALLOUT PRODUCING"]; //TACGRP.MOBSU.CBRN.FAOTP
bbox["G-M-NF----"] = { x1: 50, x2: 150, y1: -20 };
sidc["G-M-NEB---"] = icn["TP.RELEASE EVENTS BIOLOGICAL"]; //TACGRP.MOBSU.CBRN.REEVNT.BIO
bbox["G-M-NEB---"] = { x1: -10, x2: 140, y1: -20 };
sidc["G-M-NEC---"] = icn["TP.RELEASE EVENTS CHEMICAL"]; //TACGRP.MOBSU.CBRN.REEVNT.CML
bbox["G-M-NEC---"] = { x1: -20, x2: 140, y1: -20 };
sidc["G-M-NDP---"] = icn["TP.DECON SITE/POINT"]; //TACGRP.MOBSU.CBRN.DECONP.USP
bbox["G-M-NDP---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-NDA---"] = icn["TP.ALTERNATE DECON SITE/POINT"]; //TACGRP.MOBSU.CBRN.DECONP.ALTUSP
bbox["G-M-NDA---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-NDT---"] = icn["TP.DECON SITE/POINT (TROOPS)"]; //TACGRP.MOBSU.CBRN.DECONP.TRP
bbox["G-M-NDT---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-NDE---"] = icn["TP.DECON SITE/POINT (EQUIPMENT)"]; //TACGRP.MOBSU.CBRN.DECONP.EQT
bbox["G-M-NDE---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-NDB---"] = icn["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"]; //TACGRP.MOBSU.CBRN.DECONP.EQTTRP
bbox["G-M-NDB---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-NDO---"] =
icn["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"]; //TACGRP.MOBSU.CBRN.DECONP.OPDECN
bbox["G-M-NDO---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-M-NDD---"] = icn["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"]; //TACGRP.MOBSU.CBRN.DECONP.TRGH
bbox["G-M-NDD---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-F-PTS---"] = icn["TP.POINT/SINGLE TARGET"]; //TACGRP.FSUPP.PNT.TGT.PTGT
sidc["G-F-PTN---"] = icn["TP.NUCLEAR TARGET"]; //TACGRP.FSUPP.PNT.TGT.NUCTGT
sidc["G-F-PCF---"] = icn["TP.FIRE SUPPORT STATION"]; //TACGRP.FSUPP.PNT.C2PNT.FSS
sidc["G-F-PCS---"] = icn["TP.SURVEY CONTROL POINT"]; //TACGRP.FSUPP.PNT.C2PNT.SCP
bbox["G-F-PCS---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-F-PCB---"] = icn["TP.FIRING POINT"]; //TACGRP.FSUPP.PNT.C2PNT.FP
bbox["G-F-PCB---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-F-PCR---"] = icn["TP.RELOAD POINT"]; //TACGRP.FSUPP.PNT.C2PNT.RP
bbox["G-F-PCR---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-F-PCH---"] = icn["TP.HIDE POINT"]; //TACGRP.FSUPP.PNT.C2PNT.HP
bbox["G-F-PCH---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-F-PCL---"] = icn["TP.LAUNCH POINT"]; //TACGRP.FSUPP.PNT.C2PNT.LP
bbox["G-F-PCL---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PX----"] = icn["TP.AMBULANCE EXCHANGE POINT"]; //TACGRP.CSS.PNT.AEP
bbox["G-S-PX----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PC----"] = icn["TP.CANNIBALIZATION POINT"]; //TACGRP.CSS.PNT.CBNP
bbox["G-S-PC----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PY----"] = icn["TP.CASUALTY COLLECTION POINT"]; //TACGRP.CSS.PNT.CCP
bbox["G-S-PY----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PT----"] = icn["TP.CIVILIAN COLLECTION POINT"]; //TACGRP.CSS.PNT.CVP
bbox["G-S-PT----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PD----"] = icn["TP.DETAINEE COLLECTION POINT"]; //TACGRP.CSS.PNT.DCP
bbox["G-S-PD----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PE----"] = icn["TP.EPW COLLECTION POINT"]; //TACGRP.CSS.PNT.EPWCP
bbox["G-S-PE----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PL----"] = icn["TP.LOGISTICS RELEASE POINT"]; //TACGRP.CSS.PNT.LRP
bbox["G-S-PL----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PM----"] = icn["TP.MAINTENANCE COLLECTION POINT"]; //TACGRP.CSS.PNT.MCP
bbox["G-S-PM----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PR----"] = icn["TP.REARM, REFUEL AND RESUPPLY POINT"]; //TACGRP.CSS.PNT.RRRP
bbox["G-S-PR----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PU----"] = icn["TP.REFUEL ON THE MOVE POINT"]; //TACGRP.CSS.PNT.ROM
bbox["G-S-PU----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PO----"] = icn["TP.TRAFFIC CONTROL POST"]; //TACGRP.CSS.PNT.TCP
bbox["G-S-PO----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PI----"] = icn["TP.TRAILER TRANSFER POINT"]; //TACGRP.CSS.PNT.TTP
bbox["G-S-PI----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PN----"] = icn["TP.UNIT MAINTENANCE COLLECTION POINT"]; //TACGRP.CSS.PNT.UMC
bbox["G-S-PN----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSZ---"] = icn["TP.SUPPLY POINT"]; //TACGRP.CSS.PNT.SPT.GNL
bbox["G-S-PSZ---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSA---"] = icn["TP.SP CLASS I"]; //TACGRP.CSS.PNT.SPT.CLS1
bbox["G-S-PSA---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSB---"] = icn["TP.SP CLASS II"]; //TACGRP.CSS.PNT.SPT.CLS2
bbox["G-S-PSB---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSC---"] = icn["TP.SP CLASS III"]; //TACGRP.CSS.PNT.SPT.CLS3
bbox["G-S-PSC---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSD---"] = icn["TP.SP CLASS IV"]; //TACGRP.CSS.PNT.SPT.CLS4
bbox["G-S-PSD---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSE---"] = icn["TP.SP CLASS V"]; //TACGRP.CSS.PNT.SPT.CLS5
bbox["G-S-PSE---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSF---"] = icn["TP.SP CLASS VI"]; //TACGRP.CSS.PNT.SPT.CLS6
bbox["G-S-PSF---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSG---"] = icn["TP.SP CLASS VII"]; //TACGRP.CSS.PNT.SPT.CLS7
bbox["G-S-PSG---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSH---"] = icn["TP.SP CLASS VIII"]; //TACGRP.CSS.PNT.SPT.CLS8
bbox["G-S-PSH---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSI---"] = icn["TP.SP CLASS IX"]; //TACGRP.CSS.PNT.SPT.CLS9
bbox["G-S-PSI---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PSJ---"] = icn["TP.SP CLASS X"]; //TACGRP.CSS.PNT.SPT.CLS10
bbox["G-S-PSJ---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PAS---"] = icn["TP.AMMUNITION SUPPLY POINT (ASP)"]; //TACGRP.CSS.PNT.AP.ASP
bbox["G-S-PAS---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-S-PAT---"] = icn["TP.AMMUNITION TRANSFER POINT (ATP)"]; //TACGRP.CSS.PNT.AP.ATP
bbox["G-S-PAT---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-O-ED----"] = icn["TP.DITCHED AIRCRAFT"]; //TACGRP.OTH.ER.DTHAC
sidc["G-O-EP----"] = icn["TP.PERSON IN WATER"]; //TACGRP.OTH.ER.PIW
sidc["G-O-EV----"] = icn["TP.DISTRESSED VESSEL"]; //TACGRP.OTH.ER.DSTVES
sidc["G-O-HM----"] = icn["TP.SEA MINELIKE"]; //TACGRP.OTH.HAZ.SML
bbox["G-O-HM----"] = { x1: 40, x2: 160, y1: 40, y2: 150 };
sidc["G-O-HI----"] = icn["TP.ICEBERG"]; //TACGRP.OTH.HAZ.IB
bbox["G-O-HI----"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-O-HO----"] = icn["TP.OIL RIG/PLATFORM"]; //TACGRP.OTH.HAZ.OLRG
bbox["G-O-HO----"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-O-SB----"] = icn["TP.BOTTOM RETURN"]; //TACGRP.OTH.SSUBSR.BTMRTN
bbox["G-O-SB----"] = { x1: 40, x2: 160, y1: 40, y2: 100 };
sidc["G-O-SBM---"] = icn["TP.INSTALLATION/MANMADE"]; //TACGRP.OTH.SSUBSR.BTMRTN.INS
bbox["G-O-SBM---"] = { x1: 40, x2: 160, y1: 40, y2: 100 };
sidc["G-O-SBN---"] = icn["TP.BOTTOM RETURN"]; //TACGRP.OTH.SSUBSR.BTMRTN.SBRSOO
bbox["G-O-SBN---"] = { x1: 40, x2: 160, y1: 40, y2: 100 };
sidc["G-O-SBW---"] = icn["TP.WRECK, NON DANGEROUS"]; //TACGRP.OTH.SSUBSR.BTMRTN.WRKND
bbox["G-O-SBW---"] = { x1: 40, x2: 160, y1: 70, y2: 130 };
sidc["G-O-SBX---"] = icn["TP.WRECK, DANGEROUS"]; //TACGRP.OTH.SSUBSR.BTMRTN.WRKD
bbox["G-O-SBX---"] = { x1: 40, x2: 160, y1: 70, y2: 130 };
sidc["G-O-SM----"] = icn["TP.MARINE LIFE"]; //TACGRP.OTH.SSUBSR.MARLFE
bbox["G-O-SM----"] = { x1: 100, x2: 220, y1: 70, y2: 130 };
sidc["G-O-SS----"] = icn["TP.SEA ANOMALY"]; //TACGRP.OTH.SSUBSR.SA
bbox["G-O-SS----"] = { x1: 50, x2: 150, y1: 30, y2: 120 };
sidc["G-O-FA----"] = icn["TP.FIX ACOUSTIC"]; //TACGRP.OTH.FIX.ACU
sidc["G-O-FE----"] = icn["TP.FIX ELECTRO-MAGNETIC"]; //TACGRP.OTH.FIX.EM
sidc["G-O-FO----"] = icn["TP.FIX ELECTRO-OPTICAL"]; //TACGRP.OTH.FIX.EOP
}
};

View File

@@ -0,0 +1,392 @@
import { metadata as metadata_letter } from "../metadata.js";
import { geticons as getIcons_letter } from "../geticons.js";
import tacticalpoints from "../../iconparts/tactical-points.js";
import labels from "../labels/tactical-points-app6.js";
export default {
type: "letter",
getMetadata: metadata_letter,
getIcons: getIcons_letter,
iconParts: [tacticalpoints],
labels: labels,
icons: function tacticalPoints(sidc, bbox, icn, std2525) {
// Tactical Point Symbols =========================================================================
sidc["G-T-GD----"] = icn["TP.DESTROY"]; //2.X.1.1.9
bbox["G-T-GD----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
sidc["G-T-GI----"] = icn["TP.INTERDICT"]; //2.X.1.1.13
bbox["G-T-GI----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
sidc["G-T-GN----"] = icn["TP.NEUTRALIZE"]; //2.X.1.1.15
bbox["G-T-GN----"] = { x1: 0, x2: 200, y1: 40, y2: 160 };
sidc["G-C-MGPFE-"] = icn["TP.FIX ELECTRO-MAGNETIC"]; //2.X.2.1.1.1.1.2
sidc["G-C-MGPFA-"] = icn["TP.FIX ACOUSTIC"]; //2.X.2.1.1.1.1.2
sidc["G-C-MGPFO-"] = icn["TP.FIX ELECTRO-OPTICAL"]; //2.X.2.1.1.1.1.3
sidc["G-C-MGPI--"] = icn["TP.POINT OF INTEREST"]; //2.X.2.1.1.1.2
bbox["G-C-MGPI--"] = { x1: 50, x2: 150, y1: -25 };
sidc["G-C-MAAP--"] = icn["TP.AIR CONTROL POINT (ACP)"]; //2.X.2.1.2.1.1
bbox["G-C-MAAP--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-MAAC--"] = icn["TP.COMMUNICATIONS CHECKPOINT"]; //2.X.2.1.2.1.2
bbox["G-C-MAAC--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-MAAU--"] = icn["TP.PULL-UP POINT"]; //2.X.2.1.2.1.3
bbox["G-C-MAAU--"] = { x1: 50, x2: 240, y1: 50, y2: 150 };
sidc["G-C-MAAD--"] = icn["TP.DOWNED AIRCREW PICKUP POINT"]; //2.X.2.1.2.1.4
bbox["G-C-MAAD--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-MDN---"] = icn["TP.DUMMY MINEFIELD"]; //2.X.2.1.3.6
bbox["G-C-MDN---"] = { x1: 40, x2: 160, y1: -10, y2: 140 };
sidc["G-C-MMPT--"] = icn["TP.TARGET REFERENCE"]; //2.X.2.1.4.1.1
sidc["G-C-MMPO--"] = icn["TP.OBSERVATION POST/OUTPOST"]; //2.X.2.1.4.1.4
bbox["G-C-MMPO--"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-C-MMPOC-"] = icn["TP.COMBAT OUTPOST"]; //2.X.2.1.4.1.4.1
bbox["G-C-MMPOC-"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-C-MMPOR-"] = icn["TP.OBSERVATION POST/RECONNAISSANCE"]; //2.X.2.1.4.1.4.2
bbox["G-C-MMPOR-"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-C-MMPOF-"] = icn["TP.FORWARD OBSERVER POSITION"]; //2.X.2.1.4.1.4.3
bbox["G-C-MMPOF-"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-C-MMPOS-"] = icn["TP.SENSOR OUTPOST"]; //2.X.2.1.4.1.4.4
bbox["G-C-MMPOS-"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
sidc["G-C-MMPON-"] = icn["TP.CBRN OBSERVATION POST"]; //2.X.2.1.4.1.4.5
bbox["G-C-MMPON-"] = { x1: 50, x2: 150, y1: 40, y2: 150 };
// Go home APP6 you are drunk sidc['G-C-MMPON-'] = [];//2.X.2.1.4.1.4.6
// Go home APP6 you are drunk sidc['G-C-MMPON-'] = [];//2.X.2.1.4.1.4.7
sidc["G-C-MOPD--"] = icn["TP.POINT OF DEPARTURE"]; //2.X.2.1.5.1.1
bbox["G-C-MOPD--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BOATD-"] = icn["TP.FIXED AND PREFABRICATED"]; //2.X.2.2.1.3.3
bbox["G-C-BOATD-"] = { x1: 60, x2: 140, y1: 30 };
sidc["G-C-BOAB--"] = icn["TP.BOOBY TRAP"]; //2.X.2.2.1.4
sidc["G-C-BOAMA-"] = icn["TP.ANTIPERSONNEL (AP) MINES"]; //2.X.2.2.1.5.1
sidc["G-C-BOAMT-"] = icn["TP.ANTITANK MINE (AT)"]; //2.X.2.2.1.5.2
sidc["G-C-BOAMD-"] = icn["TP.(AT) ANTIHANDLING DEVICE"]; //2.X.2.2.1.5.3
bbox["G-C-BOAMD-"] = { x1: 60, x2: 140, y1: 40, y2: 195 };
sidc["G-C-BOAMC-"] = icn["TP.(AT) DIRECTIONAL"]; //2.X.2.2.1.5.4
bbox["G-C-BOAMC-"] = { x1: 60, x2: 140, y1: 10, y2: 140 };
sidc["G-C-BOAMU-"] = icn["TP.UNSPECIFIED MINE"]; //2.X.2.2.1.5.5
sidc["G-C-BOAMW-"] = icn["TP.WIDE AREA MINES"]; //2.X.2.2.1.5.7
sidc["G-C-BOAIP-"] = icn["TP.PLANNED MINEFIELD"]; //2.X.2.2.1.6.1
bbox["G-C-BOAIP-"] = { x1: 40, x2: 160, y1: 60, y2: 140 };
sidc["G-C-BOAIC-"] = icn["TP.MINEFIELDS STATIC"]; //2.X.2.2.1.6.2
bbox["G-C-BOAIC-"] = { x1: 40, x2: 160, y1: 60, y2: 140 };
sidc["G-C-BOAIN-"] = icn["TP.ANTITANK (AT) MINEFIELD"]; //2.X.2.2.1.6.5
bbox["G-C-BOAIN-"] = { x1: 40, x2: 160, y1: 60, y2: 140 };
sidc["G-C-BOAIS-"] = icn["TP.SCATTERABLE MINES"]; //2.X.2.2.1.6.6
bbox["G-C-BOAIS-"] = { x1: 40, x2: 160, y1: 20, y2: 140 };
sidc["G-C-BOAIH-"] = icn["TP.ANTIPERSONNEL (AP) MINEFIELD"]; //2.X.2.2.1.6.7 ANTIPERSONNEL (AP) MINEFIELD REINFORCED WITH SCATTERABLE WITH SELF-DESTRUCT DATE-TIME-GROUP
bbox["G-C-BOAIH-"] = { x1: 40, x2: 160, y1: 20, y2: 140 };
sidc["G-C-BOAID-"] = icn["TP.SCATTERABLE MINEFIELD WITH SELF-DESTRUCT"]; //2.X.2.2.1.6.8 SCATTERABLE MINEFIELD WITH SELF-DESTRUCT DATE-TIME-GROUP
bbox["G-C-BOAID-"] = { x1: 40, x2: 160, y1: 20, y2: 140 };
sidc["G-C-BOAV--"] = icn["TP.VOLCANO MINEFIELD"]; //2.X.2.2.1.7
bbox["G-C-BOAV--"] = { x1: 40, x2: 160, y1: 20, y2: 140 };
sidc["G-C-BYCG--"] = icn["TP.ENGINEER REGULATING POINT"]; //2.X.2.2.2.2.8
bbox["G-C-BYCG--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BSE---"] = icn["TP.EARTHWORK/FORTIFICATION"]; //2.X.2.2.3.1
sidc["G-C-BSF---"] = icn["TP.FORT"]; //2.X.2.2.3.2
sidc["G-C-BSH---"] = icn["TP.SURFACE SHELTER"]; //2.X.2.2.3.6
sidc["G-C-BSU---"] = icn["TP.UNDERGROUND SHELTER"]; //2.X.2.2.3.7
sidc["G-C-BWN---"] = icn["TP.NUCLEAR DETONATIONS GROUND ZERO"]; //2.X.2.2.4.2
bbox["G-C-BWN---"] = { x1: 60, x2: 140, y1: -20 };
sidc["G-C-BWE---"] = icn["TP.NUCLEAR DETONATIONS GROUND ZERO"]; //2.X.2.2.4.2
bbox["G-C-BWE---"] = { x1: 60, x2: 140, y1: -20 };
sidc["G-C-BWI---"] = icn["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"]; //2.X.2.2.4.4
bbox["G-C-BWI---"] = { x1: 60, x2: 140, y1: -20 };
sidc["G-C-BWF---"] = icn["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"]; //2.X.2.2.4.5
bbox["G-C-BWF---"] = { x1: 60, x2: 140, y1: -20 };
sidc["G-C-BWP---"] = icn["TP.NUCLEAR FALLOUT PRODUCING"]; //2.X.2.2.4.6
bbox["G-C-BWP---"] = { x1: 50, x2: 150, y1: -20 };
sidc["G-C-BWDP--"] = icn["TP.DECON SITE/POINT"]; //2.X.2.2.4.11.1
bbox["G-C-BWDP--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDA--"] = icn["TP.ALTERNATE DECON SITE/POINT"]; //2.X.2.2.4.11.2
bbox["G-C-BWDA--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDT--"] = icn["TP.DECON SITE/POINT (TROOPS)"]; //2.X.2.2.4.11.3
bbox["G-C-BWDT--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDE--"] = icn["TP.DECON SITE/POINT (EQUIPMENT)"]; //2.X.2.2.4.11.4
bbox["G-C-BWDE--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDS--"] = icn["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"]; //2.X.2.2.4.11.5
bbox["G-C-BWDS--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDO--"] =
icn["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"]; //2.X.2.2.4.11.6
bbox["G-C-BWDO--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDG--"] = icn["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"]; //2.X.2.2.4.11.7
bbox["G-C-BWDG--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDEM-"] = icn["TP.DECON POINT (MAIN) EQUIPMENT"]; //2.X.2.2.4.11.8
bbox["G-C-BWDEM-"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-BWDTF-"] = icn["TP.DECON POINT (FORWARD) TROOPS"]; //2.X.2.2.4.11.9
bbox["G-C-BWDTF-"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-FSTP--"] = icn["TP.POINT/SINGLE TARGET"]; //2.X.2.3.1.1.1
sidc["G-C-FSS---"] = icn["TP.FIRE SUPPORT STATION"]; //2.X.2.3.1.2
sidc["G-C-FAU---"] = icn["TP.NUCLEAR TARGET"]; //2.X.2.3.3.9
sidc["G-C-SPA---"] = icn["TP.AMBULANCE EXCHANGE POINT"]; //2.X.2.4.1.1
bbox["G-C-SPA---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPC---"] = icn["TP.CANNIBALIZATION POINT"]; //2.X.2.4.1.2
bbox["G-C-SPC---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPY---"] = icn["TP.CASUALTY COLLECTION POINT"]; //2.X.2.4.1.3
bbox["G-C-SPY---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPT---"] = icn["TP.CIVILIAN COLLECTION POINT"]; //2.X.2.4.1.4
bbox["G-C-SPT---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPD---"] = icn["TP.DETAINEE COLLECTION POINT"]; //2.X.2.4.1.5
bbox["G-C-SPD---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPE---"] = icn["TP.EPW COLLECTION POINT"]; //2.X.2.4.1.6
bbox["G-C-SPE---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPL---"] = icn["TP.LOGISTICS RELEASE POINT"]; //2.X.2.4.1.7
bbox["G-C-SPL---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPM---"] = icn["TP.MAINTENANCE COLLECTION POINT"]; //2.X.2.4.1.8
bbox["G-C-SPM---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPR---"] = icn["TP.REARM, REFUEL AND RESUPPLY POINT"]; //2.X.2.4.1.9
bbox["G-C-SPR---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPU---"] = icn["TP.REFUEL ON THE MOVE POINT"]; //2.X.2.4.1.10
bbox["G-C-SPU---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPO---"] = icn["TP.TRAFFIC CONTROL POST"]; //2.X.2.4.1.11
bbox["G-C-SPO---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPI---"] = icn["TP.TRAILER TRANSFER POINT"]; //2.X.2.4.1.12
bbox["G-C-SPI---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPN---"] = icn["TP.UNIT MAINTENANCE COLLECTION POINT"]; //2.X.2.4.1.13
bbox["G-C-SPN---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQT--"] = icn["TP.SUPPLY POINT"]; //2.X.2.4.1.14.1
bbox["G-C-SPQT--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQA--"] = icn["TP.SP CLASS I"]; //2.X.2.4.1.14.2
bbox["G-C-SPQA--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQB--"] = icn["TP.SP CLASS II"]; //2.X.2.4.1.14.3
bbox["G-C-SPQB--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQC--"] = icn["TP.SP CLASS III"]; //2.X.2.4.1.14.4
bbox["G-C-SPQC--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQD--"] = icn["TP.SP CLASS IV"]; //2.X.2.4.1.14.5
bbox["G-C-SPQD--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQE--"] = icn["TP.SP CLASS V"]; //2.X.2.4.1.14.6
bbox["G-C-SPQE--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQF--"] = icn["TP.SP CLASS VI"]; //2.X.2.4.1.14.7
bbox["G-C-SPQF--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQG--"] = icn["TP.SP CLASS VII"]; //2.X.2.4.1.14.8
bbox["G-C-SPQG--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQH--"] = icn["TP.SP CLASS VIII"]; //2.X.2.4.1.14.9
bbox["G-C-SPQH--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQI--"] = icn["TP.SP CLASS IX"]; //2.X.2.4.1.14.10
bbox["G-C-SPQI--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPQJ--"] = icn["TP.SP CLASS X"]; //2.X.2.4.1.14.11
bbox["G-C-SPQJ--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPMA--"] = icn["TP.AMMUNITION SUPPLY POINT (ASP)"]; //2.X.2.4.1.15.1
bbox["G-C-SPMA--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-SPMT--"] = icn["TP.AMMUNITION TRANSFER POINT (ATP)"]; //2.X.2.4.1.15.2
bbox["G-C-SPMT--"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OX----"] = icn["TP.SPECIAL POINT"]; //2.X.2.5.1
bbox["G-C-OX----"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
sidc["G-C-OXRN--"] = icn["TP.NAVIGATIONAL REFERENCE"]; //2.X.2.5.1.1.1
bbox["G-C-OXRN--"] = { x1: 40, x2: 160, y1: 40, y2: 160 };
// Go home APP6 you are drunk sidc['G-C-OXRD--'] = [];//2.X.2.5.1.1.2 WRONG SIDC IN STANDARD
sidc["G-C-OXUD--"] = icn["TP.DATUM"]; //2.X.2.5.1.2.1
bbox["G-C-OXUD--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXUB--"] = icn["TP.BRIEF CONTACT"]; //2.X.2.5.1.2.2
bbox["G-C-OXUB--"] = { x1: 50, x2: 150, y1: 0, y2: 100 };
sidc["G-C-OXUL--"] = icn["TP.LOST CONTACT"]; //2.X.2.5.1.2.3
bbox["G-C-OXUL--"] = { x1: 50, x2: 150, y1: 0, y2: 100 };
sidc["G-C-OXUS--"] = icn["TP.SINKER"]; //2.X.2.5.1.2.4
bbox["G-C-OXUS--"] = { x1: 50, x2: 150, y1: 0, y2: 100 };
sidc["G-C-OXWA--"] = icn["TP.AIM POINT"]; //2.X.2.5.1.3.1
bbox["G-C-OXWA--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXWD--"] = icn["TP.DROP POINT"]; //2.X.2.5.1.3.2
bbox["G-C-OXWD--"] = { x1: 50, x2: 150, y1: 50, y2: 120 };
sidc["G-C-OXWE--"] = icn["TP.ENTRY POINT"]; //2.X.2.5.1.3.3
bbox["G-C-OXWE--"] = { x1: 50, x2: 150, y1: 50 };
sidc["G-C-OXWG--"] = icn["TP.GROUND ZERO"]; //2.X.2.5.1.3.4
bbox["G-C-OXWG--"] = { x1: 50, x2: 150, y1: 30 };
sidc["G-C-OXWM--"] = icn["TP.MSL DETECT POINT"]; //2.X.2.5.1.3.5
bbox["G-C-OXWM--"] = { x1: 50, x2: 150, y1: 30 };
sidc["G-C-OXWI--"] = icn["TP.IMPACT POINT"]; //2.X.2.5.1.3.6
bbox["G-C-OXWI--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXWP--"] = icn["TP.PREDICTED IMPACT POINT"]; //2.X.2.5.1.3.7
bbox["G-C-OXWP--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXY---"] = icn["TP.SONOBUOY"]; //2.X.2.5.1.4
bbox["G-C-OXY---"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYP--"] = icn["TP.SONOBUOY PATTERN CENTER"]; //2.X.2.5.1.4.1
bbox["G-C-OXYP--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYD--"] = icn["TP.SONOBUOY DIFAR"]; //2.X.2.5.1.4.2
bbox["G-C-OXYD--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYL--"] = icn["TP.SONOBUOY LOFAR"]; //2.X.2.5.1.4.3
bbox["G-C-OXYL--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYC--"] = icn["TP.SONOBUOY CASS"]; //2.X.2.5.1.4.4
bbox["G-C-OXYC--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYS--"] = icn["TP.SONOBUOY DICASS"]; //2.X.2.5.1.4.5
bbox["G-C-OXYS--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYB--"] = icn["TP.SONOBUOY BT"]; //2.X.2.5.1.4.6
bbox["G-C-OXYB--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYA--"] = icn["TP.SONOBUOY ANM"]; //2.X.2.5.1.4.7
bbox["G-C-OXYA--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYV--"] = icn["TP.SONOBUOY VLAD"]; //2.X.2.5.1.4.8
bbox["G-C-OXYV--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYT--"] = icn["TP.SONOBUOY ATAC"]; //2.X.2.5.1.4.9
bbox["G-C-OXYT--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYR--"] = icn["TP.SONOBUOY RO"]; //2.X.2.5.1.4.10
bbox["G-C-OXYR--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXYK--"] = icn["TP.SONOBUOY KINGPIN"]; //2.X.2.5.1.4.11
bbox["G-C-OXYK--"] = { x1: 60, x2: 140, y1: -10, y2: 160 };
sidc["G-C-OXN---"] = icn["TP.FORMATION"]; //2.X.2.5.1.5
bbox["G-C-OXN---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXH---"] = icn["TP.HARBOR"]; //2.X.2.5.1.6
bbox["G-C-OXH---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXHQ--"] = icn["TP.HARBOR POINT Q"]; //2.X.2.5.1.6.1
bbox["G-C-OXHQ--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXHA--"] = icn["TP.HARBOR POINT A"]; //2.X.2.5.1.6.2
bbox["G-C-OXHA--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXHY--"] = icn["TP.HARBOR POINT Y"]; //2.X.2.5.1.6.3
bbox["G-C-OXHY--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXHX--"] = icn["TP.HARBOR POINT X"]; //2.X.2.5.1.6.4
bbox["G-C-OXHX--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXR---"] = icn["TP.ROUTE"]; //2.X.2.5.1.7
bbox["G-C-OXR---"] = { x1: 30, x2: 170, y1: 60, y2: 140 };
sidc["G-C-OXRR--"] = icn["TP.ROUTE RENDEZVOUS"]; //2.X.2.5.1.7.1
bbox["G-C-OXRR--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-C-OXRD--"] = icn["TP.ROUTE DIVERSIONS"]; //2.X.2.5.1.7.2
bbox["G-C-OXRD--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-C-OXRW--"] = icn["TP.ROUTE WAYPOINT"]; //2.X.2.5.1.7.3
bbox["G-C-OXRW--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-C-OXRP--"] = icn["TP.ROUTE PIM"]; //2.X.2.5.1.7.4
bbox["G-C-OXRP--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-C-OXRT--"] = icn["TP.ROUTE POINT R"]; //2.X.2.5.1.7.5
bbox["G-C-OXRT--"] = { x1: 30, x2: 170, y1: 60, y2: 170 };
sidc["G-C-OXSTC-"] = icn["TP.COMBATANT STATION"]; //2.X.2.5.1.8.1
bbox["G-C-OXSTC-"] = { x1: -15, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXSTCP"] = icn["TP.PICKET STATION"]; //2.X.2.5.1.8.1.1
bbox["G-C-OXSTCP"] = { x1: -15, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXSTCA"] = icn["TP.ASW SHIP STATION"]; //2.X.2.5.1.8.1.2
bbox["G-C-OXSTCA"] = { x1: -15, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXSTR-"] = icn["TP.REPLENISHMENT AT SEA (RAS) STATION"]; //2.X.2.5.1.8.2
bbox["G-C-OXSTR-"] = { x1: -15, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXSTH-"] = icn["TP.RESCUE STATION"]; //2.X.2.5.1.8.3
bbox["G-C-OXSTH-"] = { x1: -15, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXSTS-"] = icn["TP.SUBMARINE STATION"]; //2.X.2.5.1.8.4
bbox["G-C-OXSTS-"] = { x1: -15, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXSTSA"] = icn["TP.ASW SUBMARINE STATION"]; //2.X.2.5.1.8.5
bbox["G-C-OXSTSA"] = { x1: -115, x2: 140, y1: 60, y2: 140 };
sidc["G-C-OXS---"] = icn["TP.SEARCH"]; //2.X.2.5.1.9
bbox["G-C-OXS---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXSA--"] = icn["TP.SEARCH AREA"]; //2.X.2.5.1.9.1 TODO
bbox["G-C-OXSA--"] = { x1: 20, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXSD--"] = icn["TP.DIP POSITION"]; //2.X.2.5.1.9.2 TODO
bbox["G-C-OXSD--"] = { x1: 10, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXSC--"] = icn["TP.SEARCH CENTER"]; //2.X.2.5.1.9.3
bbox["G-C-OXSC--"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OXAC--"] = icn["TP.COMBAT AIR PATROL (CAP)"]; //2.X.2.5.1.10.1
bbox["G-C-OXAC--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAA--"] = icn["TP.AIRBORNE EARLY WARNING (AEW)"]; //2.X.2.5.1.10.2
bbox["G-C-OXAA--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAT--"] = icn["TP.TACAN"]; //2.X.2.5.1.10.3
bbox["G-C-OXAT--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAK--"] = icn["TP.TANKING"]; //2.X.2.5.1.10.4
bbox["G-C-OXAK--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAF--"] = icn["TP.FIXED WING"]; //2.X.2.5.1.10.5
bbox["G-C-OXAF--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAH--"] = icn["TP.ROTARY WING"]; //2.X.2.5.1.10.6
bbox["G-C-OXAH--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAO--"] = icn["TP.TOMCAT"]; //2.X.2.5.1.10.7
bbox["G-C-OXAO--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAR--"] = icn["TP.RESCUE"]; //2.X.2.5.1.10.8
bbox["G-C-OXAR--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAP--"] = icn["TP.REPLENISH"]; //2.X.2.5.1.10.9
bbox["G-C-OXAP--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAM--"] = icn["TP.MARSHALL"]; //2.X.2.5.1.10.10
bbox["G-C-OXAM--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAS--"] = icn["TP.STRIKE IP"]; //2.X.2.5.1.10.11
bbox["G-C-OXAS--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OXAD--"] = icn["TP.CORRIDOR TAB POINT"]; //2.X.2.5.1.10.12
bbox["G-C-OXAD--"] = { x1: 60, x2: 140, y1: 40, y2: 160 };
sidc["G-C-OG----"] = icn["TP.ACTION POINT"]; //2.X.2.5.2
bbox["G-C-OG----"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGC---"] = icn["TP.ACTION POINT"]; //2.X.2.5.2.1
bbox["G-C-OGC---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGP---"] = icn["TP.CONTACT POINT"]; //2.X.2.5.2.2
bbox["G-C-OGP---"] = { x1: 55, x2: 145, y1: -10 };
sidc["G-C-OGT---"] = icn["TP.COORDINATION POINT"]; //2.X.2.5.2.3
bbox["G-C-OGT---"] = { x1: 50, x2: 150, y1: 50, y2: 150 };
sidc["G-C-OGD---"] = icn["TP.DECISION POINT"]; //2.X.2.5.2.4
bbox["G-C-OGD---"] = { x1: 30, x2: 170, y1: 25, y2: 160 };
sidc["G-C-OGL---"] = icn["TP.ACTION LINKUP POINT"]; //2.X.2.5.2.5
bbox["G-C-OGL---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGN---"] = icn["TP.ACTION PASSAGE POINT"]; //2.X.2.5.2.6
bbox["G-C-OGN---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGR---"] = icn["TP.ACTION RALLY POINT"]; //2.X.2.5.2.7
bbox["G-C-OGR---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGS---"] = icn["TP.ACTION RELEASE POINT"]; //2.X.2.5.2.8
bbox["G-C-OGS---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGI---"] = icn["TP.ACTION START POINT"]; //2.X.2.5.2.9
bbox["G-C-OGI---"] = { x1: 60, x2: 140, y1: -60 };
sidc["G-C-OGW---"] = icn["TP.WAYPOINT"]; //2.X.2.5.2.10
bbox["G-C-OGW---"] = { x1: 60, x2: 140, y1: 60, y2: 140 };
sidc["G-O-VA----"] = icn["TP.FIRE"]; //2.X.3.1.1
sidc["G-O-VR----"] = icn["GR.EQ.HOWITZER"]; //2.X.3.1.2
sidc["G-O-VE----"] = icn["ST.IC.KILLING VICTIM"]; //2.X.3.1.3
sidc["G-O-VB----"] = icn["AIR.MISSILE.IC.BOMB"]; //2.X.3.1.4
sidc["G-O-VY----"] = icn["ST.IC.BOOBY TRAP"]; //2.X.3.1.5
sidc["G-O-VD----"] = icn["ST.IC.DRIVE-BY SHOOTING"]; //2.X.3.1.6
sidc["G-O-VI----"] = icn["TP.INDIRECT FIRE"]; //2.X.3.1.7
sidc["G-O-VM----"] = icn["GR.EQ.MORTAR"]; //2.X.3.1.8
sidc["G-O-VK----"] = icn["GR.EQ.MULTIPLE ROCKET LAUNCHER"]; //2.X.3.1.9
sidc["G-O-VS----"] = icn["ST.IC.SNIPING"]; //2.X.3.1.10
sidc["G-O-VP----"] = icn["ST.IC.POISONING"]; //2.X.3.1.11
sidc["G-O-VU----"] = icn["TP.AMBUSH"]; //2.X.3.1.12
sidc["G-O-VC----"] = icn["GR.IC.FF.CLASS V"]; //2.X.3.1.13
sidc["G-O-VH----"] = icn["AR.I.FF.CIVILIAN ROTARY WING"]; //2.X.3.1.14
sidc["G-O-VF----"] = [icn["GR.IC.FF.INFANTRY"], icn["GR.IC.FF.MOTORIZED"]]; //2.X.3.1.15
sidc["G-O-VO----"] = icn["GR.IC.FF.INFANTRY"]; //2.X.3.1.16
sidc["G-O-VL----"] = icn["GR.IC.FF.RECONNAISSANCE"]; //2.X.3.1.17
sidc["G-O-VX----"] = icn["GR.IC.FF.SIGNAL"]; //2.X.3.1.18
sidc["G-O-VZ----"] = icn["GR.IC.FF.SUPPLY"]; //2.X.3.1.19
sidc["G-O-LB----"] = icn["ST.IC.BLACK LIST LOCATION"]; //2.X.3.2.1
sidc["G-O-LG----"] = icn["ST.IC.GRAY LIST LOCATION"]; //2.X.3.2.2
sidc["G-O-LW----"] = icn["ST.IC.WHITE LIST LOCATION"]; //2.X.3.2.3
sidc["G-O-PR----"] = icn["TP.ROAD BLOCK"]; //2.X.3.3.1
sidc["G-O-PRB---"] = icn["TP.ROAD BLOCK (UNDER CONSTRUCTION)"]; //2.X.3.3.1.1
sidc["G-O-PT----"] = icn["ST.IC.PATROLLING"]; //2.X.3.3.2
sidc["G-O-PC----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.WILLING"]]; //2.X.3.3.3
sidc["G-O-PCU---"] = [
icn["ST.IC.INDIVIDUAL"],
icn["ST.M1.COERCED/IMPRESSED"]
]; //2.X.3.3.3.1
sidc["G-O-PD----"] = icn["ST.IC.DEMONSTRATION"]; //2.X.3.3.4
sidc["G-O-PM----"] = icn["ST.IC.MINE LAYING"]; //2.X.3.3.5
sidc["G-O-PH----"] = icn["ST.IC.PSYCHOLOGICAL OPERATIONS"]; //2.X.3.3.6
sidc["G-O-PHY---"] =
icn["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]; //2.X.3.3.6.1
sidc["G-O-PHW---"] = [
icn["ST.IC.PSYCHOLOGICAL OPERATIONS"],
icn["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]
]; //2.X.3.3.6.2
sidc["G-O-PHG---"] = [
icn["ST.IC.PSYCHOLOGICAL OPERATIONS"],
icn["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]
]; //2.X.3.3.6.3
sidc["G-O-PHT---"] = [
icn["ST.IC.PSYCHOLOGICAL OPERATIONS"],
icn["ST.M1.HOUSE-TO-HOUSE"]
]; //2.X.3.3.6.4
sidc["G-O-PG----"] = icn["ST.IC.SEARCHING"]; //2.X.3.3.7
sidc["G-O-PS----"] = icn["ST.IC.SPY"]; //2.X.3.3.8
sidc["G-O-PF----"] = icn["ST.IC.FOOD DISTRIBUTION"]; //2.X.3.3.9
sidc["G-O-PI----"] = icn["GR.IC.FF.MEDICAL TREATMENT FACILITY"]; //2.X.3.3.10
sidc["G-O-PE----"] = [
icn["GR.IC.ELECTRONIC WARFARE"],
icn["GR.IC.FF.INTERCEPT"]
]; //2.X.3.3.11
sidc["G-O-PX----"] = icn["ST.IC.EXTORTION"]; //2.X.3.3.12
sidc["G-O-PJV---"] = [
icn["ST.IC.KNOWN INSURGENT VEHICLE"],
icn["ST.M1.HIJACKING/HIJACKED"]
]; //2.X.3.3.13.1
sidc["G-O-PJA---"] = [
icn["ST.IC.HIJACKING (AIRPLANE)"],
icn["ST.M1.HIJACKING/HIJACKED"]
]; //2.X.3.3.13.2
sidc["G-O-PJB---"] = [
icn["ST.IC.HIJACKING (BOAT)"],
icn["ST.M1.HIJACKING/HIJACKED"]
]; //2.X.3.3.13.3
sidc["G-O-PK----"] = [icn["ST.IC.INDIVIDUAL"], icn["ST.M1.KIDNAPPING"]]; //2.X.3.3.14
sidc["G-O-PA----"] = icn["ST.IC.ARREST"]; //2.X.3.3.15
sidc["G-O-PO----"] = icn["ST.IC.DRUG RELATED ACTIVITIES"]; //2.X.3.3.16
sidc["G-O-IR----"] = icn["ST.IC.GROUP"]; //2.X.3.4.1
sidc["G-O-IS----"] = icn["ST.IC.SAFE HOUSE"]; //2.X.3.4.2
sidc["G-O-IG----"] = icn["ST.IC.GRAFFITI"]; //2.X.3.4.3
sidc["G-O-IV----"] = icn["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]; //2.X.3.4.4
sidc["G-O-IK----"] = icn["ST.IC.KNOWN INSURGENT VEHICLE"]; //2.X.3.4.5
sidc["G-O-ID----"] = [
icn["ST.IC.KNOWN INSURGENT VEHICLE"],
icn["ST.M1.DRUG"]
]; //2.X.3.4.6
sidc["G-O-IF----"] = icn["ST.IC.INTERNAL SECURITY FORCE"]; //2.X.3.4.7
}
};

12
node_modules/milsymbol/src/milsymbol.js generated vendored Normal file
View File

@@ -0,0 +1,12 @@
/* ***************************************************************************************
Creating the base of milsymbol
*************************************************************************************** */
import { ms } from "./ms.js";
import Symbol from "./ms/symbol.js";
ms.Symbol = Symbol;
/* ***************************************************************************************
Export ms to the world
*************************************************************************************** */
export { ms };

239
node_modules/milsymbol/src/ms.js generated vendored Normal file
View File

@@ -0,0 +1,239 @@
var ms = new (function() {
this._autoValidation = false;
this.version = "2.0.0";
if (typeof console === "object" && typeof process !== "object") {
console.info(
"milsymbol.js " +
this.version +
" - Copyright (c) 2018 M" +
String.fromCharCode(229) +
"ns Beckman http://www.spatialillusions.com"
);
}
})();
import ColorModes from "./colormodes.js";
import basegeometry from "./symbolfunctions/basegeometry.js";
import icon from "./symbolfunctions/icon.js";
import modifier from "./symbolfunctions/modifier.js";
import statusmodifier from "./symbolfunctions/statusmodifier.js";
import engagmentbar from "./symbolfunctions/engagmentbar.js";
import affliationdimension from "./symbolfunctions/affliationdimension.js";
import textfields from "./symbolfunctions/textfields.js";
import directionarrow from "./symbolfunctions/directionarrow.js";
ms.setColorMode = function(mode, colorMode) {
this._colorModes[mode] = {};
this._colorModes[mode].Hostile = colorMode.Hostile;
this._colorModes[mode].Friend = colorMode.Friend;
this._colorModes[mode].Neutral = colorMode.Neutral;
this._colorModes[mode].Unknown = colorMode.Unknown;
this._colorModes[mode].Civilian = colorMode.Civilian;
return this._colorModes[mode];
};
ms.addSymbolPart = function(part) {
if (typeof part === "function") {
var symbolParts = ms.getSymbolParts();
if (symbolParts.indexOf(part) == -1)
ms.setSymbolParts(symbolParts.concat(part));
}
return ms;
};
ms.getSymbolParts = function() {
return this._symbolParts.slice(0);
};
ms.setSymbolParts = function(parts) {
this._symbolParts = parts;
return ms;
};
ms.reset = function() {
this._brokenPath2D = undefined;
this._colorModes = {};
for (var name in ColorModes) {
ms.setColorMode(name, ColorModes[name]);
}
this._dashArrays = {
pending: "4,4",
anticipated: "8,12",
feintDummy: "8,8"
};
this._getIcons = {};
this._getMetadata = {};
this._hqStaffLength = 100;
this._iconCache = {}; // A cache of icn to speed stuff up...
this._iconParts = [];
this._labelCache = {}; // A cache of label overrides to speed stuff up...
this._labelOverrides = {};
this._iconSIDC = {};
this._iconSIDC.letter = [];
this._iconSIDC.number = [];
this._STD2525 = true;
this._svgNS = "http://www.w3.org/2000/svg";
this._symbolParts = [];
ms.addSymbolPart(basegeometry);
ms.addSymbolPart(icon);
ms.addSymbolPart(modifier);
ms.addSymbolPart(statusmodifier);
ms.addSymbolPart(engagmentbar);
ms.addSymbolPart(affliationdimension);
ms.addSymbolPart(textfields);
ms.addSymbolPart(directionarrow);
};
ms.reset();
import { BBox } from "./ms/bbox.js";
import { Colormode } from "./ms/colormode.js";
ms.BBox = BBox;
ms.ColorMode = Colormode;
ms.setBrokenPath2D = function(broken) {
ms._brokenPath2D = broken;
};
ms._getIconParts = function iconparts(
metadata,
colors,
_STD2525,
monoColor,
alternateMedal
) {
var icn = {};
for (var i in this._iconParts) {
if (!this._iconParts.hasOwnProperty(i)) continue;
this._iconParts[i].call(
this,
icn,
metadata,
colors,
_STD2525,
monoColor,
alternateMedal
);
}
return icn;
};
ms._scale = function(factor, instruction) {
return {
type: "translate",
x: 100 - factor * 100,
y: 100 - factor * 100,
draw: [{ type: "scale", factor: factor, draw: [instruction] }]
};
};
ms._translate = function(x, y, instruction) {
return { type: "translate", x: x, y: y, draw: [instruction] };
};
ms.addIconParts = function(parts) {
if (!Array.isArray(parts)) parts = [parts];
for (var i = 0; i < parts.length; i++) {
if (
typeof parts[i] === "function" &&
this._iconParts.indexOf(parts[i]) == -1
) {
this._iconParts = this._iconParts.concat(parts[i]);
}
}
return ms;
};
ms.addLabelOverrides = function(parts, type) {
this._labelCache = {}; // Clear the cache
if (typeof parts === "function") {
if (!this._labelOverrides.hasOwnProperty(type)) {
this._labelOverrides[type] = [];
}
this._labelOverrides[type] = this._labelOverrides[type].concat(parts);
}
return ms;
};
ms.addIcons = function(obj) {
this._iconCache = {}; // Clear the cache
if (!Array.isArray(obj)) obj = [obj];
for (var i = 0; i < obj.length; i++) {
if (obj[i].hasOwnProperty("getMetadata"))
ms._getMetadata[obj[i].type] = obj[i].getMetadata;
if (obj[i].hasOwnProperty("getIcons"))
ms._getIcons[obj[i].type] = obj[i].getIcons;
if (obj[i].hasOwnProperty("iconParts")) ms.addIconParts(obj[i].iconParts);
if (obj[i].hasOwnProperty("labels"))
ms.addLabelOverrides(obj[i].labels, obj[i].type);
if (obj[i].hasOwnProperty("icons"))
ms.addSIDCicons(obj[i].icons, obj[i].type);
}
};
ms.addSIDCicons = function(parts, type) {
if (typeof parts === "function") {
if (this._iconSIDC[type].indexOf(parts) == -1)
this._iconSIDC[type] = this._iconSIDC[type].concat(parts);
}
return ms;
};
ms.getColorMode = function(mode) {
var c = this._colorModes[mode];
// Clone the mode and return the clone
return new ms.ColorMode(
c.Civilian,
c.Friend,
c.Hostile,
c.Neutral,
c.Unknown
);
};
ms.getDashArrays = function() {
return this._dashArrays;
};
ms.getHqStaffLength = function() {
return this._hqStaffLength;
};
ms.getVersion = function() {
return this.version;
};
import outline from "./ms/outline.js";
ms.outline = outline;
ms.setDashArrays = function(pending, anticipated, feintDummy) {
this._dashArrays.pending = pending;
this._dashArrays.anticipated = anticipated;
this._dashArrays.feintDummy = feintDummy;
return this._dashArrays;
};
ms.setHqStaffLength = function(len) {
this._hqStaffLength = len;
return this._hqStaffLength;
};
ms.setStandard = function(standard) {
if (standard == "2525") {
this._STD2525 = true;
return true;
}
if (standard == "APP6") {
this._STD2525 = false;
return true;
}
return false;
};
/* ***************************************************************************************
Add base geometries
*************************************************************************************** */
import geometries from "./ms/symbolgeometries.js";
ms._symbolGeometries = geometries;
export { ms };

Some files were not shown because too many files have changed in this diff Show More