{"version":3,"file":"WallGeometryLibrary-a5c492d8.js","sources":["../../../../Source/Core/WallGeometryLibrary.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\n\n/**\n * @private\n */\nconst WallGeometryLibrary = {};\n\nfunction latLonEquals(c0, c1) {\n  return (\n    CesiumMath.equalsEpsilon(c0.latitude, c1.latitude, CesiumMath.EPSILON10) &&\n    CesiumMath.equalsEpsilon(c0.longitude, c1.longitude, CesiumMath.EPSILON10)\n  );\n}\n\nconst scratchCartographic1 = new Cartographic();\nconst scratchCartographic2 = new Cartographic();\nfunction removeDuplicates(ellipsoid, positions, topHeights, bottomHeights) {\n  positions = arrayRemoveDuplicates(positions, Cartesian3.equalsEpsilon);\n\n  const length = positions.length;\n  if (length < 2) {\n    return;\n  }\n\n  const hasBottomHeights = defined(bottomHeights);\n  const hasTopHeights = defined(topHeights);\n\n  const cleanedPositions = new Array(length);\n  const cleanedTopHeights = new Array(length);\n  const cleanedBottomHeights = new Array(length);\n\n  const v0 = positions[0];\n  cleanedPositions[0] = v0;\n\n  const c0 = ellipsoid.cartesianToCartographic(v0, scratchCartographic1);\n  if (hasTopHeights) {\n    c0.height = topHeights[0];\n  }\n\n  cleanedTopHeights[0] = c0.height;\n\n  if (hasBottomHeights) {\n    cleanedBottomHeights[0] = bottomHeights[0];\n  } else {\n    cleanedBottomHeights[0] = 0.0;\n  }\n\n  const startTopHeight = cleanedTopHeights[0];\n  const startBottomHeight = cleanedBottomHeights[0];\n  let hasAllSameHeights = startTopHeight === startBottomHeight;\n\n  let index = 1;\n  for (let i = 1; i < length; ++i) {\n    const v1 = positions[i];\n    const c1 = ellipsoid.cartesianToCartographic(v1, scratchCartographic2);\n    if (hasTopHeights) {\n      c1.height = topHeights[i];\n    }\n    hasAllSameHeights = hasAllSameHeights && c1.height === 0;\n\n    if (!latLonEquals(c0, c1)) {\n      cleanedPositions[index] = v1; // Shallow copy!\n      cleanedTopHeights[index] = c1.height;\n\n      if (hasBottomHeights) {\n        cleanedBottomHeights[index] = bottomHeights[i];\n      } else {\n        cleanedBottomHeights[index] = 0.0;\n      }\n      hasAllSameHeights =\n        hasAllSameHeights &&\n        cleanedTopHeights[index] === cleanedBottomHeights[index];\n\n      Cartographic.clone(c1, c0);\n      ++index;\n    } else if (c0.height < c1.height) {\n      // two adjacent positions are the same, so use whichever has the greater height\n      cleanedTopHeights[index - 1] = c1.height;\n    }\n  }\n\n  if (hasAllSameHeights || index < 2) {\n    return;\n  }\n\n  cleanedPositions.length = index;\n  cleanedTopHeights.length = index;\n  cleanedBottomHeights.length = index;\n\n  return {\n    positions: cleanedPositions,\n    topHeights: cleanedTopHeights,\n    bottomHeights: cleanedBottomHeights,\n  };\n}\n\nconst positionsArrayScratch = new Array(2);\nconst heightsArrayScratch = new Array(2);\nconst generateArcOptionsScratch = {\n  positions: undefined,\n  height: undefined,\n  granularity: undefined,\n  ellipsoid: undefined,\n};\n\n/**\n * @private\n */\nWallGeometryLibrary.computePositions = function (\n  ellipsoid,\n  wallPositions,\n  maximumHeights,\n  minimumHeights,\n  granularity,\n  duplicateCorners\n) {\n  const o = removeDuplicates(\n    ellipsoid,\n    wallPositions,\n    maximumHeights,\n    minimumHeights\n  );\n\n  if (!defined(o)) {\n    return;\n  }\n\n  wallPositions = o.positions;\n  maximumHeights = o.topHeights;\n  minimumHeights = o.bottomHeights;\n\n  const length = wallPositions.length;\n  const numCorners = length - 2;\n  let topPositions;\n  let bottomPositions;\n\n  const minDistance = CesiumMath.chordLength(\n    granularity,\n    ellipsoid.maximumRadius\n  );\n\n  const generateArcOptions = generateArcOptionsScratch;\n  generateArcOptions.minDistance = minDistance;\n  generateArcOptions.ellipsoid = ellipsoid;\n\n  if (duplicateCorners) {\n    let count = 0;\n    let i;\n\n    for (i = 0; i < length - 1; i++) {\n      count +=\n        PolylinePipeline.numberOfPoints(\n          wallPositions[i],\n          wallPositions[i + 1],\n          minDistance\n        ) + 1;\n    }\n\n    topPositions = new Float64Array(count * 3);\n    bottomPositions = new Float64Array(count * 3);\n\n    const generateArcPositions = positionsArrayScratch;\n    const generateArcHeights = heightsArrayScratch;\n    generateArcOptions.positions = generateArcPositions;\n    generateArcOptions.height = generateArcHeights;\n\n    let offset = 0;\n    for (i = 0; i < length - 1; i++) {\n      generateArcPositions[0] = wallPositions[i];\n      generateArcPositions[1] = wallPositions[i + 1];\n\n      generateArcHeights[0] = maximumHeights[i];\n      generateArcHeights[1] = maximumHeights[i + 1];\n\n      const pos = PolylinePipeline.generateArc(generateArcOptions);\n      topPositions.set(pos, offset);\n\n      generateArcHeights[0] = minimumHeights[i];\n      generateArcHeights[1] = minimumHeights[i + 1];\n\n      bottomPositions.set(\n        PolylinePipeline.generateArc(generateArcOptions),\n        offset\n      );\n\n      offset += pos.length;\n    }\n  } else {\n    generateArcOptions.positions = wallPositions;\n    generateArcOptions.height = maximumHeights;\n    topPositions = new Float64Array(\n      PolylinePipeline.generateArc(generateArcOptions)\n    );\n\n    generateArcOptions.height = minimumHeights;\n    bottomPositions = new Float64Array(\n      PolylinePipeline.generateArc(generateArcOptions)\n    );\n  }\n\n  return {\n    bottomPositions: bottomPositions,\n    topPositions: topPositions,\n    numCorners: numCorners,\n  };\n};\nexport default WallGeometryLibrary;\n"],"names":["CesiumMath","Cartographic","arrayRemoveDuplicates","Cartesian3","defined","PolylinePipeline"],"mappings":"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"}