@maptalks/3dtiles 0.124.3 → 0.125.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"maptalks.3dtiles.es.js","sources":["../../../node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js","../../../node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js","../../../node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/conversions.js","../../../node_modules/.pnpm/color-name@1.1.3/node_modules/color-name/index.js","../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/route.js","../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/index.js","../../../node_modules/.pnpm/color@3.2.1/node_modules/color/index.js","../src/common/Util.js","../src/common/UrlUtil.js","../src/common/Constants.js","../../gl/dist/transcoders.js","../src/layer/Geo3DTilesWorkerConnection.js","../src/common/GLTFHelpers.js","../src/common/Transform.js","../src/common/Math.js","../src/common/TileHelper.js","../../../node_modules/.pnpm/colorin@0.5.0/node_modules/colorin/index.js","../../../node_modules/.pnpm/@maptalks+function-type@1.4.1/node_modules/@maptalks/function-type/index.js","../src/layer/renderer/TileMeshPainter.js","../src/layer/i3s/Util.js","../src/layer/i3s/I3SNode.js","../src/layer/i3s/I3SHelper.js","../src/layer/renderer/Geo3DTilesRenderer.js","../src/layer/renderer/LRUCache.js","../src/common/intersects_oriented_box.js","../src/layer/renderer/Rectangle.js","../src/layer/renderer/TileBoundingRegion.js","../src/layer/Geo3DTilesLayer.ts","../src/loaders/transcoders.js","../src/loaders/B3DMLoader.js","../src/loaders/I3DMLoader.js","../src/loaders/PNTSLoader.js","../src/loaders/CMPTLoader.js","../build/index.js"],"sourcesContent":["'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nvar colorString = require('color-string');\nvar convert = require('color-convert');\n\nvar _slice = [].slice;\n\nvar skippedModels = [\n\t// to be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// shouldn't really be in color-convert either...\n\t'hex'\n];\n\nvar hashedModelKeys = {};\nObject.keys(convert).forEach(function (model) {\n\thashedModelKeys[_slice.call(convert[model].labels).sort().join('')] = model;\n});\n\nvar limiters = {};\n\nfunction Color(obj, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tvar i;\n\tvar channels;\n\n\tif (obj == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (obj instanceof Color) {\n\t\tthis.model = obj.model;\n\t\tthis.color = obj.color.slice();\n\t\tthis.valpha = obj.valpha;\n\t} else if (typeof obj === 'string') {\n\t\tvar result = colorString.get(obj);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + obj);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (obj.length) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tvar newArr = _slice.call(obj, 0, channels);\n\t\tthis.color = zeroArray(newArr, channels);\n\t\tthis.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1;\n\t} else if (typeof obj === 'number') {\n\t\t// this is always RGB - can be converted later on.\n\t\tobj &= 0xFFFFFF;\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(obj >> 16) & 0xFF,\n\t\t\t(obj >> 8) & 0xFF,\n\t\t\tobj & 0xFF\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tvar keys = Object.keys(obj);\n\t\tif ('alpha' in obj) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0;\n\t\t}\n\n\t\tvar hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(obj));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tvar labels = convert[this.model].labels;\n\t\tvar color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(obj[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tvar limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString: function () {\n\t\treturn this.string();\n\t},\n\n\ttoJSON: function () {\n\t\treturn this[this.model]();\n\t},\n\n\tstring: function (places) {\n\t\tvar self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString: function (places) {\n\t\tvar self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray: function () {\n\t\treturn this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha);\n\t},\n\n\tobject: function () {\n\t\tvar result = {};\n\t\tvar channels = convert[this.model].channels;\n\t\tvar labels = convert[this.model].labels;\n\n\t\tfor (var i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray: function () {\n\t\tvar rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject: function () {\n\t\tvar rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround: function (places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model);\n\t},\n\n\talpha: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(100)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(100)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.rgb().color;\n\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.rgb().color;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight: function () {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = this.rgb();\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\t\treturn rgb;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale: function () {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar rgb = this.rgb().color;\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(val, val, val);\n\t},\n\n\tfade: function (ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer: function (ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.hsl();\n\t\tvar hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix: function (mixinColor, weight) {\n\t\t// ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\t\tvar color1 = mixinColor.rgb();\n\t\tvar color2 = this.rgb();\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t}\n};\n\n// model conversion methods and static constructors\nObject.keys(convert).forEach(function (model) {\n\tif (skippedModels.indexOf(model) !== -1) {\n\t\treturn;\n\t}\n\n\tvar channels = convert[model].channels;\n\n\t// conversion methods\n\tColor.prototype[model] = function () {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments.length) {\n\t\t\treturn new Color(arguments, model);\n\t\t}\n\n\t\tvar newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha;\n\t\treturn new Color(assertArray(convert[this.model][model].raw(this.color)).concat(newAlpha), model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (color) {\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(_slice.call(arguments), channels);\n\t\t}\n\t\treturn new Color(color, model);\n\t};\n});\n\nfunction roundTo(num, places) {\n\treturn Number(num.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (num) {\n\t\treturn roundTo(num, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tmodel.forEach(function (m) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t});\n\n\tmodel = model[0];\n\n\treturn function (val) {\n\t\tvar result;\n\n\t\tif (arguments.length) {\n\t\t\tif (modifier) {\n\t\t\t\tval = modifier(val);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = val;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(val) {\n\treturn Array.isArray(val) ? val : [val];\n}\n\nfunction zeroArray(arr, length) {\n\tfor (var i = 0; i < length; i++) {\n\t\tif (typeof arr[i] !== 'number') {\n\t\t\tarr[i] = 0;\n\t\t}\n\t}\n\n\treturn arr;\n}\n\nmodule.exports = Color;\n","import Color from 'color';\nexport function isNil(v) {\n return v === undefined || v === null;\n}\n\nexport function extend(dest) { // (Object[, Object, ...]) ->\n for (let i = 1; i < arguments.length; i++) {\n const src = arguments[i];\n for (const k in src) {\n dest[k] = src[k];\n }\n }\n return dest;\n}\n\nexport function isFunction(obj) {\n if (obj === null || obj === undefined) {\n return false;\n }\n return typeof obj === 'function' || (obj.constructor !== null && obj.constructor === Function);\n}\n\n/**\n * Whether the obj is a javascript object.\n * @param {Object} obj - object\n * @return {Boolean}\n * @memberOf Util\n */\nexport function isObject(obj) {\n return typeof obj === 'object' && !!obj;\n}\n\n/**\n * Whether val is a number and not a NaN.\n * @param {Object} val - val\n * @return {Boolean}\n * @memberOf Util\n */\nexport function isNumber(val) {\n return (typeof val === 'number') && !isNaN(val);\n}\n\nexport function toRadian(d) {\n return d * Math.PI / 180;\n}\n\nexport function toDegree(d) {\n return d / Math.PI * 180;\n}\n\nexport function getAbsoluteURL(url) {\n let a = document.createElement('a');\n a.href = url;\n url = a.href;\n a = null;\n return url;\n}\n\nexport function sign(x) {\n if (Math.sign) {\n return Math.sign(x);\n }\n x = +x; // convert to a number\n if (x === 0 || isNaN(x)) {\n return Number(x);\n }\n return x > 0 ? 1 : -1;\n}\n\nconst extraByteMap = [1, 1, 1, 1, 2, 2, 3, 0];\n\nexport function stringFromUTF8Array(data) {\n const count = data.length;\n let str = '';\n\n for (let index = 0; index < count;) {\n let ch = data[index++];\n if (ch & 0x80) {\n let extra = extraByteMap[(ch >> 3) & 0x07];\n if (!(ch & 0x40) || !extra || ((index + extra) > count))\n return null;\n\n ch = ch & (0x3F >> extra);\n for (;extra > 0; extra -= 1) {\n const chx = data[index++];\n if ((chx & 0xC0) !== 0x80)\n return null;\n\n ch = (ch << 6) | (chx & 0x3F);\n }\n }\n\n str += String.fromCharCode(ch);\n }\n return str;\n}\n\n// 给 Matrix3 指定某列设置数据\nexport function setColumn3(out, arr, col) {\n out[3 * col] = arr[0];\n out[3 * col + 1] = arr[1];\n out[3 * col + 2] = arr[2];\n return out;\n}\n\nexport function flatArr(arr) {\n if (arr.flat) {\n return arr.flat(Infinity);\n } else {\n return arr.reduce((acc, val) => acc.concat(val), []);\n }\n}\n\nexport function getBatchIdArrayType(max) {\n if (max < 256) return Uint8Array;\n if (max < 65536) return Uint16Array;\n return Uint32Array;\n}\n\n// const base64Matcher = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\n\nexport function isBase64(url) {\n return url.indexOf('data:') === 0;\n}\n\nexport function base64URLToArrayBuffer(url) {\n const firstDot = url.indexOf('base64,');\n const base64 = url.substring(firstDot + 7);\n const binary_string = window.atob(base64);\n const len = binary_string.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nexport function pushIn(dest) {\n for (let i = 1; i < arguments.length; i++) {\n const src = arguments[i];\n if (src) {\n for (let ii = 0, ll = src.length; ii < ll; ii++) {\n dest.push(src[ii]);\n }\n }\n }\n return dest.length;\n}\n\nconst colorCache = {};\nexport function normalizeColor(out, color) {\n if (!Array.isArray(color)) {\n const key = color;\n color = colorCache[key] = colorCache[key] || Color(color).array().map(v => { return v / 255; });\n }\n for (let i = 0; i < color.length; i++) {\n out[i] = color[i];\n }\n if (color.length === 3) {\n out[3] = 1;\n }\n return out;\n}\n","export function isRelativeURL(url) {\n return url.indexOf('http://') === -1 && url.indexOf('https://') === -1 && url.indexOf('file://') === -1;\n}\n\nexport function prepareFetchOptions(fetchOptions) {\n fetchOptions = fetchOptions || {};\n fetchOptions.referrerPolicy = fetchOptions.referrerPolicy || 'origin';\n fetchOptions.referrer = window && window.location.href;\n return fetchOptions;\n}\n","export const CANDIDATE_MAX_ERROR = 500;\nexport const DEFAULT_MAXIMUMSCREENSPACEERROR = 16;\n","/*!\n * @maptalks/gl v0.124.3\n * LICENSE : UNLICENSED\n * (c) 2016-2026 maptalks.com\n */\nconst n = function() {\n if (\"undefined\" != typeof globalThis) return globalThis;\n if (\"undefined\" != typeof self) return self;\n if (\"undefined\" != typeof window) return window;\n if (\"undefined\" != typeof global) return global;\n throw new Error(\"unable to locate global object\");\n}, t = n(), e = t.gl_trans__coders = t.gl_trans__coders || {};\n\nfunction r(n) {\n return e[n];\n}\n\nfunction _(n, t) {\n e[n] = t;\n}\n\nfunction o() {\n return n().maptalks_gltf_loader;\n}\n\nfunction l(t) {\n n().maptalks_gltf_loader_bundle = t;\n}\n\ne.inject = function(e) {\n const r = e.toString(), _ = r.indexOf(\"{\") + 1, o = r.substring(0, _), l = t.gl_trans__coders = t.gl_trans__coders || {};\n let s = `${o}\\n const _____getGlobal = ${n.toString()};\\n const g___lobals = _____getGlobal()\\n const tran_____scoders = g___lobals['gl_trans__coders'] = g___lobals['gl_trans__coders'] || {};`;\n for (const n in l) \"inject\" !== n && \"getTranscoder\" !== n && \"registerTranscoder\" !== n && (s += 'tran_____scoders[\"' + n + '\"] =' + l[n].toString() + \"\\n;\");\n return s += \"\\n(\" + n().maptalks_gltf_loader_bundle.toString() + \")({});\\n\", s += \"\\n\" + r.substring(o.length), \n s;\n}, e.registerTranscoder = _, e.getTranscoder = r;\n\nexport { e as default, o as getGLTFLoaderBundle, r as getTranscoder, l as registerGLTFLoaderBundle, _ as registerTranscoder };\n","import * as maptalks from 'maptalks';\n\nconst canvas = typeof document === 'undefined' ? null : document.createElement('canvas');\n\nexport default class Geo3DTilesWorkerConnection extends maptalks.worker.Actor {\n constructor(workerKey, mapId, supportNPOT) {\n super(workerKey);\n this.mapId = mapId;\n this._supportNPOT = supportNPOT;\n }\n\n initialize(cb) {\n cb(null);\n }\n\n loadTile(layerId, params, cb) {\n let buffers = null;\n if (params && params.arraybuffer) {\n buffers = [params.arraybuffer];\n }\n const data = {\n mapId : this.mapId,\n layerId,\n command : 'loadTile',\n params\n };\n this.send(data, buffers, cb);\n }\n\n abortTileLoading(layerId, url, cb) {\n const data = {\n mapId : this.mapId,\n layerId,\n command : 'abortTileLoading',\n params : {\n url\n }\n };\n this.broadcast(data, null, cb);\n }\n\n addLayer(layerId, options, cb) {\n const data = {\n actorId: this.actorId,\n mapId : this.mapId,\n layerId,\n command : 'addLayer',\n params : {\n options\n }\n };\n\n this.broadcast(data, null, cb);\n }\n\n removeLayer(layerId, cb) {\n const data = {\n mapId : this.mapId,\n layerId,\n command : 'removeLayer'\n };\n this.broadcast(data, null, cb);\n }\n\n requestImage({ url }, cb) {\n const image = new Image();\n image.onload = () => {\n if (!this.isActive()) {\n return;\n }\n if (!canvas) {\n cb(new Error('There is no canvas to draw image!'));\n return;\n }\n const img = this._supportNPOT ? image : resize(image);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n ctx.drawImage(img, 0, 0, img.width, img.height);\n const imgData = ctx.getImageData(0, 0, img.width, img.height);\n //TODO, retina may need special operations\n const result = { width : img.width, height : img.height, data : new Uint8Array(imgData.data) };\n cb(null, result, [result.data.buffer]);\n };\n image.onerror = function (err) {\n cb(err);\n };\n image.src = url;\n }\n}\n\nfunction resize(image) {\n if (isPowerOfTwo(image.width) && isPowerOfTwo(image.height)) {\n return image;\n }\n let width = image.width;\n let height = image.height;\n if (!isPowerOfTwo(width)) {\n width = floorPowerOfTwo(width);\n }\n if (!isPowerOfTwo(height)) {\n height = floorPowerOfTwo(height);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n const url = image.src;\n const idx = url.lastIndexOf('/') + 1;\n const filename = url.substring(idx);\n console.warn(`Texture(${filename})'s size is not power of two, resize from (${image.width}, ${image.height}) to (${width}, ${height})`);\n return canvas;\n}\n\nfunction isPowerOfTwo(value) {\n return (value & (value - 1)) === 0 && value !== 0;\n}\n\nfunction floorPowerOfTwo(value) {\n return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { mat4, quat } from 'gl-matrix';\n\nconst { GLTFLoader } = getGLTFLoaderBundle();\n\nexport function iterateMesh(gltf, cb) {\n if (!gltf.scenes || !gltf.scenes.length) {\n return;\n }\n for (let i0 = 0, l0 = gltf.scenes.length; i0 < l0; i0++) {\n const nodes = gltf.scenes[i0].nodes;\n for (let i = 0, l = nodes.length; i < l; i++) {\n const matrices = [];\n const node = nodes[i];\n iterateNode(node, matrices, gltf, cb);\n // if (node.children && node.children.length) {\n // for (let ii = 0, ll = node.children.length; ii < ll; ii++) {\n // iterateNode(node.children[i], matrices, gltf, cb);\n // }\n // }\n }\n }\n}\n\nconst TMAT = [];\nconst RMAT = [];\nconst SMAT = [];\nconst EMPTY_T = [0, 0, 0];\nconst EMTPY_Q = quat.identity([]);\nconst EMPTY_S = [1, 1, 1];\n\nfunction iterateNode(node, nodeMatrices, gltf, cb) {\n const matrices = nodeMatrices.slice(0);\n if (node.matrix) {\n matrices.push(node.matrix);\n } else if (node.rotation || node.translation || node.scale) {\n const tm = mat4.fromTranslation(TMAT, node.translation || EMPTY_T);\n const rm = mat4.fromQuat(RMAT, node.rotation || EMTPY_Q);\n const sm = mat4.fromScaling(SMAT, node.scale || EMPTY_S);\n mat4.multiply(sm, rm, sm);\n const matrix = mat4.multiply([], tm, sm);\n matrices.push(matrix);\n }\n if (node.children && node.children.length) {\n for (let ii = 0, ll = node.children.length; ii < ll; ii++) {\n iterateNode(node.children[ii], matrices, gltf, cb);\n }\n }\n if (node.mesh !== undefined) {\n const meshIndex = node.mesh;\n const mesh = gltf.meshes[meshIndex];\n if (mesh) {\n const mat = matrices.slice(0);\n const primitives = mesh.primitives;\n for (let ii = 0, ll = primitives.length; ii < ll; ii++) {\n const primitive = primitives[ii];\n if (primitive) {\n primitive.matrices = mat;\n cb(primitive, meshIndex, ii, gltf);\n }\n }\n }\n }\n // if (node.meshes && node.meshes.length) {\n // for (let i = 0, l = node.meshes.length; i < l; i++) {\n // const mesh = node.meshes[i];\n // if (mesh) {\n // const mat = matrices.slice(0);\n // const primitives = mesh.primitives;\n // for (let ii = 0, ll = primitives.length; ii < ll; ii++) {\n // const primitive = primitives[ii];\n // if (primitive) {\n // primitive.matrices = mat;\n // cb(primitive, gltf);\n // }\n // }\n // }\n // }\n // }\n\n}\n\n// 遍历 GLTF-Loader 返回的bufferData\nexport function iterateBufferData(arr, cb) {\n let { byteOffset, byteStride: stride, count } = arr;\n const { componentType, itemSize } = arr;\n const arrayBuffer = arr.array.buffer;\n const ctor = componentType ? GLTFLoader.getTypedArrayCtor(componentType) : arr.array.constructor;\n byteOffset = byteOffset === undefined ? arr.array.byteOffset : byteOffset;\n stride = stride || 0;\n count = count || arr.array.length / itemSize;\n if ((!stride || stride === itemSize * ctor.BYTES_PER_ELEMENT) && byteOffset % ctor.BYTES_PER_ELEMENT === 0) {\n const src = new ctor(arrayBuffer, byteOffset, count * itemSize);\n for (let i = 0; i < count * itemSize; i+= itemSize) {\n const tempTypeArray = new ctor(src.buffer, byteOffset + i * ctor.BYTES_PER_ELEMENT, itemSize);\n cb(tempTypeArray, i / itemSize);\n }\n return;\n }\n const tempUint8 = new Uint8Array(itemSize * ctor.BYTES_PER_ELEMENT);\n if (!stride) {\n stride = itemSize * ctor.BYTES_PER_ELEMENT;\n }\n for (let i = 0; i < count; i++) {\n const start = stride * i + byteOffset;\n const uint8Arr = new Uint8Array(arrayBuffer, start, itemSize * ctor.BYTES_PER_ELEMENT);\n tempUint8.set(uint8Arr);\n const item = new ctor(tempUint8.buffer);\n cb(item, i);\n uint8Arr.set(tempUint8);\n }\n}\n\n\n// 从 GLTF-Loader 返回的bufferData获取指定位置的数据\nexport function getItemAtBufferData(out, arr, index) {\n let { byteOffset, byteStride: stride } = arr;\n const { componentType, itemSize } = arr;\n const arrayBuffer = arr.array.buffer;\n const ctor = componentType ? GLTFLoader.getTypedArrayCtor(componentType) : arr.array.constructor;\n byteOffset = byteOffset === undefined ? arr.array.byteOffset : byteOffset;\n stride = stride || 0;\n if (!stride || (stride === itemSize * ctor.BYTES_PER_ELEMENT && byteOffset % ctor.BYTES_PER_ELEMENT === 0)) {\n const src = new ctor(arrayBuffer, byteOffset + index * itemSize * ctor.BYTES_PER_ELEMENT, itemSize);\n out.set(src);\n return out;\n }\n if (!stride) {\n stride = itemSize * ctor.BYTES_PER_ELEMENT;\n }\n const start = stride * index + byteOffset;\n const uint8Arr = new Uint8Array(arrayBuffer, start, itemSize * ctor.BYTES_PER_ELEMENT);\n const tempUint8 = new Uint8Array(out.buffer);\n tempUint8.set(uint8Arr);\n return out;\n\n}\n\nexport function setInstanceData(out, idx, matrix, row) {\n out[idx * 4] = matrix[row];\n out[idx * 4 + 1] = matrix[row + 4];\n out[idx * 4 + 2] = matrix[row + 8];\n out[idx * 4 + 3] = matrix[row + 12];\n}\n\n\nexport function binarizeGLTF(rawGLTF, glb) {\n const encoder = new TextEncoder();\n const rawGLTFData = encoder.encode(JSON.stringify(rawGLTF));\n // const binaryGLTFData = new Uint8Array(rawGLTFData.byteLength + 20);\n\n let chunkPadding = 0;\n if (rawGLTFData.byteLength % 4 !== 0) {\n chunkPadding = 4 - rawGLTFData.byteLength % 4;\n }\n // JSON的长度是 rawGLTFData.byteLength + 20\n const binaryGLTFData = new Uint8Array(rawGLTFData.byteLength + 20 + chunkPadding + glb.byteLength + 8);\n const binaryGLTF = {\n magic: new Uint8Array(binaryGLTFData.buffer, 0, 4),\n version: new Uint32Array(binaryGLTFData.buffer, 4, 1),\n length: new Uint32Array(binaryGLTFData.buffer, 8, 1),\n chunkLength: new Uint32Array(binaryGLTFData.buffer, 12, 1),\n chunkType: new Uint32Array(binaryGLTFData.buffer, 16, 1),\n chunkData: new Uint8Array(\n binaryGLTFData.buffer,\n 20,\n rawGLTFData.byteLength\n ),\n chunk1Length: new Uint32Array(binaryGLTFData.buffer, chunkPadding + 20 + rawGLTFData.byteLength, 1),\n chunk1Type: new Uint32Array(binaryGLTFData.buffer, chunkPadding + 24 + rawGLTFData.byteLength, 1),\n chunk1Data: new Uint8Array(\n binaryGLTFData.buffer,\n chunkPadding + 20 + rawGLTFData.byteLength + 4 + 4,\n glb.byteLength\n )\n };\n\n for (let i = 0; i < chunkPadding; i++) {\n // chunkPadding 用空格补充\n binaryGLTFData[rawGLTFData.byteLength + 20 + i] = 32;\n }\n\n binaryGLTF.magic[0] = \"g\".charCodeAt();\n binaryGLTF.magic[1] = \"l\".charCodeAt();\n binaryGLTF.magic[2] = \"T\".charCodeAt();\n binaryGLTF.magic[3] = \"F\".charCodeAt();\n\n binaryGLTF.version[0] = 2;\n binaryGLTF.length[0] = binaryGLTFData.byteLength;\n binaryGLTF.chunkLength[0] = rawGLTFData.byteLength + chunkPadding;\n binaryGLTF.chunkType[0] = 0x4e4f534a; // JSON\n binaryGLTF.chunkData.set(rawGLTFData);\n\n binaryGLTF.chunk1Length[0] = glb.byteLength;\n binaryGLTF.chunk1Type[0] = 0x004E4942;\n binaryGLTF.chunk1Data.set(glb);\n\n return binaryGLTFData;\n}\n\nexport function binarizeB3DM(featureTableJSON, batchTabelJSON, binaryGLTFData) {\n const encoder = new TextEncoder();\n\n // Feature Table\n const featureTableOffset = 28;\n const featureTableJSONData = encoder.encode(featureTableJSON);\n const featureTableLength = featureTableJSONData.byteLength;\n\n // Batch Table\n const batchTableOffset = featureTableOffset + featureTableLength;\n const batchTableJSONData = encoder.encode(batchTabelJSON);\n\n // Calculate alignment buffer by padding the remainder of the batch table\n const paddingCount = (batchTableOffset + batchTableJSONData.byteLength) % 8;\n const batchTableLength = batchTableJSONData.byteLength + paddingCount;\n const paddingStart = batchTableJSONData.byteLength;\n const paddingStop = batchTableLength;\n\n // Binary GLTF\n const binaryGLTFOffset = batchTableOffset + batchTableLength;\n const binaryGLTFLength = binaryGLTFData.byteLength;\n\n const dataSize = featureTableLength + batchTableLength + binaryGLTFLength;\n const b3dmRawData = new Uint8Array(28 + dataSize);\n\n const b3dmData = {\n magic: new Uint8Array(b3dmRawData.buffer, 0, 4),\n version: new Uint32Array(b3dmRawData.buffer, 4, 1),\n byteLength: new Uint32Array(b3dmRawData.buffer, 8, 1),\n featureTableJSONByteLength: new Uint32Array(b3dmRawData.buffer, 12, 1),\n featureTableBinaryByteLength: new Uint32Array(b3dmRawData.buffer, 16, 1),\n batchTableJSONByteLength: new Uint32Array(b3dmRawData.buffer, 20, 1),\n batchTableBinaryByteLength: new Uint32Array(b3dmRawData.buffer, 24, 1),\n featureTable: new Uint8Array(\n b3dmRawData.buffer,\n featureTableOffset,\n featureTableLength\n ),\n batchTable: new Uint8Array(\n b3dmRawData.buffer,\n batchTableOffset,\n batchTableLength\n ),\n binaryGLTF: new Uint8Array(\n b3dmRawData.buffer,\n binaryGLTFOffset,\n binaryGLTFLength\n ),\n };\n\n b3dmData.magic[0] = \"b\".charCodeAt();\n b3dmData.magic[1] = \"3\".charCodeAt();\n b3dmData.magic[2] = \"d\".charCodeAt();\n b3dmData.magic[3] = \"m\".charCodeAt();\n\n b3dmData.version[0] = 1;\n b3dmData.byteLength[0] = b3dmRawData.byteLength;\n\n b3dmData.featureTable.set(featureTableJSONData);\n b3dmData.featureTableJSONByteLength[0] = featureTableLength;\n b3dmData.featureTableBinaryByteLength[0] = 0;\n\n b3dmData.batchTable.set(batchTableJSONData);\n for(let index = paddingStart; index < paddingStop; ++index) {\n b3dmData.batchTable[index] = 0x20;\n }\n b3dmData.batchTableJSONByteLength[0] = batchTableLength;\n b3dmData.batchTableBinaryByteLength[0] = 0;\n b3dmData.binaryGLTF.set(binaryGLTFData);\n\n return b3dmRawData;\n}\n","//---------------------------\n// Cesium Codes for catersian and quaternion transformation\n//\n// All credit goes to Cesium team and Cesium Contributors\n// LICENSE : Apache License\n//---------------------------\nimport { vec3 } from 'gl-matrix';\nimport { toDegree, sign } from './Util';\n\n\n//reusable variables for radianToCartesian3\nconst scratchN = new Array(3),\n scratchK = new Array(3);\n\nconst wgs84RadiiSquared = [6378137.0 * 6378137.0, 6378137.0 * 6378137.0, 6356752.3142451793 * 6356752.3142451793];\n\n/**\n * from Cesium\n * Convert radians to Cartesian3 coordinate\n * from Cesium Cartesian3.fromRadians\n * @param {Number} longitude in radians\n * @param {Number} latitude in radians\n * @param {Number} height in meters\n * @param {Number} radius earth sphere's radius\n * @returns {Number[]} coordinate in Cartesian3\n */\nexport function radianToCartesian3(out, longitude, latitude, height) {\n const radiiSquared = wgs84RadiiSquared;\n\n const cosLatitude = Math.cos(latitude);\n scratchN[0] = cosLatitude * Math.cos(longitude);\n scratchN[1] = cosLatitude * Math.sin(longitude);\n scratchN[2] = Math.sin(latitude);\n normalizeCartesian(scratchN, scratchN);\n\n vec3.multiply(scratchK, radiiSquared, scratchN);\n const gamma = Math.sqrt(vec3.dot(scratchN, scratchK));\n divideByScalar(scratchK, scratchK, gamma);\n vec3.scale(scratchN, scratchN, height);\n\n return vec3.add(out, scratchK, scratchN);\n}\n\n//reusable variables for cartesian3ToDegree\nconst wgs84OneOverRadii = [1.0 / 6378137.0, 1.0 / 6378137.0, 1.0 / 6356752.3142451793];\nconst wgs84OneOverRadiiSquared = [1.0 / (6378137 * 6378137), 1.0 / (6378137 * 6378137), 1.0 / (6356752.3142451793 * 6356752.3142451793)];\n\nconst cartesianToCartographicP = new Array(3);\nconst cartesianToCartographicN = new Array(3);\nconst cartesianToCartographicH = new Array(3);\n\n/**\n * from Cesium\n * Creates a new Cartographic instance from a Cartesian position. The values in the\n * resulting object will be in radians.\n *\n * @param cartesian The Cartesian position to convert to cartographic representation.\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\n */\nexport function cartesian3ToDegree(result, cartesian) {\n const oneOverRadii = wgs84OneOverRadii;\n const oneOverRadiiSquared = wgs84OneOverRadiiSquared;\n const centerToleranceSquared = 0.1;\n\n //`cartesian is required.` is thrown from scaleToGeodeticSurface\n const p = scaleToGeodeticSurface(cartesianToCartographicP, cartesian, oneOverRadii, oneOverRadiiSquared, centerToleranceSquared);\n\n let n = vec3.mul(cartesianToCartographicN, p, oneOverRadiiSquared);\n n = normalizeCartesian(n, n);\n\n const h = vec3.sub(cartesianToCartographicH, cartesian, p);\n\n const longitude = Math.atan2(n[1], n[0]);\n const latitude = Math.asin(n[2]);\n const height = sign(vec3.dot(h, cartesian)) * magnitude(h);\n\n result[0] = toDegree(longitude);\n result[1] = toDegree(latitude);\n result[2] = height;\n return result;\n}\n\n//reusable variables for scaleToGeodeticSurface\nconst scaleToGeodeticSurfaceIntersection = new Array(3);\nconst scaleToGeodeticSurfaceGradient = new Array(3);\nconst EPSILON12 = 1E-12;\n\n/**\n * from Cesium\n * Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid. If the position is\n * at the center of the ellipsoid, this function returns undefined.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} oneOverRadii One over radii of the ellipsoid.\n * @param {Cartesian3} oneOverRadiiSquared One over radii squared of the ellipsoid.\n * @param {Number} centerToleranceSquared Tolerance for closeness to the center.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\n *\n * @exports scaleToGeodeticSurface\n *\n * @private\n */\nfunction scaleToGeodeticSurface(result, cartesian, oneOverRadii, oneOverRadiiSquared, centerToleranceSquared) {\n\n const positionX = cartesian[0];\n const positionY = cartesian[1];\n const positionZ = cartesian[2];\n\n const oneOverRadiiX = oneOverRadii[0];\n const oneOverRadiiY = oneOverRadii[1];\n const oneOverRadiiZ = oneOverRadii[2];\n\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n // Compute the squared ellipsoid norm.\n const squaredNorm = x2 + y2 + z2;\n const ratio = Math.sqrt(1.0 / squaredNorm);\n\n // As an initial approximation, assume that the radial intersection is the projection point.\n // const intersection = Cartesian3.multiplyByScalar(cartesian, ratio, scaleToGeodeticSurfaceIntersection);\n const intersection = vec3.scale(scaleToGeodeticSurfaceIntersection, cartesian, ratio);\n\n // If the position is near the center, the iteration will not converge.\n if (squaredNorm < centerToleranceSquared) {\n return !isFinite(ratio) ? undefined : intersection;\n }\n\n const oneOverRadiiSquaredX = oneOverRadiiSquared[0];\n const oneOverRadiiSquaredY = oneOverRadiiSquared[1];\n const oneOverRadiiSquaredZ = oneOverRadiiSquared[2];\n\n // Use the gradient at the intersection point in place of the true unit normal.\n // The difference in magnitude will be absorbed in the multiplier.\n const gradient = scaleToGeodeticSurfaceGradient;\n gradient[0] = intersection[0] * oneOverRadiiSquaredX * 2.0;\n gradient[1] = intersection[1] * oneOverRadiiSquaredY * 2.0;\n gradient[2] = intersection[2] * oneOverRadiiSquaredZ * 2.0;\n\n // Compute the initial guess at the normal vector multiplier, lambda.\n let lambda = (1.0 - ratio) * magnitude(cartesian) / (0.5 * magnitude(gradient));\n let correction = 0.0;\n\n let func;\n let denominator;\n let xMultiplier;\n let yMultiplier;\n let zMultiplier;\n let xMultiplier2;\n let yMultiplier2;\n let zMultiplier2;\n let xMultiplier3;\n let yMultiplier3;\n let zMultiplier3;\n\n do {\n lambda -= correction;\n\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n xMultiplier2 = xMultiplier * xMultiplier;\n yMultiplier2 = yMultiplier * yMultiplier;\n zMultiplier2 = zMultiplier * zMultiplier;\n\n xMultiplier3 = xMultiplier2 * xMultiplier;\n yMultiplier3 = yMultiplier2 * yMultiplier;\n zMultiplier3 = zMultiplier2 * zMultiplier;\n\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n // computations in the sections to follow.\n denominator = x2 * xMultiplier3 * oneOverRadiiSquaredX + y2 * yMultiplier3 * oneOverRadiiSquaredY + z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n const derivative = -2.0 * denominator;\n\n correction = func / derivative;\n } while (Math.abs(func) > EPSILON12);\n\n result[0] = positionX * xMultiplier;\n result[1] = positionY * yMultiplier;\n result[2] = positionZ * zMultiplier;\n return result;\n}\n\nfunction magnitude(v) {\n return vec3.length(v);\n}\n\nfunction divideByScalar(result, cartesian, scalar) {\n result[0] = cartesian[0] / scalar;\n result[1] = cartesian[1] / scalar;\n result[2] = cartesian[2] / scalar;\n return result;\n}\n\nexport function normalizeCartesian(out, a) {\n const x = a[0],\n y = a[1],\n z = a[2];\n let len = x * x + y * y + z * z;\n if (len > 0) {\n len = Math.sqrt(len);\n out[0] = a[0] / len;\n out[1] = a[1] / len;\n out[2] = a[2] / len;\n }\n return out;\n}\n\nexport function geodeticSurfaceNormal(origin, out) {\n vec3.multiply(\n out,\n origin,\n wgs84OneOverRadiiSquared\n );\n return vec3.normalize(out, out);\n}\n\n\nexport function geodeticSurfaceNormalCartographic(\n cartographic,\n result\n) {\n const longitude = cartographic[0];\n const latitude = cartographic[1];\n const cosLatitude = Math.cos(latitude);\n\n const x = cosLatitude * Math.cos(longitude);\n const y = cosLatitude * Math.sin(longitude);\n const z = Math.sin(latitude);\n\n result.x = x;\n result.y = y;\n result.z = z;\n return vec3.normalize(result, result);\n}\n","export const EPSILON14 = 0.00000000000001;\nexport const EPSILON15 = 0.000000000000001;\nexport const EPSILON6 = 0.000001;\n\nexport function equalsEpsilon (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) { //>>includeEnd('debug');\n\n relativeEpsilon = (relativeEpsilon || 0.0);\n absoluteEpsilon = (absoluteEpsilon || relativeEpsilon);\n const absDiff = Math.abs(left - right);\n return (\n absDiff <= absoluteEpsilon ||\n absDiff <= relativeEpsilon * Math.max(Math.abs(left), Math.abs(right))\n );\n}\n","import { stringFromUTF8Array, sign as mathSign } from './Util.js';\nimport { vec3, mat3, mat4 } from 'gl-matrix';\nimport { cartesian3ToDegree, geodeticSurfaceNormal, radianToCartesian3 } from './Transform';\nimport { EPSILON14, equalsEpsilon } from './Math';\n\nexport function readMagic(view, offset) {\n let magic = '';\n for (let i = 0; i < 4; i++) {\n const code = view.getUint8(offset + i);\n magic += String.fromCharCode(code);\n }\n return magic;\n}\n\nconst textDecoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8') : null;\n\nexport function readFeatureTableJSON(buffer, byteOffset, byteLength) {\n const arr = new Uint8Array(buffer, byteOffset, byteLength);\n if (textDecoder) {\n return JSON.parse(textDecoder.decode(arr));\n } else {\n return JSON.parse(stringFromUTF8Array(arr));\n }\n}\n\nexport function readFeatureTableBin(buffer, byteOffset, byteLength) {\n return {\n offset: byteOffset,\n byteLength: byteLength\n };\n}\n\n\nexport function readBatchTableJSON(buffer, byteOffset, byteLength) {\n const arr = new Uint8Array(buffer, byteOffset, byteLength);\n if (textDecoder) {\n return JSON.parse(textDecoder.decode(arr));\n } else {\n return JSON.parse(stringFromUTF8Array(arr));\n }\n}\n\nexport function readBatchTableBin(buffer, byteOffset, byteLength) {\n return {\n offset: byteOffset,\n byteLength\n };\n}\n\nexport function readBatchArray(batchId, buf, offset, count) {\n const { byteOffset, componentType, type } = batchId;\n const { ctor, type: reglType } = getComponentCtor(componentType || 'UNSIGNED_SHORT');\n const itemSize = getItemSize(type);\n return {\n byteStride: 0,\n byteOffset: byteOffset + offset,\n itemSize,\n count: count * itemSize,\n componentType: reglType,\n array: new ctor(buf, offset + byteOffset, count * itemSize)\n }\n}\n\nexport function readBatchId(batchId, buf, offset, count) {\n const batchIdData = readBatchArray(batchId, buf, offset, count);\n if (batchIdData.array.buffer.byteLength !== buf.byteLength) {\n batchIdData.array = batchIdData.array.slice();\n }\n return batchIdData;\n}\n\nexport function readBatchData(batchId, buf, count, index) {\n const { byteOffset, componentType, type } = batchId;\n const { ctor } = getComponentCtor(componentType || 'UNSIGNED_SHORT');\n const itemSize = getItemSize(type);\n const array = new ctor(buf, byteOffset, count * itemSize);\n if (itemSize === 1) {\n return array[index];\n } else {\n return array.subarray(index * itemSize, index * itemSize + itemSize);\n }\n\n}\n\nconst TYPE_SIZES = {\n 'SCALAR': 1,\n 'VEC2': 2,\n 'VEC3': 3,\n 'VEC4': 4\n};\n\nexport function getItemSize(type) {\n if (!type) {\n return 1;\n }\n return TYPE_SIZES[type];\n}\n\nconst typeMap = {\n \"BYTE\": { ctor: Int8Array, type: 0x1400, name: 'Int8Array' },\n \"UNSIGNED_BYTE\": { ctor: Uint8Array, type: 0x1401, name: 'Uint8Array' },\n \"SHORT\": { ctor: Int16Array, type: 0x1402, name: 'Int16Array' },\n \"UNSIGNED_SHORT\": { ctor: Uint16Array, type: 0x1403, name: 'Uint16Array' },\n \"INT\": { ctor: Int32Array, type: 0x1404, name: 'Int32Array' },\n \"UNSIGNED_INT\": { ctor: Uint32Array, type: 0x1405, name: 'Uint32Array' },\n \"FLOAT\": { ctor: Float32Array, type: 0x1406, name: 'Float32Array' },\n \"DOUBLE\": { ctor: Float64Array, type: 0x1406, name: 'Float64Array' }\n};\n\nexport function getComponentCtor(componentType) {\n return typeMap[componentType];\n}\n\nexport function getComponentFromCtor(ctor) {\n for (const p in typeMap) {\n if (ctor === typeMap[p].ctor) {\n return typeMap[p].type;\n }\n }\n throw new Error('unrecognized ctor:' + ctor);\n}\n\nexport function convertQuantizedPosition(out, arr, offset, scale) {\n const position = out;\n const count = arr.length / 3;\n for (let i = 0; i < count; i++) {\n position[i * 3] = (arr[i * 3] / 65535.0) * scale[0] + offset[0];\n position[i * 3 + 1] = (arr[i * 3 + 1] / 65535.0) * scale[1] + offset[1];\n position[i * 3 + 2] = (arr[i * 3 + 2] / 65535.0) * scale[2] + offset[2];\n }\n return position;\n}\n\n\nexport function readFeatureTableBatchTable(view, byteOffset, transferables) {\n const featureTableJsonByteLength = view.getUint32(12, true);\n const featureTableBinaryByteLength = view.getUint32(16, true);\n const batchTableJsonByteLength = view.getUint32(20, true);\n const batchTableBinaryByteLength = view.getUint32(24, true);\n\n const i3dmBuf = view.buffer;\n let featureTable = {}, featureTableBin;\n let batchTable = {}, batchTableBin = null;\n if (featureTableJsonByteLength > 0) {\n featureTable = readFeatureTableJSON(i3dmBuf, byteOffset, featureTableJsonByteLength);\n byteOffset += featureTableJsonByteLength;\n }\n if (featureTableBinaryByteLength > 0) {\n featureTableBin = readFeatureTableBin(i3dmBuf, byteOffset, featureTableBinaryByteLength);\n byteOffset += featureTableBinaryByteLength;\n }\n if (batchTableJsonByteLength > 0) {\n batchTable = readBatchTableJSON(i3dmBuf, byteOffset, batchTableJsonByteLength);\n byteOffset += batchTableJsonByteLength;\n }\n const batchTableBinInfo = readBatchTableBin(i3dmBuf, byteOffset, batchTableBinaryByteLength);\n batchTableBin = i3dmBuf.slice(batchTableBinInfo.offset, batchTableBinInfo.offset + batchTableBinInfo.byteLength);\n transferables.push(batchTableBin);\n\n return {\n featureTable, featureTableBin, batchTable, batchTableBin\n };\n}\n\n\nconst vectorProductLocalFrame = {\n up: {\n south: \"east\",\n north: \"west\",\n west: \"south\",\n east: \"north\",\n },\n down: {\n south: \"west\",\n north: \"east\",\n west: \"north\",\n east: \"south\",\n },\n south: {\n up: \"west\",\n down: \"east\",\n west: \"down\",\n east: \"up\",\n },\n north: {\n up: \"east\",\n down: \"west\",\n west: \"up\",\n east: \"down\",\n },\n west: {\n up: \"north\",\n down: \"south\",\n north: \"down\",\n south: \"up\",\n },\n east: {\n up: \"south\",\n down: \"north\",\n north: \"up\",\n south: \"down\",\n },\n};\n\nconst degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1],\n};\nconst localFrameToFixedFrameCache = {};\nconst scratchCalculateCartesian = {\n east:[],\n north:[],\n up:[],\n west:[],\n south:[],\n down:[],\n};\nlet scratchFirstCartesian = [];\nlet scratchSecondCartesian = [];\nlet scratchThirdCartesian = [];\n\nconst ZERO = [0, 0, 0];\n\nfunction localFrameToFixedFrameGenerator(firstAxis, secondAxis) {\n const thirdAxis = vectorProductLocalFrame[firstAxis][secondAxis];\n\n /**\n * Computes a 4x4 transformation matrix from a reference frame\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * @callback Transforms.LocalFrameToFixedFrame\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n */\n let resultat;\n const hashAxis = firstAxis + secondAxis;\n if (localFrameToFixedFrameCache[hashAxis]) {\n resultat = localFrameToFixedFrameCache[hashAxis];\n } else {\n resultat = function (origin, ellipsoid, result) {\n if (\n vec3.equals(origin, ZERO)\n ) {\n // If x, y, and z are zero, use the degenerate local frame, which is a special case\n vec3.copy(scratchFirstCartesian, degeneratePositionLocalFrame[firstAxis]);\n vec3.copy(scratchSecondCartesian, degeneratePositionLocalFrame[secondAxis]);\n vec3.copy(scratchThirdCartesian, degeneratePositionLocalFrame[thirdAxis]);\n } else if (\n equalsEpsilon(origin[0], 0.0, EPSILON14) &&\n equalsEpsilon(origin[1], 0.0, EPSILON14)\n ) {\n // If x and y are zero, assume origin is at a pole, which is a special case.\n const sign = mathSign(origin[2]);\n\n vec3.copy(scratchFirstCartesian, degeneratePositionLocalFrame[firstAxis]);\n if (firstAxis !== \"east\" && firstAxis !== \"west\") {\n vec3.scale(scratchFirstCartesian, scratchFirstCartesian, sign);\n }\n\n vec3.copy(scratchSecondCartesian, degeneratePositionLocalFrame[secondAxis]);\n if (secondAxis !== \"east\" && secondAxis !== \"west\") {\n vec3.scale(scratchSecondCartesian, scratchSecondCartesian, sign);\n }\n\n vec3.copy(scratchThirdCartesian, degeneratePositionLocalFrame[thirdAxis]);\n if (thirdAxis !== \"east\" && thirdAxis !== \"west\") {\n vec3.scale(scratchThirdCartesian, scratchThirdCartesian, sign);\n }\n } else {\n geodeticSurfaceNormal(origin, scratchCalculateCartesian.up);\n\n const up = scratchCalculateCartesian.up;\n const east = scratchCalculateCartesian.east;\n east[0] = -origin[1];\n east[1] = origin[0];\n east[2] = 0.0;\n vec3.normalize(scratchCalculateCartesian.east, east);\n vec3.cross(scratchCalculateCartesian.north, up, east);\n\n vec3.scale(\n scratchCalculateCartesian.down,\n scratchCalculateCartesian.up,\n -1\n );\n vec3.scale(\n scratchCalculateCartesian.west,\n scratchCalculateCartesian.east,\n -1\n );\n vec3.scale(\n scratchCalculateCartesian.south,\n scratchCalculateCartesian.north,\n -1\n );\n\n scratchFirstCartesian = scratchCalculateCartesian[firstAxis];\n scratchSecondCartesian = scratchCalculateCartesian[secondAxis];\n scratchThirdCartesian = scratchCalculateCartesian[thirdAxis];\n }\n result[0] = scratchFirstCartesian[0];\n result[1] = scratchFirstCartesian[1];\n result[2] = scratchFirstCartesian[2];\n result[3] = 0.0;\n result[4] = scratchSecondCartesian[0];\n result[5] = scratchSecondCartesian[1];\n result[6] = scratchSecondCartesian[2];\n result[7] = 0.0;\n result[8] = scratchThirdCartesian[0];\n result[9] = scratchThirdCartesian[1];\n result[10] = scratchThirdCartesian[2];\n result[11] = 0.0;\n result[12] = origin[0];\n result[13] = origin[1];\n result[14] = origin[2];\n result[15] = 1.0;\n return result;\n };\n localFrameToFixedFrameCache[hashAxis] = resultat;\n }\n return resultat;\n}\n\nfunction multiplyByMatrix3 (matrix, rotation, result) {\n //>>includeEnd('debug');\n\n const left0 = matrix[0];\n const left1 = matrix[1];\n const left2 = matrix[2];\n const left4 = matrix[4];\n const left5 = matrix[5];\n const left6 = matrix[6];\n const left8 = matrix[8];\n const left9 = matrix[9];\n const left10 = matrix[10];\n\n const right0 = rotation[0];\n const right1 = rotation[1];\n const right2 = rotation[2];\n const right4 = rotation[3];\n const right5 = rotation[4];\n const right6 = rotation[5];\n const right8 = rotation[6];\n const right9 = rotation[7];\n const right10 = rotation[8];\n\n const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\n const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\n const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\n\n const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\n const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\n const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\n\n const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\n const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\n const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = 0.0;\n result[4] = column1Row0;\n result[5] = column1Row1;\n result[6] = column1Row2;\n result[7] = 0.0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = 0.0;\n result[12] = matrix[12];\n result[13] = matrix[13];\n result[14] = matrix[14];\n result[15] = matrix[15];\n return result;\n}\n\n// function fromRowMajor(\n// column0Row0,\n// column1Row0,\n// column2Row0,\n// column3Row0,\n// column0Row1,\n// column1Row1,\n// column2Row1,\n// column3Row1,\n// column0Row2,\n// column1Row2,\n// column2Row2,\n// column3Row2,\n// column0Row3,\n// column1Row3,\n// column2Row3,\n// column3Row3) {\n// const out = [];\n// out[0] = column0Row0 || 0.0;\n// out[1] = column0Row1 || 0.0;\n// out[2] = column0Row2 || 0.0;\n// out[3] = column0Row3 || 0.0;\n// out[4] = column1Row0 || 0.0;\n// out[5] = column1Row1 || 0.0;\n// out[6] = column1Row2 || 0.0;\n// out[7] = column1Row3 || 0.0;\n// out[8] = column2Row0 || 0.0;\n// out[9] = column2Row1 || 0.0;\n// out[10] = column2Row2 || 0.0;\n// out[11] = column2Row3 || 0.0;\n// out[12] = column3Row0 || 0.0;\n// out[13] = column3Row1 || 0.0;\n// out[14] = column3Row2 || 0.0;\n// out[15] = column3Row3 || 0.0;\n// return out;\n// }\n\nexport function setTranslation(matrix, translation, result) {\n\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n\n result[8] = matrix[8];\n result[9] = matrix[9];\n result[10] = matrix[10];\n result[11] = matrix[11];\n\n result[12] = translation[0];\n result[13] = translation[1];\n result[14] = translation[2];\n result[15] = matrix[15];\n\n return result;\n}\n\nexport function getTranslation(out, matrix) {\n vec3.set(out, matrix[12], matrix[13], matrix[14]);\n return out;\n}\n\n\nexport const eastNorthUpToFixedFrame = localFrameToFixedFrameGenerator(\n \"east\",\n \"north\"\n);\nconst scratchRTCCoord = [];\nconst scratchCenter = [];\nconst scratchCartographic = [];\nconst projectedPosition = []\nconst scratchFromENU = [];\nconst scratchToENU = [];\nconst scratchRotation = [];\nconst coord = { x: 0, y: 0 };\nconst prjResult = { x: 0, y: 0 };\nconst RADIAN = Math.PI / 180;\n\nexport function basisTo2D(result, rtcCoord, matrix, projection, res, heightScale, heightOffset) {\n rtcCoord = vec3.copy(scratchRTCCoord, rtcCoord);\n const viewCenter = radianToCartesian3(scratchRTCCoord, rtcCoord[0] * RADIAN, rtcCoord[1] * RADIAN, rtcCoord[2]);\n const rtcCenter = mat4.getTranslation(scratchCenter, matrix);\n const ellipsoid = projection.ellipsoid;\n\n let cartographic;\n if (vec3.len(rtcCenter) === 0) {\n cartographic = vec3.set(scratchCartographic, 0, 0, -6378137);\n } else {\n // Get the 2D Center\n cartographic = cartesian3ToDegree(\n scratchCartographic,\n rtcCenter\n );\n }\n coord.x = cartographic[0];\n coord.y = cartographic[1];\n const prjCoord = projection.project(\n coord,\n prjResult\n );\n\n projectedPosition[0] = prjCoord.x / res;\n projectedPosition[1] = prjCoord.y / res;\n projectedPosition[2] = (cartographic[2] + heightOffset) * heightScale;\n\n // cartographic[0] *= Math.PI / 180;\n // cartographic[1] *= Math.PI / 180;\n\n // Assuming the instance are positioned in WGS84, invert the WGS84 transform to get the local transform and then convert to 2D\n const fromENU = eastNorthUpToFixedFrame(\n viewCenter,\n ellipsoid,\n scratchFromENU\n );\n const toENU = mat4.invert(scratchToENU, fromENU);\n const rotation = mat3.fromMat4(scratchRotation, matrix);\n const local = multiplyByMatrix3(toENU, rotation, result);\n // mat4.multiply(result, swizzleMatrix, local); // Swap x, y, z for 2D\n setTranslation(local, projectedPosition, result); // Use the projected center\n return result;\n}\n\n\nconst component_ctors = {\n 5120: Int8Array,\n 5122: Int16Array,\n 5124: Int32Array,\n 5121: Uint8Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n\nexport function getTypedArrayCtor(type) {\n return component_ctors[type];\n}\n\nexport function getComponentType(ctor) {\n for (const p in component_ctors) {\n if (ctor === component_ctors[p]) {\n return +p;\n }\n }\n throw new Error('unrecognized ctor:' + ctor);\n}\n\n// 用数据的width获得数据的类型\nexport function getAttrType(width) {\n if (width === 1) {\n return 'FLOAT';\n }\n return 'VEC' + width;\n}\n","let canvas;\r\nconst OPTIONS = {\r\n width: 100,\r\n height: 10\r\n};\r\n// const ISNODE = typeof global === 'object';\r\n\r\nlet offscreenCanvas = false;\r\ntry {\r\n const canvas = new OffscreenCanvas(1, 1);\r\n const ctx = canvas.getContext('2d');\r\n ctx.fillText('hello', 0, 0);\r\n offscreenCanvas = true;\r\n} catch (err) {\r\n offscreenCanvas = false;\r\n}\r\n\r\nfunction getCanvas() {\r\n if (!canvas) {\r\n const { width, height } = OPTIONS;\r\n if (offscreenCanvas) {\r\n canvas = new OffscreenCanvas(width, height);\r\n } else {\r\n canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n }\r\n return canvas;\r\n}\r\n\r\nexport function registerCanvas(canvasInstance) {\r\n if (canvasInstance) {\r\n canvas = canvasInstance;\r\n }\r\n}\r\n\r\nexport class ColorIn {\r\n constructor(colors, options = {}) {\r\n if (!Array.isArray(colors)) {\r\n console.error('colors is not array');\r\n return;\r\n }\r\n if (colors.length < 2) {\r\n console.error('colors.length should >1');\r\n return;\r\n }\r\n this.colors = colors;\r\n let min = Infinity, max = -Infinity;\r\n for (let i = 0, len = colors.length; i < len; i++) {\r\n const value = colors[i][0];\r\n min = Math.min(value, min);\r\n max = Math.max(value, max);\r\n }\r\n this.min = min;\r\n this.max = max;\r\n this.valueOffset = this.max - this.min;\r\n this.options = Object.assign({}, OPTIONS, options);\r\n this._initImgData();\r\n }\r\n\r\n getImageData() {\r\n return this.imgData;\r\n }\r\n\r\n _initImgData() {\r\n const canvas = getCanvas();\r\n const { width, height } = this.options;\r\n canvas.width = width;\r\n canvas.height = height;\r\n const ctx = canvas.getContext('2d');\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\r\n const { colors, valueOffset } = this;\r\n for (let i = 0, len = colors.length; i < len; i++) {\r\n const [stop, color] = colors[i];\r\n const s = (stop - this.min) / valueOffset;\r\n gradient.addColorStop(s, color);\r\n }\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n this.imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n getColor(stop) {\r\n stop = Math.max(this.min, stop);\r\n stop = Math.min(stop, this.max);\r\n const s = (stop - this.min) / this.valueOffset;\r\n let x = Math.round(s * this.imgData.width);\r\n x = Math.min(x, this.imgData.width - 1);\r\n const idx = x * 4;\r\n const r = this.imgData.data[idx];\r\n const g = this.imgData.data[idx + 1];\r\n const b = this.imgData.data[idx + 2];\r\n const a = this.imgData.data[idx + 3];\r\n return [r, g, b, a];\r\n }\r\n}\r\n","import { ColorIn } from 'colorin';\r\nvar isMapSupported = typeof Map === 'function';\r\nvar colorInCache;\r\nif (isMapSupported) {\r\n colorInCache = new Map();\r\n}\r\n\r\n\r\nfunction isNull(value) {\r\n return value === null || value === undefined;\r\n}\r\n\r\nfunction isNotNull(value) {\r\n return !isNull(value);\r\n}\r\n\r\nfunction isEmptyString(value) {\r\n return value === '';\r\n}\r\n\r\n/*eslint-disable no-var, prefer-const*/\r\nfunction createFunction(parameters, defaultType) {\r\n var fun;\r\n var isFeatureConstant, isZoomConstant;\r\n if (!isFunctionDefinition(parameters)) {\r\n fun = function () {\r\n return parameters;\r\n };\r\n isFeatureConstant = true;\r\n isZoomConstant = true;\r\n } else {\r\n var zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';\r\n var featureDependent = zoomAndFeatureDependent || isNotNull(parameters.property);\r\n var zoomDependent = zoomAndFeatureDependent || !featureDependent;\r\n var type = parameters.type || defaultType || 'exponential';\r\n\r\n var innerFun;\r\n if (type === 'exponential') {\r\n innerFun = evaluateExponentialFunction;\r\n } else if (type === 'interval') {\r\n innerFun = evaluateIntervalFunction;\r\n } else if (type === 'categorical') {\r\n innerFun = evaluateCategoricalFunction;\r\n } else if (type === 'identity') {\r\n innerFun = evaluateIdentityFunction;\r\n } else if (type === 'color-interpolate') {\r\n innerFun = evaluateColorInterpolateFunction;\r\n } else if (type === 'calculate-expression') {\r\n innerFun = evaluateCalculateExpressionFunction;\r\n } else {\r\n throw new Error('Unknown function type \"' + type + '\"');\r\n }\r\n\r\n if (zoomAndFeatureDependent) {\r\n var featureFunctions = {};\r\n var featureFunctionStops = [];\r\n for (let s = 0; s < parameters.stops.length; s++) {\r\n var stop = parameters.stops[s];\r\n if (featureFunctions[stop[0].zoom] === undefined) {\r\n featureFunctions[stop[0].zoom] = {\r\n zoom: stop[0].zoom,\r\n type: parameters.type,\r\n property: parameters.property,\r\n default: parameters.default,\r\n stops: []\r\n };\r\n }\r\n featureFunctions[stop[0].zoom].stops.push([stop[0].value, stop[1]]);\r\n }\r\n\r\n for (let z in featureFunctions) {\r\n featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z])]);\r\n }\r\n fun = function (zoom, feature) {\r\n const value = evaluateExponentialFunction({ stops: featureFunctionStops, base: parameters.base }, zoom)(zoom, feature);\r\n return typeof value === 'function' ? value(zoom, feature) : value;\r\n };\r\n isFeatureConstant = false;\r\n isZoomConstant = false;\r\n } else if (zoomDependent) {\r\n fun = function (zoom) {\r\n const value = innerFun(parameters, zoom);\r\n return typeof value === 'function' ? value(zoom) : value;\r\n };\r\n isFeatureConstant = true;\r\n isZoomConstant = false;\r\n } else {\r\n fun = function (zoom, feature) {\r\n const value = innerFun(parameters, feature ? feature[parameters.property] : null);\r\n return typeof value === 'function' ? value(zoom, feature) : value;\r\n };\r\n isFeatureConstant = false;\r\n isZoomConstant = true;\r\n }\r\n }\r\n fun.isZoomConstant = isZoomConstant;\r\n fun.isFeatureConstant = isFeatureConstant;\r\n return fun;\r\n}\r\n\r\nfunction coalesce(a, b, c) {\r\n if (isNotNull(a)) return a;\r\n if (isNotNull(b)) return b;\r\n if (isNotNull(c)) return c;\r\n return null;\r\n}\r\n\r\nfunction evaluateCategoricalFunction(parameters, input) {\r\n for (let i = 0; i < parameters.stops.length; i++) {\r\n if (input === parameters.stops[i][0]) {\r\n return parameters.stops[i][1];\r\n }\r\n }\r\n return parameters.default;\r\n}\r\n\r\nfunction evaluateIntervalFunction(parameters, input) {\r\n for (var i = 0; i < parameters.stops.length; i++) {\r\n if (input < parameters.stops[i][0]) break;\r\n }\r\n return parameters.stops[Math.max(i - 1, 0)][1];\r\n}\r\n\r\nfunction evaluateExponentialFunction(parameters, input) {\r\n var base = isNotNull(parameters.base) && !isEmptyString(parameters.base) ? parameters.base : 1;\r\n\r\n var i = 0;\r\n while (true) {\r\n if (i >= parameters.stops.length) break;\r\n else if (input <= parameters.stops[i][0]) break;\r\n else i++;\r\n }\r\n\r\n if (i === 0) {\r\n return parameters.stops[i][1];\r\n } else if (i === parameters.stops.length) {\r\n return parameters.stops[i - 1][1];\r\n } else {\r\n return interpolate(input, base, parameters.stops[i - 1][0], parameters.stops[i][0], parameters.stops[i - 1][1], parameters.stops[i][1]);\r\n }\r\n}\r\nconst COLORIN_OPTIONS = {\r\n width: 100,\r\n height: 1\r\n};\r\nfunction evaluateColorInterpolateFunction(parameters, input) {\r\n const stops = parameters.stops;\r\n if (stops && stops.length > 1) {\r\n let colorIn;\r\n if (colorInCache) {\r\n const key = JSON.stringify(stops);\r\n if (!colorInCache.has(key)) {\r\n const colorIn = new ColorIn(stops, COLORIN_OPTIONS);\r\n colorInCache.set(key, colorIn);\r\n }\r\n colorIn = colorInCache.get(key);\r\n } else {\r\n colorIn = new ColorIn(stops, COLORIN_OPTIONS);\r\n }\r\n const [r, g, b, a] = colorIn.getColor(input);\r\n return [r / 255, g / 255, b / 255, a / 255];\r\n } else if (stops && stops.length === 1) {\r\n return stops[0][1];\r\n }\r\n return null;\r\n}\r\n\r\nfunction evaluateIdentityFunction(parameters, input) {\r\n return coalesce(input, parameters.default);\r\n}\r\n// 2添加修改计算函数\r\n// 处理空字符串和未定义属性的函数\r\nfunction evaluateCalculateExpressionFunction(parameters, input) {\r\n const targetVariable = String(parameters.property);\r\n const expression = parameters.expression;\r\n const newValue = input;\r\n\r\n // 定义函数来替换表达式中的变量\r\n function traverseAndAssign(expression, targetVariable, newValue) {\r\n const newValueAsNumber = Number(newValue);\r\n const targetVariableAsString = String(targetVariable);\r\n\r\n if (Array.isArray(expression)) {\r\n return expression.map(subExpr => traverseAndAssign(subExpr, targetVariableAsString, newValueAsNumber));\r\n } else if (expression === targetVariableAsString) {\r\n return newValueAsNumber;\r\n } else {\r\n return expression;\r\n }\r\n }\r\n\r\n // 定义函数来计算表达式的结果\r\n function evaluateExpression(expression) {\r\n if (Array.isArray(expression)) {\r\n const operator = expression[0];\r\n\r\n if (!['+', '-', '*', '/'].includes(operator)) {\r\n throw new Error(`Unknown operator: ${operator}`);\r\n }\r\n\r\n const operands = expression.slice(1).map(op => evaluateExpression(op));\r\n switch (operator) {\r\n case '+':\r\n return operands.reduce((acc, curr) => acc + curr, 0);\r\n case '-':\r\n return operands.reduce((acc, curr) => acc - curr);\r\n case '*':\r\n return operands.reduce((acc, curr) => acc * curr, 1);\r\n case '/':\r\n // 如果发现有零作为除数,返回默认值\r\n if (operands.some(op => op === 0)) {\r\n return parameters.default;\r\n }\r\n return operands.reduce((acc, curr) => acc / curr);\r\n default:\r\n throw new Error(`Unsupported operator: ${operator}`);\r\n }\r\n } else if (typeof expression === 'number') {\r\n return expression;\r\n } else {\r\n throw new Error('Invalid expression format');\r\n }\r\n }\r\n\r\n // 使用 coalesce 函数处理结果中的默认值\r\n function coalesce(value) {\r\n return (isNull(value) || isEmptyString(value) || isNaN(value)) ? parameters.default : value;\r\n }\r\n\r\n // 如果 input 存在且大于0,则处理表达式\r\n if (isNotNull(input) && !isEmptyString(input) && !isNaN(input) && !(input < 0)) {\r\n const updatedExpression = traverseAndAssign(expression, targetVariable, newValue);\r\n return coalesce(evaluateExpression(updatedExpression));\r\n } else {\r\n return coalesce(parameters.default);\r\n }\r\n}\r\n\r\nfunction interpolate(input, base, inputLower, inputUpper, outputLower, outputUpper) {\r\n if (typeof outputLower === 'function') {\r\n return function () {\r\n var evaluatedLower = outputLower.apply(undefined, arguments);\r\n var evaluatedUpper = outputUpper.apply(undefined, arguments);\r\n return interpolate(input, base, inputLower, inputUpper, evaluatedLower, evaluatedUpper);\r\n };\r\n } else if (outputLower.length) {\r\n return interpolateArray(input, base, inputLower, inputUpper, outputLower, outputUpper);\r\n } else {\r\n return interpolateNumber(input, base, inputLower, inputUpper, outputLower, outputUpper);\r\n }\r\n}\r\n\r\nfunction interpolateNumber(input, base, inputLower, inputUpper, outputLower, outputUpper) {\r\n var difference = inputUpper - inputLower;\r\n var progress = input - inputLower;\r\n\r\n var ratio;\r\n if (base === 1) {\r\n ratio = progress / difference;\r\n } else {\r\n ratio = (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\r\n }\r\n\r\n return outputLower * (1 - ratio) + outputUpper * ratio;\r\n}\r\n\r\nfunction interpolateArray(input, base, inputLower, inputUpper, outputLower, outputUpper) {\r\n var output = [];\r\n for (let i = 0; i < outputLower.length; i++) {\r\n output[i] = interpolateNumber(input, base, inputLower, inputUpper, outputLower[i], outputUpper[i]);\r\n }\r\n return output;\r\n}\r\n\r\n/**\r\n * Check if object is a definition of function type\r\n * @param {Object} obj object\r\n * @return {Boolean}\r\n * @memberOf MapboxUtil\r\n */\r\nexport function isFunctionDefinition(obj) {\r\n return (\r\n obj &&\r\n typeof obj === 'object' &&\r\n (obj.stops || (obj.property && obj.type === 'identity') || (obj.expression && obj.type === 'calculate-expression'))\r\n );\r\n}\r\n\r\n// export function isFunctionDefinition(obj) {\r\n// return obj && typeof obj === 'object' && (obj.stops || (obj.property && obj.type === 'identity'));\r\n// }\r\n\r\n/**\r\n * Check if obj's properties has function definition\r\n * @param {Object} obj object to check\r\n * @return {Boolean}\r\n * @memberOf MapboxUtil\r\n */\r\nexport function hasFunctionDefinition(obj) {\r\n for (const p in obj) {\r\n if (isFunctionDefinition(obj[p])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function interpolated(parameters) {\r\n return createFunction1(parameters, 'exponential');\r\n}\r\n\r\nexport function piecewiseConstant(parameters) {\r\n return createFunction1(parameters, 'interval');\r\n}\r\n\r\n/**\r\n * Load function types defined in object\r\n * @param {Object[]} parameters parameters\r\n * @return {Object} loaded object\r\n * @memberOf MapboxUtil\r\n */\r\n\r\nexport function loadFunctionTypes(obj, argFn) {\r\n if (!obj) {\r\n return null;\r\n }\r\n var hit = false;\r\n if (Array.isArray(obj)) {\r\n var multResult = [],\r\n loaded;\r\n for (let i = 0; i < obj.length; i++) {\r\n loaded = loadFunctionTypes(obj[i], argFn);\r\n if (!loaded) {\r\n multResult.push(obj[i]);\r\n } else {\r\n multResult.push(loaded);\r\n hit = true;\r\n }\r\n }\r\n return hit ? multResult : obj;\r\n }\r\n var result = { '__fn_types_loaded': true },\r\n props = [],\r\n p;\r\n for (p in obj) {\r\n if (obj.hasOwnProperty(p)) {\r\n props.push(p);\r\n }\r\n }\r\n\r\n const buildFn = function (p) {\r\n Object.defineProperty(result, p, {\r\n get: function () {\r\n if (!this['__fn_' + p]) {\r\n this['__fn_' + p] = interpolated(this['_' + p]);\r\n }\r\n return this['__fn_' + p].apply(this, argFn());\r\n },\r\n set: function (v) {\r\n this['_' + p] = v;\r\n },\r\n configurable: true,\r\n enumerable: true\r\n });\r\n };\r\n\r\n for (let i = 0, len = props.length; i < len; i++) {\r\n p = props[i];\r\n if (isFunctionDefinition(obj[p])) {\r\n hit = true;\r\n result['_' + p] = obj[p];\r\n buildFn(p);\r\n } else {\r\n result[p] = obj[p];\r\n }\r\n }\r\n return hit ? result : obj;\r\n}\r\n\r\n/**\r\n * Get external resources in the function type\r\n * @param {Object} t Function type definition\r\n * @return {String[]} resouces\r\n * @memberOf MapboxUtil\r\n */\r\nexport function getFunctionTypeResources(t) {\r\n if (!t || !t.stops) {\r\n return [];\r\n }\r\n const res = [];\r\n for (let i = 0, l = t.stops.length; i < l; i++) {\r\n res.push(t.stops[i][1]);\r\n }\r\n return res;\r\n}\r\n/*eslint-enable no-var, prefer-const*/\r\n\r\nfunction createFunction1(parameters, defaultType) {\r\n if (!isFunctionDefinition(parameters)) {\r\n return function () {\r\n return parameters;\r\n };\r\n }\r\n parameters = JSON.parse(JSON.stringify(parameters));\r\n let isZoomConstant = true;\r\n let isFeatureConstant = true;\r\n const stops = parameters.stops;\r\n if (stops) {\r\n for (let i = 0; i < stops.length; i++) {\r\n if (isFunctionDefinition(stops[i][1])) {\r\n const fn = createFunction1(stops[i][1], defaultType);\r\n isZoomConstant = isZoomConstant && fn.isZoomConstant;\r\n isFeatureConstant = isFeatureConstant && fn.isFeatureConstant;\r\n stops[i] = [stops[i][0], fn];\r\n }\r\n }\r\n }\r\n const fn = createFunction(parameters, defaultType);\r\n fn.isZoomConstant = isZoomConstant && fn.isZoomConstant;\r\n fn.isFeatureConstant = isFeatureConstant && fn.isFeatureConstant;\r\n return fn;\r\n}\r\n","import * as maptalks from 'maptalks';\nimport { reshader, vec3, vec4, mat3, mat4, quat, HighlightUtil, ContextUtil, getWGSLSource } from '@maptalks/gl';\nimport { iterateMesh, iterateBufferData, getItemAtBufferData, setInstanceData, } from '../../common/GLTFHelpers';\nimport pickingVert from './glsl/picking.vert';\nimport pntsVert from './glsl/pnts.vert';\nimport pntsFrag from './glsl/pnts.frag';\nimport { isFunction, isNil, extend, setColumn3, flatArr, isNumber, normalizeColor, pushIn } from '../../common/Util';\nimport { intersectsBox } from 'frustum-intersects';\nimport { basisTo2D, setTranslation, getTranslation, readBatchData } from '../../common/TileHelper';\nimport { isFunctionDefinition, interpolated } from '@maptalks/function-type';\n// import { getKHR_techniques } from './s3m/S3MTechnique';\n\n\nconst { getTextureMagFilter, getTextureMinFilter,\n getTextureWrap, getMaterialType, getMaterialFormat,\n getPrimitive, getUniqueREGLBuffer, getArrayType } = reshader.REGLHelper;\n\nconst Y_TO_Z = [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1];\nconst X_TO_Z = [0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1];\n\nconst { loginIBLResOnCanvas, logoutIBLResOnCanvas, getIBLResOnCanvas, getPBRUniforms } = reshader.pbr.PBRUtils;\n\nconst DEFAULT_POLYGON_OFFSET = {\n factor : 0,\n units : 0\n};\n\nconst DEFAULT_POLYGONFILL = [1, 1, 1, 1], DEFAULT_HSV = [0, 0, 0];\n\nconst DEFAULT_MATERIAL_INFO = {\n specularStrength: 0,\n materialShininess: 1\n};\n\nconst IDENTITY_SCALE = [1, 1, 1];\nconst IDENTITY_MATRIX = mat4.identity([]);\nconst EMPTY_TRANSLATION = [0, 0, 0];\nconst EMPTY_COORD_OFFSET = [0, 0];\n\nconst LIGHT_DIR = [];\n// const P0 = [], P1 = [];\n\nconst phongFilter = m => {\n return m.material instanceof reshader.PhongMaterial;\n};\n\nconst StandardFilter = m => {\n return m.material instanceof reshader.pbr.StandardMaterial;\n};\n\n// const colorOff = [false, false, false, false];\n// const colorOn = [true, true, true, true];\n\nconst TEMP_RTCCENTER = [];\nconst TEMP_CENTER = new maptalks.Coordinate(0, 0);\nconst TEMP_POINT = new maptalks.Point(0, 0);\nconst TEMP_POINT1 = new maptalks.Point(0, 0);\nconst TEMP_POINT2 = new maptalks.Point(0, 0);\nconst TEMP_OFFSET = [];\nconst TEMP_TRANSLATION = [];\nconst TEMP_MATRIX1 = [];\nconst TEMP_MATRIX2 = [];\nconst TEMP_TILE_ROT_QUAT = [];\nconst TEMP_SCALING = [];\nconst TEMP_TILE_SCALING_MAT = [];\n\nconst TEMP_TILE_TRANSFORM = [];\nconst TEMP_TRANSLATION_MAT = [];\n\nconst TEMP_SERVICE_MAT = [];\n\nconst TEMP_PROJ_SCALE = [];\nconst TEMP_DIST_SCALE = [];\nconst TEMP_DIST_TO_PROJ_SCALE = [];\n\nconst TEMP_MATRIX_SCALE = [];\n\nconst DEFAULT_SEMANTICS = {\n 'POSITION': 'POSITION',\n 'NORMAL': 'NORMAL',\n 'TEXCOORD_0': 'TEXCOORD_0',\n 'TEXCOORD_1': 'TEXCOORD_1',\n 'COLOR_0': 'COLOR_0',\n 'TANGENT': 'TANGENT',\n '_BATCHID': '_BATCHID',\n};\n\nconst BOX_INDEX = [\n 0, 1,\n 1, 2,\n 2, 3,\n 3, 0,\n 0, 4,\n 1, 5,\n 2, 6,\n 3, 7,\n 4, 5,\n 5, 6,\n 6, 7,\n 7, 4,\n\n // center axis\n // 8, 9,\n // 8, 10,\n // 8, 11\n];\nconst SPHERE_POS = generateSphere(100, 1);\nconst BOX_ROTATE = [0, 0, 0, 1], BOX_SCALE = [1, 1, 1];\n\nexport default class TileMeshPainter {\n constructor(regl, layer) {\n this._layer = layer;\n this._canvas = layer.getRenderer().canvas;\n this.pickingFBO = layer.getRenderer().pickingFBO;\n this._regl = regl;\n this._renderer = new reshader.Renderer(regl);\n this._loading = {};\n this._modelMeshes = {};\n this._pntsMeshes = {};\n this._i3dmMeshes = {};\n this._cmptMeshes = {};\n this._cachedGLTF = {};\n this._modelScene = new reshader.Scene();\n this._pntsScene = new reshader.Scene();\n this._i3dmScene = new reshader.Scene();\n this._boxScene = new reshader.Scene();\n this._resLoader = new reshader.ResourceLoader(regl.texture(2));\n this._bindedListener = (...args) => {\n return this._onResourceLoad.call(this, ...args);\n };\n // this._defaultMaterial = new reshader.PhongMaterial({\n // 'baseColorFactor' : [1, 1, 1, 1]\n // });\n this._khrTechniqueWebglManager = new reshader.KHRTechniquesWebglManager(this._regl, this._getExtraCommandProps(), this._resLoader);\n const map = this.getMap();\n this._heightScale = map.altitudeToPoint(100, map.getGLRes()) / 100;\n }\n\n getI3DMMeshes() {\n return this._i3dmMeshes;\n }\n\n getPNTSMeshes() {\n return this._pntsMeshes;\n }\n\n getB3DMMeshes() {\n return this._modelMeshes;\n }\n\n getPaintedMeshes() {\n return this._paintedMeshes;\n }\n\n getMap() {\n return this._layer.getMap();\n }\n\n paint(tiles, boxMeshes, parentContext) {\n // const testMesh = { bloom: 1 };\n // if (!parentContext.sceneFilter(testMesh)) {\n // return;\n // }\n const renderTarget = parentContext && parentContext.renderTarget;\n const filter = parentContext && parentContext.sceneFilter;\n const map = this.getMap();\n if (!tiles.length || !map) {\n return null;\n }\n const uniforms = this._getUniformValues();\n const projViewMatrix = map.projViewMatrix;\n const oneMeshArray = [];\n const parentMeshes = [];\n const b3dmMeshes = [];\n const pntsMeshes = [];\n const i3dmMeshes = [];\n\n for (let i = 0, l = tiles.length; i < l; i++) {\n const node = tiles[i].data.node;\n let mesh = this._getMesh(node);\n if (!mesh) {\n continue;\n }\n const service = this._layer._getNodeService(node._rootIdx);\n const debugNodes = service.debugNodes;\n const heightOffset = service.heightOffset || 0;\n const coordOffset = service.coordOffset || EMPTY_COORD_OFFSET;\n if (this._cmptMeshes[node.id]) {\n mesh = this._cmptMeshes[node.id];\n mesh = flatArr(mesh);\n }\n // if (node._error > maxError) {\n // continue;\n // }\n\n let polygonOffset = service.polygonOffset || DEFAULT_POLYGON_OFFSET;\n if (isFunction(polygonOffset)) {\n polygonOffset = polygonOffset();\n }\n // const ambientColor = service.ambientLight;\n if (!Array.isArray(mesh)) {\n oneMeshArray[0] = mesh;\n mesh = oneMeshArray;\n }\n for (let ii = 0, ll = mesh.length; ii < ll; ii++) {\n if (!mesh[ii] || !mesh[ii].isValid || !mesh[ii].isValid()) {\n continue;\n }\n const magic = mesh[ii].properties.magic;\n if (mesh[ii].properties.heightOffset !== heightOffset || mesh[ii].properties.coordOffset[0] !== coordOffset[0] || mesh[ii].properties.coordOffset[1] !== coordOffset[1]) {\n this._updateMeshLocalTransform(mesh[ii]);\n mesh[ii]._originLocalTransform = mat4.copy([], mesh[ii].localTransform);\n }\n mesh[ii]._node = node;\n if (magic === 'b3dm') {\n if (mesh[ii].getBoundingBox && !intersectsBox(projViewMatrix, mesh[ii].getBoundingBox())) {\n continue;\n }\n const { batchIdData, batchIdMap } = mesh[ii].geometry.properties;\n if (batchIdData && batchIdMap) {\n const rootIdx = mesh[ii].properties.node._rootIdx;\n if (this._highlighted && this._highlighted[rootIdx]) {\n HighlightUtil.highlightMesh(this._regl, mesh[ii], this._highlighted[rootIdx], this._highlightTimestamp, batchIdMap);\n } else if (!this._highlighted || !this._highlighted[rootIdx]) {\n HighlightUtil.highlightMesh(this._regl, mesh[ii], null, this._highlightTimestamp, batchIdMap);\n }\n HighlightUtil.showOnly(this._regl, mesh[ii], this._showOnlys && this._showOnlys[rootIdx], this._showOnlyTimeStamp, batchIdMap);\n }\n if (debugNodes && debugNodes.length && debugNodes.indexOf(mesh[ii]._node.id) < 0) {\n continue;\n }\n if (parentContext && parentContext.bloom && mesh[ii].properties.hlBloomMesh) {\n mesh[ii].properties.hlBloomMesh.properties.depthFunc = 'always';\n b3dmMeshes.push(mesh[ii].properties.hlBloomMesh);\n }\n b3dmMeshes.push(mesh[ii]);\n } else if (magic === 'pnts') {\n pntsMeshes.push(mesh[ii]);\n } else if (magic === 'i3dm') {\n i3dmMeshes.push(mesh[ii]);\n }\n // mesh[ii].setUniform('level', tiles[i].selectionDepth);\n // mesh[ii].setUniform('id', node.id);\n // mesh[ii].setUniform('polygonOffset', polygonOffset);\n mesh[ii].properties.isLeaf = tiles[i].leave;\n mesh[ii].properties.branchRootId = tiles[i].branchRootId;\n // GroupGLLayer中,stencil默认值为0xFF,与GroupGLLayer保持一致\n const selectionDepth = 255 - tiles[i].selectionDepth;\n mesh[ii].properties.selectionDepth = selectionDepth;\n mesh[ii].properties.polygonOffset = polygonOffset;\n const cullFace = service.cullFace === undefined || !!service.cullFace;\n mesh[ii].properties.cullFace = cullFace;\n\n const hlBloomMesh = mesh[ii].properties.hlBloomMesh;\n if (hlBloomMesh) {\n const bloomProperties = hlBloomMesh.properties;\n bloomProperties.branchRootId = tiles[i].branchRootId;\n bloomProperties.selectionDepth = selectionDepth;\n bloomProperties.polygonOffset = polygonOffset;\n bloomProperties.cullFace = cullFace;\n }\n // if (!Object.prototype.hasOwnProperty.call(mesh[ii].uniforms, 'ambientColor')) {\n // Object.defineProperty(mesh[ii].uniforms, 'ambientColor', {\n // enumerable: true,\n // get: function () {\n // if (ambientColor) {\n // return ambientColor;\n // }\n // return uniforms['ambientColor'];\n // }\n // });\n // }\n\n if (!tiles[i].leave) {\n parentMeshes.push(mesh[ii]);\n }\n this._updateMaskDefines(mesh[ii]);\n this._updateServiceMatrix(mesh[ii], node);\n }\n }\n\n // const testMesh = { bloom: 1 };\n // if (parentContext.sceneFilter(testMesh)) {\n // if (parentContext.bloom) {\n // const bloomMeshes = meshes.filter(m => m.bloom);\n // if (bloomMeshes.length) {\n // meshes = bloomMeshes;\n // }\n // }\n\n\n // meshes.sort(meshCompare);\n // console.log(meshes.map(m => m.properties.id));\n let drawCount = 0;\n const khrExludeFilter = this._khrTechniqueWebglManager.getExcludeFilter();\n ContextUtil.setIncludeUniformValues(uniforms, parentContext);\n drawCount += this._callShader(this._phongShader, uniforms, [filter, phongFilter, khrExludeFilter], renderTarget, parentMeshes, b3dmMeshes, i3dmMeshes);\n drawCount += this._callShader(this._standardShader, uniforms, [filter, StandardFilter, khrExludeFilter], renderTarget, parentMeshes, b3dmMeshes, i3dmMeshes);\n\n this._khrTechniqueWebglManager.forEachShader((shader, shaderFilter, uniformSemantics) => {\n const uniforms = this._getUniformValues(uniformSemantics);\n drawCount += this._callShader(shader, uniforms, [filter, shaderFilter], renderTarget, parentMeshes, b3dmMeshes, i3dmMeshes);\n });\n this._pntsScene.setMeshes(pntsMeshes);\n const pntsUniforms = this._getPntsUniforms();\n drawCount += this._renderer.render(this._pntsShader, pntsUniforms, this._pntsScene, renderTarget && renderTarget.fbo);\n\n this._paintedMeshes = {\n pntsMeshes,\n i3dmMeshes,\n b3dmMeshes\n };\n // boxMeshes.forEach(mesh => {\n // this._updateBBoxMatrix(mesh);\n // });\n this._boxScene.setMeshes(boxMeshes);\n this._renderer.render(this._edgeShader, uniforms, this._boxScene, renderTarget && renderTarget.fbo);\n\n return drawCount;\n }\n\n prepareRender(context) {\n this._prepareShaders(context);\n }\n\n _prepareShaders(context) {\n if (context && context.states && context.states.includesChanged) {\n this._standardShader.dispose();\n delete this._standardShader;\n this._phongShader.dispose();\n delete this._phongShader;\n }\n this._createShaders(context);\n }\n\n // _updateBBoxMatrix(mesh) {\n // const serviceTransform = this._layer._getServiceTransform(TEMP_BBOX_MAT, mesh.properties.node);\n // mat4.multiply(mesh.localTransform, serviceTransform, mesh._originLocalTransform);\n // }\n\n _callShader(shader, uniforms, filter, renderTarget, parentMeshes, meshes, i3dmMeshes) {\n shader.filter = filter.filter(fn => !!fn);\n\n // this._modelScene.setMeshes(meshes);\n\n // uniforms['debug'] = true;\n // uniforms['stencilEnable'] = false;\n // uniforms['cullFace'] = 'front';\n // uniforms['colorMask'] = colorOff;\n // this._renderer.render(shader, uniforms, this._modelScene, renderTarget && renderTarget.fbo);\n\n\n // uniforms['stencilEnable'] = true;\n uniforms.stencilEnable = false;\n uniforms.cullFace = 'back';\n // uniforms['cullFace'] = 'back';\n // uniforms['colorMask'] = colorOn;\n const fbo = renderTarget && renderTarget.fbo;\n let drawCount = 0;\n\n const branchMeshes = [];\n const leafMeshes = [];\n let hasUnresolved = false;\n\n let currentBranchRootId = meshes[0] && meshes[0].properties.branchRootId;\n for (let i = 0; i < meshes.length; i++) {\n const { branchRootId } = meshes[i].properties;\n if (branchRootId !== currentBranchRootId) {\n // branch 发生变化\n if (!hasUnresolved) {\n // 如果branch中不存在 unresolved 瓦片,则放到leafMeshes中,和其他的leaf瓦片一起绘制,无需分开绘制,减少drawcall\n pushIn(leafMeshes, branchMeshes);\n } else {\n if (leafMeshes.length) {\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, false, leafMeshes);\n leafMeshes.length = 0;\n }\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, hasUnresolved, branchMeshes);\n }\n currentBranchRootId = branchRootId;\n hasUnresolved = false;\n branchMeshes.length = 0;\n }\n branchMeshes.push(meshes[i]);\n if (meshes[i].properties.selectionDepth < 255) {\n hasUnresolved = true;\n }\n if (i === meshes.length - 1) {\n if (!hasUnresolved) {\n pushIn(leafMeshes, branchMeshes);\n branchMeshes.length = 0;\n }\n if (leafMeshes.length) {\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, false, leafMeshes);\n }\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, hasUnresolved, branchMeshes);\n }\n }\n // pick功能需要把meshes设置到modelScene中,为了避免pick逻辑出错,这里暂时只允许选择叶子节点\n //FIXME 因为父亲节点不在modelScene中,会出现父亲节点无法被选中的问题\n this._modelScene.setMeshes(meshes.filter(m => m.properties.isLeaf));\n\n this._i3dmScene.setMeshes(i3dmMeshes);\n drawCount += this._renderer.render(shader, uniforms, this._i3dmScene, renderTarget && renderTarget.fbo);\n return drawCount;\n }\n\n _drawBranchMeshes(shader, uniforms, fbo, hasUnresolved, branchMeshes) {\n if (!branchMeshes.length) {\n return 0;\n }\n this._modelScene.setMeshes(branchMeshes);\n // 如果branch中不存在unresolved瓦片\n // 关闭stencil直接绘制\n uniforms.stencilEnable = false;\n if (hasUnresolved) {\n // branch 中存在 unresolved 瓦片。\n // 解释:\n // 如果某个瓦片的selectionDepth不为0 (mesh.properties.selectionDepth为255),则说明它的子瓦片也参与绘制,标记此类瓦片为unsolved\n // * selectionDepth 的逻辑在 Geo3DTilesRenderer._sortTiles 方法中\n // 这种情况一般出现在某个分支的子节点不满足要求(没有下载下来或者error不符合设定),需要将父亲节点与子节点一起绘制\n // 绘制步骤:\n // 1. 清除 stencil 缓冲,避免上一次绘制的stencil影响本次绘制\n // 2. 先绘制所有瓦片的背面,避免后面的子节点,会在视觉上 \"透过\" 前面的unresolved瓦片\n // 3. 打开stencil,先绘制叶子节点,再绘制父亲节点,保证父节点的绘制不会覆盖掉子节点\n this._clearStencil(fbo);\n uniforms.stencilEnable = false;\n uniforms.cullFace = 'front';\n this._renderer.render(shader, uniforms, this._modelScene, fbo);\n uniforms.cullFace = 'back';\n uniforms.stencilEnable = true;\n }\n return this._renderer.render(shader, uniforms, this._modelScene, fbo);\n }\n\n _clearStencil(fbo) {\n this._regl.clear({\n stencil: 0xFF,\n framebuffer: fbo\n });\n }\n\n getCurrentB3DMMeshes() {\n return this._modelScene.getMeshes();\n }\n\n getCurrentI3DMMeshes() {\n return this._i3dmScene.getMeshes();\n }\n\n _sort(a, b) {\n // const cameraPosition = this.getMap().cameraPosition;\n // vec3.transformMat4(P0, a.geometry.boundingBox.getCenter(), a.localTransform);\n // vec3.transformMat4(P1, b.geometry.boundingBox.getCenter(), b.localTransform);\n // return vec3.dist(P1, cameraPosition) - vec3.dist(P0, cameraPosition);\n return b._node._cameraDistance - a._node._cameraDistance;\n }\n\n deleteTile(tileData) {\n const node = tileData.node;\n if (node._boxMesh) {\n node._boxMesh.geometry.dispose();\n node._boxMesh.dispose();\n delete node._boxMesh;\n }\n const id = node.id;\n this._disposeMesh(id);\n }\n\n _disposeMesh(id) {\n const mesh = this._modelMeshes[id] || this._pntsMeshes[id] || this._i3dmMeshes[id] || this._cmptMeshes[id] || this._loading[id];\n if (this._cmptMeshes[id]) {\n this._disposeCMPT(id);\n } else if (mesh) {\n this._deleteOne(mesh);\n delete this._modelMeshes[id];\n delete this._pntsMeshes[id];\n delete this._i3dmMeshes[id];\n delete this._loading[id];\n }\n }\n\n _disposeCMPT(id) {\n let mesh = this._cmptMeshes[id];\n mesh = flatArr(mesh);\n for (let i = 0; i < mesh.length; i++) {\n const { id } = mesh[i].properties;\n this._disposeMesh(id);\n }\n delete this._cmptMeshes[id];\n }\n\n _deleteOne(mesh) {\n if (Array.isArray(mesh)) {\n for (let i = 0, l = mesh.length; i < l; i++) {\n this._deleteOne(mesh[i]);\n }\n } else {\n // clear showOnly and highlights\n HighlightUtil.showOnly(this._regl, mesh);\n HighlightUtil.highlightMesh(this._regl, mesh);\n const url = mesh.geometry.properties.url;\n if (!url) {\n mesh.geometry.dispose();\n if (mesh.material) {\n mesh.material.dispose();\n }\n } else {\n const cached = this._cachedGLTF[url];\n if (cached && cached.refMeshes) {\n cached.refMeshes.delete(mesh.uuid);\n if (!cached.refMeshes.size) {\n cached.geometry.dispose();\n cached.material.dispose();\n delete this._cachedGLTF[url];\n }\n }\n }\n mesh.dispose();\n }\n }\n\n remove() {\n const layer = this._layer;\n logoutIBLResOnCanvas(layer.getRenderer().canvas, layer.getMap());\n for (const id in this._cmptMeshes) {\n this._disposeCMPT(id);\n }\n this._cmptMeshes = {};\n for (const id in this._modelMeshes) {\n this._disposeMesh(id);\n }\n this._modelMeshes = {};\n for (const id in this._pntsMeshes) {\n this._disposeMesh(id);\n }\n this._pntsMeshes = {};\n for (const id in this._i3dmMeshes) {\n this._disposeMesh(id);\n }\n this._i3dmMeshes = {};\n\n for (const id in this._loading) {\n this._disposeMesh(id);\n }\n this._loading = {};\n if (this._phongShader) {\n this._phongShader.dispose();\n delete this._phongShader;\n }\n if (this._standardShader) {\n this._standardShader.dispose();\n delete this._standardShader;\n }\n if (this._pntsShader) {\n this._pntsShader.dispose();\n delete this._pntsShader;\n }\n\n if (this._edgeShader) {\n this._edgeShader.dispose();\n delete this._edgeShader;\n }\n\n this._khrTechniqueWebglManager.dispose();\n\n if (this.picking) {\n this.picking.dispose();\n }\n }\n\n _getMesh(node) {\n return this._modelMeshes[node.id] || this._pntsMeshes[node.id] || this._i3dmMeshes[node.id] || this._cmptMeshes[node.id];\n }\n\n has(node) {\n return this._getMesh(node) || this._loading[node.id];\n }\n\n _updateMeshLocalTransform(mesh) {\n const magic = mesh.properties.magic;\n if (magic === 'b3dm') {\n this._updateB3DMLocalMatrix(mesh);\n } else if (magic === 'i3dm') {\n this._updateI3DMLocalTransform(mesh);\n } else if (magic === 'pnts') {\n this._updatePNTSLocalTransform(mesh);\n }\n }\n\n createPntsMesh(data, id, node, cb) {\n if (this._pntsMeshes[id]) {\n const meshes = this._pntsMeshes[id];\n console.warn(`pnts mesh with id(${id}) was already created.`);\n cb(null, { id : id, mesh : meshes });\n return meshes;\n }\n const { pnts, featureTable, rootIdx, compressed_int16_params } = data;\n const count = featureTable['POINTS_LENGTH'];\n if (!pnts['BATCH_ID']) {\n pnts['BATCH_ID'] = new Uint8Array(count);\n pnts['BATCH_ID'].fill(0);\n }\n\n const geometry = new reshader.Geometry(\n pnts,\n null,\n count,\n {\n static: true,\n primitive: 'points',\n positionAttribute: 'POSITION',\n pickingIdAttribute: 'BATCH_ID'\n }\n );\n geometry.generateBuffers(this._regl);\n const defines = {};\n if (pnts['POSITION']) {\n defines['HAS_POSITION'] = 1;\n } else if (pnts['POSITION_QUANTIZED']) {\n defines['HAS_POSITION_QUANTIZED'] = 1;\n }\n if (pnts['RGB']) {\n defines['HAS_RGB'] = 1;\n } else if (pnts['RGBA']) {\n defines['HAS_RGBA'] = 1;\n } else if (pnts['RGB565']) {\n defines['HAS_RGB565'] = 1;\n }\n if (pnts['NORMAL'] || pnts['NORMAL_OCT16P']) {\n defines['HAS_NORMAL'] = 1;\n if (pnts['NORMAL_OCT16P']) {\n defines['HAS_NORMAL_OCT16P'] = 1;\n }\n }\n this._setCompressedInt16Defines(defines, compressed_int16_params);\n if (data.featureTable['CONSTANT_RGBA']) {\n data.featureTable['CONSTANT_RGBA'] = data.featureTable['CONSTANT_RGBA'].map(c => c / 255);\n }\n\n const { rtcCenter, rtcCoord, projCenter } = data;\n\n const service = this._layer._getNodeService(rootIdx);\n\n const mesh = new reshader.Mesh(geometry);\n mesh.properties.magic = 'pnts';\n mesh.properties.id = id;\n mesh.properties.node = node;\n mesh.properties.count = count;\n mesh.properties.batchTable = data.batchTable;\n mesh.properties.batchTableBin = data.batchTableBin;\n mesh.properties.serviceIndex = rootIdx;\n mesh.properties.rtcCoord = rtcCoord;\n mesh.properties.rtcCenter = rtcCenter;\n mesh.properties.projCenter = projCenter;\n mesh.setDefines(defines);\n mesh.setFunctionUniform('pointColor', function () {\n if (data.featureTable['CONSTANT_RGBA']) {\n return data.featureTable['CONSTANT_RGBA'];\n }\n return service && service.pointColor || [1, 1, 1, 1];\n });\n const map = this.getMap();\n let pointSizeValue = null;\n let pointSizeFn = null;\n\n mesh.setFunctionUniform('pointSize', function () {\n if (!service) {\n return 2;\n }\n if (isFunctionDefinition(service.pointSize)) {\n const key = JSON.stringify(service.pointSize);\n if (key !== pointSizeValue) {\n pointSizeFn = interpolated(service.pointSize);\n pointSizeValue = key;\n }\n const size = pointSizeFn(map.getZoom());\n return size;\n }\n return service.pointSize || 2;\n });\n\n let pointOpacityValue = null;\n let pointOpacityFn = null;\n\n mesh.setFunctionUniform('pointOpacity', function () {\n if (!service) {\n return 1;\n }\n if (isFunctionDefinition(service.pointOpacity)) {\n const key = JSON.stringify(service.pointOpacity);\n if (key !== pointOpacityValue) {\n pointOpacityFn = interpolated(service.pointOpacity);\n pointOpacityValue = key;\n }\n const opacity = pointOpacityFn(map.getZoom());\n return opacity;\n }\n return service.pointOpacity || 1;\n });\n this._setCompressedInt16Uniforms(mesh, compressed_int16_params);\n this._updatePNTSLocalTransform(mesh);\n mesh._originLocalTransform = mat4.copy([], mesh.localTransform);\n this._pntsMeshes[id] = mesh;\n cb(null, { id: id, mesh: [mesh] });\n return [mesh];\n }\n\n\n _updatePNTSLocalTransform(mesh) {\n const localTransform = mesh.localTransform || [];\n const { rtcCoord, node, projCenter } = mesh.properties;\n this._getB3DMTransform(localTransform, rtcCoord, projCenter, node._rootIdx);\n mesh.setLocalTransform(localTransform);\n }\n\n\n createI3DMMesh(data, id, node, cb) {\n if (this._i3dmMeshes[id]) {\n const meshes = this._i3dmMeshes[id];\n console.warn(`i3dm mesh with id(${id}) was already created.`);\n if (!this._loading[id]) {\n cb(null, { id: id, mesh: meshes });\n }\n return meshes;\n }\n const service = this._layer._getNodeService(node._rootIdx);\n const upAxisTransform = this._getUpAxisTransform(node._upAxis);\n const { i3dm, featureTable, gltf, batchTable, batchTableBin, count } = data;\n const instanceCount = featureTable['INSTANCES_LENGTH'];\n\n const { rtcCenter, rtcCoord, projCenter } = data;\n const projectedMatrix = this._computeProjectedTransform(TEMP_MATRIX2, node, rtcCenter, rtcCoord);\n setTranslation(projectedMatrix, EMPTY_TRANSLATION, projectedMatrix);\n\n const tileRotQuat = mat4.getRotation(TEMP_TILE_ROT_QUAT, projectedMatrix);\n quat.normalize(tileRotQuat, tileRotQuat);\n\n // quat.normalize(rotation, rotation);\n const scaling = mat4.getScaling(TEMP_SCALING, projectedMatrix);\n const tileScalingMat4 = mat4.fromScaling(TEMP_TILE_SCALING_MAT, scaling);\n\n const tileTransform = this._getI3DMTileTransform(TEMP_TILE_TRANSFORM, projCenter, node);\n\n const projScale = this._getProjScale(TEMP_PROJ_SCALE);\n const distScale = this._getDistanceScale(TEMP_DIST_SCALE, rtcCoord);\n const distToProjScale = vec3.div(TEMP_DIST_TO_PROJ_SCALE, distScale, projScale);\n const distToProjScaleTransform = mat4.fromScaling(TEMP_MATRIX_SCALE, distToProjScale);\n\n const { POSITION, NORMAL_UP, NORMAL_RIGHT, SCALE, SCALE_NON_UNIFORM } = i3dm;\n const isWebGPU = this.getMap().getRenderer().isWebGPU();\n const ctor = isWebGPU ? Float32Array : Uint16Array;\n const instanceData = {\n 'instance_vectorA': new Float32Array(instanceCount * 4),\n 'instance_vectorB': new Float32Array(instanceCount * 4),\n 'instance_vectorC': new Float32Array(instanceCount * 4),\n 'aPickingId': new ctor(instanceCount)\n };\n for (let i = 0; i < instanceCount; i++) {\n instanceData['aPickingId'][i] = i;\n }\n\n const normalUp = new Float32Array(3);\n const normalRight = new Float32Array(3);\n const normalForward = [];\n const scaleItem = new Float32Array(1);\n const scaleNonUniform = new Float32Array(3);\n const rotationMat3 = [];\n const quaternion = [];\n const scale = [];\n const matrix = [];\n iterateBufferData(POSITION, (vertex, index) => {\n if (NORMAL_UP) {\n getItemAtBufferData(normalRight, NORMAL_RIGHT, index);\n getItemAtBufferData(normalUp, NORMAL_UP, index);\n vec3.cross(normalForward, normalRight, normalUp)\n vec3.normalize(normalForward, normalForward);\n setColumn3(rotationMat3, normalRight, 0);\n setColumn3(rotationMat3, normalUp, 1);\n setColumn3(rotationMat3, normalForward, 2);\n quat.fromMat3(quaternion, rotationMat3);\n quat.normalize(quaternion, quaternion);\n quat.multiply(quaternion, tileRotQuat, quaternion);\n } else {\n quat.identity(quaternion);\n }\n if (SCALE) {\n getItemAtBufferData(scaleItem, SCALE, index);\n vec3.set(scale, scaleItem[0], scaleItem[0], scaleItem[0]);\n } else if (SCALE_NON_UNIFORM) {\n getItemAtBufferData(scaleNonUniform, SCALE_NON_UNIFORM, index);\n vec3.set(scale, ...scaleNonUniform);\n } else {\n vec3.set(scale, 1, 1, 1);\n }\n\n mat4.fromRotationTranslationScale(matrix, quaternion, vertex, scale);\n\n setInstanceData(instanceData['instance_vectorA'], index, matrix, 0);\n setInstanceData(instanceData['instance_vectorB'], index, matrix, 1);\n setInstanceData(instanceData['instance_vectorC'], index, matrix, 2);\n\n });\n\n const instanceBuffers = {};\n // 所有mesh共享一个 instance buffer,以节省内存\n for (const p in instanceData) {\n instanceBuffers[p] = {\n buffer: this._regl.buffer({\n dimension: instanceData[p].length / instanceCount,\n data: instanceData[p],\n name: p\n }),\n divisor: 1\n };\n }\n\n const shader = service.shader || 'pbr';\n let unreadyCount = 0;\n let ready = true;\n const meshes = [];\n const gltfWeakResources = [];\n iterateMesh(gltf, (gltfMesh, meshId, primId, gltf) => {\n const gltfResource = this._processGLTF(gltfMesh, meshId, primId, gltf, node, true, shader, gltfWeakResources);\n const { geometry, material } = gltfResource;\n if (material && !material.isReady()) {\n ready = false;\n unreadyCount++;\n }\n const mesh = new reshader.InstancedMesh(instanceBuffers, instanceCount, geometry, material);\n if (!gltfResource.refMeshes) {\n gltfResource.refMeshes = new Set();\n gltfResource.refMeshes.add(mesh.uuid);\n }\n mesh.properties.magic = 'i3dm';\n mesh.properties.id = id;\n mesh.properties.count = count;\n mesh.properties.batchTable = batchTable;\n mesh.properties.batchTableBin = batchTableBin;\n mesh.properties.serviceIndex = node._rootIdx;\n mesh.properties.rtcCoord = rtcCoord;\n mesh.properties.rtcCenter = rtcCenter;\n mesh.properties.projCenter = projCenter;\n mesh.properties.node = node;\n const defines = this._getGLTFMeshDefines(gltfMesh, geometry, material, node._rootIdx, gltf);\n defines['MESH_ENV_EXPO'] = 1;\n if (gltfMesh.compressed_int16_params) {\n this._setCompressedInt16Uniforms(mesh, gltfMesh.compressed_int16_params);\n }\n this._setWEB3DDecodeUniforms(mesh, gltfMesh.attributes);\n // GLTF模型默认y为up\n // https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#coordinate-system-and-units\n const nodeMatrix = mat4.identity([]);\n // mat4.multiply(mat, mat, node.matrix);\n if (gltfMesh.matrices && gltfMesh.matrices.length) {\n for (let i = 0; i < gltfMesh.matrices.length; i++) {\n mat4.multiply(nodeMatrix, nodeMatrix, gltfMesh.matrices[i]);\n }\n }\n mat4.multiply(nodeMatrix, upAxisTransform, nodeMatrix);\n mat4.multiply(nodeMatrix, distToProjScaleTransform, nodeMatrix);\n // 如果没有 NORMAL_UP,需要把原来在 instance_vector 中计入的enu以及node上的transform应用在positionMatrix中\n if (!featureTable['EAST_NORTH_UP'] && !NORMAL_UP) {\n mat4.multiply(nodeMatrix, projectedMatrix, nodeMatrix);\n } else {\n mat4.multiply(nodeMatrix, tileScalingMat4, nodeMatrix);\n }\n mesh.setPositionMatrix(nodeMatrix);\n\n this._updateI3DMLocalTransform(mesh, tileTransform);\n mesh.setDefines(defines);\n mesh.properties.polygonOffset = { offset: 0, factor: 0 };\n meshes.push(mesh);\n delete gltfMesh.attributes;\n mesh._originLocalTransform = mat4.copy([], mesh.localTransform);\n });\n\n trimGLTFWeakResources(gltfWeakResources);\n\n if (ready) {\n this._i3dmMeshes[id] = meshes;\n cb(null, { id: id, mesh: meshes });\n } else {\n this._loading[id] = { meshes: meshes, count: unreadyCount };\n meshes._callback = cb;\n }\n return meshes;\n }\n\n _updateI3DMLocalTransform(mesh, tileTransform) {\n const { rtcCoord, node, projCenter } = mesh.properties;\n\n if (!tileTransform) {\n tileTransform = this._getI3DMTileTransform(TEMP_TILE_TRANSFORM, projCenter, node);\n }\n\n const service = this._layer._getNodeService(node._rootIdx);\n const matrix = mesh.localTransform || [];\n if (service.coordOffset) {\n const coordOffsetMatrix = this._computeCoordOffsetMatrix(TEMP_MATRIX2, node._rootIdx, rtcCoord);\n mat4.multiply(matrix, coordOffsetMatrix, tileTransform);\n } else {\n mat4.copy(matrix, tileTransform);\n }\n mesh.setLocalTransform(matrix);\n mesh.properties.heightOffset = service.heightOffset || 0;\n mesh.properties.coordOffset = service.coordOffset && service.coordOffset.slice(0) || EMPTY_COORD_OFFSET;\n }\n\n _getI3DMTileTransform(out, projCenter, node) {\n mat4.fromScaling(out, this._getProjScale(TEMP_PROJ_SCALE));\n const translation = this._getCenterTranslation(TEMP_TRANSLATION, projCenter, node._rootIdx);\n mat4.multiply(out, mat4.fromTranslation(TEMP_TRANSLATION_MAT, translation), out);\n return out;\n }\n\n createB3DMMesh(data, id, node, cb) {\n if (data.gltf) {\n data.gltf.transferables = null;\n }\n if (this._modelMeshes[id] || this._loading[id]) {\n const meshes = this._modelMeshes[id];\n console.warn(`mesh with id(${id}) was already created.`);\n if (!this._loading[id]) {\n cb(null, { id: id, mesh: meshes });\n }\n return meshes;\n }\n let maxPrjExtent;\n if (node.maxExtent) {\n const extent = new maptalks.Extent(node.maxExtent).convertTo(c => this._pointToPrj(c));\n maxPrjExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n }\n\n\n const gltf = data.gltf;\n //for model matrix\n const { projCenter } = gltf.extensions['MAPTALKS_RTC'];\n const { rtcCoord, center: rtcCenter } = gltf.extensions['CESIUM_RTC'];\n\n const isSharedPosition = gltf.asset.sharePosition;\n const upAxisTransform = this._getUpAxisTransform(node._upAxis);\n const tileTransform = this._getB3DMTileTransform(TEMP_TILE_TRANSFORM, isSharedPosition, rtcCoord, rtcCenter, projCenter, node);\n const service = this._layer._getNodeService(node._rootIdx);\n let shader = service.shader || 'pbr';\n if (service.unlit) {\n shader = 'phong';\n } else if (gltf.materials) {\n for (let i = 0; i < gltf.materials.length; i++) {\n if (gltf.materials[i] && gltf.materials[i].extensions && gltf.materials[i].extensions['KHR_materials_unlit']) {\n shader = 'phong';\n break;\n }\n }\n }\n\n const gltfWeakResources = [];\n const meshes = [];\n let unreadyCount = 0;\n let ready = true;\n\n iterateMesh(gltf, (gltfMesh, meshId, primId, gltf) => {\n const gltfResource = this._processGLTF(gltfMesh, meshId, primId, gltf, node, false, shader, gltfWeakResources);\n const { geometry, material } = gltfResource;\n if (material && !material.isReady()) {\n ready = false;\n unreadyCount++;\n }\n const mesh = new reshader.Mesh(geometry, material);\n if (!gltfResource.refMeshes) {\n gltfResource.refMeshes = new Set();\n gltfResource.refMeshes.add(mesh.uuid);\n }\n mesh.properties.magic = 'b3dm';\n mesh.properties.id = id;\n mesh.properties.node = node;\n if (data.batchTable) {\n mesh.properties.batchTable = data.batchTable;\n mesh.properties.batchTableBin = data.batchTableBin;\n }\n mesh.properties.count = data.featureTable && data.featureTable['BATCH_LENGTH'] || 0;\n mesh.properties.serviceIndex = node._rootIdx;\n const defines = this._getGLTFMeshDefines(gltfMesh, geometry, material, node._rootIdx, gltf);\n mesh.setDefines(defines);\n const compressUniforms = gltfMesh.compressUniforms;\n if (compressUniforms) {\n for (const u in compressUniforms) {\n mesh.setUniform(u, compressUniforms[u]);\n }\n }\n if (gltfMesh.compressed_int16_params) {\n this._setCompressedInt16Uniforms(mesh, gltfMesh.compressed_int16_params);\n }\n this._setWEB3DDecodeUniforms(mesh, gltfMesh.attributes);\n if (maxPrjExtent) {\n defines['USE_MAX_EXTENT'] = 1;\n mesh.setUniform('maxPrjExtent', maxPrjExtent);\n // mesh.setUniform('prjCenter', projCenter);\n }\n\n if (!mesh.hasFunctionUniform('polygonOpacity')) {\n mesh.setFunctionUniform('polygonOpacity', function () {\n return isNumber(service.opacity) ? service.opacity : 1;\n });\n }\n if (!mesh.hasFunctionUniform('polygonFill')) {\n mesh.setFunctionUniform('polygonFill', function () {\n return normalizeColor([], service.polygonFill || DEFAULT_POLYGONFILL);\n });\n }\n if (!mesh.material.hasFunctionUniform('hsv')) {\n mesh.material.setFunctionUniform('hsv', function () {\n return service.hsv || DEFAULT_HSV;\n });\n }\n\n\n // gltfMesh.matrices 已经在 layerWorker转换坐标时,加入计算了,所以这里不用再重复计算\n const nodeMatrix = mat4.identity([]);\n // mat4.multiply(mat, mat, node.matrix);\n if (isSharedPosition && gltfMesh.matrices && gltfMesh.matrices.length) {\n for (let i = 0; i < gltfMesh.matrices.length; i++) {\n mat4.multiply(nodeMatrix, nodeMatrix, gltfMesh.matrices[i]);\n }\n }\n\n if (isSharedPosition) {\n mat4.multiply(nodeMatrix, upAxisTransform, nodeMatrix);\n }\n\n // const coordOffsetMatrix = this._computeCoordOffsetMatrix(node._rootIdx, rtcCoord);\n // if (coordOffsetMatrix) {\n // mat4.multiply(nodeMatrix, coordOffsetMatrix, nodeMatrix);\n // }\n mesh.properties.node = node;\n mesh.properties.projCenter = projCenter;\n mesh.properties.nodeMatrix = nodeMatrix;\n mesh.properties.isSharedPosition = isSharedPosition;\n mesh.properties.rtcCoord = rtcCoord;\n mesh.properties.rtcCenter = rtcCenter;\n\n this._updateB3DMLocalMatrix(mesh, tileTransform);\n meshes.push(mesh);\n delete gltfMesh.attributes;\n mesh._originLocalTransform = mat4.copy([], mesh.localTransform);\n });\n\n // trim indices/material images to save memories\n trimGLTFWeakResources(gltfWeakResources);\n\n if (ready) {\n this._modelMeshes[id] = meshes;\n cb(null, { id : id, mesh : meshes });\n } else {\n this._loading[id] = { meshes: meshes, count: unreadyCount };\n meshes._callback = cb;\n }\n return meshes;\n }\n\n _createBoxMesh(node) {\n const nodeBox = this._layer._getNodeBox(node.id);\n if (!nodeBox || node._boxMesh) {\n return;\n }\n let vertices, indices, translate, scale;\n if (nodeBox.obbox) { //region、box\n vertices = nodeBox.boxPosition;\n indices = BOX_INDEX;\n translate = nodeBox.boxCenter;\n scale = BOX_SCALE;\n } else if (nodeBox.sphereBox) { //sphere\n const sphereCenter = nodeBox.sphereBox[0], radius = nodeBox.sphereBox[1];\n vertices = SPHERE_POS.vertices;\n indices = SPHERE_POS.indices;\n translate = sphereCenter;\n scale = [radius, radius, radius];\n }\n const geometry = new reshader.Geometry({\n POSITION: vertices\n },\n indices,\n 0,\n {\n primitive : 'lines',\n positionAttribute: 'POSITION'\n });\n const mesh = new reshader.Mesh(geometry, new reshader.Material({ lineColor: [0.8, 0.8, 0.1, 1.0], lineOpacity: 1 }));\n const localTransform = [];\n mat4.fromRotationTranslationScale(localTransform, BOX_ROTATE, translate, scale);\n mesh.localTransform = localTransform;\n mesh._originLocalTransform = mat4.copy([], localTransform);\n mesh.properties.node = node;\n node._boxMesh = mesh;\n }\n\n _deleteBoxMesh(node) {\n if (node._boxMesh) {\n node._boxMesh.geometry.dispose();\n node._boxMesh.dispose();\n delete node._boxMesh;\n }\n }\n\n _setCompressedInt16Uniforms(mesh, compressed_int16_params) {\n if (compressed_int16_params['POSITION']) {\n mesh.setUniform('compressedPositionRange', compressed_int16_params['POSITION']);\n }\n if (compressed_int16_params['TEXCOORD_0']) {\n mesh.setUniform('compressedTexcoordRange_0', compressed_int16_params['TEXCOORD_0']);\n }\n if (compressed_int16_params['TEXCOORD_1']) {\n mesh.setUniform('compressedTexcoordRange_1', compressed_int16_params['TEXCOORD_0']);\n }\n if (compressed_int16_params['NORMAL']) {\n mesh.setUniform('compressedNormalRange', compressed_int16_params['NORMAL']);\n }\n if (compressed_int16_params['TANGENT']) {\n mesh.setUniform('compressedTangentRange', compressed_int16_params['TANGENT']);\n }\n if (compressed_int16_params['compressed_ratio']) {\n mesh.setUniform('compressed_ratio', compressed_int16_params['compressed_ratio']);\n }\n }\n\n _updateB3DMLocalMatrix(mesh, tileTransform) {\n const { isSharedPosition, rtcCoord, rtcCenter, projCenter, nodeMatrix, node } = mesh.properties;\n if (!tileTransform) {\n tileTransform = this._getB3DMTileTransform(tileTransform || TEMP_TILE_TRANSFORM, isSharedPosition, rtcCoord, rtcCenter, projCenter, node)\n }\n\n const matrix = mesh.localTransform || mat4.identity([]);\n\n mat4.multiply(matrix, tileTransform, nodeMatrix);\n const service = this._layer._getNodeService(node._rootIdx);\n if (service.coordOffset) {\n const coordOffsetMatrix = this._computeCoordOffsetMatrix(TEMP_MATRIX2, node._rootIdx, rtcCoord);\n mat4.multiply(matrix, coordOffsetMatrix, matrix);\n }\n mesh.setLocalTransform(matrix);\n mesh.properties.heightOffset = service.heightOffset || 0;\n mesh.properties.coordOffset = service.coordOffset && service.coordOffset.slice(0) || EMPTY_COORD_OFFSET;\n }\n\n _getB3DMTileTransform(out, isSharedPosition, rtcCoord, rtcCenter, projCenter, node) {\n if (isSharedPosition) {\n // position被共享的模型,只能采用basisTo2D来绘制\n // 电信的模型如tokyo.html中的模型\n const distanceScale = this._getDistanceScale(TEMP_DIST_SCALE, rtcCoord);\n const localTransform = mat4.fromScaling(TEMP_MATRIX1, distanceScale);\n const projectedMatrix = this._computeProjectedTransform(TEMP_MATRIX2, node, rtcCenter, rtcCoord);\n mat4.multiply(out, projectedMatrix, localTransform);\n } else {\n this._getB3DMTransform(out, rtcCoord, projCenter, node._rootIdx);\n }\n return out;\n }\n\n _setWEB3DDecodeUniforms(mesh, attributes) {\n if (attributes && attributes['TEXCOORD_0'] && attributes['TEXCOORD_0'].extensions && attributes['TEXCOORD_0'].extensions['WEB3D_quantized_attributes']) {\n const decodeMatrix = attributes['TEXCOORD_0'].extensions['WEB3D_quantized_attributes'].decodeMatrix;\n mesh.setUniform('decodeMatrix', decodeMatrix);\n }\n }\n\n _computeProjectedTransform(out, node, rtcCenter, rtcCoord) {\n const map = this.getMap();\n const heightOffset = this._layer._getNodeService(node._rootIdx).heightOffset || 0;\n\n const nodeTransform = node.matrix ? mat4.copy(out, node.matrix) : mat4.identity(out);\n if (rtcCenter) {\n const realCenter = vec3.transformMat4(TEMP_RTCCENTER, rtcCenter, nodeTransform);\n setTranslation(nodeTransform, realCenter, nodeTransform);\n }\n // const computedTransform = mat4.multiply([], nodeTransform, Y_TO_Z);\n const computedTransform = nodeTransform;\n const projection = map.getProjection();\n const glRes = map.getGLRes();\n const projectedTransform = basisTo2D(computedTransform, rtcCoord, computedTransform, projection, glRes, this._heightScale, heightOffset);\n const translation = getTranslation(TEMP_TRANSLATION, projectedTransform);\n let offset = this._layer.options['offset'];\n if (isFunction(offset)) {\n const center = this._layer._getNodeBox(node.id).boxCoord;\n offset = offset.call(this._layer, center);\n }\n vec3.set(TEMP_OFFSET, offset[0], offset[1], 0);\n vec3.sub(translation, translation, TEMP_OFFSET);\n\n setTranslation(projectedTransform, translation, projectedTransform);\n return projectedTransform;\n\n }\n\n _computeCoordOffsetMatrix(out, rootIdx, center) {\n const service = this._layer._getNodeService(rootIdx);\n if (!service.coordOffset) {\n return null;\n }\n const map = this.getMap();\n const glRes = map.getGLRes();\n TEMP_CENTER.set(center[0], center[1]);\n const point0 = map.coordToPointAtRes(TEMP_CENTER, glRes, TEMP_POINT1);\n const coordOffset = service.coordOffset;\n const target = TEMP_CENTER.set(center[0] + coordOffset[0], center[1] + coordOffset[1]);\n const point1 = map.coordToPointAtRes(target, glRes, TEMP_POINT2);\n const dx = point1.x - point0.x;\n const dy = point1.y - point0.y;\n const heightScale = this._heightScale;\n\n const translation = vec3.set(TEMP_OFFSET, dx, dy, (coordOffset[2] || 0) * heightScale);\n const matrix = mat4.fromTranslation(out, translation);\n return matrix;\n }\n\n createCMPTMesh(data, id, node, cb) {\n if (this._cmptMeshes[id]) {\n const meshes = this._cmptMeshes[id];\n console.warn(`mesh with id(${id}) was already created.`);\n cb(null, { id: id, mesh: meshes });\n return meshes;\n }\n // if (node.content.uri !== 'NoLod_2.cmpt') {\n // return [];\n // }\n const { content } = data;\n const meshes = [];\n for (let i = 0; i < content.length; i++) {\n const { magic } = content[i];\n const childId = id + '.' + i;\n if (magic === 'b3dm') {\n this.createB3DMMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n } else if (magic === 'i3dm') {\n this.createI3DMMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n } else if (magic === 'pnts') {\n this.createPntsMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n } else if (magic === 'cmpt') {\n this.createCMPTMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n }\n }\n this._cmptMeshes[id] = meshes;\n cb(null, { id: id, mesh: meshes });\n return meshes;\n }\n\n _getGLTFMeshDefines(gltfMesh, geometry, material, rootIdx, gltf) {\n const shader = this._layer._getNodeService(rootIdx).shader || 'pbr';\n const runShader = shader === 'phong' ? this._phongShader : this._standardShader;\n const defines = runShader.getGeometryDefines(geometry);\n if (gltf.asset && gltf.asset.generator === 'S3M') {\n this._appendS3MDefines(defines, geometry);\n }\n if (geometry.data.uvRegion) {\n defines['HAS_I3S_UVREGION'] = 1;\n }\n\n if (geometry.data[geometry.desc.normalAttribute]) {\n defines['VertexNormal'] = 1;\n }\n if (geometry.data[geometry.desc.color0Attribute]) {\n defines['VertexColor'] = 1;\n }\n if (geometry.data[geometry.desc.uv0Attribute]) {\n defines['TexCoord'] = 1;\n }\n if (geometry.data[geometry.desc.textureCoordMatrixAttribute]) {\n defines['HAS_TextureCoordMatrix'] = 1;\n }\n if (material.get('uTexture')) {\n defines['COMPUTE_TEXCOORD'] = 1;\n }\n if (material.get('uTexture2')) {\n defines['TexCoord2'] = 1;\n }\n if(this._layer._vertexCompressionType === 'MESHOPT') {\n defines['MeshOPT_Compress'] = 1;\n }\n if (this.hasIBL()) {\n defines['HAS_IBL_LIGHTING'] = 1;\n }\n if (gltfMesh.attributes && gltfMesh.attributes['TEXCOORD_0'] && gltfMesh.attributes['TEXCOORD_0'].extensions === 'WEB3D_quantized_attributes') {\n defines['HAS_WEB3D_quantized_attributes_TEXCOORD'] = 1;\n }\n defines['HAS_MIN_ALTITUDE'] = 1;\n this._setCompressedInt16Defines(defines, gltfMesh.compressed_int16_params);\n const compressDefines = gltfMesh.compressDefines;\n extend(defines, compressDefines);\n return defines;\n }\n\n _setCompressedInt16Defines(defines, compressed_int16_params) {\n if (compressed_int16_params && Object.keys(compressed_int16_params).length > 0) {\n defines['HAS_COMPRESSED_INT16'] = 1;\n if (compressed_int16_params['POSITION']) {\n defines['HAS_COMPRESSED_INT16_POSITION'] = 1;\n }\n if (compressed_int16_params['TEXCOORD_0']) {\n defines['HAS_COMPRESSED_INT16_TEXCOORD_0'] = 1;\n }\n if (compressed_int16_params['TEXCOORD_1']) {\n defines['HAS_COMPRESSED_INT16_TEXCOORD_1'] = 1;\n }\n if (compressed_int16_params['NORMAL']) {\n defines['HAS_COMPRESSED_INT16_NORMAL'] = 1;\n }\n if (compressed_int16_params['TANGENT']) {\n defines['HAS_COMPRESSED_INT16_TANGENT'] = 1;\n }\n if (compressed_int16_params['compressed_ratio']) {\n defines['HAS_COMPRESSED_INT16_RATIO'] = 1;\n }\n }\n }\n\n _updateMaskDefines(mesh) {\n const renderer = this._layer.getRenderer();\n if (renderer) {\n renderer.updateMaskDefines(mesh);\n }\n }\n\n _appendS3MDefines(defines, geometry) {\n if (geometry.data['aNormal']) {\n defines['VertexNormal'] = 1;\n }\n if (geometry.data['instanceId']) {\n defines['Instance'] = 1;\n }\n if (geometry.data['aTexCoord0']) {\n defines['TexCoord'] = 1;\n }\n if (geometry.data['aColor']) {\n defines['VertexColor'] = 1;\n }\n if (geometry.data['aTexCoord1']) {\n defines['TexCoord2'] = 1;\n }\n if (geometry.data['uv2']) {\n defines['InstanceBim'] = 1;\n }\n }\n\n _processGLTF(gltfMesh, meshId, primId, gltf, node, isI3DM, shader, gltfWeakResources) {\n let isS3M = false;\n if (gltf.asset && gltf.asset.generator === 'S3M') {\n isS3M = true;\n // is a s3mType\n gltf.extensions = gltf.extensions || {};\n // gltf.extensions['KHR_techniques_webgl'] = getKHR_techniques(gltf.asset.s3mVersion);\n }\n const url = gltf.url + '-' + meshId + '-' + primId;\n if (this._cachedGLTF[url]) {\n return this._cachedGLTF[url];\n }\n gltfWeakResources.push(gltfMesh);\n let material, geometry;\n //TODO 有些B3DM或I3DM里,多个 gltf.mesh 会共享同一个POSITION,MESH,TEXCOORD。\n // 效率更高的做法是为他们单独创建buffer后赋给Geometry\n // 程序中无需管理buffer的销毁,Geometry中会维护buffer的引用计数来管理buffer的销毁\n const matInfo = gltf.materials && gltf.materials[gltfMesh.material];\n const khrTechniquesWebgl = gltf.extensions && gltf.extensions['KHR_techniques_webgl'];\n const service = this._layer._getNodeService(node._rootIdx);\n if (khrTechniquesWebgl && matInfo.extensions && matInfo.extensions['KHR_techniques_webgl']) {\n const isWebGPU = this.getMap().getRenderer().isWebGPU();\n if (isWebGPU) {\n throw new Error('3dtiles with KHR_techniques_webgl extension is not supported in webgpu');\n }\n // s3m.vert 和 s3m.frag 是用webgl 2写的,所以是s3m时,要开启webgl2\n const khrMesh = this._createTechniqueMesh(gltfMesh, gltf, isI3DM, isS3M);\n material = khrMesh.material;\n geometry = khrMesh.geometry;\n if (service['fillEmptyDataInMissingAttribute']) {\n geometry.desc.fillEmptyDataInMissingAttribute = true;\n }\n } else {\n geometry = this._createGeometry(gltfMesh, isI3DM, DEFAULT_SEMANTICS);\n const materialInfo = service.material;\n material = this._createMaterial(gltfMesh.material, gltf, shader, materialInfo || DEFAULT_MATERIAL_INFO, gltfWeakResources, service);\n }\n if (material) {\n material.setFunctionUniform('alphaTest', function () {\n const alphaTest = service['alphaTest'];\n if (!isNil(alphaTest)) {\n return alphaTest;\n }\n return 0.1;\n });\n\n material.setFunctionUniform('environmentExposure', () => {\n // maptalks/issues#661\n const ambientLight = service.ambientLight;\n let environmentExposure = service.environmentExposure;\n const lights = this.getMap().getLightManager();\n const mapAmbient = lights && lights.getAmbientLight();\n if (ambientLight && (!mapAmbient || mapAmbient.color) && environmentExposure === undefined) {\n const ambientValue = mapAmbient && mapAmbient.color ? mapAmbient.color[0] : 0.2;\n // 老的ambientLight设置的兼容性代码\n environmentExposure = ambientLight[0] / ambientValue;\n }\n return environmentExposure || 1;\n });\n }\n\n if (material && !material.isReady()) {\n material._nodeId = node.id;\n } else if (!material) {\n material = new reshader.PhongMaterial({\n 'baseColorFactor' : [1, 1, 1, 1]\n });\n }\n\n const gltfGeo = {\n geometry, material\n };\n geometry.properties.url = url;\n this._cachedGLTF[url] = gltfGeo;\n return gltfGeo;\n }\n\n _createTechniqueMesh(gltfMesh, gltf, isI3DM, useWebGL2) {\n const { geometry, material } = this._khrTechniqueWebglManager.createMesh(gltfMesh, gltf, isI3DM, useWebGL2)\n return { geometry, material };\n }\n\n _createGeometry(gltfMesh, isI3DM, attributeSemantics) {\n const isWebGPU = this.getMap().getRenderer().isWebGPU();\n const attributes = gltfMesh.attributes;\n const color0Name = 'COLOR_0';\n // 把Float32类型的color0改为uint8类型数组\n let batchIdData = attributes['_BATCHID'] && attributes['_BATCHID'].array;\n if (batchIdData) {\n if (batchIdData.byteOffset) {\n batchIdData = new batchIdData.constructor(batchIdData);\n if (isWebGPU && !(batchIdData instanceof Float32Array)) {\n batchIdData = new Float32Array(batchIdData);\n }\n }\n }\n if (attributes[color0Name]) {\n const colors = attributes[color0Name].array || attributes[color0Name];\n if (colors instanceof Float32Array) {\n const color = new Uint8Array(colors.length);\n for (let i = 0; i < color.length; i++) {\n color[i] = Math.round(colors[i] * 255);\n }\n if (attributes[color0Name].array) {\n attributes[color0Name].array = color;\n attributes[color0Name].componentType = 5121;\n } else {\n attributes[color0Name] = color;\n }\n\n }\n }\n\n const attrs = {};\n let positionSize = 0;\n let vertexCount = 0;\n for (const p in attributes) {\n // 优先采用 attributeSemantics中定义的属性\n const name = attributeSemantics[p] || p;\n const isPosition = name === attributeSemantics['POSITION'];\n if (isWebGPU) {\n reshader.Geometry.padGPUGLTFAttribute(attributes[p]);\n }\n if (isPosition) {\n positionSize = attributes[p].itemSize;\n }\n const buffer = getUniqueREGLBuffer(this._regl, attributes[p], { dimension: attributes[p].itemSize, name: p });\n\n attrs[name] = extend({}, attributes[p]);\n attrs[name].buffer = buffer;\n attrs[name].type = getArrayType(attrs[name].array);\n delete attrs[name].array;\n if (name === attributeSemantics['POSITION']) {\n attrs[name].array = attributes[p].array;\n vertexCount = attributes[p].array.length / 3;\n }\n }\n // 补上缺失的_BATHCID属性,解决macos下 vertex buffer not big enough 报错\n const pickingIdAttribute = attributeSemantics['_BATCHID'];\n if (!attrs[pickingIdAttribute] && !isI3DM) {\n const ctor = isWebGPU ? Float32Array : Uint8Array;\n const pickingData = new ctor(vertexCount);\n attrs[pickingIdAttribute] = pickingData;\n }\n // createColorArray(attrs);\n const indices = gltfMesh.indices ? (gltfMesh.indices.array ? gltfMesh.indices.array.slice() : gltfMesh.indices) : null;\n const geometry = new reshader.Geometry(\n attrs,\n indices,\n 0,\n {\n // static: true,\n positionSize,\n positionAttribute: attributeSemantics['POSITION'],\n normalAttribute: attributeSemantics['NORMAL'],\n uv0Attribute: attributeSemantics['TEXCOORD_0'],\n uv1Attribute: attributeSemantics['TEXCOORD_1'],\n color0Attribute: attributeSemantics['COLOR_0'],\n tangentAttribute: attributeSemantics['TANGENT'],\n pickingIdAttribute: attributeSemantics['_BATCHID'],\n primitive: gltfMesh.mode === undefined ? 'triangles' : getPrimitive(gltfMesh.mode)\n }\n );\n if (batchIdData && indices) {\n geometry.properties.batchIdData = batchIdData;\n geometry.properties.batchIdMap = generateFeatureIndiceIndex(batchIdData, indices);\n }\n geometry.generateBuffers(this._regl, { excludeElementsInVAO: isI3DM });\n return geometry;\n }\n\n _getB3DMTransform(out, rtcCoord, projCenter, rootIdx) {\n const localTransform = mat4.identity(out);\n\n const scale = this._getProjScale(IDENTITY_SCALE);\n this._getCenterTranslation(TEMP_TRANSLATION, projCenter, rootIdx);\n\n mat4.translate(localTransform, localTransform, TEMP_TRANSLATION);\n mat4.scale(localTransform, localTransform, scale);\n return localTransform;\n }\n\n _getCenterTranslation(out, projCenter, rootIdx) {\n const heightScale = this._heightScale\n TEMP_CENTER.x = projCenter[0];\n TEMP_CENTER.y = projCenter[1];\n const center = this._prjToPoint(TEMP_CENTER);\n let offset = this._layer.options['offset'];\n if (isFunction(offset)) {\n offset = offset.call(this._layer, TEMP_CENTER);\n }\n const heightOffset = this._layer._getNodeService(rootIdx).heightOffset || 0;\n vec3.set(out, center.x - offset[0], center.y - offset[1], heightScale * projCenter[2] + heightScale * heightOffset);\n return out;\n }\n\n _updateServiceMatrix(mesh, node) {\n const serviceTransform = this._layer._getServiceTransform(TEMP_SERVICE_MAT, node);\n mesh.localTransform = mat4.multiply(mesh.localTransform, serviceTransform, mesh._originLocalTransform);\n }\n\n _getDistanceScale(out, rtcCoord) {\n // heightOffset 在 _computeProjectedTransform 中计算了,所以这里不用再重复计算。\n const map = this.getMap();\n TEMP_CENTER.x = rtcCoord[0];\n TEMP_CENTER.y = rtcCoord[1];\n const zoomScale = map.distanceToPointAtRes(100, 100, map.getGLRes(), TEMP_CENTER);\n const heightScale = this._heightScale;\n vec3.set(out, zoomScale.x / 100, zoomScale.y / 100, heightScale);\n return out;\n }\n\n _createShaders(context) {\n if (this._standardShader) {\n return;\n }\n const viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this._canvas ? this._canvas.width : 1;\n },\n height : () => {\n return this._canvas ? this._canvas.height : 1;\n }\n };\n const modelNormalMatrix = [];\n const projViewModelMatrix = [];\n this._pntsShader = new reshader.MeshShader({\n vert: pntsVert,\n frag: pntsFrag,\n uniforms: [\n {\n name: 'projViewModelMatrix',\n type: 'function',\n fn: (_, props) => {\n return mat4.multiply(projViewModelMatrix, props['projViewMatrix'], props['modelMatrix']);\n }\n },\n {\n name: 'modelNormalMatrix',\n type: 'function',\n fn: (_, props) => {\n return mat3.fromMat4(modelNormalMatrix, props['modelMatrix']);\n }\n }\n ],\n extraCommandProps: {\n viewport,\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one minus src alpha'\n },\n equation: 'add'\n },\n depth: {\n enable: true,\n func: '<'\n }\n }\n });\n\n const defines = {};\n const uniformDeclares = [];\n ContextUtil.fillIncludes(defines, uniformDeclares, context);\n const extraCommandProps = this._getExtraCommandProps();\n\n this._phongShader = new reshader.PhongShader({\n uniforms: uniformDeclares,\n defines,\n extraCommandProps\n });\n\n this._standardShader = new reshader.pbr.StandardShader({\n uniforms: uniformDeclares,\n defines,\n extraCommandProps\n // uniforms : [\n // 'ambientLight',\n // 'baseColor',\n // 'debug',\n // 'linearColor',\n // {\n // name : 'projViewModelMatrix',\n // type : 'function',\n // fn : (context, props) => {\n // return mat4.multiply([], props['projViewMatrix'], props['modelMatrix']);\n // }\n // },\n // {\n // name : 'maxExtent',\n // type : 'function',\n // fn : (context, props) => {\n // const maxExtent = props['maxPrjExtent'],\n // prjCenter = props['prjCenter'];\n // if (!maxExtent) {\n // return null;\n // }\n // const extent = [\n // maxExtent[0] - prjCenter[0], maxExtent[1] - prjCenter[1],\n // maxExtent[2] - prjCenter[0], maxExtent[3] - prjCenter[1],\n // ];\n // return extent;\n // }\n // }\n // ],\n\n });\n //用于绘制bbox\n this._edgeShader = new reshader.EdgeShader({ extraCommandProps: {\n viewport: {\n x : 0,\n y : 0,\n width : () => {\n return this._canvas ? this._canvas.width : 1;\n },\n height : () => {\n return this._canvas ? this._canvas.height : 1;\n }\n },\n blend: {\n enable: true,\n func: {\n srcRGB: 'src alpha',\n srcAlpha: 1,\n dstRGB: 'one minus src alpha',\n dstAlpha: 'one minus src alpha'\n },\n equation: 'add'\n }\n } });\n\n const layer = this._layer;\n loginIBLResOnCanvas(layer.getRenderer().canvas, this._regl, layer.getMap());\n\n this.picking = new reshader.FBORayPicking(\n this._renderer,\n {\n vert: pickingVert,\n wgslVert: getWGSLSource('layer_3dtiles_picking_vert'),\n extraCommandProps,\n uniforms: this._standardShader.uniforms,\n defines: {\n 'PICKING_MODE': 1,\n 'ENABLE_PICKING': 1,\n 'HAS_PICKING_ID': 1\n },\n },\n this.pickingFBO,\n this.getMap()\n );\n this._pntsPicking = new reshader.FBORayPicking(\n this._renderer,\n {\n vert: pntsVert,\n extraCommandProps,\n uniforms: this._pntsShader.uniforms,\n defines: {\n 'PICKING_MODE': 1,\n 'ENABLE_PICKING': 1,\n 'HAS_PICKING_ID': 1\n }\n },\n this.pickingFBO,\n this.getMap()\n );\n // this._modelShader.filter = mesh => {\n // return mesh.material.isReady();\n // };\n }\n\n\n _getExtraCommandProps() {\n const viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this._canvas ? this._canvas.width : 1;\n },\n height : () => {\n return this._canvas ? this._canvas.height : 1;\n }\n };\n return {\n viewport,\n // colorMask: (_, props) => {\n // return props['colorMask'] || colorOn;\n // },\n cull : {\n enable: (_, props) => {\n return props.meshProperties.cullFace;\n },\n face: (_, props) => {\n return props.cullFace || 'back';\n }\n },\n stencil: {\n enable: (_, props) => {\n return props.stencilEnable;\n },\n func: {\n cmp: '<=',\n ref: (_, props) => {\n return props.meshProperties.selectionDepth;\n },\n // mask: 0xff\n },\n op: {\n fail: 'keep',\n zfail: 'keep',\n zpass: 'replace'\n }\n },\n depth: {\n enable: true,\n func: (_, props) => {\n return props.meshProperties.depthFunc || '<=';\n }\n },\n blend: {\n enable: true,\n func: {\n src: 1,\n dst: 'one minus src alpha'\n },\n equation: 'add'\n },\n polygonOffset: {\n enable: true,\n offset: (_, props) => {\n return props.meshProperties.polygonOffset;\n }\n }\n };\n }\n\n _getPntsUniforms(options) {\n const map = this.getMap();\n const lightManager = map.getLightManager();\n const directionalLight = lightManager && lightManager.getDirectionalLight() || {};\n const lightDir = directionalLight.direction || [1, 1, -1];\n const pointOpacity = options && options.pointOpacity || 1;\n let layerOpacity = this._layer.options['opacity'];\n layerOpacity = isNil(layerOpacity) ? 1 : layerOpacity;\n return {\n projViewMatrix : map.projViewMatrix,\n pointOpacity,\n lightDir: vec3.normalize(LIGHT_DIR, lightDir),\n layerOpacity\n };\n }\n\n _getUniformValues() {\n const map = this.getMap();\n const layer = this._layer;\n const canvas = layer.getRenderer().canvas;\n const { iblTexes, dfgLUT } = getIBLResOnCanvas(canvas);\n const uniforms = getPBRUniforms(map, iblTexes, dfgLUT);\n const renderer = this._layer.getRenderer();\n const maskUniforms = renderer.getMaskUniforms();\n uniforms.minAltitude = layer.options.altitude || 0;\n let layerOpacity = layer.options['opacity'];\n layerOpacity = isNil(layerOpacity) ? 1 : layerOpacity;\n uniforms.layerOpacity = layerOpacity;\n extend(uniforms, {\n czm_lightDirectionEC: uniforms['light0_viewDirection'],\n lightSpecular: [1.0, 1.0, 1.0],\n viewMatrix: map.viewMatrix,\n projMatrix: map.projMatrix,\n projViewMatrix : map.projViewMatrix,\n outSize: [canvas.width, canvas.height],\n polygonFill: [1, 1, 1, 1],\n polygonOpacity: 1\n });\n if (!uniforms.ambientColor) {\n uniforms.ambientColor = [0.2, 0.2, 0.2];\n }\n extend(uniforms, maskUniforms);\n return uniforms;\n }\n\n _createMaterial(materialIndex, gltf, shader, materialInfo, gltfWeakResources, service) {\n const material = gltf.materials && gltf.materials[materialIndex];\n if (!material || !material.baseColorTexture && !material.pbrMetallicRoughness) {\n return null;\n }\n const matInfo = extend({}, materialInfo);\n if (material.baseColorTexture) {\n // GLTF 1.0\n const texInfo = gltf.textures[material.baseColorTexture.index];\n let texture;\n if (texInfo && !texInfo.image.color) {\n texture = this._getTexture(texInfo, gltfWeakResources);\n }\n matInfo.baseColorFactor = texInfo && texInfo.image.color || material.baseColorFactor || [1, 1, 1, 1];\n if (texture) {\n matInfo['baseColorTexture'] = texture;\n }\n } else {\n // GLTF 2.0\n\n if (material.normalTexture) {\n const texture = this._getTexture(gltf.textures[material.normalTexture.index], gltfWeakResources);\n if (texture) {\n const normalMapFactor = material.normalTexture.scale || 1;\n matInfo.normalTexture = texture;\n matInfo.normalMapFactor = normalMapFactor;\n }\n }\n if (material.occlusionTexture) {\n const texture = this._getTexture(gltf.textures[material.occlusionTexture.index], gltfWeakResources);\n if (texture) {\n const occlusionFactor = material.occlusionTexture.strength || 1;\n matInfo.occlusionTexture = texture;\n matInfo.occlusionFactor = occlusionFactor;\n }\n }\n if (material.emissiveTexture) {\n const texture = this._getTexture(gltf.textures[material.emissiveTexture.index], gltfWeakResources);\n if (texture) {\n matInfo.emissiveTexture = texture;\n }\n }\n if (material.emissiveFactor) {\n matInfo.emissiveFactor = material.emissiveFactor;\n }\n //TODO alphaMode, cutOff和doubleSided\n\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n if (pbrMetallicRoughness) {\n if (pbrMetallicRoughness.baseColorFactor) {\n matInfo.baseColorFactor = pbrMetallicRoughness.baseColorFactor;\n }\n if (pbrMetallicRoughness.baseColorTexture && pbrMetallicRoughness.baseColorTexture.index !== undefined) {\n const texInfo = gltf.textures[pbrMetallicRoughness.baseColorTexture.index];\n if (texInfo && texInfo.image && texInfo.image.color) {\n matInfo.baseColorFactor = matInfo.baseColorFactor ? vec4.multiply(matInfo.baseColorFactor, matInfo.baseColorFactor, texInfo.image.color) : texInfo.image.color;\n } else {\n const texture = this._getTexture(texInfo, gltfWeakResources);\n if (texture) {\n matInfo.baseColorTexture = texture;\n // 调用getREGLTexture以回收bitmap\n matInfo.baseColorTexture.getREGLTexture(this._regl);\n }\n }\n }\n if (!isNil(pbrMetallicRoughness.metallicFactor)) {\n matInfo.metallicFactor = pbrMetallicRoughness.metallicFactor;\n }\n if (!isNil(pbrMetallicRoughness.roughnessFactor)) {\n matInfo.roughnessFactor = pbrMetallicRoughness.roughnessFactor;\n }\n if (material.metallicRoughnessTexture) {\n const texture = this._getTexture(gltf.textures[material.metallicRoughnessTexture.index], gltfWeakResources);\n if (texture) {\n matInfo.metallicRoughnessTexture = texture;\n }\n }\n }\n }\n\n\n if (material.s3mMaterial) {\n return new reshader.Material(matInfo);\n }\n // matInfo.alphaTest = 0.1;\n if (service.unlit || material.extensions && material.extensions['KHR_materials_unlit']) {\n // matInfo.ambientColor = [1, 1, 1];\n // matInfo['light0_diffuse'] = [0, 0, 0, 0];\n // matInfo['lightSpecular'] = [0, 0, 0];\n const material = new reshader.PhongMaterial(matInfo);\n material.unlit = service.unlit === undefined || !!service.unlit;\n return material;\n }\n\n let meshMaterial = new reshader.pbr.StandardMaterial(matInfo);\n if (shader === 'phong') {\n meshMaterial = reshader.PhongMaterial.convertFrom(meshMaterial);\n }\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n const extensions = pbrMetallicRoughness && pbrMetallicRoughness.baseColorTexture && pbrMetallicRoughness.baseColorTexture.extensions;\n if (extensions && extensions['KHR_texture_transform']) {\n meshMaterial.set('khr_offset', extensions['KHR_texture_transform'].offset || [0, 0]);\n meshMaterial.set('khr_rotation', extensions['KHR_texture_transform'].rotation || 0);\n meshMaterial.set('khr_scale', extensions['KHR_texture_transform'].scale || [1, 1]);\n }\n meshMaterial.doubleSided = !!(service.doubleSided || material.doubleSided);\n meshMaterial.once('complete', this._bindedListener);\n return meshMaterial;\n }\n\n _getTexture(texInfo, gltfWeakResources) {\n if (!texInfo) {\n return null;\n }\n // texInfo.image.color 表示图片被精简成了颜色\n const config = {\n type: texInfo.type ? getMaterialType(texInfo.type) : 'uint8',\n format: texInfo.format ? getMaterialFormat(texInfo.format) : 'rgba',\n flipY: !!texInfo.flipY\n };\n //gltf 2.0\n const image = texInfo.image;\n gltfWeakResources.push(image);\n if (image.array) {\n config.data = image.array;\n } else if (image.mipmap) {\n config.mipmap = image.mipmap;\n }\n if (!config.data && !config.mipmap) {\n return null;\n }\n config.width = image.width;\n config.height = image.height;\n // dxt 纹理要求高宽必须大于4,否则regl中检查会报错\n if (config.mipmap && (config.width < 4 || config.height < 4)) {\n return null;\n }\n const sampler = texInfo.sampler || texInfo.texture && texInfo.texture.sampler;\n if (sampler) {\n if (sampler.magFilter) config['mag'] = getTextureMagFilter(sampler.magFilter);\n if (sampler.minFilter) config['min'] = getTextureMinFilter(sampler.minFilter);\n if (sampler.wrapS) config['wrapS'] = getTextureWrap(sampler.wrapS);\n if (sampler.wrapT) config['wrapT'] = getTextureWrap(sampler.wrapT);\n }\n\n return new reshader.Texture2D(config, this._resLoader);\n\n }\n\n _onResourceLoad({ target }) {\n const id = target._nodeId;\n const loading = this._loading[id];\n loading.count--;\n if (!loading.count) {\n const mesh = loading.meshes;\n this._modelMeshes[id] = mesh;\n delete this._loading[id];\n const cb = mesh._callback;\n delete mesh._callback;\n cb(null, { mesh: loading.meshes, id });\n }\n }\n\n // _unproject(pcoord) {\n // const map = this.getMap();\n // const sr = this._spatialReference;\n // if (!maptalks.SpatialReference.equals(sr.toJSON(), map.getSpatialReference().toJSON())) {\n // return map.getProjection().project(sr.getProjection().unproject(pcoord));\n // } else {\n // return pcoord;\n // }\n // }\n\n _getProjScale(out) {\n const map = this.getMap();\n const zoomScale = 1 / map.getGLRes();\n // 高度坐标是米\n const heightScale = this._heightScale;\n out[0] = out[1] = zoomScale;\n out[2] = heightScale;\n return out;\n }\n\n _coordToPoint(c) {\n return this._layer._coordToPoint(c);\n }\n\n _pointToPrj(c) {\n const map = this.getMap();\n if (map.getGLZoom) {\n return map['_pointToPrj'](c, map.getGLZoom());\n } else {\n return map['_pointToPrjAtRes'](c, map.getGLRes());\n }\n }\n\n _prjToPoint(c) {\n const map = this.getMap();\n if (map.getGLZoom) {\n return map['_prjToPoint'](c, map.getGLZoom());\n } else {\n return map['_prjToPointAtRes'](c, map.getGLRes(), TEMP_POINT);\n }\n }\n\n _getUpAxisTransform(axis) {\n if (axis === 'Y') {\n return Y_TO_Z;\n } else if (axis === 'X') {\n return X_TO_Z;\n } else {\n return IDENTITY_MATRIX;\n }\n }\n\n pick(x, y, tolerance = 3) {\n const layer = this._layer;\n if (!layer || !layer.options['picking']) {\n return [];\n }\n if (!this.pickingFBO || !this.picking) {\n return [];\n }\n const result = [];\n const uniforms = this._getUniformValues();\n const b3dm = this._pickMesh(this.picking, uniforms, this._modelScene, x, y, tolerance);\n if (b3dm) {\n result.push(b3dm);\n }\n const i3dm = this._pickMesh(this.picking, uniforms, this._i3dmScene, x, y, tolerance);\n if (i3dm) {\n result.push(i3dm);\n }\n const pntsUniforms = this._getPntsUniforms();\n const pnts = this._pickMesh(this._pntsPicking, pntsUniforms, this._pntsScene, x, y, tolerance);\n if (pnts) {\n result.push(pnts);\n }\n return result;\n\n }\n\n _pickMesh(picking, uniforms, scene, x, y, tolerance) {\n if (!scene.getMeshes().length) {\n return null;\n }\n const layer = this._layer;\n const map = this.getMap();\n\n picking.render(scene.getMeshes().filter(m => !m.bloom), uniforms, true);\n let picked = {};\n if (picking.getRenderedMeshes().length) {\n picked = picking.pick(x, y, tolerance, uniforms, {\n viewMatrix: map.viewMatrix,\n projMatrix: map.projMatrix,\n returnPoint: layer.options['pickingPoint']\n });\n }\n const { meshId, pickingId, point, coordinate } = picked;\n const mesh = (meshId === 0 || meshId) && picking.getMeshAt(meshId);\n if (!mesh || !mesh.geometry) {\n //有可能mesh已经被回收,geometry不再存在\n return null;\n }\n const props = mesh.properties;\n if (point && point.length) {\n point[0] = Math.round(point[0] * 1E5) / 1E5;\n point[1] = Math.round(point[1] * 1E5) / 1E5;\n point[2] = Math.round(point[2] * 1E5) / 1E5;\n }\n const data = {\n batchId: pickingId\n };\n const services = layer.options['services'];\n const service = services && services[mesh.properties.serviceIndex];\n if (service && service['debug']) {\n data.debugInfo = props;\n }\n if (props && props.batchTable) {\n const { batchTable, batchTableBin, count } = props;\n const batchId = pickingId;\n\n for (const p in batchTable) {\n if (batchTable[p].byteOffset !== undefined) {\n data[p] = readBatchData(batchTable[p], batchTableBin, count, batchId);\n } else {\n data[p] = batchTable[p][batchId];\n }\n }\n }\n\n return {\n service: mesh.properties.serviceIndex,\n data,\n point,\n coordinate\n };\n }\n\n highlight(highlights) {\n this._highlighted = highlights;\n const renderer = this._layer.getRenderer();\n this._highlightTimestamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n cancelAllHighlight() {\n this._highlighted = null;\n const renderer = this._layer.getRenderer();\n this._highlightTimestamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n showOnly(showOnlys) {\n this._showOnlys = showOnlys;\n const renderer = this._layer.getRenderer();\n this._showOnlyTimeStamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n cancelShowOnly() {\n this._showOnlys = null;\n const renderer = this._layer.getRenderer();\n this._showOnlyTimeStamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n _getCurrentBatchIDs() {\n if (!this._paintedMeshes) {\n return [];\n }\n const ids = {};\n const batchIds = [];\n for (const p in this._paintedMeshes) {\n const meshes = this._paintedMeshes[p];\n if (meshes) {\n for (let i = 0; i < meshes.length; i++) {\n const mesh = meshes[i];\n const geometry = mesh && mesh.geometry;\n if (!mesh || !geometry) {\n continue;\n }\n const serviceIndex = mesh.properties.serviceIndex;\n if (!ids[serviceIndex]) {\n ids[serviceIndex] = new Set();\n }\n const batchData = geometry.properties.batchIdData;\n if (batchData) {\n for (let ii = 0; ii < batchData.length; ii++) {\n if (!ids[serviceIndex].has(batchData[ii])) {\n batchIds.push({\n id: batchData[ii],\n service: serviceIndex\n });\n ids[serviceIndex].add(batchData[ii]);\n }\n }\n }\n }\n }\n }\n return batchIds;\n }\n\n hasIBL() {\n const lightManager = this.getMap().getLightManager();\n const resource = lightManager && lightManager.getAmbientResource();\n return !!resource;\n }\n}\n\n// function createColorArray(attrs) {\n// const vertexCount = attrs[attributeSemantics['POSITION']].array.length;\n// const color = {\n// array: new Uint8Array(),\n\n// }\n// color.array.fill(255);\n// return color;\n// }\n\n// function meshCompare(a, b) {\n// let levelA = a.properties.level;\n// let levelB = b.properties.level;\n// if (!a.properties.isLeaf) {\n// levelA += 255;\n// }\n// if (!b.properties.isLeaf) {\n// levelB += 255;\n// }\n// if (levelA >= 255 && levelB >= 255) {\n// return levelB - levelA;\n// }\n// return levelA - levelB;\n// }\n\n// function meshCompare(a, b) {\n// return a.properties.node._cameraDistance - b.properties.node._cameraDistance;\n// }\n\nfunction generateFeatureIndiceIndex(featureIds, indices) {\n if (!indices) {\n return null;\n }\n const indiceIndex = new Map();\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n const id = featureIds[idx];\n let index = indiceIndex.get(id);\n if (!index) {\n index = [];\n indiceIndex.set(id, index);\n }\n index.push(idx);\n }\n return indiceIndex;\n}\n\nfunction trimGLTFWeakResources(gltfWeakResources) {\n for (let i = 0; i < gltfWeakResources.length; i++) {\n if (gltfWeakResources[i]) {\n if (gltfWeakResources[i].array) {\n gltfWeakResources[i].array = null;\n }\n if (gltfWeakResources[i].mipmap) {\n gltfWeakResources[i].mipmap = null;\n }\n if (gltfWeakResources[i].indices) {\n gltfWeakResources[i].indices = null;\n }\n }\n }\n}\n\nfunction generateSphere(count, radius) {\n const angle = Math.PI * 2 / count;\n const vertices = [];\n const indices = [];\n for (let i = 0; i <= count; i++) {\n const posX = Math.cos(angle * i) * radius;\n const posY = Math.sin(angle * i) * radius;\n const posZ = 0;\n vertices[i * 3] = posX;\n vertices[i * 3 + 1] = posY;\n vertices[i * 3 + 2] = posZ;\n }\n for (let i = count; i <= count * 2; i++) {\n const posY = Math.cos(angle * i) * radius;\n const posZ = Math.sin(angle * i) * radius;\n const posX = 0;\n vertices[i * 3] = posX;\n vertices[i * 3 + 1] = posY;\n vertices[i * 3 + 2] = posZ;\n }\n for (let i = count * 2; i <= count * 3; i++) {\n const posX = Math.cos(angle * i) * radius;\n const posZ = Math.sin(angle * i) * radius;\n const posY = 0;\n vertices[i * 3] = posX;\n vertices[i * 3 + 1] = posY;\n vertices[i * 3 + 2] = posZ;\n }\n const len = vertices.length / 3 - 1;\n for (let i = 0; i < len; i++) {\n if (i === count - 1 || i === count * 2 -1) {\n continue;\n }\n indices[i * 2] = i;\n indices[i * 2 + 1] = i + 1;\n }\n vertices.push(0, 0, 0);\n vertices.push(radius, 0, 0);\n vertices.push(0, radius, 0);\n vertices.push(0, 0, radius);\n indices.push(len + 1, len + 2);\n indices.push(len + 1, len + 3);\n indices.push(len + 1, len + 4);\n return { vertices, indices };\n}\n","\n\nexport function fillNodepagesToCache(nodeCache, nodes) {\n if (!nodes) {\n return;\n }\n for (let i = 0; i < nodes.length; i++) {\n // 1.6版是id,1.7/1.8版是index\n const id = nodes[i].id || nodes[i].index;\n nodeCache[id] = nodes[i];\n }\n}\n","import { radianToCartesian3 } from '../../common/Transform';\nimport { toRadian } from '../../common/Util';\nimport { vec3, mat3, mat4 } from 'gl-matrix';\nimport { fillNodepagesToCache } from './Util';\n\nconst TEMP_VEC3 = [];\n\nexport default class I3SNode {\n constructor(url, rootIdx, nodeCache, layer, fnFetchNodepages) {\n this._layer = layer;\n this._url = url;\n this._rootIdx = rootIdx;\n this._fnFetchNodepages = fnFetchNodepages;\n this._version = nodeCache.version;\n if (url.indexOf('i3s:tileset:') < 0) {\n if (this._version <= 1.6) {\n this._index = 'root';\n } else {\n this._index = 0;\n }\n nodeCache.version = this._version;\n } else {\n this._index = url.substring('i3s:tileset:'.length);\n if (this._version > 1.6) {\n this._index = parseInt(this._index);\n }\n }\n this._url = url;\n this._nodeCache = nodeCache;\n }\n\n load() {\n const nodeCache = this._nodeCache;\n const baseUrl = nodeCache.layerScene.baseUrl;\n\n if (this._version <= 1.6) {\n if (nodeCache[this._index] && nodeCache[this._index].lodSelection) {\n this._nodeJSON = nodeCache[this._index];\n return this._loadNode();\n }\n return new Promise((resolve) => {\n let url = baseUrl + '/nodes/' + this._index;\n if (nodeCache.layerScene.eslpk) {\n url += '/3dNodeIndexDocument.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n this._nodeJSON = nodeCache[this._index];\n resolve(this._loadNode());\n });\n });\n } else if (this._version >= 1.7) {\n if (nodeCache[this._index]) {\n this._nodeJSON = nodeCache[this._index];\n return this._loadNode();\n }\n const nodepage = Math.floor(this._index / nodeCache.nodesPerPage);\n //root node\n\n return new Promise((resolve) => {\n let url = baseUrl + '/nodepages/' + nodepage;\n if (nodeCache.layerScene.eslpk) {\n url += '.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n this._nodeJSON = nodeCache[this._index];\n resolve(this._loadNode());\n });\n });\n } else {\n // leaf nodes\n return null;\n }\n }\n\n getTileset() {\n return this._tileset;\n }\n\n getChildrenURL() {\n return this._childrenURL;\n }\n\n _loadNode() {\n const nodeCache = this._nodeCache;\n const baseUrl = nodeCache.layerScene.baseUrl;\n const children = this._nodeJSON.children;\n const promises = [];\n const pendingReqs = {};\n if (children) {\n for (let i = 0; i < children.length; i++) {\n if (this._version <= 1.6) {\n const id = children[i].id;\n if (nodeCache[id]) {\n continue;\n }\n const childPageIndex = id;\n if (!pendingReqs[childPageIndex]) {\n pendingReqs[childPageIndex] = new Promise((resolve) => {\n let url = baseUrl + '/nodes/' + childPageIndex;\n if (nodeCache.layerScene.eslpk) {\n url += '/3dNodeIndexDocument.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n resolve();\n });\n });\n promises.push(pendingReqs[childPageIndex]);\n }\n } else {\n const id = children[i];\n if (nodeCache[id]) {\n continue;\n }\n const childPageIndex = Math.floor(id / nodeCache.nodesPerPage);\n if (!pendingReqs[childPageIndex]) {\n pendingReqs[childPageIndex] = new Promise((resolve) => {\n let url = baseUrl + '/nodepages/' + childPageIndex;\n if (nodeCache.layerScene.eslpk) {\n url += '.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n resolve();\n });\n });\n promises.push(pendingReqs[childPageIndex]);\n }\n }\n\n }\n }\n if (promises.length) {\n return Promise.all(promises).then(() => {\n return this._loadContent();\n });\n } else {\n return this._loadContent();\n }\n }\n\n _loadContent() {\n return Promise.resolve(this._createTileset());\n }\n\n _fillCache(nodes) {\n fillNodepagesToCache(this._nodeCache, nodes);\n }\n\n _createTileset() {\n const inPlaceTileset = {\n asset: {\n i3s: true,\n version: \"1.0\",\n gltfUpAxis: 'Z'\n },\n geometricError: Number.MAX_VALUE,\n root: this._convertNode(this._nodeJSON, true),\n };\n return inPlaceTileset;\n }\n\n _convertNode(nodeJSON) {\n const renderer = this._layer.getRenderer();\n const projection = this._nodeCache.projection;\n const is4326 = !projection || projection && projection.wkid === 4326;\n const version = this._version;\n const nodeCache = this._nodeCache;\n const nodeData = nodeJSON;\n const obb = nodeData.obb;\n const mbs = nodeData.mbs;\n\n const boundingVolume = {};\n let position;\n\n if (mbs) {\n position = vec3.set([], mbs[0], mbs[1], mbs[2]);\n if (!is4326) {\n position = renderer._tileCoordToLngLat(position, position);\n }\n position = _WGS84ToCartesian([], position[0], position[1], position[2]); // cartesian center of box\n boundingVolume.sphere = [\n ...position, // cartesian center of sphere\n mbs[3] // radius of sphere\n ];\n } else if (obb) {\n position = vec3.set([], obb.center[0], obb.center[1], obb.center[2]); // cartesian center of box;\n if (!is4326) {\n position = renderer._tileCoordToLngLat(position, position);\n }\n position = _WGS84ToCartesian([], position[0], position[1], position[2]); // cartesian center of box;\n const box = fromCenterHalfSizeQuaternion(\n position, // cartesian center of box\n obb.halfSize,\n obb.quaternion\n );\n // boundingVolume.box = box;\n // 计算box的半径\n const x = box[3] + box[6] + box[9];\n const y = box[4] + box[7] + box[10];\n const z = box[5] + box[8] + box[11];\n vec3.set(TEMP_VEC3, x, y, z);\n const radius = vec3.len(TEMP_VEC3);\n boundingVolume.sphere = [\n ...position,\n radius\n ];\n }\n\n // compute the geometric error\n let metersPerPixel = Infinity;\n\n let span = 0;\n if (nodeData.mbs) {\n span = nodeData.mbs[3];\n } else if (nodeData.obb) {\n span = Math.max(\n Math.max(nodeData.obb.halfSize[0], nodeData.obb.halfSize[1]),\n nodeData.obb.halfSize[2]\n );\n }\n\n // get the meters/pixel density required to pop the next LOD\n if (nodeData.lodThreshold !== undefined) {\n if (\n nodeCache.lodSelectionMetricType ===\n \"maxScreenThresholdSQ\"\n ) {\n const maxScreenThreshold =\n Math.sqrt(nodeData.lodThreshold) / (Math.PI * 0.25);\n metersPerPixel = span / maxScreenThreshold;\n } else {\n console.error(\"Unsupported lodSelectionMetricType in Layer\");\n }\n } else if (nodeData.lodSelection !== undefined) {\n for (\n let lodIndex = 0;\n lodIndex < nodeData.lodSelection.length;\n lodIndex++\n ) {\n if (\n nodeData.lodSelection[lodIndex].metricType === \"maxScreenThreshold\"\n ) {\n metersPerPixel = span / nodeData.lodSelection[lodIndex].maxError;\n }\n }\n }\n\n if (metersPerPixel === Infinity || isNaN(metersPerPixel)) {\n metersPerPixel = 100000;\n }\n\n // calculate the length of 16 pixels in order to trigger the screen space error\n const geometricError = metersPerPixel * 16;\n\n const globalTransforms = mat4.identity([]);\n // globalTransforms[12] = position[0];\n // globalTransforms[13] = position[1];\n // globalTransforms[14] = position[2];\n\n const localTransforms = globalTransforms;\n\n const children = nodeData.children;\n let childrenDefinition;\n // get children definition\n if (children) {\n childrenDefinition = [];\n const nodeCache = this._nodeCache;\n for (let i = 0; i < children.length; i++) {\n const childIndex = version <= 1.6 ? children[i].id : children[i];\n if (nodeCache[childIndex]) {\n childrenDefinition.push(\n this._convertNode(nodeCache[childIndex])\n );\n } else {\n childrenDefinition = null;\n break;\n }\n }\n }\n\n\n // Create a tile set\n const inPlaceTileDefinition = {\n refine: \"REPLACE\",\n boundingVolume: boundingVolume,\n transform: localTransforms,\n geometricError: geometricError,\n };\n\n if (version <= 1.6) {\n if (!nodeJSON.lodSelection) {\n // 1.6的node即是个tileset,又是个mesh\n // 因为只在3DNodeDocumentIndex中存了children信息\n // 载入3DNodeDocumentIndex之前,是个tileset,载入后,就成为了mesh\n // 如果没有lodSelection,说明是个tileset\n inPlaceTileDefinition.content = {\n uri: 'i3s:tileset:' + (nodeJSON.id || nodeJSON.index),\n };\n } else if (nodeJSON.geometryData) {\n inPlaceTileDefinition.content = {\n uri: 'i3s:mesh:' + (nodeJSON.id || nodeJSON.index),\n };\n }\n } else {\n if (children && children.length && !childrenDefinition) {\n // a child\n inPlaceTileDefinition.content = {\n uri: 'i3s:tileset:' + (nodeJSON.id || nodeJSON.index),\n };\n } else if (nodeData.mesh) {\n inPlaceTileDefinition.content = {\n uri: 'i3s:mesh:' + (nodeJSON.id || nodeJSON.index),\n };\n }\n }\n\n if (childrenDefinition && childrenDefinition.length) {\n inPlaceTileDefinition.children = childrenDefinition;\n }\n\n return inPlaceTileDefinition;\n }\n\n getJSON() {\n return this._nodeJSON;\n }\n}\n\n\n\nfunction _WGS84ToCartesian(out, long, lat, height) {\n return radianToCartesian3(out, toRadian(long), toRadian(lat), height);\n}\n\nfunction fromCenterHalfSizeQuaternion(center ,halfSize, quaternion) {\n const directionsMatrix = mat3.fromQuat([], quaternion);\n directionsMatrix[0] = directionsMatrix[0] * halfSize[0];\n directionsMatrix[1] = directionsMatrix[1] * halfSize[0];\n directionsMatrix[2] = directionsMatrix[2] * halfSize[0];\n directionsMatrix[3] = directionsMatrix[3] * halfSize[1];\n directionsMatrix[4] = directionsMatrix[4] * halfSize[1];\n directionsMatrix[5] = directionsMatrix[5] * halfSize[1];\n directionsMatrix[6] = directionsMatrix[6] * halfSize[2];\n directionsMatrix[7] = directionsMatrix[7] * halfSize[2];\n directionsMatrix[8] = directionsMatrix[8] * halfSize[2];\n return [\n ...center,\n ...directionsMatrix\n ];\n}\n","import transcoders from '@maptalks/gl/dist/transcoders.js';\nimport I3SNode from './I3SNode';\n// import I3SMesh from './I3SMesh';\nimport { isObject } from '../../common/Util';\nimport { mat4 } from '@maptalks/gl';\n\nconst supportKTX2 = !!transcoders.ktx2;\nconst IDENTITY_MAT4 = mat4.identity([]);\n\nconst supportWASM = (() => {\n try {\n if (typeof WebAssembly === \"object\"\n && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));\n if (module instanceof WebAssembly.Module)\n return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n /* eslint-disable no-empty */\n } catch (e) {\n }\n /* eslint-enable no-empty */\n return false;\n})();\n\nexport function parseI3SJSON(layer, json, rootIdx, service, url, nodeCache, fnFetchNodepages) {\n if (!nodeCache.layerScene) {\n // the scene layer\n nodeCache.layerScene = json;\n nodeCache.nodesPerPage = json.nodePages && json.nodePages.nodesPerPage || 64;\n nodeCache.lodSelectionMetricType = json.nodePages && json.nodePages.lodSelectionMetricType;\n let baseUrl = url;\n nodeCache.layerScene.eslpk = baseUrl.indexOf('3dSceneLayer.json') >= 0;\n const isUrlConfigFile = baseUrl.endsWith('.json');\n if (isUrlConfigFile) {\n const lastSlash = url.lastIndexOf('/');\n if (lastSlash < 0) {\n baseUrl = './';\n } else {\n baseUrl = url.substring(0, lastSlash);\n }\n }\n nodeCache.layerScene.baseUrl = regulateURL(baseUrl);\n }\n const node = new I3SNode(url, rootIdx, nodeCache, layer, fnFetchNodepages);\n return node.load();\n}\n\nexport function isI3STileset(url) {\n return url.indexOf('i3s:tileset') >= 0;\n}\n\nexport function isI3SMesh(url) {\n return url.indexOf('i3s:mesh') >= 0;\n}\n\nconst prefixIndex = 'i3s:mesh:'.length\nexport function getI3SNodeIndex(version, url) {\n const id = url.substring(prefixIndex);\n if (version >= 1.7) {\n return parseInt(id);\n } else {\n return id;\n }\n\n}\n\nexport function getI3SNodeInfo(url, nodeCache, regl, enableDraco, forceDraco) {\n const isESLPK = nodeCache.layerScene.eslpk;\n const nodeIndex = getI3SNodeIndex(nodeCache.version, url);\n const node = nodeCache[nodeIndex];\n const baseUrl = nodeCache.layerScene.baseUrl;\n const meshes = [];\n let hasCompression = false;\n const transform = IDENTITY_MAT4;\n let geometry, material;\n if (nodeCache.version <= 1.6) {\n // 1.6\n if (!node.geometryData) {\n return null;\n }\n const len = node.geometryData.length;\n if (!len) {\n return null;\n }\n let geoUrl = baseUrl + `/nodes/${node.id}/` + node.geometryData[len - 1].href;\n if (isESLPK) {\n geoUrl += '.bin';\n }\n const meshInfo = { geometry: { url: geoUrl, info: nodeCache.layerScene.store.defaultGeometrySchema } };\n let textureUrl = node.textureData && node.textureData[0] && node.textureData[0].href;\n if (textureUrl) {\n const mimeType = nodeCache.layerScene.store.textureEncoding[0];\n let format;\n if (mimeType === 'image/jpeg') {\n format = 'jpg';\n } else {\n format = 'png';\n }\n if (isESLPK) {\n textureUrl += '.' + format;\n }\n const matInfo = {\n pbrMetallicRoughness: {\n baseColorTexture: {\n url: baseUrl + `/nodes/${node.id}/` + textureUrl,\n factor: 1,\n format,\n mimeType\n },\n metallicFactor: 0.0,\n }\n }\n meshInfo.material = matInfo;\n }\n meshes.push(meshInfo);\n } else {\n // 1.7+\n geometry = node.mesh.geometry;\n material = node.mesh.material;\n const geoDefinitions = nodeCache.layerScene.geometryDefinitions;\n //read texture encode array\n const textureEncoding = (nodeCache.layerScene.store || {}).textureEncoding;\n const geoDef = geoDefinitions[geometry.definition];\n const { geometryBuffers } = geoDef;\n // geometryBuffers[1] is the draco version\n hasCompression = enableDraco && geometryBuffers.length === 2;\n const geometryInfo = transcoders['draco'] && hasCompression ? geometryBuffers[1] : geometryBuffers[0];\n const index = transcoders['draco'] && hasCompression ? 1 : 0;\n let geoUrl = baseUrl + `/nodes/${geometry.resource}/geometries/` + index;\n if (isESLPK) {\n geoUrl += '.bin';\n }\n const meshInfo = { geometry: { url: geoUrl, info: geometryInfo } };\n if (forceDraco && supportWASM && hasCompression && !transcoders['draco']) {\n throw new Error('Must import @maptalks/transcoder.draco to load i3s draco compressed geometry');\n }\n\n const materialDefinitions = nodeCache.layerScene.materialDefinitions;\n const textureSetDefinitions = nodeCache.layerScene.textureSetDefinitions;\n let materialDef = 0;\n if (material) {\n materialDef = materialDefinitions[material.definition];\n }\n let materialInfo;\n if (materialDefinitions) {\n const resource = material.resource;\n materialInfo = parseMaterial(textureEncoding, materialDef, textureSetDefinitions, baseUrl, resource, regl, nodeCache.layerScene.eslpk);\n } else {\n materialInfo = {\n pbrMetallicRoughness: {\n metallicFactor: 0.0,\n }\n };\n }\n meshInfo.material = materialInfo;\n meshes.push(meshInfo);\n }\n\n\n\n return {\n dracoCompression: hasCompression,\n meshes,\n nodeIndex,\n center: node.obb && node.obb.center || node.mbs && [node.mbs[0], node.mbs[1], node.mbs[2]],\n transform\n };\n}\n\nfunction parseMaterial(textureEncoding, materialDefinition, textureSetDefinitions, baseUrl, nodeIndex, regl, isESLPK) {\n const matInfo = JSON.parse(JSON.stringify(materialDefinition));\n\n resolveTextures(textureEncoding, matInfo, textureSetDefinitions, baseUrl, nodeIndex, regl, isESLPK);\n return matInfo;\n}\n\nfunction resolveTextures(textureEncoding, matInfo, textureSetDefinitions, baseUrl, resource, regl, isESLPK) {\n for (const p in matInfo) {\n // is a texture\n if (matInfo[p] && matInfo[p].textureSetDefinitionId >= 0) {\n const texDef = textureSetDefinitions[matInfo[p].textureSetDefinitionId];\n const mimeType = 'images/' + texDef.formats[0].format;\n const format = getSupportedTexture(texDef.formats, regl, textureEncoding);\n const texture = {\n url: baseUrl + `/nodes/${resource}/textures/${format.name}`,\n factor: matInfo[p].factor === undefined ? 1 : matInfo[p].factor,\n format: format.format,\n mimeType\n };\n if (isESLPK) {\n let ext = '';\n switch (format.format) {\n case 'dds':\n ext = 'bin.dds';\n break;\n case 'jpg':\n case 'png':\n ext = format.format;\n break;\n }\n texture.url += '.' + ext;\n }\n matInfo[p] = texture;\n } else if (isObject(matInfo[p])) {\n resolveTextures(textureEncoding, matInfo[p], textureSetDefinitions, baseUrl, resource, regl, isESLPK);\n }\n }\n}\n\nconst textureEnCodingMap = {\n \"image/jpeg\": 'jpg',\n \"image/jpg\": 'jpg',\n \"image/png\": 'jpg',\n \"image/vnd-ms.dds\": \"dds\",\n \"image/ktx\": 'jpg'\n};\n\nfunction getSupportedTexture(formats, regl, textureEncoding) {\n if (textureEncoding && textureEncoding.length) {\n const textureEncode = textureEncoding[textureEncoding.length - 1];\n const textureFormat = textureEnCodingMap[textureEncode];\n if (!textureFormat) {\n console.error(`i3s not find texture format type from:`, textureEnCodingMap, 'current textureEncoding:', textureEncode);\n } else {\n for (let i = 0, len = formats.length; i < len; i++) {\n const format = formats[i].format;\n if (format === textureFormat) {\n return formats[i];\n }\n }\n }\n\n }\n // for (let i = formats.length - 1; i >= 0; i--) {\n for (let i = 0; i <= formats.length; i++) {\n const format = formats[i].format;\n if (format === 'dds' && regl.hasExtension('WEBGL_compressed_texture_s3tc')) {\n //only support dxt1 and dtx5 compression\n return formats[i];\n } else if (format === 'jpg' || format === 'png') {\n // png or jpg\n return formats[i];\n } else if (format === 'ktx2' && supportKTX2) {\n return formats[i];\n } else if (format === 'ktx-etc2') {\n // not supported yet\n }\n }\n return null;\n}\n\nfunction regulateURL(url) {\n return url.split('?')[0];\n}\n","import * as maptalks from 'maptalks';\nimport { reshader, CanvasCompatible } from '@maptalks/gl';\nimport { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { MaskRendererMixin } from '@maptalks/gl';\nimport Geo3DTilesWorkerConnection from '../Geo3DTilesWorkerConnection';\nimport LRUCache from './LRUCache';\nimport TileMeshPainter from './TileMeshPainter';\nimport { readBatchArray } from '../../common/TileHelper';\nimport { extend, isBase64, base64URLToArrayBuffer, pushIn } from '../../common/Util.js';\nimport { isRelativeURL, prepareFetchOptions } from '../../common/UrlUtil';\n// import { CANDIDATE_MAX_ERROR } from '../../common/Constants.js';\nimport { parseI3SJSON, isI3STileset, isI3SMesh, getI3SNodeInfo } from '../i3s/I3SHelper';\nimport { fillNodepagesToCache } from '../i3s/Util';\nimport I3SNode from '../i3s/I3SNode';\n\nconst { Ajax } = getGLTFLoaderBundle();\n\nconst COORD_IN = new maptalks.Coordinate(0, 0);\nconst COORD_OUT = new maptalks.Coordinate(0, 0);\n\nconst REPORTED_ERRORS = new Set();\n\nconst EMPTY_ARRAY = [];\n\nconst GlobalTieCache = new LRUCache((maptalks.Browser.mobile ? 32 : 1024) * 1024 * 1024, (tile => {\n const renderer = tile.renderer;\n delete tile.renderer;\n renderer.deleteTile(tile);\n}));\nlet TileCacheRefCount = 0;\n\n\n\nexport default class Geo3DTilesRenderer extends MaskRendererMixin(CanvasCompatible(maptalks.renderer.LayerAbstractRenderer)) {\n\n constructor(layer) {\n super(layer);\n const max = layer.options['maxGPUMemory'] * 1024 * 1024;\n if (max > GlobalTieCache.max) {\n GlobalTieCache.setMaxSize(max);\n }\n this.tileCache = GlobalTieCache;\n TileCacheRefCount++;\n this.tilesLoading = {};\n this._requests = {};\n this._modelQueue = [];\n this._fnFetchNodepages = (...args) => {\n return this._fetchI3DNodepages.call(this, ...args);\n };\n }\n\n getAnalysisMeshes() {\n if (!this.painter) {\n return EMPTY_ARRAY;\n }\n const paintedMeshes = this.painter.getPaintedMeshes();\n if (!paintedMeshes) {\n return EMPTY_ARRAY;\n }\n\n const meshes = [];\n const { b3dmMeshes, pntsMeshes, i3dmMeshes } = paintedMeshes;\n if (b3dmMeshes.length) {\n pushIn(meshes, b3dmMeshes.filter(mesh => !!(mesh && mesh.geometry)));\n }\n if (pntsMeshes.length) {\n pushIn(meshes, pntsMeshes.filter(mesh => !!(mesh && mesh.geometry)));\n }\n if (i3dmMeshes.length) {\n pushIn(meshes, i3dmMeshes.filter(mesh => !!(mesh && mesh.geometry)));\n }\n return meshes;\n }\n\n needToRedraw() {\n // return true;\n const map = this.getMap();\n if (map.isInteracting()) {\n return true;\n }\n if (this._modelQueue.length) {\n return true;\n }\n return super.needToRedraw();\n }\n\n getFrameTimestamp() {\n return this._timestamp;\n }\n\n drawOnInteracting(event, timestamp, parentContext) {\n this.draw(timestamp, parentContext);\n }\n\n draw(timestamp, parentContext) {\n this._timestamp = timestamp;\n const mask2DExtent = this.prepareCanvas();\n if (mask2DExtent) {\n if (!mask2DExtent.intersects(this.canvasExtent2D)) {\n this.completeRender();\n return;\n }\n }\n const { root, tiles } = this.layer.getTiles();\n const count = tiles.length;\n if (!tiles || !count) {\n this.completeRender();\n return;\n }\n this.painter.prepareRender(parentContext);\n this._consumeI3SQueue();\n this._consumeModelQueue(parentContext);\n const { selectedTiles, requests } = this._selectTiles(root, tiles);\n\n if (requests.length) {\n this.loadTiles(requests);\n }\n this._drawTiles(selectedTiles, parentContext);\n this._abortUnusedTiles();\n if (!requests.length) {\n this.completeRender();\n }\n }\n // 遍历candidate瓦片,检查哪些可以获取到mesh,哪些需要去构造网络请求\n _selectTiles(root, tiles) {\n let requests = [];\n this._markTiles();\n let preLoadingCount = 0;\n const loadingLimit = this._getLoadLimit();\n\n const checked = {};\n let hit = false, loading = false;\n for (let i = 0; i < tiles.length; i++) {\n const tile = tiles[i];\n const node = tile.node;\n if (checked[node.id]) {\n continue;\n }\n checked[node.id] = 1;\n let tileLoading = false;\n const cached = this.getCachedTile(node.id);\n if (this._isLoadingTile(node.id)) {\n preLoadingCount++;\n tileLoading = loading = true;\n this.tilesLoading[node.id].current = true;\n } else if (cached) {\n if (this.getTileOpacity(cached) < 1) {\n tileLoading = loading = true;\n }\n // 剔除掉error相差过大的父级瓦片。否则会在有些情况下,覆盖范围很大的父级瓦片会绘制在场景中\n // 是在小丸子公司,由飞渡生成的模型中发现了该问题\n // if (!tile.node._error || rootNode.isS3M || !tile.node.children || tile.node._error <= CANDIDATE_MAX_ERROR) {\n\n // }\n hit = true;\n tile.selected = true;\n tile.data = cached;\n } else if (!this.painter.has(node)) {\n tileLoading = loading = true;\n requests.push(node);\n }\n if (!tileLoading) {\n continue;\n }\n //background tiles\n const parentTile = this._selectParentTile(tile);\n if (!parentTile) {\n const children = this._selectChildTile(tile);\n if (children.length) hit = true;\n } else {\n hit = true;\n }\n }\n\n const selectedTiles = hit ? this._sortTiles(root) : [];\n\n if (requests.length > 1) {\n requests.sort(compareRequests);\n if (loadingLimit) {\n const count = loadingLimit - preLoadingCount;\n if (count > 0) {\n requests = requests.slice(0, count);\n } else {\n requests = [];\n }\n }\n }\n\n return {\n loading,\n requests,\n selectedTiles\n };\n }\n\n //based on Cesium's traverseAndSelect in Cesium3DTilesetTraversal.js\n _sortTiles(root) {\n const selectedTiles = [];\n let lastAncestor;\n let branchRootId;\n const stack = [root],\n parentStack = [];\n while (stack.length > 0 || parentStack.length > 0) {\n if (parentStack.length > 0) {\n const waitingTile = parentStack[parentStack.length - 1];\n if (waitingTile._stackLength === stack.length) {\n parentStack.pop();\n if (waitingTile === lastAncestor) {\n waitingTile.leave = true;\n }\n waitingTile.branchRootId = branchRootId;\n selectedTiles.push(waitingTile);\n if (parentStack.length === 0) {\n branchRootId = null;\n }\n continue;\n }\n }\n const tile = stack.pop();\n const children = tile.children;\n if (tile.selected) {\n if (tile.node.refine === 'add') {\n tile.leave = true;\n tile.selectionDepth = parentStack.length;\n tile.branchRootId = branchRootId;\n selectedTiles.push(tile);\n } else {\n tile.selectionDepth = parentStack.length;\n\n lastAncestor = tile;\n\n if (children.length === 0) {\n tile.leave = true;\n tile.branchRootId = branchRootId;\n selectedTiles.push(tile);\n continue;\n }\n if (parentStack.length === 0) {\n branchRootId = tile.node.id;\n }\n parentStack.push(tile);\n tile._stackLength = stack.length;\n }\n }\n // if (children.length > 1) {\n // children.sort(compareTile);\n // }\n for (let i = 0; i < children.length; i++) {\n stack.push(children[i]);\n }\n }\n\n return selectedTiles;\n }\n\n _selectParentTile(node) {\n if (!node.parent) {\n return null;\n }\n let treeNode = node.parent;\n while (treeNode && treeNode.level >= 0) {\n const id = treeNode.node.id;\n const cached = this.tileCache.has(id);\n if (cached) {\n treeNode.selected = true;\n treeNode.data = this.tileCache.get(id);\n return treeNode;\n }\n treeNode = treeNode.parent;\n }\n return null;\n }\n\n _selectChildTile(tile) {\n const result = [];\n if (!tile.node.children || !tile.node.children.length) {\n return result;\n }\n const maxLevel = tile._level + 1;\n const queue = [tile.node];\n while (queue.length > 0) {\n const node = queue.pop();\n const children = node.children;\n for (let i = 0, l = children.length; i < l; i++) {\n if ((!children[i].content || !children[i].content.url) &&\n children[i].children && children[i].children.length) {\n queue.push(children[i]);\n continue;\n }\n const id = children[i].id;\n const cached = this.tileCache.has(id);\n if (cached) {\n const child = this.layer._createCandidate(children[i], tile);\n child.selected = true;\n child.data = this.tileCache.get(id);\n tile.children.push(child);\n result.push(child);\n } else if (children[i]._level <= maxLevel) {\n queue.push(children[i]);\n }\n }\n\n }\n return result;\n }\n\n _drawTiles(tiles, parentContext) {\n\n this.tileCache.markAll(this, false);\n const boxMeshes = [];\n for (let i = 0, l = tiles.length; i < l; i++) {\n const tileData = tiles[i].data;\n tileData.current = true;\n tileData.renderer = this;\n this.tileCache.add(tiles[i].node.id, tileData);\n const node = tileData.node;\n const service = this.layer._getNodeService(node._rootIdx);\n if (node._boxMesh && service['debug'] && !Array.isArray(service['debug'])) {\n boxMeshes.push(node._boxMesh);\n }\n }\n\n const services = this.layer.options.services;\n for (let i = 0; i < services.length; i++) {\n const service = services[i];\n const debugNodes = Array.isArray(service['debug']) && service['debug'];\n if (debugNodes) {\n for (const nodeId of debugNodes) {\n const nodeBox = this.layer._getNodeBox(nodeId);\n const node = nodeBox && nodeBox.node;\n if (!node || !node._boxMesh) {\n continue;\n }\n boxMeshes.push(node._boxMesh);\n }\n }\n }\n\n const context = { tiles };\n this.onDrawTileStart(context);\n const count = this.painter.paint(tiles, boxMeshes, parentContext);\n this.layer.fire('drawtiles', { count });\n\n this.onDrawTileEnd(context);\n if (count) {\n this.layer.fire('canvasisdirty', { renderCount: count });\n }\n // 改为绘制结束后,再 shrink cache,以免当前帧需要绘制的瓦片被delete掉, maptalks/issues#766\n this.tileCache.shrink();\n }\n\n onDrawTileStart() { }\n onDrawTileEnd() { }\n\n loadTiles(queue) {\n for (let i = 0, l = queue.length; i < l; i++) {\n const node = queue[i];\n // tile image's loading may not be async\n this.tilesLoading[node.id] = {\n current: true,\n node\n };\n this.loadTile(node);\n }\n }\n\n loadTile(node) {\n let url = node.content.url;\n if (isBase64(url)) {\n const binary = base64URLToArrayBuffer(url);\n this._loadTileContent(url, binary, node);\n return null;\n\n }\n\n if (isI3STileset(url)) {\n const rootIdx = node._rootIdx;\n const nodeCache = this._i3sNodeCache[rootIdx];\n const i3sNode = new I3SNode(url, rootIdx, nodeCache, this.layer, this._fnFetchNodepages);\n return i3sNode.load().then(tileset => {\n this.onTilesetLoad(tileset, node, url);\n });\n }\n\n if (node && isRelativeURL(url) && !isI3SMesh(url)) {\n url = node.baseUrl + url;\n }\n this._loadTileContent(url, null, node);\n return null;\n }\n\n _loadTileContent(url, arraybuffer, tile) {\n let supportedFormats = this._supportedFormats;\n if (!supportedFormats) {\n supportedFormats = reshader.Util.getSupportedFormats(this.gl || this.device && this.device.wgpu);\n this._supportedFormats = supportedFormats;\n }\n\n const service = this.layer._getNodeService(tile._rootIdx);\n if (service.isSuperMapiServer) {\n url = encodeSuperMapURI(url, tile.baseUrl);\n }\n const requestUrl = this.layer.getTileUrl(url, this.layer._roots[tile._rootIdx]);\n const params = { url: requestUrl, arraybuffer, rootIdx: tile._rootIdx, upAxis: tile._upAxis, transform: tile.matrix, supportedFormats };\n\n if (isI3SMesh(url)) {\n const nodeCache = this._i3sNodeCache[tile._rootIdx];\n params.projection = nodeCache.projection;\n params.i3sInfo = getI3SNodeInfo(url, nodeCache, this.regl || this.device, this.layer.options['enableI3SCompressedGeometry'], this.layer.options['forceI3SCompressedGeometry']);\n if (!params.i3sInfo) {\n this.onTileError({ status: 404 }, tile, url);\n return;\n }\n }\n\n // if (url.substring(url.length - 4, url.length) === 'b3dm') {\n // url = 'http://localhost/3dtiles/debug/xx/tile0/3/2/6.b3dm';\n // }\n params.service = extend({}, service);\n if (service.offset) {\n delete params.service.offset;\n }\n // fetchOptions定义在service中\n params.referrer = window && window.location.href;\n this.workerConn.loadTile(this.layer.getId(), params, (err, data) => {\n if (err) {\n this.onTileError(err, tile, url);\n return;\n }\n const { magic } = data;\n if (magic === 'b3dm' || magic === 'pnts' || magic === 'i3dm' || magic === 'cmpt' || magic === 'gltf') {\n this._modelQueue.push({ data, tile });\n } else {\n this.onTilesetLoad(data, tile, url);\n }\n\n // if (magic === 'b3dm') {\n // // this.painter.createB3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n // // this._onMeshCreated(data, tile, err, mesh);\n // // });\n // } else if (magic === 'pnts') {\n // this.painter.createPntsMesh(data, tile.id, tile, (err, { mesh }) => {\n // this._onMeshCreated(data, tile, err, mesh);\n // });\n // } else if (magic === 'i3dm') {\n // this.painter.createI3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n // this._onMeshCreated(data, tile, err, mesh);\n // });\n // } else if (magic === 'cmpt') {\n // this.painter.createCMPTMesh(data, tile.id, tile, (err, { mesh }) => {\n // this._onMeshCreated(data, tile, err, mesh);\n // });\n // }else {\n // this.onTilesetLoad(data, tile, url);\n // }\n });\n }\n\n _createBoxMesh(node) {\n if (!this.painter) {\n return;\n }\n this.painter._createBoxMesh(node);\n }\n\n _deleteBoxMesh(node) {\n if (!this.painter) {\n return;\n }\n this.painter._deleteBoxMesh(node);\n }\n\n _consumeModelQueue() {\n const map = this.getMap();\n const limit = this.layer.options['meshLimitPerFrame'];\n let count = 0;\n while (this._modelQueue.length && (count < limit || !map.isInteracting())) {\n const { data, tile } = this._modelQueue.shift();\n const { magic } = data;\n if (magic === 'b3dm' || magic === 'gltf') {\n this.painter.createB3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n } else if (magic === 'pnts') {\n this.painter.createPntsMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n } else if (magic === 'i3dm') {\n this.painter.createI3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n } else if (magic === 'cmpt') {\n this.painter.createCMPTMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n }\n count++;\n }\n }\n\n _onMeshCreated(data, tile, err, mesh) {\n this._enableLayerOpacity(mesh);\n if (err) {\n this.onTileError(err, tile);\n } else {\n const size = this._getMeshSize(mesh);\n tile.memorySize = size;\n this.onTileLoad(data, tile);\n }\n }\n\n _enableLayerOpacity(mesh) {\n if (Array.isArray(mesh)) {\n for (let i = 0; i < mesh.length; i++) {\n if (mesh[i]) {\n if (Array.isArray(mesh[i])) {\n this._enableLayerOpacity(mesh[i]);\n } else {\n const defines = mesh[i].defines || {};\n defines['HAS_LAYER_OPACITY'] = 1;\n mesh[i].setDefines(defines);\n }\n }\n }\n } else if (mesh) {\n if (Array.isArray(mesh)) {\n this._enableLayerOpacity(mesh);\n } else {\n const defines = mesh.defines || {};\n defines['HAS_LAYER_OPACITY'] = 1;\n mesh.setDefines(defines);\n }\n }\n }\n\n _getMeshSize(mesh) {\n let size = 0;\n if (Array.isArray(mesh)) {\n for (let i = 0; i < mesh.length; i++) {\n if (mesh[i]) {\n size += this._getMeshSize(mesh[i]);\n }\n }\n } else if (mesh) {\n size += mesh.getMemorySize();\n }\n return size;\n }\n\n onTileLoad(b3dm, node) {\n if (!this.layer) {\n return;\n }\n delete this.tilesLoading[node.id];\n this.layer.onTileLoad(b3dm, node);\n this._addTileToCache(node);\n this.setToRedraw();\n /**\n * tileload event, fired when tile is loaded.\n *\n * @event Geo3DTilesLayer#tileload\n * @type {Object}\n * @property {String} type - tileload\n * @property {Geo3DTilesLayer} target - tile layer\n * @property {Object} node - 3d tile node\n */\n this.layer.fire('tileload', { node });\n }\n\n onTilesetLoad(tileset, parent, url) {\n if (!this.layer) {\n return;\n }\n this.layer._vertexCompressionType = tileset.extensions && tileset.extensions['s3m:VertexCompressionType'];\n if (tileset.capabilities || tileset.layers && tileset.layers[0] && tileset.layers[0].capabilities) {\n //如果是i3s scene layer,还要再次请求root node信息\n this._parseI3SSceneLayer(tileset, parent, url);\n return;\n }\n delete this.tilesLoading[parent.id];\n this.layer.onTilesetLoad(tileset, parent, url);\n }\n\n onTileError(err, node, errorUrl) {\n if (!this.layer) {\n return;\n }\n // debugger\n const url = errorUrl || node.content.url;\n\n const info = err && err.message || err;\n if ((!err || err.status !== 404 && err.status !== 204) && !REPORTED_ERRORS.has(info)) {\n console.warn('failed to load 3d tile: ' + url);\n console.warn(err);\n REPORTED_ERRORS.add(info);\n }\n\n\n // const emptyB3DM = gltf.B3DMLoader.createEmptyB3DM();\n // emptyB3DM.loadTime = 0;\n delete this.tilesLoading[node.id];\n if (!this.layer.options['onlyCacheNoContentTileWhenError'] || err && !maptalks.Util.isNoContentHttpCode(err.status)) {\n this._addErrorToCache(node, err);\n }\n // this.setToRedraw();\n /**\n * tileerror event, fired when tile loading has error.\n *\n * @event Geo3DTilesLayer#tileerror\n * @type {Object}\n * @property {String} type - tileerror\n * @property {Geo3DTilesLayer} target - tile layer\n * @property {Object} node - 3d tile node\n * @property {Error} error - error message\n */\n this.layer.fire('tileerror', { node, error: err });\n }\n\n getCachedTile(id) {\n return this.tileCache.get(id);\n }\n\n getShadowMeshes() {\n if (!this.painter) {\n return [];\n }\n const meshes = [];\n const b3dmMeshes = this.painter.getCurrentB3DMMeshes();\n\n for (const p in b3dmMeshes) {\n if (b3dmMeshes[p] && b3dmMeshes[p].isValid && b3dmMeshes[p].isValid()) {\n meshes.push(b3dmMeshes[p]);\n }\n }\n const i3dmMeshes = this.painter.getCurrentI3DMMeshes();\n for (const p in i3dmMeshes) {\n if (i3dmMeshes[p] && i3dmMeshes[p].isValid && i3dmMeshes[p].isValid()) {\n meshes.push(i3dmMeshes[p]);\n }\n }\n return meshes;\n }\n\n _addErrorToCache(node, err) {\n const tileData = {\n // image : data,\n loadTime: maptalks.Util.now(),\n current: true,\n error: err,\n node\n };\n tileData.renderer = this;\n this.tileCache.add(node.id, tileData);\n }\n\n _addTileToCache(node) {\n const tileData = {\n // image : data,\n loadTime: maptalks.Util.now(),\n current: true,\n node\n };\n tileData.renderer = this;\n this.tileCache.add(node.id, tileData);\n }\n\n abortTileLoading(tile) {\n if (!tile || !this.workerConn) return;\n const url = tile.node.content.url;\n this.workerConn.abortTileLoading(this.layer.getId(), url);\n delete this._requests[url];\n }\n\n _markTiles() {\n if (this.tilesLoading) {\n for (const p in this.tilesLoading) {\n this.tilesLoading[p].current = false;\n }\n }\n }\n\n deleteTile(tile) {\n this.painter.deleteTile(tile);\n }\n\n initContext() {\n super.initContext();\n const layer = this.layer;\n const { regl, reglGL, device } = this.context;\n this.regl = regl;\n this.device = device;\n this.gl = reglGL;\n const graphics = regl || device;\n this.prepareWorker();\n this.canvas.pickingFBO = this.canvas.pickingFBO || graphics.framebuffer(this.canvas.width, this.canvas.height);\n this.pickingFBO = this.canvas.pickingFBO || graphics.framebuffer(this.canvas.width, this.canvas.height);\n this.painter = new TileMeshPainter(graphics, layer);\n\n this.layer._resumeHighlights();\n this.layer.fire('contextcreate', { regl, device });\n }\n\n prepareWorker() {\n const map = this.getMap();\n if (!this.workerConn) {\n this.workerConn = new Geo3DTilesWorkerConnection('@maptalks/3dtiles', map.id, reshader.Util.supportNPOT(this.regl || this.device));\n }\n const workerConn = this.workerConn;\n //setTimeout in case layer's style is set to layer after layer's creating.\n if (!workerConn.isActive()) {\n return;\n }\n let options = this.layer.options || {};\n options = extend({}, options);\n delete options['offset'];\n const spatialReference = map.options.spatialReference;\n options.projection = spatialReference && spatialReference.coordType || spatialReference && spatialReference.projection || map.getSpatialReference().getProjection().code;\n const id = this.layer.getId();\n workerConn.addLayer(id, options, err => {\n if (err) throw err;\n if (!this.layer) return;\n this.ready = true;\n this.layer.fire('workerready');\n });\n }\n\n onRemove() {\n if (this.painter) {\n this.painter.remove();\n }\n if (this.pickingFBO) {\n if (!this.canvas.pickingFBO) {\n this.pickingFBO.destroy();\n }\n delete this.pickingFBO;\n }\n if (this.workerConn) {\n this.workerConn.removeLayer(this.layer.getId(), err => {\n if (err) throw err;\n });\n this.workerConn.remove();\n delete this.workerConn;\n }\n TileCacheRefCount--;\n if (!TileCacheRefCount) {\n GlobalTieCache.reset();\n }\n this.clear();\n delete this.tileCache;\n delete this.gl;\n delete this.regl;\n super.onRemove();\n }\n\n clear() {\n this._abortUnusedTiles(true);\n this.tileCache.reset(this);\n this.tilesLoading = {};\n super.clear();\n }\n\n getTileOpacity(/* tileData */) {\n return 1;\n // if (!this.layer.options['fadeAnimation'] || !tileData.loadTime) {\n // return 1;\n // }\n // return Math.min(1, (maptalks.Util.now() - tileData.loadTime) / (1000 / 60 * 10));\n }\n\n getStencilValue() {\n return 0;\n }\n\n _abortUnusedTiles(force) {\n if (!this._preRetireTime) {\n this._preRetireTime = Date.now();\n }\n const now = Date.now();\n if (!force && now - this._preRetireTime < this.layer.options['retireInterval']) {\n return;\n }\n this._preRetireTime = now;\n const aborted = [];\n for (const i in this.tilesLoading) {\n const node = this.tilesLoading[i];\n if (force || !node.current) {\n aborted.push(i);\n // abort loading tiles\n this.abortTileLoading(node);\n // if (this.painter.has(node)) {\n // this.painter.deleteTile(node);\n // }\n }\n }\n\n for (let i = 0; i < aborted.length; i++) {\n delete this.tilesLoading[aborted[i]];\n }\n }\n\n // limit tile number to load when map is interacting\n _getLoadLimit() {\n if (this.getMap().isInteracting()) {\n return this.layer.options['loadingLimitOnInteracting'];\n }\n return this.layer.options['loadingLimit'];\n }\n\n _createGLContext(canvas, options) {\n const names = ['webgl', 'experimental-webgl'];\n let context = null;\n /* eslint-disable no-empty */\n for (let i = 0; i < names.length; ++i) {\n try {\n context = canvas.getContext(names[i], options);\n } catch (e) { }\n if (context) {\n break;\n }\n }\n return context;\n /* eslint-enable no-empty */\n }\n\n _isLoadingTile(tileId) {\n return !!this.tilesLoading[tileId];\n }\n\n getI3DMMeshes() {\n return this.painter.getI3DMMeshes();\n }\n\n getPNTSMeshes() {\n return this.painter.getPNTSMeshes();\n }\n\n getB3DMMeshes() {\n return this.painter.getB3DMMeshes();\n }\n\n readBatchData(batch, bin, count) {\n return readBatchArray(batch, bin, 0, count);\n }\n\n _consumeI3SQueue() {\n if (!this._i3sRequests) {\n return;\n }\n const limit = this.layer.options['i3sNodepageLimitPerFrame'] || Number.MAX_VALUE;\n let count = 0;\n const promises = [];\n for (const url in this._i3sRequests) {\n const callbacks = this._i3sRequests[url];\n if (callbacks.status === 'pending') {\n continue;\n }\n callbacks.status = 'pending';\n const rootIdx = callbacks.rootIdx;\n const service = this.layer._getNodeService(rootIdx);\n const fetchOptions = prepareFetchOptions(service.fetchOptions);\n promises.push(Ajax.getJSON(url, fetchOptions).then(json => {\n delete this._i3sRequests[url];\n const nodeCache = this._i3sNodeCache[rootIdx];\n if (!nodeCache) {\n this.setToRedraw();\n return;\n }\n if (json.nodes) {\n // 1.7, 1.8\n fillNodepagesToCache(nodeCache, json.nodes);\n } else {\n // 1.6\n nodeCache[json.id] = json;\n fillNodepagesToCache(nodeCache, json.children);\n }\n\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i]();\n }\n this.setToRedraw();\n }));\n count++;\n if (count >= limit) {\n break;\n }\n }\n if (promises.length) {\n Promise.all(promises);\n }\n }\n\n _fetchI3DNodepages(rootIdx, url, cb) {\n if (!this._i3sRequests) {\n this._i3sRequests = {};\n }\n this._i3sRequests[url] = this._i3sRequests[url] || [];\n this._i3sRequests[url].rootIdx = rootIdx;\n this._i3sRequests[url].push(cb);\n this.setToRedraw();\n }\n\n _parseI3SSceneLayer(tileset, parent, url) {\n if (!this._i3sNodeCache) {\n this._i3sNodeCache = [];\n }\n const rootIdx = parent._rootIdx;\n if (!this._i3sNodeCache[rootIdx]) {\n this._i3sNodeCache[rootIdx] = {};\n }\n const nodeCache = this._i3sNodeCache[rootIdx];\n const service = this.layer._getNodeService(rootIdx);\n if (tileset.layers) {\n tileset = tileset.layers[0];\n if (url[url.length - 1] !== '/') {\n url += '/';\n }\n url = url + 'layers/0'\n }\n nodeCache.version = +(service.i3sVersion || tileset.store.version);\n if (tileset.spatialReference && (!tileset.spatialReference.wkid || tileset.spatialReference.wkid !== 4326)) {\n console.warn('i3s has a spatialReference other than 4326.', tileset.spatialReference);\n }\n if (tileset.spatialReference && tileset.spatialReference.wkid === 4490) {\n console.warn('i3s spatialReference is 4490,auto set spatialReference to 4326,This may cause some location issues, please ensure that your service is 4326');\n tileset.spatialReference.wkid = 4326;\n }\n nodeCache.projection = tileset.spatialReference;\n parseI3SJSON(this.layer, tileset, rootIdx, service, url, nodeCache, this._fnFetchNodepages).then(json => {\n this.onTilesetLoad(json, parent, url);\n });\n }\n\n pick(x, y, options) {\n if (!this.painter) {\n return [];\n }\n const pickingFBO = this.pickingFBO;\n const { width, height } = this.canvas;\n if (this.pickingFBO && (pickingFBO.width !== width || pickingFBO.height !== height)) {\n pickingFBO.resize(width, height);\n }\n //TODO webgpu不支持sync read\n return this.painter.pick(x, y, options && options.tolerance);\n }\n\n highlight(highlights) {\n if (!this._highlighted) {\n this._highlighted = [];\n }\n if (Array.isArray(highlights)) {\n for (let i = 0; i < highlights.length; i++) {\n const service = highlights[i].service || 0;\n let serviceHighs = this._highlighted[service];\n if (!serviceHighs) {\n serviceHighs = this._highlighted[service] = new Map();\n }\n serviceHighs.set(highlights[i].id, highlights[i]);\n }\n } else {\n const service = highlights.service || 0;\n let serviceHighs = this._highlighted[service];\n if (!serviceHighs) {\n serviceHighs = this._highlighted[service] = new Map();\n }\n serviceHighs.set(highlights.id, highlights);\n }\n\n this.painter.highlight(this._highlighted);\n }\n\n cancelHighlight(service, ids) {\n if (!this._highlighted) {\n return;\n }\n const serviceHighs = this._highlighted[service];\n if (!serviceHighs) {\n return;\n }\n if (Array.isArray(ids)) {\n for (let i = 0; i < ids.length; i++) {\n serviceHighs.delete(ids[i]);\n }\n } else {\n serviceHighs.delete(ids);\n }\n if (!serviceHighs.size) {\n this._highlighted[service] = null;\n }\n this.painter.highlight(this._highlighted);\n }\n\n cancelAllHighlight() {\n delete this._highlighted;\n this.painter.cancelAllHighlight();\n }\n\n showOnly(items) {\n if (!this._showOnlys) {\n this._showOnlys = [];\n }\n if (Array.isArray(items)) {\n for (let i = 0; i < items.length; i++) {\n const service = items[i].service || 0;\n let serviceShowOnlys = this._showOnlys[service];\n if (!serviceShowOnlys) {\n serviceShowOnlys = this._showOnlys[service] = new Map();\n }\n serviceShowOnlys.set(items[i].id, items[i]);\n }\n } else {\n const service = items.service || 0;\n let serviceShowOnlys = this._showOnlys[service];\n if (!serviceShowOnlys) {\n serviceShowOnlys = this._showOnlys[service] = new Map();\n }\n serviceShowOnlys.set(items.id, items);\n }\n\n this.painter.showOnly(this._showOnlys);\n }\n\n cancelShowOnly() {\n delete this._showOnlys;\n this.painter.cancelShowOnly();\n }\n\n _getCurrentBatchIDs() {\n if (!this.painter) {\n return [];\n }\n return this.painter._getCurrentBatchIDs();\n }\n\n _tileCoordToLngLat(out, position) {\n const map = this.getMap();\n const code = map.getProjection().code.toLowerCase();\n if (code === 'identity') {\n const projection = this._getCoordProjection();\n COORD_IN.set(position[0], position[1]);\n projection.unproject(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n } else {\n COORD_IN.set(position[0], position[1]);\n map.getProjection().unproject(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n }\n }\n\n _lngLatToIdentityCoord(out, position) {\n const projection = this._getCoordProjection();\n COORD_IN.set(position[0], position[1]);\n projection.project(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n }\n\n _identityCoordToLngLat(out, coord) {\n const projection = this._getCoordProjection();\n COORD_IN.set(coord[0], coord[1]);\n projection.unproject(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n }\n\n _getCoordProjection() {\n const map = this.getMap();\n const coordType = map.options.spatialReference.coordType;\n if (!coordType) {\n throw new Error('Missing coordType in map spatialReference.');\n }\n if (!this._centerProjection) {\n this._centerProjection = maptalks.SpatialReference.getProjectionInstance(coordType);\n }\n return this._centerProjection;\n }\n}\n\n// function compareTile(a, b) {\n// return b.node._cameraDistance - a.node._cameraDistance;\n// }\n\nfunction compareRequests(a, b) {\n return a._cameraDistance - b._cameraDistance;\n}\n\n\nfunction encodeSuperMapURI(url, baseUrl) {\n const uriComponent = url.substring(baseUrl.length);\n const parts = uriComponent.split('/');\n const encoded = [];\n for (let i = 0; i < parts.length; i++) {\n encoded.push(encodeURIComponent(parts[i]));\n }\n return baseUrl + encoded.join('/');\n}\n","import * as maptalks from 'maptalks';\n/**\n * from mapbox-gl-js\n * A [least-recently-used cache](http://en.wikipedia.org/wiki/Cache_algorithms)\n * with hash lookup made possible by keeping a list of keys in parallel to\n * an array of dictionary of values\n *\n * @public\n */\nclass LRUCache {\n /**\n * @param {number} max number of permitted values\n * @param {Function} onRemove callback called with items when they expire\n */\n constructor(max, onRemove) {\n this.max = max;\n this.currentSize = 0;\n this.data = new Map();\n this.onRemove = onRemove;\n }\n\n /**\n * Clear the cache\n *\n * @returns {LRUCache} this cache\n */\n reset(renderer) {\n if (this.data) {\n const keys = this.data.keys();\n for (const id of keys) {\n const data = this.data.get(id);\n if (!renderer || renderer === data.renderer) {\n this._remove(id, data);\n }\n }\n }\n if (!renderer) {\n this.data = new Map();\n this.currentSize = 0;\n }\n return this;\n }\n\n clear(renderer) {\n this.reset(renderer);\n // delete this.onRemove;\n }\n\n /**\n * Add a key, value combination to the cache, trimming its size if this pushes\n * it over max length.\n *\n * @param {string} key lookup key for the item\n * @param {*} data any value\n *\n * @returns {LRUCache} this cache\n */\n add(key, data) {\n if (!data) {\n return this;\n }\n if (data.node && data.node.memorySize) {\n this.currentSize += data.node.memorySize;\n }\n if (this.has(key)) {\n const cached = this.data.get(key);\n if (cached && cached.node && cached.node.memorySize) {\n this.currentSize -= cached.node.memorySize;\n }\n this.data.delete(key);\n this.data.set(key, data);\n } else {\n this.data.set(key, data);\n }\n\n return this;\n }\n\n shrink() {\n if (this.currentSize > this.max) {\n const iterator = this.data.keys();\n let item = iterator.next();\n while (this.currentSize > this.max && item.value !== undefined) {\n if (this.data.get(item.value).current) {\n maptalks.Util.warnOnce(`current maxGPUMemory(${this.max / 1024 / 1024}) for Geo3DTilesLayer is not enough, one or more current tiles will be discarded.`);\n }\n const removedData = this.getAndRemove(item.value);\n if (removedData) {\n this.onRemove(removedData);\n }\n item = iterator.next();\n }\n }\n }\n\n /**\n * Determine whether the value attached to `key` is present\n *\n * @param {String} key the key to be looked-up\n * @returns {Boolean} whether the cache has this value\n */\n has(key) {\n return this.data.has(key);\n }\n\n /**\n * List all keys in the cache\n *\n * @returns {Array<string>} an array of keys in this cache.\n */\n keys() {\n const keys = new Array(this.data.size);\n let i = 0;\n const iterator = this.data.keys();\n for (const k of iterator) {\n keys[i++] = k;\n }\n return keys;\n }\n\n /**\n * Get the value attached to a specific key and remove data from cache.\n * If the key is not found, returns `null`\n *\n * @param {string} key the key to look up\n * @returns {*} the data, or null if it isn't found\n */\n getAndRemove(key) {\n if (!this.has(key)) { return null; }\n\n const data = this.data.get(key);\n if (data.node && data.node.memorySize) {\n this.currentSize -= data.node.memorySize;\n }\n this.data.delete(key);\n return data;\n }\n\n /**\n * Get the value attached to a specific key without removing data\n * from the cache. If the key is not found, returns `null`\n *\n * @param {string} key the key to look up\n * @returns {*} the data, or null if it isn't found\n */\n get(key) {\n if (!this.has(key)) { return null; }\n\n const data = this.data.get(key);\n this.data.delete(key);\n this.data.set(key, data);\n return data;\n }\n\n /**\n * Remove a key/value combination from the cache.\n *\n * @param {string} key the key for the pair to delete\n * @returns {LRUCache} this cache\n */\n remove(key) {\n if (!this.has(key)) { return this; }\n const data = this.data.get(key);\n this._remove(key, data);\n return this;\n }\n\n _remove(key, data) {\n if (data.node && data.node.memorySize) {\n this.currentSize -= data.node.memorySize;\n }\n this.data.delete(key);\n this.onRemove(data);\n }\n\n /**\n * Change the max size of the cache.\n *\n * @param {number} max the max size of the cache\n * @returns {LRUCache} this cache\n */\n setMaxSize(max) {\n this.max = max;\n\n this.shrink();\n\n return this;\n }\n\n getMemorySize() {\n let size = 0;\n const values = this.data.values();\n for (const p of values) {\n const node = p && p.node;\n if (node && node.memorySize) {\n size += node.memorySize;\n }\n }\n return size;\n }\n\n markAll(renderer, isCurrent) {\n const values = this.data.values();\n for (const data of values) {\n if (!renderer || data.renderer === renderer) {\n data.current = isCurrent;\n }\n }\n }\n}\n\nexport default LRUCache;\n","import { vec3 } from 'gl-matrix';\n\n// const getPlanesRight = [];\n// const getPlanesNearCenter = [];\n\n// function computeCullingVolume(position, direction, up) {\n\n\n// var planes = this._cullingVolume.planes;\n\n// var t = this.top;\n// var b = this.bottom;\n// var r = this.right;\n// var l = this.left;\n// var n = this.near;\n// var f = this.far;\n\n// var right = vec3.cross(getPlanesRight, direction, up);\n\n// var nearCenter = getPlanesNearCenter;\n// vec3.scale(n, nearCenter, direction);\n// Cartesian3.add(position, nearCenter, nearCenter);\n\n// var farCenter = getPlanesFarCenter;\n// Cartesian3.multiplyByScalar(direction, f, farCenter);\n// Cartesian3.add(position, farCenter, farCenter);\n\n// var normal = getPlanesNormal;\n\n// //Left plane computation\n// Cartesian3.multiplyByScalar(right, l, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.normalize(normal, normal);\n// Cartesian3.cross(normal, up, normal);\n// Cartesian3.normalize(normal, normal);\n\n// var plane = planes[0];\n// if (!defined(plane)) {\n// plane = planes[0] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Right plane computation\n// Cartesian3.multiplyByScalar(right, r, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.cross(up, normal, normal);\n// Cartesian3.normalize(normal, normal);\n\n// plane = planes[1];\n// if (!defined(plane)) {\n// plane = planes[1] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Bottom plane computation\n// Cartesian3.multiplyByScalar(up, b, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.cross(right, normal, normal);\n// Cartesian3.normalize(normal, normal);\n\n// plane = planes[2];\n// if (!defined(plane)) {\n// plane = planes[2] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Top plane computation\n// Cartesian3.multiplyByScalar(up, t, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.cross(normal, right, normal);\n// Cartesian3.normalize(normal, normal);\n\n// plane = planes[3];\n// if (!defined(plane)) {\n// plane = planes[3] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Near plane computation\n// plane = planes[4];\n// if (!defined(plane)) {\n// plane = planes[4] = new Cartesian4();\n// }\n// plane.x = direction.x;\n// plane.y = direction.y;\n// plane.z = direction.z;\n// plane.w = -Cartesian3.dot(direction, nearCenter);\n\n// //Far plane computation\n// Cartesian3.negate(direction, normal);\n\n// plane = planes[5];\n// if (!defined(plane)) {\n// plane = planes[5] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, farCenter);\n\n// return this._cullingVolume;\n// }\n\nfunction getMatrix3Column(out, mat, idx) {\n out[0] = mat[idx];\n out[1] = mat[idx + 3];\n out[2] = mat[idx + 6];\n return out;\n}\n\nexport function distanceToCamera(center, halfAxes, cameraPosition) {\n return Math.sqrt(distanceSquaredTo(center, halfAxes, cameraPosition));\n}\n\nconst scratchOffset = [];\nconst scratchCartesianU = [];\nconst scratchCartesianV = [];\nconst scratchCartesianW = [];\nconst scratchPPrime = [];\n\n//from Cesium's OrientedBoundingBox.distanceSquaredTo\nfunction distanceSquaredTo(center, halfAxes, cartesian) {\n // See Geometric Tools for Computer Graphics 10.4.2\n const offset = vec3.subtract(scratchOffset, cartesian, center);\n\n // var halfAxes = halfAxes;\n const u = getMatrix3Column(scratchCartesianU, halfAxes, 0);\n const v = getMatrix3Column(scratchCartesianV, halfAxes, 1);\n const w = getMatrix3Column(scratchCartesianW, halfAxes, 2);\n\n const uHalf = vec3.len(u);\n const vHalf = vec3.len(v);\n const wHalf = vec3.len(w);\n\n vec3.normalize(u, u);\n vec3.normalize(v, v);\n vec3.normalize(w, w);\n\n const pPrime = scratchPPrime;\n pPrime[0] = vec3.dot(offset, u);\n pPrime[1] = vec3.dot(offset, v);\n pPrime[2] = vec3.dot(offset, w);\n\n let distanceSquared = 0.0;\n let d;\n\n if (pPrime[0] < -uHalf) {\n d = pPrime[0] + uHalf;\n distanceSquared += d * d;\n } else if (pPrime[0] > uHalf) {\n d = pPrime[0] - uHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime[1] < -vHalf) {\n d = pPrime[1] + vHalf;\n distanceSquared += d * d;\n } else if (pPrime[1] > vHalf) {\n d = pPrime[1] - vHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime[2] < -wHalf) {\n d = pPrime[2] + wHalf;\n distanceSquared += d * d;\n } else if (pPrime[2] > wHalf) {\n d = pPrime[2] - wHalf;\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n}\n","import { equalsEpsilon } from '../../common/Math';\nconst EPSILON14 = 0.00000000000001;\nconst TWO_PI = 2.0 * Math.PI;\n\nexport default class Rectangle {\n constructor(west, south, east, north) {\n this.west = west;\n this.south = south;\n this.east = east;\n this.north = north;\n }\n\n static contains(rectangle, cartographic) {\n\n let longitude = cartographic[0];\n const latitude = cartographic[1];\n\n const west = rectangle.west;\n let east = rectangle.east;\n\n if (east < west) {\n east += TWO_PI;\n if (longitude < 0.0) {\n longitude += TWO_PI;\n }\n }\n return (\n (longitude > west ||\n equalsEpsilon(longitude, west, EPSILON14)) &&\n (longitude < east ||\n equalsEpsilon(longitude, east, EPSILON14)) &&\n latitude >= rectangle.south &&\n latitude <= rectangle.north\n );\n }\n\n\n static southwest(rectangle, result) {\n result[0] = rectangle.west;\n result[1] = rectangle.south;\n result[2] = 0;\n return result;\n }\n\n static northeast(rectangle, result) {\n result[0] = rectangle.east;\n result[1] = rectangle.north;\n result[2] = 0;\n return result;\n }\n\n static southeast(rectangle, result) {\n result[0] = rectangle.east;\n result[1] = rectangle.south;\n result[2] = 0;\n return result;\n }\n\n static northwest(rectangle, result) {\n result[0] = rectangle.west;\n result[1] = rectangle.north;\n result[2] = 0;\n return result;\n }\n}\n","import { vec3 } from '@maptalks/gl';\nimport { radianToCartesian3, geodeticSurfaceNormal, geodeticSurfaceNormalCartographic } from '../../common/Transform';\nimport { EPSILON15 } from '../../common/Math';\nimport Rectangle from './Rectangle';\n\n\nconst UNIT_X = [1, 0, 0];\nconst UNIT_Z = [0, 0, 1];\n\nfunction cartographicToCartesian(carto, out) {\n return radianToCartesian3(out, carto[0], carto[1], carto[2]);\n}\n\n\nclass Plane {\n constructor(normal, distance) {\n this.normal = vec3.copy([], normal);\n this.distance = distance;\n }\n\n static fromPointNormal(point, normal, result) {\n const distance = -vec3.dot(normal, point);\n\n vec3.copy(result.normal, normal);\n result.distance = distance;\n return result;\n }\n}\n\nconst cartographicScratch = [];\nconst cartographicScratch2 = [];\nconst westernMidpointScratch = [];\nconst eastWestNormalScratch = [];\nconst cartesian3Scratch = [];\nconst cartesian3Scratch2 = [];\nconst cartesian3Scratch3 = [];\nconst easternMidpointScratch = [];\n\nconst rayOrigin = [];\nconst rayDirection = [];\nconst planeScratch = new Plane(UNIT_X, 0.0);\n\nconst vectorScratch = [];\n\nexport default class TileBoundingRegion {\n\n constructor(region) {\n this.southwestCornerCartesian = [];\n this.northeastCornerCartesian = [];\n\n this.westNormal = [];\n this.eastNormal = [];\n this.southNormal = [];\n this.northNormal = [];\n\n //west, south, east, north\n this.rectangle = new Rectangle(...region);\n this.minimumHeight = region[4];\n this.maximumHeight = region[5];\n\n this.computeBox(this.rectangle);\n }\n\n distanceToCamera(cameraCartesianPosition, cameraCartographicPosition) {\n let result = 0.0;\n if (!Rectangle.contains(this.rectangle, cameraCartographicPosition)) {\n const southwestCornerCartesian = this.southwestCornerCartesian;\n const northeastCornerCartesian = this.northeastCornerCartesian;\n const westNormal = this.westNormal;\n const southNormal = this.southNormal;\n const eastNormal = this.eastNormal;\n const northNormal = this.northNormal;\n\n // if (frameState.mode !== SceneMode.SCENE3D) {\n // southwestCornerCartesian = frameState.mapProjection.project(\n // Rectangle.southwest(this.rectangle),\n // southwestCornerScratch\n // );\n // southwestCornerCartesian.z = southwestCornerCartesian.y;\n // southwestCornerCartesian.y = southwestCornerCartesian.x;\n // southwestCornerCartesian.x = 0.0;\n // northeastCornerCartesian = frameState.mapProjection.project(\n // Rectangle.northeast(this.rectangle),\n // northeastCornerScratch\n // );\n // northeastCornerCartesian.z = northeastCornerCartesian.y;\n // northeastCornerCartesian.y = northeastCornerCartesian.x;\n // northeastCornerCartesian.x = 0.0;\n // westNormal = negativeUnitY;\n // eastNormal = Cartesian3.UNIT_Y;\n // southNormal = negativeUnitZ;\n // northNormal = Cartesian3.UNIT_Z;\n // }\n\n const vectorFromSouthwestCorner = vec3.subtract(\n vectorScratch,\n cameraCartesianPosition,\n southwestCornerCartesian\n );\n const distanceToWestPlane = vec3.dot(\n vectorFromSouthwestCorner,\n westNormal\n );\n const distanceToSouthPlane = vec3.dot(\n vectorFromSouthwestCorner,\n southNormal\n );\n\n const vectorFromNortheastCorner = vec3.subtract(\n vectorScratch,\n cameraCartesianPosition,\n northeastCornerCartesian\n );\n const distanceToEastPlane = vec3.dot(\n vectorFromNortheastCorner,\n eastNormal\n );\n const distanceToNorthPlane = vec3.dot(\n vectorFromNortheastCorner,\n northNormal\n );\n\n if (distanceToWestPlane > 0.0) {\n result += distanceToWestPlane * distanceToWestPlane;\n } else if (distanceToEastPlane > 0.0) {\n result += distanceToEastPlane * distanceToEastPlane;\n }\n\n if (distanceToSouthPlane > 0.0) {\n result += distanceToSouthPlane * distanceToSouthPlane;\n } else if (distanceToNorthPlane > 0.0) {\n result += distanceToNorthPlane * distanceToNorthPlane;\n }\n }\n // if (frameState.mode === SceneMode.SCENE3D) {\n const cameraHeight = cameraCartographicPosition[2];\n const minimumHeight = this.minimumHeight;\n const maximumHeight = this.maximumHeight;\n // } else {\n // cameraHeight = cameraCartesianPosition.x;\n // minimumHeight = 0.0;\n // maximumHeight = 0.0;\n // }\n\n if (cameraHeight > maximumHeight) {\n const distanceAboveTop = cameraHeight - maximumHeight;\n result += distanceAboveTop * distanceAboveTop;\n } else if (cameraHeight < minimumHeight) {\n const distanceBelowBottom = minimumHeight - cameraHeight;\n result += distanceBelowBottom * distanceBelowBottom;\n }\n\n return Math.sqrt(result);\n }\n\n computeBox(rectangle) {\n const tileBB = this;\n cartographicToCartesian(\n Rectangle.southwest(rectangle, cartographicScratch2),\n tileBB.southwestCornerCartesian\n );\n cartographicToCartesian(\n Rectangle.northeast(rectangle, cartographicScratch2),\n tileBB.northeastCornerCartesian\n );\n\n // The middle latitude on the western edge.\n cartographicScratch[0] = rectangle.west;\n cartographicScratch[1] = (rectangle.south + rectangle.north) * 0.5;\n cartographicScratch[2] = 0.0;\n const westernMidpointCartesian = cartographicToCartesian(\n cartographicScratch,\n westernMidpointScratch\n );\n\n // Compute the normal of the plane on the western edge of the tile.\n const westNormal = vec3.cross(\n cartesian3Scratch,\n westernMidpointCartesian,\n UNIT_Z\n );\n vec3.normalize(tileBB.westNormal, westNormal);\n\n // The middle latitude on the eastern edge.\n cartographicScratch[0] = rectangle.east;\n const easternMidpointCartesian = cartographicToCartesian(\n cartographicScratch,\n easternMidpointScratch\n );\n\n // Compute the normal of the plane on the eastern edge of the tile.\n const eastNormal = vec3.cross(\n cartesian3Scratch,\n UNIT_Z,\n easternMidpointCartesian\n );\n vec3.normalize(tileBB.eastNormal, eastNormal);\n\n // Compute the normal of the plane bounding the southern edge of the tile.\n const westVector = vec3.subtract(\n cartesian3Scratch,\n westernMidpointCartesian,\n easternMidpointCartesian\n );\n const eastWestNormal = vec3.normalize(eastWestNormalScratch, westVector);\n\n const south = rectangle.south;\n let southSurfaceNormal;\n\n if (south > 0.0) {\n // Compute a plane that doesn't cut through the tile.\n cartographicScratch[0] = (rectangle.west + rectangle.east) * 0.5;\n cartographicScratch[1] = south;\n const southCenterCartesian = cartographicToCartesian(\n cartographicScratch,\n rayOrigin\n );\n vec3.copy(rayDirection, eastWestNormal);\n const westPlane = Plane.fromPointNormal(\n tileBB.southwestCornerCartesian,\n tileBB.westNormal,\n planeScratch\n );\n // Find a point that is on the west and the south planes\n rayPlane(\n rayOrigin,\n rayDirection,\n westPlane,\n tileBB.southwestCornerCartesian\n );\n southSurfaceNormal = geodeticSurfaceNormal(\n southCenterCartesian,\n cartesian3Scratch2\n );\n } else {\n southSurfaceNormal = geodeticSurfaceNormalCartographic(\n Rectangle.southeast(rectangle, cartographicScratch2),\n cartesian3Scratch2\n );\n }\n const southNormal = vec3.cross(\n cartesian3Scratch3,\n southSurfaceNormal,\n westVector\n );\n vec3.normalize(tileBB.southNormal, southNormal);\n\n // Compute the normal of the plane bounding the northern edge of the tile.\n const north = rectangle.north;\n let northSurfaceNormal;\n if (north < 0.0) {\n // Compute a plane that doesn't cut through the tile.\n cartographicScratch[0] = (rectangle.west + rectangle.east) * 0.5;\n cartographicScratch[1] = north;\n const northCenterCartesian = cartographicToCartesian(\n cartographicScratch,\n rayOrigin\n );\n // Cartesian3.negate(eastWestNormal, rayDirection);\n vec3.scale(rayDirection, eastWestNormal, -1);\n const eastPlane = Plane.fromPointNormal(\n tileBB.northeastCornerCartesian,\n tileBB.eastNormal,\n planeScratch\n );\n // Find a point that is on the east and the north planes\n rayPlane(\n rayOrigin,\n rayDirection,\n eastPlane,\n tileBB.northeastCornerCartesian\n );\n northSurfaceNormal = geodeticSurfaceNormal(\n northCenterCartesian,\n cartesian3Scratch2\n );\n } else {\n northSurfaceNormal = geodeticSurfaceNormalCartographic(\n Rectangle.northwest(rectangle, cartographicScratch2),\n cartesian3Scratch2\n );\n }\n const northNormal = vec3.cross(\n cartesian3Scratch3,\n westVector,\n northSurfaceNormal\n );\n vec3.normalize(tileBB.northNormal, northNormal);\n }\n}\n\nfunction rayPlane(rayOrigin, rayDirection, plane, result) {\n const origin = rayOrigin;\n const direction = rayDirection;\n const normal = plane.normal;\n const denominator = vec3.dot(normal, direction);\n\n if (Math.abs(denominator) < EPSILON15) {\n // Ray is parallel to plane. The ray may be in the polygon's plane.\n return undefined;\n }\n\n const t = (-plane.distance - vec3.dot(normal, origin)) / denominator;\n\n if (t < 0) {\n return undefined;\n }\n\n result = vec3.scale(result, direction, t);\n return vec3.add(result, origin, result);\n}\n",null,"import transcoders from '@maptalks/gl/dist/transcoders.js';\nlet currentTranscoders = null\nexport default function () {\n if (!currentTranscoders) {\n currentTranscoders = {\n 'image/crn': transcoders.crn && transcoders.crn(),\n 'image/ktx2': transcoders.ktx2 && transcoders.ktx2(),\n 'image/cttf': transcoders.ktx2 && transcoders.ktx2(),\n 'draco': transcoders.draco && transcoders.draco()\n };\n }\n return currentTranscoders;\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readFeatureTableJSON, readBatchTableJSON, readBatchTableBin, readBatchId } from '../common/TileHelper.js';\n// 不能这样引用: import { transcoders } from '@maptalks/gl',因为会把gl及相关依赖库(如maptalks)都引用进来\nimport getTranscoders from './transcoders.js';\n\nconst { Ajax, GLTFLoader } = getGLTFLoaderBundle();\n\n// s3m : https://github.com/SuperMap/s3m-spec\n// b3dm: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/TileFormats/Batched3DModel/README.md\n// b3dm legacy 24: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/a45866de985f5b37aa98fc75340878d7a78e4056/TileFormats/Batched3DModel/README.md\n// b3dm legacy 20: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/3c70a9c3d58f612218f1f51b12d2a0d92b3c9e32/TileFormats/Batched3DModel/README.md\n\nexport default class B3DMLoader {\n constructor(requestImage, loaderCtor, supportedFormats) {\n this._requestImage = requestImage;\n this._loaderCtor = loaderCtor || GLTFLoader;\n this._supportedFormats = supportedFormats;\n this._decoders = getTranscoders();\n }\n\n static createEmptyB3DM() {\n return {\n featureTable : null,\n batchTable : null,\n gltf : {}\n };\n }\n\n /**\n * 载入b3dm模型,返回一个promise,promise中的参数是 gltf 模型对象\n * @param {String} url - url of b3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional b3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0, options) {\n if (arraybuffer) {\n if (!byteLength) {\n byteLength = arraybuffer.byteLength;\n }\n return this._parse(url, arraybuffer, offset, byteLength, options);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const b3dm = response.data;\n if (!byteLength) {\n byteLength = b3dm.byteLength;\n }\n return this._parse(url, b3dm, offset, byteLength);\n });\n }\n\n _parse(url, b3dm, offset, b3dmByteLength, options) {\n const maxTextureSize = options && options.maxTextureSize;\n const components = this._readB3DM(b3dm, offset, b3dmByteLength, url);\n if (components.error) {\n return Promise.resolve(components);\n }\n const rootPath = url.substring(0, url.lastIndexOf('/'));\n let loader;\n try {\n loader = new this._loaderCtor(rootPath, components.glb, {\n transferable: true,\n requestImage: this._requestImage,\n decoders: this._decoders,\n supportedFormats: this._supportedFormats,\n maxTextureSize\n });\n } catch (e) {\n return Promise.resolve({ error: e });\n }\n\n return loader.load({ skipAttributeTransform: false }).then(gltf => {\n // 相同url的geometry会缓存在MeshPainter中,不会重复创建\n // url里必须加上offset和b3dmByteLength,是因为一个url中可能包含多个不同的gltf模型\n gltf.url = `${url}-${offset}-${b3dmByteLength}`;\n const transferables = loader.transferables;\n for (let i = 0; i < components.transferables.length; i++) {\n if (transferables.indexOf(components.transferables[i]) < 0) {\n transferables.push(components.transferables[i]);\n }\n }\n return {\n magic: 'b3dm',\n count: components.count,\n transferables, //for worker\n featureTable: components.featureTable,\n batchTable: components.batchTable,\n batchTableBin: components.batchTableBin,\n gltf\n };\n });\n }\n\n /**\n * 解析b3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} b3dm\n */\n _readB3DM(b3dm, offset, byteLength, url) {\n const view = new DataView(b3dm, offset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported b3dm version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n const length = view.getUint32(8, true);\n if (length !== view.byteLength) {\n const info = 'Length in b3dm header is inconsistent with b3dm\\'s byte length, url: ' + url;\n console.warn(info);\n return { error: info };\n }\n // let headerLength = 28;\n // const versions = [20, 24, 28];\n\n // for (let i = 0; i < versions.length; i++) {\n // const magic = view.getUint32(versions[i], true);\n // // 1179937895 is uint32 version of 'gltf'\n // if (magic === 1179937895) {\n // headerLength = versions[i];\n // break;\n // }\n // }\n\n let featureTableJsonByteLength = view.getUint32(12, true);\n let featureTableBinaryByteLength = view.getUint32(16, true);\n let batchTableJsonByteLength = view.getUint32(20, true);\n let batchTableBinaryByteLength = view.getUint32(24, true);\n\n let byteOffset = 28 + offset;\n let batchLength;\n // from Cesium.js, Batched3DModel3DTileContent.js\n if (batchTableJsonByteLength >= 570425344) {\n // 'This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.'\n byteOffset -= 4 * 2;\n batchLength = featureTableJsonByteLength;\n batchTableJsonByteLength = featureTableBinaryByteLength;\n batchTableBinaryByteLength = 0;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n } else if (batchTableBinaryByteLength >= 570425344) {\n // This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.\n byteOffset -= 4;\n batchLength = batchTableJsonByteLength;\n batchTableJsonByteLength = featureTableJsonByteLength;\n batchTableBinaryByteLength = featureTableBinaryByteLength;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n }\n\n const transferables = [b3dm];\n let featureTable;\n let featureTableBin;\n\n if (featureTableJsonByteLength > 0) {\n featureTable = readFeatureTableJSON(b3dm, byteOffset, featureTableJsonByteLength);\n byteOffset += featureTableJsonByteLength;\n batchLength = featureTable['BATCH_LENGTH'];\n } else {\n featureTable = {\n 'BATCH_LENGTH': batchLength\n };\n }\n\n if (featureTableBinaryByteLength > 0) {\n // featureTableBin = readFeatureTableBin(b3dm, byteOffset, featureTableBinaryByteLength);\n byteOffset += featureTableBinaryByteLength;\n }\n\n let batchTable, batchTableBin;\n if (batchTableJsonByteLength > 0) {\n batchTable = readBatchTableJSON(b3dm, byteOffset, batchTableJsonByteLength);\n byteOffset += batchTableJsonByteLength;\n if (batchTableBinaryByteLength > 0) {\n const batchTableBinInfo = readBatchTableBin(b3dm, byteOffset, batchTableBinaryByteLength);\n batchTableBin = b3dm.slice(batchTableBinInfo.offset, batchTableBinInfo.offset + batchTableBinInfo.byteLength);\n byteOffset += batchTableBinaryByteLength;\n transferables.push(batchTableBin);\n }\n }\n\n\n\n const count = featureTable['BATCH_LENGTH'];\n const b3dmData = {};\n if (featureTable && featureTable['BATCH_ID']) {\n b3dmData['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], b3dm, featureTableBin.offset, count);\n const buffer = b3dmData['BATCH_ID'].array && b3dmData['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n\n const glb = {\n buffer: b3dm,\n byteOffset: byteOffset,\n byteLength: view.byteLength + view.byteOffset - byteOffset\n };\n return {\n count: batchLength,\n transferables,\n featureTable,\n batchTable,\n batchTableBin,\n b3dm: b3dmData,\n glb\n };\n }\n\n //TODO\n _readBatchTable() {\n return null;\n }\n}\n\n","import { vec3 } from 'gl-matrix';\nimport { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readFeatureTableBatchTable, readBatchId, convertQuantizedPosition } from '../common/TileHelper.js';\nimport { stringFromUTF8Array } from '../common/Util.js';\nimport getTranscoders from './transcoders.js';\n\nconst { Ajax, GLTFLoader } = getGLTFLoaderBundle();\n\n// https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Instanced3DModel\nexport default class I3DMLoader {\n constructor(requestImage, loaderCtor, supportedFormats, maxTextureSize) {\n this._requestImage = requestImage;\n this._loaderCtor = loaderCtor || GLTFLoader;\n this._supportedFormats = supportedFormats;\n this._decoders = getTranscoders();\n this._maxTextureSize = maxTextureSize;\n }\n\n /**\n * 载入pnts模型,返回一个promise,promise中的参数是数据\n * @param {String} url - url of i3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional i3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0, options) {\n if (arraybuffer) {\n if (!byteLength) {\n byteLength = arraybuffer.byteLength;\n }\n return this._parse(url, arraybuffer, offset, byteLength, options);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const i3dm = response.data;\n if (!byteLength) {\n byteLength = i3dm.byteLength;\n }\n return this._parse(url, i3dm, offset, byteLength);\n });\n }\n\n _parse(url, buf, offset, byteLength, options) {\n return this._parseGLTF(url, buf, offset, byteLength, options).then(({ gltf, transferables }) => {\n const components = this._readI3DM(buf, offset, byteLength, url);\n if (components.error) {\n return Promise.resolve(components);\n }\n for (let i = 0; i < transferables.length; i++) {\n if (components.transferables.indexOf(transferables[i]) === -1) {\n components.transferables.push(transferables[i]);\n }\n }\n delete gltf.transferables;\n return Promise.resolve({\n magic: 'i3dm',\n count: components.count,\n transferables: components.transferables, //for worker\n featureTable: components.featureTable,\n batchTable: components.batchTable,\n batchTableBin: components.batchTableBin,\n i3dm: components.i3dm,\n gltf\n });\n });\n\n }\n\n _parseGLTF(i3dmURL, buf, offset, byteLength, opts) {\n const maxTextureSize = opts && opts.maxTextureSize;\n const options = {\n transferable: true,\n requestImage: this._requestImage,\n decoders: this._decoders,\n supportedFormats: this._supportedFormats,\n maxTextureSize\n };\n const view = new DataView(buf, offset, byteLength);\n const featureTableJSONLength = view.getUint32(12, true);\n const featureTableBinLength = view.getUint32(16, true);\n const batchTableJSONLength = view.getUint32(20, true);\n const batchTableBinLength = view.getUint32(24, true);\n const gltfFormat = view.getUint32(28, true);\n\n // i3dm header length\n const headerLength = 32;\n const gltfBinStart = headerLength + featureTableJSONLength + featureTableBinLength + batchTableJSONLength + batchTableBinLength;\n if (gltfFormat === 0) {\n //url\n const urlBuf = new Uint8Array(buf, gltfBinStart + offset, view.byteLength - gltfBinStart);\n let url = stringFromUTF8Array(urlBuf);\n if (url.indexOf('://') == -1) {\n // relative path\n url = i3dmURL.substring(0, i3dmURL.lastIndexOf('/')) + '/' + url;\n }\n const isGLB = url.indexOf('.glb') > 0;\n if (isGLB) {\n return Ajax.getArrayBuffer(url, {}).then(bin => {\n return this._createGLTFLoader(url, { buffer: bin.data, byteOffset: 0 }, options);\n });\n } else {\n return Ajax.getJSON(url, {}).then(json => {\n return this._createGLTFLoader(url, json, options);\n });\n }\n } else {\n const glb = {\n buffer: buf,\n byteOffset: gltfBinStart + offset,\n byteLength: view.byteLength - gltfBinStart\n };\n return this._createGLTFLoader(i3dmURL, glb, options);\n }\n }\n\n _createGLTFLoader(url, data, options) {\n const rootPath = url.substring(0, url.lastIndexOf('/'));\n const loader = new this._loaderCtor(rootPath, data, options);\n // turn on skipAttributeTransform in default\n return loader.load({ skipAttributeTransform: true }).then(gltf => {\n let offset = 0, byteLength = 0;\n if (data.buffer) {\n offset = data.byteOffset || 0;\n byteLength = data.byteLength || 0;\n }\n gltf.url = `${url}-${offset}-${byteLength}`;\n return {\n transferables : loader.transferables, //for worker\n gltf\n };\n });\n }\n\n /**\n * 解析i3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} pnts\n */\n _readI3DM(i3dmBuf, offset, byteLength, url) {\n const view = new DataView(i3dmBuf, offset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported pnts version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n const length = view.getUint32(8, true);\n if (length !== view.byteLength) {\n const info = 'Length in pnts header is inconsistent with pnts\\'s byte length, url: ' + url;\n console.warn(info);\n return { error: info };\n }\n const transferables = [i3dmBuf];\n\n const { featureTable, featureTableBin, batchTable, batchTableBin } = readFeatureTableBatchTable(view, 32 + offset, transferables);\n\n const i3dm = {};\n\n const instanceLength = featureTable['INSTANCES_LENGTH'];\n // position\n if (featureTable['POSITION']) {\n const { byteOffset } = featureTable['POSITION'];\n i3dm['POSITION'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['POSITION'].array.buffer);\n } else if (featureTable['POSITION_QUANTIZED']) {\n const quanVolOffset = featureTable['QUANTIZED_VOLUME_OFFSET'];\n const quanVolScale = featureTable['QUANTIZED_VOLUME_SCALE'];\n\n const { byteOffset } = featureTable['POSITION_QUANTIZED'];\n i3dm['POSITION'] = {\n byteStride: 3 * 4,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: this._convertQuantizedPosition(new Uint16Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3), quanVolOffset, quanVolScale)\n };\n transferables.push(i3dm['POSITION'].array.buffer);\n }\n\n if (featureTable['BATCH_ID']) {\n i3dm['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], i3dmBuf, featureTableBin.offset, instanceLength);\n const buffer = i3dm['BATCH_ID'].array && i3dm['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n\n // normal\n if (featureTable['NORMAL_UP']) {\n let { byteOffset } = featureTable['NORMAL_UP'];\n i3dm['NORMAL_UP'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['NORMAL_UP'].array.buffer);\n\n byteOffset = featureTable['NORMAL_RIGHT'].byteOffset;\n i3dm['NORMAL_RIGHT'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['NORMAL_RIGHT'].array.buffer);\n } else if (featureTable['NORMAL_UP_OCT32P']) {\n let { byteOffset } = featureTable['NORMAL_UP_OCT32P'];\n i3dm['NORMAL_UP'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: this._decodeOCT32p(new Uint16Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 2))\n };\n transferables.push(i3dm['NORMAL_UP'].array.buffer);\n\n byteOffset = featureTable['NORMAL_RIGHT_OCT32P'].byteOffset;\n i3dm['NORMAL_RIGHT'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: this._decodeOCT32p(new Uint16Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 2))\n };\n transferables.push(i3dm['NORMAL_RIGHT'].array.buffer);\n }\n\n if (featureTable['SCALE']) {\n const { byteOffset } = featureTable['SCALE'];\n i3dm['SCALE'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength).slice()\n };\n transferables.push(i3dm['SCALE'].array.buffer);\n } else if (featureTable['SCALE_NON_UNIFORM']) {\n const { byteOffset } = featureTable['SCALE_NON_UNIFORM'];\n i3dm['SCALE_NON_UNIFORM'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['SCALE_NON_UNIFORM'].array.buffer);\n }\n return {\n count: instanceLength,\n batchTable,\n batchTableBin,\n featureTable,\n i3dm,\n transferables: transferables\n };\n }\n\n _decodeOCT32p(arr) {\n const count = arr.length / 2;\n const result = new Float32Array(count * 3);\n const v = [];\n for (let i = 0; i < count; i++) {\n octDecodeInRange(v, arr[i * 2], arr[i * 2 + 1], 65535);\n result[i * 3] = v[0];\n result[i * 3 + 1] = v[1];\n result[i * 3 + 2] = v[2];\n }\n return result;\n }\n\n _convertQuantizedPosition(arr, offset, scale) {\n const position = new Float32Array(arr.length);\n return convertQuantizedPosition(position, arr, offset, scale);\n }\n\n //TODO\n _readBatchTable() {\n return null;\n }\n}\n\nfunction octDecodeInRange(out, x, y, rangeMax) {\n out[0] = fromSNorm(x, rangeMax);\n out[1] = fromSNorm(y, rangeMax);\n out[2] = 1.0 - (Math.abs(out[0]) + Math.abs(out[1]));\n\n if (out[2] < 0.0) {\n const oldVX = out[0];\n out[0] = (1.0 - Math.abs(out[1])) * signNotZero(oldVX);\n out[1] = (1.0 - Math.abs(oldVX)) * signNotZero(out[1]);\n }\n\n return vec3.normalize(out, out);\n}\n\nfunction fromSNorm(value, rangeMaximum) {\n rangeMaximum = defaultValue(rangeMaximum, 255);\n return (\n (clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0\n );\n}\n\nfunction signNotZero(value) {\n return value < 0.0 ? -1.0 : 1.0;\n}\n\nfunction defaultValue(a, b) {\n if (a !== undefined && a !== null) {\n return a;\n }\n return b;\n}\n\nfunction clamp(value, min, max) {\n return value < min ? min : value > max ? max : value;\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readFeatureTableBatchTable, readBatchId, convertQuantizedPosition, getComponentFromCtor } from '../common/TileHelper.js';\nimport getTranscoders from './transcoders.js';\nimport { getBatchIdArrayType } from '../common/Util.js';\n\nconst { Ajax } = getGLTFLoaderBundle();\n\n// s3m : https://github.com/SuperMap/s3m-spec\n// b3dm: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/TileFormats/Batched3DModel/README.md\n// b3dm legacy 24: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/a45866de985f5b37aa98fc75340878d7a78e4056/TileFormats/Batched3DModel/README.md\n// b3dm legacy 20: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/3c70a9c3d58f612218f1f51b12d2a0d92b3c9e32/TileFormats/Batched3DModel/README.md\n\nexport default class PNTSLoader {\n constructor() {\n }\n\n\n /**\n * 载入pnts模型,返回一个promise,promise中的参数是数据\n * @param {String} url - url of b3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional b3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0) {\n if (arraybuffer) {\n if (!byteLength) {\n byteLength = arraybuffer.byteLength;\n }\n return this._parse(url, arraybuffer, offset, byteLength);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const b3dm = response.data;\n if (!byteLength) {\n byteLength = b3dm.byteLength;\n }\n return this._parse(url, b3dm, offset, byteLength);\n });\n }\n\n _parse(url, pntsBuf, offset, byteLength) {\n return this._readPNTS(pntsBuf, offset, byteLength, url).then(components => {\n if (components.error) {\n return components;\n }\n return {\n magic: 'pnts',\n count: components.count,\n transferables: components.transferables, //for worker\n featureTable: components.featureTable,\n batchTable: components.batchTable,\n batchTableBin: components.batchTableBin,\n pnts: components.pnts\n };\n });\n }\n\n /**\n * 解析b3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} pnts\n */\n _readPNTS(pntsBuf, offset, byteLength, url) {\n const view = new DataView(pntsBuf, offset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported pnts version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n const length = view.getUint32(8, true);\n if (length !== view.byteLength) {\n const info = 'Length in pnts header is inconsistent with pnts\\'s byte length, url: ' + url;\n console.warn(info);\n return { error: info };\n }\n\n const transferables = [pntsBuf];\n const { featureTable, featureTableBin, batchTable, batchTableBin } = readFeatureTableBatchTable(view, offset + 28, transferables);\n const quanVolOffset = featureTable['QUANTIZED_VOLUME_OFFSET'];\n const quanVolScale = featureTable['QUANTIZED_VOLUME_SCALE']\n\n const pointsLength = featureTable['POINTS_LENGTH'];\n\n let compression = {};\n let dracoBuf;\n if (featureTable['extensions'] && featureTable['extensions']['3DTILES_draco_point_compression']) {\n compression = featureTable['extensions']['3DTILES_draco_point_compression'];\n // dracoBuf = pntsBuf.slice(compression.byteOffset + featureTableBin.offset, compression.byteOffset + featureTableBin.offset + compression.byteLength);\n dracoBuf = new DataView(pntsBuf, compression.byteOffset + featureTableBin.offset, compression.byteLength);\n const dracoOptions = {\n attributes: compression.properties,\n useUniqueIDs: false\n };\n if (!this._draco) {\n this._draco = getTranscoders().draco;\n }\n return this._draco(dracoBuf, dracoOptions).then(data => {\n const attribData = data.attributes;\n if ((featureTable['POSITION'] || featureTable['POSITION_QUANTIZED']) && (!attribData['POSITION'] && !attribData['POSITION_QUANTIZED'])) {\n attribData['POSITION'] = featureTable['POSITION'];\n attribData['POSITION_QUANTIZED'] = featureTable['POSITION_QUANTIZED'];\n }\n if ((featureTable['RGB'] || featureTable['RGBA'] || featureTable['RGB565']) && (!attribData['RGB'] && !attribData['RGBA'] && !attribData['RGB565'])) {\n attribData['RGB'] = featureTable['RGB'];\n attribData['RGBA'] = featureTable['RGBA'];\n attribData['RGB565'] = featureTable['RGB565'];\n }\n if ((featureTable['NORMAL'] || featureTable['NORMAL_OCT16P']) && (!attribData['NORMAL'] && !attribData['NORMAL_OCT16P'])) {\n attribData['NORMAL'] = featureTable['NORMAL'];\n attribData['NORMAL_OCT16P'] = featureTable['NORMAL_OCT16P'];\n }\n\n const pnts = this._readAttributes(pntsBuf, data.attributes, featureTableBin.offset, pointsLength, transferables, quanVolOffset, quanVolScale);\n if (data.attributes['BATCH_ID']) {\n const array = data.attributes['BATCH_ID'].array;\n pnts['BATCH_ID'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: array.length,\n componentType: getComponentFromCtor(array.constructor),\n array: array\n }\n transferables.push(array.buffer);\n } else if (featureTable['BATCH_ID'] || Object.keys(batchTable).length) {\n if (featureTable['BATCH_ID']) {\n pnts['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], pntsBuf, featureTableBin.offset, pointsLength);\n } else {\n pnts['BATCH_ID'] = createPerPointBatchId(pointsLength);\n }\n const buffer = pnts['BATCH_ID'].array && pnts['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n return {\n count: pointsLength,\n batchTable,\n batchTableBin,\n featureTable,\n pnts,\n transferables\n }\n });\n }\n const pnts = this._readAttributes(pntsBuf, featureTable, featureTableBin.offset, pointsLength, transferables, quanVolOffset, quanVolScale);\n if (featureTable['BATCH_ID'] || Object.keys(batchTable).length) {\n if (featureTable['BATCH_ID']) {\n pnts['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], pntsBuf, featureTableBin.offset, pointsLength);\n } else {\n pnts['BATCH_ID'] = createPerPointBatchId(pointsLength);\n }\n const buffer = pnts['BATCH_ID'].array && pnts['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n\n // position\n\n return Promise.resolve({\n count: pointsLength,\n batchTable,\n batchTableBin,\n featureTable,\n pnts,\n transferables\n });\n }\n\n _readAttributes(pntsBuf, attribData, attrByteOffset, pointsLength, transferables, quanVolOffset, quanVolScale) {\n const pnts = {};\n if (attribData['POSITION']) {\n let { byteOffset, array } = attribData['POSITION'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 3 * 4);\n array = new Float32Array(buf);\n }\n pnts['POSITION'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 5126,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['POSITION_QUANTIZED']) {\n let { byteOffset } = attribData['POSITION_QUANTIZED'];\n const { array } = attribData['POSITION_QUANTIZED'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n pnts['POSITION'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 5126,\n array: this._convertQuantizedPosition(array || new Uint16Array(pntsBuf, byteOffset + offset, pointsLength * 3), quanVolOffset, quanVolScale)\n };\n transferables.push(pnts['POSITION'].array.buffer);\n }\n // color\n if (attribData['RGBA']) {\n let { byteOffset, array } = attribData['RGBA'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 4);\n array = new Uint8Array(buf);\n }\n pnts['RGBA'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 4,\n count: pointsLength,\n componentType: 0x1401,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['RGB']) {\n let { byteOffset, array } = attribData['RGB'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 3);\n array = new Uint8Array(buf);\n }\n pnts['RGB'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 0x1401,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['RGB565']) {\n let { byteOffset, array } = attribData['RGB565'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 2);\n array = new Uint16Array(buf);\n }\n pnts['RGB565'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: pointsLength,\n componentType: 0x1403,\n array: array\n };\n transferables.push(array.buffer);\n }\n // normal\n if (attribData['NORMAL']) {\n let { byteOffset, array } = attribData['NORMAL'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 3 * 4);\n array = new Float32Array(buf);\n }\n pnts['NORMAL'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 5126,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['NORMAL_OCT16P']) {\n let { byteOffset, array } = attribData['NORMAL_OCT16P'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 2);\n array = new Uint8Array(buf);\n }\n pnts['NORMAL_OCT16P'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 2,\n count: pointsLength,\n componentType: 0x1401,\n array: array\n };\n transferables.push(array.buffer);\n }\n return pnts;\n }\n\n _convertQuantizedPosition(arr, offset, scale) {\n const position = new Float32Array(arr.length);\n return convertQuantizedPosition(position, arr, offset, scale);\n }\n\n //TODO\n _readBatchTable() {\n return null;\n }\n}\n\n// const DEFAULT_TYPES = {\n// 'POSITION': 'Float32Array',\n// 'POSITION_QUANTIZED': 'Uint16Array',\n// 'RGBA': 'Uint8Array',\n// 'RGB': 'Uint8Array',\n// 'RGB565': 'Uint16Array',\n// 'NORMAL': 'Float32Array',\n// 'NORMAL_OCT16P': 'Uint8Array'\n// };\n\n// function getAttributeTypes(compressedProperties, featureTable) {\n// const types = {};\n// for (const p in compressedProperties) {\n// const prop = featureTable[p];\n// let typeName;\n// if (prop.componentType) {\n// typeName = getComponentCtor(prop.componentType).name\n// } else {\n// typeName = DEFAULT_TYPES[p];\n// }\n// if (typeName) {\n// types[compressedProperties[p]] = typeName\n// } else {\n// console.warn('undefined type of attribute:' + p);\n// }\n// }\n// return types;\n// }\n\nfunction createPerPointBatchId(pointsLength) {\n const ctor = getBatchIdArrayType(pointsLength);\n const array = new ctor(pointsLength);\n for (let i = 0; i < pointsLength; i++) {\n array[i] = i;\n }\n return {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: pointsLength,\n componentType: getComponentFromCtor(ctor),\n array\n };\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readMagic } from '../common/TileHelper';\nimport B3DMLoader from '../loaders/B3DMLoader';\nimport I3DMLoader from '../loaders/I3DMLoader';\nimport PNTSLoader from '../loaders/PNTSLoader';\n\nconst { Ajax, GLTFLoader } = getGLTFLoaderBundle();\n\n// https://github.com/CesiumGS/3d-tiles/blob/main/specification/TileFormats/Composite/README.md\n\nexport default class CMPTLoader {\n constructor(requestImage, GLTFloaderCtor, supportedFormats, maxTextureSize) {\n this._supportedFormats = supportedFormats;\n this._requestImage = requestImage;\n this._loaderCtor = GLTFloaderCtor || GLTFLoader;\n this._maxTextureSize = maxTextureSize;\n }\n\n\n /**\n * 载入b3dm模型,返回一个promise,promise中的参数是 gltf 模型对象\n * @param {String} url - url of b3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional b3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0, options) {\n if (arraybuffer) {\n return this._parse(url, arraybuffer, offset, byteLength, options);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const cmpt = response.data;\n return this._parse(url, cmpt, offset, byteLength);\n });\n }\n\n _parse(url, cmpt, offset, byteLength, options) {\n if (!byteLength) {\n byteLength = cmpt.byteLength;\n }\n const tiles = this._readCMPT(cmpt, url, offset, byteLength);\n const promises = [];\n for (let i = 0; i < tiles.length; i++) {\n let loader;\n if (tiles[i].magic === 'b3dm') {\n loader = new B3DMLoader(this._requestImage, this._loaderCtor, this._supportedFormats);\n } else if (tiles[i].magic === 'i3dm') {\n loader = new I3DMLoader(this._requestImage, this._loaderCtor, this._supportedFormats, this._maxTextureSize);\n } else if (tiles[i].magic === 'pnts') {\n loader = new PNTSLoader();\n } else if (tiles[i].magic === 'cmpt') {\n loader = new CMPTLoader(this._requestImage, this._loaderCtor, this._supportedFormats, this._maxTextureSize);\n } else {\n // unsupported magic\n console.warn('Unsupported magic in CMPT tile:', tiles[i].magic);\n continue;\n }\n promises.push(loader.load(url, cmpt, tiles[i].offset, tiles[i].byteLength, options).then(data => {\n return data;\n }));\n }\n return Promise.all(promises).then(tiles => {\n return {\n magic: 'cmpt',\n tiles\n };\n });\n }\n\n /**\n * 解析b3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} b3dm\n */\n _readCMPT(cmpt, url, byteOffset, byteLength) {\n const view = new DataView(cmpt, byteOffset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported cmpt version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n // const length = view.getUint32(8, true);\n // if (length !== view.byteLength) {\n // const info = 'Length in cmpt header is inconsistent with cmpt\\'s byte length, url: ' + url;\n // console.warn(info);\n // return { error: info };\n // }\n if (view.byteLength === 16) {\n // an empty cmpt tile\n return [];\n }\n const tiles = [];\n const tilesLength = view.getUint32(12, true);\n // 16是CMPT的header长度\n const headerLength = 16;\n let offset = headerLength;\n for (let i = 0; i < tilesLength; i++) {\n const magic = readMagic(view, offset);\n const tileByteLength = view.getUint32(offset + 8, true);\n tiles.push({\n magic,\n buffer: cmpt,\n offset: offset + byteOffset,\n byteLength: tileByteLength\n });\n offset += tileByteLength;\n }\n return tiles;\n }\n}\n","import * as maptalks from 'maptalks';\nimport * as maptalksgl from '@maptalks/gl';\n\nimport chunk from './worker.js';\n\nif (maptalksgl.transcoders) {\n const version = maptalks.Map.VERSION;\n if (version.indexOf(\"1.0.0-beta\") >= 0 || version.indexOf(\"1.0.0-alpha\") >= 0) {\n const transcoderInjected = maptalksgl.transcoders.inject(chunk);\n maptalks.registerWorkerAdapter('@maptalks/3dtiles', transcoderInjected);\n } else {\n maptalks.registerWorkerAdapter('@maptalks/3dtiles', function () {\n const transcoderInjected = maptalksgl.transcoders.inject(chunk);\n return transcoderInjected;\n });\n }\n\n} else {\n maptalks.registerWorkerAdapter('@maptalks/3dtiles', chunk);\n}\n\nexport * from '../src/layer/index';\n"],"names":["isArrayish","obj","Array","isArray","length","splice","Function","Object","getOwnPropertyDescriptor","constructor","name","concat","prototype","slice","swizzle","simpleSwizzleModule","exports","args","results","i","len","arg","call","push","wrap","fn","arguments","colorNames","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","require$$1","hasOwnProperty","reverseNames","create","cs","colorStringModule","to","get","clamp","num","min","max","Math","hexDouble","str","round","toString","toUpperCase","string","val","model","substring","toLowerCase","hsl","hwb","rgb","value","match","hexAlpha","i2","parseInt","parseFloat","alpha","isNaN","hex","rgba","percent","r","g","b","hsla","hwba","a","keyword","cssKeywords","reverseKeywords","key","convert","conversionsModule","channels","labels","hsv","cmyk","xyz","lab","lch","ansi16","ansi256","hcg","apple","Error","defineProperty","h","l","delta","rdif","gdif","bdif","s","v","diff","diffc","c","k","reversed","currentClosestKeyword","x","y","currentClosestDistance","Infinity","distance","pow","z","t1","t2","t3","smin","lmin","hi","floor","f","p","q","t","sl","vmin","n","wh","bl","ratio","m","y2","x2","z2","atan2","PI","sqrt","hr","cos","sin","ansi","color","mult","rem","colorString","split","map","char","join","integer","hue","chroma","mg","pure","w","conversions","require$$0","deriveBFS","fromModel","graph","models","keys","parent","buildGraph","queue","current","pop","adjacents","adjacent","node","unshift","link","from","wrapConversion","toModel","path","cur","conversion","route","forEach","routes","wrappedFn","result","wrapRounded","raw","wrapRaw","_slice","skippedModels","hashedModelKeys","sort","limiters","Color","this","valpha","newArr","zeroArray","indexOf","hashedKeys","JSON","stringify","limit","freeze","getset","channel","modifier","maxfn","arr","toJSON","places","self","percentString","array","object","unitArray","unitObject","Number","toFixed","roundTo","roundToPlace","saturationl","lightness","saturationv","wblack","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","level","contrastRatio","isDark","isLight","negate","lighten","darken","saturate","desaturate","whiten","blacken","grayscale","fade","opaquer","rotate","degrees","mix","mixinColor","weight","color1","undefined","w1","w2","newAlpha","isNil","extend","dest","src","isFunction","isObject","isNumber","toRadian","d","toDegree","getAbsoluteURL","url","document","createElement","href","sign","extraByteMap","stringFromUTF8Array","data","count","index","ch","extra","chx","String","fromCharCode","setColumn3","out","col","flatArr","flat","reduce","acc","getBatchIdArrayType","Uint8Array","Uint16Array","Uint32Array","isBase64","base64URLToArrayBuffer","firstDot","base64","binary_string","window","atob","bytes","charCodeAt","buffer","pushIn","ii","ll","colorCache","normalizeColor","isRelativeURL","prepareFetchOptions","fetchOptions","referrerPolicy","referrer","location","globalThis","global","e","gl_trans__coders","o","maptalks_gltf_loader","inject","_","maptalks_gltf_loader_bundle","registerTranscoder","getTranscoder","canvas","Geo3DTilesWorkerConnection","maptalks","worker","Actor","workerKey","mapId","supportNPOT","super","_supportNPOT","initialize","cb","loadTile","layerId","params","buffers","arraybuffer","command","send","abortTileLoading","broadcast","addLayer","options","actorId","removeLayer","requestImage","image","Image","onload","isActive","img","isPowerOfTwo","width","height","floorPowerOfTwo","getContext","drawImage","idx","lastIndexOf","filename","console","warn","resize","ctx","willReadFrequently","imgData","getImageData","onerror","err","log","LN2","GLTFLoader","getGLTFLoaderBundle","iterateMesh","gltf","scenes","i0","l0","nodes","matrices","iterateNode","TMAT","RMAT","SMAT","EMPTY_T","EMTPY_Q","quat","identity","EMPTY_S","nodeMatrices","matrix","rotation","translation","scale","tm","mat4","fromTranslation","rm","fromQuat","sm","fromScaling","multiply","children","mesh","meshIndex","meshes","mat","primitives","primitive","getItemAtBufferData","byteOffset","byteStride","stride","componentType","itemSize","arrayBuffer","ctor","getTypedArrayCtor","BYTES_PER_ELEMENT","set","uint8Arr","setInstanceData","row","scratchN","scratchK","wgs84RadiiSquared","radianToCartesian3","longitude","latitude","radiiSquared","cosLatitude","normalizeCartesian","vec3","gamma","dot","cartesian","scalar","add","wgs84OneOverRadii","wgs84OneOverRadiiSquared","cartesianToCartographicP","cartesianToCartographicN","cartesianToCartographicH","cartesian3ToDegree","oneOverRadiiSquared","oneOverRadii","centerToleranceSquared","positionX","positionY","positionZ","oneOverRadiiX","oneOverRadiiY","oneOverRadiiZ","squaredNorm","intersection","scaleToGeodeticSurfaceIntersection","isFinite","oneOverRadiiSquaredX","oneOverRadiiSquaredY","oneOverRadiiSquaredZ","gradient","scaleToGeodeticSurfaceGradient","func","denominator","xMultiplier","yMultiplier","zMultiplier","xMultiplier2","yMultiplier2","zMultiplier2","xMultiplier3","yMultiplier3","zMultiplier3","lambda","magnitude","correction","abs","EPSILON12","scaleToGeodeticSurface","mul","sub","asin","geodeticSurfaceNormal","origin","normalize","geodeticSurfaceNormalCartographic","cartographic","equalsEpsilon","left","right","relativeEpsilon","absoluteEpsilon","absDiff","readMagic","view","offset","magic","code","getUint8","textDecoder","TextDecoder","readFeatureTableJSON","byteLength","parse","decode","readBatchTableJSON","readBatchTableBin","readBatchArray","batchId","buf","type","reglType","getComponentCtor","getItemSize","readBatchId","batchIdData","readBatchData","subarray","TYPE_SIZES","SCALAR","VEC2","VEC3","VEC4","typeMap","BYTE","Int8Array","UNSIGNED_BYTE","SHORT","Int16Array","UNSIGNED_SHORT","INT","Int32Array","UNSIGNED_INT","FLOAT","Float32Array","DOUBLE","Float64Array","getComponentFromCtor","convertQuantizedPosition","position","readFeatureTableBatchTable","transferables","featureTableJsonByteLength","getUint32","featureTableBinaryByteLength","batchTableJsonByteLength","batchTableBinaryByteLength","i3dmBuf","featureTableBin","featureTable","batchTable","batchTableBin","readFeatureTableBin","batchTableBinInfo","vectorProductLocalFrame","up","south","north","west","east","down","degeneratePositionLocalFrame","localFrameToFixedFrameCache","scratchCalculateCartesian","scratchFirstCartesian","scratchSecondCartesian","scratchThirdCartesian","ZERO","setTranslation","eastNorthUpToFixedFrame","firstAxis","secondAxis","thirdAxis","resultat","hashAxis","ellipsoid","equals","copy","mathSign","cross","localFrameToFixedFrameGenerator","scratchRTCCoord","scratchCenter","scratchCartographic","projectedPosition","scratchFromENU","scratchToENU","scratchRotation","coord","prjResult","RADIAN","OPTIONS","offscreenCanvas","OffscreenCanvas","fillText","getCanvas","ColorIn","colors","error","valueOffset","assign","_initImgData","clearRect","createLinearGradient","stop","addColorStop","fillStyle","fillRect","getColor","colorInCache","isNull","isNotNull","isEmptyString","createFunction","parameters","defaultType","fun","isFeatureConstant","isZoomConstant","isFunctionDefinition","innerFun","zoomAndFeatureDependent","stops","featureDependent","property","zoomDependent","evaluateExponentialFunction","evaluateIntervalFunction","evaluateCategoricalFunction","evaluateIdentityFunction","evaluateColorInterpolateFunction","evaluateCalculateExpressionFunction","featureFunctions","featureFunctionStops","zoom","default","feature","base","input","interpolate","Map","COLORIN_OPTIONS","colorIn","has","targetVariable","expression","newValue","coalesce","updatedExpression","traverseAndAssign","newValueAsNumber","targetVariableAsString","subExpr","evaluateExpression","operator","includes","operands","op","curr","some","inputLower","inputUpper","outputLower","outputUpper","evaluatedLower","apply","evaluatedUpper","output","interpolateNumber","interpolateArray","difference","progress","interpolated","createFunction1","getTextureMagFilter","getTextureMinFilter","getTextureWrap","getMaterialType","getMaterialFormat","getPrimitive","getUniqueREGLBuffer","getArrayType","reshader","REGLHelper","Y_TO_Z","X_TO_Z","loginIBLResOnCanvas","logoutIBLResOnCanvas","getIBLResOnCanvas","getPBRUniforms","pbr","PBRUtils","DEFAULT_POLYGON_OFFSET","factor","units","DEFAULT_POLYGONFILL","DEFAULT_HSV","DEFAULT_MATERIAL_INFO","specularStrength","materialShininess","IDENTITY_SCALE","IDENTITY_MATRIX","EMPTY_TRANSLATION","EMPTY_COORD_OFFSET","LIGHT_DIR","phongFilter","material","PhongMaterial","StandardFilter","StandardMaterial","TEMP_RTCCENTER","TEMP_CENTER","Coordinate","TEMP_POINT","Point","TEMP_POINT1","TEMP_POINT2","TEMP_OFFSET","TEMP_TRANSLATION","TEMP_MATRIX1","TEMP_MATRIX2","TEMP_TILE_ROT_QUAT","TEMP_SCALING","TEMP_TILE_SCALING_MAT","TEMP_TILE_TRANSFORM","TEMP_TRANSLATION_MAT","TEMP_SERVICE_MAT","TEMP_PROJ_SCALE","TEMP_DIST_SCALE","TEMP_DIST_TO_PROJ_SCALE","TEMP_MATRIX_SCALE","DEFAULT_SEMANTICS","POSITION","NORMAL","TEXCOORD_0","TEXCOORD_1","COLOR_0","TANGENT","_BATCHID","BOX_INDEX","SPHERE_POS","radius","angle","vertices","indices","posX","posY","posZ","generateSphere","BOX_ROTATE","BOX_SCALE","TileMeshPainter","regl","layer","_layer","_canvas","getRenderer","pickingFBO","_regl","_renderer","Renderer","_loading","_modelMeshes","_pntsMeshes","_i3dmMeshes","_cmptMeshes","_cachedGLTF","_modelScene","Scene","_pntsScene","_i3dmScene","_boxScene","_resLoader","ResourceLoader","texture","_bindedListener","_onResourceLoad","_khrTechniqueWebglManager","KHRTechniquesWebglManager","_getExtraCommandProps","getMap","_heightScale","altitudeToPoint","getGLRes","getI3DMMeshes","getPNTSMeshes","getB3DMMeshes","getPaintedMeshes","_paintedMeshes","paint","tiles","boxMeshes","parentContext","renderTarget","filter","sceneFilter","uniforms","_getUniformValues","projViewMatrix","oneMeshArray","parentMeshes","b3dmMeshes","pntsMeshes","i3dmMeshes","_getMesh","service","_getNodeService","_rootIdx","debugNodes","heightOffset","coordOffset","id","polygonOffset","isValid","properties","_updateMeshLocalTransform","_originLocalTransform","localTransform","_node","getBoundingBox","intersectsBox","batchIdMap","geometry","rootIdx","_highlighted","HighlightUtil","highlightMesh","_highlightTimestamp","showOnly","_showOnlys","_showOnlyTimeStamp","bloom","hlBloomMesh","depthFunc","isLeaf","leave","branchRootId","selectionDepth","cullFace","bloomProperties","_updateMaskDefines","_updateServiceMatrix","drawCount","khrExludeFilter","getExcludeFilter","ContextUtil","setIncludeUniformValues","_callShader","_phongShader","_standardShader","forEachShader","shader","shaderFilter","uniformSemantics","setMeshes","pntsUniforms","_getPntsUniforms","render","_pntsShader","fbo","_edgeShader","prepareRender","context","_prepareShaders","states","includesChanged","dispose","_createShaders","stencilEnable","branchMeshes","leafMeshes","hasUnresolved","currentBranchRootId","_drawBranchMeshes","_clearStencil","clear","stencil","framebuffer","getCurrentB3DMMeshes","getMeshes","getCurrentI3DMMeshes","_sort","_cameraDistance","deleteTile","tileData","_boxMesh","_disposeMesh","_disposeCMPT","_deleteOne","cached","refMeshes","delete","uuid","size","remove","picking","_updateB3DMLocalMatrix","_updateI3DMLocalTransform","_updatePNTSLocalTransform","createPntsMesh","pnts","compressed_int16_params","fill","Geometry","static","positionAttribute","pickingIdAttribute","generateBuffers","defines","_setCompressedInt16Defines","rtcCenter","rtcCoord","projCenter","Mesh","serviceIndex","setDefines","setFunctionUniform","pointColor","pointSizeValue","pointSizeFn","pointSize","getZoom","pointOpacityValue","pointOpacityFn","pointOpacity","_setCompressedInt16Uniforms","_getB3DMTransform","setLocalTransform","createI3DMMesh","upAxisTransform","_getUpAxisTransform","_upAxis","i3dm","instanceCount","projectedMatrix","_computeProjectedTransform","tileRotQuat","getRotation","scaling","getScaling","tileScalingMat4","tileTransform","_getI3DMTileTransform","projScale","_getProjScale","distScale","_getDistanceScale","distToProjScale","div","distToProjScaleTransform","NORMAL_UP","NORMAL_RIGHT","SCALE","SCALE_NON_UNIFORM","isWebGPU","instanceData","instance_vectorA","instance_vectorB","instance_vectorC","aPickingId","normalUp","normalRight","normalForward","scaleItem","scaleNonUniform","rotationMat3","quaternion","tempUint8","iterateBufferData","vertex","fromMat3","fromRotationTranslationScale","instanceBuffers","dimension","divisor","unreadyCount","ready","gltfWeakResources","gltfMesh","meshId","primId","gltfResource","_processGLTF","isReady","InstancedMesh","Set","_getGLTFMeshDefines","_setWEB3DDecodeUniforms","attributes","nodeMatrix","setPositionMatrix","trimGLTFWeakResources","_callback","coordOffsetMatrix","_computeCoordOffsetMatrix","_getCenterTranslation","createB3DMMesh","maxPrjExtent","maxExtent","extent","Extent","convertTo","_pointToPrj","xmin","ymin","xmax","ymax","extensions","center","isSharedPosition","asset","sharePosition","_getB3DMTileTransform","unlit","materials","compressUniforms","u","setUniform","hasFunctionUniform","opacity","polygonFill","_createBoxMesh","nodeBox","_getNodeBox","translate","obbox","boxPosition","boxCenter","sphereBox","sphereCenter","Material","lineColor","lineOpacity","_deleteBoxMesh","distanceScale","decodeMatrix","nodeTransform","transformMat4","projectedTransform","projection","res","heightScale","viewCenter","getTranslation","prjCoord","project","fromENU","left0","left1","left2","left4","left5","left6","left8","left9","left10","right0","right1","right2","right4","right5","right6","right8","right9","right10","column0Row0","column0Row1","column0Row2","column1Row0","column1Row1","column1Row2","column2Row0","column2Row1","column2Row2","multiplyByMatrix3","invert","mat3","fromMat4","basisTo2D","getProjection","boxCoord","glRes","point0","coordToPointAtRes","target","point1","dx","dy","createCMPTMesh","content","childId","getGeometryDefines","generator","_appendS3MDefines","uvRegion","desc","normalAttribute","color0Attribute","uv0Attribute","textureCoordMatrixAttribute","_vertexCompressionType","hasIBL","compressDefines","renderer","updateMaskDefines","isI3DM","isS3M","matInfo","khrTechniquesWebgl","khrMesh","_createTechniqueMesh","fillEmptyDataInMissingAttribute","_createGeometry","materialInfo","_createMaterial","alphaTest","ambientLight","environmentExposure","lights","getLightManager","mapAmbient","getAmbientLight","ambientValue","_nodeId","baseColorFactor","gltfGeo","useWebGL2","createMesh","attributeSemantics","color0Name","attrs","positionSize","vertexCount","isPosition","padGPUGLTFAttribute","pickingData","uv1Attribute","tangentAttribute","mode","featureIds","indiceIndex","generateFeatureIndiceIndex","excludeElementsInVAO","_prjToPoint","serviceTransform","_getServiceTransform","zoomScale","distanceToPointAtRes","viewport","modelNormalMatrix","projViewModelMatrix","MeshShader","vert","pntsVert","frag","props","extraCommandProps","blend","enable","dst","equation","depth","uniformDeclares","fillIncludes","PhongShader","StandardShader","EdgeShader","srcRGB","srcAlpha","dstRGB","dstAlpha","FBORayPicking","wgslVert","getWGSLSource","PICKING_MODE","ENABLE_PICKING","HAS_PICKING_ID","_pntsPicking","cull","meshProperties","face","cmp","ref","fail","zfail","zpass","lightManager","lightDir","getDirectionalLight","direction","layerOpacity","iblTexes","dfgLUT","maskUniforms","getMaskUniforms","minAltitude","altitude","czm_lightDirectionEC","lightSpecular","viewMatrix","projMatrix","outSize","polygonOpacity","ambientColor","materialIndex","baseColorTexture","pbrMetallicRoughness","texInfo","textures","_getTexture","normalTexture","normalMapFactor","occlusionTexture","occlusionFactor","strength","emissiveTexture","emissiveFactor","vec4","getREGLTexture","metallicFactor","roughnessFactor","metallicRoughnessTexture","s3mMaterial","meshMaterial","convertFrom","doubleSided","once","config","format","flipY","mipmap","sampler","magFilter","minFilter","wrapS","wrapT","Texture2D","loading","_coordToPoint","getGLZoom","axis","pick","tolerance","b3dm","_pickMesh","scene","picked","getRenderedMeshes","returnPoint","pickingId","point","coordinate","getMeshAt","services","debugInfo","highlight","highlights","getFrameTimestamp","setToRedraw","cancelAllHighlight","showOnlys","cancelShowOnly","_getCurrentBatchIDs","ids","batchIds","batchData","getAmbientResource","fillNodepagesToCache","nodeCache","TEMP_VEC3","I3SNode","fnFetchNodepages","_url","_fnFetchNodepages","_version","version","_index","_nodeCache","load","baseUrl","layerScene","lodSelection","_nodeJSON","_loadNode","Promise","resolve","eslpk","nodepage","nodesPerPage","getTileset","_tileset","getChildrenURL","_childrenURL","promises","pendingReqs","childPageIndex","all","then","_loadContent","_createTileset","_fillCache","i3s","gltfUpAxis","geometricError","MAX_VALUE","root","_convertNode","nodeJSON","is4326","wkid","nodeData","obb","mbs","boundingVolume","_tileCoordToLngLat","_WGS84ToCartesian","sphere","box","halfSize","directionsMatrix","fromCenterHalfSizeQuaternion","metersPerPixel","span","lodThreshold","lodSelectionMetricType","lodIndex","metricType","maxError","localTransforms","childrenDefinition","childIndex","inPlaceTileDefinition","refine","transform","geometryData","uri","getJSON","long","lat","supportKTX2","transcoders","ktx2","IDENTITY_MAT4","supportWASM","WebAssembly","instantiate","module","Module","of","Instance","isI3SMesh","prefixIndex","getI3SNodeInfo","enableDraco","forceDraco","isESLPK","nodeIndex","getI3SNodeIndex","hasCompression","geoUrl","meshInfo","info","store","defaultGeometrySchema","textureUrl","textureData","mimeType","textureEncoding","geoDefinitions","geometryDefinitions","geoDef","definition","geometryBuffers","geometryInfo","resource","materialDefinitions","textureSetDefinitions","materialDef","materialDefinition","resolveTextures","parseMaterial","dracoCompression","textureSetDefinitionId","texDef","formats","getSupportedTexture","ext","textureEnCodingMap","textureEncode","textureFormat","hasExtension","Ajax","COORD_IN","COORD_OUT","REPORTED_ERRORS","EMPTY_ARRAY","GlobalTieCache","onRemove","currentSize","reset","_remove","memorySize","shrink","iterator","item","next","Util","warnOnce","removedData","getAndRemove","setMaxSize","getMemorySize","values","markAll","isCurrent","Browser","mobile","tile","TileCacheRefCount","Geo3DTilesRenderer","MaskRendererMixin","CanvasCompatible","LayerAbstractRenderer","tileCache","tilesLoading","_requests","_modelQueue","_fetchI3DNodepages","getAnalysisMeshes","painter","paintedMeshes","needToRedraw","isInteracting","_timestamp","drawOnInteracting","event","timestamp","draw","mask2DExtent","prepareCanvas","intersects","canvasExtent2D","completeRender","getTiles","_consumeI3SQueue","_consumeModelQueue","selectedTiles","requests","_selectTiles","loadTiles","_drawTiles","_abortUnusedTiles","_markTiles","preLoadingCount","loadingLimit","_getLoadLimit","checked","hit","tileLoading","getCachedTile","_isLoadingTile","getTileOpacity","selected","_selectParentTile","_selectChildTile","_sortTiles","compareRequests","lastAncestor","stack","parentStack","waitingTile","_stackLength","treeNode","maxLevel","_level","child","_createCandidate","nodeId","onDrawTileStart","fire","onDrawTileEnd","renderCount","binary","_loadTileContent","isI3STileset","_i3sNodeCache","tileset","onTilesetLoad","supportedFormats","_supportedFormats","getSupportedFormats","gl","device","wgpu","isSuperMapiServer","uriComponent","parts","encoded","encodeURIComponent","encodeSuperMapURI","getTileUrl","_roots","upAxis","i3sInfo","onTileError","status","workerConn","getId","shift","_onMeshCreated","_enableLayerOpacity","_getMeshSize","onTileLoad","_addTileToCache","capabilities","layers","_parseI3SSceneLayer","errorUrl","message","isNoContentHttpCode","_addErrorToCache","getShadowMeshes","loadTime","now","initContext","reglGL","graphics","prepareWorker","_resumeHighlights","spatialReference","coordType","getSpatialReference","destroy","getStencilValue","force","_preRetireTime","Date","aborted","_createGLContext","names","tileId","batch","bin","_i3sRequests","callbacks","json","i3sVersion","nodePages","endsWith","lastSlash","regulateURL","parseI3SJSON","serviceHighs","cancelHighlight","items","serviceShowOnlys","_getCoordProjection","unproject","_lngLatToIdentityCoord","_identityCoordToLngLat","_centerProjection","SpatialReference","getProjectionInstance","getMatrix3Column","distanceToCamera","halfAxes","cameraPosition","subtract","scratchOffset","scratchCartesianU","scratchCartesianV","scratchCartesianW","uHalf","vHalf","wHalf","pPrime","scratchPPrime","distanceSquared","distanceSquaredTo","TWO_PI","Rectangle","contains","rectangle","southwest","northeast","southeast","northwest","UNIT_Z","cartographicToCartesian","carto","Plane","normal","fromPointNormal","cartographicScratch","cartographicScratch2","westernMidpointScratch","eastWestNormalScratch","cartesian3Scratch","cartesian3Scratch2","cartesian3Scratch3","easternMidpointScratch","rayOrigin","rayDirection","planeScratch","vectorScratch","TileBoundingRegion","region","southwestCornerCartesian","northeastCornerCartesian","westNormal","eastNormal","southNormal","northNormal","minimumHeight","maximumHeight","computeBox","cameraCartesianPosition","cameraCartographicPosition","vectorFromSouthwestCorner","distanceToWestPlane","distanceToSouthPlane","vectorFromNortheastCorner","distanceToEastPlane","distanceToNorthPlane","cameraHeight","distanceAboveTop","distanceBelowBottom","tileBB","westernMidpointCartesian","easternMidpointCartesian","westVector","eastWestNormal","southSurfaceNormal","southCenterCartesian","westPlane","rayPlane","northSurfaceNormal","northCenterCartesian","eastPlane","plane","extentToBBOX","BBOXUtil","maxGPUMemory","retireInterval","loadingLimitOnInteracting","debug","meshLimitPerFrame","i3sNodepageLimitPerFrame","enableI3SCompressedGeometry","forceI3SCompressedGeometry","onlyCacheNoContentTileWhenError","pickingPoint","geometryEvents","alwaysShowTopTiles","antialias","forceRenderOnZooming","forceRenderOnRotating","forceRenderOnMoving","optionalExtensions","TEMP_VEC3_0","TEMP_VEC3_1","TEMP_VEC3_2","TEMP_VEC3_3","TEMP_VEC3_4","TEMP_VEC3_5","TEMP_VEC3_6","TEMP_SCALE","TEMP_QUAT_0","TEMP_COORD","TEMP_MAT3_0","TEMP_MAT4_0","TEMP_MAT4_1","TEMP_MAT4_2","CAMERA_Point","DEFAULT_ROTATION","DEFAULT_SCALE","TEMP_SERVICE_SCALE","DEFAULT_TRANSLATION","TILENODE_BBOX","BOX_POS","Geo3DTilesLayer","MaskLayerMixin","Layer","fromJSON","layerJSON","getEnuTransform","cart3","enu","fromEuler","isGeo3DTilesLayer","_initRoots","_nodeBoxes","urls","_rootMap","createRootTile","roots","showService","updateService","visible","hideService","_setToRedraw","addService","extentChanged","rootNode","removeService","subdomains","domainKey","domain","replace","getExtent","nodeExtent","boundingVolumeToExtent","_centerTransformed","isIdentity","nw","locate","se","nodeCenter","rx","ry","rz","getRootTiles","pointAtResToDistance","cameraCoord","_getCameraLonLat","_cameraLocation","_cameraCartesian3","_fovDenominator","getFov","projectionView","mapExtentBBOX","getPitch","mapExtent","halfWidth","getWidth","halfHeight","getHeight","clipMasks","getMasks","mask","ClipOutsideMask","maskGeoJSON","toGeoJSON","bbox","currentParent","_getRootMaxExtent","_initNode","_isVisible","TileVisibility","VISIBLE","OUT_OF_FRUSTUM","isTopTile","SCREEN_ERROR_TOO_SMALL","_addCandidateNode","_updateParentDistance","candidate","hasChildren","hasContent","inited","hasValidChild","viewerRequestVolume","cameraLocation","cameraCartesian3","volume","computeSphereDistanceToCamera","computeBoxDistanceToCamera","inViewerRequestVolume","GUID","_empty","_isEmpty","isI3SNode","_offsetBoundingVolume","_offsetChanged","hasOffset","exactEquals","originalVolume","westSouth","_offsetCenter","eastNorth","offsetCenter","axisUp","isRealspace","s3mType","isI3S","isFirstTileset","_notLoaded","ecefTransform","contentUrl","_updateRootCenter","_isTileInMasks","bboxIntersect","bboxInMask","_isTileInFrustum","maximumScreenSpaceError","_getScreenSpaceError","_error","_getRootNode","_createRegionBox","_createBBox","_createSphere","intersectsOrientedBox","intersectsSphere","ws","en","minHeight","maxHeight","ws_coord","en_coord","convertRegionToBox","pointWS","pointEN","_bboxCenter","isIdentityMatrix","pos","pointAtResToCoord","_generateOBBox","_calBoxCenter","_createHalfAxes","modelMatrix","column3Row0","column3Row1","column3Row2","column0Row3","column1Row3","column2Row3","column3Row3","fillColumnMajorMatrix4","toArray","_getBoxScale","obbCenter","xPlaneCenter","getBoxPlaneCenter","yPlaneCenter","zPlaneCenter","box_center","box_center_coord","point_center","rootCenter","originMat4","originMat4Reverse","serviceScale","_equalsOffsets","pointCenter","_updateRootBBoxCenter","_updateRootRegionCenter","_originCoordOffset","_originHeightOffset","rotationScale","scalePoint","fovDenominator","_tileRegion","computeRegionDistanceToCamera","identify","cp","coordToContainerPoint","identifyAtPoint","identifyMasks","identifyMask","dpr","getDevicePixelRatio","getCurrentBatchIDs","_resumeShowOnly","setServiceOpacity","setServiceDebug","getJSONType","dist","v0","v1","v2","v3","vv0","vv1","vv2","vv3","hasParentContent","vec2","mergeOptions","registerRenderer","registerJSONType","currentTranscoders","getTranscoders","crn","draco","B3DMLoader","loaderCtor","_requestImage","_loaderCtor","_decoders","createEmptyB3DM","_parse","getArrayBuffer","response","b3dmByteLength","maxTextureSize","components","_readB3DM","rootPath","loader","glb","transferable","decoders","skipAttributeTransform","DataView","batchLength","BATCH_LENGTH","b3dmData","_readBatchTable","I3DMLoader","_maxTextureSize","_parseGLTF","_readI3DM","i3dmURL","opts","gltfBinStart","_createGLTFLoader","instanceLength","quanVolOffset","quanVolScale","_convertQuantizedPosition","_decodeOCT32p","octDecodeInRange","rangeMax","fromSNorm","oldVX","signNotZero","rangeMaximum","defaultValue","PNTSLoader","pntsBuf","_readPNTS","pointsLength","dracoBuf","compression","dracoOptions","useUniqueIDs","_draco","attribData","_readAttributes","createPerPointBatchId","attrByteOffset","CMPTLoader","GLTFloaderCtor","cmpt","_readCMPT","tilesLength","tileByteLength","maptalksgl","VERSION","transcoderInjected","chunk","registerWorkerAdapter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,18,19]}
1
+ {"version":3,"file":"maptalks.3dtiles.es.js","sources":["../build/worker.js","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js","../../../node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js","../../../node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js","../../../node_modules/.pnpm/color-name@1.1.3/node_modules/color-name/index.js","../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/conversions.js","../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/route.js","../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/index.js","../../../node_modules/.pnpm/color@3.2.1/node_modules/color/index.js","../src/common/Util.js","../src/common/UrlUtil.js","../src/common/Constants.js","../../gl/dist/transcoders.js","../src/layer/Geo3DTilesWorkerConnection.js","../src/layer/renderer/LRUCache.js","../src/common/GLTFHelpers.js","../src/layer/renderer/glsl/picking.vert","../src/layer/renderer/glsl/pnts.vert","../src/layer/renderer/glsl/pnts.frag","../src/common/Transform.js","../src/common/Math.js","../src/common/TileHelper.js","../../../node_modules/.pnpm/colorin@0.5.0/node_modules/colorin/index.js","../../../node_modules/.pnpm/@maptalks+function-type@1.4.1/node_modules/@maptalks/function-type/index.js","../src/layer/renderer/TileMeshPainter.js","../src/layer/i3s/Util.js","../src/layer/i3s/I3SNode.js","../src/layer/i3s/I3SHelper.js","../src/layer/renderer/Geo3DTilesRenderer.js","../src/common/intersects_oriented_box.js","../src/layer/renderer/Rectangle.js","../src/layer/renderer/TileBoundingRegion.js","../src/layer/Geo3DTilesLayer.ts","../src/loaders/transcoders.js","../src/loaders/B3DMLoader.js","../src/loaders/I3DMLoader.js","../src/loaders/PNTSLoader.js","../src/loaders/CMPTLoader.js","../build/index.js"],"sourcesContent":["const e = \"${\"; const code = `function(e){\n/*!\n * @maptalks/gl v0.125.0\n * LICENSE : UNLICENSED\n * (c) 2016-2026 maptalks.com\n */\nconst t=function(){if(\"undefined\"!=typeof globalThis)return globalThis;if(\"undefined\"!=typeof self)return self;if(\"undefined\"!=typeof window)return window;if(\"undefined\"!=typeof global)return global;throw new Error(\"unable to locate global object\")},r=t(),n=r.gl_trans__coders=r.gl_trans__coders||{};function a(){return t().maptalks_gltf_loader}n.inject=function(e){const n=e.toString(),a=n.indexOf(\"{\")+1,o=n.substring(0,a),s=r.gl_trans__coders=r.gl_trans__coders||{};let i=\\`${e}o}\\\\n const _____getGlobal = ${e}t.toString()};\\\\n const g___lobals = _____getGlobal()\\\\n const tran_____scoders = g___lobals['gl_trans__coders'] = g___lobals['gl_trans__coders'] || {};\\`;for(const e in s)\"inject\"!==e&&\"getTranscoder\"!==e&&\"registerTranscoder\"!==e&&(i+='tran_____scoders[\"'+e+'\"] ='+s[e].toString()+\"\\\\n;\");return i+=\"\\\\n(\"+t().maptalks_gltf_loader_bundle.toString()+\")({});\\\\n\",i+=\"\\\\n\"+n.substring(o.length),i},n.registerTranscoder=function(e,t){n[e]=t},n.getTranscoder=function(e){return n[e]};var o=\"undefined\"!=typeof Float32Array?Float32Array:Array;function s(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function i(e,t,r){var n=t[0],a=t[1],o=t[2],s=t[3],i=t[4],c=t[5],l=t[6],u=t[7],f=t[8],h=t[9],d=t[10],m=t[11],p=t[12],b=t[13],g=t[14],y=t[15],_=r[0],T=r[1],v=r[2],w=r[3];return e[0]=_*n+T*i+v*f+w*p,e[1]=_*a+T*c+v*h+w*b,e[2]=_*o+T*l+v*d+w*g,e[3]=_*s+T*u+v*m+w*y,_=r[4],T=r[5],v=r[6],w=r[7],e[4]=_*n+T*i+v*f+w*p,e[5]=_*a+T*c+v*h+w*b,e[6]=_*o+T*l+v*d+w*g,e[7]=_*s+T*u+v*m+w*y,_=r[8],T=r[9],v=r[10],w=r[11],e[8]=_*n+T*i+v*f+w*p,e[9]=_*a+T*c+v*h+w*b,e[10]=_*o+T*l+v*d+w*g,e[11]=_*s+T*u+v*m+w*y,_=r[12],T=r[13],v=r[14],w=r[15],e[12]=_*n+T*i+v*f+w*p,e[13]=_*a+T*c+v*h+w*b,e[14]=_*o+T*l+v*d+w*g,e[15]=_*s+T*u+v*m+w*y,e}function c(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function l(){var e=new o(3);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function u(e){var t=e[0],r=e[1],n=e[2];return Math.hypot(t,r,n)}function f(e,t,r){var n=new o(3);return n[0]=e,n[1]=t,n[2]=r,n}function h(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function d(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function m(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function p(e,t){var r=t[0],n=t[1],a=t[2],o=r*r+n*n+a*a;return o>0&&(o=1/Math.sqrt(o)),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e}function b(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function g(e,t,r){var n=t[0],a=t[1],o=t[2],s=r[3]*n+r[7]*a+r[11]*o+r[15];return s=s||1,e[0]=(r[0]*n+r[4]*a+r[8]*o+r[12])/s,e[1]=(r[1]*n+r[5]*a+r[9]*o+r[13])/s,e[2]=(r[2]*n+r[6]*a+r[10]*o+r[14])/s,e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var y=function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e},_=function(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e},T=u;function v(){var e=new o(4);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}l(),function(){var e,t=(e=new o(4),o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e)}();var w;function O(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}l(),f(1,0,0),f(0,1,0),v(),v(),w=new o(9),o!=Float32Array&&(w[1]=0,w[2]=0,w[3]=0,w[5]=0,w[6]=0,w[7]=0),w[0]=1,w[4]=1,w[8]=1;var A={exports:{}},I={exports:{}},M=function(e){return!(!e||\"string\"==typeof e)&&(e instanceof Array||Array.isArray(e)||e.length>=0&&(e.splice instanceof Function||Object.getOwnPropertyDescriptor(e,e.length-1)&&\"String\"!==e.constructor.name))},x=Array.prototype.concat,C=Array.prototype.slice,S=I.exports=function(e){for(var t=[],r=0,n=e.length;r<n;r++){var a=e[r];M(a)?t=x.call(t,C.call(a)):t.push(a)}return t};S.wrap=function(e){return function(){return e(S(arguments))}};var N=I.exports,L={\"aliceblue\":[240,248,255],\"antiquewhite\":[250,235,215],\"aqua\":[0,255,255],\"aquamarine\":[127,255,212],\"azure\":[240,255,255],\"beige\":[245,245,220],\"bisque\":[255,228,196],\"black\":[0,0,0],\"blanchedalmond\":[255,235,205],\"blue\":[0,0,255],\"blueviolet\":[138,43,226],\"brown\":[165,42,42],\"burlywood\":[222,184,135],\"cadetblue\":[95,158,160],\"chartreuse\":[127,255,0],\"chocolate\":[210,105,30],\"coral\":[255,127,80],\"cornflowerblue\":[100,149,237],\"cornsilk\":[255,248,220],\"crimson\":[220,20,60],\"cyan\":[0,255,255],\"darkblue\":[0,0,139],\"darkcyan\":[0,139,139],\"darkgoldenrod\":[184,134,11],\"darkgray\":[169,169,169],\"darkgreen\":[0,100,0],\"darkgrey\":[169,169,169],\"darkkhaki\":[189,183,107],\"darkmagenta\":[139,0,139],\"darkolivegreen\":[85,107,47],\"darkorange\":[255,140,0],\"darkorchid\":[153,50,204],\"darkred\":[139,0,0],\"darksalmon\":[233,150,122],\"darkseagreen\":[143,188,143],\"darkslateblue\":[72,61,139],\"darkslategray\":[47,79,79],\"darkslategrey\":[47,79,79],\"darkturquoise\":[0,206,209],\"darkviolet\":[148,0,211],\"deeppink\":[255,20,147],\"deepskyblue\":[0,191,255],\"dimgray\":[105,105,105],\"dimgrey\":[105,105,105],\"dodgerblue\":[30,144,255],\"firebrick\":[178,34,34],\"floralwhite\":[255,250,240],\"forestgreen\":[34,139,34],\"fuchsia\":[255,0,255],\"gainsboro\":[220,220,220],\"ghostwhite\":[248,248,255],\"gold\":[255,215,0],\"goldenrod\":[218,165,32],\"gray\":[128,128,128],\"green\":[0,128,0],\"greenyellow\":[173,255,47],\"grey\":[128,128,128],\"honeydew\":[240,255,240],\"hotpink\":[255,105,180],\"indianred\":[205,92,92],\"indigo\":[75,0,130],\"ivory\":[255,255,240],\"khaki\":[240,230,140],\"lavender\":[230,230,250],\"lavenderblush\":[255,240,245],\"lawngreen\":[124,252,0],\"lemonchiffon\":[255,250,205],\"lightblue\":[173,216,230],\"lightcoral\":[240,128,128],\"lightcyan\":[224,255,255],\"lightgoldenrodyellow\":[250,250,210],\"lightgray\":[211,211,211],\"lightgreen\":[144,238,144],\"lightgrey\":[211,211,211],\"lightpink\":[255,182,193],\"lightsalmon\":[255,160,122],\"lightseagreen\":[32,178,170],\"lightskyblue\":[135,206,250],\"lightslategray\":[119,136,153],\"lightslategrey\":[119,136,153],\"lightsteelblue\":[176,196,222],\"lightyellow\":[255,255,224],\"lime\":[0,255,0],\"limegreen\":[50,205,50],\"linen\":[250,240,230],\"magenta\":[255,0,255],\"maroon\":[128,0,0],\"mediumaquamarine\":[102,205,170],\"mediumblue\":[0,0,205],\"mediumorchid\":[186,85,211],\"mediumpurple\":[147,112,219],\"mediumseagreen\":[60,179,113],\"mediumslateblue\":[123,104,238],\"mediumspringgreen\":[0,250,154],\"mediumturquoise\":[72,209,204],\"mediumvioletred\":[199,21,133],\"midnightblue\":[25,25,112],\"mintcream\":[245,255,250],\"mistyrose\":[255,228,225],\"moccasin\":[255,228,181],\"navajowhite\":[255,222,173],\"navy\":[0,0,128],\"oldlace\":[253,245,230],\"olive\":[128,128,0],\"olivedrab\":[107,142,35],\"orange\":[255,165,0],\"orangered\":[255,69,0],\"orchid\":[218,112,214],\"palegoldenrod\":[238,232,170],\"palegreen\":[152,251,152],\"paleturquoise\":[175,238,238],\"palevioletred\":[219,112,147],\"papayawhip\":[255,239,213],\"peachpuff\":[255,218,185],\"peru\":[205,133,63],\"pink\":[255,192,203],\"plum\":[221,160,221],\"powderblue\":[176,224,230],\"purple\":[128,0,128],\"rebeccapurple\":[102,51,153],\"red\":[255,0,0],\"rosybrown\":[188,143,143],\"royalblue\":[65,105,225],\"saddlebrown\":[139,69,19],\"salmon\":[250,128,114],\"sandybrown\":[244,164,96],\"seagreen\":[46,139,87],\"seashell\":[255,245,238],\"sienna\":[160,82,45],\"silver\":[192,192,192],\"skyblue\":[135,206,235],\"slateblue\":[106,90,205],\"slategray\":[112,128,144],\"slategrey\":[112,128,144],\"snow\":[255,250,250],\"springgreen\":[0,255,127],\"steelblue\":[70,130,180],\"tan\":[210,180,140],\"teal\":[0,128,128],\"thistle\":[216,191,216],\"tomato\":[255,99,71],\"turquoise\":[64,224,208],\"violet\":[238,130,238],\"wheat\":[245,222,179],\"white\":[255,255,255],\"whitesmoke\":[245,245,245],\"yellow\":[255,255,0],\"yellowgreen\":[154,205,50]},E=N,k=Object.hasOwnProperty,P=Object.create(null);for(var U in L)k.call(L,U)&&(P[L[U]]=U);var R=A.exports={to:{},get:{}};function B(e,t,r){return Math.min(Math.max(t,e),r)}function F(e){var t=Math.round(e).toString(16).toUpperCase();return t.length<2?\"0\"+t:t}R.get=function(e){var t,r;switch(e.substring(0,3).toLowerCase()){case\"hsl\":t=R.get.hsl(e),r=\"hsl\";break;case\"hwb\":t=R.get.hwb(e),r=\"hwb\";break;default:t=R.get.rgb(e),r=\"rgb\"}return t?{model:r,value:t}:null},R.get.rgb=function(e){if(!e)return null;var t,r,n,a=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(n=t[2],t=t[1],r=0;r<3;r++){var o=2*r;a[r]=parseInt(t.slice(o,o+2),16)}n&&(a[3]=parseInt(n,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(n=(t=t[1])[3],r=0;r<3;r++)a[r]=parseInt(t[r]+t[r],16);n&&(a[3]=parseInt(n+n,16)/255)}else if(t=e.match(/^rgba?\\\\(\\\\s*([+-]?\\\\d+)(?=[\\\\s,])\\\\s*(?:,\\\\s*)?([+-]?\\\\d+)(?=[\\\\s,])\\\\s*(?:,\\\\s*)?([+-]?\\\\d+)\\\\s*(?:[,|\\\\/]\\\\s*([+-]?[\\\\d\\\\.]+)(%?)\\\\s*)?\\\\)$/)){for(r=0;r<3;r++)a[r]=parseInt(t[r+1],0);t[4]&&(t[5]?a[3]=.01*parseFloat(t[4]):a[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\\\\(\\\\s*([+-]?[\\\\d\\\\.]+)\\\\%\\\\s*,?\\\\s*([+-]?[\\\\d\\\\.]+)\\\\%\\\\s*,?\\\\s*([+-]?[\\\\d\\\\.]+)\\\\%\\\\s*(?:[,|\\\\/]\\\\s*([+-]?[\\\\d\\\\.]+)(%?)\\\\s*)?\\\\)$/)))return(t=e.match(/^(\\\\w+)$/))?\"transparent\"===t[1]?[0,0,0,0]:k.call(L,t[1])?((a=L[t[1]])[3]=1,a):null:null;for(r=0;r<3;r++)a[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?a[3]=.01*parseFloat(t[4]):a[3]=parseFloat(t[4]))}for(r=0;r<3;r++)a[r]=B(a[r],0,255);return a[3]=B(a[3],0,1),a},R.get.hsl=function(e){if(!e)return null;var t=e.match(/^hsla?\\\\(\\\\s*([+-]?(?:\\\\d{0,3}\\\\.)?\\\\d+)(?:deg)?\\\\s*,?\\\\s*([+-]?[\\\\d\\\\.]+)%\\\\s*,?\\\\s*([+-]?[\\\\d\\\\.]+)%\\\\s*(?:[,|\\\\/]\\\\s*([+-]?(?=\\\\.\\\\d|\\\\d)(?:0|[1-9]\\\\d*)?(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)\\\\s*)?\\\\)$/);if(t){var r=parseFloat(t[4]);return[(parseFloat(t[1])%360+360)%360,B(parseFloat(t[2]),0,100),B(parseFloat(t[3]),0,100),B(isNaN(r)?1:r,0,1)]}return null},R.get.hwb=function(e){if(!e)return null;var t=e.match(/^hwb\\\\(\\\\s*([+-]?\\\\d{0,3}(?:\\\\.\\\\d+)?)(?:deg)?\\\\s*,\\\\s*([+-]?[\\\\d\\\\.]+)%\\\\s*,\\\\s*([+-]?[\\\\d\\\\.]+)%\\\\s*(?:,\\\\s*([+-]?(?=\\\\.\\\\d|\\\\d)(?:0|[1-9]\\\\d*)?(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)\\\\s*)?\\\\)$/);if(t){var r=parseFloat(t[4]);return[(parseFloat(t[1])%360+360)%360,B(parseFloat(t[2]),0,100),B(parseFloat(t[3]),0,100),B(isNaN(r)?1:r,0,1)]}return null},R.to.hex=function(){var e=E(arguments);return\"#\"+F(e[0])+F(e[1])+F(e[2])+(e[3]<1?F(Math.round(255*e[3])):\"\")},R.to.rgb=function(){var e=E(arguments);return e.length<4||1===e[3]?\"rgb(\"+Math.round(e[0])+\", \"+Math.round(e[1])+\", \"+Math.round(e[2])+\")\":\"rgba(\"+Math.round(e[0])+\", \"+Math.round(e[1])+\", \"+Math.round(e[2])+\", \"+e[3]+\")\"},R.to.rgb.percent=function(){var e=E(arguments),t=Math.round(e[0]/255*100),r=Math.round(e[1]/255*100),n=Math.round(e[2]/255*100);return e.length<4||1===e[3]?\"rgb(\"+t+\"%, \"+r+\"%, \"+n+\"%)\":\"rgba(\"+t+\"%, \"+r+\"%, \"+n+\"%, \"+e[3]+\")\"},R.to.hsl=function(){var e=E(arguments);return e.length<4||1===e[3]?\"hsl(\"+e[0]+\", \"+e[1]+\"%, \"+e[2]+\"%)\":\"hsla(\"+e[0]+\", \"+e[1]+\"%, \"+e[2]+\"%, \"+e[3]+\")\"},R.to.hwb=function(){var e=E(arguments),t=\"\";return e.length>=4&&1!==e[3]&&(t=\", \"+e[3]),\"hwb(\"+e[0]+\", \"+e[1]+\"%, \"+e[2]+\"%\"+t+\")\"},R.to.keyword=function(e){return P[e.slice(0,3)]};var D=A.exports,j={exports:{}},G={\"aliceblue\":[240,248,255],\"antiquewhite\":[250,235,215],\"aqua\":[0,255,255],\"aquamarine\":[127,255,212],\"azure\":[240,255,255],\"beige\":[245,245,220],\"bisque\":[255,228,196],\"black\":[0,0,0],\"blanchedalmond\":[255,235,205],\"blue\":[0,0,255],\"blueviolet\":[138,43,226],\"brown\":[165,42,42],\"burlywood\":[222,184,135],\"cadetblue\":[95,158,160],\"chartreuse\":[127,255,0],\"chocolate\":[210,105,30],\"coral\":[255,127,80],\"cornflowerblue\":[100,149,237],\"cornsilk\":[255,248,220],\"crimson\":[220,20,60],\"cyan\":[0,255,255],\"darkblue\":[0,0,139],\"darkcyan\":[0,139,139],\"darkgoldenrod\":[184,134,11],\"darkgray\":[169,169,169],\"darkgreen\":[0,100,0],\"darkgrey\":[169,169,169],\"darkkhaki\":[189,183,107],\"darkmagenta\":[139,0,139],\"darkolivegreen\":[85,107,47],\"darkorange\":[255,140,0],\"darkorchid\":[153,50,204],\"darkred\":[139,0,0],\"darksalmon\":[233,150,122],\"darkseagreen\":[143,188,143],\"darkslateblue\":[72,61,139],\"darkslategray\":[47,79,79],\"darkslategrey\":[47,79,79],\"darkturquoise\":[0,206,209],\"darkviolet\":[148,0,211],\"deeppink\":[255,20,147],\"deepskyblue\":[0,191,255],\"dimgray\":[105,105,105],\"dimgrey\":[105,105,105],\"dodgerblue\":[30,144,255],\"firebrick\":[178,34,34],\"floralwhite\":[255,250,240],\"forestgreen\":[34,139,34],\"fuchsia\":[255,0,255],\"gainsboro\":[220,220,220],\"ghostwhite\":[248,248,255],\"gold\":[255,215,0],\"goldenrod\":[218,165,32],\"gray\":[128,128,128],\"green\":[0,128,0],\"greenyellow\":[173,255,47],\"grey\":[128,128,128],\"honeydew\":[240,255,240],\"hotpink\":[255,105,180],\"indianred\":[205,92,92],\"indigo\":[75,0,130],\"ivory\":[255,255,240],\"khaki\":[240,230,140],\"lavender\":[230,230,250],\"lavenderblush\":[255,240,245],\"lawngreen\":[124,252,0],\"lemonchiffon\":[255,250,205],\"lightblue\":[173,216,230],\"lightcoral\":[240,128,128],\"lightcyan\":[224,255,255],\"lightgoldenrodyellow\":[250,250,210],\"lightgray\":[211,211,211],\"lightgreen\":[144,238,144],\"lightgrey\":[211,211,211],\"lightpink\":[255,182,193],\"lightsalmon\":[255,160,122],\"lightseagreen\":[32,178,170],\"lightskyblue\":[135,206,250],\"lightslategray\":[119,136,153],\"lightslategrey\":[119,136,153],\"lightsteelblue\":[176,196,222],\"lightyellow\":[255,255,224],\"lime\":[0,255,0],\"limegreen\":[50,205,50],\"linen\":[250,240,230],\"magenta\":[255,0,255],\"maroon\":[128,0,0],\"mediumaquamarine\":[102,205,170],\"mediumblue\":[0,0,205],\"mediumorchid\":[186,85,211],\"mediumpurple\":[147,112,219],\"mediumseagreen\":[60,179,113],\"mediumslateblue\":[123,104,238],\"mediumspringgreen\":[0,250,154],\"mediumturquoise\":[72,209,204],\"mediumvioletred\":[199,21,133],\"midnightblue\":[25,25,112],\"mintcream\":[245,255,250],\"mistyrose\":[255,228,225],\"moccasin\":[255,228,181],\"navajowhite\":[255,222,173],\"navy\":[0,0,128],\"oldlace\":[253,245,230],\"olive\":[128,128,0],\"olivedrab\":[107,142,35],\"orange\":[255,165,0],\"orangered\":[255,69,0],\"orchid\":[218,112,214],\"palegoldenrod\":[238,232,170],\"palegreen\":[152,251,152],\"paleturquoise\":[175,238,238],\"palevioletred\":[219,112,147],\"papayawhip\":[255,239,213],\"peachpuff\":[255,218,185],\"peru\":[205,133,63],\"pink\":[255,192,203],\"plum\":[221,160,221],\"powderblue\":[176,224,230],\"purple\":[128,0,128],\"rebeccapurple\":[102,51,153],\"red\":[255,0,0],\"rosybrown\":[188,143,143],\"royalblue\":[65,105,225],\"saddlebrown\":[139,69,19],\"salmon\":[250,128,114],\"sandybrown\":[244,164,96],\"seagreen\":[46,139,87],\"seashell\":[255,245,238],\"sienna\":[160,82,45],\"silver\":[192,192,192],\"skyblue\":[135,206,235],\"slateblue\":[106,90,205],\"slategray\":[112,128,144],\"slategrey\":[112,128,144],\"snow\":[255,250,250],\"springgreen\":[0,255,127],\"steelblue\":[70,130,180],\"tan\":[210,180,140],\"teal\":[0,128,128],\"thistle\":[216,191,216],\"tomato\":[255,99,71],\"turquoise\":[64,224,208],\"violet\":[238,130,238],\"wheat\":[245,222,179],\"white\":[255,255,255],\"whitesmoke\":[245,245,245],\"yellow\":[255,255,0],\"yellowgreen\":[154,205,50]},z={};for(var q in G)G.hasOwnProperty(q)&&(z[G[q]]=q);var H=j.exports={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};for(var V in H)if(H.hasOwnProperty(V)){if(!(\"channels\"in H[V]))throw new Error(\"missing channels property: \"+V);if(!(\"labels\"in H[V]))throw new Error(\"missing channel labels property: \"+V);if(H[V].labels.length!==H[V].channels)throw new Error(\"channel and label counts mismatch: \"+V);var $=H[V].channels,Q=H[V].labels;delete H[V].channels,delete H[V].labels,Object.defineProperty(H[V],\"channels\",{value:$}),Object.defineProperty(H[V],\"labels\",{value:Q})}H.rgb.hsl=function(e){var t,r,n=e[0]/255,a=e[1]/255,o=e[2]/255,s=Math.min(n,a,o),i=Math.max(n,a,o),c=i-s;return i===s?t=0:n===i?t=(a-o)/c:a===i?t=2+(o-n)/c:o===i&&(t=4+(n-a)/c),(t=Math.min(60*t,360))<0&&(t+=360),r=(s+i)/2,[t,100*(i===s?0:r<=.5?c/(i+s):c/(2-i-s)),100*r]},H.rgb.hsv=function(e){var t,r,n,a,o,s=e[0]/255,i=e[1]/255,c=e[2]/255,l=Math.max(s,i,c),u=l-Math.min(s,i,c),f=function(e){return(l-e)/6/u+.5};return 0===u?a=o=0:(o=u/l,t=f(s),r=f(i),n=f(c),s===l?a=n-r:i===l?a=1/3+t-n:c===l&&(a=2/3+r-t),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*l]},H.rgb.hwb=function(e){var t=e[0],r=e[1],n=e[2];return[H.rgb.hsl(e)[0],100*(1/255*Math.min(t,Math.min(r,n))),100*(n=1-1/255*Math.max(t,Math.max(r,n)))]},H.rgb.cmyk=function(e){var t,r=e[0]/255,n=e[1]/255,a=e[2]/255;return[100*((1-r-(t=Math.min(1-r,1-n,1-a)))/(1-t)||0),100*((1-n-t)/(1-t)||0),100*((1-a-t)/(1-t)||0),100*t]},H.rgb.keyword=function(e){var t=z[e];if(t)return t;var r,n,a,o=1/0;for(var s in G)if(G.hasOwnProperty(s)){var i=G[s],c=(n=e,a=i,Math.pow(n[0]-a[0],2)+Math.pow(n[1]-a[1],2)+Math.pow(n[2]-a[2],2));c<o&&(o=c,r=s)}return r},H.keyword.rgb=function(e){return G[e]},H.rgb.xyz=function(e){var t=e[0]/255,r=e[1]/255,n=e[2]/255;return[100*(.4124*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.3576*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)+.1805*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*t+.7152*r+.0722*n),100*(.0193*t+.1192*r+.9505*n)]},H.rgb.lab=function(e){var t=H.rgb.xyz(e),r=t[0],n=t[1],a=t[2];return n/=100,a/=108.883,r=(r/=95.047)>.008856?Math.pow(r,1/3):7.787*r+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(r-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]},H.hsl.rgb=function(e){var t,r,n,a,o,s=e[0]/360,i=e[1]/100,c=e[2]/100;if(0===i)return[o=255*c,o,o];t=2*c-(r=c<.5?c*(1+i):c+i-c*i),a=[0,0,0];for(var l=0;l<3;l++)(n=s+1/3*-(l-1))<0&&n++,n>1&&n--,o=6*n<1?t+6*(r-t)*n:2*n<1?r:3*n<2?t+(r-t)*(2/3-n)*6:t,a[l]=255*o;return a},H.hsl.hsv=function(e){var t=e[0],r=e[1]/100,n=e[2]/100,a=r,o=Math.max(n,.01);return r*=(n*=2)<=1?n:2-n,a*=o<=1?o:2-o,[t,100*(0===n?2*a/(o+a):2*r/(n+r)),100*((n+r)/2)]},H.hsv.rgb=function(e){var t=e[0]/60,r=e[1]/100,n=e[2]/100,a=Math.floor(t)%6,o=t-Math.floor(t),s=255*n*(1-r),i=255*n*(1-r*o),c=255*n*(1-r*(1-o));switch(n*=255,a){case 0:return[n,c,s];case 1:return[i,n,s];case 2:return[s,n,c];case 3:return[s,i,n];case 4:return[c,s,n];case 5:return[n,s,i]}},H.hsv.hsl=function(e){var t,r,n,a=e[0],o=e[1]/100,s=e[2]/100,i=Math.max(s,.01);return n=(2-o)*s,r=o*i,[a,100*(r=(r/=(t=(2-o)*i)<=1?t:2-t)||0),100*(n/=2)]},H.hwb.rgb=function(e){var t,r,n,a,o,s,i,c=e[0]/360,l=e[1]/100,u=e[2]/100,f=l+u;switch(f>1&&(l/=f,u/=f),n=6*c-(t=Math.floor(6*c)),1&t&&(n=1-n),a=l+n*((r=1-u)-l),t){default:case 6:case 0:o=r,s=a,i=l;break;case 1:o=a,s=r,i=l;break;case 2:o=l,s=r,i=a;break;case 3:o=l,s=a,i=r;break;case 4:o=a,s=l,i=r;break;case 5:o=r,s=l,i=a}return[255*o,255*s,255*i]},H.cmyk.rgb=function(e){var t=e[0]/100,r=e[1]/100,n=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]},H.xyz.rgb=function(e){var t,r,n,a=e[0]/100,o=e[1]/100,s=e[2]/100;return r=-.9689*a+1.8758*o+.0415*s,n=.0557*a+-.204*o+1.057*s,t=(t=3.2406*a+-1.5372*o+-.4986*s)>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,[255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1)),255*(n=Math.min(Math.max(0,n),1))]},H.xyz.lab=function(e){var t=e[0],r=e[1],n=e[2];return r/=100,n/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116)-16,500*(t-r),200*(r-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]},H.lab.xyz=function(e){var t,r,n,a=e[0];t=e[1]/500+(r=(a+16)/116),n=r-e[2]/200;var o=Math.pow(r,3),s=Math.pow(t,3),i=Math.pow(n,3);return r=o>.008856?o:(r-16/116)/7.787,t=s>.008856?s:(t-16/116)/7.787,n=i>.008856?i:(n-16/116)/7.787,[t*=95.047,r*=100,n*=108.883]},H.lab.lch=function(e){var t,r=e[0],n=e[1],a=e[2];return(t=360*Math.atan2(a,n)/2/Math.PI)<0&&(t+=360),[r,Math.sqrt(n*n+a*a),t]},H.lch.lab=function(e){var t,r=e[0],n=e[1];return t=e[2]/360*2*Math.PI,[r,n*Math.cos(t),n*Math.sin(t)]},H.rgb.ansi16=function(e){var t=e[0],r=e[1],n=e[2],a=1 in arguments?arguments[1]:H.rgb.hsv(e)[2];if(0===(a=Math.round(a/50)))return 30;var o=30+(Math.round(n/255)<<2|Math.round(r/255)<<1|Math.round(t/255));return 2===a&&(o+=60),o},H.hsv.ansi16=function(e){return H.rgb.ansi16(H.hsv.rgb(e),e[2])},H.rgb.ansi256=function(e){var t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},H.ansi16.rgb=function(e){var t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),[t=t/10.5*255,t,t];var r=.5*(1+~~(e>50));return[(1&t)*r*255,(t>>1&1)*r*255,(t>>2&1)*r*255]},H.ansi256.rgb=function(e){if(e>=232){var t=10*(e-232)+8;return[t,t,t]}var r;return e-=16,[Math.floor(e/36)/5*255,Math.floor((r=e%36)/6)/5*255,r%6/5*255]},H.rgb.hex=function(e){var t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return\"000000\".substring(t.length)+t},H.hex.rgb=function(e){var t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];var r=t[0];3===t[0].length&&(r=r.split(\"\").map((function(e){return e+e})).join(\"\"));var n=parseInt(r,16);return[n>>16&255,n>>8&255,255&n]},H.rgb.hcg=function(e){var t,r=e[0]/255,n=e[1]/255,a=e[2]/255,o=Math.max(Math.max(r,n),a),s=Math.min(Math.min(r,n),a),i=o-s;return t=i<=0?0:o===r?(n-a)/i%6:o===n?2+(a-r)/i:4+(r-n)/i+4,t/=6,[360*(t%=1),100*i,100*(i<1?s/(1-i):0)]},H.hsl.hcg=function(e){var t=e[1]/100,r=e[2]/100,n=1,a=0;return(n=r<.5?2*t*r:2*t*(1-r))<1&&(a=(r-.5*n)/(1-n)),[e[0],100*n,100*a]},H.hsv.hcg=function(e){var t=e[1]/100,r=e[2]/100,n=t*r,a=0;return n<1&&(a=(r-n)/(1-n)),[e[0],100*n,100*a]},H.hcg.rgb=function(e){var t=e[0]/360,r=e[1]/100,n=e[2]/100;if(0===r)return[255*n,255*n,255*n];var a,o=[0,0,0],s=t%1*6,i=s%1,c=1-i;switch(Math.floor(s)){case 0:o[0]=1,o[1]=i,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=i;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=i,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-r)*n,[255*(r*o[0]+a),255*(r*o[1]+a),255*(r*o[2]+a)]},H.hcg.hsv=function(e){var t=e[1]/100,r=t+e[2]/100*(1-t),n=0;return r>0&&(n=t/r),[e[0],100*n,100*r]},H.hcg.hsl=function(e){var t=e[1]/100,r=e[2]/100*(1-t)+.5*t,n=0;return r>0&&r<.5?n=t/(2*r):r>=.5&&r<1&&(n=t/(2*(1-r))),[e[0],100*n,100*r]},H.hcg.hwb=function(e){var t=e[1]/100,r=t+e[2]/100*(1-t);return[e[0],100*(r-t),100*(1-r)]},H.hwb.hcg=function(e){var t=e[1]/100,r=1-e[2]/100,n=r-t,a=0;return n<1&&(a=(r-n)/(1-n)),[e[0],100*n,100*a]},H.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},H.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},H.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},H.gray.hsl=H.gray.hsv=function(e){return[0,0,e[0]]},H.gray.hwb=function(e){return[0,100,e[0]]},H.gray.cmyk=function(e){return[0,0,0,e[0]]},H.gray.lab=function(e){return[e[0],0,0]},H.gray.hex=function(e){var t=255&Math.round(e[0]/100*255),r=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return\"000000\".substring(r.length)+r},H.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};var K=j.exports,Z=K;function X(e){var t=function(){for(var e={},t=Object.keys(Z),r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}(),r=[e];for(t[e].distance=0;r.length;)for(var n=r.pop(),a=Object.keys(Z[n]),o=a.length,s=0;s<o;s++){var i=a[s],c=t[i];-1===c.distance&&(c.distance=t[n].distance+1,c.parent=n,r.unshift(i))}return t}function Y(e,t){return function(r){return t(e(r))}}function J(e,t){for(var r=[t[e].parent,e],n=Z[t[e].parent][e],a=t[e].parent;t[a].parent;)r.unshift(t[a].parent),n=Y(Z[t[a].parent][a],n),a=t[a].parent;return n.conversion=r,n}var W=K,ee=function(e){for(var t=X(e),r={},n=Object.keys(t),a=n.length,o=0;o<a;o++){var s=n[o];null!==t[s].parent&&(r[s]=J(s,t))}return r},te={};Object.keys(W).forEach((function(e){te[e]={},Object.defineProperty(te[e],\"channels\",{value:W[e].channels}),Object.defineProperty(te[e],\"labels\",{value:W[e].labels});var t=ee(e);Object.keys(t).forEach((function(r){var n=t[r];te[e][r]=function(e){var t=function(t){if(null==t)return t;arguments.length>1&&(t=Array.prototype.slice.call(arguments));var r=e(t);if(\"object\"==typeof r)for(var n=r.length,a=0;a<n;a++)r[a]=Math.round(r[a]);return r};return\"conversion\"in e&&(t.conversion=e.conversion),t}(n),te[e][r].raw=function(e){var t=function(t){return null==t?t:(arguments.length>1&&(t=Array.prototype.slice.call(arguments)),e(t))};return\"conversion\"in e&&(t.conversion=e.conversion),t}(n)}))}));var re=D,ne=te,ae=[].slice,oe=[\"keyword\",\"gray\",\"hex\"],se={};Object.keys(ne).forEach((function(e){se[ae.call(ne[e].labels).sort().join(\"\")]=e}));var ie={};function ce(e,t){if(!(this instanceof ce))return new ce(e,t);if(t&&t in oe&&(t=null),t&&!(t in ne))throw new Error(\"Unknown model: \"+t);var r,n;if(null==e)this.model=\"rgb\",this.color=[0,0,0],this.valpha=1;else if(e instanceof ce)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if(\"string\"==typeof e){var a=re.get(e);if(null===a)throw new Error(\"Unable to parse color from string: \"+e);this.model=a.model,n=ne[this.model].channels,this.color=a.value.slice(0,n),this.valpha=\"number\"==typeof a.value[n]?a.value[n]:1}else if(e.length){this.model=t||\"rgb\",n=ne[this.model].channels;var o=ae.call(e,0,n);this.color=fe(o,n),this.valpha=\"number\"==typeof e[n]?e[n]:1}else if(\"number\"==typeof e)e&=16777215,this.model=\"rgb\",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var s=Object.keys(e);\"alpha\"in e&&(s.splice(s.indexOf(\"alpha\"),1),this.valpha=\"number\"==typeof e.alpha?e.alpha:0);var i=s.sort().join(\"\");if(!(i in se))throw new Error(\"Unable to parse color from object: \"+JSON.stringify(e));this.model=se[i];var c=ne[this.model].labels,l=[];for(r=0;r<c.length;r++)l.push(e[c[r]]);this.color=fe(l)}if(ie[this.model])for(n=ne[this.model].channels,r=0;r<n;r++){var u=ie[this.model][r];u&&(this.color[r]=u(this.color[r]))}this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze&&Object.freeze(this)}function le(e,t,r){return(e=Array.isArray(e)?e:[e]).forEach((function(e){(ie[e]||(ie[e]=[]))[t]=r})),e=e[0],function(n){var a;return arguments.length?(r&&(n=r(n)),(a=this[e]()).color[t]=n,a):(a=this[e]().color[t],r&&(a=r(a)),a)}}function ue(e){return function(t){return Math.max(0,Math.min(e,t))}}function fe(e,t){for(var r=0;r<t;r++)\"number\"!=typeof e[r]&&(e[r]=0);return e}function he(e){return null==e}function de(e){return\"object\"==typeof e&&!!e}function me(e){return e/Math.PI*180}ce.prototype={toString:function(){return this.string()},toJSON:function(){return this[this.model]()},string:function(e){var t=this.model in re.to?this:this.rgb(),r=1===(t=t.round(\"number\"==typeof e?e:1)).valpha?t.color:t.color.concat(this.valpha);return re.to[t.model](r)},percentString:function(e){var t=this.rgb().round(\"number\"==typeof e?e:1),r=1===t.valpha?t.color:t.color.concat(this.valpha);return re.to.rgb.percent(r)},array:function(){return 1===this.valpha?this.color.slice():this.color.concat(this.valpha)},object:function(){for(var e={},t=ne[this.model].channels,r=ne[this.model].labels,n=0;n<t;n++)e[r[n]]=this.color[n];return 1!==this.valpha&&(e.alpha=this.valpha),e},unitArray:function(){var e=this.rgb().color;return e[0]/=255,e[1]/=255,e[2]/=255,1!==this.valpha&&e.push(this.valpha),e},unitObject:function(){var e=this.rgb().object();return e.r/=255,e.g/=255,e.b/=255,1!==this.valpha&&(e.alpha=this.valpha),e},round:function(e){return e=Math.max(e||0,0),new ce(this.color.map(function(e){return function(t){return function(e,t){return Number(e.toFixed(t))}(t,e)}}(e)).concat(this.valpha),this.model)},alpha:function(e){return arguments.length?new ce(this.color.concat(Math.max(0,Math.min(1,e))),this.model):this.valpha},red:le(\"rgb\",0,ue(255)),green:le(\"rgb\",1,ue(255)),blue:le(\"rgb\",2,ue(255)),hue:le([\"hsl\",\"hsv\",\"hsl\",\"hwb\",\"hcg\"],0,(function(e){return(e%360+360)%360})),saturationl:le(\"hsl\",1,ue(100)),lightness:le(\"hsl\",2,ue(100)),saturationv:le(\"hsv\",1,ue(100)),value:le(\"hsv\",2,ue(100)),chroma:le(\"hcg\",1,ue(100)),gray:le(\"hcg\",2,ue(100)),white:le(\"hwb\",1,ue(100)),wblack:le(\"hwb\",2,ue(100)),cyan:le(\"cmyk\",0,ue(100)),magenta:le(\"cmyk\",1,ue(100)),yellow:le(\"cmyk\",2,ue(100)),black:le(\"cmyk\",3,ue(100)),x:le(\"xyz\",0,ue(100)),y:le(\"xyz\",1,ue(100)),z:le(\"xyz\",2,ue(100)),l:le(\"lab\",0,ue(100)),a:le(\"lab\",1),b:le(\"lab\",2),keyword:function(e){return arguments.length?new ce(e):ne[this.model].keyword(this.color)},hex:function(e){return arguments.length?new ce(e):re.to.hex(this.rgb().round().color)},rgbNumber:function(){var e=this.rgb().color;return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},luminosity:function(){for(var e=this.rgb().color,t=[],r=0;r<e.length;r++){var n=e[r]/255;t[r]=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)}return.2126*t[0]+.7152*t[1]+.0722*t[2]},contrast:function(e){var t=this.luminosity(),r=e.luminosity();return t>r?(t+.05)/(r+.05):(r+.05)/(t+.05)},level:function(e){var t=this.contrast(e);return t>=7.1?\"AAA\":t>=4.5?\"AA\":\"\"},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),t=0;t<3;t++)e.color[t]=255-e.color[t];return e},lighten:function(e){var t=this.hsl();return t.color[2]+=t.color[2]*e,t},darken:function(e){var t=this.hsl();return t.color[2]-=t.color[2]*e,t},saturate:function(e){var t=this.hsl();return t.color[1]+=t.color[1]*e,t},desaturate:function(e){var t=this.hsl();return t.color[1]-=t.color[1]*e,t},whiten:function(e){var t=this.hwb();return t.color[1]+=t.color[1]*e,t},blacken:function(e){var t=this.hwb();return t.color[2]+=t.color[2]*e,t},grayscale:function(){var e=this.rgb().color,t=.3*e[0]+.59*e[1]+.11*e[2];return ce.rgb(t,t,t)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var t=this.hsl(),r=t.color[0];return r=(r=(r+e)%360)<0?360+r:r,t.color[0]=r,t},mix:function(e,t){if(!e||!e.rgb)throw new Error('Argument to \"mix\" was not a Color instance, but rather an instance of '+typeof e);var r=e.rgb(),n=this.rgb(),a=void 0===t?.5:t,o=2*a-1,s=r.alpha()-n.alpha(),i=((o*s==-1?o:(o+s)/(1+o*s))+1)/2,c=1-i;return ce.rgb(i*r.red()+c*n.red(),i*r.green()+c*n.green(),i*r.blue()+c*n.blue(),r.alpha()*a+n.alpha()*(1-a))}},Object.keys(ne).forEach((function(e){if(-1===oe.indexOf(e)){var t=ne[e].channels;ce.prototype[e]=function(){if(this.model===e)return new ce(this);if(arguments.length)return new ce(arguments,e);var r,n=\"number\"==typeof arguments[t]?t:this.valpha;return new ce((r=ne[this.model][e].raw(this.color),Array.isArray(r)?r:[r]).concat(n),e)},ce[e]=function(r){return\"number\"==typeof r&&(r=fe(ae.call(arguments),t)),new ce(r,e)}}}));const pe=[1,1,1,1,2,2,3,0];function be(e){const t=e.length;let r=\"\";for(let n=0;n<t;){let a=e[n++];if(128&a){let r=pe[a>>3&7];if(!(64&a)||!r||n+r>t)return null;for(a&=63>>r;r>0;r-=1){const t=e[n++];if(128!=(192&t))return null;a=a<<6|63&t}}r+=String.fromCharCode(a)}return r}new Array(3),new Array(3);const ge=[1/6378137,1/6378137,1/6356752.314245179],ye=[1/40680631590769,1/40680631590769,1/40408299984661.445],_e=new Array(3),Te=new Array(3),ve=new Array(3);function we(e,t){const r=ye,n=function(e,t,r,n,a){const o=t[0],s=t[1],i=t[2],c=r[0],l=r[1],u=r[2],f=o*o*c*c,h=s*s*l*l,d=i*i*u*u,m=f+h+d,p=Math.sqrt(1/m),b=function(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}(Oe,t,p);if(m<a)return isFinite(p)?b:void 0;const g=n[0],y=n[1],_=n[2],T=Ae;T[0]=b[0]*g*2,T[1]=b[1]*y*2,T[2]=b[2]*_*2;let v,w,O,A,I,M,x,C,S,N,L,E=(1-p)*Me(t)/(.5*Me(T)),k=0;do{E-=k,O=1/(1+E*g),A=1/(1+E*y),I=1/(1+E*_),M=O*O,x=A*A,C=I*I,S=M*O,N=x*A,L=C*I,v=f*M+h*x+d*C-1,w=f*S*g+h*N*y+d*L*_;k=v/(-2*w)}while(Math.abs(v)>Ie);return e[0]=o*O,e[1]=s*A,e[2]=i*I,e}(_e,t,ge,r,.1);let a=_(Te,n,r);a=function(e,t){const r=t[0],n=t[1],a=t[2];let o=r*r+n*n+a*a;o>0&&(o=Math.sqrt(o),e[0]=t[0]/o,e[1]=t[1]/o,e[2]=t[2]/o);return e}(a,a);const o=y(ve,t,n),s=Math.atan2(a[1],a[0]),i=Math.asin(a[2]),c=(l=b(o,t),(Math.sign?Math.sign(l):0==(l=+l)||isNaN(l)?Number(l):l>0?1:-1)*Me(o));var l;return e[0]=me(s),e[1]=me(i),e[2]=c,e}const Oe=new Array(3),Ae=new Array(3),Ie=1e-12;function Me(e){return u(e)}function xe(e,t){let r=\"\";for(let n=0;n<4;n++){const a=e.getUint8(t+n);r+=String.fromCharCode(a)}return r}const Ce=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):null;function Se(e,t,r){const n=new Uint8Array(e,t,r);return Ce?JSON.parse(Ce.decode(n)):JSON.parse(be(n))}function Ne(e,t,r){const n=new Uint8Array(e,t,r);return Ce?JSON.parse(Ce.decode(n)):JSON.parse(be(n))}function Le(e,t,r){return{offset:t,byteLength:r}}function Ee(e,t,r,n){const{byteOffset:a,componentType:o,type:s}=e,{ctor:i,type:c}=function(e){return Ue[e]}(o||\"UNSIGNED_SHORT\"),l=function(e){if(!e)return 1;return Pe[e]}(s);return{byteStride:0,byteOffset:a+r,itemSize:l,count:n*l,componentType:c,array:new i(t,r+a,n*l)}}function ke(e,t,r,n){const a=Ee(e,t,r,n);return a.array.buffer.byteLength!==t.byteLength&&(a.array=a.array.slice()),a}const Pe={\"SCALAR\":1,\"VEC2\":2,\"VEC3\":3,\"VEC4\":4};const Ue={\"BYTE\":{ctor:Int8Array,type:5120,name:\"Int8Array\"},\"UNSIGNED_BYTE\":{ctor:Uint8Array,type:5121,name:\"Uint8Array\"},\"SHORT\":{ctor:Int16Array,type:5122,name:\"Int16Array\"},\"UNSIGNED_SHORT\":{ctor:Uint16Array,type:5123,name:\"Uint16Array\"},\"INT\":{ctor:Int32Array,type:5124,name:\"Int32Array\"},\"UNSIGNED_INT\":{ctor:Uint32Array,type:5125,name:\"Uint32Array\"},\"FLOAT\":{ctor:Float32Array,type:5126,name:\"Float32Array\"},\"DOUBLE\":{ctor:Float64Array,type:5126,name:\"Float64Array\"}};function Re(e){for(const t in Ue)if(e===Ue[t].ctor)return Ue[t].type;throw new Error(\"unrecognized ctor:\"+e)}function Be(e,t,r,n){const a=e,o=t.length/3;for(let e=0;e<o;e++)a[3*e]=t[3*e]/65535*n[0]+r[0],a[3*e+1]=t[3*e+1]/65535*n[1]+r[1],a[3*e+2]=t[3*e+2]/65535*n[2]+r[2];return a}function Fe(e,t,r){const n=e.getUint32(12,!0),a=e.getUint32(16,!0),o=e.getUint32(20,!0),s=e.getUint32(24,!0),i=e.buffer;let c,l={},u={},f=null;n>0&&(l=Se(i,t,n),t+=n),a>0&&(c=function(e,t,r){return{offset:t,byteLength:r}}(0,t,a),t+=a),o>0&&(u=Ne(i,t,o),t+=o);const h=Le(0,t,s);return f=i.slice(h.offset,h.offset+h.byteLength),r.push(f),{featureTable:l,featureTableBin:c,batchTable:u,batchTableBin:f}}const De={5120:Int8Array,5122:Int16Array,5124:Int32Array,5121:Uint8Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function je(e){for(const t in De)if(e===De[t])return+t;throw new Error(\"unrecognized ctor:\"+e)}let Ge=null;function ze(){return Ge||(Ge={\"image/crn\":n.crn&&n.crn(),\"image/ktx2\":n.ktx2&&n.ktx2(),\"image/cttf\":n.ktx2&&n.ktx2(),\"draco\":n.draco&&n.draco()}),Ge}const{Ajax:qe,GLTFLoader:He}=a();class Ve{constructor(e,t,r){this._requestImage=e,this._loaderCtor=t||He,this._supportedFormats=r,this._decoders=ze()}static createEmptyB3DM(){return{featureTable:null,batchTable:null,gltf:{}}}load(e,t,r=0,n=0,a){return t?(n||(n=t.byteLength),this._parse(e,t,r,n,a)):qe.getArrayBuffer(e,{}).then((t=>{const a=t.data;return n||(n=a.byteLength),this._parse(e,a,r,n)}))}_parse(e,t,r,n,a){const o=a&&a.maxTextureSize,s=this._readB3DM(t,r,n,e);if(s.error)return Promise.resolve(s);const i=e.substring(0,e.lastIndexOf(\"/\"));let c;try{c=new this._loaderCtor(i,s.glb,{transferable:!0,requestImage:this._requestImage,decoders:this._decoders,supportedFormats:this._supportedFormats,maxTextureSize:o})}catch(e){return Promise.resolve({error:e})}return c.load({skipAttributeTransform:!1}).then((t=>{t.url=\\`${e}e}-${e}r}-${e}n}\\`;const a=c.transferables;for(let e=0;e<s.transferables.length;e++)a.indexOf(s.transferables[e])<0&&a.push(s.transferables[e]);return{magic:\"b3dm\",count:s.count,transferables:a,featureTable:s.featureTable,batchTable:s.batchTable,batchTableBin:s.batchTableBin,gltf:t}}))}_readB3DM(e,t,r,n){const a=new DataView(e,t,r),o=a.getUint32(4,!0);if(1!==o){const e=\"Unsupported b3dm version: \"+o+\", url:\"+n;return console.warn(e),{error:e}}if(a.getUint32(8,!0)!==a.byteLength){const e=\"Length in b3dm header is inconsistent with b3dm's byte length, url: \"+n;return console.warn(e),{error:e}}let s,i=a.getUint32(12,!0),c=a.getUint32(16,!0),l=a.getUint32(20,!0),u=a.getUint32(24,!0),f=28+t;l>=570425344?(f-=8,s=i,l=c,u=0,i=0,c=0):u>=570425344&&(f-=4,s=l,l=i,u=c,i=0,c=0);const h=[e];let d,m,p;if(i>0?(d=Se(e,f,i),f+=i,s=d.BATCH_LENGTH):d={\"BATCH_LENGTH\":s},c>0&&(f+=c),l>0&&(m=Ne(e,f,l),f+=l,u>0)){const t=Le(0,f,u);p=e.slice(t.offset,t.offset+t.byteLength),f+=u,h.push(p)}const b=d.BATCH_LENGTH,g={};if(d&&d.BATCH_ID){g.BATCH_ID=ke(d.BATCH_ID,e,undefined.offset,b);const t=g.BATCH_ID.array&&g.BATCH_ID.array.buffer;t&&h.indexOf(t)<0&&h.push(t)}return{count:s,transferables:h,featureTable:d,batchTable:m,batchTableBin:p,b3dm:g,glb:{buffer:e,byteOffset:f,byteLength:a.byteLength+a.byteOffset-f}}}_readBatchTable(){return null}}const{Ajax:$e,GLTFLoader:Qe}=a();class Ke{constructor(e,t,r,n){this._requestImage=e,this._loaderCtor=t||Qe,this._supportedFormats=r,this._decoders=ze(),this._maxTextureSize=n}load(e,t,r=0,n=0,a){return t?(n||(n=t.byteLength),this._parse(e,t,r,n,a)):$e.getArrayBuffer(e,{}).then((t=>{const a=t.data;return n||(n=a.byteLength),this._parse(e,a,r,n)}))}_parse(e,t,r,n,a){return this._parseGLTF(e,t,r,n,a).then((({gltf:a,transferables:o})=>{const s=this._readI3DM(t,r,n,e);if(s.error)return Promise.resolve(s);for(let e=0;e<o.length;e++)-1===s.transferables.indexOf(o[e])&&s.transferables.push(o[e]);return delete a.transferables,Promise.resolve({magic:\"i3dm\",count:s.count,transferables:s.transferables,featureTable:s.featureTable,batchTable:s.batchTable,batchTableBin:s.batchTableBin,i3dm:s.i3dm,gltf:a})}))}_parseGLTF(e,t,r,n,a){const o=a&&a.maxTextureSize,s={transferable:!0,requestImage:this._requestImage,decoders:this._decoders,supportedFormats:this._supportedFormats,maxTextureSize:o},i=new DataView(t,r,n),c=32+i.getUint32(12,!0)+i.getUint32(16,!0)+i.getUint32(20,!0)+i.getUint32(24,!0);if(0===i.getUint32(28,!0)){let n=be(new Uint8Array(t,c+r,i.byteLength-c));-1==n.indexOf(\"://\")&&(n=e.substring(0,e.lastIndexOf(\"/\"))+\"/\"+n);return n.indexOf(\".glb\")>0?$e.getArrayBuffer(n,{}).then((e=>this._createGLTFLoader(n,{buffer:e.data,byteOffset:0},s))):$e.getJSON(n,{}).then((e=>this._createGLTFLoader(n,e,s)))}{const n={buffer:t,byteOffset:c+r,byteLength:i.byteLength-c};return this._createGLTFLoader(e,n,s)}}_createGLTFLoader(e,t,r){const n=e.substring(0,e.lastIndexOf(\"/\")),a=new this._loaderCtor(n,t,r);return a.load({skipAttributeTransform:!0}).then((r=>{let n=0,o=0;return t.buffer&&(n=t.byteOffset||0,o=t.byteLength||0),r.url=\\`${e}e}-${e}n}-${e}o}\\`,{transferables:a.transferables,gltf:r}}))}_readI3DM(e,t,r,n){const a=new DataView(e,t,r),o=a.getUint32(4,!0);if(1!==o){const e=\"Unsupported pnts version: \"+o+\", url:\"+n;return console.warn(e),{error:e}}if(a.getUint32(8,!0)!==a.byteLength){const e=\"Length in pnts header is inconsistent with pnts's byte length, url: \"+n;return console.warn(e),{error:e}}const s=[e],{featureTable:i,featureTableBin:c,batchTable:l,batchTableBin:u}=Fe(a,32+t,s),f={},h=i.INSTANCES_LENGTH;if(i.POSITION){const{byteOffset:t}=i.POSITION;f.POSITION={byteStride:0,byteOffset:0,itemSize:3,count:h,componentType:5126,array:new Float32Array(e,t+c.offset,3*h).slice()},s.push(f.POSITION.array.buffer)}else if(i.POSITION_QUANTIZED){const t=i.QUANTIZED_VOLUME_OFFSET,r=i.QUANTIZED_VOLUME_SCALE,{byteOffset:n}=i.POSITION_QUANTIZED;f.POSITION={byteStride:12,byteOffset:0,itemSize:3,count:h,componentType:5126,array:this._convertQuantizedPosition(new Uint16Array(e,n+c.offset,3*h),t,r)},s.push(f.POSITION.array.buffer)}if(i.BATCH_ID){f.BATCH_ID=ke(i.BATCH_ID,e,c.offset,h);const t=f.BATCH_ID.array&&f.BATCH_ID.array.buffer;t&&s.indexOf(t)<0&&s.push(t)}if(i.NORMAL_UP){let{byteOffset:t}=i.NORMAL_UP;f.NORMAL_UP={byteStride:0,byteOffset:0,itemSize:3,count:h,componentType:5126,array:new Float32Array(e,t+c.offset,3*h).slice()},s.push(f.NORMAL_UP.array.buffer),t=i.NORMAL_RIGHT.byteOffset,f.NORMAL_RIGHT={byteStride:0,byteOffset:0,itemSize:3,count:h,componentType:5126,array:new Float32Array(e,t+c.offset,3*h).slice()},s.push(f.NORMAL_RIGHT.array.buffer)}else if(i.NORMAL_UP_OCT32P){let{byteOffset:t}=i.NORMAL_UP_OCT32P;f.NORMAL_UP={byteStride:0,byteOffset:0,itemSize:3,count:h,componentType:5126,array:this._decodeOCT32p(new Uint16Array(e,t+c.offset,2*h))},s.push(f.NORMAL_UP.array.buffer),t=i.NORMAL_RIGHT_OCT32P.byteOffset,f.NORMAL_RIGHT={byteStride:0,byteOffset:0,itemSize:3,count:h,componentType:5126,array:this._decodeOCT32p(new Uint16Array(e,t+c.offset,2*h))},s.push(f.NORMAL_RIGHT.array.buffer)}if(i.SCALE){const{byteOffset:t}=i.SCALE;f.SCALE={byteStride:0,byteOffset:0,itemSize:1,count:h,componentType:5126,array:new Float32Array(e,t+c.offset,h).slice()},s.push(f.SCALE.array.buffer)}else if(i.SCALE_NON_UNIFORM){const{byteOffset:t}=i.SCALE_NON_UNIFORM;f.SCALE_NON_UNIFORM={byteStride:0,byteOffset:0,itemSize:3,count:h,componentType:5126,array:new Float32Array(e,t+c.offset,3*h).slice()},s.push(f.SCALE_NON_UNIFORM.array.buffer)}return{count:h,batchTable:l,batchTableBin:u,featureTable:i,i3dm:f,transferables:s}}_decodeOCT32p(e){const t=e.length/2,r=new Float32Array(3*t),n=[];for(let a=0;a<t;a++)Ze(n,e[2*a],e[2*a+1],65535),r[3*a]=n[0],r[3*a+1]=n[1],r[3*a+2]=n[2];return r}_convertQuantizedPosition(e,t,r){return Be(new Float32Array(e.length),e,t,r)}_readBatchTable(){return null}}function Ze(e,t,r,n){if(e[0]=Xe(t,n),e[1]=Xe(r,n),e[2]=1-(Math.abs(e[0])+Math.abs(e[1])),e[2]<0){const t=e[0];e[0]=(1-Math.abs(e[1]))*Ye(t),e[1]=(1-Math.abs(t))*Ye(e[1])}return p(e,e)}function Xe(e,t){return function(e,t,r){return e<t?t:e>r?r:e}(e,0,t=function(e,t){if(null!=e)return e;return t}(t,255))/t*2-1}function Ye(e){return e<0?-1:1}const{Ajax:Je}=a();class We{constructor(){}load(e,t,r=0,n=0){return t?(n||(n=t.byteLength),this._parse(e,t,r,n)):Je.getArrayBuffer(e,{}).then((t=>{const a=t.data;return n||(n=a.byteLength),this._parse(e,a,r,n)}))}_parse(e,t,r,n){return this._readPNTS(t,r,n,e).then((e=>e.error?e:{magic:\"pnts\",count:e.count,transferables:e.transferables,featureTable:e.featureTable,batchTable:e.batchTable,batchTableBin:e.batchTableBin,pnts:e.pnts}))}_readPNTS(e,t,r,n){const a=new DataView(e,t,r),o=a.getUint32(4,!0);if(1!==o){const e=\"Unsupported pnts version: \"+o+\", url:\"+n;return console.warn(e),{error:e}}if(a.getUint32(8,!0)!==a.byteLength){const e=\"Length in pnts header is inconsistent with pnts's byte length, url: \"+n;return console.warn(e),{error:e}}const s=[e],{featureTable:i,featureTableBin:c,batchTable:l,batchTableBin:u}=Fe(a,t+28,s),f=i.QUANTIZED_VOLUME_OFFSET,h=i.QUANTIZED_VOLUME_SCALE,d=i.POINTS_LENGTH;let m,p={};if(i.extensions&&i.extensions[\"3DTILES_draco_point_compression\"]){p=i.extensions[\"3DTILES_draco_point_compression\"],m=new DataView(e,p.byteOffset+c.offset,p.byteLength);const t={attributes:p.properties,useUniqueIDs:!1};return this._draco||(this._draco=ze().draco),this._draco(m,t).then((t=>{const r=t.attributes;!i.POSITION&&!i.POSITION_QUANTIZED||r.POSITION||r.POSITION_QUANTIZED||(r.POSITION=i.POSITION,r.POSITION_QUANTIZED=i.POSITION_QUANTIZED),!(i.RGB||i.RGBA||i.RGB565)||r.RGB||r.RGBA||r.RGB565||(r.RGB=i.RGB,r.RGBA=i.RGBA,r.RGB565=i.RGB565),!i.NORMAL&&!i.NORMAL_OCT16P||r.NORMAL||r.NORMAL_OCT16P||(r.NORMAL=i.NORMAL,r.NORMAL_OCT16P=i.NORMAL_OCT16P);const n=this._readAttributes(e,t.attributes,c.offset,d,s,f,h);if(t.attributes.BATCH_ID){const e=t.attributes.BATCH_ID.array;n.BATCH_ID={byteStride:0,byteOffset:0,itemSize:1,count:e.length,componentType:Re(e.constructor),array:e},s.push(e.buffer)}else if(i.BATCH_ID||Object.keys(l).length){i.BATCH_ID?n.BATCH_ID=ke(i.BATCH_ID,e,c.offset,d):n.BATCH_ID=et(d);const t=n.BATCH_ID.array&&n.BATCH_ID.array.buffer;t&&s.indexOf(t)<0&&s.push(t)}return{count:d,batchTable:l,batchTableBin:u,featureTable:i,pnts:n,transferables:s}}))}const b=this._readAttributes(e,i,c.offset,d,s,f,h);if(i.BATCH_ID||Object.keys(l).length){i.BATCH_ID?b.BATCH_ID=ke(i.BATCH_ID,e,c.offset,d):b.BATCH_ID=et(d);const t=b.BATCH_ID.array&&b.BATCH_ID.array.buffer;t&&s.indexOf(t)<0&&s.push(t)}return Promise.resolve({count:d,batchTable:l,batchTableBin:u,featureTable:i,pnts:b,transferables:s})}_readAttributes(e,t,r,n,a,o,s){const i={};if(t.POSITION){let{byteOffset:o,array:s}=t.POSITION;o=o||0;const c=s?0:r;if(!s){const t=e.slice(o+c,o+c+3*n*4);s=new Float32Array(t)}i.POSITION={byteStride:0,byteOffset:0,itemSize:3,count:n,componentType:5126,array:s},a.push(s.buffer)}else if(t.POSITION_QUANTIZED){let{byteOffset:c}=t.POSITION_QUANTIZED;const{array:l}=t.POSITION_QUANTIZED;c=c||0;const u=l?0:r;i.POSITION={byteStride:0,byteOffset:0,itemSize:3,count:n,componentType:5126,array:this._convertQuantizedPosition(l||new Uint16Array(e,c+u,3*n),o,s)},a.push(i.POSITION.array.buffer)}if(t.RGBA){let{byteOffset:o,array:s}=t.RGBA;o=o||0;const c=s?0:r;if(!s){const t=e.slice(o+c,o+c+4*n);s=new Uint8Array(t)}i.RGBA={byteStride:0,byteOffset:0,itemSize:4,count:n,componentType:5121,array:s},a.push(s.buffer)}else if(t.RGB){let{byteOffset:o,array:s}=t.RGB;o=o||0;const c=s?0:r;if(!s){const t=e.slice(o+c,o+c+3*n);s=new Uint8Array(t)}i.RGB={byteStride:0,byteOffset:0,itemSize:3,count:n,componentType:5121,array:s},a.push(s.buffer)}else if(t.RGB565){let{byteOffset:o,array:s}=t.RGB565;o=o||0;const c=s?0:r;if(!s){const t=e.slice(o+c,o+c+2*n);s=new Uint16Array(t)}i.RGB565={byteStride:0,byteOffset:0,itemSize:1,count:n,componentType:5123,array:s},a.push(s.buffer)}if(t.NORMAL){let{byteOffset:o,array:s}=t.NORMAL;o=o||0;const c=s?0:r;if(!s){const t=e.slice(o+c,o+c+3*n*4);s=new Float32Array(t)}i.NORMAL={byteStride:0,byteOffset:0,itemSize:3,count:n,componentType:5126,array:s},a.push(s.buffer)}else if(t.NORMAL_OCT16P){let{byteOffset:o,array:s}=t.NORMAL_OCT16P;o=o||0;const c=s?0:r;if(!s){const t=e.slice(o+c,o+c+2*n);s=new Uint8Array(t)}i.NORMAL_OCT16P={byteStride:0,byteOffset:0,itemSize:2,count:n,componentType:5121,array:s},a.push(s.buffer)}return i}_convertQuantizedPosition(e,t,r){return Be(new Float32Array(e.length),e,t,r)}_readBatchTable(){return null}}function et(e){const t=(r=e)<256?Uint8Array:r<65536?Uint16Array:Uint32Array;var r;const n=new t(e);for(let t=0;t<e;t++)n[t]=t;return{byteStride:0,byteOffset:0,itemSize:1,count:e,componentType:Re(t),array:n}}const{Ajax:tt,GLTFLoader:rt}=a();class nt{constructor(e,t,r,n){this._supportedFormats=r,this._requestImage=e,this._loaderCtor=t||rt,this._maxTextureSize=n}load(e,t,r=0,n=0,a){return t?this._parse(e,t,r,n,a):tt.getArrayBuffer(e,{}).then((t=>{const a=t.data;return this._parse(e,a,r,n)}))}_parse(e,t,r,n,a){n||(n=t.byteLength);const o=this._readCMPT(t,e,r,n),s=[];for(let r=0;r<o.length;r++){let n;if(\"b3dm\"===o[r].magic)n=new Ve(this._requestImage,this._loaderCtor,this._supportedFormats);else if(\"i3dm\"===o[r].magic)n=new Ke(this._requestImage,this._loaderCtor,this._supportedFormats,this._maxTextureSize);else if(\"pnts\"===o[r].magic)n=new We;else{if(\"cmpt\"!==o[r].magic){console.warn(\"Unsupported magic in CMPT tile:\",o[r].magic);continue}n=new nt(this._requestImage,this._loaderCtor,this._supportedFormats,this._maxTextureSize)}s.push(n.load(e,t,o[r].offset,o[r].byteLength,a).then((e=>e)))}return Promise.all(s).then((e=>({magic:\"cmpt\",tiles:e})))}_readCMPT(e,t,r,n){const a=new DataView(e,r,n),o=a.getUint32(4,!0);if(1!==o){const e=\"Unsupported cmpt version: \"+o+\", url:\"+t;return console.warn(e),{error:e}}if(16===a.byteLength)return[];const s=[],i=a.getUint32(12,!0);let c=16;for(let t=0;t<i;t++){const t=xe(a,c),n=a.getUint32(c+8,!0);s.push({magic:t,buffer:e,offset:c+r,byteLength:n}),c+=n}return s}}const{GLTFLoader:at}=a();function ot(e,t){if(e.scenes&&e.scenes.length)for(let r=0,n=e.scenes.length;r<n;r++){const n=e.scenes[r].nodes;for(let r=0,a=n.length;r<a;r++){const a=[];ht(n[r],a,e,t)}}}const st=[],it=[],ct=[],lt=[0,0,0],ut=function(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}([]),ft=[1,1,1];function ht(e,t,r,n){const a=t.slice(0);if(e.matrix)a.push(e.matrix);else if(e.rotation||e.translation||e.scale){const t=function(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}(st,e.translation||lt),r=function(e,t){var r=t[0],n=t[1],a=t[2],o=t[3],s=r+r,i=n+n,c=a+a,l=r*s,u=n*s,f=n*i,h=a*s,d=a*i,m=a*c,p=o*s,b=o*i,g=o*c;return e[0]=1-f-m,e[1]=u+g,e[2]=h-b,e[3]=0,e[4]=u-g,e[5]=1-l-m,e[6]=d+p,e[7]=0,e[8]=h+b,e[9]=d-p,e[10]=1-l-f,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}(it,e.rotation||ut),n=function(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}(ct,e.scale||ft);i(n,r,n);const o=i([],t,n);a.push(o)}if(e.children&&e.children.length)for(let t=0,o=e.children.length;t<o;t++)ht(e.children[t],a,r,n);if(void 0!==e.mesh){const t=e.mesh,o=r.meshes[t];if(o){const e=a.slice(0),s=o.primitives;for(let a=0,o=s.length;a<o;a++){const o=s[a];o&&(o.matrices=e,n(o,t,a,r))}}}}function dt(e,t){let{byteOffset:r,byteStride:n,count:a}=e;const{componentType:o,itemSize:s}=e,i=e.array.buffer,c=o?at.getTypedArrayCtor(o):e.array.constructor;r=void 0===r?e.array.byteOffset:r,n=n||0,a=a||e.array.length/s;const l=Math.min(i.byteLength-r,a*s*c.BYTES_PER_ELEMENT);if(a=Math.floor(l/(s*c.BYTES_PER_ELEMENT)),(!n||n===s*c.BYTES_PER_ELEMENT)&&r%c.BYTES_PER_ELEMENT==0){const e=new c(i,r,a*s);for(let n=0;n<a*s;n+=s){t(new c(e.buffer,r+n*c.BYTES_PER_ELEMENT,s),n/s)}return}const u=new Uint8Array(s*c.BYTES_PER_ELEMENT);n||(n=s*c.BYTES_PER_ELEMENT);for(let e=0;e<a;e++){const a=new Uint8Array(i,n*e+r,s*c.BYTES_PER_ELEMENT);u.set(a);t(new c(u.buffer),e),a.set(u)}}var mt=yt(\"DXT1\"),pt=yt(\"DXT3\"),bt=yt(\"DXT5\"),gt=yt(\"DX10\");function yt(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}var _t=O((function(e){var t,r,n=new Int32Array(e,0,31);if(542327876!==n[0])throw new Error(\"Invalid magic number in DDS header\");if(4&!n[20])throw new Error(\"Unsupported format, must contain a FourCC code\");var a=n[21];switch(a){case mt:t=8,r=\"dxt1\";break;case pt:t=16,r=\"dxt3\";break;case bt:t=16,r=\"dxt5\";break;case 116:r=\"rgba32f\";break;case gt:var o=new Uint32Array(e.slice(128,148));r=o[0];var s=o[1];if(o[2],o[3],o[4],3!==s||2!==r)throw new Error(\"Unsupported DX10 texture format \"+r);r=\"rgba32f\";break;default:throw new Error(\"Unsupported FourCC code: \"+(i=a,String.fromCharCode(255&i,i>>8&255,i>>16&255,i>>24&255)))}var i;var c=n[2],l=1;131072&c&&(l=Math.max(1,n[7]));var u=!1;512&n[28]&&(u=!0);var f,h=n[4],d=n[3],m=n[1]+4,p=h,b=d,g=[];a===gt&&(m+=20);if(u)for(var y=0;y<6;y++){if(\"rgba32f\"!==r)throw new Error(\"Only RGBA32f cubemaps are supported\");h=p,d=b;for(var _=Math.log(h)/Math.log(2)+1,T=0;T<_;T++)f=h*d*16,g.push({offset:m,length:f,shape:[h,d]}),T<l&&(m+=f),h=Math.floor(h/2),d=Math.floor(d/2)}else for(T=0;T<l;T++)f=Math.max(4,h)/4*Math.max(4,d)/4*t,g.push({offset:m,length:f,shape:[h,d]}),m+=f,h=Math.floor(h/2),d=Math.floor(d/2);return{shape:[p,b],images:g,format:r,flags:c,cubemap:u}})),Tt=Math.abs,vt=Math.sin,wt=Math.cos,Ot=Math.tan,At=Math.atan,It=Math.atan2,Mt=Math.sqrt,xt=Math.log,Ct=Math.hypot,St=Math.sinh,Nt=Math.cosh,Lt=1/0;function Et(e){var t,r,n,a,o,s,i=[],c=[],l=[],u=[];function f(e,t){for(var r,n=2*wt(2*t),a=e.length-1,o=e[a],s=0;--a>=0;)r=n*o-s+e[a],s=o,o=r;return t+r*vt(2*t)}function h(e,t,r){for(var n,a,o=vt(t),s=wt(t),i=St(r),c=Nt(r),l=2*s*c,u=-2*o*i,f=e.length-1,h=e[f],d=0,m=0,p=0;--f>=0;)n=m,a=d,h=l*(m=h)-n-u*(d=p)+e[f],p=u*m-a+l*d;return[(l=o*c)*h-(u=s*i)*p,l*p+u*h]}e.es,o=a=(n=e.es/(1+Mt(1-e.es)))/(2-n),i[0]=a*(2+a*(-2/3+a*(a*(116/45+a*(26/45+a*(-2854/675)))-2))),c[0]=a*(a*(2/3+a*(4/3+a*(-82/45+a*(32/45+a*(4642/4725)))))-2),o*=a,i[1]=o*(7/3+a*(a*(-227/45+a*(2704/315+a*(2323/945)))-1.6)),c[1]=o*(5/3+a*(-16/15+a*(-13/9+a*(904/315+a*(-1522/945))))),o*=a,i[2]=o*(56/15+a*(-136/35+a*(-1262/105+a*(73814/2835)))),c[2]=o*(-26/15+a*(34/21+a*(1.6+a*(-12686/2835)))),o*=a,i[3]=o*(4279/630+a*(-332/35+a*(-399572/14175))),c[3]=o*(1237/630+a*(a*(-24832/14175)-2.4)),o*=a,i[4]=o*(4174/315+a*(-144838/6237)),c[4]=o*(-734/315+a*(109598/31185)),o*=a,i[5]=o*(601676/22275),c[5]=o*(444337/155925),o=a*a,t=e.k0/(1+a)*(1+o*(1/4+o*(1/64+o/256))),l[0]=a*(a*(2/3+a*(-37/96+a*(1/360+a*(81/512+a*(-96199/604800)))))-.5),u[0]=a*(.5+a*(-2/3+a*(5/16+a*(41/180+a*(-127/288+a*(7891/37800)))))),l[1]=o*(-1/48+a*(-1/15+a*(437/1440+a*(-46/105+a*(1118711/3870720))))),u[1]=o*(13/48+a*(a*(557/1440+a*(281/630+a*(-1983433/1935360)))-.6)),o*=a,l[2]=o*(-17/480+a*(37/840+a*(209/4480+a*(-5569/90720)))),u[2]=o*(61/240+a*(-103/140+a*(15061/26880+a*(167603/181440)))),o*=a,l[3]=o*(-4397/161280+a*(11/504+a*(830251/7257600))),u[3]=o*(49561/161280+a*(-179/168+a*(6601661/7257600))),o*=a,l[4]=o*(-4583/161280+a*(108847/3991680)),u[4]=o*(34729/80640+a*(-3418889/1995840)),o*=a,l[5]=o*(-20648693/638668800),u[5]=.6650675310896665*o,s=f(c,e.phi0),r=-t*(s+function(e,t){var r,n=2*wt(t),a=e.length-1,o=e[a],s=0;for(;--a>=0;)r=n*o-s+e[a],s=o,o=r;return vt(t)*r}(u,2*s)),e.fwd=function(e,n){var a,o,s,i,l,d=e.phi,m=e.lam;d=f(c,d),a=vt(d),o=wt(d),i=vt(m),s=wt(m),d=It(a,s*o),m=It(i*o,Ct(a,o*s)),m=function(e){var t=Tt(e);return t=function(e){var t=1+e,r=t-1;return 0===r?e:e*xt(t)/r}(t*(1+t/(Ct(1,t)+1))),e<0?-t:t}(Ot(m)),l=h(u,2*d,2*m),d+=l[0],m+=l[1],Tt(m)<=2.623395162778?(n.y=t*d+r,n.x=t*m):n.x=n.y=Lt},e.inv=function(e,n){var a,o,s,c,u,d=e.y,m=e.x;d=(d-r)/t,Tt(m/=t)<=2.623395162778?(d+=(u=h(l,2*d,2*m))[0],m+=u[1],m=At(St(m)),a=vt(d),o=wt(d),c=vt(m),s=wt(m),m=It(c,s*o),d=It(a*s,Ct(c,s*o)),n.phi=f(i,d),n.lam=m):n.phi=n.lam=Lt}}const kt=Math.PI/180,Pt=6378137*Math.PI/180,Ut=85.0511287798,Rt={};function Bt(e,t,r,n){if(\"EPSG:3857\"===r)return function(e,t){const r=Ut,n=t[0],a=Math.max(Math.min(r,t[1]),-r);let o;o=0===a?0:Math.log(Math.tan((90+a)*kt/2))/kt;return e[0]=n*Pt,e[1]=o*Pt,e}(e,t);if(!r||\"EPSG:9807\"!==r.code&&\"Traverse_Mercator\"!==r.code){if(\"EPSG:4326\"===r||\"EPSG:4490\"===r||\"identity\"===r)return Ft(e,t);if(\"baidu\"===r)return Ft(e,t);throw new Error(\"unsupported projection:\"+r)}{if(!(!n||4326===n.wkid))return function(e,t){return e[0]=t[0],e[1]=t[1],e}(e,t);const a=JSON.stringify(r);let o=Rt[a];return o||(o=Rt[a]=function(e){const t={a:jt,es:Gt,x0:he(e.falseEasting)?5e5:e.falseEasting,y0:he(e.falseNorthing)?0:e.falseNorthing,k0:e.scaleFactor||.9996,lam0:(e.centralMeridian||0)*Dt,phi0:(e.latitudeOfOrigin||0)*Dt,originLam0:e.startLongtitude||0,originPhi0:e.startLatitude||0};Et(t);const r={lam:0,phi:0},n={};let a=0,o=0;(t.originLam0||t.originPhi0)&&(r.lam=t.originLam0*Dt-t.lam0,r.phi=t.originPhi0*Dt,t.fwd(r,n),a=t.a*n.x+t.x0,o=t.a*n.y+t.y0);return{project:function(e,s){r.lam=e[0]*Dt-t.lam0,r.phi=e[1]*Dt,t.fwd(r,n);const i=t.a*n.x+t.x0-a,c=t.a*n.y+t.y0-o;return s[0]=i,s[1]=c,s}}}(r)),o.project(t,e)}}function Ft(e,t){return e[0]=t[0],e[1]=t[1],e}const Dt=.017453292519943295,jt=6378137,Gt=.0066943799901413165;const{Ajax:zt}=a(),qt=s([]),Ht=ze().draco,Vt=ze().ktx2,$t={\"pbrMetallicRoughness\":{\"baseColorFactor\":[.5,.5,.5,1],\"metallicFactor\":0,\"roughnessFactor\":.5}},Qt={\"position\":{name:\"POSITION\",accessor:{\"componentType\":5126,\"type\":\"VEC3\"}},\"normal\":{name:\"NORMAL\",accessor:{\"componentType\":5126,\"type\":\"VEC3\"}},\"uv0\":{name:\"TEXCOORD_0\",accessor:{\"componentType\":5126,\"type\":\"VEC2\"}},\"color\":{name:\"COLOR_0\",accessor:{\"componentType\":5121,\"type\":\"VEC4\"}},\"uv-region\":{name:\"uvRegion\",accessor:{\"componentType\":5123,\"type\":\"VEC4\"}},\"feature-index\":{name:\"_BATCHID\",accessor:{\"componentType\":5125,\"type\":\"SCALAR\"}},\"faceRange\":{name:\"faceRange\",accessor:{\"componentType\":5125,\"type\":\"VEC2\"}}};function Kt(e,t,r,n,a,o){const i=[],c=[],l=[];for(let t=0;t<e.meshes.length;t++){const{geometry:r,material:n}=e.meshes[t],a=zt.getArrayBuffer(r.url,o);a.xhr.url=r.url,l.push(a.xhr);const s=a.then((e=>({buffer:e})));i.push(s);const u=[];if(rr(n,u),u.length){const e=u.map((e=>{const t=zt.getArrayBuffer(e.url,o);return t.xhr.url=e.url,l.push(t.xhr),t.then((t=>t&&t.status?null:{buffer:t,mimeType:e.mimeType,format:e.format}))}));i.push(...e)}c[t]=u.length}const u=Promise.all(i).then((o=>{for(let e=0;e<o.length;e++)if(!o[e]||!o[e].buffer)return Promise.resolve(null);const i=[];let l=0;for(let e=0;e<c.length;e++){const t=c[e];i.push({geoBuffer:{data:o[l].buffer.data},textureBuffers:o.slice(l+1,t+l+1).map((e=>({data:e.buffer.data,mimeType:e.mimeType,format:e.format})))}),l+=1+t}const u=function(e,t,r,n,a,o){const i={asset:{generator:\"i3s\",version:\"2.0\"},extensions:{},scene:0,scenes:[{nodes:[]}],nodes:{},meshes:{},materials:[],skins:[],animations:null,textures:[],transferables:[]},c=[];for(let l=0;l<e.meshes.length;l++){let{material:u}=e.meshes[l];const{geometry:f}=e.meshes[l];let h;const d=t[l].geoBuffer.data;if(!d)continue;h=cr(d)?Xt(i,l,f,d,e.transform,e.center,a,o):Jt(i,l,f,d,e.transform,e.center,a,o),c.push(h),i.nodes[l]={mesh:l,nodeIndex:l,matrix:s([])},i.scenes[0].nodes[l]=i.nodes[l],u||(u=$t);const m=er(l,i,u,t[l].textureBuffers,r,n);c.push(m)}return Promise.all(c).then((()=>({gltf:i,featureTable:{BATCH_LENGTH:0},transferables:i.transferables})))}(e,i,t,a,r,n);return u}));return u.xhr=l,u}const Zt={\"magFilter\":9728,\"minFilter\":9728,\"wrapR\":33071,\"wrapS\":33071,\"wrapT\":33071};function Xt(e,t,r,n,a,o,s,i){const c=r.info.compressedAttributes.attributes.reduce(((e,t,r)=>{const n=Qt[t];if(!n)return e;return e[n.name||t]=r,e}),{});return Ht(n,{attributes:c,metadatas:{\"POSITION\":[{name:\"i3s-scale_x\",type:\"double\"},{name:\"i3s-scale_y\",type:\"double\"}]},useUniqueIDs:!1,skipAttributeTransform:!1}).then((r=>Wt(r,e,t,a,o,s,i)))}const Yt={position:function(e,t,r){const n=3*e.vertexCount,a=new Float32Array(t,r,n);return e.position={array:a,componentType:5126,itemSize:3,count:n/3,meta:{\"i3s-scale_x\":1,\"i3s-scale_y\":1},type:\"VEC3\"},r+=4*n},normal:function(e,t,r){const n=3*e.vertexCount,a=new Float32Array(t,r,n);return e.normal={array:a,componentType:5126,itemSize:3,count:n/3,type:\"VEC3\"},r+=4*n},uv0:function(e,t,r){const n=2*e.vertexCount,a=new Float32Array(t,r,n);return e.uv0={array:a,componentType:5126,itemSize:2,count:n/2,type:\"VEC2\"},r+=4*n},color:function(e,t,r){const n=4*e.vertexCount,a=new Uint8Array(t,r,n);return e.color={array:a,componentType:5121,itemSize:4,count:n/4,type:\"VEC4\"},r+=n},featureId:function(e,t,r){return r+=8*e.featureCount},id:function(e,t,r){return r+=8*e.featureCount},faceRange:function(e,t,r){const n=2*e.featureCount,a=new Uint32Array(t,r,n);return e.faceRange={array:a,componentType:5125,itemSize:2,count:n/2,type:\"VEC2\"},r+=4*n},uvRegion:function(e,t,r){const n=4*e.vertexCount,a=new Uint16Array(t,r,n);return e[\"uv-region\"]={array:a,componentType:5123,itemSize:4,count:n/4,type:\"VEC4\"},r+=2*n},region:function(e,t,r){const n=4*e.vertexCount,a=new Uint16Array(t,r,n);return e[\"uv-region\"]={array:a,componentType:5123,itemSize:4,count:n/4,type:\"VEC4\"},r+=2*n}};function Jt(e,t,r,n,a,o,s,i){const c={vertexCount:0},l=new DataView(n);try{let e=0;c.vertexCount=l.getUint32(e,1),e+=4,c.featureCount=l.getUint32(e,1),e+=4;const t=r.info.ordering?null:r.info;if(t){const r=[];for(const e in t)\"offset\"!==e&&\"\"!==e&&r.push(e);for(let t=0;t<r.length;t++)Yt[r[t]]?e=Yt[r[t]](c,n,e):console.error(\"Unknown decoder for\",r[t])}else{const t=r.info;let a=t.ordering,o=t.featureAttributeOrder;const s=null;s&&s.geometryData&&s.geometryData[0]&&s.geometryData[0].params;for(let t=0;t<a.length;t++){const r=Yt[a[t]];r||console.log(a[t]),e=r(c,n,e)}for(let t=0;t<o.length;t++){const r=Yt[o[t]];r||console.log(o[t]),e=r(c,n,e)}}}catch(e){}c.scale_x=1,c.scale_y=1;const u={};for(const e in c){const t=Qt[e]&&Qt[e].name;t&&(u[t]=c[e])}if(c.faceRange){const e=c.faceRange.array,t=e.length/2,r=(f=t)<=255?Uint8Array:f<=65535?Uint16Array:Uint32Array,n=new r(u.POSITION.array.length/3);for(let t=0;t<e.length-1;t+=2){const r=t/2,a=e[t],o=e[t+1];for(let e=a;e<=o;e++)n[3*e]=r,n[3*e+1]=r,n[3*e+2]=r}u._BATCHID={componentType:je(r),array:n,itemSize:1,count:n.length,type:\"SCALAR\"}}var f;return Wt({attributes:u},e,t,a,o,s,i)}function Wt(e,t,r,n,a,o,s){const i={attributes:e.attributes,material:r,indices:e.indices,mode:4};!function(e){const t=e.array,r=e.meta&&e.meta[\"i3s-scale_x\"],n=e.meta&&e.meta[\"i3s-scale_y\"];if(r&&n&&(1!==r||1!==n))for(let e=0;e<t.length;e+=3)t[e]*=r.value,t[e+1]*=n.value}(e.attributes.POSITION);const l=function(e,t,r,n,a){let o,s=[0,0,0,1];const i=[0,0],l=Bt([],r,n,a);l[2]=r[2];const u=t&&c(qt,t);return dt(e,(e=>(s[0]=e[0],s[1]=e[1],s[2]=e[2],u||(s=g(s,s,t)),r&&m(s,s,r),Bt(i,s,n,a),o=s[2],e[0]=i[0]-l[0],e[1]=i[1]-l[1],e[2]=o-l[2],e))),l}(e.attributes.POSITION,n,a,o,s);t.meshes[r]={primitives:[i],index:r},t.extensions.MAPTALKS_RTC={projCenter:l},t.extensions.CESIUM_RTC={rtcCoord:a};for(const r in e.attributes)ir(t.transferables,e.attributes[r].array.buffer);return e.indices&&ir(t.transferables,e.indices.array.buffer),i}function er(e,t,r,n,a,o){const s=n.map((e=>function(e,t,r,n,a){if(\"dds\"===t){const t=_t(e),n=t.images.map((t=>new Uint8Array(e,t.offset,t.length))),a=\"dxt1\"===t.format?33777:33779;return Promise.resolve({image:{mipmap:n,width:t.shape[0],height:t.shape[1],mimeType:r},sampler:Zt,format:a})}if(\"png\"===t||\"jpg\"===t)return function(e,t){nr||(nr=new OffscreenCanvas(2,2),ar=nr.getContext(\"2d\",{willReadFrequently:!0}));const r=new Blob([new Uint8Array(e)]);return createImageBitmap(r).then((e=>{let{width:r,height:n}=e;or(r)||(r=sr(r)),or(n)||(n=sr(n));const a=t;a&&(r=Math.min(a,r),n=Math.min(a,n)),nr.width=r,nr.height=n,ar.drawImage(e,0,0,r,n),e.close();const o=ar.getImageData(0,0,r,n);return{width:r,height:n,array:new Uint8Array(o.data)}})).catch((()=>({width:2,height:2,array:new Uint8Array(4)})))}(e,a).then((e=>{e.mimeType=r;return{image:e,sampler:Zt,format:6408}}));if(\"ktx2\"===t)return Vt(e,n).then((e=>(e.mimeType=r,{image:e,sampler:Zt,format:e.format})));return null}(e.data,e.format,e.mimeType,a,o).then((e=>{if(e.image)if(e.image.array)ir(t.transferables,e.image.array.buffer);else if(e.image.mipmap)for(let r=0;r<e.image.mipmap.length;r++)ir(t.transferables,e.image.mipmap[r].buffer);return e}))));return Promise.all(s).then((n=>{tr(e,t,r,n)}))}function tr(e,t,r,n){const a=JSON.parse(JSON.stringify(r)),o=t.textures;n.ptr||(n.ptr=0);for(const e in r)r[e]&&r[e].url?(o.push(n[n.ptr++]),a[e]={index:o.length-1},void 0!==r[e].factor&&(a[e].scale=r[e].factor)):de(r[e])&&(a[e]=tr(-1,t,r[e],n));return e>=0&&(t.materials[e]=a),a}function rr(e,t){for(const r in e)e[r]&&e[r].url?t.push({url:e[r].url,mimeType:e[r].mimeType,format:e[r].format}):de(e[r])&&rr(e[r],t)}let nr,ar;function or(e){return!(e&e-1)&&0!==e}function sr(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function ir(e,t){t&&(e.indexOf(t)>=0||e.push(t))}function cr(e){const t=new Uint8Array(e,0,5);return t[0]===\"D\".charCodeAt()&&t[1]===\"R\".charCodeAt()&&t[2]===\"A\".charCodeAt()&&t[3]===\"C\".charCodeAt()&&t[4]===\"O\".charCodeAt()}var lr=\"undefined\"!=typeof Float32Array?Float32Array:Array;function ur(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}var fr=function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e};!function(){var e=function(){var e=new lr(3);return lr!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}()}();const hr=[];const dr=[],mr=[],pr=[],br=[],gr=[],yr=[],_r=[];function Tr(e,t,r,n,a,o){ur(br,e[3*t],e[3*t+1],e[3*t+2]),ur(gr,e[3*r],e[3*r+1],e[3*r+2]),ur(yr,e[3*n],e[3*n+1],e[3*n+2]);const s=fr(dr,yr,gr),i=fr(mr,br,gr),c=function(e,t,r){var n=t[0],a=t[1],o=t[2],s=r[0],i=r[1],c=r[2];return e[0]=a*c-o*i,e[1]=o*s-n*c,e[2]=n*i-a*s,e}(pr,s,i);!function(e,t){var r=t[0],n=t[1],a=t[2],o=r*r+n*n+a*a;o>0&&(o=1/Math.sqrt(o),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o)}(_r,c),a[3*t]=a[3*t]||0,a[3*r]=a[3*r]||0,a[3*n]=a[3*n]||0,a[3*t+1]=a[3*t+1]||0,a[3*r+1]=a[3*r+1]||0,a[3*n+1]=a[3*n+1]||0,a[3*t+2]=a[3*t+2]||0,a[3*r+2]=a[3*r+2]||0,a[3*n+2]=a[3*n+2]||0,a[3*t]+=_r[0],a[3*r]+=_r[0],a[3*n]+=_r[0],a[3*t+1]+=_r[1],a[3*r+1]+=_r[1],a[3*n+1]+=_r[1],a[3*t+2]+=_r[2],a[3*r+2]+=_r[2],a[3*n+2]+=_r[2],o[t]+=1,o[r]+=1,o[n]+=1}const{Ajax:vr,GLTFLoader:wr}=a(),Or=[1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1],Ar=[0,0,1,0,0,1,0,0,-1,0,0,0,0,0,0,1],Ir=2*Math.PI*6378137/360,Mr=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):null;let xr,Cr,Sr=!1;if(\"undefined\"!=typeof OffscreenCanvas){try{Cr=new OffscreenCanvas(2,2).getContext(\"2d\",{willReadFrequently:!0})}catch(e){}Cr&&\"undefined\"!=typeof createImageBitmap&&(Sr=!0)}const Nr=s([]),Lr=[0,0,0],Er=[],kr=[],Pr=[],Ur=[],Rr={\"POSITION\":1,\"TEXCOORD_0\":1,\"TEXCOORD_1\":1,\"NORMAL\":1,\"TANGENT\":1},Br={\"TEXCOORD_0\":1e-4,\"TEXCOORD_1\":1e-4};let Fr;class Dr{constructor(e,t,r,n){this.id=e,this.options=t,this._bindedRequestImage=(...e)=>this.requestImage.call(this,...e),this._uploader=r,this._requests={},n(null,{},[])}_createLoaders(e){this._b3dmLoader||(this._supportedFormats=e,this._pntsLoader=new We,this._b3dmLoader=new Ve(this._bindedRequestImage,wr,e),this._i3dmLoader=new Ke(this._bindedRequestImage,wr,e))}requestImage(e,t){Sr?fetch(e).then((e=>e.arrayBuffer())).then((e=>{const t=new self.Blob([new Uint8Array(e)]);return createImageBitmap(t)})).then((e=>{xr.width=e.width,xr.height=e.height,Cr.drawImage(e,0,0);const r=Cr.getImageData(0,0,xr.width,xr.height);e.close(),t(null,{width:e.width,height:e.height,data:new Uint8Array(r.data)})})):this._uploader(\"requestImage\",{url:e},null,t)}loadTile(e,t){this._createLoaders(e.supportedFormats);const{service:r,url:n,arraybuffer:a}=e,o=r.fetchOptions||{};if(o.referrer=e.referrer,o.referrerPolicy=o.referrerPolicy||\"origin\",function(e){return e.indexOf(\"i3s:\")>=0}(n)){const a=e.i3sInfo,s=r.maxTextureSize||0,i=Kt(a,e.supportedFormats,this.options.projection,e.projection,s,o);return i.then((e=>{if(delete this._requests[n],!e)return void t({status:404,url:n,i3sInfo:a});if(!Object.keys(e.gltf.meshes).length)return void t({status:404,url:n,i3sInfo:a});e.gltf.url=n;const{transferables:o}=e;e.magic=\"b3dm\",r.createNormalIfMissed&&this._createGLTFMissedAttrs(e.gltf),Kr(r)&&this._compressAttrFloat32ToInt16(e.gltf),t(null,e,o)})),void(this._requests[n]=i.xhr)}if(a){delete this._requests[n];const r=xe(new DataView(a),0);if(\"{\"===r[0]||\" \"===r[0]||\"<\"===r[0]){const r=function(e,t,r){if(Mr){const n=new Uint8Array(e,t,r);return Mr.decode(n)}return be(new Uint8Array(e,t,r))}(a,0,a.byteLength),o=JSON.parse(r);o.accessors?this._read3DTile(o,n,e,\"gltf\",t):this._checkAndConvert(e.rootIdx,o,a,n,t)}else this._read3DTile(a,n,e,r,t)}else{let a=r.urlParams;a&&(a=(n.indexOf(\"?\")>0?\"&\":\"?\")+a);const s=n.replace(/\\\\+/g,\"%2B\");let i=vr.getArrayBuffer(s+(a||\"\"),o);const c=i.xhr;i=i.then((r=>{delete this._requests[n],r&&r.status?t(r):(e.arraybuffer=r&&r.data,this.loadTile(e,t))})).catch((e=>{delete this._requests[n],t(e)})),this._requests[n]=c}}_read3DTile(e,t,r,n,a){n=n&&n.toLowerCase();const{service:o}=r;if(\"b3dm\"===n){this._b3dmLoader.load(t,e,0,0,{maxTextureSize:o.maxTextureSize||0}).then((e=>{if(e.error)return void a(e);const{content:t,transferables:n}=this._processB3DM(e,r);o.createNormalIfMissed&&this._createGLTFMissedAttrs(t.gltf),Kr(o)&&this._compressAttrFloat32ToInt16(t.gltf),a(null,t,n)})).catch((e=>{a(e)}))}else if(\"pnts\"===n){const n=r.transform||Nr;this._pntsLoader.load(t,e).then((e=>{const{content:t,transferables:o}=this._loadPNTS(e,n,r.rootIdx);this._compressPNTSFloat32ToInt16(t),a(null,t,o)}))}else if(\"i3dm\"===n){const n=r.transform||Nr;this._i3dmLoader.load(t,e,0,0,{maxTextureSize:o.maxTextureSize||0}).then((e=>{const{content:t,transferables:s}=this._loadI3DM(e,n,r.rootIdx);o.createNormalIfMissed&&this._createGLTFMissedAttrs(t.gltf),Kr(o)&&this._compressAttrFloat32ToInt16(t.gltf),a(null,t,s)}))}else if(\"cmpt\"===n){new nt(this._bindedRequestImage,wr,this._supportedFormats,o.maxTextureSize||0).load(t,e,0,0,{maxTextureSize:o.maxTextureSize||0}).then((e=>{const{content:t,transferables:n}=this._processCMPT(e,r);this._createCMPTMissedAttrs(t,o),Kr(o)&&this._compressCMPTContent(t),a(null,t,n)})).catch((e=>{a(e)}))}else if(\"gltf\"===n){this._decoders||(this._decoders=ze());const n=t.substring(0,t.lastIndexOf(\"/\")),s=e instanceof ArrayBuffer&&{buffer:e,byteOffset:0,byteLength:e.byteLength}||e;let i;try{i=new wr(n,s,{transferable:!0,requestImage:this._bindedRequestImage,decoders:this._decoders,supportedFormats:this._supportedFormats,maxTextureSize:o.maxTextureSize||0})}catch(e){a(e)}i.load({skipAttributeTransform:!1}).then((e=>{e.url=t,this._processGLTF(e,null,r),o.createNormalIfMissed&&this._createGLTFMissedAttrs(e),Kr(o)&&this._compressAttrFloat32ToInt16(e),a(null,{magic:\"gltf\",gltf:e},i.transferables)}))}else a(new Error(\"unsupported tile format: \"+n))}_createCMPTMissedAttrs(e,t){e.content?e.content.forEach((e=>{this._createCMPTMissedAttrs(e,t)})):t.createNormalIfMissed&&this._createGLTFMissedAttrs(e.gltf)}_compressCMPTContent(e){e.content?e.content.forEach((e=>{this._compressCMPTContent(e)})):this._compressAttrFloat32ToInt16(e.gltf)}_createMissedAttrs(e,t){if(this._needCreateMissedAttrs(e,t)&&!e.attributes.NORMAL){const t=e.attributes.POSITION.array,r=t.length,n=this._is4326()?Fr.subarray(0,r):t,a=function(e,t,r){const n=r||[];n.setLength&&n.setLength(e.length);const a=hr;a.length<e.length/3&&(a.length=e.length/3),a.fill(0,0,e.length/3);const o=void 0===t.length?t:t.length;for(let r=0;r<o/3;r++)void 0===t.length?Tr(e,3*r,3*r+1,3*r+2,n,a):Tr(e,t[3*r],t[3*r+1],t[3*r+2],n,a);for(let e=0;e<n.length;e+=3){const t=a[e/3];0!==t?(n[e]/=t,n[e+1]/=t,n[e+2]/=t):(n[e]=0,n[e+1]=0,n[e+2]=0)}return n}(n,e.indices.array,new Float32Array(n.length));e.attributes.NORMAL={array:a,byteLength:a.byteLength,byteOffset:0,byteStride:0,componentType:5126,count:a.length/3,itemSize:3,name:\"NORMAL\",type:\"VEC3\"}}}_compressAttrFloat32ToInt16(e){if(!e||!e.meshes||e.extensionsUsed&&e.extensionsUsed.indexOf(\"KHR_techniques_webgl\")>-1)return;if(e.asset&&e.asset.sharePosition)return;const t=e.meshes;for(const e in t){t[e].primitives.forEach((e=>{e.compressed_int16_params={};const t=e.attributes;for(const r in t)if(Rr[r]&&t[r].array&&t[r].array instanceof Float32Array){let n=1;this._is4326()&&\"POSITION\"===r&&(n=Ir,e.compressed_int16_params.compressed_ratio=n);const a=Vr(t[r].array,n,t[r].min,t[r].max,r);if(!a)continue;const{array:o,range:s}=a;t[r].componentType=5124,t[r].array=o,e.compressed_int16_params[r]=s}}))}}_createGLTFMissedAttrs(e){if(!e||!e.meshes||e.extensionsUsed&&e.extensionsUsed.indexOf(\"KHR_techniques_webgl\")>-1)return;if(e.asset&&e.asset.sharePosition)return;const t=e.meshes;for(const r in t){t[r].primitives.forEach((t=>{this._createMissedAttrs(t,e)}))}}_compressPNTSFloat32ToInt16(e){if(!e||!e.pnts)return;const t=e.pnts;e.compressed_int16_params={};for(const r in t)if(Rr[r]&&t[r].array&&t[r].array instanceof Float32Array){let n=1;this._is4326()&&\"POSITION\"===r&&(n=Ir,e.compressed_int16_params.compressed_ratio=n);const{array:a,range:o}=Vr(t[r].array,n,t[r].min,t[r].max,r);t[r].array=a,e.compressed_int16_params[r]=o}}_convertPageLoads(e){const t=[];for(let r=0;r<e.length;r++){const n=e[r];if(!n.childTile)continue;const a={boundingVolume:{sphere:[n.boundingSphere.center.x,n.boundingSphere.center.y,n.boundingSphere.center.z,n.boundingSphere.radius]},content:{uri:n.childTile},geometricError:n.boundingSphere.radius/n.rangeList*16,refine:\"REPLACE\"};t.push(a)}return t}_checkAndConvert(e,t,r,n,a){return t.capabilities,void a(null,t)}_processCMPT(e,t){const{tiles:r}=e,n={magic:\"cmpt\",content:[]},a=[];for(let e=0;e<r.length;e++){const{magic:o}=r[e];if(\"b3dm\"===o){const{content:o,transferables:s}=this._processB3DM(r[e],t);qr(a,s),n.content.push(o)}else if(\"i3dm\"===o){const{transform:o,rootIdx:s}=t,{content:i,transferables:c}=this._loadI3DM(r[e],o,s);qr(a,c),n.content.push(i)}else if(\"pnts\"===o){const{transform:o,rootIdx:s}=t,{content:i,transferables:c}=this._loadPNTS(r[e],o,s);qr(a,c),n.content.push(i)}else if(\"cmpt\"===o){const{content:o,transferables:s}=this._processCMPT(r[e],t);qr(a,s),n.content.push(o)}}return{content:n,transferables:a}}_processB3DM(e,t){const{gltf:r,transferables:n,featureTable:a}=e;return this._processGLTF(r,a,t),delete e.transferables,{content:e,transferables:n}}_processGLTF(e,t,r){const n=function(e){if(!e||!e.meshes)return!1;if(e.extensions&&e.extensions.KHR_techniques_webgl)return!0;const t=\"visited\";let r=1;const n=[];for(const a in e.meshes){const o=e.meshes[a],{primitives:s}=o;if(s)for(let e=0;e<s.length;e++){const a=s[e].attributes&&s[e].attributes.POSITION;if(!a||!a.array)continue;a.array.buffer[t]||(a.array.buffer[t]=r++);const o=r-1+\"-\"+(a.byteOffset||0);if(n.indexOf(o)>=0)return!0;n.push(o)}}return!1}(e);this._markTextures(e);r.service.createNormalIfMissed||this._markUnlit(e),e.asset||(e.asset={}),n?(e.asset.sharePosition=!0,this._convertCoordinates(e,t,r.upAxis,r.transform)):this._projectCoordinates(e,t,r.upAxis,r.transform)}_loadI3DM(e,t,r){const{featureTable:n}=e,a=e.i3dm,o=n&&n.RTC_CENTER||[0,0,0],s=this.options.projection,i=t&&c(Nr,t),l={xmin:1/0,xmax:-1/0,ymin:1/0,ymax:-1/0,hmin:1/0,hmax:-1/0};Gr(a.POSITION.array,3,o,Nr,l);const u=zr(l);t&&!i&&g(u,u,t);const f=this._getCoordiate(u),m=[];Bt(m,f,s),m[2]=f[2];const p=h([],u),b=[0,0,0],y=[0,0,0],_=[0,0],v=[1/0,1/0,1/0],w=[-1/0,-1/0,-1/0];dt(a.POSITION,(e=>{b[0]=e[0]+o[0],b[1]=e[1]+o[1],b[2]=e[2]+o[2],t&&!i&&g(b,b,t),0===T(b)?d(y,0,0,-6378137):we(y,b),Bt(_,y,s),e[0]=_[0]-m[0],e[1]=_[1]-m[1],e[2]=y[2]-m[2],e[0]<v[0]&&(v[0]=e[0]),e[1]<v[1]&&(v[1]=e[1]),e[2]<v[2]&&(v[2]=e[2]),e[0]>w[0]&&(w[0]=e[0]),e[1]>w[1]&&(w[1]=e[1]),e[2]>w[2]&&(w[2]=e[2])})),a.POSITION.min=v,a.POSITION.max=w,t&&g(u,u,t),e.rtcCenter=p,e.rtcCoord=f,e.projCenter=m,e.rootIdx=r;const O=e.transferables;return delete e.transferables,{content:e,transferables:O}}_loadPNTS(e,t,r){const{featureTable:n}=e,a=e.pnts,o=n&&n.RTC_CENTER||[0,0,0],s=this.options.projection,i=t&&c(Nr,t),l={xmin:1/0,xmax:-1/0,ymin:1/0,ymax:-1/0,hmin:1/0,hmax:-1/0};Gr(a.POSITION.array,3,o,t,l);const u=zr(l),f=this._getProjCenter(u),m=h([],u),p=[1/0,1/0,1/0],b=[-1/0,-1/0,-1/0];let y=[0,0,0,1];const _=[0,0,0],v=[0,0];dt(a.POSITION,(e=>(y[0]=e[0]+o[0],y[1]=e[1]+o[1],y[2]=e[2]+o[2],t&&!i&&(y=g(y,y,t)),0===T(y)?d(_,0,0,-6378137):we(_,y),Bt(v,_,s),e[0]=v[0]-f[0],e[1]=v[1]-f[1],e[2]=_[2]-f[2],e[0]<p[0]&&(p[0]=e[0]),e[1]<p[1]&&(p[1]=e[1]),e[2]<p[2]&&(p[2]=e[2]),e[0]>b[0]&&(b[0]=e[0]),e[1]>b[1]&&(b[1]=e[1]),e[2]>b[2]&&(b[2]=e[2]),e))),a.POSITION.min=p,a.POSITION.max=b,t&&g(u,u,t);const w=this._getCoordiate(u);e.rtcCenter=m,e.projCenter=f,e.rtcCoord=w,e.rootIdx=r;const O=e.transferables;return delete e.transferables,{content:e,transferables:O}}_markTextures(e){if(!Array.isArray(e.textures))return;const t=e.textures;for(let e=0;e<t.length;e++){const r=t[e]&&t[e].image&&t[e].image.array;if(r&&r.length){const n=r[0],a=r[1],o=r[2],s=r[3];let i=!0;for(let e=4;e<r.length;e+=4)if(r[e]!==n||r[e+1]!==a||r[e+2]!==o||r[e+3]!==s){i=!1;break}i&&(t[e].image.color=[n/255,a/255,o/255,s/255],delete t[e].image.array)}}}_markUnlit(e){const t=e.meshes;for(const r in t){const n=t[r];if(!n)continue;const a=n.primitives;if(a)for(let t=0;t<a.length;t++){if(!a[t])continue;if(!a[t].attributes||a[t].attributes.NORMAL)continue;const r=a[t].material;if(!he(r)){const t=e.materials[r];if(!t)continue;t.extensions||(t.extensions={}),t.extensions.KHR_materials_unlit={}}}}}abortTileLoading(e,t){const r=this._requests[e.url];if(Array.isArray(r))for(let e=0;e<r.length;e++)r[e].abort();else r&&r.abort&&r.abort();delete this._requests[e.url],t(null)}_getModelCenter(e,t,r,n){const a=t&&t.RTC_CENTER||e.extensions&&e.extensions.CESIUM_RTC&&e.extensions.CESIUM_RTC.center;let o=Or;\"X\"===(r=r&&r.toUpperCase())?o=Ar:\"Z\"===r&&(o=Nr),e.extensions=e.extensions||{},e.extensions.CESIUM_RTC||(e.extensions.CESIUM_RTC={}),a&&(e.extensions.CESIUM_RTC.center=a),e.extensions.MAPTALKS_RTC={};const c={xmin:1/0,xmax:-1/0,ymin:1/0,ymax:-1/0,hmin:1/0,hmax:-1/0};ot(e,(e=>{if(!(e.attributes&&e.attributes.POSITION))return;const t=s(Er);e.matrices&&Hr(t,e.matrices);const r=e.attributes.POSITION.array,l=e.attributes.POSITION.itemSize;i(t,o,t),n&&i(t,n,t),Gr(r,l,a||Lr,t,c,e.compressUniforms)}));const l=zr(c);return{rtcCenter:a,modelCenter:l,upAxisTransform:o}}_convertCoordinates(e,t,r,n){const{modelCenter:a,upAxisTransform:o,rtcCenter:c}=this._getModelCenter(e,t,r),l=this._getProjCenter(a);e.extensions.MAPTALKS_RTC.projCenter=l,e.extensions.MAPTALKS_RTC.rtcCoord=e.extensions.CESIUM_RTC.rtcCoord=this._getCoordiate(a);const u=h([],a);n&&g(a,a,n),e.extensions.CESIUM_RTC.rtcCoord=this._getCoordiate(a),c||(ot(e,(e=>{if(e.attributes&&e.attributes.POSITION){const t=e.attributes.POSITION;if(t.array.buffer.projected&&t.array.buffer.projected[t.byteOffset])return;const r=s(Er);e.matrices&&Hr(r,e.matrices),i(r,o,r);const n=function(e,t){var r=t[0],n=t[1],a=t[2],o=t[3],s=t[4],i=t[5],c=t[6],l=t[7],u=t[8],f=t[9],h=t[10],d=t[11],m=t[12],p=t[13],b=t[14],g=t[15],y=r*i-n*s,_=r*c-a*s,T=r*l-o*s,v=n*c-a*i,w=n*l-o*i,O=a*l-o*c,A=u*p-f*m,I=u*b-h*m,M=u*g-d*m,x=f*b-h*p,C=f*g-d*p,S=h*g-d*b,N=y*S-_*C+T*x+v*M-w*I+O*A;return N?(N=1/N,e[0]=(i*S-c*C+l*x)*N,e[1]=(a*C-n*S-o*x)*N,e[2]=(p*O-b*w+g*v)*N,e[3]=(h*w-f*O-d*v)*N,e[4]=(c*M-s*S-l*I)*N,e[5]=(r*S-a*M+o*I)*N,e[6]=(b*T-m*O-g*_)*N,e[7]=(u*O-h*T+d*_)*N,e[8]=(s*C-i*M+l*A)*N,e[9]=(n*M-r*C-o*A)*N,e[10]=(m*w-p*T+g*y)*N,e[11]=(f*T-u*w-d*y)*N,e[12]=(i*I-s*x-c*A)*N,e[13]=(r*x-n*I+a*A)*N,e[14]=(p*_-m*v-b*y)*N,e[15]=(u*v-f*_+h*y)*N,e):null}(kr,r),a=[1/0,1/0,1/0],c=[-1/0,-1/0,-1/0];dt(t,(e=>{g(e,e,r),e[0]=e[0]-u[0],e[1]=e[1]-u[1],e[2]=e[2]-u[2],g(e,e,n),e[0]<a[0]&&(a[0]=e[0]),e[1]<a[1]&&(a[1]=e[1]),e[2]<a[2]&&(a[2]=e[2]),e[0]>c[0]&&(c[0]=e[0]),e[1]>c[1]&&(c[1]=e[1]),e[2]>c[2]&&(c[2]=e[2])})),t.min=a,t.max=c,t.array.buffer.projected||(t.array.buffer.projected={}),t.array.buffer.projected[t.byteOffset]=1}})),e.extensions.CESIUM_RTC.center=u)}_projectCoordinates(e,t,r,n){const{modelCenter:a,rtcCenter:o}=this._getModelCenter(e,t,r,n),s=this._getProjCenter(a);e.extensions.MAPTALKS_RTC.projCenter=s,e.extensions.MAPTALKS_RTC.rtcCoord=e.extensions.CESIUM_RTC.rtcCoord=this._getCoordiate(a),ot(e,(t=>{if(t.attributes&&t.attributes.POSITION){const a=this._needCreateMissedAttrs(t,e);if(a){const e=t.attributes.POSITION.array.length;(!Fr||Fr.length<e)&&(Fr=new Float32Array(e))}t.attributes.NORMAL&&this._transformNormalOrTangent(t.attributes.NORMAL,t.matrices,r),t.attributes.TANGENT&&this._transformNormalOrTangent(t.attributes.TANGENT,t.matrices,r);const{newPositions:s}=this._projVertices(t.attributes.POSITION,t.matrices,o,e.extensions.MAPTALKS_RTC,r,n,t.compressUniforms,a),{componentType:i}=t.attributes.POSITION;5126!==i&&(t.attributes.POSITION.array=new Float32Array(s))}}));for(const t in e.nodes){e.nodes[t].matrix=Nr}}_getProjCenter(e){const t=this.options.projection;\"identity\"===t?h(Pr,e):0===T(e)?d(Pr,0,0,-6378137):we(Pr,e),Bt(Ur,Pr,t);const r=Pr[2],n=[];return n[0]=Ur[0],n[1]=Ur[1],n[2]=r,n}_transformNormalOrTangent(e,t,r){let n;n=\"Y\"===r?Or:\"X\"===r?Ar:Nr;const a=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}([],n);if(Hr(a,t),c(a,Nr))return;const o=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}([],a),s=[];dt(e,(e=>(function(e,t,r){var n=t[0],a=t[1],o=t[2];e[0]=n*r[0]+a*r[3]+o*r[6],e[1]=n*r[1]+a*r[4]+o*r[7],e[2]=n*r[2]+a*r[5]+o*r[8]}(s,e,o),p(s,s),h(e,s),s)))}_projVertices(e,t,r,n,a,o,i,l){if(e.array.buffer.projected&&e.array.buffer.projected[e.byteOffset])return null;const u=s([]);Hr(u,t);const f=this.options.projection;a=a&&a.toUpperCase();const h=r;let p=null;\"Y\"===a?p=Or:\"X\"===a&&(p=Ar);let b=[0,0,0,1];const y=[0,0,0],_=[0,0],v=n.projCenter,w=Bt([],n.rtcCoord,\"EPSG:3857\"),O=o&&c(Nr,o),A=e.min=e.min||[],I=e.max=e.max||[];d(A,1/0,1/0,1/0),d(I,-1/0,-1/0,-1/0);const M=i||{},{decode_position_min:x,decode_position_normConstant:C}=M;let S=[0,0,0,0],N=1;x&&(S=x),C&&(N=C);const L=[];return dt(e,((t,r)=>{if(b[0]=t[0]*N+S[0],b[1]=t[1]*N+S[1],b[2]=t[2]*N+S[2],b=g(b,b,u),p&&(b=g(b,b,p)),h&&m(b,b,h),o&&!O&&(b=g(b,b,o)),0===T(b)?d(y,0,0,-6378137):we(y,b),l){const e=Fr;Bt(_,y,f),e[3*r]=_[0]-w[0],e[3*r+1]=_[0]-w[1],e[3*r+2]=_[0]-w[2]}if(Bt(_,y,f),t instanceof Float32Array)t[0]=_[0]-v[0],t[1]=_[1]-v[1],t[2]=y[2]-v[2];else{const r=_[0]-v[0],n=_[1]-v[1],a=y[2]-v[2];5126!==e.componentType&&(L.push(r),L.push(n),L.push(a),L.push(t[3]))}return t[0]<A[0]&&(A[0]=t[0]),t[1]<A[1]&&(A[1]=t[1]),t[2]<A[2]&&(A[2]=t[2]),t[0]>I[0]&&(I[0]=t[0]),t[1]>I[1]&&(I[1]=t[1]),t[2]>I[2]&&(I[2]=t[2]),t})),e.array.buffer.projected||(e.array.buffer.projected={}),e.array.buffer.projected[e.byteOffset]=1,{projCenter:v,newPositions:L}}_getCoordiate(e){return 0===T(e)?d([],0,0,-6378137):we([],e)}onRemove(){}_is4326(){return\"EPSG:4326\"===this.options.projection||\"EPSG:4490\"===this.options.projection}_needCreateMissedAttrs(e,t){if(!e.attributes.POSITION||function(e,t){const r=t.materials[e.material],n=r&&r.extensions&&r.extensions.KHR_materials_unlit;return n}(e,t))return!1;return!e.attributes.TANGENT}}const jr=[];function Gr(e,t,r,n,a,o){const s=o||{},{decode_position_min:i,decode_position_normConstant:c}=s;let l=[0,0,0,0],u=1;i&&(l=i),c&&(u=c);for(let o=0,s=e.length;o<s;o+=t){const{xmin:s,ymin:i,xmax:c,ymax:f,hmin:h,hmax:p}=a;d(jr,e[o]*u+l[0],e[o+1]*u+l[1],e[o+2]*u+l[2]),g(jr,jr,n);const b=m(jr,r,jr);b[0]<s&&(a.xmin=b[0]),b[0]>c&&(a.xmax=b[0]),b[1]<i&&(a.ymin=b[1]),b[1]>f&&(a.ymax=b[1]),t>2&&(b[2]<h&&(a.hmin=b[2]),b[2]>p&&(a.hmax=b[2]))}}function zr(e){const{xmax:t,ymax:r,xmin:n,ymin:a,hmin:o,hmax:s}=e,i=[(n+t)/2,(a+r)/2,(o+s)/2];return t===-1/0&&(i[0]=0),r===-1/0&&(i[1]=0),s===-1/0&&(i[2]=0),isNaN(i[2])&&(i[2]=0),i}function qr(e,t){for(let r=0;r<t.length;r++)e.indexOf(t[r])<0&&e.push(t[r])}function Hr(e,t){const r=e;for(let e=t.length-1;e>=0;e--)i(r,t[e],r);return r}function Vr(e,t,r,n,a){if(t&&t>1)for(let r=0;r<e.length;r++)(r+1)%3!=0&&(e[r]*=t);let o,s;if(r&&n&&1===t)o=Math.min(...r),s=Math.max(...n);else{const{min:t,max:r}=function(e){let t=1/0,r=-1/0;for(let n=0;n<e.length;n++)e[n]>r&&(r=e[n]),e[n]<t&&(t=e[n]);return{min:t,max:r}}(e);o=t,s=r}return!function(e,t,r,n){for(let a=0;a<e.length;a++){const o=$r(Qr(e[a],t,r),t,r);if(Math.abs(o-e[a])>Br[n])return!1}return!0}(e,o,s,a)&&Br[a]?null:function(e,t,r){const n=new Int16Array(e.length);for(let a=0;a<e.length;a++)n[a]=Qr(e[a],t,r);return{array:n,range:[t,r]}}(e,o,s)}function $r(e,t,r){return((e>=32768?-(65536-e)/32768:e/32767)+1)*(r-t)/2+t}function Qr(e,t,r){const n=2*(e-t)/(r-t)-1,a=Math.max(-1,Math.min(1,n));return a<0?32768*a:32767*a}function Kr(e){return void 0===e.compressGeometry||e.compressGeometry}let Zr=0;class Xr{constructor(e){this.workerId=e,this.workers={},this._callbacks={}}addLayer({actorId:e,mapId:t,layerId:r,params:n},a){if(this._getLayerById(t,r))return;const o=this._genKey(t,r),s=n.options;this.workers[o]=new Dr(r,s,((...t)=>this.send.call(this,e,...t)),a)}removeLayer({mapId:e,layerId:t},r){const n=this._getLayerById(e,t),a=this._genKey(e,t);delete this.workers[a],n&&n.onRemove(r)}loadTile({mapId:e,layerId:t,params:r},n){const a=this._getLayerById(e,t);a&&a.loadTile(r,n)}abortTileLoading({mapId:e,layerId:t,params:r},n){const a=this._getLayerById(e,t);a&&a.abortTileLoading(r,n)}receive(e){const t=e.callback,r=this._callbacks[t];delete this._callbacks[t],r&&e.error?r(new Error(e.error)):r&&r(null,e.data)}send(e,t,r,n,a){const o=a?\\`${e}e}-${e}Zr++}\\`:null;a&&(this._callbacks[o]=a),postMessage({type:\"<request>\",workerId:this.workerId,actorId:e,command:t,params:r,callback:String(o)},n||[])}_genKey(e,t){return\\`${e}e}-${e}t}\\`}_getLayerById(e,t){const r=this._genKey(e,t);return this.workers[r]}}e.initialize=function(){},e.onmessage=function(e,t){const r=e.data;this.dispatcher||(this.dispatcher=new Xr(e.workerId)),\"<response>\"===e.type?this.dispatcher.workerId===e.workerId&&this.dispatcher.receive(e):this.dispatcher[r.command]({actorId:r.actorId,mapId:r.mapId,layerId:r.layerId,params:r.params},((e,r,n)=>{e&&404!==e.status&&204!==e.status&&console.error(e),e instanceof Error&&(e={message:e.message}),t(e,r,n)}))}}`;\nexport default code\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nvar colorString = require('color-string');\nvar convert = require('color-convert');\n\nvar _slice = [].slice;\n\nvar skippedModels = [\n\t// to be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// shouldn't really be in color-convert either...\n\t'hex'\n];\n\nvar hashedModelKeys = {};\nObject.keys(convert).forEach(function (model) {\n\thashedModelKeys[_slice.call(convert[model].labels).sort().join('')] = model;\n});\n\nvar limiters = {};\n\nfunction Color(obj, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tvar i;\n\tvar channels;\n\n\tif (obj == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (obj instanceof Color) {\n\t\tthis.model = obj.model;\n\t\tthis.color = obj.color.slice();\n\t\tthis.valpha = obj.valpha;\n\t} else if (typeof obj === 'string') {\n\t\tvar result = colorString.get(obj);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + obj);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (obj.length) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tvar newArr = _slice.call(obj, 0, channels);\n\t\tthis.color = zeroArray(newArr, channels);\n\t\tthis.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1;\n\t} else if (typeof obj === 'number') {\n\t\t// this is always RGB - can be converted later on.\n\t\tobj &= 0xFFFFFF;\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(obj >> 16) & 0xFF,\n\t\t\t(obj >> 8) & 0xFF,\n\t\t\tobj & 0xFF\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tvar keys = Object.keys(obj);\n\t\tif ('alpha' in obj) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0;\n\t\t}\n\n\t\tvar hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(obj));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tvar labels = convert[this.model].labels;\n\t\tvar color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(obj[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tvar limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString: function () {\n\t\treturn this.string();\n\t},\n\n\ttoJSON: function () {\n\t\treturn this[this.model]();\n\t},\n\n\tstring: function (places) {\n\t\tvar self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString: function (places) {\n\t\tvar self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray: function () {\n\t\treturn this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha);\n\t},\n\n\tobject: function () {\n\t\tvar result = {};\n\t\tvar channels = convert[this.model].channels;\n\t\tvar labels = convert[this.model].labels;\n\n\t\tfor (var i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray: function () {\n\t\tvar rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject: function () {\n\t\tvar rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround: function (places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model);\n\t},\n\n\talpha: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(100)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(100)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.rgb().color;\n\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.rgb().color;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight: function () {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = this.rgb();\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\t\treturn rgb;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale: function () {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar rgb = this.rgb().color;\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(val, val, val);\n\t},\n\n\tfade: function (ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer: function (ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.hsl();\n\t\tvar hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix: function (mixinColor, weight) {\n\t\t// ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\t\tvar color1 = mixinColor.rgb();\n\t\tvar color2 = this.rgb();\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t}\n};\n\n// model conversion methods and static constructors\nObject.keys(convert).forEach(function (model) {\n\tif (skippedModels.indexOf(model) !== -1) {\n\t\treturn;\n\t}\n\n\tvar channels = convert[model].channels;\n\n\t// conversion methods\n\tColor.prototype[model] = function () {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments.length) {\n\t\t\treturn new Color(arguments, model);\n\t\t}\n\n\t\tvar newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha;\n\t\treturn new Color(assertArray(convert[this.model][model].raw(this.color)).concat(newAlpha), model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (color) {\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(_slice.call(arguments), channels);\n\t\t}\n\t\treturn new Color(color, model);\n\t};\n});\n\nfunction roundTo(num, places) {\n\treturn Number(num.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (num) {\n\t\treturn roundTo(num, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tmodel.forEach(function (m) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t});\n\n\tmodel = model[0];\n\n\treturn function (val) {\n\t\tvar result;\n\n\t\tif (arguments.length) {\n\t\t\tif (modifier) {\n\t\t\t\tval = modifier(val);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = val;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(val) {\n\treturn Array.isArray(val) ? val : [val];\n}\n\nfunction zeroArray(arr, length) {\n\tfor (var i = 0; i < length; i++) {\n\t\tif (typeof arr[i] !== 'number') {\n\t\t\tarr[i] = 0;\n\t\t}\n\t}\n\n\treturn arr;\n}\n\nmodule.exports = Color;\n","import Color from 'color';\nexport function isNil(v) {\n return v === undefined || v === null;\n}\n\nexport function extend(dest) { // (Object[, Object, ...]) ->\n for (let i = 1; i < arguments.length; i++) {\n const src = arguments[i];\n for (const k in src) {\n dest[k] = src[k];\n }\n }\n return dest;\n}\n\nexport function isFunction(obj) {\n if (obj === null || obj === undefined) {\n return false;\n }\n return typeof obj === 'function' || (obj.constructor !== null && obj.constructor === Function);\n}\n\n/**\n * Whether the obj is a javascript object.\n * @param {Object} obj - object\n * @return {Boolean}\n * @memberOf Util\n */\nexport function isObject(obj) {\n return typeof obj === 'object' && !!obj;\n}\n\n/**\n * Whether val is a number and not a NaN.\n * @param {Object} val - val\n * @return {Boolean}\n * @memberOf Util\n */\nexport function isNumber(val) {\n return (typeof val === 'number') && !isNaN(val);\n}\n\nexport function toRadian(d) {\n return d * Math.PI / 180;\n}\n\nexport function toDegree(d) {\n return d / Math.PI * 180;\n}\n\nexport function getAbsoluteURL(url) {\n let a = document.createElement('a');\n a.href = url;\n url = a.href;\n a = null;\n return url;\n}\n\nexport function sign(x) {\n if (Math.sign) {\n return Math.sign(x);\n }\n x = +x; // convert to a number\n if (x === 0 || isNaN(x)) {\n return Number(x);\n }\n return x > 0 ? 1 : -1;\n}\n\nconst extraByteMap = [1, 1, 1, 1, 2, 2, 3, 0];\n\nexport function stringFromUTF8Array(data) {\n const count = data.length;\n let str = '';\n\n for (let index = 0; index < count;) {\n let ch = data[index++];\n if (ch & 0x80) {\n let extra = extraByteMap[(ch >> 3) & 0x07];\n if (!(ch & 0x40) || !extra || ((index + extra) > count))\n return null;\n\n ch = ch & (0x3F >> extra);\n for (;extra > 0; extra -= 1) {\n const chx = data[index++];\n if ((chx & 0xC0) !== 0x80)\n return null;\n\n ch = (ch << 6) | (chx & 0x3F);\n }\n }\n\n str += String.fromCharCode(ch);\n }\n return str;\n}\n\n// 给 Matrix3 指定某列设置数据\nexport function setColumn3(out, arr, col) {\n out[3 * col] = arr[0];\n out[3 * col + 1] = arr[1];\n out[3 * col + 2] = arr[2];\n return out;\n}\n\nexport function flatArr(arr) {\n if (arr.flat) {\n return arr.flat(Infinity);\n } else {\n return arr.reduce((acc, val) => acc.concat(val), []);\n }\n}\n\nexport function getBatchIdArrayType(max) {\n if (max < 256) return Uint8Array;\n if (max < 65536) return Uint16Array;\n return Uint32Array;\n}\n\n// const base64Matcher = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\n\nexport function isBase64(url) {\n return url.indexOf('data:') === 0;\n}\n\nexport function base64URLToArrayBuffer(url) {\n const firstDot = url.indexOf('base64,');\n const base64 = url.substring(firstDot + 7);\n const binary_string = window.atob(base64);\n const len = binary_string.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nexport function pushIn(dest) {\n for (let i = 1; i < arguments.length; i++) {\n const src = arguments[i];\n if (src) {\n for (let ii = 0, ll = src.length; ii < ll; ii++) {\n dest.push(src[ii]);\n }\n }\n }\n return dest.length;\n}\n\nconst colorCache = {};\nexport function normalizeColor(out, color) {\n if (!Array.isArray(color)) {\n const key = color;\n color = colorCache[key] = colorCache[key] || Color(color).array().map(v => { return v / 255; });\n }\n for (let i = 0; i < color.length; i++) {\n out[i] = color[i];\n }\n if (color.length === 3) {\n out[3] = 1;\n }\n return out;\n}\n","export function isRelativeURL(url) {\n return url.indexOf('http://') === -1 && url.indexOf('https://') === -1 && url.indexOf('file://') === -1;\n}\n\nexport function prepareFetchOptions(fetchOptions) {\n fetchOptions = fetchOptions || {};\n fetchOptions.referrerPolicy = fetchOptions.referrerPolicy || 'origin';\n fetchOptions.referrer = window && window.location.href;\n return fetchOptions;\n}\n","export const CANDIDATE_MAX_ERROR = 500;\nexport const DEFAULT_MAXIMUMSCREENSPACEERROR = 16;\n","/*!\n * @maptalks/gl v0.125.0\n * LICENSE : UNLICENSED\n * (c) 2016-2026 maptalks.com\n */\nconst n = function() {\n if (\"undefined\" != typeof globalThis) return globalThis;\n if (\"undefined\" != typeof self) return self;\n if (\"undefined\" != typeof window) return window;\n if (\"undefined\" != typeof global) return global;\n throw new Error(\"unable to locate global object\");\n}, t = n(), e = t.gl_trans__coders = t.gl_trans__coders || {};\n\nfunction r(n) {\n return e[n];\n}\n\nfunction _(n, t) {\n e[n] = t;\n}\n\nfunction o() {\n return n().maptalks_gltf_loader;\n}\n\nfunction l(t) {\n n().maptalks_gltf_loader_bundle = t;\n}\n\ne.inject = function(e) {\n const r = e.toString(), _ = r.indexOf(\"{\") + 1, o = r.substring(0, _), l = t.gl_trans__coders = t.gl_trans__coders || {};\n let s = `${o}\\n const _____getGlobal = ${n.toString()};\\n const g___lobals = _____getGlobal()\\n const tran_____scoders = g___lobals['gl_trans__coders'] = g___lobals['gl_trans__coders'] || {};`;\n for (const n in l) \"inject\" !== n && \"getTranscoder\" !== n && \"registerTranscoder\" !== n && (s += 'tran_____scoders[\"' + n + '\"] =' + l[n].toString() + \"\\n;\");\n return s += \"\\n(\" + n().maptalks_gltf_loader_bundle.toString() + \")({});\\n\", s += \"\\n\" + r.substring(o.length), \n s;\n}, e.registerTranscoder = _, e.getTranscoder = r;\n\nexport { e as default, o as getGLTFLoaderBundle, r as getTranscoder, l as registerGLTFLoaderBundle, _ as registerTranscoder };\n","import * as maptalks from 'maptalks';\n\nconst canvas = typeof document === 'undefined' ? null : document.createElement('canvas');\n\nexport default class Geo3DTilesWorkerConnection extends maptalks.worker.Actor {\n constructor(workerKey, mapId, supportNPOT) {\n super(workerKey);\n this.mapId = mapId;\n this._supportNPOT = supportNPOT;\n }\n\n initialize(cb) {\n cb(null);\n }\n\n loadTile(layerId, params, cb) {\n let buffers = null;\n if (params && params.arraybuffer) {\n buffers = [params.arraybuffer];\n }\n const data = {\n mapId : this.mapId,\n layerId,\n command : 'loadTile',\n params\n };\n this.send(data, buffers, cb);\n }\n\n abortTileLoading(layerId, url, cb) {\n const data = {\n mapId : this.mapId,\n layerId,\n command : 'abortTileLoading',\n params : {\n url\n }\n };\n this.broadcast(data, null, cb);\n }\n\n addLayer(layerId, options, cb) {\n const data = {\n actorId: this.actorId,\n mapId : this.mapId,\n layerId,\n command : 'addLayer',\n params : {\n options\n }\n };\n\n this.broadcast(data, null, cb);\n }\n\n removeLayer(layerId, cb) {\n const data = {\n mapId : this.mapId,\n layerId,\n command : 'removeLayer'\n };\n this.broadcast(data, null, cb);\n }\n\n requestImage({ url }, cb) {\n const image = new Image();\n image.onload = () => {\n if (!this.isActive()) {\n return;\n }\n if (!canvas) {\n cb(new Error('There is no canvas to draw image!'));\n return;\n }\n const img = this._supportNPOT ? image : resize(image);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n ctx.drawImage(img, 0, 0, img.width, img.height);\n const imgData = ctx.getImageData(0, 0, img.width, img.height);\n //TODO, retina may need special operations\n const result = { width : img.width, height : img.height, data : new Uint8Array(imgData.data) };\n cb(null, result, [result.data.buffer]);\n };\n image.onerror = function (err) {\n cb(err);\n };\n image.src = url;\n }\n}\n\nfunction resize(image) {\n if (isPowerOfTwo(image.width) && isPowerOfTwo(image.height)) {\n return image;\n }\n let width = image.width;\n let height = image.height;\n if (!isPowerOfTwo(width)) {\n width = floorPowerOfTwo(width);\n }\n if (!isPowerOfTwo(height)) {\n height = floorPowerOfTwo(height);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n const url = image.src;\n const idx = url.lastIndexOf('/') + 1;\n const filename = url.substring(idx);\n console.warn(`Texture(${filename})'s size is not power of two, resize from (${image.width}, ${image.height}) to (${width}, ${height})`);\n return canvas;\n}\n\nfunction isPowerOfTwo(value) {\n return (value & (value - 1)) === 0 && value !== 0;\n}\n\nfunction floorPowerOfTwo(value) {\n return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n}\n","import * as maptalks from 'maptalks';\n/**\n * from mapbox-gl-js\n * A [least-recently-used cache](http://en.wikipedia.org/wiki/Cache_algorithms)\n * with hash lookup made possible by keeping a list of keys in parallel to\n * an array of dictionary of values\n *\n * @public\n */\nclass LRUCache {\n /**\n * @param {number} max number of permitted values\n * @param {Function} onRemove callback called with items when they expire\n */\n constructor(max, onRemove) {\n this.max = max;\n this.currentSize = 0;\n this.data = new Map();\n this.onRemove = onRemove;\n }\n\n /**\n * Clear the cache\n *\n * @returns {LRUCache} this cache\n */\n reset(renderer) {\n if (this.data) {\n const keys = this.data.keys();\n for (const id of keys) {\n const data = this.data.get(id);\n if (!renderer || renderer === data.renderer) {\n this._remove(id, data);\n }\n }\n }\n if (!renderer) {\n this.data = new Map();\n this.currentSize = 0;\n }\n return this;\n }\n\n clear(renderer) {\n this.reset(renderer);\n // delete this.onRemove;\n }\n\n /**\n * Add a key, value combination to the cache, trimming its size if this pushes\n * it over max length.\n *\n * @param {string} key lookup key for the item\n * @param {*} data any value\n *\n * @returns {LRUCache} this cache\n */\n add(key, data) {\n if (!data) {\n return this;\n }\n if (data.node && data.node.memorySize) {\n this.currentSize += data.node.memorySize;\n }\n if (this.has(key)) {\n const cached = this.data.get(key);\n if (cached && cached.node && cached.node.memorySize) {\n this.currentSize -= cached.node.memorySize;\n }\n this.data.delete(key);\n this.data.set(key, data);\n } else {\n this.data.set(key, data);\n }\n\n return this;\n }\n\n shrink() {\n if (this.currentSize > this.max) {\n const iterator = this.data.keys();\n let item = iterator.next();\n while (this.currentSize > this.max && item.value !== undefined) {\n const tileData = this.data.get(item.value);\n if (tileData.current) {\n maptalks.Util.warnOnce(`current maxGPUMemory(${this.max / 1024 / 1024}) for Geo3DTilesLayer is not enough.`);\n }\n let removedData;\n if (!tileData.current) {\n removedData = this.getAndRemove(item.value);\n }\n if (removedData) {\n this.onRemove(removedData);\n }\n item = iterator.next();\n }\n }\n }\n\n /**\n * Determine whether the value attached to `key` is present\n *\n * @param {String} key the key to be looked-up\n * @returns {Boolean} whether the cache has this value\n */\n has(key) {\n return this.data.has(key);\n }\n\n /**\n * List all keys in the cache\n *\n * @returns {Array<string>} an array of keys in this cache.\n */\n keys() {\n const keys = new Array(this.data.size);\n let i = 0;\n const iterator = this.data.keys();\n for (const k of iterator) {\n keys[i++] = k;\n }\n return keys;\n }\n\n /**\n * Get the value attached to a specific key and remove data from cache.\n * If the key is not found, returns `null`\n *\n * @param {string} key the key to look up\n * @returns {*} the data, or null if it isn't found\n */\n getAndRemove(key) {\n if (!this.has(key)) { return null; }\n\n const data = this.data.get(key);\n if (data.node && data.node.memorySize) {\n this.currentSize -= data.node.memorySize;\n }\n this.data.delete(key);\n return data;\n }\n\n /**\n * Get the value attached to a specific key without removing data\n * from the cache. If the key is not found, returns `null`\n *\n * @param {string} key the key to look up\n * @returns {*} the data, or null if it isn't found\n */\n get(key) {\n if (!this.has(key)) { return null; }\n\n const data = this.data.get(key);\n this.data.delete(key);\n this.data.set(key, data);\n return data;\n }\n\n /**\n * Remove a key/value combination from the cache.\n *\n * @param {string} key the key for the pair to delete\n * @returns {LRUCache} this cache\n */\n remove(key) {\n if (!this.has(key)) { return this; }\n const data = this.data.get(key);\n this._remove(key, data);\n return this;\n }\n\n _remove(key, data) {\n if (data.node && data.node.memorySize) {\n this.currentSize -= data.node.memorySize;\n }\n this.data.delete(key);\n this.onRemove(data);\n }\n\n /**\n * Change the max size of the cache.\n *\n * @param {number} max the max size of the cache\n * @returns {LRUCache} this cache\n */\n setMaxSize(max) {\n this.max = max;\n\n this.shrink();\n\n return this;\n }\n\n getMemorySize() {\n let size = 0;\n const values = this.data.values();\n for (const p of values) {\n const node = p && p.node;\n if (node && node.memorySize) {\n size += node.memorySize;\n }\n }\n return size;\n }\n\n markAll(renderer, isCurrent) {\n const values = this.data.values();\n for (const data of values) {\n if (!renderer || data.renderer === renderer) {\n data.current = isCurrent;\n }\n }\n }\n}\n\nexport default LRUCache;\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { mat4, quat } from 'gl-matrix';\n\nconst { GLTFLoader } = getGLTFLoaderBundle();\n\nexport function iterateMesh(gltf, cb) {\n if (!gltf.scenes || !gltf.scenes.length) {\n return;\n }\n for (let i0 = 0, l0 = gltf.scenes.length; i0 < l0; i0++) {\n const nodes = gltf.scenes[i0].nodes;\n for (let i = 0, l = nodes.length; i < l; i++) {\n const matrices = [];\n const node = nodes[i];\n iterateNode(node, matrices, gltf, cb);\n // if (node.children && node.children.length) {\n // for (let ii = 0, ll = node.children.length; ii < ll; ii++) {\n // iterateNode(node.children[i], matrices, gltf, cb);\n // }\n // }\n }\n }\n}\n\nconst TMAT = [];\nconst RMAT = [];\nconst SMAT = [];\nconst EMPTY_T = [0, 0, 0];\nconst EMTPY_Q = quat.identity([]);\nconst EMPTY_S = [1, 1, 1];\n\nfunction iterateNode(node, nodeMatrices, gltf, cb) {\n const matrices = nodeMatrices.slice(0);\n if (node.matrix) {\n matrices.push(node.matrix);\n } else if (node.rotation || node.translation || node.scale) {\n const tm = mat4.fromTranslation(TMAT, node.translation || EMPTY_T);\n const rm = mat4.fromQuat(RMAT, node.rotation || EMTPY_Q);\n const sm = mat4.fromScaling(SMAT, node.scale || EMPTY_S);\n mat4.multiply(sm, rm, sm);\n const matrix = mat4.multiply([], tm, sm);\n matrices.push(matrix);\n }\n if (node.children && node.children.length) {\n for (let ii = 0, ll = node.children.length; ii < ll; ii++) {\n iterateNode(node.children[ii], matrices, gltf, cb);\n }\n }\n if (node.mesh !== undefined) {\n const meshIndex = node.mesh;\n const mesh = gltf.meshes[meshIndex];\n if (mesh) {\n const mat = matrices.slice(0);\n const primitives = mesh.primitives;\n for (let ii = 0, ll = primitives.length; ii < ll; ii++) {\n const primitive = primitives[ii];\n if (primitive) {\n primitive.matrices = mat;\n cb(primitive, meshIndex, ii, gltf);\n }\n }\n }\n }\n // if (node.meshes && node.meshes.length) {\n // for (let i = 0, l = node.meshes.length; i < l; i++) {\n // const mesh = node.meshes[i];\n // if (mesh) {\n // const mat = matrices.slice(0);\n // const primitives = mesh.primitives;\n // for (let ii = 0, ll = primitives.length; ii < ll; ii++) {\n // const primitive = primitives[ii];\n // if (primitive) {\n // primitive.matrices = mat;\n // cb(primitive, gltf);\n // }\n // }\n // }\n // }\n // }\n\n}\n\n// 遍历 GLTF-Loader 返回的bufferData\nexport function iterateBufferData(arr, cb) {\n let { byteOffset, byteStride: stride, count } = arr;\n const { componentType, itemSize } = arr;\n const arrayBuffer = arr.array.buffer;\n const ctor = componentType ? GLTFLoader.getTypedArrayCtor(componentType) : arr.array.constructor;\n byteOffset = byteOffset === undefined ? arr.array.byteOffset : byteOffset;\n stride = stride || 0;\n count = count || arr.array.length / itemSize;\n const byteLength = Math.min(arrayBuffer.byteLength - byteOffset, count * itemSize * ctor.BYTES_PER_ELEMENT);\n count = Math.floor(byteLength / (itemSize * ctor.BYTES_PER_ELEMENT));\n if ((!stride || stride === itemSize * ctor.BYTES_PER_ELEMENT) && byteOffset % ctor.BYTES_PER_ELEMENT === 0) {\n const src = new ctor(arrayBuffer, byteOffset, count * itemSize);\n for (let i = 0; i < count * itemSize; i+= itemSize) {\n const tempTypeArray = new ctor(src.buffer, byteOffset + i * ctor.BYTES_PER_ELEMENT, itemSize);\n cb(tempTypeArray, i / itemSize);\n }\n return;\n }\n const tempUint8 = new Uint8Array(itemSize * ctor.BYTES_PER_ELEMENT);\n if (!stride) {\n stride = itemSize * ctor.BYTES_PER_ELEMENT;\n }\n for (let i = 0; i < count; i++) {\n const start = stride * i + byteOffset;\n const uint8Arr = new Uint8Array(arrayBuffer, start, itemSize * ctor.BYTES_PER_ELEMENT);\n tempUint8.set(uint8Arr);\n const item = new ctor(tempUint8.buffer);\n cb(item, i);\n uint8Arr.set(tempUint8);\n }\n}\n\n\n// 从 GLTF-Loader 返回的bufferData获取指定位置的数据\nexport function getItemAtBufferData(out, arr, index) {\n let { byteOffset, byteStride: stride } = arr;\n const { componentType, itemSize } = arr;\n const arrayBuffer = arr.array.buffer;\n const ctor = componentType ? GLTFLoader.getTypedArrayCtor(componentType) : arr.array.constructor;\n byteOffset = byteOffset === undefined ? arr.array.byteOffset : byteOffset;\n stride = stride || 0;\n if (!stride || (stride === itemSize * ctor.BYTES_PER_ELEMENT && byteOffset % ctor.BYTES_PER_ELEMENT === 0)) {\n const src = new ctor(arrayBuffer, byteOffset + index * itemSize * ctor.BYTES_PER_ELEMENT, itemSize);\n out.set(src);\n return out;\n }\n if (!stride) {\n stride = itemSize * ctor.BYTES_PER_ELEMENT;\n }\n const start = stride * index + byteOffset;\n const uint8Arr = new Uint8Array(arrayBuffer, start, itemSize * ctor.BYTES_PER_ELEMENT);\n const tempUint8 = new Uint8Array(out.buffer);\n tempUint8.set(uint8Arr);\n return out;\n\n}\n\nexport function setInstanceData(out, idx, matrix, row) {\n out[idx * 4] = matrix[row];\n out[idx * 4 + 1] = matrix[row + 4];\n out[idx * 4 + 2] = matrix[row + 8];\n out[idx * 4 + 3] = matrix[row + 12];\n}\n\n\nexport function binarizeGLTF(rawGLTF, glb) {\n const encoder = new TextEncoder();\n const rawGLTFData = encoder.encode(JSON.stringify(rawGLTF));\n // const binaryGLTFData = new Uint8Array(rawGLTFData.byteLength + 20);\n\n let chunkPadding = 0;\n if (rawGLTFData.byteLength % 4 !== 0) {\n chunkPadding = 4 - rawGLTFData.byteLength % 4;\n }\n // JSON的长度是 rawGLTFData.byteLength + 20\n const binaryGLTFData = new Uint8Array(rawGLTFData.byteLength + 20 + chunkPadding + glb.byteLength + 8);\n const binaryGLTF = {\n magic: new Uint8Array(binaryGLTFData.buffer, 0, 4),\n version: new Uint32Array(binaryGLTFData.buffer, 4, 1),\n length: new Uint32Array(binaryGLTFData.buffer, 8, 1),\n chunkLength: new Uint32Array(binaryGLTFData.buffer, 12, 1),\n chunkType: new Uint32Array(binaryGLTFData.buffer, 16, 1),\n chunkData: new Uint8Array(\n binaryGLTFData.buffer,\n 20,\n rawGLTFData.byteLength\n ),\n chunk1Length: new Uint32Array(binaryGLTFData.buffer, chunkPadding + 20 + rawGLTFData.byteLength, 1),\n chunk1Type: new Uint32Array(binaryGLTFData.buffer, chunkPadding + 24 + rawGLTFData.byteLength, 1),\n chunk1Data: new Uint8Array(\n binaryGLTFData.buffer,\n chunkPadding + 20 + rawGLTFData.byteLength + 4 + 4,\n glb.byteLength\n )\n };\n\n for (let i = 0; i < chunkPadding; i++) {\n // chunkPadding 用空格补充\n binaryGLTFData[rawGLTFData.byteLength + 20 + i] = 32;\n }\n\n binaryGLTF.magic[0] = \"g\".charCodeAt();\n binaryGLTF.magic[1] = \"l\".charCodeAt();\n binaryGLTF.magic[2] = \"T\".charCodeAt();\n binaryGLTF.magic[3] = \"F\".charCodeAt();\n\n binaryGLTF.version[0] = 2;\n binaryGLTF.length[0] = binaryGLTFData.byteLength;\n binaryGLTF.chunkLength[0] = rawGLTFData.byteLength + chunkPadding;\n binaryGLTF.chunkType[0] = 0x4e4f534a; // JSON\n binaryGLTF.chunkData.set(rawGLTFData);\n\n binaryGLTF.chunk1Length[0] = glb.byteLength;\n binaryGLTF.chunk1Type[0] = 0x004E4942;\n binaryGLTF.chunk1Data.set(glb);\n\n return binaryGLTFData;\n}\n\nexport function binarizeB3DM(featureTableJSON, batchTabelJSON, binaryGLTFData) {\n const encoder = new TextEncoder();\n\n // Feature Table\n const featureTableOffset = 28;\n const featureTableJSONData = encoder.encode(featureTableJSON);\n const featureTableLength = featureTableJSONData.byteLength;\n\n // Batch Table\n const batchTableOffset = featureTableOffset + featureTableLength;\n const batchTableJSONData = encoder.encode(batchTabelJSON);\n\n // Calculate alignment buffer by padding the remainder of the batch table\n const paddingCount = (batchTableOffset + batchTableJSONData.byteLength) % 8;\n const batchTableLength = batchTableJSONData.byteLength + paddingCount;\n const paddingStart = batchTableJSONData.byteLength;\n const paddingStop = batchTableLength;\n\n // Binary GLTF\n const binaryGLTFOffset = batchTableOffset + batchTableLength;\n const binaryGLTFLength = binaryGLTFData.byteLength;\n\n const dataSize = featureTableLength + batchTableLength + binaryGLTFLength;\n const b3dmRawData = new Uint8Array(28 + dataSize);\n\n const b3dmData = {\n magic: new Uint8Array(b3dmRawData.buffer, 0, 4),\n version: new Uint32Array(b3dmRawData.buffer, 4, 1),\n byteLength: new Uint32Array(b3dmRawData.buffer, 8, 1),\n featureTableJSONByteLength: new Uint32Array(b3dmRawData.buffer, 12, 1),\n featureTableBinaryByteLength: new Uint32Array(b3dmRawData.buffer, 16, 1),\n batchTableJSONByteLength: new Uint32Array(b3dmRawData.buffer, 20, 1),\n batchTableBinaryByteLength: new Uint32Array(b3dmRawData.buffer, 24, 1),\n featureTable: new Uint8Array(\n b3dmRawData.buffer,\n featureTableOffset,\n featureTableLength\n ),\n batchTable: new Uint8Array(\n b3dmRawData.buffer,\n batchTableOffset,\n batchTableLength\n ),\n binaryGLTF: new Uint8Array(\n b3dmRawData.buffer,\n binaryGLTFOffset,\n binaryGLTFLength\n ),\n };\n\n b3dmData.magic[0] = \"b\".charCodeAt();\n b3dmData.magic[1] = \"3\".charCodeAt();\n b3dmData.magic[2] = \"d\".charCodeAt();\n b3dmData.magic[3] = \"m\".charCodeAt();\n\n b3dmData.version[0] = 1;\n b3dmData.byteLength[0] = b3dmRawData.byteLength;\n\n b3dmData.featureTable.set(featureTableJSONData);\n b3dmData.featureTableJSONByteLength[0] = featureTableLength;\n b3dmData.featureTableBinaryByteLength[0] = 0;\n\n b3dmData.batchTable.set(batchTableJSONData);\n for(let index = paddingStart; index < paddingStop; ++index) {\n b3dmData.batchTable[index] = 0x20;\n }\n b3dmData.batchTableJSONByteLength[0] = batchTableLength;\n b3dmData.batchTableBinaryByteLength[0] = 0;\n b3dmData.binaryGLTF.set(binaryGLTFData);\n\n return b3dmRawData;\n}\n","#include <gl2_vert>\n#define SHADER_NAME GEO_3DTILES_PICKING\n\nattribute vec3 aPosition;\n\n#if defined(HAS_COLOR)\n attribute vec4 aColor;\n#endif\n#if defined(HAS_COLOR0)\n #if COLOR0_SIZE == 3\n attribute vec3 aColor0;\n varying vec3 vColor0;\n #else\n attribute vec4 aColor0;\n varying vec4 vColor0;\n #endif\n#endif\n\n\nuniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 positionMatrix;\nuniform mat4 projMatrix;\n\n#include <line_extrusion_vert>\n#include <get_output>\n\n#include <fbo_picking_vert>\nvoid main() {\n mat4 localPositionMatrix = getPositionMatrix();\n vec4 localVertex = getPosition(aPosition);\n\n vec4 position = localPositionMatrix * localVertex;\n vec4 viewVertex = modelViewMatrix * position;\n\n #ifdef HAS_MASK_EXTENT\n gl_Position = projMatrix * getMaskPosition(position, modelMatrix);\n #else\n gl_Position = projMatrix * viewVertex;\n #endif\n\n float alpha = 1.0;\n #if defined(HAS_COLOR)\n alpha *= aColor.a;\n #endif\n #if defined(HAS_COLOR0) && COLOR0_SIZE == 4\n alpha *= aColor0.a;\n #endif\n\n fbo_picking_setData(gl_Position.w, alpha != 0.0);\n\n\n}\n","#include <gl2_vert>\nconst float SHIFT_RIGHT_11 = 1.0 / 2048.0;\nconst float SHIFT_RIGHT_5 = 1.0 / 32.0;\nconst float SHIFT_LEFT_11 = 2048.0;\nconst float SHIFT_LEFT_5 = 32.0;\nconst float NORMALIZE_6 = 1.0 / 64.0;\nconst float NORMALIZE_5 = 1.0 / 32.0;\n\n#ifdef HAS_POSITION\n attribute vec3 POSITION;\n#endif\n\n#if defined(HAS_RGB)\n attribute vec3 RGB;\n#elif defined(HAS_RGBA)\n attribute vec4 RGBA;\n#elif defined(HAS_RGB565)\n attribute float RGB565;\n#endif\n\nuniform vec4 pointColor;\nuniform float pointSize;\n\nuniform mat4 projViewModelMatrix;\nuniform float pointOpacity;\n\nvarying vec4 vColor;\n\n#ifdef HAS_NORMAL\n #ifdef HAS_NORMAL_OCT16P\n attribute vec2 NORMAL_OCT16P;\n float signNotZero(float value) {\n return value >= 0.0 ? 1.0 : -1.0;\n }\n vec2 signNotZero(vec2 value) {\n return vec2(signNotZero(value.x), signNotZero(value.y));\n }\n vec3 octDecode(vec2 encoded, float range) {\n if (encoded.x == 0.0 && encoded.y == 0.0) {\n return vec3(0.0, 0.0, 0.0);\n }\n encoded = encoded / range * 2.0 - 1.0;\n vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));\n if (v.z < 0.0) {\n v.xy = (1.0 - abs(v.yx)) * signNotZero(v.xy);\n }\n return normalize(v);\n }\n vec3 octDecode(vec2 encoded) {\n return octDecode(encoded, 255.0);\n }\n #else\n attribute vec3 NORMAL;\n #endif\n uniform vec3 lightDir;\n uniform mat3 modelNormalMatrix;\n uniform mat4 positionMatrix;\n float getLambertDiffuse(vec3 lightDir, vec3 normal) {\n return max(dot(-lightDir, normal), 0.0);\n }\n#endif\n#ifdef PICKING_MODE\n #include <fbo_picking_vert>\n#endif\n#include <draco_decode_vert>\nvoid main() {\n #ifdef HAS_POSITION\n vec3 localPos = decode_getPosition(POSITION);\n #endif\n gl_Position = projViewModelMatrix * vec4(localPos, 1.0);\n gl_PointSize = pointSize;\n\n #ifdef PICKING_MODE\n fbo_picking_setData(gl_Position.w, true);\n #else\n #if defined(HAS_RGB)\n vColor = vec4(RGB / 255.0, 1.0) * pointOpacity;\n #elif defined(HAS_RGBA)\n vColor = RGBA / 255.0 * pointOpacity;\n #elif defined(HAS_RGB565)\n // from Cesium PointCloud.js\n // MIT License\n float compressed = RGB565;\n float r = floor(compressed * SHIFT_RIGHT_11);\n compressed -= r * SHIFT_LEFT_11;\n float g = floor(compressed * SHIFT_RIGHT_5);\n compressed -= g * SHIFT_LEFT_5;\n float b = compressed;\n vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5);\n vColor = vec4(rgb, 1.0);\n #else\n vColor = pointColor;\n #endif\n\n #ifdef HAS_NORMAL\n mat3 positionNormalMatrix = mat3(positionMatrix);\n mat3 normalMatrix = modelNormalMatrix * positionNormalMatrix;\n #ifdef HAS_NORMAL_OCT16P\n vec3 localNormal = octDecode(NORMAL_OCT16P);\n #else\n vec3 localNormal = NORMAL;\n #endif\n vec3 normal = normalize(normalMatrix * localNormal);\n float colorStrength = getLambertDiffuse(lightDir, normal);\n colorStrength = max(colorStrength, 0.5);\n vColor *= colorStrength;\n #endif\n #endif\n\n\n\n\n}\n","#define SHADER_NAME PNTS\nprecision mediump float;\n\nuniform float layerOpacity;\nvarying vec4 vColor;\n\nvoid main() {\n vec2 circCoord = 2.0 * gl_PointCoord - 1.0;\n if (dot(circCoord, circCoord) > 1.0) {\n discard;\n } else {\n gl_FragColor = vColor;\n }\n #ifdef HAS_LAYER_OPACITY\n gl_FragColor *= layerOpacity;\n #endif\n}\n","//---------------------------\n// Cesium Codes for catersian and quaternion transformation\n//\n// All credit goes to Cesium team and Cesium Contributors\n// LICENSE : Apache License\n//---------------------------\nimport { vec3 } from 'gl-matrix';\nimport { toDegree, sign } from './Util';\n\n\n//reusable variables for radianToCartesian3\nconst scratchN = new Array(3),\n scratchK = new Array(3);\n\nconst wgs84RadiiSquared = [6378137.0 * 6378137.0, 6378137.0 * 6378137.0, 6356752.3142451793 * 6356752.3142451793];\n\n/**\n * from Cesium\n * Convert radians to Cartesian3 coordinate\n * from Cesium Cartesian3.fromRadians\n * @param {Number} longitude in radians\n * @param {Number} latitude in radians\n * @param {Number} height in meters\n * @param {Number} radius earth sphere's radius\n * @returns {Number[]} coordinate in Cartesian3\n */\nexport function radianToCartesian3(out, longitude, latitude, height) {\n const radiiSquared = wgs84RadiiSquared;\n\n const cosLatitude = Math.cos(latitude);\n scratchN[0] = cosLatitude * Math.cos(longitude);\n scratchN[1] = cosLatitude * Math.sin(longitude);\n scratchN[2] = Math.sin(latitude);\n normalizeCartesian(scratchN, scratchN);\n\n vec3.multiply(scratchK, radiiSquared, scratchN);\n const gamma = Math.sqrt(vec3.dot(scratchN, scratchK));\n divideByScalar(scratchK, scratchK, gamma);\n vec3.scale(scratchN, scratchN, height);\n\n return vec3.add(out, scratchK, scratchN);\n}\n\n//reusable variables for cartesian3ToDegree\nconst wgs84OneOverRadii = [1.0 / 6378137.0, 1.0 / 6378137.0, 1.0 / 6356752.3142451793];\nconst wgs84OneOverRadiiSquared = [1.0 / (6378137 * 6378137), 1.0 / (6378137 * 6378137), 1.0 / (6356752.3142451793 * 6356752.3142451793)];\n\nconst cartesianToCartographicP = new Array(3);\nconst cartesianToCartographicN = new Array(3);\nconst cartesianToCartographicH = new Array(3);\n\n/**\n * from Cesium\n * Creates a new Cartographic instance from a Cartesian position. The values in the\n * resulting object will be in radians.\n *\n * @param cartesian The Cartesian position to convert to cartographic representation.\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\n */\nexport function cartesian3ToDegree(result, cartesian) {\n const oneOverRadii = wgs84OneOverRadii;\n const oneOverRadiiSquared = wgs84OneOverRadiiSquared;\n const centerToleranceSquared = 0.1;\n\n //`cartesian is required.` is thrown from scaleToGeodeticSurface\n const p = scaleToGeodeticSurface(cartesianToCartographicP, cartesian, oneOverRadii, oneOverRadiiSquared, centerToleranceSquared);\n\n let n = vec3.mul(cartesianToCartographicN, p, oneOverRadiiSquared);\n n = normalizeCartesian(n, n);\n\n const h = vec3.sub(cartesianToCartographicH, cartesian, p);\n\n const longitude = Math.atan2(n[1], n[0]);\n const latitude = Math.asin(n[2]);\n const height = sign(vec3.dot(h, cartesian)) * magnitude(h);\n\n result[0] = toDegree(longitude);\n result[1] = toDegree(latitude);\n result[2] = height;\n return result;\n}\n\n//reusable variables for scaleToGeodeticSurface\nconst scaleToGeodeticSurfaceIntersection = new Array(3);\nconst scaleToGeodeticSurfaceGradient = new Array(3);\nconst EPSILON12 = 1E-12;\n\n/**\n * from Cesium\n * Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid. If the position is\n * at the center of the ellipsoid, this function returns undefined.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} oneOverRadii One over radii of the ellipsoid.\n * @param {Cartesian3} oneOverRadiiSquared One over radii squared of the ellipsoid.\n * @param {Number} centerToleranceSquared Tolerance for closeness to the center.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\n *\n * @exports scaleToGeodeticSurface\n *\n * @private\n */\nfunction scaleToGeodeticSurface(result, cartesian, oneOverRadii, oneOverRadiiSquared, centerToleranceSquared) {\n\n const positionX = cartesian[0];\n const positionY = cartesian[1];\n const positionZ = cartesian[2];\n\n const oneOverRadiiX = oneOverRadii[0];\n const oneOverRadiiY = oneOverRadii[1];\n const oneOverRadiiZ = oneOverRadii[2];\n\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n // Compute the squared ellipsoid norm.\n const squaredNorm = x2 + y2 + z2;\n const ratio = Math.sqrt(1.0 / squaredNorm);\n\n // As an initial approximation, assume that the radial intersection is the projection point.\n // const intersection = Cartesian3.multiplyByScalar(cartesian, ratio, scaleToGeodeticSurfaceIntersection);\n const intersection = vec3.scale(scaleToGeodeticSurfaceIntersection, cartesian, ratio);\n\n // If the position is near the center, the iteration will not converge.\n if (squaredNorm < centerToleranceSquared) {\n return !isFinite(ratio) ? undefined : intersection;\n }\n\n const oneOverRadiiSquaredX = oneOverRadiiSquared[0];\n const oneOverRadiiSquaredY = oneOverRadiiSquared[1];\n const oneOverRadiiSquaredZ = oneOverRadiiSquared[2];\n\n // Use the gradient at the intersection point in place of the true unit normal.\n // The difference in magnitude will be absorbed in the multiplier.\n const gradient = scaleToGeodeticSurfaceGradient;\n gradient[0] = intersection[0] * oneOverRadiiSquaredX * 2.0;\n gradient[1] = intersection[1] * oneOverRadiiSquaredY * 2.0;\n gradient[2] = intersection[2] * oneOverRadiiSquaredZ * 2.0;\n\n // Compute the initial guess at the normal vector multiplier, lambda.\n let lambda = (1.0 - ratio) * magnitude(cartesian) / (0.5 * magnitude(gradient));\n let correction = 0.0;\n\n let func;\n let denominator;\n let xMultiplier;\n let yMultiplier;\n let zMultiplier;\n let xMultiplier2;\n let yMultiplier2;\n let zMultiplier2;\n let xMultiplier3;\n let yMultiplier3;\n let zMultiplier3;\n\n do {\n lambda -= correction;\n\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n xMultiplier2 = xMultiplier * xMultiplier;\n yMultiplier2 = yMultiplier * yMultiplier;\n zMultiplier2 = zMultiplier * zMultiplier;\n\n xMultiplier3 = xMultiplier2 * xMultiplier;\n yMultiplier3 = yMultiplier2 * yMultiplier;\n zMultiplier3 = zMultiplier2 * zMultiplier;\n\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n // computations in the sections to follow.\n denominator = x2 * xMultiplier3 * oneOverRadiiSquaredX + y2 * yMultiplier3 * oneOverRadiiSquaredY + z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n const derivative = -2.0 * denominator;\n\n correction = func / derivative;\n } while (Math.abs(func) > EPSILON12);\n\n result[0] = positionX * xMultiplier;\n result[1] = positionY * yMultiplier;\n result[2] = positionZ * zMultiplier;\n return result;\n}\n\nfunction magnitude(v) {\n return vec3.length(v);\n}\n\nfunction divideByScalar(result, cartesian, scalar) {\n result[0] = cartesian[0] / scalar;\n result[1] = cartesian[1] / scalar;\n result[2] = cartesian[2] / scalar;\n return result;\n}\n\nexport function normalizeCartesian(out, a) {\n const x = a[0],\n y = a[1],\n z = a[2];\n let len = x * x + y * y + z * z;\n if (len > 0) {\n len = Math.sqrt(len);\n out[0] = a[0] / len;\n out[1] = a[1] / len;\n out[2] = a[2] / len;\n }\n return out;\n}\n\nexport function geodeticSurfaceNormal(origin, out) {\n vec3.multiply(\n out,\n origin,\n wgs84OneOverRadiiSquared\n );\n return vec3.normalize(out, out);\n}\n\n\nexport function geodeticSurfaceNormalCartographic(\n cartographic,\n result\n) {\n const longitude = cartographic[0];\n const latitude = cartographic[1];\n const cosLatitude = Math.cos(latitude);\n\n const x = cosLatitude * Math.cos(longitude);\n const y = cosLatitude * Math.sin(longitude);\n const z = Math.sin(latitude);\n\n result.x = x;\n result.y = y;\n result.z = z;\n return vec3.normalize(result, result);\n}\n","export const EPSILON14 = 0.00000000000001;\nexport const EPSILON15 = 0.000000000000001;\nexport const EPSILON6 = 0.000001;\n\nexport function equalsEpsilon (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) { //>>includeEnd('debug');\n\n relativeEpsilon = (relativeEpsilon || 0.0);\n absoluteEpsilon = (absoluteEpsilon || relativeEpsilon);\n const absDiff = Math.abs(left - right);\n return (\n absDiff <= absoluteEpsilon ||\n absDiff <= relativeEpsilon * Math.max(Math.abs(left), Math.abs(right))\n );\n}\n","import { stringFromUTF8Array, sign as mathSign } from './Util.js';\nimport { vec3, mat3, mat4 } from 'gl-matrix';\nimport { cartesian3ToDegree, geodeticSurfaceNormal, radianToCartesian3 } from './Transform';\nimport { EPSILON14, equalsEpsilon } from './Math';\n\nexport function readMagic(view, offset) {\n let magic = '';\n for (let i = 0; i < 4; i++) {\n const code = view.getUint8(offset + i);\n magic += String.fromCharCode(code);\n }\n return magic;\n}\n\nconst textDecoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8') : null;\n\nexport function readFeatureTableJSON(buffer, byteOffset, byteLength) {\n const arr = new Uint8Array(buffer, byteOffset, byteLength);\n if (textDecoder) {\n return JSON.parse(textDecoder.decode(arr));\n } else {\n return JSON.parse(stringFromUTF8Array(arr));\n }\n}\n\nexport function readFeatureTableBin(buffer, byteOffset, byteLength) {\n return {\n offset: byteOffset,\n byteLength: byteLength\n };\n}\n\n\nexport function readBatchTableJSON(buffer, byteOffset, byteLength) {\n const arr = new Uint8Array(buffer, byteOffset, byteLength);\n if (textDecoder) {\n return JSON.parse(textDecoder.decode(arr));\n } else {\n return JSON.parse(stringFromUTF8Array(arr));\n }\n}\n\nexport function readBatchTableBin(buffer, byteOffset, byteLength) {\n return {\n offset: byteOffset,\n byteLength\n };\n}\n\nexport function readBatchArray(batchId, buf, offset, count) {\n const { byteOffset, componentType, type } = batchId;\n const { ctor, type: reglType } = getComponentCtor(componentType || 'UNSIGNED_SHORT');\n const itemSize = getItemSize(type);\n return {\n byteStride: 0,\n byteOffset: byteOffset + offset,\n itemSize,\n count: count * itemSize,\n componentType: reglType,\n array: new ctor(buf, offset + byteOffset, count * itemSize)\n }\n}\n\nexport function readBatchId(batchId, buf, offset, count) {\n const batchIdData = readBatchArray(batchId, buf, offset, count);\n if (batchIdData.array.buffer.byteLength !== buf.byteLength) {\n batchIdData.array = batchIdData.array.slice();\n }\n return batchIdData;\n}\n\nexport function readBatchData(batchId, buf, count, index) {\n const { byteOffset, componentType, type } = batchId;\n const { ctor } = getComponentCtor(componentType || 'UNSIGNED_SHORT');\n const itemSize = getItemSize(type);\n const array = new ctor(buf, byteOffset, count * itemSize);\n if (itemSize === 1) {\n return array[index];\n } else {\n return array.subarray(index * itemSize, index * itemSize + itemSize);\n }\n\n}\n\nconst TYPE_SIZES = {\n 'SCALAR': 1,\n 'VEC2': 2,\n 'VEC3': 3,\n 'VEC4': 4\n};\n\nexport function getItemSize(type) {\n if (!type) {\n return 1;\n }\n return TYPE_SIZES[type];\n}\n\nconst typeMap = {\n \"BYTE\": { ctor: Int8Array, type: 0x1400, name: 'Int8Array' },\n \"UNSIGNED_BYTE\": { ctor: Uint8Array, type: 0x1401, name: 'Uint8Array' },\n \"SHORT\": { ctor: Int16Array, type: 0x1402, name: 'Int16Array' },\n \"UNSIGNED_SHORT\": { ctor: Uint16Array, type: 0x1403, name: 'Uint16Array' },\n \"INT\": { ctor: Int32Array, type: 0x1404, name: 'Int32Array' },\n \"UNSIGNED_INT\": { ctor: Uint32Array, type: 0x1405, name: 'Uint32Array' },\n \"FLOAT\": { ctor: Float32Array, type: 0x1406, name: 'Float32Array' },\n \"DOUBLE\": { ctor: Float64Array, type: 0x1406, name: 'Float64Array' }\n};\n\nexport function getComponentCtor(componentType) {\n return typeMap[componentType];\n}\n\nexport function getComponentFromCtor(ctor) {\n for (const p in typeMap) {\n if (ctor === typeMap[p].ctor) {\n return typeMap[p].type;\n }\n }\n throw new Error('unrecognized ctor:' + ctor);\n}\n\nexport function convertQuantizedPosition(out, arr, offset, scale) {\n const position = out;\n const count = arr.length / 3;\n for (let i = 0; i < count; i++) {\n position[i * 3] = (arr[i * 3] / 65535.0) * scale[0] + offset[0];\n position[i * 3 + 1] = (arr[i * 3 + 1] / 65535.0) * scale[1] + offset[1];\n position[i * 3 + 2] = (arr[i * 3 + 2] / 65535.0) * scale[2] + offset[2];\n }\n return position;\n}\n\n\nexport function readFeatureTableBatchTable(view, byteOffset, transferables) {\n const featureTableJsonByteLength = view.getUint32(12, true);\n const featureTableBinaryByteLength = view.getUint32(16, true);\n const batchTableJsonByteLength = view.getUint32(20, true);\n const batchTableBinaryByteLength = view.getUint32(24, true);\n\n const i3dmBuf = view.buffer;\n let featureTable = {}, featureTableBin;\n let batchTable = {}, batchTableBin = null;\n if (featureTableJsonByteLength > 0) {\n featureTable = readFeatureTableJSON(i3dmBuf, byteOffset, featureTableJsonByteLength);\n byteOffset += featureTableJsonByteLength;\n }\n if (featureTableBinaryByteLength > 0) {\n featureTableBin = readFeatureTableBin(i3dmBuf, byteOffset, featureTableBinaryByteLength);\n byteOffset += featureTableBinaryByteLength;\n }\n if (batchTableJsonByteLength > 0) {\n batchTable = readBatchTableJSON(i3dmBuf, byteOffset, batchTableJsonByteLength);\n byteOffset += batchTableJsonByteLength;\n }\n const batchTableBinInfo = readBatchTableBin(i3dmBuf, byteOffset, batchTableBinaryByteLength);\n batchTableBin = i3dmBuf.slice(batchTableBinInfo.offset, batchTableBinInfo.offset + batchTableBinInfo.byteLength);\n transferables.push(batchTableBin);\n\n return {\n featureTable, featureTableBin, batchTable, batchTableBin\n };\n}\n\n\nconst vectorProductLocalFrame = {\n up: {\n south: \"east\",\n north: \"west\",\n west: \"south\",\n east: \"north\",\n },\n down: {\n south: \"west\",\n north: \"east\",\n west: \"north\",\n east: \"south\",\n },\n south: {\n up: \"west\",\n down: \"east\",\n west: \"down\",\n east: \"up\",\n },\n north: {\n up: \"east\",\n down: \"west\",\n west: \"up\",\n east: \"down\",\n },\n west: {\n up: \"north\",\n down: \"south\",\n north: \"down\",\n south: \"up\",\n },\n east: {\n up: \"south\",\n down: \"north\",\n north: \"up\",\n south: \"down\",\n },\n};\n\nconst degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1],\n};\nconst localFrameToFixedFrameCache = {};\nconst scratchCalculateCartesian = {\n east:[],\n north:[],\n up:[],\n west:[],\n south:[],\n down:[],\n};\nlet scratchFirstCartesian = [];\nlet scratchSecondCartesian = [];\nlet scratchThirdCartesian = [];\n\nconst ZERO = [0, 0, 0];\n\nfunction localFrameToFixedFrameGenerator(firstAxis, secondAxis) {\n const thirdAxis = vectorProductLocalFrame[firstAxis][secondAxis];\n\n /**\n * Computes a 4x4 transformation matrix from a reference frame\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * @callback Transforms.LocalFrameToFixedFrame\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n */\n let resultat;\n const hashAxis = firstAxis + secondAxis;\n if (localFrameToFixedFrameCache[hashAxis]) {\n resultat = localFrameToFixedFrameCache[hashAxis];\n } else {\n resultat = function (origin, ellipsoid, result) {\n if (\n vec3.equals(origin, ZERO)\n ) {\n // If x, y, and z are zero, use the degenerate local frame, which is a special case\n vec3.copy(scratchFirstCartesian, degeneratePositionLocalFrame[firstAxis]);\n vec3.copy(scratchSecondCartesian, degeneratePositionLocalFrame[secondAxis]);\n vec3.copy(scratchThirdCartesian, degeneratePositionLocalFrame[thirdAxis]);\n } else if (\n equalsEpsilon(origin[0], 0.0, EPSILON14) &&\n equalsEpsilon(origin[1], 0.0, EPSILON14)\n ) {\n // If x and y are zero, assume origin is at a pole, which is a special case.\n const sign = mathSign(origin[2]);\n\n vec3.copy(scratchFirstCartesian, degeneratePositionLocalFrame[firstAxis]);\n if (firstAxis !== \"east\" && firstAxis !== \"west\") {\n vec3.scale(scratchFirstCartesian, scratchFirstCartesian, sign);\n }\n\n vec3.copy(scratchSecondCartesian, degeneratePositionLocalFrame[secondAxis]);\n if (secondAxis !== \"east\" && secondAxis !== \"west\") {\n vec3.scale(scratchSecondCartesian, scratchSecondCartesian, sign);\n }\n\n vec3.copy(scratchThirdCartesian, degeneratePositionLocalFrame[thirdAxis]);\n if (thirdAxis !== \"east\" && thirdAxis !== \"west\") {\n vec3.scale(scratchThirdCartesian, scratchThirdCartesian, sign);\n }\n } else {\n geodeticSurfaceNormal(origin, scratchCalculateCartesian.up);\n\n const up = scratchCalculateCartesian.up;\n const east = scratchCalculateCartesian.east;\n east[0] = -origin[1];\n east[1] = origin[0];\n east[2] = 0.0;\n vec3.normalize(scratchCalculateCartesian.east, east);\n vec3.cross(scratchCalculateCartesian.north, up, east);\n\n vec3.scale(\n scratchCalculateCartesian.down,\n scratchCalculateCartesian.up,\n -1\n );\n vec3.scale(\n scratchCalculateCartesian.west,\n scratchCalculateCartesian.east,\n -1\n );\n vec3.scale(\n scratchCalculateCartesian.south,\n scratchCalculateCartesian.north,\n -1\n );\n\n scratchFirstCartesian = scratchCalculateCartesian[firstAxis];\n scratchSecondCartesian = scratchCalculateCartesian[secondAxis];\n scratchThirdCartesian = scratchCalculateCartesian[thirdAxis];\n }\n result[0] = scratchFirstCartesian[0];\n result[1] = scratchFirstCartesian[1];\n result[2] = scratchFirstCartesian[2];\n result[3] = 0.0;\n result[4] = scratchSecondCartesian[0];\n result[5] = scratchSecondCartesian[1];\n result[6] = scratchSecondCartesian[2];\n result[7] = 0.0;\n result[8] = scratchThirdCartesian[0];\n result[9] = scratchThirdCartesian[1];\n result[10] = scratchThirdCartesian[2];\n result[11] = 0.0;\n result[12] = origin[0];\n result[13] = origin[1];\n result[14] = origin[2];\n result[15] = 1.0;\n return result;\n };\n localFrameToFixedFrameCache[hashAxis] = resultat;\n }\n return resultat;\n}\n\nfunction multiplyByMatrix3 (matrix, rotation, result) {\n //>>includeEnd('debug');\n\n const left0 = matrix[0];\n const left1 = matrix[1];\n const left2 = matrix[2];\n const left4 = matrix[4];\n const left5 = matrix[5];\n const left6 = matrix[6];\n const left8 = matrix[8];\n const left9 = matrix[9];\n const left10 = matrix[10];\n\n const right0 = rotation[0];\n const right1 = rotation[1];\n const right2 = rotation[2];\n const right4 = rotation[3];\n const right5 = rotation[4];\n const right6 = rotation[5];\n const right8 = rotation[6];\n const right9 = rotation[7];\n const right10 = rotation[8];\n\n const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\n const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\n const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\n\n const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\n const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\n const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\n\n const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\n const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\n const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = 0.0;\n result[4] = column1Row0;\n result[5] = column1Row1;\n result[6] = column1Row2;\n result[7] = 0.0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = 0.0;\n result[12] = matrix[12];\n result[13] = matrix[13];\n result[14] = matrix[14];\n result[15] = matrix[15];\n return result;\n}\n\n// function fromRowMajor(\n// column0Row0,\n// column1Row0,\n// column2Row0,\n// column3Row0,\n// column0Row1,\n// column1Row1,\n// column2Row1,\n// column3Row1,\n// column0Row2,\n// column1Row2,\n// column2Row2,\n// column3Row2,\n// column0Row3,\n// column1Row3,\n// column2Row3,\n// column3Row3) {\n// const out = [];\n// out[0] = column0Row0 || 0.0;\n// out[1] = column0Row1 || 0.0;\n// out[2] = column0Row2 || 0.0;\n// out[3] = column0Row3 || 0.0;\n// out[4] = column1Row0 || 0.0;\n// out[5] = column1Row1 || 0.0;\n// out[6] = column1Row2 || 0.0;\n// out[7] = column1Row3 || 0.0;\n// out[8] = column2Row0 || 0.0;\n// out[9] = column2Row1 || 0.0;\n// out[10] = column2Row2 || 0.0;\n// out[11] = column2Row3 || 0.0;\n// out[12] = column3Row0 || 0.0;\n// out[13] = column3Row1 || 0.0;\n// out[14] = column3Row2 || 0.0;\n// out[15] = column3Row3 || 0.0;\n// return out;\n// }\n\nexport function setTranslation(matrix, translation, result) {\n\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n\n result[8] = matrix[8];\n result[9] = matrix[9];\n result[10] = matrix[10];\n result[11] = matrix[11];\n\n result[12] = translation[0];\n result[13] = translation[1];\n result[14] = translation[2];\n result[15] = matrix[15];\n\n return result;\n}\n\nexport function getTranslation(out, matrix) {\n vec3.set(out, matrix[12], matrix[13], matrix[14]);\n return out;\n}\n\n\nexport const eastNorthUpToFixedFrame = localFrameToFixedFrameGenerator(\n \"east\",\n \"north\"\n);\nconst scratchRTCCoord = [];\nconst scratchCenter = [];\nconst scratchCartographic = [];\nconst projectedPosition = []\nconst scratchFromENU = [];\nconst scratchToENU = [];\nconst scratchRotation = [];\nconst coord = { x: 0, y: 0 };\nconst prjResult = { x: 0, y: 0 };\nconst RADIAN = Math.PI / 180;\n\nexport function basisTo2D(result, rtcCoord, matrix, projection, res, heightScale, heightOffset) {\n rtcCoord = vec3.copy(scratchRTCCoord, rtcCoord);\n const viewCenter = radianToCartesian3(scratchRTCCoord, rtcCoord[0] * RADIAN, rtcCoord[1] * RADIAN, rtcCoord[2]);\n const rtcCenter = mat4.getTranslation(scratchCenter, matrix);\n const ellipsoid = projection.ellipsoid;\n\n let cartographic;\n if (vec3.len(rtcCenter) === 0) {\n cartographic = vec3.set(scratchCartographic, 0, 0, -6378137);\n } else {\n // Get the 2D Center\n cartographic = cartesian3ToDegree(\n scratchCartographic,\n rtcCenter\n );\n }\n coord.x = cartographic[0];\n coord.y = cartographic[1];\n const prjCoord = projection.project(\n coord,\n prjResult\n );\n\n projectedPosition[0] = prjCoord.x / res;\n projectedPosition[1] = prjCoord.y / res;\n projectedPosition[2] = (cartographic[2] + heightOffset) * heightScale;\n\n // cartographic[0] *= Math.PI / 180;\n // cartographic[1] *= Math.PI / 180;\n\n // Assuming the instance are positioned in WGS84, invert the WGS84 transform to get the local transform and then convert to 2D\n const fromENU = eastNorthUpToFixedFrame(\n viewCenter,\n ellipsoid,\n scratchFromENU\n );\n const toENU = mat4.invert(scratchToENU, fromENU);\n const rotation = mat3.fromMat4(scratchRotation, matrix);\n const local = multiplyByMatrix3(toENU, rotation, result);\n // mat4.multiply(result, swizzleMatrix, local); // Swap x, y, z for 2D\n setTranslation(local, projectedPosition, result); // Use the projected center\n return result;\n}\n\n\nconst component_ctors = {\n 5120: Int8Array,\n 5122: Int16Array,\n 5124: Int32Array,\n 5121: Uint8Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n\nexport function getTypedArrayCtor(type) {\n return component_ctors[type];\n}\n\nexport function getComponentType(ctor) {\n for (const p in component_ctors) {\n if (ctor === component_ctors[p]) {\n return +p;\n }\n }\n throw new Error('unrecognized ctor:' + ctor);\n}\n\n// 用数据的width获得数据的类型\nexport function getAttrType(width) {\n if (width === 1) {\n return 'FLOAT';\n }\n return 'VEC' + width;\n}\n","let canvas;\r\nconst OPTIONS = {\r\n width: 100,\r\n height: 10\r\n};\r\n// const ISNODE = typeof global === 'object';\r\n\r\nlet offscreenCanvas = false;\r\ntry {\r\n const canvas = new OffscreenCanvas(1, 1);\r\n const ctx = canvas.getContext('2d');\r\n ctx.fillText('hello', 0, 0);\r\n offscreenCanvas = true;\r\n} catch (err) {\r\n offscreenCanvas = false;\r\n}\r\n\r\nfunction getCanvas() {\r\n if (!canvas) {\r\n const { width, height } = OPTIONS;\r\n if (offscreenCanvas) {\r\n canvas = new OffscreenCanvas(width, height);\r\n } else {\r\n canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n }\r\n return canvas;\r\n}\r\n\r\nexport function registerCanvas(canvasInstance) {\r\n if (canvasInstance) {\r\n canvas = canvasInstance;\r\n }\r\n}\r\n\r\nexport class ColorIn {\r\n constructor(colors, options = {}) {\r\n if (!Array.isArray(colors)) {\r\n console.error('colors is not array');\r\n return;\r\n }\r\n if (colors.length < 2) {\r\n console.error('colors.length should >1');\r\n return;\r\n }\r\n this.colors = colors;\r\n let min = Infinity, max = -Infinity;\r\n for (let i = 0, len = colors.length; i < len; i++) {\r\n const value = colors[i][0];\r\n min = Math.min(value, min);\r\n max = Math.max(value, max);\r\n }\r\n this.min = min;\r\n this.max = max;\r\n this.valueOffset = this.max - this.min;\r\n this.options = Object.assign({}, OPTIONS, options);\r\n this._initImgData();\r\n }\r\n\r\n getImageData() {\r\n return this.imgData;\r\n }\r\n\r\n _initImgData() {\r\n const canvas = getCanvas();\r\n const { width, height } = this.options;\r\n canvas.width = width;\r\n canvas.height = height;\r\n const ctx = canvas.getContext('2d');\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\r\n const { colors, valueOffset } = this;\r\n for (let i = 0, len = colors.length; i < len; i++) {\r\n const [stop, color] = colors[i];\r\n const s = (stop - this.min) / valueOffset;\r\n gradient.addColorStop(s, color);\r\n }\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n this.imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n getColor(stop) {\r\n stop = Math.max(this.min, stop);\r\n stop = Math.min(stop, this.max);\r\n const s = (stop - this.min) / this.valueOffset;\r\n let x = Math.round(s * this.imgData.width);\r\n x = Math.min(x, this.imgData.width - 1);\r\n const idx = x * 4;\r\n const r = this.imgData.data[idx];\r\n const g = this.imgData.data[idx + 1];\r\n const b = this.imgData.data[idx + 2];\r\n const a = this.imgData.data[idx + 3];\r\n return [r, g, b, a];\r\n }\r\n}\r\n","import { ColorIn } from 'colorin';\r\nvar isMapSupported = typeof Map === 'function';\r\nvar colorInCache;\r\nif (isMapSupported) {\r\n colorInCache = new Map();\r\n}\r\n\r\n\r\nfunction isNull(value) {\r\n return value === null || value === undefined;\r\n}\r\n\r\nfunction isNotNull(value) {\r\n return !isNull(value);\r\n}\r\n\r\nfunction isEmptyString(value) {\r\n return value === '';\r\n}\r\n\r\n/*eslint-disable no-var, prefer-const*/\r\nfunction createFunction(parameters, defaultType) {\r\n var fun;\r\n var isFeatureConstant, isZoomConstant;\r\n if (!isFunctionDefinition(parameters)) {\r\n fun = function () {\r\n return parameters;\r\n };\r\n isFeatureConstant = true;\r\n isZoomConstant = true;\r\n } else {\r\n var zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';\r\n var featureDependent = zoomAndFeatureDependent || isNotNull(parameters.property);\r\n var zoomDependent = zoomAndFeatureDependent || !featureDependent;\r\n var type = parameters.type || defaultType || 'exponential';\r\n\r\n var innerFun;\r\n if (type === 'exponential') {\r\n innerFun = evaluateExponentialFunction;\r\n } else if (type === 'interval') {\r\n innerFun = evaluateIntervalFunction;\r\n } else if (type === 'categorical') {\r\n innerFun = evaluateCategoricalFunction;\r\n } else if (type === 'identity') {\r\n innerFun = evaluateIdentityFunction;\r\n } else if (type === 'color-interpolate') {\r\n innerFun = evaluateColorInterpolateFunction;\r\n } else if (type === 'calculate-expression') {\r\n innerFun = evaluateCalculateExpressionFunction;\r\n } else {\r\n throw new Error('Unknown function type \"' + type + '\"');\r\n }\r\n\r\n if (zoomAndFeatureDependent) {\r\n var featureFunctions = {};\r\n var featureFunctionStops = [];\r\n for (let s = 0; s < parameters.stops.length; s++) {\r\n var stop = parameters.stops[s];\r\n if (featureFunctions[stop[0].zoom] === undefined) {\r\n featureFunctions[stop[0].zoom] = {\r\n zoom: stop[0].zoom,\r\n type: parameters.type,\r\n property: parameters.property,\r\n default: parameters.default,\r\n stops: []\r\n };\r\n }\r\n featureFunctions[stop[0].zoom].stops.push([stop[0].value, stop[1]]);\r\n }\r\n\r\n for (let z in featureFunctions) {\r\n featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z])]);\r\n }\r\n fun = function (zoom, feature) {\r\n const value = evaluateExponentialFunction({ stops: featureFunctionStops, base: parameters.base }, zoom)(zoom, feature);\r\n return typeof value === 'function' ? value(zoom, feature) : value;\r\n };\r\n isFeatureConstant = false;\r\n isZoomConstant = false;\r\n } else if (zoomDependent) {\r\n fun = function (zoom) {\r\n const value = innerFun(parameters, zoom);\r\n return typeof value === 'function' ? value(zoom) : value;\r\n };\r\n isFeatureConstant = true;\r\n isZoomConstant = false;\r\n } else {\r\n fun = function (zoom, feature) {\r\n const value = innerFun(parameters, feature ? feature[parameters.property] : null);\r\n return typeof value === 'function' ? value(zoom, feature) : value;\r\n };\r\n isFeatureConstant = false;\r\n isZoomConstant = true;\r\n }\r\n }\r\n fun.isZoomConstant = isZoomConstant;\r\n fun.isFeatureConstant = isFeatureConstant;\r\n return fun;\r\n}\r\n\r\nfunction coalesce(a, b, c) {\r\n if (isNotNull(a)) return a;\r\n if (isNotNull(b)) return b;\r\n if (isNotNull(c)) return c;\r\n return null;\r\n}\r\n\r\nfunction evaluateCategoricalFunction(parameters, input) {\r\n for (let i = 0; i < parameters.stops.length; i++) {\r\n if (input === parameters.stops[i][0]) {\r\n return parameters.stops[i][1];\r\n }\r\n }\r\n return parameters.default;\r\n}\r\n\r\nfunction evaluateIntervalFunction(parameters, input) {\r\n for (var i = 0; i < parameters.stops.length; i++) {\r\n if (input < parameters.stops[i][0]) break;\r\n }\r\n return parameters.stops[Math.max(i - 1, 0)][1];\r\n}\r\n\r\nfunction evaluateExponentialFunction(parameters, input) {\r\n var base = isNotNull(parameters.base) && !isEmptyString(parameters.base) ? parameters.base : 1;\r\n\r\n var i = 0;\r\n while (true) {\r\n if (i >= parameters.stops.length) break;\r\n else if (input <= parameters.stops[i][0]) break;\r\n else i++;\r\n }\r\n\r\n if (i === 0) {\r\n return parameters.stops[i][1];\r\n } else if (i === parameters.stops.length) {\r\n return parameters.stops[i - 1][1];\r\n } else {\r\n return interpolate(input, base, parameters.stops[i - 1][0], parameters.stops[i][0], parameters.stops[i - 1][1], parameters.stops[i][1]);\r\n }\r\n}\r\nconst COLORIN_OPTIONS = {\r\n width: 100,\r\n height: 1\r\n};\r\nfunction evaluateColorInterpolateFunction(parameters, input) {\r\n const stops = parameters.stops;\r\n if (stops && stops.length > 1) {\r\n let colorIn;\r\n if (colorInCache) {\r\n const key = JSON.stringify(stops);\r\n if (!colorInCache.has(key)) {\r\n const colorIn = new ColorIn(stops, COLORIN_OPTIONS);\r\n colorInCache.set(key, colorIn);\r\n }\r\n colorIn = colorInCache.get(key);\r\n } else {\r\n colorIn = new ColorIn(stops, COLORIN_OPTIONS);\r\n }\r\n const [r, g, b, a] = colorIn.getColor(input);\r\n return [r / 255, g / 255, b / 255, a / 255];\r\n } else if (stops && stops.length === 1) {\r\n return stops[0][1];\r\n }\r\n return null;\r\n}\r\n\r\nfunction evaluateIdentityFunction(parameters, input) {\r\n return coalesce(input, parameters.default);\r\n}\r\n// 2添加修改计算函数\r\n// 处理空字符串和未定义属性的函数\r\nfunction evaluateCalculateExpressionFunction(parameters, input) {\r\n const targetVariable = String(parameters.property);\r\n const expression = parameters.expression;\r\n const newValue = input;\r\n\r\n // 定义函数来替换表达式中的变量\r\n function traverseAndAssign(expression, targetVariable, newValue) {\r\n const newValueAsNumber = Number(newValue);\r\n const targetVariableAsString = String(targetVariable);\r\n\r\n if (Array.isArray(expression)) {\r\n return expression.map(subExpr => traverseAndAssign(subExpr, targetVariableAsString, newValueAsNumber));\r\n } else if (expression === targetVariableAsString) {\r\n return newValueAsNumber;\r\n } else {\r\n return expression;\r\n }\r\n }\r\n\r\n // 定义函数来计算表达式的结果\r\n function evaluateExpression(expression) {\r\n if (Array.isArray(expression)) {\r\n const operator = expression[0];\r\n\r\n if (!['+', '-', '*', '/'].includes(operator)) {\r\n throw new Error(`Unknown operator: ${operator}`);\r\n }\r\n\r\n const operands = expression.slice(1).map(op => evaluateExpression(op));\r\n switch (operator) {\r\n case '+':\r\n return operands.reduce((acc, curr) => acc + curr, 0);\r\n case '-':\r\n return operands.reduce((acc, curr) => acc - curr);\r\n case '*':\r\n return operands.reduce((acc, curr) => acc * curr, 1);\r\n case '/':\r\n // 如果发现有零作为除数,返回默认值\r\n if (operands.some(op => op === 0)) {\r\n return parameters.default;\r\n }\r\n return operands.reduce((acc, curr) => acc / curr);\r\n default:\r\n throw new Error(`Unsupported operator: ${operator}`);\r\n }\r\n } else if (typeof expression === 'number') {\r\n return expression;\r\n } else {\r\n throw new Error('Invalid expression format');\r\n }\r\n }\r\n\r\n // 使用 coalesce 函数处理结果中的默认值\r\n function coalesce(value) {\r\n return (isNull(value) || isEmptyString(value) || isNaN(value)) ? parameters.default : value;\r\n }\r\n\r\n // 如果 input 存在且大于0,则处理表达式\r\n if (isNotNull(input) && !isEmptyString(input) && !isNaN(input) && !(input < 0)) {\r\n const updatedExpression = traverseAndAssign(expression, targetVariable, newValue);\r\n return coalesce(evaluateExpression(updatedExpression));\r\n } else {\r\n return coalesce(parameters.default);\r\n }\r\n}\r\n\r\nfunction interpolate(input, base, inputLower, inputUpper, outputLower, outputUpper) {\r\n if (typeof outputLower === 'function') {\r\n return function () {\r\n var evaluatedLower = outputLower.apply(undefined, arguments);\r\n var evaluatedUpper = outputUpper.apply(undefined, arguments);\r\n return interpolate(input, base, inputLower, inputUpper, evaluatedLower, evaluatedUpper);\r\n };\r\n } else if (outputLower.length) {\r\n return interpolateArray(input, base, inputLower, inputUpper, outputLower, outputUpper);\r\n } else {\r\n return interpolateNumber(input, base, inputLower, inputUpper, outputLower, outputUpper);\r\n }\r\n}\r\n\r\nfunction interpolateNumber(input, base, inputLower, inputUpper, outputLower, outputUpper) {\r\n var difference = inputUpper - inputLower;\r\n var progress = input - inputLower;\r\n\r\n var ratio;\r\n if (base === 1) {\r\n ratio = progress / difference;\r\n } else {\r\n ratio = (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\r\n }\r\n\r\n return outputLower * (1 - ratio) + outputUpper * ratio;\r\n}\r\n\r\nfunction interpolateArray(input, base, inputLower, inputUpper, outputLower, outputUpper) {\r\n var output = [];\r\n for (let i = 0; i < outputLower.length; i++) {\r\n output[i] = interpolateNumber(input, base, inputLower, inputUpper, outputLower[i], outputUpper[i]);\r\n }\r\n return output;\r\n}\r\n\r\n/**\r\n * Check if object is a definition of function type\r\n * @param {Object} obj object\r\n * @return {Boolean}\r\n * @memberOf MapboxUtil\r\n */\r\nexport function isFunctionDefinition(obj) {\r\n return (\r\n obj &&\r\n typeof obj === 'object' &&\r\n (obj.stops || (obj.property && obj.type === 'identity') || (obj.expression && obj.type === 'calculate-expression'))\r\n );\r\n}\r\n\r\n// export function isFunctionDefinition(obj) {\r\n// return obj && typeof obj === 'object' && (obj.stops || (obj.property && obj.type === 'identity'));\r\n// }\r\n\r\n/**\r\n * Check if obj's properties has function definition\r\n * @param {Object} obj object to check\r\n * @return {Boolean}\r\n * @memberOf MapboxUtil\r\n */\r\nexport function hasFunctionDefinition(obj) {\r\n for (const p in obj) {\r\n if (isFunctionDefinition(obj[p])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function interpolated(parameters) {\r\n return createFunction1(parameters, 'exponential');\r\n}\r\n\r\nexport function piecewiseConstant(parameters) {\r\n return createFunction1(parameters, 'interval');\r\n}\r\n\r\n/**\r\n * Load function types defined in object\r\n * @param {Object[]} parameters parameters\r\n * @return {Object} loaded object\r\n * @memberOf MapboxUtil\r\n */\r\n\r\nexport function loadFunctionTypes(obj, argFn) {\r\n if (!obj) {\r\n return null;\r\n }\r\n var hit = false;\r\n if (Array.isArray(obj)) {\r\n var multResult = [],\r\n loaded;\r\n for (let i = 0; i < obj.length; i++) {\r\n loaded = loadFunctionTypes(obj[i], argFn);\r\n if (!loaded) {\r\n multResult.push(obj[i]);\r\n } else {\r\n multResult.push(loaded);\r\n hit = true;\r\n }\r\n }\r\n return hit ? multResult : obj;\r\n }\r\n var result = { '__fn_types_loaded': true },\r\n props = [],\r\n p;\r\n for (p in obj) {\r\n if (obj.hasOwnProperty(p)) {\r\n props.push(p);\r\n }\r\n }\r\n\r\n const buildFn = function (p) {\r\n Object.defineProperty(result, p, {\r\n get: function () {\r\n if (!this['__fn_' + p]) {\r\n this['__fn_' + p] = interpolated(this['_' + p]);\r\n }\r\n return this['__fn_' + p].apply(this, argFn());\r\n },\r\n set: function (v) {\r\n this['_' + p] = v;\r\n },\r\n configurable: true,\r\n enumerable: true\r\n });\r\n };\r\n\r\n for (let i = 0, len = props.length; i < len; i++) {\r\n p = props[i];\r\n if (isFunctionDefinition(obj[p])) {\r\n hit = true;\r\n result['_' + p] = obj[p];\r\n buildFn(p);\r\n } else {\r\n result[p] = obj[p];\r\n }\r\n }\r\n return hit ? result : obj;\r\n}\r\n\r\n/**\r\n * Get external resources in the function type\r\n * @param {Object} t Function type definition\r\n * @return {String[]} resouces\r\n * @memberOf MapboxUtil\r\n */\r\nexport function getFunctionTypeResources(t) {\r\n if (!t || !t.stops) {\r\n return [];\r\n }\r\n const res = [];\r\n for (let i = 0, l = t.stops.length; i < l; i++) {\r\n res.push(t.stops[i][1]);\r\n }\r\n return res;\r\n}\r\n/*eslint-enable no-var, prefer-const*/\r\n\r\nfunction createFunction1(parameters, defaultType) {\r\n if (!isFunctionDefinition(parameters)) {\r\n return function () {\r\n return parameters;\r\n };\r\n }\r\n parameters = JSON.parse(JSON.stringify(parameters));\r\n let isZoomConstant = true;\r\n let isFeatureConstant = true;\r\n const stops = parameters.stops;\r\n if (stops) {\r\n for (let i = 0; i < stops.length; i++) {\r\n if (isFunctionDefinition(stops[i][1])) {\r\n const fn = createFunction1(stops[i][1], defaultType);\r\n isZoomConstant = isZoomConstant && fn.isZoomConstant;\r\n isFeatureConstant = isFeatureConstant && fn.isFeatureConstant;\r\n stops[i] = [stops[i][0], fn];\r\n }\r\n }\r\n }\r\n const fn = createFunction(parameters, defaultType);\r\n fn.isZoomConstant = isZoomConstant && fn.isZoomConstant;\r\n fn.isFeatureConstant = isFeatureConstant && fn.isFeatureConstant;\r\n return fn;\r\n}\r\n","import * as maptalks from 'maptalks';\nimport { reshader, vec3, vec4, mat3, mat4, quat, HighlightUtil, ContextUtil, getWGSLSource } from '@maptalks/gl';\nimport { iterateMesh, iterateBufferData, getItemAtBufferData, setInstanceData, } from '../../common/GLTFHelpers';\nimport pickingVert from './glsl/picking.vert';\nimport pntsVert from './glsl/pnts.vert';\nimport pntsFrag from './glsl/pnts.frag';\nimport { isFunction, isNil, extend, setColumn3, flatArr, isNumber, normalizeColor, pushIn } from '../../common/Util';\nimport { intersectsBox } from 'frustum-intersects';\nimport { basisTo2D, setTranslation, getTranslation, readBatchData } from '../../common/TileHelper';\nimport { isFunctionDefinition, interpolated } from '@maptalks/function-type';\n// import { getKHR_techniques } from './s3m/S3MTechnique';\n\n\nconst { getTextureMagFilter, getTextureMinFilter,\n getTextureWrap, getMaterialType, getMaterialFormat,\n getPrimitive, getUniqueREGLBuffer, getArrayType } = reshader.REGLHelper;\n\nconst Y_TO_Z = [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1];\nconst X_TO_Z = [0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1];\n\nconst { loginIBLResOnCanvas, logoutIBLResOnCanvas, getIBLResOnCanvas, getPBRUniforms } = reshader.pbr.PBRUtils;\n\nconst DEFAULT_POLYGON_OFFSET = {\n factor : 0,\n units : 0\n};\n\nconst DEFAULT_POLYGONFILL = [1, 1, 1, 1], DEFAULT_HSV = [0, 0, 0];\n\nconst DEFAULT_MATERIAL_INFO = {\n specularStrength: 0,\n materialShininess: 1\n};\n\nconst IDENTITY_SCALE = [1, 1, 1];\nconst IDENTITY_MATRIX = mat4.identity([]);\nconst EMPTY_TRANSLATION = [0, 0, 0];\nconst EMPTY_COORD_OFFSET = [0, 0];\n\nconst LIGHT_DIR = [];\n// const P0 = [], P1 = [];\n\nconst phongFilter = m => {\n return m.material instanceof reshader.PhongMaterial;\n};\n\nconst StandardFilter = m => {\n return m.material instanceof reshader.pbr.StandardMaterial;\n};\n\n// const colorOff = [false, false, false, false];\n// const colorOn = [true, true, true, true];\n\nconst TEMP_RTCCENTER = [];\nconst TEMP_CENTER = new maptalks.Coordinate(0, 0);\nconst TEMP_POINT = new maptalks.Point(0, 0);\nconst TEMP_POINT1 = new maptalks.Point(0, 0);\nconst TEMP_POINT2 = new maptalks.Point(0, 0);\nconst TEMP_OFFSET = [];\nconst TEMP_TRANSLATION = [];\nconst TEMP_MATRIX1 = [];\nconst TEMP_MATRIX2 = [];\nconst TEMP_TILE_ROT_QUAT = [];\nconst TEMP_SCALING = [];\nconst TEMP_TILE_SCALING_MAT = [];\n\nconst TEMP_TILE_TRANSFORM = [];\nconst TEMP_TRANSLATION_MAT = [];\n\nconst TEMP_SERVICE_MAT = [];\n\nconst TEMP_PROJ_SCALE = [];\nconst TEMP_DIST_SCALE = [];\nconst TEMP_DIST_TO_PROJ_SCALE = [];\n\nconst TEMP_MATRIX_SCALE = [];\n\nconst DEFAULT_SEMANTICS = {\n 'POSITION': 'POSITION',\n 'NORMAL': 'NORMAL',\n 'TEXCOORD_0': 'TEXCOORD_0',\n 'TEXCOORD_1': 'TEXCOORD_1',\n 'COLOR_0': 'COLOR_0',\n 'TANGENT': 'TANGENT',\n '_BATCHID': '_BATCHID',\n};\n\nconst BOX_INDEX = [\n 0, 1,\n 1, 2,\n 2, 3,\n 3, 0,\n 0, 4,\n 1, 5,\n 2, 6,\n 3, 7,\n 4, 5,\n 5, 6,\n 6, 7,\n 7, 4,\n\n // center axis\n // 8, 9,\n // 8, 10,\n // 8, 11\n];\nconst SPHERE_POS = generateSphere(100, 1);\nconst BOX_ROTATE = [0, 0, 0, 1], BOX_SCALE = [1, 1, 1];\n\nexport default class TileMeshPainter {\n constructor(regl, layer) {\n this._layer = layer;\n this._canvas = layer.getRenderer().canvas;\n this.pickingFBO = layer.getRenderer().pickingFBO;\n this._regl = regl;\n this._renderer = new reshader.Renderer(regl);\n this._loading = {};\n this._modelMeshes = {};\n this._pntsMeshes = {};\n this._i3dmMeshes = {};\n this._cmptMeshes = {};\n this._cachedGLTF = {};\n this._modelScene = new reshader.Scene();\n this._pntsScene = new reshader.Scene();\n this._i3dmScene = new reshader.Scene();\n this._boxScene = new reshader.Scene();\n this._resLoader = new reshader.ResourceLoader(regl.texture(2));\n this._bindedListener = (...args) => {\n return this._onResourceLoad.call(this, ...args);\n };\n // this._defaultMaterial = new reshader.PhongMaterial({\n // 'baseColorFactor' : [1, 1, 1, 1]\n // });\n this._khrTechniqueWebglManager = new reshader.KHRTechniquesWebglManager(this._regl, this._getExtraCommandProps(), this._resLoader);\n const map = this.getMap();\n this._heightScale = map.altitudeToPoint(100, map.getGLRes()) / 100;\n }\n\n getI3DMMeshes() {\n return this._i3dmMeshes;\n }\n\n getPNTSMeshes() {\n return this._pntsMeshes;\n }\n\n getB3DMMeshes() {\n return this._modelMeshes;\n }\n\n getPaintedMeshes() {\n return this._paintedMeshes;\n }\n\n getMap() {\n return this._layer.getMap();\n }\n\n getTilesInfo() {\n return this._tiles;\n }\n\n paint(tiles, boxMeshes, parentContext) {\n // const testMesh = { bloom: 1 };\n // if (!parentContext.sceneFilter(testMesh)) {\n // return;\n // }\n const renderTarget = parentContext && parentContext.renderTarget;\n const filter = parentContext && parentContext.sceneFilter;\n const map = this.getMap();\n if (!tiles.length || !map) {\n return null;\n }\n this._tiles = tiles;\n const uniforms = this._getUniformValues();\n const projViewMatrix = map.projViewMatrix;\n const oneMeshArray = [];\n const parentMeshes = [];\n const b3dmMeshes = [];\n const pntsMeshes = [];\n const i3dmMeshes = [];\n\n for (let i = 0, l = tiles.length; i < l; i++) {\n const node = tiles[i].data.node;\n let mesh = this._getMesh(node);\n if (!mesh) {\n continue;\n }\n const service = this._layer._getNodeService(node._rootIdx);\n const debugNodes = service.debugNodes;\n const heightOffset = service.heightOffset || 0;\n const coordOffset = service.coordOffset || EMPTY_COORD_OFFSET;\n if (this._cmptMeshes[node.id]) {\n mesh = this._cmptMeshes[node.id];\n mesh = flatArr(mesh);\n }\n // if (node._error > maxError) {\n // continue;\n // }\n\n let polygonOffset = service.polygonOffset || DEFAULT_POLYGON_OFFSET;\n if (isFunction(polygonOffset)) {\n polygonOffset = polygonOffset();\n }\n // const ambientColor = service.ambientLight;\n if (!Array.isArray(mesh)) {\n oneMeshArray[0] = mesh;\n mesh = oneMeshArray;\n }\n for (let ii = 0, ll = mesh.length; ii < ll; ii++) {\n if (!mesh[ii] || !mesh[ii].isValid || !mesh[ii].isValid()) {\n continue;\n }\n const magic = mesh[ii].properties.magic;\n if (mesh[ii].properties.heightOffset !== heightOffset || mesh[ii].properties.coordOffset[0] !== coordOffset[0] || mesh[ii].properties.coordOffset[1] !== coordOffset[1]) {\n this._updateMeshLocalTransform(mesh[ii]);\n mesh[ii]._originLocalTransform = mat4.copy([], mesh[ii].localTransform);\n }\n mesh[ii]._node = node;\n if (magic === 'b3dm') {\n if (mesh[ii].getBoundingBox && !intersectsBox(projViewMatrix, mesh[ii].getBoundingBox())) {\n continue;\n }\n const { batchIdData, batchIdMap } = mesh[ii].geometry.properties;\n if (batchIdData && batchIdMap) {\n const rootIdx = mesh[ii].properties.node._rootIdx;\n if (this._highlighted && this._highlighted[rootIdx]) {\n HighlightUtil.highlightMesh(this._regl, mesh[ii], this._highlighted[rootIdx], this._highlightTimestamp, batchIdMap);\n } else if (!this._highlighted || !this._highlighted[rootIdx]) {\n HighlightUtil.highlightMesh(this._regl, mesh[ii], null, this._highlightTimestamp, batchIdMap);\n }\n HighlightUtil.showOnly(this._regl, mesh[ii], this._showOnlys && this._showOnlys[rootIdx], this._showOnlyTimeStamp, batchIdMap);\n }\n if (debugNodes && debugNodes.length && debugNodes.indexOf(mesh[ii]._node.id) < 0) {\n continue;\n }\n if (parentContext && parentContext.bloom && mesh[ii].properties.hlBloomMesh) {\n mesh[ii].properties.hlBloomMesh.properties.depthFunc = 'always';\n b3dmMeshes.push(mesh[ii].properties.hlBloomMesh);\n }\n b3dmMeshes.push(mesh[ii]);\n } else if (magic === 'pnts') {\n pntsMeshes.push(mesh[ii]);\n } else if (magic === 'i3dm') {\n i3dmMeshes.push(mesh[ii]);\n }\n // mesh[ii].setUniform('level', tiles[i].selectionDepth);\n // mesh[ii].setUniform('id', node.id);\n // mesh[ii].setUniform('polygonOffset', polygonOffset);\n mesh[ii].properties.isLeaf = tiles[i].leave;\n mesh[ii].properties.branchRootId = tiles[i].branchRootId;\n // GroupGLLayer中,stencil默认值为0xFF,与GroupGLLayer保持一致\n const selectionDepth = 255 - tiles[i].selectionDepth;\n mesh[ii].properties.selectionDepth = selectionDepth;\n mesh[ii].properties.polygonOffset = polygonOffset;\n const cullFace = service.cullFace === undefined || !!service.cullFace;\n mesh[ii].properties.cullFace = cullFace;\n\n const hlBloomMesh = mesh[ii].properties.hlBloomMesh;\n if (hlBloomMesh) {\n const bloomProperties = hlBloomMesh.properties;\n bloomProperties.branchRootId = tiles[i].branchRootId;\n bloomProperties.selectionDepth = selectionDepth;\n bloomProperties.polygonOffset = polygonOffset;\n bloomProperties.cullFace = cullFace;\n }\n // if (!Object.prototype.hasOwnProperty.call(mesh[ii].uniforms, 'ambientColor')) {\n // Object.defineProperty(mesh[ii].uniforms, 'ambientColor', {\n // enumerable: true,\n // get: function () {\n // if (ambientColor) {\n // return ambientColor;\n // }\n // return uniforms['ambientColor'];\n // }\n // });\n // }\n\n if (!tiles[i].leave) {\n parentMeshes.push(mesh[ii]);\n }\n this._updateMaskDefines(mesh[ii]);\n this._updateServiceMatrix(mesh[ii], node);\n }\n }\n\n // const testMesh = { bloom: 1 };\n // if (parentContext.sceneFilter(testMesh)) {\n // if (parentContext.bloom) {\n // const bloomMeshes = meshes.filter(m => m.bloom);\n // if (bloomMeshes.length) {\n // meshes = bloomMeshes;\n // }\n // }\n\n\n // meshes.sort(meshCompare);\n // console.log(meshes.map(m => m.properties.id));\n let drawCount = 0;\n const khrExludeFilter = this._khrTechniqueWebglManager.getExcludeFilter();\n ContextUtil.setIncludeUniformValues(uniforms, parentContext);\n drawCount += this._callShader(this._phongShader, uniforms, [filter, phongFilter, khrExludeFilter], renderTarget, parentMeshes, b3dmMeshes, i3dmMeshes);\n drawCount += this._callShader(this._standardShader, uniforms, [filter, StandardFilter, khrExludeFilter], renderTarget, parentMeshes, b3dmMeshes, i3dmMeshes);\n\n this._khrTechniqueWebglManager.forEachShader((shader, shaderFilter, uniformSemantics) => {\n const uniforms = this._getUniformValues(uniformSemantics);\n drawCount += this._callShader(shader, uniforms, [filter, shaderFilter], renderTarget, parentMeshes, b3dmMeshes, i3dmMeshes);\n });\n this._pntsScene.setMeshes(pntsMeshes);\n const pntsUniforms = this._getPntsUniforms();\n drawCount += this._renderer.render(this._pntsShader, pntsUniforms, this._pntsScene, renderTarget && renderTarget.fbo);\n\n this._paintedMeshes = {\n pntsMeshes,\n i3dmMeshes,\n b3dmMeshes\n };\n // boxMeshes.forEach(mesh => {\n // this._updateBBoxMatrix(mesh);\n // });\n this._boxScene.setMeshes(boxMeshes);\n this._renderer.render(this._edgeShader, uniforms, this._boxScene, renderTarget && renderTarget.fbo);\n\n return drawCount;\n }\n\n prepareRender(context) {\n this._prepareShaders(context);\n }\n\n _prepareShaders(context) {\n if (context && context.states && context.states.includesChanged) {\n this._standardShader.dispose();\n delete this._standardShader;\n this._phongShader.dispose();\n delete this._phongShader;\n }\n this._createShaders(context);\n }\n\n // _updateBBoxMatrix(mesh) {\n // const serviceTransform = this._layer._getServiceTransform(TEMP_BBOX_MAT, mesh.properties.node);\n // mat4.multiply(mesh.localTransform, serviceTransform, mesh._originLocalTransform);\n // }\n\n _callShader(shader, uniforms, filter, renderTarget, parentMeshes, meshes, i3dmMeshes) {\n shader.filter = filter.filter(fn => !!fn);\n\n // this._modelScene.setMeshes(meshes);\n\n // uniforms['debug'] = true;\n // uniforms['stencilEnable'] = false;\n // uniforms['cullFace'] = 'front';\n // uniforms['colorMask'] = colorOff;\n // this._renderer.render(shader, uniforms, this._modelScene, renderTarget && renderTarget.fbo);\n\n\n // uniforms['stencilEnable'] = true;\n uniforms.stencilEnable = false;\n uniforms.cullFace = 'back';\n // uniforms['cullFace'] = 'back';\n // uniforms['colorMask'] = colorOn;\n const fbo = renderTarget && renderTarget.fbo;\n let drawCount = 0;\n\n const branchMeshes = [];\n const leafMeshes = [];\n let hasUnresolved = false;\n\n let currentBranchRootId = meshes[0] && meshes[0].properties.branchRootId;\n for (let i = 0; i < meshes.length; i++) {\n const { branchRootId } = meshes[i].properties;\n if (branchRootId !== currentBranchRootId) {\n // branch 发生变化\n if (!hasUnresolved) {\n // 如果branch中不存在 unresolved 瓦片,则放到leafMeshes中,和其他的leaf瓦片一起绘制,无需分开绘制,减少drawcall\n pushIn(leafMeshes, branchMeshes);\n } else {\n if (leafMeshes.length) {\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, false, leafMeshes);\n leafMeshes.length = 0;\n }\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, hasUnresolved, branchMeshes);\n }\n currentBranchRootId = branchRootId;\n hasUnresolved = false;\n branchMeshes.length = 0;\n }\n branchMeshes.push(meshes[i]);\n if (meshes[i].properties.selectionDepth < 255) {\n hasUnresolved = true;\n }\n if (i === meshes.length - 1) {\n if (!hasUnresolved) {\n pushIn(leafMeshes, branchMeshes);\n branchMeshes.length = 0;\n }\n if (leafMeshes.length) {\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, false, leafMeshes);\n }\n drawCount += this._drawBranchMeshes(shader, uniforms, fbo, hasUnresolved, branchMeshes);\n }\n }\n // pick功能需要把meshes设置到modelScene中,为了避免pick逻辑出错,这里暂时只允许选择叶子节点\n //FIXME 因为父亲节点不在modelScene中,会出现父亲节点无法被选中的问题\n this._modelScene.setMeshes(meshes.filter(m => m.properties.isLeaf));\n\n this._i3dmScene.setMeshes(i3dmMeshes);\n drawCount += this._renderer.render(shader, uniforms, this._i3dmScene, renderTarget && renderTarget.fbo);\n return drawCount;\n }\n\n _drawBranchMeshes(shader, uniforms, fbo, hasUnresolved, branchMeshes) {\n if (!branchMeshes.length) {\n return 0;\n }\n this._modelScene.setMeshes(branchMeshes);\n // 如果branch中不存在unresolved瓦片\n // 关闭stencil直接绘制\n uniforms.stencilEnable = false;\n if (hasUnresolved) {\n // branch 中存在 unresolved 瓦片。\n // 解释:\n // 如果某个瓦片的selectionDepth不为0 (mesh.properties.selectionDepth为255),则说明它的子瓦片也参与绘制,标记此类瓦片为unsolved\n // * selectionDepth 的逻辑在 Geo3DTilesRenderer._sortTiles 方法中\n // 这种情况一般出现在某个分支的子节点不满足要求(没有下载下来或者error不符合设定),需要将父亲节点与子节点一起绘制\n // 绘制步骤:\n // 1. 清除 stencil 缓冲,避免上一次绘制的stencil影响本次绘制\n // 2. 先绘制所有瓦片的背面,避免后面的子节点,会在视觉上 \"透过\" 前面的unresolved瓦片\n // 3. 打开stencil,先绘制叶子节点,再绘制父亲节点,保证父节点的绘制不会覆盖掉子节点\n this._clearStencil(fbo);\n uniforms.stencilEnable = false;\n uniforms.cullFace = 'front';\n this._renderer.render(shader, uniforms, this._modelScene, fbo);\n uniforms.cullFace = 'back';\n uniforms.stencilEnable = true;\n }\n return this._renderer.render(shader, uniforms, this._modelScene, fbo);\n }\n\n _clearStencil(fbo) {\n this._regl.clear({\n stencil: 0xFF,\n framebuffer: fbo\n });\n }\n\n getCurrentB3DMMeshes() {\n return this._modelScene.getMeshes();\n }\n\n getCurrentI3DMMeshes() {\n return this._i3dmScene.getMeshes();\n }\n\n _sort(a, b) {\n // const cameraPosition = this.getMap().cameraPosition;\n // vec3.transformMat4(P0, a.geometry.boundingBox.getCenter(), a.localTransform);\n // vec3.transformMat4(P1, b.geometry.boundingBox.getCenter(), b.localTransform);\n // return vec3.dist(P1, cameraPosition) - vec3.dist(P0, cameraPosition);\n return b._node._cameraDistance - a._node._cameraDistance;\n }\n\n deleteTile(tileData) {\n const node = tileData.node;\n if (node._boxMesh) {\n node._boxMesh.geometry.dispose();\n node._boxMesh.dispose();\n delete node._boxMesh;\n }\n const id = node.id;\n this._disposeMesh(id);\n }\n\n _disposeMesh(id) {\n const mesh = this._modelMeshes[id] || this._pntsMeshes[id] || this._i3dmMeshes[id] || this._cmptMeshes[id] || this._loading[id];\n if (this._cmptMeshes[id]) {\n this._disposeCMPT(id);\n } else if (mesh) {\n this._deleteOne(mesh);\n delete this._modelMeshes[id];\n delete this._pntsMeshes[id];\n delete this._i3dmMeshes[id];\n delete this._loading[id];\n }\n }\n\n _disposeCMPT(id) {\n let mesh = this._cmptMeshes[id];\n mesh = flatArr(mesh);\n for (let i = 0; i < mesh.length; i++) {\n const { id } = mesh[i].properties;\n this._disposeMesh(id);\n }\n delete this._cmptMeshes[id];\n }\n\n _deleteOne(mesh) {\n if (Array.isArray(mesh)) {\n for (let i = 0, l = mesh.length; i < l; i++) {\n this._deleteOne(mesh[i]);\n }\n } else {\n // clear showOnly and highlights\n HighlightUtil.showOnly(this._regl, mesh);\n HighlightUtil.highlightMesh(this._regl, mesh);\n const url = mesh.geometry.properties.url;\n if (!url) {\n mesh.geometry.dispose();\n if (mesh.material) {\n mesh.material.dispose();\n }\n } else {\n const cached = this._cachedGLTF[url];\n if (cached && cached.refMeshes) {\n cached.refMeshes.delete(mesh.uuid);\n if (!cached.refMeshes.size) {\n cached.geometry.dispose();\n cached.material.dispose();\n delete this._cachedGLTF[url];\n }\n }\n }\n mesh.dispose();\n }\n }\n\n remove() {\n const layer = this._layer;\n logoutIBLResOnCanvas(layer.getRenderer().canvas, layer.getMap());\n for (const id in this._cmptMeshes) {\n this._disposeCMPT(id);\n }\n this._cmptMeshes = {};\n for (const id in this._modelMeshes) {\n this._disposeMesh(id);\n }\n this._modelMeshes = {};\n for (const id in this._pntsMeshes) {\n this._disposeMesh(id);\n }\n this._pntsMeshes = {};\n for (const id in this._i3dmMeshes) {\n this._disposeMesh(id);\n }\n this._i3dmMeshes = {};\n\n for (const id in this._loading) {\n this._disposeMesh(id);\n }\n this._loading = {};\n if (this._phongShader) {\n this._phongShader.dispose();\n delete this._phongShader;\n }\n if (this._standardShader) {\n this._standardShader.dispose();\n delete this._standardShader;\n }\n if (this._pntsShader) {\n this._pntsShader.dispose();\n delete this._pntsShader;\n }\n\n if (this._edgeShader) {\n this._edgeShader.dispose();\n delete this._edgeShader;\n }\n\n this._khrTechniqueWebglManager.dispose();\n\n if (this.picking) {\n this.picking.dispose();\n }\n }\n\n _getMesh(node) {\n return this._modelMeshes[node.id] || this._pntsMeshes[node.id] || this._i3dmMeshes[node.id] || this._cmptMeshes[node.id];\n }\n\n has(node) {\n return this._getMesh(node) || this._loading[node.id];\n }\n\n _updateMeshLocalTransform(mesh) {\n const magic = mesh.properties.magic;\n if (magic === 'b3dm') {\n this._updateB3DMLocalMatrix(mesh);\n } else if (magic === 'i3dm') {\n this._updateI3DMLocalTransform(mesh);\n } else if (magic === 'pnts') {\n this._updatePNTSLocalTransform(mesh);\n }\n }\n\n createPntsMesh(data, id, node, cb) {\n if (this._pntsMeshes[id]) {\n const meshes = this._pntsMeshes[id];\n console.warn(`pnts mesh with id(${id}) was already created.`);\n cb(null, { id : id, mesh : meshes });\n return meshes;\n }\n const { pnts, featureTable, rootIdx, compressed_int16_params } = data;\n const count = featureTable['POINTS_LENGTH'];\n if (!pnts['BATCH_ID']) {\n pnts['BATCH_ID'] = new Uint8Array(count);\n pnts['BATCH_ID'].fill(0);\n }\n\n const geometry = new reshader.Geometry(\n pnts,\n null,\n count,\n {\n static: true,\n primitive: 'points',\n positionAttribute: 'POSITION',\n pickingIdAttribute: 'BATCH_ID'\n }\n );\n geometry.generateBuffers(this._regl);\n const defines = {};\n\n const position = geometry.data['POSITION'] || geometry.data['POSITION_QUANTIZED'];\n const positionItemType = position && position.buffer && position.buffer.itemType;\n if (positionItemType) {\n if (positionItemType.startsWith('sint')) {\n defines['POSITION_IS_INT'] = 1;\n } else if (positionItemType.startsWith('uint')) {\n defines['POSITION_IS_UINT'] = 1;\n }\n }\n\n if (pnts['POSITION']) {\n defines['HAS_POSITION'] = 1;\n } else if (pnts['POSITION_QUANTIZED']) {\n defines['HAS_POSITION_QUANTIZED'] = 1;\n }\n if (pnts['RGB']) {\n defines['HAS_RGB'] = 1;\n } else if (pnts['RGBA']) {\n defines['HAS_RGBA'] = 1;\n } else if (pnts['RGB565']) {\n defines['HAS_RGB565'] = 1;\n }\n if (pnts['NORMAL'] || pnts['NORMAL_OCT16P']) {\n defines['HAS_NORMAL'] = 1;\n if (pnts['NORMAL_OCT16P']) {\n defines['HAS_NORMAL_OCT16P'] = 1;\n }\n }\n this._setCompressedInt16Defines(defines, compressed_int16_params);\n if (data.featureTable['CONSTANT_RGBA']) {\n data.featureTable['CONSTANT_RGBA'] = data.featureTable['CONSTANT_RGBA'].map(c => c / 255);\n }\n\n const { rtcCenter, rtcCoord, projCenter } = data;\n\n const service = this._layer._getNodeService(rootIdx);\n\n const mesh = new reshader.Mesh(geometry);\n mesh.properties.magic = 'pnts';\n mesh.properties.id = id;\n mesh.properties.node = node;\n mesh.properties.count = count;\n mesh.properties.batchTable = data.batchTable;\n mesh.properties.batchTableBin = data.batchTableBin;\n mesh.properties.serviceIndex = rootIdx;\n mesh.properties.rtcCoord = rtcCoord;\n mesh.properties.rtcCenter = rtcCenter;\n mesh.properties.projCenter = projCenter;\n mesh.setDefines(defines);\n mesh.setFunctionUniform('pointColor', function () {\n if (data.featureTable['CONSTANT_RGBA']) {\n return data.featureTable['CONSTANT_RGBA'];\n }\n return service && service.pointColor || [1, 1, 1, 1];\n });\n const map = this.getMap();\n let pointSizeValue = null;\n let pointSizeFn = null;\n\n mesh.setFunctionUniform('pointSize', function () {\n if (!service) {\n return 2;\n }\n if (isFunctionDefinition(service.pointSize)) {\n const key = JSON.stringify(service.pointSize);\n if (key !== pointSizeValue) {\n pointSizeFn = interpolated(service.pointSize);\n pointSizeValue = key;\n }\n const size = pointSizeFn(map.getZoom());\n return size;\n }\n return service.pointSize || 2;\n });\n\n let pointOpacityValue = null;\n let pointOpacityFn = null;\n\n mesh.setFunctionUniform('pointOpacity', function () {\n if (!service) {\n return 1;\n }\n if (isFunctionDefinition(service.pointOpacity)) {\n const key = JSON.stringify(service.pointOpacity);\n if (key !== pointOpacityValue) {\n pointOpacityFn = interpolated(service.pointOpacity);\n pointOpacityValue = key;\n }\n const opacity = pointOpacityFn(map.getZoom());\n return opacity;\n }\n return service.pointOpacity || 1;\n });\n this._setCompressedInt16Uniforms(mesh, compressed_int16_params);\n this._updatePNTSLocalTransform(mesh);\n mesh._originLocalTransform = mat4.copy([], mesh.localTransform);\n this._pntsMeshes[id] = mesh;\n cb(null, { id: id, mesh: [mesh] });\n return [mesh];\n }\n\n\n _updatePNTSLocalTransform(mesh) {\n const localTransform = mesh.localTransform || [];\n const { rtcCoord, node, projCenter } = mesh.properties;\n this._getB3DMTransform(localTransform, rtcCoord, projCenter, node._rootIdx);\n mesh.setLocalTransform(localTransform);\n }\n\n\n createI3DMMesh(data, id, node, cb) {\n if (this._i3dmMeshes[id]) {\n const meshes = this._i3dmMeshes[id];\n console.warn(`i3dm mesh with id(${id}) was already created.`);\n if (!this._loading[id]) {\n cb(null, { id: id, mesh: meshes });\n }\n return meshes;\n }\n const service = this._layer._getNodeService(node._rootIdx);\n const upAxisTransform = this._getUpAxisTransform(node._upAxis);\n const { i3dm, featureTable, gltf, batchTable, batchTableBin, count } = data;\n const instanceCount = featureTable['INSTANCES_LENGTH'];\n\n const { rtcCenter, rtcCoord, projCenter } = data;\n const projectedMatrix = this._computeProjectedTransform(TEMP_MATRIX2, node, rtcCenter, rtcCoord);\n setTranslation(projectedMatrix, EMPTY_TRANSLATION, projectedMatrix);\n\n const tileRotQuat = mat4.getRotation(TEMP_TILE_ROT_QUAT, projectedMatrix);\n quat.normalize(tileRotQuat, tileRotQuat);\n\n // quat.normalize(rotation, rotation);\n const scaling = mat4.getScaling(TEMP_SCALING, projectedMatrix);\n const tileScalingMat4 = mat4.fromScaling(TEMP_TILE_SCALING_MAT, scaling);\n\n const tileTransform = this._getI3DMTileTransform(TEMP_TILE_TRANSFORM, projCenter, node);\n\n const projScale = this._getProjScale(TEMP_PROJ_SCALE);\n const distScale = this._getDistanceScale(TEMP_DIST_SCALE, rtcCoord);\n const distToProjScale = vec3.div(TEMP_DIST_TO_PROJ_SCALE, distScale, projScale);\n const distToProjScaleTransform = mat4.fromScaling(TEMP_MATRIX_SCALE, distToProjScale);\n\n const { POSITION, NORMAL_UP, NORMAL_RIGHT, SCALE, SCALE_NON_UNIFORM } = i3dm;\n const isWebGPU = this.getMap().getRenderer().isWebGPU();\n const ctor = isWebGPU ? Uint32Array : Uint16Array;\n const instanceData = {\n 'instance_vectorA': new Float32Array(instanceCount * 4),\n 'instance_vectorB': new Float32Array(instanceCount * 4),\n 'instance_vectorC': new Float32Array(instanceCount * 4),\n 'aPickingId': new ctor(instanceCount)\n };\n for (let i = 0; i < instanceCount; i++) {\n instanceData['aPickingId'][i] = i;\n }\n\n const normalUp = new Float32Array(3);\n const normalRight = new Float32Array(3);\n const normalForward = [];\n const scaleItem = new Float32Array(1);\n const scaleNonUniform = new Float32Array(3);\n const rotationMat3 = [];\n const quaternion = [];\n const scale = [];\n const matrix = [];\n iterateBufferData(POSITION, (vertex, index) => {\n if (NORMAL_UP) {\n getItemAtBufferData(normalRight, NORMAL_RIGHT, index);\n getItemAtBufferData(normalUp, NORMAL_UP, index);\n vec3.cross(normalForward, normalRight, normalUp)\n vec3.normalize(normalForward, normalForward);\n setColumn3(rotationMat3, normalRight, 0);\n setColumn3(rotationMat3, normalUp, 1);\n setColumn3(rotationMat3, normalForward, 2);\n quat.fromMat3(quaternion, rotationMat3);\n quat.normalize(quaternion, quaternion);\n quat.multiply(quaternion, tileRotQuat, quaternion);\n } else {\n quat.identity(quaternion);\n }\n if (SCALE) {\n getItemAtBufferData(scaleItem, SCALE, index);\n vec3.set(scale, scaleItem[0], scaleItem[0], scaleItem[0]);\n } else if (SCALE_NON_UNIFORM) {\n getItemAtBufferData(scaleNonUniform, SCALE_NON_UNIFORM, index);\n vec3.set(scale, ...scaleNonUniform);\n } else {\n vec3.set(scale, 1, 1, 1);\n }\n\n mat4.fromRotationTranslationScale(matrix, quaternion, vertex, scale);\n\n setInstanceData(instanceData['instance_vectorA'], index, matrix, 0);\n setInstanceData(instanceData['instance_vectorB'], index, matrix, 1);\n setInstanceData(instanceData['instance_vectorC'], index, matrix, 2);\n\n });\n\n const instanceBuffers = {};\n // 所有mesh共享一个 instance buffer,以节省内存\n for (const p in instanceData) {\n instanceBuffers[p] = {\n buffer: this._regl.buffer({\n dimension: instanceData[p].length / instanceCount,\n data: instanceData[p],\n name: p\n }),\n divisor: 1\n };\n }\n\n const shader = service.shader || 'pbr';\n let unreadyCount = 0;\n let ready = true;\n const meshes = [];\n const gltfWeakResources = [];\n iterateMesh(gltf, (gltfMesh, meshId, primId, gltf) => {\n const gltfResource = this._processGLTF(gltfMesh, meshId, primId, gltf, node, true, shader, gltfWeakResources);\n const { geometry, material } = gltfResource;\n if (material && !material.isReady()) {\n ready = false;\n unreadyCount++;\n }\n const mesh = new reshader.InstancedMesh(instanceBuffers, instanceCount, geometry, material);\n if (!gltfResource.refMeshes) {\n gltfResource.refMeshes = new Set();\n gltfResource.refMeshes.add(mesh.uuid);\n }\n mesh.properties.magic = 'i3dm';\n mesh.properties.id = id;\n mesh.properties.count = count;\n mesh.properties.batchTable = batchTable;\n mesh.properties.batchTableBin = batchTableBin;\n mesh.properties.serviceIndex = node._rootIdx;\n mesh.properties.rtcCoord = rtcCoord;\n mesh.properties.rtcCenter = rtcCenter;\n mesh.properties.projCenter = projCenter;\n mesh.properties.node = node;\n const defines = this._getGLTFMeshDefines(gltfMesh, geometry, material, node._rootIdx, gltf);\n defines['MESH_ENV_EXPO'] = 1;\n if (gltfMesh.compressed_int16_params) {\n this._setCompressedInt16Uniforms(mesh, gltfMesh.compressed_int16_params);\n }\n this._setWEB3DDecodeUniforms(mesh, gltfMesh.attributes);\n // GLTF模型默认y为up\n // https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#coordinate-system-and-units\n const nodeMatrix = mat4.identity([]);\n // mat4.multiply(mat, mat, node.matrix);\n if (gltfMesh.matrices && gltfMesh.matrices.length) {\n for (let i = 0; i < gltfMesh.matrices.length; i++) {\n mat4.multiply(nodeMatrix, nodeMatrix, gltfMesh.matrices[i]);\n }\n }\n mat4.multiply(nodeMatrix, upAxisTransform, nodeMatrix);\n mat4.multiply(nodeMatrix, distToProjScaleTransform, nodeMatrix);\n // 如果没有 NORMAL_UP,需要把原来在 instance_vector 中计入的enu以及node上的transform应用在positionMatrix中\n if (!featureTable['EAST_NORTH_UP'] && !NORMAL_UP) {\n mat4.multiply(nodeMatrix, projectedMatrix, nodeMatrix);\n } else {\n mat4.multiply(nodeMatrix, tileScalingMat4, nodeMatrix);\n }\n mesh.setPositionMatrix(nodeMatrix);\n\n this._updateI3DMLocalTransform(mesh, tileTransform);\n mesh.setDefines(defines);\n mesh.properties.polygonOffset = { offset: 0, factor: 0 };\n meshes.push(mesh);\n delete gltfMesh.attributes;\n mesh._originLocalTransform = mat4.copy([], mesh.localTransform);\n });\n\n trimGLTFWeakResources(gltfWeakResources);\n\n if (ready) {\n this._i3dmMeshes[id] = meshes;\n cb(null, { id: id, mesh: meshes });\n } else {\n this._loading[id] = { meshes: meshes, count: unreadyCount };\n meshes._callback = cb;\n }\n return meshes;\n }\n\n _updateI3DMLocalTransform(mesh, tileTransform) {\n const { rtcCoord, node, projCenter } = mesh.properties;\n\n if (!tileTransform) {\n tileTransform = this._getI3DMTileTransform(TEMP_TILE_TRANSFORM, projCenter, node);\n }\n\n const service = this._layer._getNodeService(node._rootIdx);\n const matrix = mesh.localTransform || [];\n if (service.coordOffset) {\n const coordOffsetMatrix = this._computeCoordOffsetMatrix(TEMP_MATRIX2, node._rootIdx, rtcCoord);\n mat4.multiply(matrix, coordOffsetMatrix, tileTransform);\n } else {\n mat4.copy(matrix, tileTransform);\n }\n mesh.setLocalTransform(matrix);\n mesh.properties.heightOffset = service.heightOffset || 0;\n mesh.properties.coordOffset = service.coordOffset && service.coordOffset.slice(0) || EMPTY_COORD_OFFSET;\n }\n\n _getI3DMTileTransform(out, projCenter, node) {\n mat4.fromScaling(out, this._getProjScale(TEMP_PROJ_SCALE));\n const translation = this._getCenterTranslation(TEMP_TRANSLATION, projCenter, node._rootIdx);\n mat4.multiply(out, mat4.fromTranslation(TEMP_TRANSLATION_MAT, translation), out);\n return out;\n }\n\n createB3DMMesh(data, id, node, cb) {\n if (data.gltf) {\n data.gltf.transferables = null;\n }\n if (this._modelMeshes[id] || this._loading[id]) {\n const meshes = this._modelMeshes[id];\n console.warn(`mesh with id(${id}) was already created.`);\n if (!this._loading[id]) {\n cb(null, { id: id, mesh: meshes });\n }\n return meshes;\n }\n let maxPrjExtent;\n if (node.maxExtent) {\n const extent = new maptalks.Extent(node.maxExtent).convertTo(c => this._pointToPrj(c));\n maxPrjExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n }\n\n\n const gltf = data.gltf;\n //for model matrix\n const { projCenter } = gltf.extensions['MAPTALKS_RTC'];\n const { rtcCoord, center: rtcCenter } = gltf.extensions['CESIUM_RTC'];\n\n const isSharedPosition = gltf.asset.sharePosition;\n const upAxisTransform = this._getUpAxisTransform(node._upAxis);\n const tileTransform = this._getB3DMTileTransform(TEMP_TILE_TRANSFORM, isSharedPosition, rtcCoord, rtcCenter, projCenter, node);\n const service = this._layer._getNodeService(node._rootIdx);\n let shader = service.shader || 'pbr';\n if (service.unlit) {\n shader = 'phong';\n } else if (gltf.materials) {\n for (let i = 0; i < gltf.materials.length; i++) {\n if (gltf.materials[i] && gltf.materials[i].extensions && gltf.materials[i].extensions['KHR_materials_unlit']) {\n shader = 'phong';\n break;\n }\n }\n }\n\n const gltfWeakResources = [];\n const meshes = [];\n let unreadyCount = 0;\n let ready = true;\n\n iterateMesh(gltf, (gltfMesh, meshId, primId, gltf) => {\n const gltfResource = this._processGLTF(gltfMesh, meshId, primId, gltf, node, false, shader, gltfWeakResources);\n const { geometry, material } = gltfResource;\n if (material && !material.isReady()) {\n ready = false;\n unreadyCount++;\n }\n const mesh = new reshader.Mesh(geometry, material);\n if (!gltfResource.refMeshes) {\n gltfResource.refMeshes = new Set();\n gltfResource.refMeshes.add(mesh.uuid);\n }\n mesh.properties.magic = 'b3dm';\n mesh.properties.id = id;\n mesh.properties.node = node;\n if (data.batchTable) {\n mesh.properties.batchTable = data.batchTable;\n mesh.properties.batchTableBin = data.batchTableBin;\n }\n mesh.properties.count = data.featureTable && data.featureTable['BATCH_LENGTH'] || 0;\n mesh.properties.serviceIndex = node._rootIdx;\n const defines = this._getGLTFMeshDefines(gltfMesh, geometry, material, node._rootIdx, gltf);\n defines['MESH_ENV_EXPO'] = 1;\n mesh.setDefines(defines);\n const compressUniforms = gltfMesh.compressUniforms;\n if (compressUniforms) {\n for (const u in compressUniforms) {\n mesh.setUniform(u, compressUniforms[u]);\n }\n }\n if (gltfMesh.compressed_int16_params) {\n this._setCompressedInt16Uniforms(mesh, gltfMesh.compressed_int16_params);\n }\n this._setWEB3DDecodeUniforms(mesh, gltfMesh.attributes);\n if (maxPrjExtent) {\n defines['USE_MAX_EXTENT'] = 1;\n mesh.setUniform('maxPrjExtent', maxPrjExtent);\n // mesh.setUniform('prjCenter', projCenter);\n }\n\n if (!mesh.hasFunctionUniform('polygonOpacity')) {\n mesh.setFunctionUniform('polygonOpacity', function () {\n return isNumber(service.opacity) ? service.opacity : 1;\n });\n }\n if (!mesh.hasFunctionUniform('polygonFill')) {\n mesh.setFunctionUniform('polygonFill', function () {\n return normalizeColor([], service.polygonFill || DEFAULT_POLYGONFILL);\n });\n }\n if (!mesh.material.hasFunctionUniform('hsv')) {\n mesh.material.setFunctionUniform('hsv', function () {\n return service.hsv || DEFAULT_HSV;\n });\n }\n\n\n // gltfMesh.matrices 已经在 layerWorker转换坐标时,加入计算了,所以这里不用再重复计算\n const nodeMatrix = mat4.identity([]);\n // mat4.multiply(mat, mat, node.matrix);\n if (isSharedPosition && gltfMesh.matrices && gltfMesh.matrices.length) {\n for (let i = 0; i < gltfMesh.matrices.length; i++) {\n mat4.multiply(nodeMatrix, nodeMatrix, gltfMesh.matrices[i]);\n }\n }\n\n if (isSharedPosition) {\n mat4.multiply(nodeMatrix, upAxisTransform, nodeMatrix);\n }\n\n // const coordOffsetMatrix = this._computeCoordOffsetMatrix(node._rootIdx, rtcCoord);\n // if (coordOffsetMatrix) {\n // mat4.multiply(nodeMatrix, coordOffsetMatrix, nodeMatrix);\n // }\n mesh.properties.node = node;\n mesh.properties.projCenter = projCenter;\n mesh.properties.nodeMatrix = nodeMatrix;\n mesh.properties.isSharedPosition = isSharedPosition;\n mesh.properties.rtcCoord = rtcCoord;\n mesh.properties.rtcCenter = rtcCenter;\n\n this._updateB3DMLocalMatrix(mesh, tileTransform);\n meshes.push(mesh);\n delete gltfMesh.attributes;\n mesh._originLocalTransform = mat4.copy([], mesh.localTransform);\n });\n\n // trim indices/material images to save memories\n trimGLTFWeakResources(gltfWeakResources);\n\n if (ready) {\n this._modelMeshes[id] = meshes;\n cb(null, { id : id, mesh : meshes });\n } else {\n this._loading[id] = { meshes: meshes, count: unreadyCount };\n meshes._callback = cb;\n }\n return meshes;\n }\n\n _createBoxMesh(node) {\n const nodeBox = this._layer._getNodeBox(node.id);\n if (!nodeBox || node._boxMesh) {\n return;\n }\n let vertices, indices, translate, scale;\n if (nodeBox.obbox) { //region、box\n vertices = nodeBox.boxPosition;\n indices = BOX_INDEX;\n translate = nodeBox.boxCenter;\n scale = BOX_SCALE;\n } else if (nodeBox.sphereBox) { //sphere\n const sphereCenter = nodeBox.sphereBox[0], radius = nodeBox.sphereBox[1];\n vertices = SPHERE_POS.vertices;\n indices = SPHERE_POS.indices;\n translate = sphereCenter;\n scale = [radius, radius, radius];\n }\n const geometry = new reshader.Geometry({\n POSITION: vertices\n },\n indices,\n 0,\n {\n primitive : 'lines',\n positionAttribute: 'POSITION'\n });\n const mesh = new reshader.Mesh(geometry, new reshader.Material({ lineColor: [0.8, 0.8, 0.1, 1.0], lineOpacity: 1 }));\n const localTransform = [];\n mat4.fromRotationTranslationScale(localTransform, BOX_ROTATE, translate, scale);\n mesh.localTransform = localTransform;\n mesh._originLocalTransform = mat4.copy([], localTransform);\n mesh.properties.node = node;\n node._boxMesh = mesh;\n }\n\n _deleteBoxMesh(node) {\n if (node._boxMesh) {\n node._boxMesh.geometry.dispose();\n node._boxMesh.dispose();\n delete node._boxMesh;\n }\n }\n\n _setCompressedInt16Uniforms(mesh, compressed_int16_params) {\n if (compressed_int16_params['POSITION']) {\n mesh.setUniform('compressedPositionRange', compressed_int16_params['POSITION']);\n }\n if (compressed_int16_params['TEXCOORD_0']) {\n mesh.setUniform('compressedTexcoordRange_0', compressed_int16_params['TEXCOORD_0']);\n }\n if (compressed_int16_params['TEXCOORD_1']) {\n mesh.setUniform('compressedTexcoordRange_1', compressed_int16_params['TEXCOORD_0']);\n }\n if (compressed_int16_params['NORMAL']) {\n mesh.setUniform('compressedNormalRange', compressed_int16_params['NORMAL']);\n }\n if (compressed_int16_params['TANGENT']) {\n mesh.setUniform('compressedTangentRange', compressed_int16_params['TANGENT']);\n }\n if (compressed_int16_params['compressed_ratio']) {\n mesh.setUniform('compressed_ratio', compressed_int16_params['compressed_ratio']);\n }\n }\n\n _updateB3DMLocalMatrix(mesh, tileTransform) {\n const { isSharedPosition, rtcCoord, rtcCenter, projCenter, nodeMatrix, node } = mesh.properties;\n if (!tileTransform) {\n tileTransform = this._getB3DMTileTransform(tileTransform || TEMP_TILE_TRANSFORM, isSharedPosition, rtcCoord, rtcCenter, projCenter, node)\n }\n\n const matrix = mesh.localTransform || mat4.identity([]);\n\n mat4.multiply(matrix, tileTransform, nodeMatrix);\n const service = this._layer._getNodeService(node._rootIdx);\n if (service.coordOffset) {\n const coordOffsetMatrix = this._computeCoordOffsetMatrix(TEMP_MATRIX2, node._rootIdx, rtcCoord);\n mat4.multiply(matrix, coordOffsetMatrix, matrix);\n }\n mesh.setLocalTransform(matrix);\n mesh.properties.heightOffset = service.heightOffset || 0;\n mesh.properties.coordOffset = service.coordOffset && service.coordOffset.slice(0) || EMPTY_COORD_OFFSET;\n }\n\n _getB3DMTileTransform(out, isSharedPosition, rtcCoord, rtcCenter, projCenter, node) {\n if (isSharedPosition) {\n // position被共享的模型,只能采用basisTo2D来绘制\n // 电信的模型如tokyo.html中的模型\n const distanceScale = this._getDistanceScale(TEMP_DIST_SCALE, rtcCoord);\n const localTransform = mat4.fromScaling(TEMP_MATRIX1, distanceScale);\n const projectedMatrix = this._computeProjectedTransform(TEMP_MATRIX2, node, rtcCenter, rtcCoord);\n mat4.multiply(out, projectedMatrix, localTransform);\n } else {\n this._getB3DMTransform(out, rtcCoord, projCenter, node._rootIdx);\n }\n return out;\n }\n\n _setWEB3DDecodeUniforms(mesh, attributes) {\n if (attributes && attributes['TEXCOORD_0'] && attributes['TEXCOORD_0'].extensions && attributes['TEXCOORD_0'].extensions['WEB3D_quantized_attributes']) {\n const decodeMatrix = attributes['TEXCOORD_0'].extensions['WEB3D_quantized_attributes'].decodeMatrix;\n mesh.setUniform('decodeMatrix', decodeMatrix);\n }\n }\n\n _computeProjectedTransform(out, node, rtcCenter, rtcCoord) {\n const map = this.getMap();\n const heightOffset = this._layer._getNodeService(node._rootIdx).heightOffset || 0;\n\n const nodeTransform = node.matrix ? mat4.copy(out, node.matrix) : mat4.identity(out);\n if (rtcCenter) {\n const realCenter = vec3.transformMat4(TEMP_RTCCENTER, rtcCenter, nodeTransform);\n setTranslation(nodeTransform, realCenter, nodeTransform);\n }\n // const computedTransform = mat4.multiply([], nodeTransform, Y_TO_Z);\n const computedTransform = nodeTransform;\n const projection = map.getProjection();\n const glRes = map.getGLRes();\n const projectedTransform = basisTo2D(computedTransform, rtcCoord, computedTransform, projection, glRes, this._heightScale, heightOffset);\n const translation = getTranslation(TEMP_TRANSLATION, projectedTransform);\n let offset = this._layer.options['offset'];\n if (isFunction(offset)) {\n const center = this._layer._getNodeBox(node.id).boxCoord;\n offset = offset.call(this._layer, center);\n }\n vec3.set(TEMP_OFFSET, offset[0], offset[1], 0);\n vec3.sub(translation, translation, TEMP_OFFSET);\n\n setTranslation(projectedTransform, translation, projectedTransform);\n return projectedTransform;\n\n }\n\n _computeCoordOffsetMatrix(out, rootIdx, center) {\n const service = this._layer._getNodeService(rootIdx);\n if (!service.coordOffset) {\n return null;\n }\n const map = this.getMap();\n const glRes = map.getGLRes();\n TEMP_CENTER.set(center[0], center[1]);\n const point0 = map.coordToPointAtRes(TEMP_CENTER, glRes, TEMP_POINT1);\n const coordOffset = service.coordOffset;\n const target = TEMP_CENTER.set(center[0] + coordOffset[0], center[1] + coordOffset[1]);\n const point1 = map.coordToPointAtRes(target, glRes, TEMP_POINT2);\n const dx = point1.x - point0.x;\n const dy = point1.y - point0.y;\n const heightScale = this._heightScale;\n\n const translation = vec3.set(TEMP_OFFSET, dx, dy, (coordOffset[2] || 0) * heightScale);\n const matrix = mat4.fromTranslation(out, translation);\n return matrix;\n }\n\n createCMPTMesh(data, id, node, cb) {\n if (this._cmptMeshes[id]) {\n const meshes = this._cmptMeshes[id];\n console.warn(`mesh with id(${id}) was already created.`);\n cb(null, { id: id, mesh: meshes });\n return meshes;\n }\n // if (node.content.uri !== 'NoLod_2.cmpt') {\n // return [];\n // }\n const { content } = data;\n const meshes = [];\n for (let i = 0; i < content.length; i++) {\n const { magic } = content[i];\n const childId = id + '.' + i;\n if (magic === 'b3dm') {\n this.createB3DMMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n } else if (magic === 'i3dm') {\n this.createI3DMMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n } else if (magic === 'pnts') {\n this.createPntsMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n } else if (magic === 'cmpt') {\n this.createCMPTMesh(content[i], childId, node, (err, { mesh }) => {\n meshes.push(mesh);\n });\n }\n }\n this._cmptMeshes[id] = meshes;\n cb(null, { id: id, mesh: meshes });\n return meshes;\n }\n\n _getGLTFMeshDefines(gltfMesh, geometry, material, rootIdx, gltf) {\n const shader = this._layer._getNodeService(rootIdx).shader || 'pbr';\n const runShader = shader === 'phong' ? this._phongShader : this._standardShader;\n const defines = runShader.getGeometryDefines(geometry);\n if (gltf.asset && gltf.asset.generator === 'S3M') {\n this._appendS3MDefines(defines, geometry);\n }\n if (geometry.data.uvRegion) {\n defines['HAS_I3S_UVREGION'] = 1;\n }\n\n if (geometry.data[geometry.desc.normalAttribute]) {\n defines['VertexNormal'] = 1;\n }\n if (geometry.data[geometry.desc.color0Attribute]) {\n defines['VertexColor'] = 1;\n }\n if (geometry.data[geometry.desc.uv0Attribute]) {\n defines['TexCoord'] = 1;\n }\n if (geometry.data[geometry.desc.textureCoordMatrixAttribute]) {\n defines['HAS_TextureCoordMatrix'] = 1;\n }\n if (material.get('uTexture')) {\n defines['COMPUTE_TEXCOORD'] = 1;\n }\n if (material.get('uTexture2')) {\n defines['TexCoord2'] = 1;\n }\n if(this._layer._vertexCompressionType === 'MESHOPT') {\n defines['MeshOPT_Compress'] = 1;\n }\n if (this.hasIBL()) {\n defines['HAS_IBL_LIGHTING'] = 1;\n }\n if (gltfMesh.attributes && gltfMesh.attributes['TEXCOORD_0'] && gltfMesh.attributes['TEXCOORD_0'].extensions === 'WEB3D_quantized_attributes') {\n defines['HAS_WEB3D_quantized_attributes_TEXCOORD'] = 1;\n }\n defines['HAS_MIN_ALTITUDE'] = 1;\n this._setCompressedInt16Defines(defines, gltfMesh.compressed_int16_params);\n const compressDefines = gltfMesh.compressDefines;\n extend(defines, compressDefines);\n return defines;\n }\n\n _setCompressedInt16Defines(defines, compressed_int16_params) {\n if (compressed_int16_params && Object.keys(compressed_int16_params).length > 0) {\n defines['HAS_COMPRESSED_INT16'] = 1;\n if (compressed_int16_params['POSITION']) {\n defines['HAS_COMPRESSED_INT16_POSITION'] = 1;\n }\n if (compressed_int16_params['TEXCOORD_0']) {\n defines['HAS_COMPRESSED_INT16_TEXCOORD_0'] = 1;\n }\n if (compressed_int16_params['TEXCOORD_1']) {\n defines['HAS_COMPRESSED_INT16_TEXCOORD_1'] = 1;\n }\n if (compressed_int16_params['NORMAL']) {\n defines['HAS_COMPRESSED_INT16_NORMAL'] = 1;\n }\n if (compressed_int16_params['TANGENT']) {\n defines['HAS_COMPRESSED_INT16_TANGENT'] = 1;\n }\n if (compressed_int16_params['compressed_ratio']) {\n defines['HAS_COMPRESSED_INT16_RATIO'] = 1;\n }\n }\n }\n\n _updateMaskDefines(mesh) {\n const renderer = this._layer.getRenderer();\n if (renderer) {\n renderer.updateMaskDefines(mesh);\n }\n }\n\n _appendS3MDefines(defines, geometry) {\n if (geometry.data['aNormal']) {\n defines['VertexNormal'] = 1;\n }\n if (geometry.data['instanceId']) {\n defines['Instance'] = 1;\n }\n if (geometry.data['aTexCoord0']) {\n defines['TexCoord'] = 1;\n }\n if (geometry.data['aColor']) {\n defines['VertexColor'] = 1;\n }\n if (geometry.data['aTexCoord1']) {\n defines['TexCoord2'] = 1;\n }\n if (geometry.data['uv2']) {\n defines['InstanceBim'] = 1;\n }\n }\n\n _processGLTF(gltfMesh, meshId, primId, gltf, node, isI3DM, shader, gltfWeakResources) {\n let isS3M = false;\n if (gltf.asset && gltf.asset.generator === 'S3M') {\n isS3M = true;\n // is a s3mType\n gltf.extensions = gltf.extensions || {};\n // gltf.extensions['KHR_techniques_webgl'] = getKHR_techniques(gltf.asset.s3mVersion);\n }\n const url = gltf.url + '-' + meshId + '-' + primId;\n if (this._cachedGLTF[url]) {\n return this._cachedGLTF[url];\n }\n gltfWeakResources.push(gltfMesh);\n let material, geometry;\n //TODO 有些B3DM或I3DM里,多个 gltf.mesh 会共享同一个POSITION,MESH,TEXCOORD。\n // 效率更高的做法是为他们单独创建buffer后赋给Geometry\n // 程序中无需管理buffer的销毁,Geometry中会维护buffer的引用计数来管理buffer的销毁\n const matInfo = gltf.materials && gltf.materials[gltfMesh.material];\n const khrTechniquesWebgl = gltf.extensions && gltf.extensions['KHR_techniques_webgl'];\n const service = this._layer._getNodeService(node._rootIdx);\n if (khrTechniquesWebgl && matInfo.extensions && matInfo.extensions['KHR_techniques_webgl']) {\n const isWebGPU = this.getMap().getRenderer().isWebGPU();\n if (isWebGPU) {\n throw new Error('3dtiles with KHR_techniques_webgl extension is not supported in webgpu');\n }\n // s3m.vert 和 s3m.frag 是用webgl 2写的,所以是s3m时,要开启webgl2\n const khrMesh = this._createTechniqueMesh(gltfMesh, gltf, isI3DM, isS3M);\n material = khrMesh.material;\n geometry = khrMesh.geometry;\n if (service['fillEmptyDataInMissingAttribute']) {\n geometry.desc.fillEmptyDataInMissingAttribute = true;\n }\n } else {\n geometry = this._createGeometry(gltfMesh, isI3DM, DEFAULT_SEMANTICS);\n const materialInfo = service.material;\n material = this._createMaterial(gltfMesh.material, gltf, shader, materialInfo || DEFAULT_MATERIAL_INFO, gltfWeakResources, service);\n }\n if (material) {\n material.setFunctionUniform('alphaTest', function () {\n const alphaTest = service['alphaTest'];\n if (!isNil(alphaTest)) {\n return alphaTest;\n }\n return 0.1;\n });\n\n material.setFunctionUniform('environmentExposure', () => {\n // maptalks/issues#661\n const ambientLight = service.ambientLight;\n let environmentExposure = service.environmentExposure;\n const lights = this.getMap().getLightManager();\n const mapAmbient = lights && lights.getAmbientLight();\n if (ambientLight && (!mapAmbient || mapAmbient.color) && environmentExposure === undefined) {\n const ambientValue = mapAmbient && mapAmbient.color ? mapAmbient.color[0] : 0.2;\n // 老的ambientLight设置的兼容性代码\n environmentExposure = ambientLight[0] / ambientValue;\n }\n return environmentExposure || 1;\n });\n }\n\n if (material && !material.isReady()) {\n material._nodeId = node.id;\n } else if (!material) {\n material = new reshader.PhongMaterial({\n 'baseColorFactor' : [1, 1, 1, 1]\n });\n }\n\n const gltfGeo = {\n geometry, material\n };\n geometry.properties.url = url;\n this._cachedGLTF[url] = gltfGeo;\n return gltfGeo;\n }\n\n _createTechniqueMesh(gltfMesh, gltf, isI3DM, useWebGL2) {\n const { geometry, material } = this._khrTechniqueWebglManager.createMesh(gltfMesh, gltf, isI3DM, useWebGL2)\n return { geometry, material };\n }\n\n _createGeometry(gltfMesh, isI3DM, attributeSemantics) {\n const isWebGPU = this.getMap().getRenderer().isWebGPU();\n const attributes = gltfMesh.attributes;\n const color0Name = 'COLOR_0';\n // 把Float32类型的color0改为uint8类型数组\n let batchIdData = attributes['_BATCHID'] && attributes['_BATCHID'].array;\n if (batchIdData) {\n if (batchIdData.byteOffset) {\n batchIdData = new batchIdData.constructor(batchIdData);\n if (isWebGPU && !(batchIdData instanceof Uint32Array)) {\n batchIdData = new Uint32Array(batchIdData);\n }\n }\n }\n if (attributes[color0Name]) {\n const colors = attributes[color0Name].array || attributes[color0Name];\n if (colors instanceof Float32Array) {\n const color = new Uint8Array(colors.length);\n for (let i = 0; i < color.length; i++) {\n color[i] = Math.round(colors[i] * 255);\n }\n if (attributes[color0Name].array) {\n attributes[color0Name].array = color;\n attributes[color0Name].componentType = 5121;\n } else {\n attributes[color0Name] = color;\n }\n\n }\n }\n\n const attrs = {};\n let positionSize = 0;\n let vertexCount = 0;\n for (const p in attributes) {\n // 优先采用 attributeSemantics中定义的属性\n const name = attributeSemantics[p] || p;\n const isPosition = name === attributeSemantics['POSITION'];\n if (isWebGPU) {\n reshader.Geometry.padGPUGLTFAttribute(attributes[p]);\n }\n if (isPosition) {\n positionSize = attributes[p].itemSize;\n }\n const buffer = getUniqueREGLBuffer(this._regl, attributes[p], { dimension: attributes[p].itemSize, name: p });\n\n attrs[name] = extend({}, attributes[p]);\n attrs[name].buffer = buffer;\n attrs[name].type = getArrayType(attrs[name].array);\n delete attrs[name].array;\n if (name === attributeSemantics['POSITION']) {\n attrs[name].array = attributes[p].array;\n vertexCount = attributes[p].array.length / 3;\n }\n }\n // 补上缺失的_BATHCID属性,解决macos下 vertex buffer not big enough 报错\n const pickingIdAttribute = attributeSemantics['_BATCHID'];\n if (!attrs[pickingIdAttribute] && !isI3DM) {\n const ctor = isWebGPU ? Uint32Array : Uint8Array;\n const pickingData = new ctor(vertexCount);\n attrs[pickingIdAttribute] = pickingData;\n }\n // createColorArray(attrs);\n const indices = gltfMesh.indices ? (gltfMesh.indices.array ? gltfMesh.indices.array.slice() : gltfMesh.indices) : null;\n const geometry = new reshader.Geometry(\n attrs,\n indices,\n 0,\n {\n // static: true,\n positionSize,\n positionAttribute: attributeSemantics['POSITION'],\n normalAttribute: attributeSemantics['NORMAL'],\n uv0Attribute: attributeSemantics['TEXCOORD_0'],\n uv1Attribute: attributeSemantics['TEXCOORD_1'],\n color0Attribute: attributeSemantics['COLOR_0'],\n tangentAttribute: attributeSemantics['TANGENT'],\n pickingIdAttribute: attributeSemantics['_BATCHID'],\n primitive: gltfMesh.mode === undefined ? 'triangles' : getPrimitive(gltfMesh.mode)\n }\n );\n if (batchIdData && indices) {\n geometry.properties.batchIdData = batchIdData;\n geometry.properties.batchIdMap = generateFeatureIndiceIndex(batchIdData, indices);\n }\n geometry.generateBuffers(this._regl, { excludeElementsInVAO: isI3DM });\n return geometry;\n }\n\n _getB3DMTransform(out, rtcCoord, projCenter, rootIdx) {\n const localTransform = mat4.identity(out);\n\n const scale = this._getProjScale(IDENTITY_SCALE);\n this._getCenterTranslation(TEMP_TRANSLATION, projCenter, rootIdx);\n\n mat4.translate(localTransform, localTransform, TEMP_TRANSLATION);\n mat4.scale(localTransform, localTransform, scale);\n return localTransform;\n }\n\n _getCenterTranslation(out, projCenter, rootIdx) {\n const heightScale = this._heightScale\n TEMP_CENTER.x = projCenter[0];\n TEMP_CENTER.y = projCenter[1];\n const center = this._prjToPoint(TEMP_CENTER);\n let offset = this._layer.options['offset'];\n if (isFunction(offset)) {\n offset = offset.call(this._layer, TEMP_CENTER);\n }\n const heightOffset = this._layer._getNodeService(rootIdx).heightOffset || 0;\n vec3.set(out, center.x - offset[0], center.y - offset[1], heightScale * projCenter[2] + heightScale * heightOffset);\n return out;\n }\n\n _updateServiceMatrix(mesh, node) {\n const serviceTransform = this._layer._getServiceTransform(TEMP_SERVICE_MAT, node);\n mesh.localTransform = mat4.multiply(mesh.localTransform, serviceTransform, mesh._originLocalTransform);\n }\n\n _getDistanceScale(out, rtcCoord) {\n // heightOffset 在 _computeProjectedTransform 中计算了,所以这里不用再重复计算。\n const map = this.getMap();\n TEMP_CENTER.x = rtcCoord[0];\n TEMP_CENTER.y = rtcCoord[1];\n const zoomScale = map.distanceToPointAtRes(100, 100, map.getGLRes(), TEMP_CENTER);\n const heightScale = this._heightScale;\n vec3.set(out, zoomScale.x / 100, zoomScale.y / 100, heightScale);\n return out;\n }\n\n _createShaders(context) {\n if (this._standardShader) {\n return;\n }\n const viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this._canvas ? this._canvas.width : 1;\n },\n height : () => {\n return this._canvas ? this._canvas.height : 1;\n }\n };\n const modelNormalMatrix = [];\n const projViewModelMatrix = [];\n this._pntsShader = new reshader.MeshShader({\n name: '3dtiles-pnts-shader',\n vert: pntsVert,\n frag: pntsFrag,\n wgslVert: getWGSLSource('layer_3dtiles_pnts_vert'),\n wgslFrag: getWGSLSource('layer_3dtiles_pnts_frag'),\n uniforms: [\n {\n name: 'projViewModelMatrix',\n type: 'function',\n fn: (_, props) => {\n return mat4.multiply(projViewModelMatrix, props['projViewMatrix'], props['modelMatrix']);\n }\n },\n {\n name: 'modelNormalMatrix',\n type: 'function',\n fn: (_, props) => {\n return mat3.fromMat4(modelNormalMatrix, props['modelMatrix']);\n }\n }\n ],\n extraCommandProps: {\n viewport,\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one minus src alpha'\n },\n equation: 'add'\n },\n depth: {\n enable: true,\n func: '<'\n }\n }\n });\n\n const defines = {};\n const uniformDeclares = [];\n ContextUtil.fillIncludes(defines, uniformDeclares, context);\n const extraCommandProps = this._getExtraCommandProps();\n\n this._phongShader = new reshader.PhongShader({\n uniforms: uniformDeclares,\n defines,\n extraCommandProps\n });\n\n this._standardShader = new reshader.pbr.StandardShader({\n uniforms: uniformDeclares,\n defines,\n extraCommandProps\n // uniforms : [\n // 'ambientLight',\n // 'baseColor',\n // 'debug',\n // 'linearColor',\n // {\n // name : 'projViewModelMatrix',\n // type : 'function',\n // fn : (context, props) => {\n // return mat4.multiply([], props['projViewMatrix'], props['modelMatrix']);\n // }\n // },\n // {\n // name : 'maxExtent',\n // type : 'function',\n // fn : (context, props) => {\n // const maxExtent = props['maxPrjExtent'],\n // prjCenter = props['prjCenter'];\n // if (!maxExtent) {\n // return null;\n // }\n // const extent = [\n // maxExtent[0] - prjCenter[0], maxExtent[1] - prjCenter[1],\n // maxExtent[2] - prjCenter[0], maxExtent[3] - prjCenter[1],\n // ];\n // return extent;\n // }\n // }\n // ],\n\n });\n //用于绘制bbox\n this._edgeShader = new reshader.EdgeShader({ extraCommandProps: {\n viewport: {\n x : 0,\n y : 0,\n width : () => {\n return this._canvas ? this._canvas.width : 1;\n },\n height : () => {\n return this._canvas ? this._canvas.height : 1;\n }\n },\n blend: {\n enable: true,\n func: {\n srcRGB: 'src alpha',\n srcAlpha: 1,\n dstRGB: 'one minus src alpha',\n dstAlpha: 'one minus src alpha'\n },\n equation: 'add'\n }\n } });\n\n const layer = this._layer;\n loginIBLResOnCanvas(layer.getRenderer().canvas, this._regl, layer.getMap());\n\n this.picking = new reshader.FBORayPicking(\n this._renderer,\n {\n vert: pickingVert,\n wgslVert: getWGSLSource('layer_3dtiles_picking_vert'),\n extraCommandProps,\n uniforms: this._standardShader.uniforms,\n defines: {\n 'PICKING_MODE': 1,\n 'ENABLE_PICKING': 1,\n 'HAS_PICKING_ID': 1\n },\n },\n this.pickingFBO,\n this.getMap()\n );\n this._pntsPicking = new reshader.FBORayPicking(\n this._renderer,\n {\n vert: pntsVert,\n wgslVert: getWGSLSource('layer_3dtiles_pnts_vert'),\n extraCommandProps,\n uniforms: this._pntsShader.uniforms,\n defines: {\n 'PICKING_MODE': 1,\n 'ENABLE_PICKING': 1,\n 'HAS_PICKING_ID': 1\n }\n },\n this.pickingFBO,\n this.getMap()\n );\n // this._modelShader.filter = mesh => {\n // return mesh.material.isReady();\n // };\n }\n\n\n _getExtraCommandProps() {\n const viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this._canvas ? this._canvas.width : 1;\n },\n height : () => {\n return this._canvas ? this._canvas.height : 1;\n }\n };\n return {\n viewport,\n // colorMask: (_, props) => {\n // return props['colorMask'] || colorOn;\n // },\n cull : {\n enable: (_, props) => {\n return !!props.meshProperties.cullFace;\n },\n face: (_, props) => {\n return props.cullFace || 'back';\n }\n },\n stencil: {\n enable: (_, props) => {\n return props.stencilEnable;\n },\n func: {\n cmp: '<=',\n ref: (_, props) => {\n return props.meshProperties.selectionDepth;\n },\n // mask: 0xff\n },\n op: {\n fail: 'keep',\n zfail: 'keep',\n zpass: 'replace'\n }\n },\n depth: {\n enable: true,\n func: (_, props) => {\n return props.meshProperties.depthFunc || '<=';\n }\n },\n blend: {\n enable: true,\n func: {\n src: 1,\n dst: 'one minus src alpha'\n },\n equation: 'add'\n },\n polygonOffset: {\n enable: true,\n offset: (_, props) => {\n return props.meshProperties.polygonOffset;\n }\n }\n };\n }\n\n _getPntsUniforms(options) {\n const map = this.getMap();\n const lightManager = map.getLightManager();\n const directionalLight = lightManager && lightManager.getDirectionalLight() || {};\n const lightDir = directionalLight.direction || [1, 1, -1];\n const pointOpacity = options && options.pointOpacity || 1;\n let layerOpacity = this._layer.options['opacity'];\n layerOpacity = isNil(layerOpacity) ? 1 : layerOpacity;\n return {\n projViewMatrix : map.projViewMatrix,\n pointOpacity,\n lightDir: vec3.normalize(LIGHT_DIR, lightDir),\n layerOpacity\n };\n }\n\n _getUniformValues() {\n const map = this.getMap();\n const layer = this._layer;\n const canvas = layer.getRenderer().canvas;\n const { iblTexes, dfgLUT } = getIBLResOnCanvas(canvas);\n const uniforms = getPBRUniforms(map, iblTexes, dfgLUT);\n const renderer = this._layer.getRenderer();\n const maskUniforms = renderer.getMaskUniforms();\n uniforms.minAltitude = layer.options.altitude / 100 || 0;\n let layerOpacity = layer.options['opacity'];\n layerOpacity = isNil(layerOpacity) ? 1 : layerOpacity;\n uniforms.layerOpacity = layerOpacity;\n extend(uniforms, {\n czm_lightDirectionEC: uniforms['light0_viewDirection'],\n lightSpecular: [1.0, 1.0, 1.0],\n viewMatrix: map.viewMatrix,\n projMatrix: map.projMatrix,\n projViewMatrix : map.projViewMatrix,\n outSize: [canvas.width, canvas.height],\n polygonFill: [1, 1, 1, 1],\n polygonOpacity: 1\n });\n if (!uniforms.ambientColor) {\n uniforms.ambientColor = [0.2, 0.2, 0.2];\n }\n extend(uniforms, maskUniforms);\n return uniforms;\n }\n\n _createMaterial(materialIndex, gltf, shader, materialInfo, gltfWeakResources, service) {\n const material = gltf.materials && gltf.materials[materialIndex];\n if (!material || !material.baseColorTexture && !material.pbrMetallicRoughness) {\n return null;\n }\n const matInfo = extend({}, materialInfo);\n if (material.baseColorTexture) {\n // GLTF 1.0\n const texInfo = gltf.textures[material.baseColorTexture.index];\n let texture;\n if (texInfo && !texInfo.image.color) {\n texture = this._getTexture(texInfo, gltfWeakResources);\n }\n matInfo.baseColorFactor = texInfo && texInfo.image.color || material.baseColorFactor || [1, 1, 1, 1];\n if (texture) {\n matInfo['baseColorTexture'] = texture;\n }\n } else {\n // GLTF 2.0\n\n if (material.normalTexture) {\n const texture = this._getTexture(gltf.textures[material.normalTexture.index], gltfWeakResources);\n if (texture) {\n const normalMapFactor = material.normalTexture.scale || 1;\n matInfo.normalTexture = texture;\n matInfo.normalMapFactor = normalMapFactor;\n }\n }\n if (material.occlusionTexture) {\n const texture = this._getTexture(gltf.textures[material.occlusionTexture.index], gltfWeakResources);\n if (texture) {\n const occlusionFactor = material.occlusionTexture.strength || 1;\n matInfo.occlusionTexture = texture;\n matInfo.occlusionFactor = occlusionFactor;\n }\n }\n if (material.emissiveTexture) {\n const texture = this._getTexture(gltf.textures[material.emissiveTexture.index], gltfWeakResources);\n if (texture) {\n matInfo.emissiveTexture = texture;\n }\n }\n if (material.emissiveFactor) {\n matInfo.emissiveFactor = material.emissiveFactor;\n }\n //TODO alphaMode, cutOff和doubleSided\n\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n if (pbrMetallicRoughness) {\n if (pbrMetallicRoughness.baseColorFactor) {\n matInfo.baseColorFactor = pbrMetallicRoughness.baseColorFactor;\n }\n if (pbrMetallicRoughness.baseColorTexture && pbrMetallicRoughness.baseColorTexture.index !== undefined) {\n const texInfo = gltf.textures[pbrMetallicRoughness.baseColorTexture.index];\n if (texInfo && texInfo.image && texInfo.image.color) {\n matInfo.baseColorFactor = matInfo.baseColorFactor ? vec4.multiply(matInfo.baseColorFactor, matInfo.baseColorFactor, texInfo.image.color) : texInfo.image.color;\n } else {\n const texture = this._getTexture(texInfo, gltfWeakResources);\n if (texture) {\n matInfo.baseColorTexture = texture;\n // 调用getREGLTexture以回收bitmap\n matInfo.baseColorTexture.getREGLTexture(this._regl);\n }\n }\n }\n if (!isNil(pbrMetallicRoughness.metallicFactor)) {\n matInfo.metallicFactor = pbrMetallicRoughness.metallicFactor;\n }\n if (!isNil(pbrMetallicRoughness.roughnessFactor)) {\n matInfo.roughnessFactor = pbrMetallicRoughness.roughnessFactor;\n }\n if (material.metallicRoughnessTexture) {\n const texture = this._getTexture(gltf.textures[material.metallicRoughnessTexture.index], gltfWeakResources);\n if (texture) {\n matInfo.metallicRoughnessTexture = texture;\n }\n }\n }\n }\n\n\n if (material.s3mMaterial) {\n return new reshader.Material(matInfo);\n }\n // matInfo.alphaTest = 0.1;\n if (service.unlit || material.extensions && material.extensions['KHR_materials_unlit']) {\n // matInfo.ambientColor = [1, 1, 1];\n // matInfo['light0_diffuse'] = [0, 0, 0, 0];\n // matInfo['lightSpecular'] = [0, 0, 0];\n const material = new reshader.PhongMaterial(matInfo);\n material.unlit = service.unlit === undefined || !!service.unlit;\n return material;\n }\n\n let meshMaterial = new reshader.pbr.StandardMaterial(matInfo);\n if (shader === 'phong') {\n meshMaterial = reshader.PhongMaterial.convertFrom(meshMaterial);\n }\n const pbrMetallicRoughness = material.pbrMetallicRoughness;\n const extensions = pbrMetallicRoughness && pbrMetallicRoughness.baseColorTexture && pbrMetallicRoughness.baseColorTexture.extensions;\n if (extensions && extensions['KHR_texture_transform']) {\n meshMaterial.set('khr_offset', extensions['KHR_texture_transform'].offset || [0, 0]);\n meshMaterial.set('khr_rotation', extensions['KHR_texture_transform'].rotation || 0);\n meshMaterial.set('khr_scale', extensions['KHR_texture_transform'].scale || [1, 1]);\n }\n meshMaterial.doubleSided = !!(service.doubleSided || material.doubleSided);\n meshMaterial.once('complete', this._bindedListener);\n return meshMaterial;\n }\n\n _getTexture(texInfo, gltfWeakResources) {\n if (!texInfo) {\n return null;\n }\n // texInfo.image.color 表示图片被精简成了颜色\n const config = {\n type: texInfo.type ? getMaterialType(texInfo.type) : 'uint8',\n format: texInfo.format ? getMaterialFormat(texInfo.format) : 'rgba',\n flipY: !!texInfo.flipY\n };\n //gltf 2.0\n const image = texInfo.image;\n gltfWeakResources.push(image);\n if (image.array) {\n config.data = image.array;\n } else if (image.mipmap) {\n config.mipmap = image.mipmap;\n }\n if (!config.data && !config.mipmap) {\n return null;\n }\n config.width = image.width;\n config.height = image.height;\n // dxt 纹理要求高宽必须大于4,否则regl中检查会报错\n if (config.mipmap && (config.width < 4 || config.height < 4)) {\n return null;\n }\n const sampler = texInfo.sampler || texInfo.texture && texInfo.texture.sampler;\n if (sampler) {\n if (sampler.magFilter) config['mag'] = getTextureMagFilter(sampler.magFilter);\n if (sampler.minFilter) config['min'] = getTextureMinFilter(sampler.minFilter);\n if (sampler.wrapS) config['wrapS'] = getTextureWrap(sampler.wrapS);\n if (sampler.wrapT) config['wrapT'] = getTextureWrap(sampler.wrapT);\n }\n\n return new reshader.Texture2D(config, this._resLoader);\n\n }\n\n _onResourceLoad({ target }) {\n const id = target._nodeId;\n const loading = this._loading[id];\n loading.count--;\n if (!loading.count) {\n const mesh = loading.meshes;\n this._modelMeshes[id] = mesh;\n delete this._loading[id];\n const cb = mesh._callback;\n delete mesh._callback;\n cb(null, { mesh: loading.meshes, id });\n }\n }\n\n // _unproject(pcoord) {\n // const map = this.getMap();\n // const sr = this._spatialReference;\n // if (!maptalks.SpatialReference.equals(sr.toJSON(), map.getSpatialReference().toJSON())) {\n // return map.getProjection().project(sr.getProjection().unproject(pcoord));\n // } else {\n // return pcoord;\n // }\n // }\n\n _getProjScale(out) {\n const map = this.getMap();\n const zoomScale = 1 / map.getGLRes();\n // 高度坐标是米\n const heightScale = this._heightScale;\n out[0] = out[1] = zoomScale;\n out[2] = heightScale;\n return out;\n }\n\n _coordToPoint(c) {\n return this._layer._coordToPoint(c);\n }\n\n _pointToPrj(c) {\n const map = this.getMap();\n if (map.getGLZoom) {\n return map['_pointToPrj'](c, map.getGLZoom());\n } else {\n return map['_pointToPrjAtRes'](c, map.getGLRes());\n }\n }\n\n _prjToPoint(c) {\n const map = this.getMap();\n if (map.getGLZoom) {\n return map['_prjToPoint'](c, map.getGLZoom());\n } else {\n return map['_prjToPointAtRes'](c, map.getGLRes(), TEMP_POINT);\n }\n }\n\n _getUpAxisTransform(axis) {\n if (axis === 'Y') {\n return Y_TO_Z;\n } else if (axis === 'X') {\n return X_TO_Z;\n } else {\n return IDENTITY_MATRIX;\n }\n }\n\n pick(x, y, tolerance = 3) {\n const layer = this._layer;\n if (!layer || !layer.options['picking']) {\n return [];\n }\n if (!this.pickingFBO || !this.picking) {\n return [];\n }\n const result = [];\n const uniforms = this._getUniformValues();\n const b3dm = this._pickMesh(this.picking, uniforms, this._modelScene, x, y, tolerance);\n if (b3dm) {\n result.push(b3dm);\n }\n const i3dm = this._pickMesh(this.picking, uniforms, this._i3dmScene, x, y, tolerance);\n if (i3dm) {\n result.push(i3dm);\n }\n const pntsUniforms = this._getPntsUniforms();\n const pnts = this._pickMesh(this._pntsPicking, pntsUniforms, this._pntsScene, x, y, tolerance);\n if (pnts) {\n result.push(pnts);\n }\n return result;\n\n }\n\n _pickMesh(picking, uniforms, scene, x, y, tolerance) {\n if (!scene.getMeshes().length) {\n return null;\n }\n const layer = this._layer;\n const map = this.getMap();\n\n picking.render(scene.getMeshes().filter(m => !m.bloom), uniforms, true);\n let picked = {};\n if (picking.getRenderedMeshes().length) {\n picked = picking.pick(x, y, tolerance, uniforms, {\n viewMatrix: map.viewMatrix,\n projMatrix: map.projMatrix,\n returnPoint: layer.options['pickingPoint']\n });\n }\n const { meshId, pickingId, point, coordinate } = picked;\n const mesh = (meshId === 0 || meshId) && picking.getMeshAt(meshId);\n if (!mesh || !mesh.geometry) {\n //有可能mesh已经被回收,geometry不再存在\n return null;\n }\n const props = mesh.properties;\n if (point && point.length) {\n point[0] = Math.round(point[0] * 1E5) / 1E5;\n point[1] = Math.round(point[1] * 1E5) / 1E5;\n point[2] = Math.round(point[2] * 1E5) / 1E5;\n }\n const data = {\n batchId: pickingId\n };\n const services = layer.options['services'];\n const service = services && services[mesh.properties.serviceIndex];\n if (service && service['debug']) {\n data.debugInfo = props;\n }\n if (props && props.batchTable) {\n const { batchTable, batchTableBin, count } = props;\n const batchId = pickingId;\n\n for (const p in batchTable) {\n if (batchTable[p].byteOffset !== undefined) {\n data[p] = readBatchData(batchTable[p], batchTableBin, count, batchId);\n } else {\n data[p] = batchTable[p][batchId];\n }\n }\n }\n\n return {\n service: mesh.properties.serviceIndex,\n data,\n point,\n coordinate\n };\n }\n\n highlight(highlights) {\n this._highlighted = highlights;\n const renderer = this._layer.getRenderer();\n this._highlightTimestamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n cancelAllHighlight() {\n this._highlighted = null;\n const renderer = this._layer.getRenderer();\n this._highlightTimestamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n showOnly(showOnlys) {\n this._showOnlys = showOnlys;\n const renderer = this._layer.getRenderer();\n this._showOnlyTimeStamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n cancelShowOnly() {\n this._showOnlys = null;\n const renderer = this._layer.getRenderer();\n this._showOnlyTimeStamp = renderer.getFrameTimestamp();\n renderer.setToRedraw(true);\n }\n\n _getCurrentBatchIDs() {\n if (!this._paintedMeshes) {\n return [];\n }\n const ids = {};\n const batchIds = [];\n for (const p in this._paintedMeshes) {\n const meshes = this._paintedMeshes[p];\n if (meshes) {\n for (let i = 0; i < meshes.length; i++) {\n const mesh = meshes[i];\n const geometry = mesh && mesh.geometry;\n if (!mesh || !geometry) {\n continue;\n }\n const serviceIndex = mesh.properties.serviceIndex;\n if (!ids[serviceIndex]) {\n ids[serviceIndex] = new Set();\n }\n const batchData = geometry.properties.batchIdData;\n if (batchData) {\n for (let ii = 0; ii < batchData.length; ii++) {\n if (!ids[serviceIndex].has(batchData[ii])) {\n batchIds.push({\n id: batchData[ii],\n service: serviceIndex\n });\n ids[serviceIndex].add(batchData[ii]);\n }\n }\n }\n }\n }\n }\n return batchIds;\n }\n\n hasIBL() {\n const lightManager = this.getMap().getLightManager();\n const resource = lightManager && lightManager.getAmbientResource();\n return !!resource;\n }\n}\n\n// function createColorArray(attrs) {\n// const vertexCount = attrs[attributeSemantics['POSITION']].array.length;\n// const color = {\n// array: new Uint8Array(),\n\n// }\n// color.array.fill(255);\n// return color;\n// }\n\n// function meshCompare(a, b) {\n// let levelA = a.properties.level;\n// let levelB = b.properties.level;\n// if (!a.properties.isLeaf) {\n// levelA += 255;\n// }\n// if (!b.properties.isLeaf) {\n// levelB += 255;\n// }\n// if (levelA >= 255 && levelB >= 255) {\n// return levelB - levelA;\n// }\n// return levelA - levelB;\n// }\n\n// function meshCompare(a, b) {\n// return a.properties.node._cameraDistance - b.properties.node._cameraDistance;\n// }\n\nfunction generateFeatureIndiceIndex(featureIds, indices) {\n if (!indices) {\n return null;\n }\n const indiceIndex = new Map();\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i];\n const id = featureIds[idx];\n let index = indiceIndex.get(id);\n if (!index) {\n index = [];\n indiceIndex.set(id, index);\n }\n index.push(idx);\n }\n return indiceIndex;\n}\n\nfunction trimGLTFWeakResources(gltfWeakResources) {\n for (let i = 0; i < gltfWeakResources.length; i++) {\n if (gltfWeakResources[i]) {\n if (gltfWeakResources[i].array) {\n gltfWeakResources[i].array = null;\n }\n if (gltfWeakResources[i].mipmap) {\n gltfWeakResources[i].mipmap = null;\n }\n if (gltfWeakResources[i].indices) {\n gltfWeakResources[i].indices = null;\n }\n }\n }\n}\n\nfunction generateSphere(count, radius) {\n const angle = Math.PI * 2 / count;\n const vertices = [];\n const indices = [];\n for (let i = 0; i <= count; i++) {\n const posX = Math.cos(angle * i) * radius;\n const posY = Math.sin(angle * i) * radius;\n const posZ = 0;\n vertices[i * 3] = posX;\n vertices[i * 3 + 1] = posY;\n vertices[i * 3 + 2] = posZ;\n }\n for (let i = count; i <= count * 2; i++) {\n const posY = Math.cos(angle * i) * radius;\n const posZ = Math.sin(angle * i) * radius;\n const posX = 0;\n vertices[i * 3] = posX;\n vertices[i * 3 + 1] = posY;\n vertices[i * 3 + 2] = posZ;\n }\n for (let i = count * 2; i <= count * 3; i++) {\n const posX = Math.cos(angle * i) * radius;\n const posZ = Math.sin(angle * i) * radius;\n const posY = 0;\n vertices[i * 3] = posX;\n vertices[i * 3 + 1] = posY;\n vertices[i * 3 + 2] = posZ;\n }\n const len = vertices.length / 3 - 1;\n for (let i = 0; i < len; i++) {\n if (i === count - 1 || i === count * 2 -1) {\n continue;\n }\n indices[i * 2] = i;\n indices[i * 2 + 1] = i + 1;\n }\n vertices.push(0, 0, 0);\n vertices.push(radius, 0, 0);\n vertices.push(0, radius, 0);\n vertices.push(0, 0, radius);\n indices.push(len + 1, len + 2);\n indices.push(len + 1, len + 3);\n indices.push(len + 1, len + 4);\n return { vertices, indices };\n}\n","\n\nexport function fillNodepagesToCache(nodeCache, nodes) {\n if (!nodes) {\n return;\n }\n for (let i = 0; i < nodes.length; i++) {\n // 1.6版是id,1.7/1.8版是index\n const id = nodes[i].id || nodes[i].index;\n nodeCache[id] = nodes[i];\n }\n}\n","import { radianToCartesian3 } from '../../common/Transform';\nimport { toRadian } from '../../common/Util';\nimport { vec3, mat3, mat4 } from 'gl-matrix';\nimport { fillNodepagesToCache } from './Util';\n\nconst TEMP_VEC3 = [];\n\nexport default class I3SNode {\n constructor(url, rootIdx, nodeCache, layer, fnFetchNodepages) {\n this._layer = layer;\n this._url = url;\n this._rootIdx = rootIdx;\n this._fnFetchNodepages = fnFetchNodepages;\n this._version = nodeCache.version;\n if (url.indexOf('i3s:tileset:') < 0) {\n if (this._version <= 1.6) {\n this._index = 'root';\n } else {\n this._index = 0;\n }\n nodeCache.version = this._version;\n } else {\n this._index = url.substring('i3s:tileset:'.length);\n if (this._version > 1.6) {\n this._index = parseInt(this._index);\n }\n }\n this._url = url;\n this._nodeCache = nodeCache;\n }\n\n load() {\n const nodeCache = this._nodeCache;\n const baseUrl = nodeCache.layerScene.baseUrl;\n\n if (this._version <= 1.6) {\n if (nodeCache[this._index] && nodeCache[this._index].lodSelection) {\n this._nodeJSON = nodeCache[this._index];\n return this._loadNode();\n }\n return new Promise((resolve) => {\n let url = baseUrl + '/nodes/' + this._index;\n if (nodeCache.layerScene.eslpk) {\n url += '/3dNodeIndexDocument.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n this._nodeJSON = nodeCache[this._index];\n resolve(this._loadNode());\n });\n });\n } else if (this._version >= 1.7) {\n if (nodeCache[this._index]) {\n this._nodeJSON = nodeCache[this._index];\n return this._loadNode();\n }\n const nodepage = Math.floor(this._index / nodeCache.nodesPerPage);\n //root node\n\n return new Promise((resolve) => {\n let url = baseUrl + '/nodepages/' + nodepage;\n if (nodeCache.layerScene.eslpk) {\n url += '.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n this._nodeJSON = nodeCache[this._index];\n resolve(this._loadNode());\n });\n });\n } else {\n // leaf nodes\n return null;\n }\n }\n\n getTileset() {\n return this._tileset;\n }\n\n getChildrenURL() {\n return this._childrenURL;\n }\n\n _loadNode() {\n const nodeCache = this._nodeCache;\n const baseUrl = nodeCache.layerScene.baseUrl;\n const children = this._nodeJSON.children;\n const promises = [];\n const pendingReqs = {};\n if (children) {\n for (let i = 0; i < children.length; i++) {\n if (this._version <= 1.6) {\n const id = children[i].id;\n if (nodeCache[id]) {\n continue;\n }\n const childPageIndex = id;\n if (!pendingReqs[childPageIndex]) {\n pendingReqs[childPageIndex] = new Promise((resolve) => {\n let url = baseUrl + '/nodes/' + childPageIndex;\n if (nodeCache.layerScene.eslpk) {\n url += '/3dNodeIndexDocument.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n resolve();\n });\n });\n promises.push(pendingReqs[childPageIndex]);\n }\n } else {\n const id = children[i];\n if (nodeCache[id]) {\n continue;\n }\n const childPageIndex = Math.floor(id / nodeCache.nodesPerPage);\n if (!pendingReqs[childPageIndex]) {\n pendingReqs[childPageIndex] = new Promise((resolve) => {\n let url = baseUrl + '/nodepages/' + childPageIndex;\n if (nodeCache.layerScene.eslpk) {\n url += '.json';\n }\n this._fnFetchNodepages(this._rootIdx, url, () => {\n resolve();\n });\n });\n promises.push(pendingReqs[childPageIndex]);\n }\n }\n\n }\n }\n if (promises.length) {\n return Promise.all(promises).then(() => {\n return this._loadContent();\n });\n } else {\n return this._loadContent();\n }\n }\n\n _loadContent() {\n return Promise.resolve(this._createTileset());\n }\n\n _fillCache(nodes) {\n fillNodepagesToCache(this._nodeCache, nodes);\n }\n\n _createTileset() {\n const inPlaceTileset = {\n asset: {\n i3s: true,\n version: \"1.0\",\n gltfUpAxis: 'Z'\n },\n geometricError: Number.MAX_VALUE,\n root: this._convertNode(this._nodeJSON, true),\n };\n return inPlaceTileset;\n }\n\n _convertNode(nodeJSON) {\n const renderer = this._layer.getRenderer();\n const projection = this._nodeCache.projection;\n const is4326 = !projection || projection && projection.wkid === 4326;\n const version = this._version;\n const nodeCache = this._nodeCache;\n const nodeData = nodeJSON;\n const obb = nodeData.obb;\n const mbs = nodeData.mbs;\n\n const boundingVolume = {};\n let position;\n\n if (mbs) {\n position = vec3.set([], mbs[0], mbs[1], mbs[2]);\n if (!is4326) {\n position = renderer._tileCoordToLngLat(position, position);\n }\n position = _WGS84ToCartesian([], position[0], position[1], position[2]); // cartesian center of box\n boundingVolume.sphere = [\n ...position, // cartesian center of sphere\n mbs[3] // radius of sphere\n ];\n } else if (obb) {\n position = vec3.set([], obb.center[0], obb.center[1], obb.center[2]); // cartesian center of box;\n if (!is4326) {\n position = renderer._tileCoordToLngLat(position, position);\n }\n position = _WGS84ToCartesian([], position[0], position[1], position[2]); // cartesian center of box;\n const box = fromCenterHalfSizeQuaternion(\n position, // cartesian center of box\n obb.halfSize,\n obb.quaternion\n );\n // boundingVolume.box = box;\n // 计算box的半径\n const x = box[3] + box[6] + box[9];\n const y = box[4] + box[7] + box[10];\n const z = box[5] + box[8] + box[11];\n vec3.set(TEMP_VEC3, x, y, z);\n const radius = vec3.len(TEMP_VEC3);\n boundingVolume.sphere = [\n ...position,\n radius\n ];\n }\n\n // compute the geometric error\n let metersPerPixel = Infinity;\n\n let span = 0;\n if (nodeData.mbs) {\n span = nodeData.mbs[3];\n } else if (nodeData.obb) {\n span = Math.max(\n Math.max(nodeData.obb.halfSize[0], nodeData.obb.halfSize[1]),\n nodeData.obb.halfSize[2]\n );\n }\n\n // get the meters/pixel density required to pop the next LOD\n if (nodeData.lodThreshold !== undefined) {\n if (\n nodeCache.lodSelectionMetricType ===\n \"maxScreenThresholdSQ\"\n ) {\n const maxScreenThreshold =\n Math.sqrt(nodeData.lodThreshold) / (Math.PI * 0.25);\n metersPerPixel = span / maxScreenThreshold;\n } else {\n console.error(\"Unsupported lodSelectionMetricType in Layer\");\n }\n } else if (nodeData.lodSelection !== undefined) {\n for (\n let lodIndex = 0;\n lodIndex < nodeData.lodSelection.length;\n lodIndex++\n ) {\n if (\n nodeData.lodSelection[lodIndex].metricType === \"maxScreenThreshold\"\n ) {\n metersPerPixel = span / nodeData.lodSelection[lodIndex].maxError;\n }\n }\n }\n\n if (metersPerPixel === Infinity || isNaN(metersPerPixel)) {\n metersPerPixel = 100000;\n }\n\n // calculate the length of 16 pixels in order to trigger the screen space error\n const geometricError = metersPerPixel * 16;\n\n const globalTransforms = mat4.identity([]);\n // globalTransforms[12] = position[0];\n // globalTransforms[13] = position[1];\n // globalTransforms[14] = position[2];\n\n const localTransforms = globalTransforms;\n\n const children = nodeData.children;\n let childrenDefinition;\n // get children definition\n if (children) {\n childrenDefinition = [];\n const nodeCache = this._nodeCache;\n for (let i = 0; i < children.length; i++) {\n const childIndex = version <= 1.6 ? children[i].id : children[i];\n if (nodeCache[childIndex]) {\n childrenDefinition.push(\n this._convertNode(nodeCache[childIndex])\n );\n } else {\n childrenDefinition = null;\n break;\n }\n }\n }\n\n\n // Create a tile set\n const inPlaceTileDefinition = {\n refine: \"REPLACE\",\n boundingVolume: boundingVolume,\n transform: localTransforms,\n geometricError: geometricError,\n };\n\n if (version <= 1.6) {\n if (!nodeJSON.lodSelection) {\n // 1.6的node即是个tileset,又是个mesh\n // 因为只在3DNodeDocumentIndex中存了children信息\n // 载入3DNodeDocumentIndex之前,是个tileset,载入后,就成为了mesh\n // 如果没有lodSelection,说明是个tileset\n inPlaceTileDefinition.content = {\n uri: 'i3s:tileset:' + (nodeJSON.id || nodeJSON.index),\n };\n } else if (nodeJSON.geometryData) {\n inPlaceTileDefinition.content = {\n uri: 'i3s:mesh:' + (nodeJSON.id || nodeJSON.index),\n };\n }\n } else {\n if (children && children.length && !childrenDefinition) {\n // a child\n inPlaceTileDefinition.content = {\n uri: 'i3s:tileset:' + (nodeJSON.id || nodeJSON.index),\n };\n } else if (nodeData.mesh) {\n inPlaceTileDefinition.content = {\n uri: 'i3s:mesh:' + (nodeJSON.id || nodeJSON.index),\n };\n }\n }\n\n if (childrenDefinition && childrenDefinition.length) {\n inPlaceTileDefinition.children = childrenDefinition;\n }\n\n return inPlaceTileDefinition;\n }\n\n getJSON() {\n return this._nodeJSON;\n }\n}\n\n\n\nfunction _WGS84ToCartesian(out, long, lat, height) {\n return radianToCartesian3(out, toRadian(long), toRadian(lat), height);\n}\n\nfunction fromCenterHalfSizeQuaternion(center ,halfSize, quaternion) {\n const directionsMatrix = mat3.fromQuat([], quaternion);\n directionsMatrix[0] = directionsMatrix[0] * halfSize[0];\n directionsMatrix[1] = directionsMatrix[1] * halfSize[0];\n directionsMatrix[2] = directionsMatrix[2] * halfSize[0];\n directionsMatrix[3] = directionsMatrix[3] * halfSize[1];\n directionsMatrix[4] = directionsMatrix[4] * halfSize[1];\n directionsMatrix[5] = directionsMatrix[5] * halfSize[1];\n directionsMatrix[6] = directionsMatrix[6] * halfSize[2];\n directionsMatrix[7] = directionsMatrix[7] * halfSize[2];\n directionsMatrix[8] = directionsMatrix[8] * halfSize[2];\n return [\n ...center,\n ...directionsMatrix\n ];\n}\n","import transcoders from '@maptalks/gl/dist/transcoders.js';\nimport I3SNode from './I3SNode';\n// import I3SMesh from './I3SMesh';\nimport { isObject } from '../../common/Util';\nimport { mat4 } from '@maptalks/gl';\n\nconst supportKTX2 = !!transcoders.ktx2;\nconst IDENTITY_MAT4 = mat4.identity([]);\n\nconst supportWASM = (() => {\n try {\n if (typeof WebAssembly === \"object\"\n && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));\n if (module instanceof WebAssembly.Module)\n return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n /* eslint-disable no-empty */\n } catch (e) {\n }\n /* eslint-enable no-empty */\n return false;\n})();\n\nexport function parseI3SJSON(layer, json, rootIdx, service, url, nodeCache, fnFetchNodepages) {\n if (!nodeCache.layerScene) {\n // the scene layer\n nodeCache.layerScene = json;\n nodeCache.nodesPerPage = json.nodePages && json.nodePages.nodesPerPage || 64;\n nodeCache.lodSelectionMetricType = json.nodePages && json.nodePages.lodSelectionMetricType;\n let baseUrl = url;\n nodeCache.layerScene.eslpk = baseUrl.indexOf('3dSceneLayer.json') >= 0;\n const isUrlConfigFile = baseUrl.endsWith('.json');\n if (isUrlConfigFile) {\n const lastSlash = url.lastIndexOf('/');\n if (lastSlash < 0) {\n baseUrl = './';\n } else {\n baseUrl = url.substring(0, lastSlash);\n }\n }\n nodeCache.layerScene.baseUrl = regulateURL(baseUrl);\n }\n const node = new I3SNode(url, rootIdx, nodeCache, layer, fnFetchNodepages);\n return node.load();\n}\n\nexport function isI3STileset(url) {\n return url.indexOf('i3s:tileset') >= 0;\n}\n\nexport function isI3SMesh(url) {\n return url.indexOf('i3s:mesh') >= 0;\n}\n\nconst prefixIndex = 'i3s:mesh:'.length\nexport function getI3SNodeIndex(version, url) {\n const id = url.substring(prefixIndex);\n if (version >= 1.7) {\n return parseInt(id);\n } else {\n return id;\n }\n\n}\n\nexport function getI3SNodeInfo(url, nodeCache, regl, enableDraco, forceDraco) {\n const isESLPK = nodeCache.layerScene.eslpk;\n const nodeIndex = getI3SNodeIndex(nodeCache.version, url);\n const node = nodeCache[nodeIndex];\n const baseUrl = nodeCache.layerScene.baseUrl;\n const meshes = [];\n let hasCompression = false;\n const transform = IDENTITY_MAT4;\n let geometry, material;\n if (nodeCache.version <= 1.6) {\n // 1.6\n if (!node.geometryData) {\n return null;\n }\n const len = node.geometryData.length;\n if (!len) {\n return null;\n }\n let geoUrl = baseUrl + `/nodes/${node.id}/` + node.geometryData[len - 1].href;\n if (isESLPK) {\n geoUrl += '.bin';\n }\n const meshInfo = { geometry: { url: geoUrl, info: nodeCache.layerScene.store.defaultGeometrySchema } };\n let textureUrl = node.textureData && node.textureData[0] && node.textureData[0].href;\n if (textureUrl) {\n const mimeType = nodeCache.layerScene.store.textureEncoding[0];\n let format;\n if (mimeType === 'image/jpeg') {\n format = 'jpg';\n } else {\n format = 'png';\n }\n if (isESLPK) {\n textureUrl += '.' + format;\n }\n const matInfo = {\n pbrMetallicRoughness: {\n baseColorTexture: {\n url: baseUrl + `/nodes/${node.id}/` + textureUrl,\n factor: 1,\n format,\n mimeType\n },\n metallicFactor: 0.0,\n }\n }\n meshInfo.material = matInfo;\n }\n meshes.push(meshInfo);\n } else {\n // 1.7+\n geometry = node.mesh.geometry;\n material = node.mesh.material;\n const geoDefinitions = nodeCache.layerScene.geometryDefinitions;\n //read texture encode array\n const textureEncoding = (nodeCache.layerScene.store || {}).textureEncoding;\n const geoDef = geoDefinitions[geometry.definition];\n const { geometryBuffers } = geoDef;\n // geometryBuffers[1] is the draco version\n hasCompression = enableDraco && geometryBuffers.length === 2;\n const geometryInfo = transcoders['draco'] && hasCompression ? geometryBuffers[1] : geometryBuffers[0];\n const index = transcoders['draco'] && hasCompression ? 1 : 0;\n let geoUrl = baseUrl + `/nodes/${geometry.resource}/geometries/` + index;\n if (isESLPK) {\n geoUrl += '.bin';\n }\n const meshInfo = { geometry: { url: geoUrl, info: geometryInfo } };\n if (forceDraco && supportWASM && hasCompression && !transcoders['draco']) {\n throw new Error('Must import @maptalks/transcoder.draco to load i3s draco compressed geometry');\n }\n\n const materialDefinitions = nodeCache.layerScene.materialDefinitions;\n const textureSetDefinitions = nodeCache.layerScene.textureSetDefinitions;\n let materialDef = 0;\n if (material) {\n materialDef = materialDefinitions[material.definition];\n }\n let materialInfo;\n if (materialDefinitions) {\n const resource = material.resource;\n materialInfo = parseMaterial(textureEncoding, materialDef, textureSetDefinitions, baseUrl, resource, regl, nodeCache.layerScene.eslpk);\n } else {\n materialInfo = {\n pbrMetallicRoughness: {\n metallicFactor: 0.0,\n }\n };\n }\n meshInfo.material = materialInfo;\n meshes.push(meshInfo);\n }\n\n\n\n return {\n dracoCompression: hasCompression,\n meshes,\n nodeIndex,\n center: node.obb && node.obb.center || node.mbs && [node.mbs[0], node.mbs[1], node.mbs[2]],\n transform\n };\n}\n\nfunction parseMaterial(textureEncoding, materialDefinition, textureSetDefinitions, baseUrl, nodeIndex, regl, isESLPK) {\n const matInfo = JSON.parse(JSON.stringify(materialDefinition));\n\n resolveTextures(textureEncoding, matInfo, textureSetDefinitions, baseUrl, nodeIndex, regl, isESLPK);\n return matInfo;\n}\n\nfunction resolveTextures(textureEncoding, matInfo, textureSetDefinitions, baseUrl, resource, regl, isESLPK) {\n for (const p in matInfo) {\n // is a texture\n if (matInfo[p] && matInfo[p].textureSetDefinitionId >= 0) {\n const texDef = textureSetDefinitions[matInfo[p].textureSetDefinitionId];\n const mimeType = 'images/' + texDef.formats[0].format;\n const format = getSupportedTexture(texDef.formats, regl, textureEncoding);\n const texture = {\n url: baseUrl + `/nodes/${resource}/textures/${format.name}`,\n factor: matInfo[p].factor === undefined ? 1 : matInfo[p].factor,\n format: format.format,\n mimeType\n };\n if (isESLPK) {\n let ext = '';\n switch (format.format) {\n case 'dds':\n ext = 'bin.dds';\n break;\n case 'jpg':\n case 'png':\n ext = format.format;\n break;\n }\n texture.url += '.' + ext;\n }\n matInfo[p] = texture;\n } else if (isObject(matInfo[p])) {\n resolveTextures(textureEncoding, matInfo[p], textureSetDefinitions, baseUrl, resource, regl, isESLPK);\n }\n }\n}\n\nconst textureEnCodingMap = {\n \"image/jpeg\": 'jpg',\n \"image/jpg\": 'jpg',\n \"image/png\": 'jpg',\n \"image/vnd-ms.dds\": \"dds\",\n \"image/ktx\": 'jpg'\n};\n\nfunction getSupportedTexture(formats, regl, textureEncoding) {\n if (textureEncoding && textureEncoding.length) {\n const textureEncode = textureEncoding[textureEncoding.length - 1];\n const textureFormat = textureEnCodingMap[textureEncode];\n if (!textureFormat) {\n console.error(`i3s not find texture format type from:`, textureEnCodingMap, 'current textureEncoding:', textureEncode);\n } else {\n for (let i = 0, len = formats.length; i < len; i++) {\n const format = formats[i].format;\n if (format === textureFormat) {\n return formats[i];\n }\n }\n }\n\n }\n // for (let i = formats.length - 1; i >= 0; i--) {\n for (let i = 0; i <= formats.length; i++) {\n const format = formats[i].format;\n if (format === 'dds' && regl.hasExtension('WEBGL_compressed_texture_s3tc')) {\n //only support dxt1 and dtx5 compression\n return formats[i];\n } else if (format === 'jpg' || format === 'png') {\n // png or jpg\n return formats[i];\n } else if (format === 'ktx2' && supportKTX2) {\n return formats[i];\n } else if (format === 'ktx-etc2') {\n // not supported yet\n }\n }\n return null;\n}\n\nfunction regulateURL(url) {\n return url.split('?')[0];\n}\n","import * as maptalks from 'maptalks';\nimport { reshader, CanvasCompatible } from '@maptalks/gl';\nimport { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { MaskRendererMixin } from '@maptalks/gl';\nimport Geo3DTilesWorkerConnection from '../Geo3DTilesWorkerConnection';\nimport LRUCache from './LRUCache';\nimport TileMeshPainter from './TileMeshPainter';\nimport { readBatchArray } from '../../common/TileHelper';\nimport { extend, isBase64, base64URLToArrayBuffer, pushIn } from '../../common/Util.js';\nimport { isRelativeURL, prepareFetchOptions } from '../../common/UrlUtil';\n// import { CANDIDATE_MAX_ERROR } from '../../common/Constants.js';\nimport { parseI3SJSON, isI3STileset, isI3SMesh, getI3SNodeInfo } from '../i3s/I3SHelper';\nimport { fillNodepagesToCache } from '../i3s/Util';\nimport I3SNode from '../i3s/I3SNode';\n\nconst { Ajax } = getGLTFLoaderBundle();\n\nconst COORD_IN = new maptalks.Coordinate(0, 0);\nconst COORD_OUT = new maptalks.Coordinate(0, 0);\n\nconst REPORTED_ERRORS = new Set();\n\nconst EMPTY_ARRAY = [];\n\nconst GlobalTieCache = new LRUCache((maptalks.Browser.mobile ? 32 : 1024) * 1024 * 1024, (tile => {\n const renderer = tile.renderer;\n delete tile.renderer;\n renderer.deleteTile(tile);\n}));\nlet TileCacheRefCount = 0;\n\n\n\nexport default class Geo3DTilesRenderer extends MaskRendererMixin(CanvasCompatible(maptalks.renderer.LayerAbstractRenderer)) {\n\n constructor(layer) {\n super(layer);\n const max = layer.options['maxGPUMemory'] * 1024 * 1024;\n if (max > GlobalTieCache.max) {\n GlobalTieCache.setMaxSize(max);\n }\n this.tileCache = GlobalTieCache;\n TileCacheRefCount++;\n this.tilesLoading = {};\n this._requests = {};\n this._modelQueue = [];\n this._fnFetchNodepages = (...args) => {\n return this._fetchI3DNodepages.call(this, ...args);\n };\n }\n\n getTilesInfo() {\n return this.painter.getTilesInfo();\n }\n\n getAnalysisMeshes() {\n if (!this.painter) {\n return EMPTY_ARRAY;\n }\n const paintedMeshes = this.painter.getPaintedMeshes();\n if (!paintedMeshes) {\n return EMPTY_ARRAY;\n }\n\n const meshes = [];\n const { b3dmMeshes, pntsMeshes, i3dmMeshes } = paintedMeshes;\n if (b3dmMeshes.length) {\n pushIn(meshes, b3dmMeshes.filter(mesh => !!(mesh && mesh.geometry)));\n }\n if (pntsMeshes.length) {\n pushIn(meshes, pntsMeshes.filter(mesh => !!(mesh && mesh.geometry)));\n }\n if (i3dmMeshes.length) {\n pushIn(meshes, i3dmMeshes.filter(mesh => !!(mesh && mesh.geometry)));\n }\n return meshes;\n }\n\n needToRedraw() {\n // return true;\n const map = this.getMap();\n if (map.isInteracting()) {\n return true;\n }\n if (this._modelQueue.length) {\n return true;\n }\n return super.needToRedraw();\n }\n\n getFrameTimestamp() {\n return this._timestamp;\n }\n\n drawOnInteracting(event, timestamp, parentContext) {\n this.draw(timestamp, parentContext);\n }\n\n draw(timestamp, parentContext) {\n this._timestamp = timestamp;\n const mask2DExtent = this.prepareCanvas();\n if (mask2DExtent) {\n if (!mask2DExtent.intersects(this.canvasExtent2D)) {\n this.completeRender();\n return;\n }\n }\n const { root, tiles } = this.layer.getTiles();\n const count = tiles.length;\n if (!tiles || !count) {\n this.completeRender();\n return;\n }\n this.painter.prepareRender(parentContext);\n this._consumeI3SQueue();\n this._consumeModelQueue(parentContext);\n const { selectedTiles, requests } = this._selectTiles(root, tiles);\n\n if (requests.length) {\n this.loadTiles(requests);\n }\n this._drawTiles(selectedTiles, parentContext);\n this._abortUnusedTiles();\n if (!requests.length) {\n this.completeRender();\n }\n }\n // 遍历candidate瓦片,检查哪些可以获取到mesh,哪些需要去构造网络请求\n _selectTiles(root, tiles) {\n let requests = [];\n this._markTiles();\n let preLoadingCount = 0;\n const loadingLimit = this._getLoadLimit();\n\n const checked = {};\n let hit = false, loading = false;\n for (let i = 0; i < tiles.length; i++) {\n const tile = tiles[i];\n const node = tile.node;\n if (checked[node.id]) {\n continue;\n }\n checked[node.id] = 1;\n let tileLoading = false;\n const cached = this.getCachedTile(node.id);\n if (this._isLoadingTile(node.id)) {\n preLoadingCount++;\n tileLoading = loading = true;\n this.tilesLoading[node.id].current = true;\n } else if (cached) {\n if (this.getTileOpacity(cached) < 1) {\n tileLoading = loading = true;\n }\n // 剔除掉error相差过大的父级瓦片。否则会在有些情况下,覆盖范围很大的父级瓦片会绘制在场景中\n // 是在小丸子公司,由飞渡生成的模型中发现了该问题\n // if (!tile.node._error || rootNode.isS3M || !tile.node.children || tile.node._error <= CANDIDATE_MAX_ERROR) {\n\n // }\n hit = true;\n tile.selected = true;\n tile.data = cached;\n } else if (!this.painter.has(node)) {\n tileLoading = loading = true;\n if (this.tileCache.currentSize < this.tileCache.max) {\n requests.push(node);\n }\n }\n if (!tileLoading) {\n continue;\n }\n //background tiles\n const parentTile = this._selectParentTile(tile);\n if (!parentTile) {\n const children = this._selectChildTile(tile);\n if (children.length) hit = true;\n } else {\n hit = true;\n }\n }\n\n const selectedTiles = hit ? this._sortTiles(root) : [];\n\n if (requests.length > 1) {\n requests.sort(compareRequests);\n if (loadingLimit) {\n const count = loadingLimit - preLoadingCount;\n if (count > 0) {\n requests = requests.slice(0, count);\n } else {\n requests = [];\n }\n }\n }\n\n return {\n loading,\n requests,\n selectedTiles\n };\n }\n\n //based on Cesium's traverseAndSelect in Cesium3DTilesetTraversal.js\n _sortTiles(root) {\n const selectedTiles = [];\n let lastAncestor;\n let branchRootId;\n const stack = [root],\n parentStack = [];\n while (stack.length > 0 || parentStack.length > 0) {\n if (parentStack.length > 0) {\n const waitingTile = parentStack[parentStack.length - 1];\n if (waitingTile._stackLength === stack.length) {\n parentStack.pop();\n if (waitingTile === lastAncestor) {\n waitingTile.leave = true;\n }\n waitingTile.branchRootId = branchRootId;\n selectedTiles.push(waitingTile);\n if (parentStack.length === 0) {\n branchRootId = null;\n }\n continue;\n }\n }\n const tile = stack.pop();\n const children = tile.children;\n if (tile.selected) {\n if (tile.node.refine === 'add') {\n tile.leave = true;\n tile.selectionDepth = parentStack.length;\n tile.branchRootId = branchRootId;\n selectedTiles.push(tile);\n } else {\n tile.selectionDepth = parentStack.length;\n\n lastAncestor = tile;\n\n if (children.length === 0) {\n tile.leave = true;\n tile.branchRootId = branchRootId;\n selectedTiles.push(tile);\n continue;\n }\n if (parentStack.length === 0) {\n branchRootId = tile.node.id;\n }\n parentStack.push(tile);\n tile._stackLength = stack.length;\n }\n }\n // if (children.length > 1) {\n // children.sort(compareTile);\n // }\n for (let i = 0; i < children.length; i++) {\n stack.push(children[i]);\n }\n }\n\n return selectedTiles;\n }\n\n _selectParentTile(node) {\n if (!node.parent) {\n return null;\n }\n let treeNode = node.parent;\n while (treeNode && treeNode.level >= 0) {\n const id = treeNode.node.id;\n const cached = this.tileCache.has(id);\n if (cached) {\n treeNode.selected = true;\n treeNode.data = this.tileCache.get(id);\n return treeNode;\n }\n treeNode = treeNode.parent;\n }\n return null;\n }\n\n _selectChildTile(tile) {\n const result = [];\n if (!tile.node.children || !tile.node.children.length) {\n return result;\n }\n const maxLevel = tile._level + 1;\n const queue = [tile.node];\n while (queue.length > 0) {\n const node = queue.pop();\n const children = node.children;\n for (let i = 0, l = children.length; i < l; i++) {\n if ((!children[i].content || !children[i].content.url) &&\n children[i].children && children[i].children.length) {\n queue.push(children[i]);\n continue;\n }\n const id = children[i].id;\n const cached = this.tileCache.has(id);\n if (cached) {\n const child = this.layer._createCandidate(children[i], tile);\n child.selected = true;\n child.data = this.tileCache.get(id);\n tile.children.push(child);\n result.push(child);\n } else if (children[i]._level <= maxLevel) {\n queue.push(children[i]);\n }\n }\n\n }\n return result;\n }\n\n _drawTiles(tiles, parentContext) {\n\n this.tileCache.markAll(this, false);\n const boxMeshes = [];\n for (let i = 0, l = tiles.length; i < l; i++) {\n const tileData = tiles[i].data;\n tileData.current = true;\n tileData.renderer = this;\n this.tileCache.add(tiles[i].node.id, tileData);\n const node = tileData.node;\n const service = this.layer._getNodeService(node._rootIdx);\n if (node._boxMesh && service['debug'] && !Array.isArray(service['debug'])) {\n boxMeshes.push(node._boxMesh);\n }\n }\n\n const services = this.layer.options.services;\n for (let i = 0; i < services.length; i++) {\n const service = services[i];\n const debugNodes = Array.isArray(service['debug']) && service['debug'];\n if (debugNodes) {\n for (const nodeId of debugNodes) {\n const nodeBox = this.layer._getNodeBox(nodeId);\n const node = nodeBox && nodeBox.node;\n if (!node || !node._boxMesh) {\n continue;\n }\n boxMeshes.push(node._boxMesh);\n }\n }\n }\n\n const context = { tiles };\n this.onDrawTileStart(context);\n const count = this.painter.paint(tiles, boxMeshes, parentContext);\n this.layer.fire('drawtiles', { count });\n\n this.onDrawTileEnd(context);\n if (count) {\n this.layer.fire('canvasisdirty', { renderCount: count });\n }\n // 改为绘制结束后,再 shrink cache,以免当前帧需要绘制的瓦片被delete掉, maptalks/issues#766\n this.tileCache.shrink();\n }\n\n onDrawTileStart() { }\n onDrawTileEnd() { }\n\n loadTiles(queue) {\n for (let i = 0, l = queue.length; i < l; i++) {\n const node = queue[i];\n // tile image's loading may not be async\n this.tilesLoading[node.id] = {\n current: true,\n node\n };\n this.loadTile(node);\n }\n }\n\n loadTile(node) {\n let url = node.content.url;\n if (isBase64(url)) {\n const binary = base64URLToArrayBuffer(url);\n this._loadTileContent(url, binary, node);\n return null;\n\n }\n\n if (isI3STileset(url)) {\n const rootIdx = node._rootIdx;\n const nodeCache = this._i3sNodeCache[rootIdx];\n const i3sNode = new I3SNode(url, rootIdx, nodeCache, this.layer, this._fnFetchNodepages);\n return i3sNode.load().then(tileset => {\n this.onTilesetLoad(tileset, node, url);\n });\n }\n\n if (node && isRelativeURL(url) && !isI3SMesh(url)) {\n url = node.baseUrl + url;\n }\n this._loadTileContent(url, null, node);\n return null;\n }\n\n _loadTileContent(url, arraybuffer, tile) {\n let supportedFormats = this._supportedFormats;\n if (!supportedFormats) {\n supportedFormats = reshader.Util.getSupportedFormats(this.gl || this.device && this.device.wgpu);\n this._supportedFormats = supportedFormats;\n }\n\n const service = this.layer._getNodeService(tile._rootIdx);\n if (service.isSuperMapiServer) {\n url = encodeSuperMapURI(url, tile.baseUrl);\n }\n const requestUrl = this.layer.getTileUrl(url, this.layer._roots[tile._rootIdx]);\n const params = { url: requestUrl, arraybuffer, rootIdx: tile._rootIdx, upAxis: tile._upAxis, transform: tile.matrix, supportedFormats };\n\n if (isI3SMesh(url)) {\n const nodeCache = this._i3sNodeCache[tile._rootIdx];\n params.projection = nodeCache.projection;\n params.i3sInfo = getI3SNodeInfo(url, nodeCache, this.regl || this.device, this.layer.options['enableI3SCompressedGeometry'], this.layer.options['forceI3SCompressedGeometry']);\n if (!params.i3sInfo) {\n this.onTileError({ status: 404 }, tile, url);\n return;\n }\n }\n\n // if (url.substring(url.length - 4, url.length) === 'b3dm') {\n // url = 'http://localhost/3dtiles/debug/xx/tile0/3/2/6.b3dm';\n // }\n params.service = extend({}, service);\n if (service.offset) {\n delete params.service.offset;\n }\n // fetchOptions定义在service中\n params.referrer = window && window.location.href;\n this.workerConn.loadTile(this.layer.getId(), params, (err, data) => {\n if (err) {\n this.onTileError(err, tile, url);\n return;\n }\n const { magic } = data;\n if (magic === 'b3dm' || magic === 'pnts' || magic === 'i3dm' || magic === 'cmpt' || magic === 'gltf') {\n this._modelQueue.push({ data, tile });\n } else {\n this.onTilesetLoad(data, tile, url);\n }\n\n // if (magic === 'b3dm') {\n // // this.painter.createB3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n // // this._onMeshCreated(data, tile, err, mesh);\n // // });\n // } else if (magic === 'pnts') {\n // this.painter.createPntsMesh(data, tile.id, tile, (err, { mesh }) => {\n // this._onMeshCreated(data, tile, err, mesh);\n // });\n // } else if (magic === 'i3dm') {\n // this.painter.createI3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n // this._onMeshCreated(data, tile, err, mesh);\n // });\n // } else if (magic === 'cmpt') {\n // this.painter.createCMPTMesh(data, tile.id, tile, (err, { mesh }) => {\n // this._onMeshCreated(data, tile, err, mesh);\n // });\n // }else {\n // this.onTilesetLoad(data, tile, url);\n // }\n });\n }\n\n _createBoxMesh(node) {\n if (!this.painter) {\n return;\n }\n this.painter._createBoxMesh(node);\n }\n\n _deleteBoxMesh(node) {\n if (!this.painter) {\n return;\n }\n this.painter._deleteBoxMesh(node);\n }\n\n _consumeModelQueue() {\n const map = this.getMap();\n const limit = this.layer.options['meshLimitPerFrame'];\n let count = 0;\n while (this._modelQueue.length && (count < limit || !map.isInteracting())) {\n const { data, tile } = this._modelQueue.shift();\n const { magic } = data;\n if (magic === 'b3dm' || magic === 'gltf') {\n this.painter.createB3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n } else if (magic === 'pnts') {\n this.painter.createPntsMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n } else if (magic === 'i3dm') {\n this.painter.createI3DMMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n } else if (magic === 'cmpt') {\n this.painter.createCMPTMesh(data, tile.id, tile, (err, { mesh }) => {\n this._onMeshCreated(data, tile, err, mesh);\n });\n }\n count++;\n }\n }\n\n _onMeshCreated(data, tile, err, mesh) {\n this._enableLayerOpacity(mesh);\n if (err) {\n this.onTileError(err, tile);\n } else {\n const size = this._getMeshSize(mesh);\n tile.memorySize = size;\n this.onTileLoad(data, tile);\n }\n }\n\n _enableLayerOpacity(mesh) {\n if (Array.isArray(mesh)) {\n for (let i = 0; i < mesh.length; i++) {\n if (mesh[i]) {\n if (Array.isArray(mesh[i])) {\n this._enableLayerOpacity(mesh[i]);\n } else {\n const defines = mesh[i].defines || {};\n defines['HAS_LAYER_OPACITY'] = 1;\n mesh[i].setDefines(defines);\n }\n }\n }\n } else if (mesh) {\n if (Array.isArray(mesh)) {\n this._enableLayerOpacity(mesh);\n } else {\n const defines = mesh.defines || {};\n defines['HAS_LAYER_OPACITY'] = 1;\n mesh.setDefines(defines);\n }\n }\n }\n\n _getMeshSize(mesh) {\n let size = 0;\n if (Array.isArray(mesh)) {\n for (let i = 0; i < mesh.length; i++) {\n if (mesh[i]) {\n size += this._getMeshSize(mesh[i]);\n }\n }\n } else if (mesh) {\n size += mesh.getMemorySize();\n }\n return size;\n }\n\n onTileLoad(b3dm, node) {\n if (!this.layer) {\n return;\n }\n delete this.tilesLoading[node.id];\n this.layer.onTileLoad(b3dm, node);\n this._addTileToCache(node);\n this.setToRedraw();\n /**\n * tileload event, fired when tile is loaded.\n *\n * @event Geo3DTilesLayer#tileload\n * @type {Object}\n * @property {String} type - tileload\n * @property {Geo3DTilesLayer} target - tile layer\n * @property {Object} node - 3d tile node\n */\n this.layer.fire('tileload', { node });\n }\n\n onTilesetLoad(tileset, parent, url) {\n if (!this.layer) {\n return;\n }\n this.layer._vertexCompressionType = tileset.extensions && tileset.extensions['s3m:VertexCompressionType'];\n if (tileset.capabilities || tileset.layers && tileset.layers[0] && tileset.layers[0].capabilities) {\n //如果是i3s scene layer,还要再次请求root node信息\n this._parseI3SSceneLayer(tileset, parent, url);\n return;\n }\n delete this.tilesLoading[parent.id];\n this.layer.onTilesetLoad(tileset, parent, url);\n }\n\n onTileError(err, node, errorUrl) {\n if (!this.layer) {\n return;\n }\n // debugger\n const url = errorUrl || node.content.url;\n\n const info = err && err.message || err;\n if ((!err || err.status !== 404 && err.status !== 204) && !REPORTED_ERRORS.has(info)) {\n console.warn('failed to load 3d tile: ' + url);\n console.warn(err);\n REPORTED_ERRORS.add(info);\n }\n\n\n // const emptyB3DM = gltf.B3DMLoader.createEmptyB3DM();\n // emptyB3DM.loadTime = 0;\n delete this.tilesLoading[node.id];\n if (!this.layer.options['onlyCacheNoContentTileWhenError'] || err && !maptalks.Util.isNoContentHttpCode(err.status)) {\n this._addErrorToCache(node, err);\n }\n // this.setToRedraw();\n /**\n * tileerror event, fired when tile loading has error.\n *\n * @event Geo3DTilesLayer#tileerror\n * @type {Object}\n * @property {String} type - tileerror\n * @property {Geo3DTilesLayer} target - tile layer\n * @property {Object} node - 3d tile node\n * @property {Error} error - error message\n */\n this.layer.fire('tileerror', { node, error: err });\n }\n\n getCachedTile(id) {\n return this.tileCache.get(id);\n }\n\n getShadowMeshes() {\n if (!this.painter) {\n return [];\n }\n const meshes = [];\n const b3dmMeshes = this.painter.getCurrentB3DMMeshes();\n\n for (const p in b3dmMeshes) {\n if (b3dmMeshes[p] && b3dmMeshes[p].isValid && b3dmMeshes[p].isValid()) {\n meshes.push(b3dmMeshes[p]);\n }\n }\n const i3dmMeshes = this.painter.getCurrentI3DMMeshes();\n for (const p in i3dmMeshes) {\n if (i3dmMeshes[p] && i3dmMeshes[p].isValid && i3dmMeshes[p].isValid()) {\n meshes.push(i3dmMeshes[p]);\n }\n }\n return meshes;\n }\n\n _addErrorToCache(node, err) {\n const tileData = {\n // image : data,\n loadTime: maptalks.Util.now(),\n current: true,\n error: err,\n node\n };\n tileData.renderer = this;\n this.tileCache.add(node.id, tileData);\n }\n\n _addTileToCache(node) {\n const tileData = {\n // image : data,\n loadTime: maptalks.Util.now(),\n current: true,\n node\n };\n tileData.renderer = this;\n this.tileCache.add(node.id, tileData);\n }\n\n abortTileLoading(tile) {\n if (!tile || !this.workerConn) return;\n const url = tile.node.content.url;\n this.workerConn.abortTileLoading(this.layer.getId(), url);\n delete this._requests[url];\n }\n\n _markTiles() {\n if (this.tilesLoading) {\n for (const p in this.tilesLoading) {\n this.tilesLoading[p].current = false;\n }\n }\n }\n\n deleteTile(tile) {\n this.painter.deleteTile(tile);\n }\n\n initContext() {\n super.initContext();\n const layer = this.layer;\n const { regl, reglGL, device } = this.context;\n this.regl = regl;\n this.device = device;\n this.gl = reglGL;\n const graphics = regl || device;\n this.prepareWorker();\n this.canvas.pickingFBO = this.canvas.pickingFBO || graphics.framebuffer(this.canvas.width, this.canvas.height);\n this.pickingFBO = this.canvas.pickingFBO || graphics.framebuffer(this.canvas.width, this.canvas.height);\n this.painter = new TileMeshPainter(graphics, layer);\n\n this.layer._resumeHighlights();\n this.layer.fire('contextcreate', { regl, device });\n }\n\n prepareWorker() {\n const map = this.getMap();\n if (!this.workerConn) {\n this.workerConn = new Geo3DTilesWorkerConnection('@maptalks/3dtiles', map.id, reshader.Util.supportNPOT(this.regl || this.device));\n }\n const workerConn = this.workerConn;\n //setTimeout in case layer's style is set to layer after layer's creating.\n if (!workerConn.isActive()) {\n return;\n }\n let options = this.layer.options || {};\n options = extend({}, options);\n delete options['offset'];\n const spatialReference = map.options.spatialReference;\n options.projection = spatialReference && spatialReference.coordType || spatialReference && spatialReference.projection || map.getSpatialReference().getProjection().code;\n const id = this.layer.getId();\n workerConn.addLayer(id, options, err => {\n if (err) throw err;\n if (!this.layer) return;\n this.ready = true;\n this.layer.fire('workerready');\n });\n }\n\n onRemove() {\n if (this.painter) {\n this.painter.remove();\n }\n if (this.pickingFBO) {\n if (!this.canvas.pickingFBO) {\n this.pickingFBO.destroy();\n }\n delete this.pickingFBO;\n }\n if (this.workerConn) {\n this.workerConn.removeLayer(this.layer.getId(), err => {\n if (err) throw err;\n });\n this.workerConn.remove();\n delete this.workerConn;\n }\n TileCacheRefCount--;\n if (!TileCacheRefCount) {\n GlobalTieCache.reset();\n }\n this.clear();\n delete this.tileCache;\n delete this.gl;\n delete this.regl;\n super.onRemove();\n }\n\n clear() {\n this._abortUnusedTiles(true);\n this.tileCache.reset(this);\n this.tilesLoading = {};\n super.clear();\n }\n\n getTileOpacity(/* tileData */) {\n return 1;\n // if (!this.layer.options['fadeAnimation'] || !tileData.loadTime) {\n // return 1;\n // }\n // return Math.min(1, (maptalks.Util.now() - tileData.loadTime) / (1000 / 60 * 10));\n }\n\n getStencilValue() {\n return 0;\n }\n\n _abortUnusedTiles(force) {\n if (!this._preRetireTime) {\n this._preRetireTime = Date.now();\n }\n const now = Date.now();\n if (!force && now - this._preRetireTime < this.layer.options['retireInterval']) {\n return;\n }\n this._preRetireTime = now;\n const aborted = [];\n for (const i in this.tilesLoading) {\n const node = this.tilesLoading[i];\n if (force || !node.current) {\n aborted.push(i);\n // abort loading tiles\n this.abortTileLoading(node);\n // if (this.painter.has(node)) {\n // this.painter.deleteTile(node);\n // }\n }\n }\n\n for (let i = 0; i < aborted.length; i++) {\n delete this.tilesLoading[aborted[i]];\n }\n }\n\n // limit tile number to load when map is interacting\n _getLoadLimit() {\n if (this.getMap().isInteracting()) {\n return this.layer.options['loadingLimitOnInteracting'];\n }\n return this.layer.options['loadingLimit'];\n }\n\n _createGLContext(canvas, options) {\n const names = ['webgl', 'experimental-webgl'];\n let context = null;\n /* eslint-disable no-empty */\n for (let i = 0; i < names.length; ++i) {\n try {\n context = canvas.getContext(names[i], options);\n } catch (e) { }\n if (context) {\n break;\n }\n }\n return context;\n /* eslint-enable no-empty */\n }\n\n _isLoadingTile(tileId) {\n return !!this.tilesLoading[tileId];\n }\n\n getI3DMMeshes() {\n return this.painter.getI3DMMeshes();\n }\n\n getPNTSMeshes() {\n return this.painter.getPNTSMeshes();\n }\n\n getB3DMMeshes() {\n return this.painter.getB3DMMeshes();\n }\n\n readBatchData(batch, bin, count) {\n return readBatchArray(batch, bin, 0, count);\n }\n\n _consumeI3SQueue() {\n if (!this._i3sRequests) {\n return;\n }\n const limit = this.layer.options['i3sNodepageLimitPerFrame'] || Number.MAX_VALUE;\n let count = 0;\n const promises = [];\n for (const url in this._i3sRequests) {\n const callbacks = this._i3sRequests[url];\n if (callbacks.status === 'pending') {\n continue;\n }\n callbacks.status = 'pending';\n const rootIdx = callbacks.rootIdx;\n const service = this.layer._getNodeService(rootIdx);\n const fetchOptions = prepareFetchOptions(service.fetchOptions);\n promises.push(Ajax.getJSON(url, fetchOptions).then(json => {\n delete this._i3sRequests[url];\n const nodeCache = this._i3sNodeCache[rootIdx];\n if (!nodeCache) {\n this.setToRedraw();\n return;\n }\n if (json.nodes) {\n // 1.7, 1.8\n fillNodepagesToCache(nodeCache, json.nodes);\n } else {\n // 1.6\n nodeCache[json.id] = json;\n fillNodepagesToCache(nodeCache, json.children);\n }\n\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i]();\n }\n this.setToRedraw();\n }));\n count++;\n if (count >= limit) {\n break;\n }\n }\n if (promises.length) {\n Promise.all(promises);\n }\n }\n\n _fetchI3DNodepages(rootIdx, url, cb) {\n if (!this._i3sRequests) {\n this._i3sRequests = {};\n }\n this._i3sRequests[url] = this._i3sRequests[url] || [];\n this._i3sRequests[url].rootIdx = rootIdx;\n this._i3sRequests[url].push(cb);\n this.setToRedraw();\n }\n\n _parseI3SSceneLayer(tileset, parent, url) {\n if (!this._i3sNodeCache) {\n this._i3sNodeCache = [];\n }\n const rootIdx = parent._rootIdx;\n if (!this._i3sNodeCache[rootIdx]) {\n this._i3sNodeCache[rootIdx] = {};\n }\n const nodeCache = this._i3sNodeCache[rootIdx];\n const service = this.layer._getNodeService(rootIdx);\n if (tileset.layers) {\n tileset = tileset.layers[0];\n if (url[url.length - 1] !== '/') {\n url += '/';\n }\n url = url + 'layers/0'\n }\n nodeCache.version = +(service.i3sVersion || tileset.store.version);\n if (tileset.spatialReference && (!tileset.spatialReference.wkid || tileset.spatialReference.wkid !== 4326)) {\n console.warn('i3s has a spatialReference other than 4326.', tileset.spatialReference);\n }\n if (tileset.spatialReference && tileset.spatialReference.wkid === 4490) {\n console.warn('i3s spatialReference is 4490,auto set spatialReference to 4326,This may cause some location issues, please ensure that your service is 4326');\n tileset.spatialReference.wkid = 4326;\n }\n nodeCache.projection = tileset.spatialReference;\n parseI3SJSON(this.layer, tileset, rootIdx, service, url, nodeCache, this._fnFetchNodepages).then(json => {\n this.onTilesetLoad(json, parent, url);\n });\n }\n\n pick(x, y, options) {\n if (!this.painter) {\n return [];\n }\n const pickingFBO = this.pickingFBO;\n const { width, height } = this.canvas;\n if (this.pickingFBO && (pickingFBO.width !== width || pickingFBO.height !== height)) {\n pickingFBO.resize(width, height);\n }\n //TODO webgpu不支持sync read\n return this.painter.pick(x, y, options && options.tolerance);\n }\n\n highlight(highlights) {\n if (!this._highlighted) {\n this._highlighted = [];\n }\n if (Array.isArray(highlights)) {\n for (let i = 0; i < highlights.length; i++) {\n const service = highlights[i].service || 0;\n let serviceHighs = this._highlighted[service];\n if (!serviceHighs) {\n serviceHighs = this._highlighted[service] = new Map();\n }\n serviceHighs.set(highlights[i].id, highlights[i]);\n }\n } else {\n const service = highlights.service || 0;\n let serviceHighs = this._highlighted[service];\n if (!serviceHighs) {\n serviceHighs = this._highlighted[service] = new Map();\n }\n serviceHighs.set(highlights.id, highlights);\n }\n\n this.painter.highlight(this._highlighted);\n }\n\n cancelHighlight(service, ids) {\n if (!this._highlighted) {\n return;\n }\n const serviceHighs = this._highlighted[service];\n if (!serviceHighs) {\n return;\n }\n if (Array.isArray(ids)) {\n for (let i = 0; i < ids.length; i++) {\n serviceHighs.delete(ids[i]);\n }\n } else {\n serviceHighs.delete(ids);\n }\n if (!serviceHighs.size) {\n this._highlighted[service] = null;\n }\n this.painter.highlight(this._highlighted);\n }\n\n cancelAllHighlight() {\n delete this._highlighted;\n this.painter.cancelAllHighlight();\n }\n\n showOnly(items) {\n if (!this._showOnlys) {\n this._showOnlys = [];\n }\n if (Array.isArray(items)) {\n for (let i = 0; i < items.length; i++) {\n const service = items[i].service || 0;\n let serviceShowOnlys = this._showOnlys[service];\n if (!serviceShowOnlys) {\n serviceShowOnlys = this._showOnlys[service] = new Map();\n }\n serviceShowOnlys.set(items[i].id, items[i]);\n }\n } else {\n const service = items.service || 0;\n let serviceShowOnlys = this._showOnlys[service];\n if (!serviceShowOnlys) {\n serviceShowOnlys = this._showOnlys[service] = new Map();\n }\n serviceShowOnlys.set(items.id, items);\n }\n\n this.painter.showOnly(this._showOnlys);\n }\n\n cancelShowOnly() {\n delete this._showOnlys;\n this.painter.cancelShowOnly();\n }\n\n _getCurrentBatchIDs() {\n if (!this.painter) {\n return [];\n }\n return this.painter._getCurrentBatchIDs();\n }\n\n _tileCoordToLngLat(out, position) {\n const map = this.getMap();\n const code = map.getProjection().code.toLowerCase();\n if (code === 'identity') {\n const projection = this._getCoordProjection();\n COORD_IN.set(position[0], position[1]);\n projection.unproject(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n } else {\n COORD_IN.set(position[0], position[1]);\n map.getProjection().unproject(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n }\n }\n\n _lngLatToIdentityCoord(out, position) {\n const projection = this._getCoordProjection();\n COORD_IN.set(position[0], position[1]);\n projection.project(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n }\n\n _identityCoordToLngLat(out, coord) {\n const projection = this._getCoordProjection();\n COORD_IN.set(coord[0], coord[1]);\n projection.unproject(COORD_IN, COORD_OUT);\n out[0] = COORD_OUT.x;\n out[1] = COORD_OUT.y;\n return out;\n }\n\n _getCoordProjection() {\n const map = this.getMap();\n const coordType = map.options.spatialReference.coordType;\n if (!coordType) {\n throw new Error('Missing coordType in map spatialReference.');\n }\n if (!this._centerProjection) {\n this._centerProjection = maptalks.SpatialReference.getProjectionInstance(coordType);\n }\n return this._centerProjection;\n }\n}\n\n// function compareTile(a, b) {\n// return b.node._cameraDistance - a.node._cameraDistance;\n// }\n\nfunction compareRequests(a, b) {\n return a._cameraDistance - b._cameraDistance;\n}\n\n\nfunction encodeSuperMapURI(url, baseUrl) {\n const uriComponent = url.substring(baseUrl.length);\n const parts = uriComponent.split('/');\n const encoded = [];\n for (let i = 0; i < parts.length; i++) {\n encoded.push(encodeURIComponent(parts[i]));\n }\n return baseUrl + encoded.join('/');\n}\n","import { vec3 } from 'gl-matrix';\n\n// const getPlanesRight = [];\n// const getPlanesNearCenter = [];\n\n// function computeCullingVolume(position, direction, up) {\n\n\n// var planes = this._cullingVolume.planes;\n\n// var t = this.top;\n// var b = this.bottom;\n// var r = this.right;\n// var l = this.left;\n// var n = this.near;\n// var f = this.far;\n\n// var right = vec3.cross(getPlanesRight, direction, up);\n\n// var nearCenter = getPlanesNearCenter;\n// vec3.scale(n, nearCenter, direction);\n// Cartesian3.add(position, nearCenter, nearCenter);\n\n// var farCenter = getPlanesFarCenter;\n// Cartesian3.multiplyByScalar(direction, f, farCenter);\n// Cartesian3.add(position, farCenter, farCenter);\n\n// var normal = getPlanesNormal;\n\n// //Left plane computation\n// Cartesian3.multiplyByScalar(right, l, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.normalize(normal, normal);\n// Cartesian3.cross(normal, up, normal);\n// Cartesian3.normalize(normal, normal);\n\n// var plane = planes[0];\n// if (!defined(plane)) {\n// plane = planes[0] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Right plane computation\n// Cartesian3.multiplyByScalar(right, r, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.cross(up, normal, normal);\n// Cartesian3.normalize(normal, normal);\n\n// plane = planes[1];\n// if (!defined(plane)) {\n// plane = planes[1] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Bottom plane computation\n// Cartesian3.multiplyByScalar(up, b, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.cross(right, normal, normal);\n// Cartesian3.normalize(normal, normal);\n\n// plane = planes[2];\n// if (!defined(plane)) {\n// plane = planes[2] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Top plane computation\n// Cartesian3.multiplyByScalar(up, t, normal);\n// Cartesian3.add(nearCenter, normal, normal);\n// Cartesian3.subtract(normal, position, normal);\n// Cartesian3.cross(normal, right, normal);\n// Cartesian3.normalize(normal, normal);\n\n// plane = planes[3];\n// if (!defined(plane)) {\n// plane = planes[3] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, position);\n\n// //Near plane computation\n// plane = planes[4];\n// if (!defined(plane)) {\n// plane = planes[4] = new Cartesian4();\n// }\n// plane.x = direction.x;\n// plane.y = direction.y;\n// plane.z = direction.z;\n// plane.w = -Cartesian3.dot(direction, nearCenter);\n\n// //Far plane computation\n// Cartesian3.negate(direction, normal);\n\n// plane = planes[5];\n// if (!defined(plane)) {\n// plane = planes[5] = new Cartesian4();\n// }\n// plane.x = normal.x;\n// plane.y = normal.y;\n// plane.z = normal.z;\n// plane.w = -Cartesian3.dot(normal, farCenter);\n\n// return this._cullingVolume;\n// }\n\nfunction getMatrix3Column(out, mat, idx) {\n out[0] = mat[idx];\n out[1] = mat[idx + 3];\n out[2] = mat[idx + 6];\n return out;\n}\n\nexport function distanceToCamera(center, halfAxes, cameraPosition) {\n return Math.sqrt(distanceSquaredTo(center, halfAxes, cameraPosition));\n}\n\nconst scratchOffset = [];\nconst scratchCartesianU = [];\nconst scratchCartesianV = [];\nconst scratchCartesianW = [];\nconst scratchPPrime = [];\n\n//from Cesium's OrientedBoundingBox.distanceSquaredTo\nfunction distanceSquaredTo(center, halfAxes, cartesian) {\n // See Geometric Tools for Computer Graphics 10.4.2\n const offset = vec3.subtract(scratchOffset, cartesian, center);\n\n // var halfAxes = halfAxes;\n const u = getMatrix3Column(scratchCartesianU, halfAxes, 0);\n const v = getMatrix3Column(scratchCartesianV, halfAxes, 1);\n const w = getMatrix3Column(scratchCartesianW, halfAxes, 2);\n\n const uHalf = vec3.len(u);\n const vHalf = vec3.len(v);\n const wHalf = vec3.len(w);\n\n vec3.normalize(u, u);\n vec3.normalize(v, v);\n vec3.normalize(w, w);\n\n const pPrime = scratchPPrime;\n pPrime[0] = vec3.dot(offset, u);\n pPrime[1] = vec3.dot(offset, v);\n pPrime[2] = vec3.dot(offset, w);\n\n let distanceSquared = 0.0;\n let d;\n\n if (pPrime[0] < -uHalf) {\n d = pPrime[0] + uHalf;\n distanceSquared += d * d;\n } else if (pPrime[0] > uHalf) {\n d = pPrime[0] - uHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime[1] < -vHalf) {\n d = pPrime[1] + vHalf;\n distanceSquared += d * d;\n } else if (pPrime[1] > vHalf) {\n d = pPrime[1] - vHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime[2] < -wHalf) {\n d = pPrime[2] + wHalf;\n distanceSquared += d * d;\n } else if (pPrime[2] > wHalf) {\n d = pPrime[2] - wHalf;\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n}\n","import { equalsEpsilon } from '../../common/Math';\nconst EPSILON14 = 0.00000000000001;\nconst TWO_PI = 2.0 * Math.PI;\n\nexport default class Rectangle {\n constructor(west, south, east, north) {\n this.west = west;\n this.south = south;\n this.east = east;\n this.north = north;\n }\n\n static contains(rectangle, cartographic) {\n\n let longitude = cartographic[0];\n const latitude = cartographic[1];\n\n const west = rectangle.west;\n let east = rectangle.east;\n\n if (east < west) {\n east += TWO_PI;\n if (longitude < 0.0) {\n longitude += TWO_PI;\n }\n }\n return (\n (longitude > west ||\n equalsEpsilon(longitude, west, EPSILON14)) &&\n (longitude < east ||\n equalsEpsilon(longitude, east, EPSILON14)) &&\n latitude >= rectangle.south &&\n latitude <= rectangle.north\n );\n }\n\n\n static southwest(rectangle, result) {\n result[0] = rectangle.west;\n result[1] = rectangle.south;\n result[2] = 0;\n return result;\n }\n\n static northeast(rectangle, result) {\n result[0] = rectangle.east;\n result[1] = rectangle.north;\n result[2] = 0;\n return result;\n }\n\n static southeast(rectangle, result) {\n result[0] = rectangle.east;\n result[1] = rectangle.south;\n result[2] = 0;\n return result;\n }\n\n static northwest(rectangle, result) {\n result[0] = rectangle.west;\n result[1] = rectangle.north;\n result[2] = 0;\n return result;\n }\n}\n","import { vec3 } from '@maptalks/gl';\nimport { radianToCartesian3, geodeticSurfaceNormal, geodeticSurfaceNormalCartographic } from '../../common/Transform';\nimport { EPSILON15 } from '../../common/Math';\nimport Rectangle from './Rectangle';\n\n\nconst UNIT_X = [1, 0, 0];\nconst UNIT_Z = [0, 0, 1];\n\nfunction cartographicToCartesian(carto, out) {\n return radianToCartesian3(out, carto[0], carto[1], carto[2]);\n}\n\n\nclass Plane {\n constructor(normal, distance) {\n this.normal = vec3.copy([], normal);\n this.distance = distance;\n }\n\n static fromPointNormal(point, normal, result) {\n const distance = -vec3.dot(normal, point);\n\n vec3.copy(result.normal, normal);\n result.distance = distance;\n return result;\n }\n}\n\nconst cartographicScratch = [];\nconst cartographicScratch2 = [];\nconst westernMidpointScratch = [];\nconst eastWestNormalScratch = [];\nconst cartesian3Scratch = [];\nconst cartesian3Scratch2 = [];\nconst cartesian3Scratch3 = [];\nconst easternMidpointScratch = [];\n\nconst rayOrigin = [];\nconst rayDirection = [];\nconst planeScratch = new Plane(UNIT_X, 0.0);\n\nconst vectorScratch = [];\n\nexport default class TileBoundingRegion {\n\n constructor(region) {\n this.southwestCornerCartesian = [];\n this.northeastCornerCartesian = [];\n\n this.westNormal = [];\n this.eastNormal = [];\n this.southNormal = [];\n this.northNormal = [];\n\n //west, south, east, north\n this.rectangle = new Rectangle(...region);\n this.minimumHeight = region[4];\n this.maximumHeight = region[5];\n\n this.computeBox(this.rectangle);\n }\n\n distanceToCamera(cameraCartesianPosition, cameraCartographicPosition) {\n let result = 0.0;\n if (!Rectangle.contains(this.rectangle, cameraCartographicPosition)) {\n const southwestCornerCartesian = this.southwestCornerCartesian;\n const northeastCornerCartesian = this.northeastCornerCartesian;\n const westNormal = this.westNormal;\n const southNormal = this.southNormal;\n const eastNormal = this.eastNormal;\n const northNormal = this.northNormal;\n\n // if (frameState.mode !== SceneMode.SCENE3D) {\n // southwestCornerCartesian = frameState.mapProjection.project(\n // Rectangle.southwest(this.rectangle),\n // southwestCornerScratch\n // );\n // southwestCornerCartesian.z = southwestCornerCartesian.y;\n // southwestCornerCartesian.y = southwestCornerCartesian.x;\n // southwestCornerCartesian.x = 0.0;\n // northeastCornerCartesian = frameState.mapProjection.project(\n // Rectangle.northeast(this.rectangle),\n // northeastCornerScratch\n // );\n // northeastCornerCartesian.z = northeastCornerCartesian.y;\n // northeastCornerCartesian.y = northeastCornerCartesian.x;\n // northeastCornerCartesian.x = 0.0;\n // westNormal = negativeUnitY;\n // eastNormal = Cartesian3.UNIT_Y;\n // southNormal = negativeUnitZ;\n // northNormal = Cartesian3.UNIT_Z;\n // }\n\n const vectorFromSouthwestCorner = vec3.subtract(\n vectorScratch,\n cameraCartesianPosition,\n southwestCornerCartesian\n );\n const distanceToWestPlane = vec3.dot(\n vectorFromSouthwestCorner,\n westNormal\n );\n const distanceToSouthPlane = vec3.dot(\n vectorFromSouthwestCorner,\n southNormal\n );\n\n const vectorFromNortheastCorner = vec3.subtract(\n vectorScratch,\n cameraCartesianPosition,\n northeastCornerCartesian\n );\n const distanceToEastPlane = vec3.dot(\n vectorFromNortheastCorner,\n eastNormal\n );\n const distanceToNorthPlane = vec3.dot(\n vectorFromNortheastCorner,\n northNormal\n );\n\n if (distanceToWestPlane > 0.0) {\n result += distanceToWestPlane * distanceToWestPlane;\n } else if (distanceToEastPlane > 0.0) {\n result += distanceToEastPlane * distanceToEastPlane;\n }\n\n if (distanceToSouthPlane > 0.0) {\n result += distanceToSouthPlane * distanceToSouthPlane;\n } else if (distanceToNorthPlane > 0.0) {\n result += distanceToNorthPlane * distanceToNorthPlane;\n }\n }\n // if (frameState.mode === SceneMode.SCENE3D) {\n const cameraHeight = cameraCartographicPosition[2];\n const minimumHeight = this.minimumHeight;\n const maximumHeight = this.maximumHeight;\n // } else {\n // cameraHeight = cameraCartesianPosition.x;\n // minimumHeight = 0.0;\n // maximumHeight = 0.0;\n // }\n\n if (cameraHeight > maximumHeight) {\n const distanceAboveTop = cameraHeight - maximumHeight;\n result += distanceAboveTop * distanceAboveTop;\n } else if (cameraHeight < minimumHeight) {\n const distanceBelowBottom = minimumHeight - cameraHeight;\n result += distanceBelowBottom * distanceBelowBottom;\n }\n\n return Math.sqrt(result);\n }\n\n computeBox(rectangle) {\n const tileBB = this;\n cartographicToCartesian(\n Rectangle.southwest(rectangle, cartographicScratch2),\n tileBB.southwestCornerCartesian\n );\n cartographicToCartesian(\n Rectangle.northeast(rectangle, cartographicScratch2),\n tileBB.northeastCornerCartesian\n );\n\n // The middle latitude on the western edge.\n cartographicScratch[0] = rectangle.west;\n cartographicScratch[1] = (rectangle.south + rectangle.north) * 0.5;\n cartographicScratch[2] = 0.0;\n const westernMidpointCartesian = cartographicToCartesian(\n cartographicScratch,\n westernMidpointScratch\n );\n\n // Compute the normal of the plane on the western edge of the tile.\n const westNormal = vec3.cross(\n cartesian3Scratch,\n westernMidpointCartesian,\n UNIT_Z\n );\n vec3.normalize(tileBB.westNormal, westNormal);\n\n // The middle latitude on the eastern edge.\n cartographicScratch[0] = rectangle.east;\n const easternMidpointCartesian = cartographicToCartesian(\n cartographicScratch,\n easternMidpointScratch\n );\n\n // Compute the normal of the plane on the eastern edge of the tile.\n const eastNormal = vec3.cross(\n cartesian3Scratch,\n UNIT_Z,\n easternMidpointCartesian\n );\n vec3.normalize(tileBB.eastNormal, eastNormal);\n\n // Compute the normal of the plane bounding the southern edge of the tile.\n const westVector = vec3.subtract(\n cartesian3Scratch,\n westernMidpointCartesian,\n easternMidpointCartesian\n );\n const eastWestNormal = vec3.normalize(eastWestNormalScratch, westVector);\n\n const south = rectangle.south;\n let southSurfaceNormal;\n\n if (south > 0.0) {\n // Compute a plane that doesn't cut through the tile.\n cartographicScratch[0] = (rectangle.west + rectangle.east) * 0.5;\n cartographicScratch[1] = south;\n const southCenterCartesian = cartographicToCartesian(\n cartographicScratch,\n rayOrigin\n );\n vec3.copy(rayDirection, eastWestNormal);\n const westPlane = Plane.fromPointNormal(\n tileBB.southwestCornerCartesian,\n tileBB.westNormal,\n planeScratch\n );\n // Find a point that is on the west and the south planes\n rayPlane(\n rayOrigin,\n rayDirection,\n westPlane,\n tileBB.southwestCornerCartesian\n );\n southSurfaceNormal = geodeticSurfaceNormal(\n southCenterCartesian,\n cartesian3Scratch2\n );\n } else {\n southSurfaceNormal = geodeticSurfaceNormalCartographic(\n Rectangle.southeast(rectangle, cartographicScratch2),\n cartesian3Scratch2\n );\n }\n const southNormal = vec3.cross(\n cartesian3Scratch3,\n southSurfaceNormal,\n westVector\n );\n vec3.normalize(tileBB.southNormal, southNormal);\n\n // Compute the normal of the plane bounding the northern edge of the tile.\n const north = rectangle.north;\n let northSurfaceNormal;\n if (north < 0.0) {\n // Compute a plane that doesn't cut through the tile.\n cartographicScratch[0] = (rectangle.west + rectangle.east) * 0.5;\n cartographicScratch[1] = north;\n const northCenterCartesian = cartographicToCartesian(\n cartographicScratch,\n rayOrigin\n );\n // Cartesian3.negate(eastWestNormal, rayDirection);\n vec3.scale(rayDirection, eastWestNormal, -1);\n const eastPlane = Plane.fromPointNormal(\n tileBB.northeastCornerCartesian,\n tileBB.eastNormal,\n planeScratch\n );\n // Find a point that is on the east and the north planes\n rayPlane(\n rayOrigin,\n rayDirection,\n eastPlane,\n tileBB.northeastCornerCartesian\n );\n northSurfaceNormal = geodeticSurfaceNormal(\n northCenterCartesian,\n cartesian3Scratch2\n );\n } else {\n northSurfaceNormal = geodeticSurfaceNormalCartographic(\n Rectangle.northwest(rectangle, cartographicScratch2),\n cartesian3Scratch2\n );\n }\n const northNormal = vec3.cross(\n cartesian3Scratch3,\n westVector,\n northSurfaceNormal\n );\n vec3.normalize(tileBB.northNormal, northNormal);\n }\n}\n\nfunction rayPlane(rayOrigin, rayDirection, plane, result) {\n const origin = rayOrigin;\n const direction = rayDirection;\n const normal = plane.normal;\n const denominator = vec3.dot(normal, direction);\n\n if (Math.abs(denominator) < EPSILON15) {\n // Ray is parallel to plane. The ray may be in the polygon's plane.\n return undefined;\n }\n\n const t = (-plane.distance - vec3.dot(normal, origin)) / denominator;\n\n if (t < 0) {\n return undefined;\n }\n\n result = vec3.scale(result, direction, t);\n return vec3.add(result, origin, result);\n}\n",null,"import transcoders from '@maptalks/gl/dist/transcoders.js';\nlet currentTranscoders = null\nexport default function () {\n if (!currentTranscoders) {\n currentTranscoders = {\n 'image/crn': transcoders.crn && transcoders.crn(),\n 'image/ktx2': transcoders.ktx2 && transcoders.ktx2(),\n 'image/cttf': transcoders.ktx2 && transcoders.ktx2(),\n 'draco': transcoders.draco && transcoders.draco()\n };\n }\n return currentTranscoders;\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readFeatureTableJSON, readBatchTableJSON, readBatchTableBin, readBatchId } from '../common/TileHelper.js';\n// 不能这样引用: import { transcoders } from '@maptalks/gl',因为会把gl及相关依赖库(如maptalks)都引用进来\nimport getTranscoders from './transcoders.js';\n\nconst { Ajax, GLTFLoader } = getGLTFLoaderBundle();\n\n// s3m : https://github.com/SuperMap/s3m-spec\n// b3dm: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/TileFormats/Batched3DModel/README.md\n// b3dm legacy 24: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/a45866de985f5b37aa98fc75340878d7a78e4056/TileFormats/Batched3DModel/README.md\n// b3dm legacy 20: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/3c70a9c3d58f612218f1f51b12d2a0d92b3c9e32/TileFormats/Batched3DModel/README.md\n\nexport default class B3DMLoader {\n constructor(requestImage, loaderCtor, supportedFormats) {\n this._requestImage = requestImage;\n this._loaderCtor = loaderCtor || GLTFLoader;\n this._supportedFormats = supportedFormats;\n this._decoders = getTranscoders();\n }\n\n static createEmptyB3DM() {\n return {\n featureTable : null,\n batchTable : null,\n gltf : {}\n };\n }\n\n /**\n * 载入b3dm模型,返回一个promise,promise中的参数是 gltf 模型对象\n * @param {String} url - url of b3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional b3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0, options) {\n if (arraybuffer) {\n if (!byteLength) {\n byteLength = arraybuffer.byteLength;\n }\n return this._parse(url, arraybuffer, offset, byteLength, options);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const b3dm = response.data;\n if (!byteLength) {\n byteLength = b3dm.byteLength;\n }\n return this._parse(url, b3dm, offset, byteLength);\n });\n }\n\n _parse(url, b3dm, offset, b3dmByteLength, options) {\n const maxTextureSize = options && options.maxTextureSize;\n const components = this._readB3DM(b3dm, offset, b3dmByteLength, url);\n if (components.error) {\n return Promise.resolve(components);\n }\n const rootPath = url.substring(0, url.lastIndexOf('/'));\n let loader;\n try {\n loader = new this._loaderCtor(rootPath, components.glb, {\n transferable: true,\n requestImage: this._requestImage,\n decoders: this._decoders,\n supportedFormats: this._supportedFormats,\n maxTextureSize\n });\n } catch (e) {\n return Promise.resolve({ error: e });\n }\n\n return loader.load({ skipAttributeTransform: false }).then(gltf => {\n // 相同url的geometry会缓存在MeshPainter中,不会重复创建\n // url里必须加上offset和b3dmByteLength,是因为一个url中可能包含多个不同的gltf模型\n gltf.url = `${url}-${offset}-${b3dmByteLength}`;\n const transferables = loader.transferables;\n for (let i = 0; i < components.transferables.length; i++) {\n if (transferables.indexOf(components.transferables[i]) < 0) {\n transferables.push(components.transferables[i]);\n }\n }\n return {\n magic: 'b3dm',\n count: components.count,\n transferables, //for worker\n featureTable: components.featureTable,\n batchTable: components.batchTable,\n batchTableBin: components.batchTableBin,\n gltf\n };\n });\n }\n\n /**\n * 解析b3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} b3dm\n */\n _readB3DM(b3dm, offset, byteLength, url) {\n const view = new DataView(b3dm, offset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported b3dm version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n const length = view.getUint32(8, true);\n if (length !== view.byteLength) {\n const info = 'Length in b3dm header is inconsistent with b3dm\\'s byte length, url: ' + url;\n console.warn(info);\n return { error: info };\n }\n // let headerLength = 28;\n // const versions = [20, 24, 28];\n\n // for (let i = 0; i < versions.length; i++) {\n // const magic = view.getUint32(versions[i], true);\n // // 1179937895 is uint32 version of 'gltf'\n // if (magic === 1179937895) {\n // headerLength = versions[i];\n // break;\n // }\n // }\n\n let featureTableJsonByteLength = view.getUint32(12, true);\n let featureTableBinaryByteLength = view.getUint32(16, true);\n let batchTableJsonByteLength = view.getUint32(20, true);\n let batchTableBinaryByteLength = view.getUint32(24, true);\n\n let byteOffset = 28 + offset;\n let batchLength;\n // from Cesium.js, Batched3DModel3DTileContent.js\n if (batchTableJsonByteLength >= 570425344) {\n // 'This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.'\n byteOffset -= 4 * 2;\n batchLength = featureTableJsonByteLength;\n batchTableJsonByteLength = featureTableBinaryByteLength;\n batchTableBinaryByteLength = 0;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n } else if (batchTableBinaryByteLength >= 570425344) {\n // This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.\n byteOffset -= 4;\n batchLength = batchTableJsonByteLength;\n batchTableJsonByteLength = featureTableJsonByteLength;\n batchTableBinaryByteLength = featureTableBinaryByteLength;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n }\n\n const transferables = [b3dm];\n let featureTable;\n let featureTableBin;\n\n if (featureTableJsonByteLength > 0) {\n featureTable = readFeatureTableJSON(b3dm, byteOffset, featureTableJsonByteLength);\n byteOffset += featureTableJsonByteLength;\n batchLength = featureTable['BATCH_LENGTH'];\n } else {\n featureTable = {\n 'BATCH_LENGTH': batchLength\n };\n }\n\n if (featureTableBinaryByteLength > 0) {\n // featureTableBin = readFeatureTableBin(b3dm, byteOffset, featureTableBinaryByteLength);\n byteOffset += featureTableBinaryByteLength;\n }\n\n let batchTable, batchTableBin;\n if (batchTableJsonByteLength > 0) {\n batchTable = readBatchTableJSON(b3dm, byteOffset, batchTableJsonByteLength);\n byteOffset += batchTableJsonByteLength;\n if (batchTableBinaryByteLength > 0) {\n const batchTableBinInfo = readBatchTableBin(b3dm, byteOffset, batchTableBinaryByteLength);\n batchTableBin = b3dm.slice(batchTableBinInfo.offset, batchTableBinInfo.offset + batchTableBinInfo.byteLength);\n byteOffset += batchTableBinaryByteLength;\n transferables.push(batchTableBin);\n }\n }\n\n\n\n const count = featureTable['BATCH_LENGTH'];\n const b3dmData = {};\n if (featureTable && featureTable['BATCH_ID']) {\n b3dmData['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], b3dm, featureTableBin.offset, count);\n const buffer = b3dmData['BATCH_ID'].array && b3dmData['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n\n const glb = {\n buffer: b3dm,\n byteOffset: byteOffset,\n byteLength: view.byteLength + view.byteOffset - byteOffset\n };\n return {\n count: batchLength,\n transferables,\n featureTable,\n batchTable,\n batchTableBin,\n b3dm: b3dmData,\n glb\n };\n }\n\n //TODO\n _readBatchTable() {\n return null;\n }\n}\n\n","import { vec3 } from 'gl-matrix';\nimport { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readFeatureTableBatchTable, readBatchId, convertQuantizedPosition } from '../common/TileHelper.js';\nimport { stringFromUTF8Array } from '../common/Util.js';\nimport getTranscoders from './transcoders.js';\n\nconst { Ajax, GLTFLoader } = getGLTFLoaderBundle();\n\n// https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Instanced3DModel\nexport default class I3DMLoader {\n constructor(requestImage, loaderCtor, supportedFormats, maxTextureSize) {\n this._requestImage = requestImage;\n this._loaderCtor = loaderCtor || GLTFLoader;\n this._supportedFormats = supportedFormats;\n this._decoders = getTranscoders();\n this._maxTextureSize = maxTextureSize;\n }\n\n /**\n * 载入pnts模型,返回一个promise,promise中的参数是数据\n * @param {String} url - url of i3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional i3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0, options) {\n if (arraybuffer) {\n if (!byteLength) {\n byteLength = arraybuffer.byteLength;\n }\n return this._parse(url, arraybuffer, offset, byteLength, options);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const i3dm = response.data;\n if (!byteLength) {\n byteLength = i3dm.byteLength;\n }\n return this._parse(url, i3dm, offset, byteLength);\n });\n }\n\n _parse(url, buf, offset, byteLength, options) {\n return this._parseGLTF(url, buf, offset, byteLength, options).then(({ gltf, transferables }) => {\n const components = this._readI3DM(buf, offset, byteLength, url);\n if (components.error) {\n return Promise.resolve(components);\n }\n for (let i = 0; i < transferables.length; i++) {\n if (components.transferables.indexOf(transferables[i]) === -1) {\n components.transferables.push(transferables[i]);\n }\n }\n delete gltf.transferables;\n return Promise.resolve({\n magic: 'i3dm',\n count: components.count,\n transferables: components.transferables, //for worker\n featureTable: components.featureTable,\n batchTable: components.batchTable,\n batchTableBin: components.batchTableBin,\n i3dm: components.i3dm,\n gltf\n });\n });\n\n }\n\n _parseGLTF(i3dmURL, buf, offset, byteLength, opts) {\n const maxTextureSize = opts && opts.maxTextureSize;\n const options = {\n transferable: true,\n requestImage: this._requestImage,\n decoders: this._decoders,\n supportedFormats: this._supportedFormats,\n maxTextureSize\n };\n const view = new DataView(buf, offset, byteLength);\n const featureTableJSONLength = view.getUint32(12, true);\n const featureTableBinLength = view.getUint32(16, true);\n const batchTableJSONLength = view.getUint32(20, true);\n const batchTableBinLength = view.getUint32(24, true);\n const gltfFormat = view.getUint32(28, true);\n\n // i3dm header length\n const headerLength = 32;\n const gltfBinStart = headerLength + featureTableJSONLength + featureTableBinLength + batchTableJSONLength + batchTableBinLength;\n if (gltfFormat === 0) {\n //url\n const urlBuf = new Uint8Array(buf, gltfBinStart + offset, view.byteLength - gltfBinStart);\n let url = stringFromUTF8Array(urlBuf);\n if (url.indexOf('://') == -1) {\n // relative path\n url = i3dmURL.substring(0, i3dmURL.lastIndexOf('/')) + '/' + url;\n }\n const isGLB = url.indexOf('.glb') > 0;\n if (isGLB) {\n return Ajax.getArrayBuffer(url, {}).then(bin => {\n return this._createGLTFLoader(url, { buffer: bin.data, byteOffset: 0 }, options);\n });\n } else {\n return Ajax.getJSON(url, {}).then(json => {\n return this._createGLTFLoader(url, json, options);\n });\n }\n } else {\n const glb = {\n buffer: buf,\n byteOffset: gltfBinStart + offset,\n byteLength: view.byteLength - gltfBinStart\n };\n return this._createGLTFLoader(i3dmURL, glb, options);\n }\n }\n\n _createGLTFLoader(url, data, options) {\n const rootPath = url.substring(0, url.lastIndexOf('/'));\n const loader = new this._loaderCtor(rootPath, data, options);\n // turn on skipAttributeTransform in default\n return loader.load({ skipAttributeTransform: true }).then(gltf => {\n let offset = 0, byteLength = 0;\n if (data.buffer) {\n offset = data.byteOffset || 0;\n byteLength = data.byteLength || 0;\n }\n gltf.url = `${url}-${offset}-${byteLength}`;\n return {\n transferables : loader.transferables, //for worker\n gltf\n };\n });\n }\n\n /**\n * 解析i3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} pnts\n */\n _readI3DM(i3dmBuf, offset, byteLength, url) {\n const view = new DataView(i3dmBuf, offset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported pnts version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n const length = view.getUint32(8, true);\n if (length !== view.byteLength) {\n const info = 'Length in pnts header is inconsistent with pnts\\'s byte length, url: ' + url;\n console.warn(info);\n return { error: info };\n }\n const transferables = [i3dmBuf];\n\n const { featureTable, featureTableBin, batchTable, batchTableBin } = readFeatureTableBatchTable(view, 32 + offset, transferables);\n\n const i3dm = {};\n\n const instanceLength = featureTable['INSTANCES_LENGTH'];\n // position\n if (featureTable['POSITION']) {\n const { byteOffset } = featureTable['POSITION'];\n i3dm['POSITION'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['POSITION'].array.buffer);\n } else if (featureTable['POSITION_QUANTIZED']) {\n const quanVolOffset = featureTable['QUANTIZED_VOLUME_OFFSET'];\n const quanVolScale = featureTable['QUANTIZED_VOLUME_SCALE'];\n\n const { byteOffset } = featureTable['POSITION_QUANTIZED'];\n i3dm['POSITION'] = {\n byteStride: 3 * 4,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: this._convertQuantizedPosition(new Uint16Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3), quanVolOffset, quanVolScale)\n };\n transferables.push(i3dm['POSITION'].array.buffer);\n }\n\n if (featureTable['BATCH_ID']) {\n i3dm['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], i3dmBuf, featureTableBin.offset, instanceLength);\n const buffer = i3dm['BATCH_ID'].array && i3dm['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n\n // normal\n if (featureTable['NORMAL_UP']) {\n let { byteOffset } = featureTable['NORMAL_UP'];\n i3dm['NORMAL_UP'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['NORMAL_UP'].array.buffer);\n\n byteOffset = featureTable['NORMAL_RIGHT'].byteOffset;\n i3dm['NORMAL_RIGHT'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['NORMAL_RIGHT'].array.buffer);\n } else if (featureTable['NORMAL_UP_OCT32P']) {\n let { byteOffset } = featureTable['NORMAL_UP_OCT32P'];\n i3dm['NORMAL_UP'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: this._decodeOCT32p(new Uint16Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 2))\n };\n transferables.push(i3dm['NORMAL_UP'].array.buffer);\n\n byteOffset = featureTable['NORMAL_RIGHT_OCT32P'].byteOffset;\n i3dm['NORMAL_RIGHT'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: this._decodeOCT32p(new Uint16Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 2))\n };\n transferables.push(i3dm['NORMAL_RIGHT'].array.buffer);\n }\n\n if (featureTable['SCALE']) {\n const { byteOffset } = featureTable['SCALE'];\n i3dm['SCALE'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength).slice()\n };\n transferables.push(i3dm['SCALE'].array.buffer);\n } else if (featureTable['SCALE_NON_UNIFORM']) {\n const { byteOffset } = featureTable['SCALE_NON_UNIFORM'];\n i3dm['SCALE_NON_UNIFORM'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: instanceLength,\n componentType: 5126,\n array: new Float32Array(i3dmBuf, byteOffset + featureTableBin.offset, instanceLength * 3).slice()\n };\n transferables.push(i3dm['SCALE_NON_UNIFORM'].array.buffer);\n }\n return {\n count: instanceLength,\n batchTable,\n batchTableBin,\n featureTable,\n i3dm,\n transferables: transferables\n };\n }\n\n _decodeOCT32p(arr) {\n const count = arr.length / 2;\n const result = new Float32Array(count * 3);\n const v = [];\n for (let i = 0; i < count; i++) {\n octDecodeInRange(v, arr[i * 2], arr[i * 2 + 1], 65535);\n result[i * 3] = v[0];\n result[i * 3 + 1] = v[1];\n result[i * 3 + 2] = v[2];\n }\n return result;\n }\n\n _convertQuantizedPosition(arr, offset, scale) {\n const position = new Float32Array(arr.length);\n return convertQuantizedPosition(position, arr, offset, scale);\n }\n\n //TODO\n _readBatchTable() {\n return null;\n }\n}\n\nfunction octDecodeInRange(out, x, y, rangeMax) {\n out[0] = fromSNorm(x, rangeMax);\n out[1] = fromSNorm(y, rangeMax);\n out[2] = 1.0 - (Math.abs(out[0]) + Math.abs(out[1]));\n\n if (out[2] < 0.0) {\n const oldVX = out[0];\n out[0] = (1.0 - Math.abs(out[1])) * signNotZero(oldVX);\n out[1] = (1.0 - Math.abs(oldVX)) * signNotZero(out[1]);\n }\n\n return vec3.normalize(out, out);\n}\n\nfunction fromSNorm(value, rangeMaximum) {\n rangeMaximum = defaultValue(rangeMaximum, 255);\n return (\n (clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0\n );\n}\n\nfunction signNotZero(value) {\n return value < 0.0 ? -1.0 : 1.0;\n}\n\nfunction defaultValue(a, b) {\n if (a !== undefined && a !== null) {\n return a;\n }\n return b;\n}\n\nfunction clamp(value, min, max) {\n return value < min ? min : value > max ? max : value;\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readFeatureTableBatchTable, readBatchId, convertQuantizedPosition, getComponentFromCtor } from '../common/TileHelper.js';\nimport getTranscoders from './transcoders.js';\nimport { getBatchIdArrayType } from '../common/Util.js';\n\nconst { Ajax } = getGLTFLoaderBundle();\n\n// s3m : https://github.com/SuperMap/s3m-spec\n// b3dm: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/TileFormats/Batched3DModel/README.md\n// b3dm legacy 24: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/a45866de985f5b37aa98fc75340878d7a78e4056/TileFormats/Batched3DModel/README.md\n// b3dm legacy 20: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/3c70a9c3d58f612218f1f51b12d2a0d92b3c9e32/TileFormats/Batched3DModel/README.md\n\nexport default class PNTSLoader {\n constructor() {\n }\n\n\n /**\n * 载入pnts模型,返回一个promise,promise中的参数是数据\n * @param {String} url - url of b3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional b3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0) {\n if (arraybuffer) {\n if (!byteLength) {\n byteLength = arraybuffer.byteLength;\n }\n return this._parse(url, arraybuffer, offset, byteLength);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const b3dm = response.data;\n if (!byteLength) {\n byteLength = b3dm.byteLength;\n }\n return this._parse(url, b3dm, offset, byteLength);\n });\n }\n\n _parse(url, pntsBuf, offset, byteLength) {\n return this._readPNTS(pntsBuf, offset, byteLength, url).then(components => {\n if (components.error) {\n return components;\n }\n return {\n magic: 'pnts',\n count: components.count,\n transferables: components.transferables, //for worker\n featureTable: components.featureTable,\n batchTable: components.batchTable,\n batchTableBin: components.batchTableBin,\n pnts: components.pnts\n };\n });\n }\n\n /**\n * 解析b3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} pnts\n */\n _readPNTS(pntsBuf, offset, byteLength, url) {\n const view = new DataView(pntsBuf, offset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported pnts version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n const length = view.getUint32(8, true);\n if (length !== view.byteLength) {\n const info = 'Length in pnts header is inconsistent with pnts\\'s byte length, url: ' + url;\n console.warn(info);\n return { error: info };\n }\n\n const transferables = [pntsBuf];\n const { featureTable, featureTableBin, batchTable, batchTableBin } = readFeatureTableBatchTable(view, offset + 28, transferables);\n const quanVolOffset = featureTable['QUANTIZED_VOLUME_OFFSET'];\n const quanVolScale = featureTable['QUANTIZED_VOLUME_SCALE']\n\n const pointsLength = featureTable['POINTS_LENGTH'];\n\n let compression = {};\n let dracoBuf;\n if (featureTable['extensions'] && featureTable['extensions']['3DTILES_draco_point_compression']) {\n compression = featureTable['extensions']['3DTILES_draco_point_compression'];\n // dracoBuf = pntsBuf.slice(compression.byteOffset + featureTableBin.offset, compression.byteOffset + featureTableBin.offset + compression.byteLength);\n dracoBuf = new DataView(pntsBuf, compression.byteOffset + featureTableBin.offset, compression.byteLength);\n const dracoOptions = {\n attributes: compression.properties,\n useUniqueIDs: false\n };\n if (!this._draco) {\n this._draco = getTranscoders().draco;\n }\n return this._draco(dracoBuf, dracoOptions).then(data => {\n const attribData = data.attributes;\n if ((featureTable['POSITION'] || featureTable['POSITION_QUANTIZED']) && (!attribData['POSITION'] && !attribData['POSITION_QUANTIZED'])) {\n attribData['POSITION'] = featureTable['POSITION'];\n attribData['POSITION_QUANTIZED'] = featureTable['POSITION_QUANTIZED'];\n }\n if ((featureTable['RGB'] || featureTable['RGBA'] || featureTable['RGB565']) && (!attribData['RGB'] && !attribData['RGBA'] && !attribData['RGB565'])) {\n attribData['RGB'] = featureTable['RGB'];\n attribData['RGBA'] = featureTable['RGBA'];\n attribData['RGB565'] = featureTable['RGB565'];\n }\n if ((featureTable['NORMAL'] || featureTable['NORMAL_OCT16P']) && (!attribData['NORMAL'] && !attribData['NORMAL_OCT16P'])) {\n attribData['NORMAL'] = featureTable['NORMAL'];\n attribData['NORMAL_OCT16P'] = featureTable['NORMAL_OCT16P'];\n }\n\n const pnts = this._readAttributes(pntsBuf, data.attributes, featureTableBin.offset, pointsLength, transferables, quanVolOffset, quanVolScale);\n if (data.attributes['BATCH_ID']) {\n const array = data.attributes['BATCH_ID'].array;\n pnts['BATCH_ID'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: array.length,\n componentType: getComponentFromCtor(array.constructor),\n array: array\n }\n transferables.push(array.buffer);\n } else if (featureTable['BATCH_ID'] || Object.keys(batchTable).length) {\n if (featureTable['BATCH_ID']) {\n pnts['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], pntsBuf, featureTableBin.offset, pointsLength);\n } else {\n pnts['BATCH_ID'] = createPerPointBatchId(pointsLength);\n }\n const buffer = pnts['BATCH_ID'].array && pnts['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n return {\n count: pointsLength,\n batchTable,\n batchTableBin,\n featureTable,\n pnts,\n transferables\n }\n });\n }\n const pnts = this._readAttributes(pntsBuf, featureTable, featureTableBin.offset, pointsLength, transferables, quanVolOffset, quanVolScale);\n if (featureTable['BATCH_ID'] || Object.keys(batchTable).length) {\n if (featureTable['BATCH_ID']) {\n pnts['BATCH_ID'] = readBatchId(featureTable['BATCH_ID'], pntsBuf, featureTableBin.offset, pointsLength);\n } else {\n pnts['BATCH_ID'] = createPerPointBatchId(pointsLength);\n }\n const buffer = pnts['BATCH_ID'].array && pnts['BATCH_ID'].array.buffer;\n if (buffer && transferables.indexOf(buffer) < 0) {\n transferables.push(buffer);\n }\n }\n\n // position\n\n return Promise.resolve({\n count: pointsLength,\n batchTable,\n batchTableBin,\n featureTable,\n pnts,\n transferables\n });\n }\n\n _readAttributes(pntsBuf, attribData, attrByteOffset, pointsLength, transferables, quanVolOffset, quanVolScale) {\n const pnts = {};\n if (attribData['POSITION']) {\n let { byteOffset, array } = attribData['POSITION'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 3 * 4);\n array = new Float32Array(buf);\n }\n pnts['POSITION'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 5126,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['POSITION_QUANTIZED']) {\n let { byteOffset } = attribData['POSITION_QUANTIZED'];\n const { array } = attribData['POSITION_QUANTIZED'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n pnts['POSITION'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 5126,\n array: this._convertQuantizedPosition(array || new Uint16Array(pntsBuf, byteOffset + offset, pointsLength * 3), quanVolOffset, quanVolScale)\n };\n transferables.push(pnts['POSITION'].array.buffer);\n }\n // color\n if (attribData['RGBA']) {\n let { byteOffset, array } = attribData['RGBA'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 4);\n array = new Uint8Array(buf);\n }\n pnts['RGBA'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 4,\n count: pointsLength,\n componentType: 0x1401,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['RGB']) {\n let { byteOffset, array } = attribData['RGB'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 3);\n array = new Uint8Array(buf);\n }\n pnts['RGB'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 0x1401,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['RGB565']) {\n let { byteOffset, array } = attribData['RGB565'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 2);\n array = new Uint16Array(buf);\n }\n pnts['RGB565'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: pointsLength,\n componentType: 0x1403,\n array: array\n };\n transferables.push(array.buffer);\n }\n // normal\n if (attribData['NORMAL']) {\n let { byteOffset, array } = attribData['NORMAL'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 3 * 4);\n array = new Float32Array(buf);\n }\n pnts['NORMAL'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 3,\n count: pointsLength,\n componentType: 5126,\n array: array\n };\n transferables.push(array.buffer);\n } else if (attribData['NORMAL_OCT16P']) {\n let { byteOffset, array } = attribData['NORMAL_OCT16P'];\n byteOffset = byteOffset || 0;\n const offset = (array ? 0 : attrByteOffset);\n if (!array) {\n const buf = pntsBuf.slice(byteOffset + offset, byteOffset + offset + pointsLength * 2);\n array = new Uint8Array(buf);\n }\n pnts['NORMAL_OCT16P'] = {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 2,\n count: pointsLength,\n componentType: 0x1401,\n array: array\n };\n transferables.push(array.buffer);\n }\n return pnts;\n }\n\n _convertQuantizedPosition(arr, offset, scale) {\n const position = new Float32Array(arr.length);\n return convertQuantizedPosition(position, arr, offset, scale);\n }\n\n //TODO\n _readBatchTable() {\n return null;\n }\n}\n\n// const DEFAULT_TYPES = {\n// 'POSITION': 'Float32Array',\n// 'POSITION_QUANTIZED': 'Uint16Array',\n// 'RGBA': 'Uint8Array',\n// 'RGB': 'Uint8Array',\n// 'RGB565': 'Uint16Array',\n// 'NORMAL': 'Float32Array',\n// 'NORMAL_OCT16P': 'Uint8Array'\n// };\n\n// function getAttributeTypes(compressedProperties, featureTable) {\n// const types = {};\n// for (const p in compressedProperties) {\n// const prop = featureTable[p];\n// let typeName;\n// if (prop.componentType) {\n// typeName = getComponentCtor(prop.componentType).name\n// } else {\n// typeName = DEFAULT_TYPES[p];\n// }\n// if (typeName) {\n// types[compressedProperties[p]] = typeName\n// } else {\n// console.warn('undefined type of attribute:' + p);\n// }\n// }\n// return types;\n// }\n\nfunction createPerPointBatchId(pointsLength) {\n const ctor = getBatchIdArrayType(pointsLength);\n const array = new ctor(pointsLength);\n for (let i = 0; i < pointsLength; i++) {\n array[i] = i;\n }\n return {\n byteStride: 0,\n byteOffset: 0,\n itemSize: 1,\n count: pointsLength,\n componentType: getComponentFromCtor(ctor),\n array\n };\n}\n","import { getGLTFLoaderBundle } from '@maptalks/gl/dist/transcoders.js';\nimport { readMagic } from '../common/TileHelper';\nimport B3DMLoader from '../loaders/B3DMLoader';\nimport I3DMLoader from '../loaders/I3DMLoader';\nimport PNTSLoader from '../loaders/PNTSLoader';\n\nconst { Ajax, GLTFLoader } = getGLTFLoaderBundle();\n\n// https://github.com/CesiumGS/3d-tiles/blob/main/specification/TileFormats/Composite/README.md\n\nexport default class CMPTLoader {\n constructor(requestImage, GLTFloaderCtor, supportedFormats, maxTextureSize) {\n this._supportedFormats = supportedFormats;\n this._requestImage = requestImage;\n this._loaderCtor = GLTFloaderCtor || GLTFLoader;\n this._maxTextureSize = maxTextureSize;\n }\n\n\n /**\n * 载入b3dm模型,返回一个promise,promise中的参数是 gltf 模型对象\n * @param {String} url - url of b3dm\n * @param {ArrayBuffer} [arraybuffer=null] - optional b3dm arraybuffer content\n * @returns {Promise}\n */\n load(url, arraybuffer, offset = 0, byteLength = 0, options) {\n if (arraybuffer) {\n return this._parse(url, arraybuffer, offset, byteLength, options);\n }\n return Ajax.getArrayBuffer(url, {}).then(response => {\n const cmpt = response.data;\n return this._parse(url, cmpt, offset, byteLength);\n });\n }\n\n _parse(url, cmpt, offset, byteLength, options) {\n if (!byteLength) {\n byteLength = cmpt.byteLength;\n }\n const tiles = this._readCMPT(cmpt, url, offset, byteLength);\n const promises = [];\n for (let i = 0; i < tiles.length; i++) {\n let loader;\n if (tiles[i].magic === 'b3dm') {\n loader = new B3DMLoader(this._requestImage, this._loaderCtor, this._supportedFormats);\n } else if (tiles[i].magic === 'i3dm') {\n loader = new I3DMLoader(this._requestImage, this._loaderCtor, this._supportedFormats, this._maxTextureSize);\n } else if (tiles[i].magic === 'pnts') {\n loader = new PNTSLoader();\n } else if (tiles[i].magic === 'cmpt') {\n loader = new CMPTLoader(this._requestImage, this._loaderCtor, this._supportedFormats, this._maxTextureSize);\n } else {\n // unsupported magic\n console.warn('Unsupported magic in CMPT tile:', tiles[i].magic);\n continue;\n }\n promises.push(loader.load(url, cmpt, tiles[i].offset, tiles[i].byteLength, options).then(data => {\n return data;\n }));\n }\n return Promise.all(promises).then(tiles => {\n return {\n magic: 'cmpt',\n tiles\n };\n });\n }\n\n /**\n * 解析b3dm数据,返回数据块:\n * 1. feature table\n * 2. batch table\n * 3. gltf\n * @param {ArrayBuffer} b3dm\n */\n _readCMPT(cmpt, url, byteOffset, byteLength) {\n const view = new DataView(cmpt, byteOffset, byteLength);\n const version = view.getUint32(4, true);\n if (version !== 1) {\n const info = 'Unsupported cmpt version: ' + version + ', url:' + url;\n console.warn(info);\n return { error: info };\n }\n // const length = view.getUint32(8, true);\n // if (length !== view.byteLength) {\n // const info = 'Length in cmpt header is inconsistent with cmpt\\'s byte length, url: ' + url;\n // console.warn(info);\n // return { error: info };\n // }\n if (view.byteLength === 16) {\n // an empty cmpt tile\n return [];\n }\n const tiles = [];\n const tilesLength = view.getUint32(12, true);\n // 16是CMPT的header长度\n const headerLength = 16;\n let offset = headerLength;\n for (let i = 0; i < tilesLength; i++) {\n const magic = readMagic(view, offset);\n const tileByteLength = view.getUint32(offset + 8, true);\n tiles.push({\n magic,\n buffer: cmpt,\n offset: offset + byteOffset,\n byteLength: tileByteLength\n });\n offset += tileByteLength;\n }\n return tiles;\n }\n}\n","import * as maptalks from 'maptalks';\nimport * as maptalksgl from '@maptalks/gl';\n\nimport chunk from './worker.js';\n\nif (maptalksgl.transcoders) {\n const version = maptalks.Map.VERSION;\n if (version.indexOf(\"1.0.0-beta\") >= 0 || version.indexOf(\"1.0.0-alpha\") >= 0) {\n const transcoderInjected = maptalksgl.transcoders.inject(chunk);\n maptalks.registerWorkerAdapter('@maptalks/3dtiles', transcoderInjected);\n } else {\n maptalks.registerWorkerAdapter('@maptalks/3dtiles', function () {\n const transcoderInjected = maptalksgl.transcoders.inject(chunk);\n return transcoderInjected;\n });\n }\n\n} else {\n maptalks.registerWorkerAdapter('@maptalks/3dtiles', chunk);\n}\n\nexport * from '../src/layer/index';\n"],"names":["e","colorName","isArrayish","require$$0","swizzle","simpleSwizzleModule","require$$1","colorStringModule","clamp","convert","conversionsModule","conversions","route","Color","canvas","GLTFLoader","getGLTFLoaderBundle","EPSILON14","sign","mathSign","IDENTITY_MATRIX","mat4","EMPTY_COORD_OFFSET","TEMP_POINT","TEMP_SCALING","quat","vec3","mat3","transcoders","Ajax","EMPTY_ARRAY","chunk"],"mappings":"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AC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC;;AChlCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACzC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACO,SAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE;AACnE,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1E,CAAC;AACD;AACA,MAAM,aAAa,GAAG,EAA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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,23,24]}