{"version":3,"file":"markers.js","sources":["../../src/plugins/markers/constants.js","../../src/utils/math.js","../../src/PSVError.js","../../src/utils/psv.js","../../src/plugins/markers/utils.js","../../src/plugins/markers/Marker.js","../../src/plugins/markers/MarkersButton.js","../../src/plugins/markers/MarkersListButton.js","../../src/plugins/markers/index.js"],"sourcesContent":["import icon from './pin-list.svg';\n\n/**\n * @summary Available events\n * @enum {string}\n * @memberof PSV.plugins.MarkersPlugin\n * @constant\n */\nexport const EVENTS = {\n /**\n * @event goto-marker-done\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the animation to a marker is done\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n */\n GOTO_MARKER_DONE : 'goto-marker-done',\n /**\n * @event leave-marker\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the user puts the cursor away from a marker\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n */\n LEAVE_MARKER : 'leave-marker',\n /**\n * @event over-marker\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the user puts the cursor hover a marker\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n */\n OVER_MARKER : 'over-marker',\n /**\n * @event filter:render-markers-list\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Used to alter the list of markers displayed on the side-panel\n * @param {PSV.plugins.MarkersPlugin.Marker[]} markers\n * @returns {PSV.plugins.MarkersPlugin.Marker[]}\n */\n RENDER_MARKERS_LIST: 'render-markers-list',\n /**\n * @event select-marker\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the user clicks on a marker. The marker can be retrieved from outside the event handler\n * with {@link PSV.plugins.MarkersPlugin.getCurrentMarker}\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n * @param {PSV.plugins.MarkersPlugin.SelectMarkerData} data\n */\n SELECT_MARKER : 'select-marker',\n /**\n * @event select-marker-list\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when a marker is selected from the side panel\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n */\n SELECT_MARKER_LIST : 'select-marker-list',\n /**\n * @event unselect-marker\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when a marker was selected and the user clicks elsewhere\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n */\n UNSELECT_MARKER : 'unselect-marker',\n /**\n * @event hide-markers\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the markers are hidden\n */\n HIDE_MARKERS : 'hide-markers',\n /**\n * @event set-marker\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the list of markers changes\n * @param {PSV.plugins.MarkersPlugin.Marker[]} markers\n */\n SET_MARKERS : 'set-markers',\n /**\n * @event show-markers\n * @memberof PSV.plugins.MarkersPlugin\n * @summary Triggered when the markers are shown\n */\n SHOW_MARKERS : 'show-markers',\n};\n\n/**\n * @summary Namespace for SVG creation\n * @type {string}\n * @constant\n * @private\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @summary Property name added to marker elements\n * @type {string}\n * @constant\n * @private\n */\nexport const MARKER_DATA = 'psvMarker';\n\n/**\n * @summary Panel identifier for marker content\n * @type {string}\n * @constant\n * @private\n */\nexport const ID_PANEL_MARKER = 'marker';\n\n/**\n * @summary Panel identifier for markers list\n * @type {string}\n * @constant\n * @private\n */\nexport const ID_PANEL_MARKERS_LIST = 'markersList';\n\n/**\n * @summary Markers list template\n * @param {PSV.plugins.MarkersPlugin.Marker[]} markers\n * @param {string} title\n * @param {string} dataKey\n * @returns {string}\n * @constant\n * @private\n */\nexport const MARKERS_LIST_TEMPLATE = (markers, title, dataKey) => `\n
\n

${icon} ${title}

\n \n
\n`;\n","/**\n * @summary Ensures that a number is in a given interval\n * @memberOf PSV.utils\n * @param {number} x\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\nexport function bound(x, min, max) {\n return Math.max(min, Math.min(max, x));\n}\n\n/**\n * @summary Ensure a value is within 0 and `max`\n * @param {number} value\n * @param {number} max\n * @return {number}\n */\nexport function loop(value, max) {\n let result = value % max;\n\n if (result < 0) {\n result += max;\n }\n\n return result;\n}\n\n/**\n * @summary Checks if a value is an integer\n * @memberOf PSV.utils\n * @param {*} value\n * @returns {boolean}\n */\nexport function isInteger(value) {\n if (Number.isInteger) {\n return Number.isInteger(value);\n }\n return typeof value === 'number' && Number.isFinite(value) && Math.floor(value) === value;\n}\n\n/**\n * @summary Tests if a number is power of two\n * @memberOf PSV.utils\n * @param {number} x\n * @return {boolean}\n */\nexport function isPowerOfTwo(x) {\n return (Math.log(x) / Math.log(2)) % 1 === 0;\n}\n\n/**\n * @summary Computes the sum of an array\n * @memberOf PSV.utils\n * @param {number[]} array\n * @returns {number}\n */\nexport function sum(array) {\n return array.reduce((a, b) => a + b, 0);\n}\n\n/**\n * @summary Computes the distance between two points\n * @memberOf PSV.utils\n * @param {PSV.Point} p1\n * @param {PSV.Point} p2\n * @returns {number}\n */\nexport function distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\n/**\n * @summary Compute the shortest offset between two longitudes\n * @memberOf PSV.utils\n * @param {number} from\n * @param {number} to\n * @returns {number}\n */\nexport function getShortestArc(from, to) {\n const tCandidates = [\n 0, // direct\n Math.PI * 2, // clock-wise cross zero\n -Math.PI * 2, // counter-clock-wise cross zero\n ];\n\n return tCandidates.reduce((value, candidate) => {\n const newCandidate = to - from + candidate;\n return Math.abs(newCandidate) < Math.abs(value) ? newCandidate : value;\n }, Infinity);\n}\n\n/**\n * @summary Computes the angle between the current position and a target position\n * @memberOf PSV.utils\n * @param {PSV.Position} position1\n * @param {PSV.Position} position2\n * @returns {number}\n */\nexport function getAngle(position1, position2) {\n return Math.acos(\n Math.cos(position1.latitude)\n * Math.cos(position2.latitude)\n * Math.cos(position1.longitude - position2.longitude)\n + Math.sin(position1.latitude)\n * Math.sin(position2.latitude)\n );\n}\n\n/**\n * @summary Returns the distance between two points on a sphere of radius one\n * {@link http://www.movable-type.co.uk/scripts/latlong.html}\n * @memberOf PSV.utils\n * @param {number[]} p1\n * @param {number[]} p2\n * @returns {number}\n */\nexport function greatArcDistance(p1, p2) {\n const [λ1, φ1] = p1;\n const [λ2, φ2] = p2;\n\n const x = (λ2 - λ1) * Math.cos((φ1 + φ2) / 2);\n const y = (φ2 - φ1);\n return Math.sqrt(x * x + y * y);\n}\n","/**\n * @summary Custom error used in the lib\n * @param {string} message\n * @constructor\n * @memberOf PSV\n */\nfunction PSVError(message) {\n this.message = message;\n\n // Use V8's native method if available, otherwise fallback\n if ('captureStackTrace' in Error) {\n Error.captureStackTrace(this, PSVError);\n }\n else {\n this.stack = (new Error()).stack;\n }\n}\n\nPSVError.prototype = Object.create(Error.prototype);\nPSVError.prototype.name = 'PSVError';\nPSVError.prototype.constructor = PSVError;\n\nexport { PSVError };\n","import * as THREE from 'three';\nimport { PSVError } from '../PSVError';\nimport { bound, loop } from './math';\n\n/**\n * @summary Returns the plugin constructor from the imported object\n * For retrocompatibility with previous default exports\n * @memberOf PSV.utils\n * @package\n */\nexport function pluginInterop(plugin, target) {\n if (plugin) {\n for (const [, p] of [['_', plugin], ...Object.entries(plugin)]) {\n if (p.prototype instanceof target) {\n return p;\n }\n }\n }\n return null;\n}\n\n/**\n * @summary Builds an Error with name 'AbortError'\n * @memberOf PSV.utils\n * @return {Error}\n */\nexport function getAbortError() {\n const error = new Error('Loading was aborted.');\n error.name = 'AbortError';\n return error;\n}\n\n/**\n * @summary Tests if an Error has name 'AbortError'\n * @memberOf PSV.utils\n * @param {Error} err\n * @return {boolean}\n */\nexport function isAbortError(err) {\n return err?.name === 'AbortError';\n}\n\n/**\n * @summary Displays a warning in the console\n * @memberOf PSV.utils\n * @param {string} message\n */\nexport function logWarn(message) {\n console.warn(`PhotoSphereViewer: ${message}`);\n}\n\n/**\n * @summary Checks if an object is a {PSV.ExtendedPosition}, ie has x/y or longitude/latitude\n * @memberOf PSV.utils\n * @param {object} object\n * @returns {boolean}\n */\nexport function isExtendedPosition(object) {\n return [['x', 'y'], ['longitude', 'latitude']].some(([key1, key2]) => {\n return object[key1] !== undefined && object[key2] !== undefined;\n });\n}\n\n/**\n * @summary Returns the value of a given attribute in the panorama metadata\n * @memberOf PSV.utils\n * @param {string} data\n * @param {string} attr\n * @returns (number)\n */\nexport function getXMPValue(data, attr) {\n // XMP data are stored in children\n let result = data.match('(.*)');\n if (result !== null) {\n const val = parseInt(result[1], 10);\n return isNaN(val) ? null : val;\n }\n\n // XMP data are stored in attributes\n result = data.match('GPano:' + attr + '=\"(.*?)\"');\n if (result !== null) {\n const val = parseInt(result[1], 10);\n return isNaN(val) ? null : val;\n }\n\n return null;\n}\n\n/**\n * @readonly\n * @private\n * @type {{top: string, left: string, bottom: string, center: string, right: string}}\n */\nconst CSS_POSITIONS = {\n top : '0%',\n bottom: '100%',\n left : '0%',\n right : '100%',\n center: '50%',\n};\n\n/**\n * @summary Translate CSS values like \"top center\" or \"10% 50%\" as top and left positions\n * @memberOf PSV.utils\n * @description The implementation is as close as possible to the \"background-position\" specification\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-position}\n * @param {string|PSV.Point} value\n * @returns {PSV.Point}\n */\nexport function parsePosition(value) {\n if (!value) {\n return { x: 0.5, y: 0.5 };\n }\n\n if (typeof value === 'object') {\n return value;\n }\n\n let tokens = value.toLocaleLowerCase().split(' ').slice(0, 2);\n\n if (tokens.length === 1) {\n if (CSS_POSITIONS[tokens[0]] !== undefined) {\n tokens = [tokens[0], 'center'];\n }\n else {\n tokens = [tokens[0], tokens[0]];\n }\n }\n\n const xFirst = tokens[1] !== 'left' && tokens[1] !== 'right' && tokens[0] !== 'top' && tokens[0] !== 'bottom';\n\n tokens = tokens.map(token => CSS_POSITIONS[token] || token);\n\n if (!xFirst) {\n tokens.reverse();\n }\n\n const parsed = tokens.join(' ').match(/^([0-9.]+)% ([0-9.]+)%$/);\n\n if (parsed) {\n return {\n x: parseFloat(parsed[1]) / 100,\n y: parseFloat(parsed[2]) / 100,\n };\n }\n else {\n return { x: 0.5, y: 0.5 };\n }\n}\n\n/**\n * @readonly\n * @private\n */\nconst LEFT_MAP = { 0: 'left', 0.5: 'center', 1: 'right' };\n/**\n * @readonly\n * @private\n */\nconst TOP_MAP = { 0: 'top', 0.5: 'center', 1: 'bottom' };\n\n/**\n * @summary Parse a CSS-like position into an array of position keywords among top, bottom, left, right and center\n * @memberOf PSV.utils\n * @param {string | string[]} value\n * @param {string} defaultValue\n * @param {boolean} [allowCenter=true]\n * @return {string[]}\n */\nexport function cleanPosition(value, defaultValue, allowCenter = true) {\n if (!value) {\n return defaultValue.split(' ');\n }\n\n if (typeof value === 'string') {\n const tempPos = parsePosition(value);\n\n if (!(tempPos.x in LEFT_MAP) || !(tempPos.y in TOP_MAP)) {\n throw new PSVError(`Unable to parse position \"${value}\"`);\n }\n\n value = [TOP_MAP[tempPos.y], LEFT_MAP[tempPos.x]];\n }\n\n if (!allowCenter && value[0] === 'center' && value[1] === 'center') {\n throw new PSVError('Unable to parse position \"center center\"');\n }\n\n return value;\n}\n\n/**\n * @summary Parses an speed\n * @memberOf PSV.utils\n * @param {string|number} speed - The speed, in radians/degrees/revolutions per second/minute\n * @returns {number} radians per second\n * @throws {PSV.PSVError} when the speed cannot be parsed\n */\nexport function parseSpeed(speed) {\n let parsed;\n\n if (typeof speed === 'string') {\n const speedStr = speed.toString().trim();\n\n // Speed extraction\n let speedValue = parseFloat(speedStr.replace(/^(-?[0-9]+(?:\\.[0-9]*)?).*$/, '$1'));\n const speedUnit = speedStr.replace(/^-?[0-9]+(?:\\.[0-9]*)?(.*)$/, '$1').trim();\n\n // \"per minute\" -> \"per second\"\n if (speedUnit.match(/(pm|per minute)$/)) {\n speedValue /= 60;\n }\n\n // Which unit?\n switch (speedUnit) {\n // Degrees per minute / second\n case 'dpm':\n case 'degrees per minute':\n case 'dps':\n case 'degrees per second':\n parsed = THREE.Math.degToRad(speedValue);\n break;\n\n // Radians per minute / second\n case 'rdpm':\n case 'radians per minute':\n case 'rdps':\n case 'radians per second':\n parsed = speedValue;\n break;\n\n // Revolutions per minute / second\n case 'rpm':\n case 'revolutions per minute':\n case 'rps':\n case 'revolutions per second':\n parsed = speedValue * Math.PI * 2;\n break;\n\n // Unknown unit\n default:\n throw new PSVError('Unknown speed unit \"' + speedUnit + '\"');\n }\n }\n else {\n parsed = speed;\n }\n\n return parsed;\n}\n\n/**\n * @summary Parses an angle value in radians or degrees and returns a normalized value in radians\n * @memberOf PSV.utils\n * @param {string|number} angle - eg: 3.14, 3.14rad, 180deg\n * @param {boolean} [zeroCenter=false] - normalize between -Pi - Pi instead of 0 - 2*Pi\n * @param {boolean} [halfCircle=zeroCenter] - normalize between -Pi/2 - Pi/2 instead of -Pi - Pi\n * @returns {number}\n * @throws {PSV.PSVError} when the angle cannot be parsed\n */\nexport function parseAngle(angle, zeroCenter = false, halfCircle = zeroCenter) {\n let parsed;\n\n if (typeof angle === 'string') {\n const match = angle.toLowerCase().trim().match(/^(-?[0-9]+(?:\\.[0-9]*)?)(.*)$/);\n\n if (!match) {\n throw new PSVError('Unknown angle \"' + angle + '\"');\n }\n\n const value = parseFloat(match[1]);\n const unit = match[2];\n\n if (unit) {\n switch (unit) {\n case 'deg':\n case 'degs':\n parsed = THREE.Math.degToRad(value);\n break;\n case 'rad':\n case 'rads':\n parsed = value;\n break;\n default:\n throw new PSVError('Unknown angle unit \"' + unit + '\"');\n }\n }\n else {\n parsed = value;\n }\n }\n else if (typeof angle === 'number' && !isNaN(angle)) {\n parsed = angle;\n }\n else {\n throw new PSVError('Unknown angle \"' + angle + '\"');\n }\n\n parsed = loop(zeroCenter ? parsed + Math.PI : parsed, Math.PI * 2);\n\n return zeroCenter ? bound(parsed - Math.PI, -Math.PI / (halfCircle ? 2 : 1), Math.PI / (halfCircle ? 2 : 1)) : parsed;\n}\n\n/**\n * @summary Creates a THREE texture from an image\n * @memberOf PSV.utils\n * @param {HTMLImageElement | HTMLCanvasElement} img\n * @return {external:THREE.Texture}\n */\nexport function createTexture(img) {\n const texture = new THREE.Texture(img);\n texture.needsUpdate = true;\n texture.minFilter = THREE.LinearFilter;\n texture.generateMipmaps = false;\n return texture;\n}\n\nconst quaternion = new THREE.Quaternion();\n\n/**\n * @summary Applies the inverse of Euler angles to a vector\n * @memberOf PSV.utils\n * @param {external:THREE.Vector3} vector\n * @param {external:THREE.Euler} euler\n */\nexport function applyEulerInverse(vector, euler) {\n quaternion.setFromEuler(euler).invert();\n vector.applyQuaternion(quaternion);\n}\n","import { CONSTANTS, utils } from '../..';\n\n/**\n * Returns intermediary point between two points on the sphere\n * {@link http://www.movable-type.co.uk/scripts/latlong.html}\n * @param {number[]} p1\n * @param {number[]} p2\n * @param {number} f\n * @returns {number[]}\n * @private\n */\nexport function greatArcIntermediaryPoint(p1, p2, f) {\n const [λ1, φ1] = p1;\n const [λ2, φ2] = p2;\n\n const r = utils.greatArcDistance(p1, p2);\n const a = Math.sin((1 - f) * r) / Math.sin(r);\n const b = Math.sin(f * r) / Math.sin(r);\n const x = a * Math.cos(φ1) * Math.cos(λ1) + b * Math.cos(φ2) * Math.cos(λ2);\n const y = a * Math.cos(φ1) * Math.sin(λ1) + b * Math.cos(φ2) * Math.sin(λ2);\n const z = a * Math.sin(φ1) + b * Math.sin(φ2);\n\n return [\n Math.atan2(y, x),\n Math.atan2(z, Math.sqrt(x * x + y * y)),\n ];\n}\n\n/**\n * @summary Computes the center point of a polygon\n * @todo Get \"visual center\" (https://blog.mapbox.com/a-new-algorithm-for-finding-a-visual-center-of-a-polygon-7c77e6492fbc)\n * @param {number[][]} polygon\n * @returns {number[]}\n * @private\n */\nexport function getPolygonCenter(polygon) {\n // apply offsets to avoid crossing the origin\n const workPoints = [polygon[0]];\n\n let k = 0;\n for (let i = 1; i < polygon.length; i++) {\n const d = polygon[i - 1][0] - polygon[i][0];\n if (d > Math.PI) { // crossed the origin left to right\n k += 1;\n }\n else if (d < -Math.PI) { // crossed the origin right to left\n k -= 1;\n }\n workPoints.push([polygon[i][0] + k * 2 * Math.PI, polygon[i][1]]);\n }\n\n const sum = workPoints.reduce((intermediary, point) => [intermediary[0] + point[0], intermediary[1] + point[1]]);\n return [utils.parseAngle(sum[0] / polygon.length), sum[1] / polygon.length];\n}\n\n/**\n * @summary Computes the middle point of a polyline\n * @param {number[][]} polyline\n * @returns {number[]}\n * @private\n */\nexport function getPolylineCenter(polyline) {\n // compute each segment length + total length\n let length = 0;\n const lengths = [];\n\n for (let i = 0; i < polyline.length - 1; i++) {\n const l = utils.greatArcDistance(polyline[i], polyline[i + 1]) * CONSTANTS.SPHERE_RADIUS;\n\n lengths.push(l);\n length += l;\n }\n\n // iterate until length / 2\n let consumed = 0;\n\n for (let j = 0; j < polyline.length - 1; j++) {\n // once the segment containing the middle point is found, computes the intermediary point\n if (consumed + lengths[j] > length / 2) {\n const r = (length / 2 - consumed) / lengths[j];\n return greatArcIntermediaryPoint(polyline[j], polyline[j + 1], r);\n }\n\n consumed += lengths[j];\n }\n\n // this never happens\n return polyline[Math.round(polyline.length / 2)];\n}\n","import * as THREE from 'three';\nimport { CONSTANTS, PSVError, utils } from '../..';\nimport { getShortestArc, logWarn } from '../../utils';\nimport { MARKER_DATA, SVG_NS } from './constants';\nimport { getPolygonCenter, getPolylineCenter } from './utils';\n\n/**\n * @summary Types of marker\n * @memberOf PSV.plugins.MarkersPlugin\n * @enum {string}\n * @constant\n * @private\n */\nconst MARKER_TYPES = {\n image : 'image',\n imageLayer : 'imageLayer',\n html : 'html',\n polygonPx : 'polygonPx',\n polygonRad : 'polygonRad',\n polylinePx : 'polylinePx',\n polylineRad: 'polylineRad',\n square : 'square',\n rect : 'rect',\n circle : 'circle',\n ellipse : 'ellipse',\n path : 'path',\n};\n\n/**\n * @typedef {Object} PSV.plugins.MarkersPlugin.Properties\n * @summary Marker properties, see {@link https://photo-sphere-viewer.js.org/plugins/plugin-markers.html#markers-options}\n */\n\n/**\n * @summary Object representing a marker\n * @memberOf PSV.plugins.MarkersPlugin\n */\nexport class Marker {\n\n /**\n * @param {PSV.plugins.MarkersPlugin.Properties} properties\n * @param {PSV.Viewer} psv\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n constructor(properties, psv) {\n if (!properties.id) {\n throw new PSVError('missing marker id');\n }\n\n /**\n * @member {PSV.Viewer}\n * @readonly\n * @protected\n */\n this.psv = psv;\n\n /**\n * @member {string}\n * @readonly\n */\n this.id = properties.id;\n\n /**\n * @member {string}\n * @readonly\n */\n this.type = Marker.getType(properties, false);\n\n /**\n * @member {boolean}\n * @protected\n */\n this.visible = true;\n\n /**\n * @member {HTMLElement|SVGElement|THREE.Object3D}\n * @readonly\n */\n this.$el = null;\n\n /**\n * @summary Original configuration of the marker\n * @member {PSV.plugins.MarkersPlugin.Properties}\n * @readonly\n */\n this.config = {};\n\n /**\n * @summary User data associated to the marker\n * @member {any}\n */\n this.data = undefined;\n\n /**\n * @summary Tooltip instance for this marker\n * @member {PSV.components.Tooltip}\n */\n this.tooltip = null;\n\n /**\n * @summary Computed properties\n * @member {Object}\n * @protected\n * @property {boolean} dynamicSize\n * @property {PSV.Point} anchor\n * @property {PSV.Position} position - position in spherical coordinates\n * @property {PSV.Point} position2D - position in viewer coordinates\n * @property {external:THREE.Vector3[]} positions3D - positions in 3D space\n * @property {number} width\n * @property {number} height\n * @property {*} def\n */\n this.props = {\n dynamicSize: false,\n anchor : null,\n position : null,\n position2D : null,\n positions3D: null,\n width : null,\n height : null,\n def : null,\n };\n\n /**\n * @summary THREE file loader\n * @type {THREE:TextureLoader}\n * @private\n */\n this.loader = null;\n\n if (this.is3d()) {\n this.loader = new THREE.TextureLoader();\n if (this.psv.config.withCredentials) {\n this.loader.setWithCredentials(true);\n }\n if (this.psv.config.requestHeaders && typeof this.psv.config.requestHeaders === 'object') {\n this.loader.setRequestHeader(this.psv.config.requestHeaders);\n }\n }\n\n // create element\n if (this.isNormal()) {\n this.$el = document.createElement('div');\n }\n else if (this.isPolygon()) {\n this.$el = document.createElementNS(SVG_NS, 'polygon');\n }\n else if (this.isPolyline()) {\n this.$el = document.createElementNS(SVG_NS, 'polyline');\n }\n else if (this.isSvg()) {\n this.$el = document.createElementNS(SVG_NS, this.type);\n }\n\n if (!this.is3d()) {\n this.$el.id = `psv-marker-${this.id}`;\n this.$el[MARKER_DATA] = this;\n }\n\n this.update(properties);\n }\n\n /**\n * @summary Destroys the marker\n */\n destroy() {\n delete this.$el[MARKER_DATA];\n delete this.$el;\n delete this.config;\n delete this.props;\n delete this.psv;\n }\n\n /**\n * @summary Checks if it is a 3D marker (imageLayer)\n * @returns {boolean}\n */\n is3d() {\n return this.type === MARKER_TYPES.imageLayer;\n }\n\n /**\n * @summary Checks if it is a normal marker (image or html)\n * @returns {boolean}\n */\n isNormal() {\n return this.type === MARKER_TYPES.image\n || this.type === MARKER_TYPES.html;\n }\n\n /**\n * @summary Checks if it is a polygon/polyline marker\n * @returns {boolean}\n */\n isPoly() {\n return this.isPolygon()\n || this.isPolyline();\n }\n\n /**\n * @summary Checks if it is a polygon/polyline using pixel coordinates\n * @returns {boolean}\n */\n isPolyPx() {\n return this.type === MARKER_TYPES.polygonPx\n || this.type === MARKER_TYPES.polylinePx;\n }\n\n /**\n * @summary Checks if it is a polygon/polyline using radian coordinates\n * @returns {boolean}\n */\n isPolyRad() {\n return this.type === MARKER_TYPES.polygonRad\n || this.type === MARKER_TYPES.polylineRad;\n }\n\n /**\n * @summary Checks if it is a polygon marker\n * @returns {boolean}\n */\n isPolygon() {\n return this.type === MARKER_TYPES.polygonPx\n || this.type === MARKER_TYPES.polygonRad;\n }\n\n /**\n * @summary Checks if it is a polyline marker\n * @returns {boolean}\n */\n isPolyline() {\n return this.type === MARKER_TYPES.polylinePx\n || this.type === MARKER_TYPES.polylineRad;\n }\n\n /**\n * @summary Checks if it is an SVG marker\n * @returns {boolean}\n */\n isSvg() {\n return this.type === MARKER_TYPES.square\n || this.type === MARKER_TYPES.rect\n || this.type === MARKER_TYPES.circle\n || this.type === MARKER_TYPES.ellipse\n || this.type === MARKER_TYPES.path;\n }\n\n /**\n * @summary Computes marker scale from zoom level\n * @param {number} zoomLevel\n * @param {PSV.Position} position\n * @returns {number}\n */\n getScale(zoomLevel, position) {\n if (!this.config.scale) {\n return 1;\n }\n if (typeof this.config.scale === 'function') {\n return this.config.scale(zoomLevel, position);\n }\n\n let scale = 1;\n if (Array.isArray(this.config.scale.zoom)) {\n const bounds = this.config.scale.zoom;\n scale *= bounds[0] + (bounds[1] - bounds[0]) * CONSTANTS.EASINGS.inQuad(zoomLevel / 100);\n }\n if (Array.isArray(this.config.scale.longitude)) {\n const bounds = this.config.scale.longitude;\n const halfFov = THREE.Math.degToRad(this.psv.prop.hFov) / 2;\n const arc = Math.abs(getShortestArc(this.props.position.longitude, position.longitude));\n scale *= bounds[1] + (bounds[0] - bounds[1]) * CONSTANTS.EASINGS.outQuad(Math.max(0, (halfFov - arc) / halfFov));\n }\n return scale;\n }\n\n /**\n * @summary Returns the markers list content for the marker, it can be either :\n * - the `listContent`\n * - the `tooltip.content`\n * - the `html`\n * - the `id`\n * @returns {*}\n */\n getListContent() {\n if (this.config.listContent) {\n return this.config.listContent;\n }\n else if (this.config.tooltip?.content) {\n return this.config.tooltip.content;\n }\n else if (this.config.html) {\n return this.config.html;\n }\n else {\n return this.id;\n }\n }\n\n /**\n * @summary Display the tooltip of this marker\n * @param {{clientX: number, clientY: number}} [mousePosition]\n */\n showTooltip(mousePosition) {\n if (this.visible && this.config.tooltip?.content && this.props.position2D) {\n const config = {\n content : this.config.tooltip.content,\n position: this.config.tooltip.position,\n data : this,\n };\n\n if (this.isPoly()) {\n const viewerPos = utils.getPosition(this.psv.container);\n\n config.box = { // separate the tooltip from the cursor\n width : this.psv.tooltip.size.arrow * 2,\n height: this.psv.tooltip.size.arrow * 2,\n };\n\n if (mousePosition) {\n config.top = mousePosition.clientY - viewerPos.top - this.psv.tooltip.size.arrow / 2;\n config.left = mousePosition.clientX - viewerPos.left - this.psv.tooltip.size.arrow;\n }\n else {\n config.top = this.props.position2D.y;\n config.left = this.props.position2D.x;\n }\n }\n else {\n config.top = this.props.position2D.y;\n config.left = this.props.position2D.x;\n config.box = {\n width : this.props.width,\n height: this.props.height,\n };\n }\n\n if (this.tooltip) {\n this.tooltip.move(config);\n }\n else {\n this.tooltip = this.psv.tooltip.create(config);\n }\n }\n }\n\n /**\n * @summary Hides the tooltip of this marker\n */\n hideTooltip() {\n if (this.tooltip) {\n this.tooltip.hide();\n this.tooltip = null;\n }\n }\n\n /**\n * @summary Updates the marker with new properties\n * @param {PSV.plugins.MarkersPlugin.Properties} properties\n * @throws {PSV.PSVError} when the configuration is incorrect\n */\n update(properties) {\n const newType = Marker.getType(properties, true);\n\n if (newType !== undefined && newType !== this.type) {\n throw new PSVError('cannot change marker type');\n }\n\n utils.deepmerge(this.config, properties);\n if (typeof this.config.tooltip === 'string') {\n this.config.tooltip = { content: this.config.tooltip };\n }\n\n this.data = this.config.data;\n this.visible = this.config.visible !== false;\n\n if (!this.is3d()) {\n // reset CSS class\n if (this.isNormal()) {\n this.$el.setAttribute('class', 'psv-marker psv-marker--normal');\n }\n else {\n this.$el.setAttribute('class', 'psv-marker psv-marker--svg');\n }\n\n // add CSS classes\n if (this.config.className) {\n utils.addClasses(this.$el, this.config.className);\n }\n\n if (this.config.tooltip) {\n utils.addClasses(this.$el, 'psv-marker--has-tooltip');\n }\n if (this.config.content) {\n utils.addClasses(this.$el, 'psv-marler--has-content');\n }\n\n // apply style\n this.$el.style.opacity = this.config.opacity ?? 1;\n if (this.config.style) {\n utils.deepmerge(this.$el.style, this.config.style);\n }\n }\n\n // parse anchor\n this.props.anchor = utils.parsePosition(this.config.anchor);\n\n // clean scale\n if (this.config.scale) {\n if (typeof this.config.scale === 'number') {\n logWarn('Single value marker scale is deprecated, please use an array of two values.');\n this.config.scale = { zoom: [0, this.config.scale] };\n }\n if (Array.isArray(this.config.scale)) {\n this.config.scale = { zoom: this.config.scale };\n }\n }\n\n if (this.isNormal()) {\n this.__updateNormal();\n }\n else if (this.isPoly()) {\n this.__updatePoly();\n }\n else if (this.isSvg()) {\n this.__updateSvg();\n }\n else if (this.is3d()) {\n this.__update3d();\n }\n }\n\n /**\n * @summary Updates a normal marker\n * @private\n */\n __updateNormal() {\n if (!utils.isExtendedPosition(this.config)) {\n throw new PSVError('missing marker position, latitude/longitude or x/y');\n }\n\n if (this.config.image && (!this.config.width || !this.config.height)) {\n throw new PSVError('missing marker width/height');\n }\n\n if (this.config.width && this.config.height) {\n this.props.dynamicSize = false;\n this.props.width = this.config.width;\n this.props.height = this.config.height;\n this.$el.style.width = this.config.width + 'px';\n this.$el.style.height = this.config.height + 'px';\n }\n else {\n this.props.dynamicSize = true;\n }\n\n if (this.config.image) {\n this.props.def = this.config.image;\n this.$el.style.backgroundImage = `url(${this.config.image})`;\n }\n else if (this.config.html) {\n this.props.def = this.config.html;\n this.$el.innerHTML = this.config.html;\n }\n\n // set anchor\n this.$el.style.transformOrigin = `${this.props.anchor.x * 100}% ${this.props.anchor.y * 100}%`;\n\n // convert texture coordinates to spherical coordinates\n this.props.position = this.psv.dataHelper.cleanPosition(this.config);\n\n // compute x/y/z position\n this.props.positions3D = [this.psv.dataHelper.sphericalCoordsToVector3(this.props.position)];\n }\n\n /**\n * @summary Updates an SVG marker\n * @private\n */\n __updateSvg() {\n if (!utils.isExtendedPosition(this.config)) {\n throw new PSVError('missing marker position, latitude/longitude or x/y');\n }\n\n this.props.dynamicSize = true;\n\n // set content\n switch (this.type) {\n case MARKER_TYPES.square:\n this.props.def = {\n x : 0,\n y : 0,\n width : this.config.square,\n height: this.config.square,\n };\n break;\n\n case MARKER_TYPES.rect:\n if (Array.isArray(this.config.rect)) {\n this.props.def = {\n x : 0,\n y : 0,\n width : this.config.rect[0],\n height: this.config.rect[1],\n };\n }\n else {\n this.props.def = {\n x : 0,\n y : 0,\n width : this.config.rect.width,\n height: this.config.rect.height,\n };\n }\n break;\n\n case MARKER_TYPES.circle:\n this.props.def = {\n cx: this.config.circle,\n cy: this.config.circle,\n r : this.config.circle,\n };\n break;\n\n case MARKER_TYPES.ellipse:\n if (Array.isArray(this.config.ellipse)) {\n this.props.def = {\n cx: this.config.ellipse[0],\n cy: this.config.ellipse[1],\n rx: this.config.ellipse[0],\n ry: this.config.ellipse[1],\n };\n }\n else {\n this.props.def = {\n cx: this.config.ellipse.rx,\n cy: this.config.ellipse.ry,\n rx: this.config.ellipse.rx,\n ry: this.config.ellipse.ry,\n };\n }\n break;\n\n case MARKER_TYPES.path:\n this.props.def = {\n d: this.config.path,\n };\n break;\n\n // no default\n }\n\n utils.each(this.props.def, (value, prop) => {\n this.$el.setAttributeNS(null, prop, value);\n });\n\n // set style\n if (this.config.svgStyle) {\n utils.each(this.config.svgStyle, (value, prop) => {\n this.$el.setAttributeNS(null, utils.dasherize(prop), value);\n });\n }\n else {\n this.$el.setAttributeNS(null, 'fill', 'rgba(0,0,0,0.5)');\n }\n\n // convert texture coordinates to spherical coordinates\n this.props.position = this.psv.dataHelper.cleanPosition(this.config);\n\n // compute x/y/z position\n this.props.positions3D = [this.psv.dataHelper.sphericalCoordsToVector3(this.props.position)];\n }\n\n /**\n * @summary Updates a polygon marker\n * @private\n */\n __updatePoly() {\n this.props.dynamicSize = true;\n\n // set style\n if (this.config.svgStyle) {\n utils.each(this.config.svgStyle, (value, prop) => {\n this.$el.setAttributeNS(null, utils.dasherize(prop), value);\n });\n\n if (this.isPolyline() && !this.config.svgStyle.fill) {\n this.$el.setAttributeNS(null, 'fill', 'none');\n }\n }\n else if (this.isPolygon()) {\n this.$el.setAttributeNS(null, 'fill', 'rgba(0,0,0,0.5)');\n }\n else if (this.isPolyline()) {\n this.$el.setAttributeNS(null, 'fill', 'none');\n this.$el.setAttributeNS(null, 'stroke', 'rgb(0,0,0)');\n }\n\n // fold arrays: [1,2,3,4] => [[1,2],[3,4]]\n const actualPoly = this.config.polygonPx || this.config.polygonRad || this.config.polylinePx || this.config.polylineRad;\n if (!Array.isArray(actualPoly[0])) {\n for (let i = 0; i < actualPoly.length; i++) {\n actualPoly.splice(i, 2, [actualPoly[i], actualPoly[i + 1]]);\n }\n }\n\n // convert texture coordinates to spherical coordinates\n if (this.isPolyPx()) {\n this.props.def = actualPoly.map((coord) => {\n const sphericalCoords = this.psv.dataHelper.textureCoordsToSphericalCoords({ x: coord[0], y: coord[1] });\n return [sphericalCoords.longitude, sphericalCoords.latitude];\n });\n }\n // clean angles\n else {\n this.props.def = actualPoly.map((coord) => {\n return [utils.parseAngle(coord[0]), utils.parseAngle(coord[1], true)];\n });\n }\n\n const centroid = this.isPolygon()\n ? getPolygonCenter(this.props.def)\n : getPolylineCenter(this.props.def);\n\n this.props.position = {\n longitude: centroid[0],\n latitude : centroid[1],\n };\n\n // compute x/y/z positions\n this.props.positions3D = this.props.def.map((coord) => {\n return this.psv.dataHelper.sphericalCoordsToVector3({ longitude: coord[0], latitude : coord[1] });\n });\n }\n\n /**\n * @summary Updates a 3D marker\n * @private\n */\n __update3d() {\n if (!this.config.width || !this.config.height) {\n throw new PSVError('missing marker width/height');\n }\n\n this.props.dynamicSize = false;\n this.props.width = this.config.width;\n this.props.height = this.config.height;\n\n // convert texture coordinates to spherical coordinates\n this.props.position = this.psv.dataHelper.cleanPosition(this.config);\n\n // compute x/y/z position\n this.props.positions3D = [this.psv.dataHelper.sphericalCoordsToVector3(this.props.position)];\n\n switch (this.type) {\n case MARKER_TYPES.imageLayer:\n if (!this.$el) {\n const material = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity : this.config.opacity ?? 1,\n depthTest : false,\n });\n const geometry = new THREE.PlaneGeometry(1, 1);\n const mesh = new THREE.Mesh(geometry, material);\n mesh.userData = { [MARKER_DATA]: this };\n this.$el = new THREE.Group().add(mesh);\n\n // overwrite the visible property to be tied to the Marker instance\n // and do it without context bleed\n Object.defineProperty(this.$el, 'visible', {\n enumerable: true,\n get : function () {\n return this.children[0].userData[MARKER_DATA].visible;\n },\n set : function (visible) {\n this.children[0].userData[MARKER_DATA].visible = visible;\n },\n });\n }\n\n if (this.props.def !== this.config.imageLayer) {\n if (this.psv.config.requestHeaders && typeof this.psv.config.requestHeaders === 'function') {\n this.loader.setRequestHeader(this.psv.config.requestHeaders(this.config.imageLayer));\n }\n this.$el.children[0].material.map = this.loader.load(this.config.imageLayer, (texture) => {\n texture.anisotropy = 4;\n this.psv.needsUpdate();\n });\n this.props.def = this.config.imageLayer;\n }\n\n this.$el.children[0].position.set(\n this.props.anchor.x - 0.5,\n this.props.anchor.y - 0.5,\n 0\n );\n\n this.$el.position.copy(this.props.positions3D[0]);\n\n switch (this.config.orientation) {\n case 'horizontal':\n this.$el.lookAt(0, this.$el.position.y, 0);\n this.$el.rotateX(this.props.position.latitude < 0 ? -Math.PI / 2 : Math.PI / 2);\n break;\n case 'vertical-left':\n this.$el.lookAt(0, 0, 0);\n this.$el.rotateY(-Math.PI * 0.4);\n break;\n case 'vertical-right':\n this.$el.lookAt(0, 0, 0);\n this.$el.rotateY(Math.PI * 0.4);\n break;\n default:\n this.$el.lookAt(0, 0, 0);\n break;\n }\n\n // 100 is magic number that gives a coherent size at default zoom level\n this.$el.scale.set(this.config.width / 100, this.config.height / 100, 1);\n break;\n\n // no default\n }\n }\n\n /**\n * @summary Determines the type of a marker by the available properties\n * @param {Marker.Properties} properties\n * @param {boolean} [allowNone=false]\n * @returns {string}\n * @throws {PSV.PSVError} when the marker's type cannot be found\n */\n static getType(properties, allowNone = false) {\n const found = [];\n\n utils.each(MARKER_TYPES, (type) => {\n if (properties[type]) {\n found.push(type);\n }\n });\n\n if (found.length === 0 && !allowNone) {\n throw new PSVError(`missing marker content, either ${Object.keys(MARKER_TYPES).join(', ')}`);\n }\n else if (found.length > 1) {\n throw new PSVError(`multiple marker content, either ${Object.keys(MARKER_TYPES).join(', ')}`);\n }\n\n return found[0];\n }\n\n}\n","import { AbstractButton } from '../..';\nimport { EVENTS } from './constants';\nimport pin from './pin.svg';\n\n/**\n * @summary Navigation bar markers button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class MarkersButton extends AbstractButton {\n\n static id = 'markers';\n static icon = pin;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-markers-button', true);\n\n /**\n * @type {PSV.plugins.MarkersPlugin}\n */\n this.plugin = this.psv.getPlugin('markers');\n\n if (this.plugin) {\n this.plugin.on(EVENTS.SHOW_MARKERS, this);\n this.plugin.on(EVENTS.HIDE_MARKERS, this);\n\n this.toggleActive(true);\n }\n\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n if (this.plugin) {\n this.plugin.off(EVENTS.SHOW_MARKERS, this);\n this.plugin.off(EVENTS.HIDE_MARKERS, this);\n }\n\n super.destroy();\n }\n\n /**\n * @override\n */\n isSupported() {\n return !!this.plugin;\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case EVENTS.SHOW_MARKERS: this.toggleActive(true); break;\n case EVENTS.HIDE_MARKERS: this.toggleActive(false); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles markers\n */\n onClick() {\n if (this.plugin.prop.visible) {\n this.plugin.hide();\n }\n else {\n this.plugin.show();\n }\n }\n\n}\n","import { AbstractButton, CONSTANTS } from '../..';\nimport { ID_PANEL_MARKERS_LIST } from './constants';\nimport pinList from './pin-list.svg';\n\n/**\n * @summary Navigation bar markers list button class\n * @extends PSV.buttons.AbstractButton\n * @memberof PSV.buttons\n */\nexport class MarkersListButton extends AbstractButton {\n\n static id = 'markersList';\n static icon = pinList;\n\n /**\n * @param {PSV.components.Navbar} navbar\n */\n constructor(navbar) {\n super(navbar, 'psv-button--hover-scale psv-markers-list-button', true);\n\n /**\n * @type {PSV.plugins.MarkersPlugin}\n */\n this.plugin = this.psv.getPlugin('markers');\n\n if (this.plugin) {\n this.psv.on(CONSTANTS.EVENTS.OPEN_PANEL, this);\n this.psv.on(CONSTANTS.EVENTS.CLOSE_PANEL, this);\n }\n\n this.hide();\n }\n\n /**\n * @override\n */\n destroy() {\n this.psv.off(CONSTANTS.EVENTS.OPEN_PANEL, this);\n this.psv.off(CONSTANTS.EVENTS.CLOSE_PANEL, this);\n\n super.destroy();\n }\n\n /**\n * @override\n */\n isSupported() {\n return !!this.plugin;\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case CONSTANTS.EVENTS.OPEN_PANEL: this.toggleActive(e.args[0] === ID_PANEL_MARKERS_LIST); break;\n case CONSTANTS.EVENTS.CLOSE_PANEL: this.toggleActive(false); break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @override\n * @description Toggles markers list\n */\n onClick() {\n this.plugin.toggleMarkersList();\n }\n\n}\n","import * as THREE from 'three';\nimport { AbstractPlugin, CONSTANTS, DEFAULTS, PSVError, registerButton, utils } from '../..';\nimport {\n EVENTS,\n ID_PANEL_MARKER,\n ID_PANEL_MARKERS_LIST,\n MARKER_DATA,\n MARKERS_LIST_TEMPLATE,\n SVG_NS\n} from './constants';\nimport { Marker } from './Marker';\nimport { MarkersButton } from './MarkersButton';\nimport { MarkersListButton } from './MarkersListButton';\nimport './style.scss';\n\n\n/**\n * @typedef {Object} PSV.plugins.MarkersPlugin.Options\n * @property {boolean} [clickEventOnMarker=false] If a `click` event is triggered on the viewer additionally to the `select-marker` event.\n * @property {PSV.plugins.MarkersPlugin.Properties[]} [markers]\n */\n\n/**\n * @typedef {Object} PSV.plugins.MarkersPlugin.SelectMarkerData\n * @summary Data of the `select-marker` event\n * @property {boolean} dblclick - if the selection originated from a double click, the simple click is always fired before the double click\n * @property {boolean} rightclick - if the selection originated from a right click\n */\n\n\n// add markers buttons\nDEFAULTS.lang[MarkersButton.id] = 'Markers';\nDEFAULTS.lang[MarkersListButton.id] = 'Markers list';\nregisterButton(MarkersButton, 'caption:left');\nregisterButton(MarkersListButton, 'caption:left');\n\n\nexport { EVENTS } from './constants';\n\n\n/**\n * @summary Displays various markers on the viewer\n * @extends PSV.plugins.AbstractPlugin\n * @memberof PSV.plugins\n */\nexport class MarkersPlugin extends AbstractPlugin {\n\n static id = 'markers';\n\n static EVENTS = EVENTS;\n\n /**\n * @param {PSV.Viewer} psv\n * @param {PSV.plugins.MarkersPlugin.Options} [options]\n */\n constructor(psv, options) {\n super(psv);\n\n /**\n * @summary All registered markers\n * @member {Object}\n */\n this.markers = {};\n\n /**\n * @type {Object}\n * @property {boolean} visible - Visibility of the component\n * @property {PSV.plugins.MarkersPlugin.Marker} currentMarker - Last selected marker\n * @property {PSV.plugins.MarkersPlugin.Marker} hoveringMarker - Marker under the cursor\n * @private\n */\n this.prop = {\n visible : true,\n currentMarker : null,\n hoveringMarker: null,\n stopObserver : null,\n };\n\n /**\n * @type {PSV.plugins.MarkersPlugin.Options}\n */\n this.config = {\n clickEventOnMarker: false,\n ...options,\n };\n\n if (options?.listButton === false || options?.hideButton === false) {\n utils.logWarn('MarkersPlugin: listButton and hideButton options are deprecated. '\n + 'Please define the global navbar options according to your needs.');\n }\n\n /**\n * @member {HTMLElement}\n * @readonly\n */\n this.container = document.createElement('div');\n this.container.className = 'psv-markers';\n this.container.style.cursor = this.psv.config.mousemove ? 'move' : 'default';\n\n /**\n * @member {SVGElement}\n * @readonly\n */\n this.svgContainer = document.createElementNS(SVG_NS, 'svg');\n this.svgContainer.setAttribute('class', 'psv-markers-svg-container');\n this.container.appendChild(this.svgContainer);\n\n // Markers events via delegation\n this.container.addEventListener('mouseenter', this, true);\n this.container.addEventListener('mouseleave', this, true);\n this.container.addEventListener('mousemove', this, true);\n this.container.addEventListener('contextmenu', this);\n }\n\n /**\n * @package\n */\n init() {\n super.init();\n\n this.psv.container.appendChild(this.container);\n\n // Viewer events\n this.psv.on(CONSTANTS.EVENTS.CLICK, this);\n this.psv.on(CONSTANTS.EVENTS.DOUBLE_CLICK, this);\n this.psv.on(CONSTANTS.EVENTS.RENDER, this);\n this.psv.on(CONSTANTS.EVENTS.CONFIG_CHANGED, this);\n\n if (this.config.markers) {\n this.psv.once(CONSTANTS.EVENTS.READY, () => {\n this.setMarkers(this.config.markers);\n delete this.config.markers;\n });\n }\n }\n\n /**\n * @package\n */\n destroy() {\n this.clearMarkers(false);\n\n this.prop.stopObserver?.();\n\n this.psv.off(CONSTANTS.EVENTS.CLICK, this);\n this.psv.off(CONSTANTS.EVENTS.DOUBLE_CLICK, this);\n this.psv.off(CONSTANTS.EVENTS.RENDER, this);\n this.psv.off(CONSTANTS.EVENTS.CONFIG_CHANGED, this);\n\n this.psv.container.removeChild(this.container);\n\n delete this.svgContainer;\n delete this.markers;\n delete this.container;\n\n super.destroy();\n }\n\n /**\n * @summary Handles events\n * @param {Event} e\n * @private\n */\n handleEvent(e) {\n /* eslint-disable */\n switch (e.type) {\n // @formatter:off\n case 'mouseenter': this.__onMouseEnter(e, this.__getTargetMarker(e.target)); break;\n case 'mouseleave': this.__onMouseLeave(e, this.__getTargetMarker(e.target)); break;\n case 'mousemove': this.__onMouseMove(e, this.__getTargetMarker(e.target)); break;\n case 'contextmenu': e.preventDefault(); break;\n case CONSTANTS.EVENTS.CLICK: this.__onClick(e, e.args[0], false); break;\n case CONSTANTS.EVENTS.DOUBLE_CLICK: this.__onClick(e, e.args[0], true); break;\n case CONSTANTS.EVENTS.RENDER: this.renderMarkers(); break;\n case CONSTANTS.OBJECT_EVENTS.ENTER_OBJECT: this.__onMouseEnter(e.detail.originalEvent, e.detail.data); break;\n case CONSTANTS.OBJECT_EVENTS.LEAVE_OBJECT: this.__onMouseLeave(e.detail.originalEvent, e.detail.data); break;\n case CONSTANTS.OBJECT_EVENTS.HOVER_OBJECT: this.__onMouseMove(e.detail.originalEvent, e.detail.data); break;\n case CONSTANTS.EVENTS.CONFIG_CHANGED:\n this.container.style.cursor = this.psv.config.mousemove ? 'move' : 'default';\n break;\n // @formatter:on\n }\n /* eslint-enable */\n }\n\n /**\n * @summary Shows all markers\n * @fires PSV.plugins.MarkersPlugin.show-markers\n */\n show() {\n this.prop.visible = true;\n\n this.renderMarkers();\n\n this.trigger(EVENTS.SHOW_MARKERS);\n }\n\n /**\n * @summary Hides all markers\n * @fires PSV.plugins.MarkersPlugin.hide-markers\n */\n hide() {\n this.prop.visible = false;\n\n this.renderMarkers();\n\n this.trigger(EVENTS.HIDE_MARKERS);\n }\n\n /**\n * @summary Toggles the visibility of all tooltips\n */\n toggleAllTooltips() {\n this.prop.showAllTooltips = !this.prop.showAllTooltips;\n this.renderMarkers();\n }\n\n /**\n * @summary Displays all tooltips\n */\n showAllTooltips() {\n this.prop.showAllTooltips = true;\n this.renderMarkers();\n }\n\n /**\n * @summary Hides all tooltips\n */\n hideAllTooltips() {\n this.prop.showAllTooltips = false;\n this.renderMarkers();\n }\n\n /**\n * @summary Returns the total number of markers\n * @returns {number}\n */\n getNbMarkers() {\n return Object.keys(this.markers).length;\n }\n\n /**\n * @summary Returns all the markers\n * @return {PSV.plugins.MarkersPlugin.Marker[]}\n */\n getMarkers() {\n return Object.values(this.markers);\n }\n\n /**\n * @summary Adds a new marker to viewer\n * @param {PSV.plugins.MarkersPlugin.Properties} properties\n * @param {boolean} [render=true] - renders the marker immediately\n * @returns {PSV.plugins.MarkersPlugin.Marker}\n * @throws {PSV.PSVError} when the marker's id is missing or already exists\n */\n addMarker(properties, render = true) {\n if (this.markers[properties.id]) {\n throw new PSVError(`marker \"${properties.id}\" already exists`);\n }\n\n const marker = new Marker(properties, this.psv);\n\n if (marker.isNormal()) {\n this.container.appendChild(marker.$el);\n }\n else if (marker.isPoly() || marker.isSvg()) {\n this.svgContainer.appendChild(marker.$el);\n }\n else if (marker.is3d()) {\n this.psv.renderer.scene.add(marker.$el);\n }\n\n this.markers[marker.id] = marker;\n\n if (render) {\n this.renderMarkers();\n this.__refreshUi();\n this.__checkObjectsObserver();\n\n this.trigger(EVENTS.SET_MARKERS, this.getMarkers());\n }\n\n return marker;\n }\n\n /**\n * @summary Returns the internal marker object for a marker id\n * @param {string} markerId\n * @returns {PSV.plugins.MarkersPlugin.Marker}\n * @throws {PSV.PSVError} when the marker cannot be found\n */\n getMarker(markerId) {\n const id = typeof markerId === 'object' ? markerId.id : markerId;\n\n if (!this.markers[id]) {\n throw new PSVError(`cannot find marker \"${id}\"`);\n }\n\n return this.markers[id];\n }\n\n /**\n * @summary Returns the last marker selected by the user\n * @returns {PSV.plugins.MarkersPlugin.Marker}\n */\n getCurrentMarker() {\n return this.prop.currentMarker;\n }\n\n /**\n * @summary Updates the existing marker with the same id\n * @description Every property can be changed but you can't change its type (Eg: `image` to `html`).\n * @param {PSV.plugins.MarkersPlugin.Properties} properties\n * @param {boolean} [render=true] - renders the marker immediately\n * @returns {PSV.plugins.MarkersPlugin.Marker}\n */\n updateMarker(properties, render = true) {\n const marker = this.getMarker(properties.id);\n\n marker.update(properties);\n\n if (render) {\n this.renderMarkers();\n this.__refreshUi();\n\n if (marker.is3d()) {\n this.psv.needsUpdate();\n }\n\n this.trigger(EVENTS.SET_MARKERS, this.getMarkers());\n }\n\n return marker;\n }\n\n /**\n * @summary Removes a marker from the viewer\n * @param {string} markerId\n * @param {boolean} [render=true] - renders the marker immediately\n */\n removeMarker(markerId, render = true) {\n const marker = this.getMarker(markerId);\n\n if (marker.isNormal()) {\n this.container.removeChild(marker.$el);\n }\n else if (marker.isPoly() || marker.isSvg()) {\n this.svgContainer.removeChild(marker.$el);\n }\n else if (marker.is3d()) {\n this.psv.renderer.scene.remove(marker.$el);\n this.psv.needsUpdate();\n }\n\n if (this.prop.hoveringMarker === marker) {\n this.prop.hoveringMarker = null;\n }\n\n if (this.prop.currentMarker === marker) {\n this.prop.currentMarker = null;\n }\n\n marker.hideTooltip();\n\n marker.destroy();\n delete this.markers[marker.id];\n\n if (render) {\n this.__refreshUi();\n this.__checkObjectsObserver();\n\n this.trigger(EVENTS.SET_MARKERS, this.getMarkers());\n }\n }\n\n /**\n * @summary Removes multiple markers\n * @param {string[]} markerIds\n * @param {boolean} [render=true] - renders the markers immediately\n */\n removeMarkers(markerIds, render = true) {\n markerIds.forEach(markerId => this.removeMarker(markerId, false));\n\n if (render) {\n this.__refreshUi();\n this.__checkObjectsObserver();\n\n this.trigger(EVENTS.SET_MARKERS, this.getMarkers());\n }\n }\n\n /**\n * @summary Replaces all markers\n * @param {PSV.plugins.MarkersPlugin.Properties[]} markers\n * @param {boolean} [render=true] - renders the marker immediately\n */\n setMarkers(markers, render = true) {\n this.clearMarkers(false);\n\n utils.each(markers, marker => this.addMarker(marker, false));\n\n if (render) {\n this.renderMarkers();\n this.__refreshUi();\n this.__checkObjectsObserver();\n\n this.trigger(EVENTS.SET_MARKERS, this.getMarkers());\n }\n }\n\n /**\n * @summary Removes all markers\n * @param {boolean} [render=true] - renders the markers immediately\n */\n clearMarkers(render = true) {\n utils.each(this.markers, marker => this.removeMarker(marker, false));\n\n if (render) {\n this.renderMarkers();\n this.__refreshUi();\n this.__checkObjectsObserver();\n\n this.trigger(EVENTS.SET_MARKERS, this.getMarkers());\n }\n }\n\n /**\n * @summary Rotate the view to face the marker\n * @param {string} markerId\n * @param {string|number} [speed] - rotates smoothy, see {@link PSV.Viewer#animate}\n * @fires PSV.plugins.MarkersPlugin.goto-marker-done\n * @return {PSV.Animation} A promise that will be resolved when the animation finishes\n */\n gotoMarker(markerId, speed) {\n const marker = this.getMarker(markerId);\n\n return this.psv.animate({\n ...marker.props.position,\n speed,\n })\n .then(() => {\n this.trigger(EVENTS.GOTO_MARKER_DONE, marker);\n });\n }\n\n /**\n * @summary Hides a marker\n * @param {string} markerId\n */\n hideMarker(markerId) {\n this.toggleMarker(markerId, false);\n }\n\n /**\n * @summary Shows a marker\n * @param {string} markerId\n */\n showMarker(markerId) {\n this.toggleMarker(markerId, true);\n }\n\n /**\n * @summary Toggles a marker\n * @param {string} markerId\n * @param {boolean} [visible]\n */\n toggleMarker(markerId, visible = null) {\n const marker = this.getMarker(markerId);\n marker.visible = visible === null ? !marker.visible : visible;\n if (marker.is3d()) {\n this.psv.needsUpdate();\n }\n else {\n this.renderMarkers();\n }\n }\n\n /**\n * @summary Opens the panel with the content of the marker\n * @param {string} markerId\n */\n showMarkerPanel(markerId) {\n const marker = this.getMarker(markerId);\n\n if (marker?.config?.content) {\n this.psv.panel.show({\n id : ID_PANEL_MARKER,\n content: marker.config.content,\n });\n }\n else {\n this.psv.panel.hide(ID_PANEL_MARKER);\n }\n }\n\n /**\n * @summary Toggles the visibility of the list of markers\n */\n toggleMarkersList() {\n if (this.psv.panel.prop.contentId === ID_PANEL_MARKERS_LIST) {\n this.hideMarkersList();\n }\n else {\n this.showMarkersList();\n }\n }\n\n /**\n * @summary Opens side panel with the list of markers\n * @fires PSV.plugins.MarkersPlugin.filter:render-markers-list\n */\n showMarkersList() {\n let markers = [];\n utils.each(this.markers, (marker) => {\n if (marker.visible && !marker.config.hideList) {\n markers.push(marker);\n }\n });\n\n markers = this.change(EVENTS.RENDER_MARKERS_LIST, markers);\n\n this.psv.panel.show({\n id : ID_PANEL_MARKERS_LIST,\n content : MARKERS_LIST_TEMPLATE(\n markers,\n this.psv.config.lang[MarkersButton.id],\n utils.dasherize(MARKER_DATA)\n ),\n noMargin : true,\n clickHandler: (e) => {\n const li = e.target ? utils.getClosest(e.target, 'li') : undefined;\n const markerId = li ? li.dataset[MARKER_DATA] : undefined;\n\n if (markerId) {\n const marker = this.getMarker(markerId);\n\n this.trigger(EVENTS.SELECT_MARKER_LIST, marker);\n\n this.gotoMarker(marker, 1000);\n this.hideMarkersList();\n }\n },\n });\n }\n\n /**\n * @summary Closes side panel if it contains the list of markers\n */\n hideMarkersList() {\n this.psv.panel.hide(ID_PANEL_MARKERS_LIST);\n }\n\n /**\n * @summary Updates the visibility and the position of all markers\n */\n renderMarkers() {\n const zoomLevel = this.psv.getZoomLevel();\n const viewerPosition = this.psv.getPosition();\n\n utils.each(this.markers, (marker) => {\n let isVisible = this.prop.visible && marker.visible;\n let position = null;\n\n if (isVisible && marker.is3d()) {\n position = this.__getMarkerPosition(marker);\n isVisible = this.__isMarkerVisible(marker, position);\n }\n else if (isVisible && marker.isPoly()) {\n const positions = this.__getPolyPositions(marker);\n isVisible = positions.length > (marker.isPolygon() ? 2 : 1);\n\n if (isVisible) {\n position = this.__getMarkerPosition(marker);\n\n const points = positions.map(pos => (pos.x - position.x) + ',' + (pos.y - position.y)).join(' ');\n\n marker.$el.setAttributeNS(null, 'points', points);\n marker.$el.setAttributeNS(null, 'transform', `translate(${position.x} ${position.y})`);\n }\n }\n else if (isVisible) {\n if (marker.props.dynamicSize) {\n this.__updateMarkerSize(marker);\n }\n\n position = this.__getMarkerPosition(marker);\n isVisible = this.__isMarkerVisible(marker, position);\n\n if (isVisible) {\n const scale = marker.getScale(zoomLevel, viewerPosition);\n\n if (marker.isSvg()) {\n // simulate transform-origin relative to SVG element\n const x = position.x + marker.props.width * marker.props.anchor.x * (1 - scale);\n const y = position.y + marker.props.width * marker.props.anchor.y * (1 - scale);\n marker.$el.setAttributeNS(null, 'transform', `translate(${x}, ${y}) scale(${scale}, ${scale})`);\n }\n else {\n marker.$el.style.transform = `translate3D(${position.x}px, ${position.y}px, 0px) scale(${scale}, ${scale})`;\n }\n }\n }\n\n marker.props.position2D = isVisible ? position : null;\n\n if (!marker.is3d()) {\n utils.toggleClass(marker.$el, 'psv-marker--visible', isVisible);\n }\n\n if (isVisible && (this.prop.showAllTooltips || (marker === this.prop.hoveringMarker && !marker.isPoly()))) {\n marker.showTooltip();\n }\n else if (!isVisible || marker !== this.prop.hoveringMarker) {\n marker.hideTooltip();\n }\n });\n }\n\n /**\n * @summary Determines if a point marker is visible
\n * It tests if the point is in the general direction of the camera, then check if it's in the viewport\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n * @param {PSV.Point} position\n * @returns {boolean}\n * @private\n */\n __isMarkerVisible(marker, position) {\n return marker.props.positions3D[0].dot(this.psv.prop.direction) > 0\n && position.x + marker.props.width >= 0\n && position.x - marker.props.width <= this.psv.prop.size.width\n && position.y + marker.props.height >= 0\n && position.y - marker.props.height <= this.psv.prop.size.height;\n }\n\n /**\n * @summary Computes the real size of a marker\n * @description This is done by removing all it's transformations (if any) and making it visible\n * before querying its bounding rect\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n * @private\n */\n __updateMarkerSize(marker) {\n utils.addClasses(marker.$el, 'psv-marker--transparent');\n\n let transform;\n if (marker.isSvg()) {\n transform = marker.$el.getAttributeNS(null, 'transform');\n marker.$el.removeAttributeNS(null, 'transform');\n }\n else {\n transform = marker.$el.style.transform;\n marker.$el.style.transform = '';\n }\n\n const rect = marker.$el.getBoundingClientRect();\n marker.props.width = rect.width;\n marker.props.height = rect.height;\n\n utils.removeClasses(marker.$el, 'psv-marker--transparent');\n\n if (transform) {\n if (marker.isSvg()) {\n marker.$el.setAttributeNS(null, 'transform', transform);\n }\n else {\n marker.$el.style.transform = transform;\n }\n }\n\n // the size is no longer dynamic once known\n marker.props.dynamicSize = false;\n }\n\n /**\n * @summary Computes viewer coordinates of a marker\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n * @returns {PSV.Point}\n * @private\n */\n __getMarkerPosition(marker) {\n if (marker.isPoly()) {\n return this.psv.dataHelper.sphericalCoordsToViewerCoords(marker.props.position);\n }\n else {\n const position = this.psv.dataHelper.vector3ToViewerCoords(marker.props.positions3D[0]);\n\n position.x -= marker.props.width * marker.props.anchor.x;\n position.y -= marker.props.height * marker.props.anchor.y;\n\n return position;\n }\n }\n\n /**\n * @summary Computes viewer coordinates of each point of a polygon/polyline
\n * It handles points behind the camera by creating intermediary points suitable for the projector\n * @param {PSV.plugins.MarkersPlugin.Marker} marker\n * @returns {PSV.Point[]}\n * @private\n */\n __getPolyPositions(marker) {\n const nbVectors = marker.props.positions3D.length;\n\n // compute if each vector is visible\n const positions3D = marker.props.positions3D.map((vector) => {\n return {\n vector : vector,\n visible: vector.dot(this.psv.prop.direction) > 0,\n };\n });\n\n // get pairs of visible/invisible vectors for each invisible vector connected to a visible vector\n const toBeComputed = [];\n positions3D.forEach((pos, i) => {\n if (!pos.visible) {\n const neighbours = [\n i === 0 ? positions3D[nbVectors - 1] : positions3D[i - 1],\n i === nbVectors - 1 ? positions3D[0] : positions3D[i + 1],\n ];\n\n neighbours.forEach((neighbour) => {\n if (neighbour.visible) {\n toBeComputed.push({\n visible : neighbour,\n invisible: pos,\n index : i,\n });\n }\n });\n }\n });\n\n // compute intermediary vector for each pair (the loop is reversed for splice to insert at the right place)\n toBeComputed.reverse().forEach((pair) => {\n positions3D.splice(pair.index, 0, {\n vector : this.__getPolyIntermediaryPoint(pair.visible.vector, pair.invisible.vector),\n visible: true,\n });\n });\n\n // translate vectors to screen pos\n return positions3D\n .filter(pos => pos.visible)\n .map(pos => this.psv.dataHelper.vector3ToViewerCoords(pos.vector));\n }\n\n /**\n * Given one point in the same direction of the camera and one point behind the camera,\n * computes an intermediary point on the great circle delimiting the half sphere visible by the camera.\n * The point is shifted by .01 rad because the projector cannot handle points exactly on this circle.\n * TODO : does not work with fisheye view (must not use the great circle)\n * {@link http://math.stackexchange.com/a/1730410/327208}\n * @param P1 {external:THREE.Vector3}\n * @param P2 {external:THREE.Vector3}\n * @returns {external:THREE.Vector3}\n * @private\n */\n __getPolyIntermediaryPoint(P1, P2) {\n const C = this.psv.prop.direction.clone().normalize();\n const N = new THREE.Vector3().crossVectors(P1, P2).normalize();\n const V = new THREE.Vector3().crossVectors(N, P1).normalize();\n const X = P1.clone().multiplyScalar(-C.dot(V));\n const Y = V.clone().multiplyScalar(C.dot(P1));\n const H = new THREE.Vector3().addVectors(X, Y).normalize();\n const a = new THREE.Vector3().crossVectors(H, C);\n return H.applyAxisAngle(a, 0.01).multiplyScalar(CONSTANTS.SPHERE_RADIUS);\n }\n\n /**\n * @summary Returns the marker associated to an event target\n * @param {EventTarget} target\n * @param {boolean} [closest=false]\n * @returns {PSV.plugins.MarkersPlugin.Marker}\n * @private\n */\n __getTargetMarker(target, closest = false) {\n const target2 = closest ? utils.getClosest(target, '.psv-marker') : target;\n return target2 ? target2[MARKER_DATA] : undefined;\n }\n\n /**\n * @summary Checks if an event target is in the tooltip\n * @param {EventTarget} target\n * @param {PSV.components.Tooltip} tooltip\n * @returns {boolean}\n * @private\n */\n __targetOnTooltip(target, tooltip) {\n return target && tooltip ? utils.hasParent(target, tooltip.container) : false;\n }\n\n /**\n * @summary Handles mouse enter events, show the tooltip for non polygon markers\n * @param {MouseEvent} e\n * @param {PSV.plugins.MarkersPlugin.Marker} [marker]\n * @fires PSV.plugins.MarkersPlugin.over-marker\n * @private\n */\n __onMouseEnter(e, marker) {\n if (marker && !marker.isPoly()) {\n this.prop.hoveringMarker = marker;\n\n this.trigger(EVENTS.OVER_MARKER, marker);\n\n if (!this.prop.showAllTooltips) {\n marker.showTooltip(e);\n }\n }\n }\n\n /**\n * @summary Handles mouse leave events, hide the tooltip\n * @param {MouseEvent} e\n * @param {PSV.plugins.MarkersPlugin.Marker} [marker]\n * @fires PSV.plugins.MarkersPlugin.leave-marker\n * @private\n */\n __onMouseLeave(e, marker) {\n // do not hide if we enter the tooltip itself while hovering a polygon\n if (marker && !(marker.isPoly() && this.__targetOnTooltip(e.relatedTarget, marker.tooltip))) {\n this.trigger(EVENTS.LEAVE_MARKER, marker);\n\n this.prop.hoveringMarker = null;\n\n if (!this.prop.showAllTooltips) {\n marker.hideTooltip();\n }\n }\n }\n\n /**\n * @summary Handles mouse move events, refreshUi the tooltip for polygon markers\n * @param {MouseEvent} e\n * @param {PSV.plugins.MarkersPlugin.Marker} [targetMarker]\n * @fires PSV.plugins.MarkersPlugin.leave-marker\n * @fires PSV.plugins.MarkersPlugin.over-marker\n * @private\n */\n __onMouseMove(e, targetMarker) {\n let marker;\n\n if (targetMarker?.isPoly()) {\n marker = targetMarker;\n }\n // do not hide if we enter the tooltip itself while hovering a polygon\n else if (this.prop.hoveringMarker && this.__targetOnTooltip(e.target, this.prop.hoveringMarker.tooltip)) {\n marker = this.prop.hoveringMarker;\n }\n\n if (marker) {\n if (!this.prop.hoveringMarker) {\n this.trigger(EVENTS.OVER_MARKER, marker);\n\n this.prop.hoveringMarker = marker;\n }\n\n if (!this.prop.showAllTooltips) {\n marker.showTooltip(e);\n }\n }\n else if (this.prop.hoveringMarker?.isPoly()) {\n this.trigger(EVENTS.LEAVE_MARKER, this.prop.hoveringMarker);\n\n if (!this.prop.showAllTooltips) {\n this.prop.hoveringMarker.hideTooltip();\n }\n\n this.prop.hoveringMarker = null;\n }\n }\n\n /**\n * @summary Handles mouse click events, select the marker and open the panel if necessary\n * @param {Event} e\n * @param {Object} data\n * @param {boolean} dblclick\n * @fires PSV.plugins.MarkersPlugin.select-marker\n * @fires PSV.plugins.MarkersPlugin.unselect-marker\n * @private\n */\n __onClick(e, data, dblclick) {\n let marker = data.objects.find(o => o.userData[MARKER_DATA])?.userData[MARKER_DATA];\n\n if (!marker) {\n marker = this.__getTargetMarker(data.target, true);\n }\n\n if (marker) {\n this.prop.currentMarker = marker;\n\n this.trigger(EVENTS.SELECT_MARKER, marker, {\n dblclick : dblclick,\n rightclick: data.rightclick,\n });\n\n if (this.config.clickEventOnMarker) {\n // add the marker to event data\n data.marker = marker;\n }\n else {\n e.stopPropagation();\n }\n\n // the marker could have been deleted in an event handler\n if (this.markers[marker.id]) {\n this.showMarkerPanel(marker.id);\n }\n }\n else if (this.prop.currentMarker) {\n this.trigger(EVENTS.UNSELECT_MARKER, this.prop.currentMarker);\n\n this.psv.panel.hide(ID_PANEL_MARKER);\n\n this.prop.currentMarker = null;\n }\n }\n\n /**\n * @summary Updates the visiblity of the panel and the buttons\n * @private\n */\n __refreshUi() {\n const nbMarkers = Object.values(this.markers).filter(m => !m.config.hideList).length;\n const markersButton = this.psv.navbar.getButton(MarkersButton.id, false);\n const markersListButton = this.psv.navbar.getButton(MarkersListButton.id, false);\n\n if (nbMarkers === 0) {\n markersButton?.hide();\n markersListButton?.hide();\n\n if (this.psv.panel.isVisible(ID_PANEL_MARKERS_LIST)) {\n this.psv.panel.hide();\n }\n else if (this.psv.panel.isVisible(ID_PANEL_MARKER)) {\n this.psv.panel.hide();\n }\n }\n else {\n markersButton?.show();\n markersListButton?.show();\n\n if (this.psv.panel.isVisible(ID_PANEL_MARKERS_LIST)) {\n this.showMarkersList();\n }\n else if (this.psv.panel.isVisible(ID_PANEL_MARKER)) {\n this.prop.currentMarker ? this.showMarkerPanel(this.prop.currentMarker) : this.psv.panel.hide();\n }\n }\n }\n\n /**\n * @summary Adds or remove the objects observer if there are 3D markers\n * @private\n */\n __checkObjectsObserver() {\n const has3d = Object.values(this.markers).some(marker => marker.is3d());\n\n if (!has3d && this.prop.stopObserver) {\n this.prop.stopObserver();\n this.prop.stopObserver = null;\n }\n else if (has3d && !this.prop.stopObserver) {\n this.prop.stopObserver = this.psv.observeObjects(MARKER_DATA, this);\n }\n }\n\n}\n"],"names":["EVENTS","GOTO_MARKER_DONE","LEAVE_MARKER","OVER_MARKER","RENDER_MARKERS_LIST","SELECT_MARKER","SELECT_MARKER_LIST","UNSELECT_MARKER","HIDE_MARKERS","SET_MARKERS","SHOW_MARKERS","SVG_NS","MARKER_DATA","ID_PANEL_MARKER","ID_PANEL_MARKERS_LIST","MARKERS_LIST_TEMPLATE","markers","title","dataKey","icon","map","marker","config","id","type","image","getListContent","join","getShortestArc","from","to","tCandidates","Math","PI","reduce","value","candidate","newCandidate","abs","Infinity","PSVError","message","Error","captureStackTrace","stack","prototype","Object","create","name","constructor","logWarn","console","warn","THREE","Quaternion","greatArcIntermediaryPoint","p1","p2","f","λ1","φ1","λ2","φ2","r","utils","greatArcDistance","a","sin","b","x","cos","y","z","atan2","sqrt","getPolygonCenter","polygon","workPoints","k","i","length","d","push","sum","intermediary","point","parseAngle","getPolylineCenter","polyline","lengths","l","CONSTANTS","SPHERE_RADIUS","consumed","j","round","MARKER_TYPES","imageLayer","html","polygonPx","polygonRad","polylinePx","polylineRad","square","rect","circle","ellipse","path","Marker","properties","psv","getType","visible","$el","data","undefined","tooltip","props","dynamicSize","anchor","position","position2D","positions3D","width","height","def","loader","is3d","TextureLoader","withCredentials","setWithCredentials","requestHeaders","setRequestHeader","isNormal","document","createElement","isPolygon","createElementNS","isPolyline","isSvg","update","destroy","isPoly","isPolyPx","isPolyRad","getScale","zoomLevel","scale","Array","isArray","zoom","bounds","EASINGS","inQuad","longitude","halfFov","degToRad","prop","hFov","arc","outQuad","max","listContent","content","showTooltip","mousePosition","viewerPos","getPosition","container","box","size","arrow","top","clientY","left","clientX","move","hideTooltip","hide","newType","deepmerge","setAttribute","className","addClasses","style","opacity","parsePosition","__updateNormal","__updatePoly","__updateSvg","__update3d","isExtendedPosition","backgroundImage","innerHTML","transformOrigin","dataHelper","cleanPosition","sphericalCoordsToVector3","cx","cy","rx","ry","each","setAttributeNS","svgStyle","dasherize","fill","actualPoly","splice","coord","sphericalCoords","textureCoordsToSphericalCoords","latitude","centroid","material","MeshBasicMaterial","transparent","depthTest","geometry","PlaneGeometry","mesh","Mesh","userData","Group","add","defineProperty","enumerable","get","children","set","load","texture","anisotropy","needsUpdate","copy","orientation","lookAt","rotateX","rotateY","allowNone","found","keys","MarkersButton","navbar","plugin","getPlugin","on","toggleActive","off","isSupported","handleEvent","e","onClick","show","AbstractButton","pin","MarkersListButton","OPEN_PANEL","CLOSE_PANEL","args","toggleMarkersList","pinList","DEFAULTS","lang","registerButton","MarkersPlugin","options","currentMarker","hoveringMarker","stopObserver","clickEventOnMarker","listButton","hideButton","cursor","mousemove","svgContainer","appendChild","addEventListener","init","CLICK","DOUBLE_CLICK","RENDER","CONFIG_CHANGED","once","READY","setMarkers","clearMarkers","removeChild","__onMouseEnter","__getTargetMarker","target","__onMouseLeave","__onMouseMove","preventDefault","__onClick","renderMarkers","OBJECT_EVENTS","ENTER_OBJECT","detail","originalEvent","LEAVE_OBJECT","HOVER_OBJECT","trigger","toggleAllTooltips","showAllTooltips","hideAllTooltips","getNbMarkers","getMarkers","values","addMarker","render","renderer","scene","__refreshUi","__checkObjectsObserver","getMarker","markerId","getCurrentMarker","updateMarker","removeMarker","remove","removeMarkers","markerIds","forEach","gotoMarker","speed","animate","then","hideMarker","toggleMarker","showMarker","showMarkerPanel","panel","contentId","hideMarkersList","showMarkersList","hideList","change","noMargin","clickHandler","li","getClosest","dataset","getZoomLevel","viewerPosition","isVisible","__getMarkerPosition","__isMarkerVisible","positions","__getPolyPositions","points","pos","__updateMarkerSize","transform","toggleClass","dot","direction","getAttributeNS","removeAttributeNS","getBoundingClientRect","removeClasses","sphericalCoordsToViewerCoords","vector3ToViewerCoords","nbVectors","vector","toBeComputed","neighbours","neighbour","invisible","index","reverse","pair","__getPolyIntermediaryPoint","filter","P1","P2","C","clone","normalize","N","Vector3","crossVectors","V","X","multiplyScalar","Y","H","addVectors","applyAxisAngle","closest","target2","__targetOnTooltip","hasParent","relatedTarget","targetMarker","dblclick","objects","find","o","rightclick","stopPropagation","nbMarkers","m","markersButton","getButton","markersListButton","has3d","some","observeObjects","AbstractPlugin"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEA;EACA;EACA;EACA;EACA;EACA;;MACaA,MAAM,GAAG;EACpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,gBAAgB,EAAK,kBAPD;;EAQpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAS,cAdD;;EAepB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,WAAW,EAAU,aArBD;;EAsBpB;EACF;EACA;EACA;EACA;EACA;EACA;EACEC,EAAAA,mBAAmB,EAAE,qBA7BD;;EA8BpB;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEC,EAAAA,aAAa,EAAQ,eAtCD;;EAuCpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,kBAAkB,EAAG,oBA7CD;;EA8CpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,eAAe,EAAM,iBApDD;;EAqDpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAS,cA1DD;;EA2DpB;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,WAAW,EAAU,aAjED;;EAkEpB;EACF;EACA;EACA;EACA;EACEC,EAAAA,YAAY,EAAS;EAvED;EA0EtB;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,MAAM,GAAG,4BAAf;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,WAAW,GAAG,WAApB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,eAAe,GAAG,QAAxB;EAEP;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,qBAAqB,GAAG,aAA9B;EAEP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACC,OAAD,EAAUC,KAAV,EAAiBC,OAAjB;EAAA,8GAEAC,OAFA,SAEQF,KAFR,yDAI/BD,OAAO,CAACI,GAAR,CAAY,UAAAC,MAAM;EAAA,+BACTH,OADS,WACGG,MAAM,CAACC,MAAP,CAAcC,EADjB,iEAEh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"}