{"version":3,"file":"createVerticesFromGoogleEarthEnterpriseBuffer.js","sources":["../../../../Source/WorkersES6/createVerticesFromGoogleEarthEnterpriseBuffer.js"],"sourcesContent":["import AxisAlignedBoundingBox from \"../Core/AxisAlignedBoundingBox.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\n\nconst sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT;\nconst sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT;\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\nconst sizeOfFloat = Float32Array.BYTES_PER_ELEMENT;\nconst sizeOfDouble = Float64Array.BYTES_PER_ELEMENT;\n\nfunction indexOfEpsilon(arr, elem, elemType) {\n elemType = defaultValue(elemType, CesiumMath);\n const count = arr.length;\n for (let i = 0; i < count; ++i) {\n if (elemType.equalsEpsilon(arr[i], elem, CesiumMath.EPSILON12)) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction createVerticesFromGoogleEarthEnterpriseBuffer(\n parameters,\n transferableObjects\n) {\n parameters.ellipsoid = Ellipsoid.clone(parameters.ellipsoid);\n parameters.rectangle = Rectangle.clone(parameters.rectangle);\n\n const statistics = processBuffer(\n parameters.buffer,\n parameters.relativeToCenter,\n parameters.ellipsoid,\n parameters.rectangle,\n parameters.nativeRectangle,\n parameters.exaggeration,\n parameters.exaggerationRelativeHeight,\n parameters.skirtHeight,\n parameters.includeWebMercatorT,\n parameters.negativeAltitudeExponentBias,\n parameters.negativeElevationThreshold\n );\n const vertices = statistics.vertices;\n transferableObjects.push(vertices.buffer);\n const indices = statistics.indices;\n transferableObjects.push(indices.buffer);\n\n return {\n vertices: vertices.buffer,\n indices: indices.buffer,\n numberOfAttributes: statistics.encoding.stride,\n minimumHeight: statistics.minimumHeight,\n maximumHeight: statistics.maximumHeight,\n boundingSphere3D: statistics.boundingSphere3D,\n orientedBoundingBox: statistics.orientedBoundingBox,\n occludeePointInScaledSpace: statistics.occludeePointInScaledSpace,\n encoding: statistics.encoding,\n vertexCountWithoutSkirts: statistics.vertexCountWithoutSkirts,\n indexCountWithoutSkirts: statistics.indexCountWithoutSkirts,\n westIndicesSouthToNorth: statistics.westIndicesSouthToNorth,\n southIndicesEastToWest: statistics.southIndicesEastToWest,\n eastIndicesNorthToSouth: statistics.eastIndicesNorthToSouth,\n northIndicesWestToEast: statistics.northIndicesWestToEast,\n };\n}\n\nconst scratchCartographic = new Cartographic();\nconst scratchCartesian = new Cartesian3();\nconst minimumScratch = new Cartesian3();\nconst maximumScratch = new Cartesian3();\nconst matrix4Scratch = new Matrix4();\n\nfunction processBuffer(\n buffer,\n relativeToCenter,\n ellipsoid,\n rectangle,\n nativeRectangle,\n exaggeration,\n exaggerationRelativeHeight,\n skirtHeight,\n includeWebMercatorT,\n negativeAltitudeExponentBias,\n negativeElevationThreshold\n) {\n let geographicWest;\n let geographicSouth;\n let geographicEast;\n let geographicNorth;\n let rectangleWidth, rectangleHeight;\n\n if (!defined(rectangle)) {\n geographicWest = CesiumMath.toRadians(nativeRectangle.west);\n geographicSouth = CesiumMath.toRadians(nativeRectangle.south);\n geographicEast = CesiumMath.toRadians(nativeRectangle.east);\n geographicNorth = CesiumMath.toRadians(nativeRectangle.north);\n rectangleWidth = CesiumMath.toRadians(rectangle.width);\n rectangleHeight = CesiumMath.toRadians(rectangle.height);\n } else {\n geographicWest = rectangle.west;\n geographicSouth = rectangle.south;\n geographicEast = rectangle.east;\n geographicNorth = rectangle.north;\n rectangleWidth = rectangle.width;\n rectangleHeight = rectangle.height;\n }\n\n // Keep track of quad borders so we can remove duplicates around the borders\n const quadBorderLatitudes = [geographicSouth, geographicNorth];\n const quadBorderLongitudes = [geographicWest, geographicEast];\n\n const fromENU = Transforms.eastNorthUpToFixedFrame(\n relativeToCenter,\n ellipsoid\n );\n const toENU = Matrix4.inverseTransformation(fromENU, matrix4Scratch);\n\n let southMercatorY;\n let oneOverMercatorHeight;\n if (includeWebMercatorT) {\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n geographicSouth\n );\n oneOverMercatorHeight =\n 1.0 /\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) -\n southMercatorY);\n }\n\n const hasExaggeration = exaggeration !== 1.0;\n const includeGeodeticSurfaceNormals = hasExaggeration;\n\n const dv = new DataView(buffer);\n\n let minHeight = Number.POSITIVE_INFINITY;\n let maxHeight = Number.NEGATIVE_INFINITY;\n\n const minimum = minimumScratch;\n minimum.x = Number.POSITIVE_INFINITY;\n minimum.y = Number.POSITIVE_INFINITY;\n minimum.z = Number.POSITIVE_INFINITY;\n\n const maximum = maximumScratch;\n maximum.x = Number.NEGATIVE_INFINITY;\n maximum.y = Number.NEGATIVE_INFINITY;\n maximum.z = Number.NEGATIVE_INFINITY;\n\n // Compute sizes\n let offset = 0;\n let size = 0;\n let indicesSize = 0;\n let quadSize;\n let quad;\n for (quad = 0; quad < 4; ++quad) {\n let o = offset;\n quadSize = dv.getUint32(o, true);\n o += sizeOfUint32;\n\n const x = CesiumMath.toRadians(dv.getFloat64(o, true) * 180.0);\n o += sizeOfDouble;\n if (indexOfEpsilon(quadBorderLongitudes, x) === -1) {\n quadBorderLongitudes.push(x);\n }\n\n const y = CesiumMath.toRadians(dv.getFloat64(o, true) * 180.0);\n o += sizeOfDouble;\n if (indexOfEpsilon(quadBorderLatitudes, y) === -1) {\n quadBorderLatitudes.push(y);\n }\n\n o += 2 * sizeOfDouble; // stepX + stepY\n\n let c = dv.getInt32(o, true); // Read point count\n o += sizeOfInt32;\n size += c;\n\n c = dv.getInt32(o, true); // Read index count\n indicesSize += c * 3;\n\n offset += quadSize + sizeOfUint32; // Jump to next quad\n }\n\n // Quad Border points to remove duplicates\n const quadBorderPoints = [];\n const quadBorderIndices = [];\n\n // Create arrays\n const positions = new Array(size);\n const uvs = new Array(size);\n const heights = new Array(size);\n const webMercatorTs = includeWebMercatorT ? new Array(size) : [];\n const geodeticSurfaceNormals = includeGeodeticSurfaceNormals\n ? new Array(size)\n : [];\n const indices = new Array(indicesSize);\n\n // Points are laid out in rows starting at SW, so storing border points as we\n // come across them all points will be adjacent.\n const westBorder = [];\n const southBorder = [];\n const eastBorder = [];\n const northBorder = [];\n\n // Each tile is split into 4 parts\n let pointOffset = 0;\n let indicesOffset = 0;\n offset = 0;\n for (quad = 0; quad < 4; ++quad) {\n quadSize = dv.getUint32(offset, true);\n offset += sizeOfUint32;\n const startQuad = offset;\n\n const originX = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n offset += sizeOfDouble;\n\n const originY = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n offset += sizeOfDouble;\n\n const stepX = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n const halfStepX = stepX * 0.5;\n offset += sizeOfDouble;\n\n const stepY = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n const halfStepY = stepY * 0.5;\n offset += sizeOfDouble;\n\n const numPoints = dv.getInt32(offset, true);\n offset += sizeOfInt32;\n\n const numFaces = dv.getInt32(offset, true);\n offset += sizeOfInt32;\n\n //const level = dv.getInt32(offset, true);\n offset += sizeOfInt32;\n\n // Keep track of quad indices to overall tile indices\n const indicesMapping = new Array(numPoints);\n for (let i = 0; i < numPoints; ++i) {\n const longitude = originX + dv.getUint8(offset++) * stepX;\n scratchCartographic.longitude = longitude;\n const latitude = originY + dv.getUint8(offset++) * stepY;\n scratchCartographic.latitude = latitude;\n\n let height = dv.getFloat32(offset, true);\n offset += sizeOfFloat;\n\n // In order to support old clients, negative altitude values are stored as\n // height/-2^32. Old clients see the value as really close to 0 but new clients multiply\n // by -2^32 to get the real negative altitude value.\n if (height !== 0 && height < negativeElevationThreshold) {\n height *= -Math.pow(2, negativeAltitudeExponentBias);\n }\n\n // Height is stored in units of (1/EarthRadius) or (1/6371010.0)\n height *= 6371010.0;\n\n scratchCartographic.height = height;\n\n // Is it along a quad border - if so check if already exists and use that index\n if (\n indexOfEpsilon(quadBorderLongitudes, longitude) !== -1 ||\n indexOfEpsilon(quadBorderLatitudes, latitude) !== -1\n ) {\n const index = indexOfEpsilon(\n quadBorderPoints,\n scratchCartographic,\n Cartographic\n );\n if (index === -1) {\n quadBorderPoints.push(Cartographic.clone(scratchCartographic));\n quadBorderIndices.push(pointOffset);\n } else {\n indicesMapping[i] = quadBorderIndices[index];\n continue;\n }\n }\n indicesMapping[i] = pointOffset;\n\n if (Math.abs(longitude - geographicWest) < halfStepX) {\n westBorder.push({\n index: pointOffset,\n cartographic: Cartographic.clone(scratchCartographic),\n });\n } else if (Math.abs(longitude - geographicEast) < halfStepX) {\n eastBorder.push({\n index: pointOffset,\n cartographic: Cartographic.clone(scratchCartographic),\n });\n } else if (Math.abs(latitude - geographicSouth) < halfStepY) {\n southBorder.push({\n index: pointOffset,\n cartographic: Cartographic.clone(scratchCartographic),\n });\n } else if (Math.abs(latitude - geographicNorth) < halfStepY) {\n northBorder.push({\n index: pointOffset,\n cartographic: Cartographic.clone(scratchCartographic),\n });\n }\n\n minHeight = Math.min(height, minHeight);\n maxHeight = Math.max(height, maxHeight);\n heights[pointOffset] = height;\n\n const pos = ellipsoid.cartographicToCartesian(scratchCartographic);\n positions[pointOffset] = pos;\n\n if (includeWebMercatorT) {\n webMercatorTs[pointOffset] =\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\n southMercatorY) *\n oneOverMercatorHeight;\n }\n\n if (includeGeodeticSurfaceNormals) {\n const normal = ellipsoid.geodeticSurfaceNormal(pos);\n geodeticSurfaceNormals[pointOffset] = normal;\n }\n\n Matrix4.multiplyByPoint(toENU, pos, scratchCartesian);\n\n Cartesian3.minimumByComponent(scratchCartesian, minimum, minimum);\n Cartesian3.maximumByComponent(scratchCartesian, maximum, maximum);\n\n let u = (longitude - geographicWest) / (geographicEast - geographicWest);\n u = CesiumMath.clamp(u, 0.0, 1.0);\n let v =\n (latitude - geographicSouth) / (geographicNorth - geographicSouth);\n v = CesiumMath.clamp(v, 0.0, 1.0);\n\n uvs[pointOffset] = new Cartesian2(u, v);\n ++pointOffset;\n }\n\n const facesElementCount = numFaces * 3;\n for (let j = 0; j < facesElementCount; ++j, ++indicesOffset) {\n indices[indicesOffset] = indicesMapping[dv.getUint16(offset, true)];\n offset += sizeOfUint16;\n }\n\n if (quadSize !== offset - startQuad) {\n throw new RuntimeError(\"Invalid terrain tile.\");\n }\n }\n\n positions.length = pointOffset;\n uvs.length = pointOffset;\n heights.length = pointOffset;\n if (includeWebMercatorT) {\n webMercatorTs.length = pointOffset;\n }\n if (includeGeodeticSurfaceNormals) {\n geodeticSurfaceNormals.length = pointOffset;\n }\n\n const vertexCountWithoutSkirts = pointOffset;\n const indexCountWithoutSkirts = indicesOffset;\n\n // Add skirt points\n const skirtOptions = {\n hMin: minHeight,\n lastBorderPoint: undefined,\n skirtHeight: skirtHeight,\n toENU: toENU,\n ellipsoid: ellipsoid,\n minimum: minimum,\n maximum: maximum,\n };\n\n // Sort counter clockwise from NW corner\n // Corner points are in the east/west arrays\n westBorder.sort(function (a, b) {\n return b.cartographic.latitude - a.cartographic.latitude;\n });\n southBorder.sort(function (a, b) {\n return a.cartographic.longitude - b.cartographic.longitude;\n });\n eastBorder.sort(function (a, b) {\n return a.cartographic.latitude - b.cartographic.latitude;\n });\n northBorder.sort(function (a, b) {\n return b.cartographic.longitude - a.cartographic.longitude;\n });\n\n const percentage = 0.00001;\n addSkirt(\n positions,\n heights,\n uvs,\n webMercatorTs,\n geodeticSurfaceNormals,\n indices,\n skirtOptions,\n westBorder,\n -percentage * rectangleWidth,\n true,\n -percentage * rectangleHeight\n );\n addSkirt(\n positions,\n heights,\n uvs,\n webMercatorTs,\n geodeticSurfaceNormals,\n indices,\n skirtOptions,\n southBorder,\n -percentage * rectangleHeight,\n false\n );\n addSkirt(\n positions,\n heights,\n uvs,\n webMercatorTs,\n geodeticSurfaceNormals,\n indices,\n skirtOptions,\n eastBorder,\n percentage * rectangleWidth,\n true,\n percentage * rectangleHeight\n );\n addSkirt(\n positions,\n heights,\n uvs,\n webMercatorTs,\n geodeticSurfaceNormals,\n indices,\n skirtOptions,\n northBorder,\n percentage * rectangleHeight,\n false\n );\n\n // Since the corner between the north and west sides is in the west array, generate the last\n // two triangles between the last north vertex and the first west vertex\n if (westBorder.length > 0 && northBorder.length > 0) {\n const firstBorderIndex = westBorder[0].index;\n const firstSkirtIndex = vertexCountWithoutSkirts;\n const lastBorderIndex = northBorder[northBorder.length - 1].index;\n const lastSkirtIndex = positions.length - 1;\n\n indices.push(\n lastBorderIndex,\n lastSkirtIndex,\n firstSkirtIndex,\n firstSkirtIndex,\n firstBorderIndex,\n lastBorderIndex\n );\n }\n\n size = positions.length; // Get new size with skirt vertices\n\n const boundingSphere3D = BoundingSphere.fromPoints(positions);\n let orientedBoundingBox;\n if (defined(rectangle)) {\n orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minHeight,\n maxHeight,\n ellipsoid\n );\n }\n\n const occluder = new EllipsoidalOccluder(ellipsoid);\n const occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n relativeToCenter,\n positions,\n minHeight\n );\n\n const aaBox = new AxisAlignedBoundingBox(minimum, maximum, relativeToCenter);\n const encoding = new TerrainEncoding(\n relativeToCenter,\n aaBox,\n skirtOptions.hMin,\n maxHeight,\n fromENU,\n false,\n includeWebMercatorT,\n includeGeodeticSurfaceNormals,\n exaggeration,\n exaggerationRelativeHeight\n );\n const vertices = new Float32Array(size * encoding.stride);\n\n let bufferIndex = 0;\n for (let k = 0; k < size; ++k) {\n bufferIndex = encoding.encode(\n vertices,\n bufferIndex,\n positions[k],\n uvs[k],\n heights[k],\n undefined,\n webMercatorTs[k],\n geodeticSurfaceNormals[k]\n );\n }\n\n const westIndicesSouthToNorth = westBorder\n .map(function (vertex) {\n return vertex.index;\n })\n .reverse();\n const southIndicesEastToWest = southBorder\n .map(function (vertex) {\n return vertex.index;\n })\n .reverse();\n const eastIndicesNorthToSouth = eastBorder\n .map(function (vertex) {\n return vertex.index;\n })\n .reverse();\n const northIndicesWestToEast = northBorder\n .map(function (vertex) {\n return vertex.index;\n })\n .reverse();\n\n southIndicesEastToWest.unshift(\n eastIndicesNorthToSouth[eastIndicesNorthToSouth.length - 1]\n );\n southIndicesEastToWest.push(westIndicesSouthToNorth[0]);\n\n northIndicesWestToEast.unshift(\n westIndicesSouthToNorth[westIndicesSouthToNorth.length - 1]\n );\n northIndicesWestToEast.push(eastIndicesNorthToSouth[0]);\n\n return {\n vertices: vertices,\n indices: new Uint16Array(indices),\n maximumHeight: maxHeight,\n minimumHeight: minHeight,\n encoding: encoding,\n boundingSphere3D: boundingSphere3D,\n orientedBoundingBox: orientedBoundingBox,\n occludeePointInScaledSpace: occludeePointInScaledSpace,\n vertexCountWithoutSkirts: vertexCountWithoutSkirts,\n indexCountWithoutSkirts: indexCountWithoutSkirts,\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n };\n}\n\nfunction addSkirt(\n positions,\n heights,\n uvs,\n webMercatorTs,\n geodeticSurfaceNormals,\n indices,\n skirtOptions,\n borderPoints,\n fudgeFactor,\n eastOrWest,\n cornerFudge\n) {\n const count = borderPoints.length;\n for (let j = 0; j < count; ++j) {\n const borderPoint = borderPoints[j];\n const borderCartographic = borderPoint.cartographic;\n const borderIndex = borderPoint.index;\n const currentIndex = positions.length;\n\n const longitude = borderCartographic.longitude;\n let latitude = borderCartographic.latitude;\n latitude = CesiumMath.clamp(\n latitude,\n -CesiumMath.PI_OVER_TWO,\n CesiumMath.PI_OVER_TWO\n ); // Don't go over the poles\n const height = borderCartographic.height - skirtOptions.skirtHeight;\n skirtOptions.hMin = Math.min(skirtOptions.hMin, height);\n\n Cartographic.fromRadians(longitude, latitude, height, scratchCartographic);\n\n // Adjust sides to angle out\n if (eastOrWest) {\n scratchCartographic.longitude += fudgeFactor;\n }\n\n // Adjust top or bottom to angle out\n // Since corners are in the east/west arrays angle the first and last points as well\n if (!eastOrWest) {\n scratchCartographic.latitude += fudgeFactor;\n } else if (j === count - 1) {\n scratchCartographic.latitude += cornerFudge;\n } else if (j === 0) {\n scratchCartographic.latitude -= cornerFudge;\n }\n\n const pos = skirtOptions.ellipsoid.cartographicToCartesian(\n scratchCartographic\n );\n positions.push(pos);\n heights.push(height);\n uvs.push(Cartesian2.clone(uvs[borderIndex])); // Copy UVs from border point\n if (webMercatorTs.length > 0) {\n webMercatorTs.push(webMercatorTs[borderIndex]);\n }\n if (geodeticSurfaceNormals.length > 0) {\n geodeticSurfaceNormals.push(geodeticSurfaceNormals[borderIndex]);\n }\n\n Matrix4.multiplyByPoint(skirtOptions.toENU, pos, scratchCartesian);\n\n const minimum = skirtOptions.minimum;\n const maximum = skirtOptions.maximum;\n Cartesian3.minimumByComponent(scratchCartesian, minimum, minimum);\n Cartesian3.maximumByComponent(scratchCartesian, maximum, maximum);\n\n const lastBorderPoint = skirtOptions.lastBorderPoint;\n if (defined(lastBorderPoint)) {\n const lastBorderIndex = lastBorderPoint.index;\n indices.push(\n lastBorderIndex,\n currentIndex - 1,\n currentIndex,\n currentIndex,\n borderIndex,\n lastBorderIndex\n );\n }\n\n skirtOptions.lastBorderPoint = borderPoint;\n }\n}\nexport default createTaskProcessorWorker(\n createVerticesFromGoogleEarthEnterpriseBuffer\n);\n"],"names":["defaultValue","CesiumMath","Ellipsoid","Rectangle","Cartographic","Cartesian3","Matrix4","defined","Transforms","WebMercatorProjection","Cartesian2","RuntimeError","BoundingSphere","OrientedBoundingBox","EllipsoidalOccluder","AxisAlignedBoundingBox","TerrainEncoding"],"mappings":"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"}