leaflet-city-mapper 0.0.4 → 0.0.6
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.
- package/README.md +23 -11
- package/cucumber.mjs +9 -9
- package/dist/leaflet-city-mapper-src.js +3546 -2493
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker-src.js +955 -0
- package/dist/leaflet-city-mapper-worker-src.js.map +7 -0
- package/dist/leaflet-city-mapper-worker.js +2 -0
- package/dist/leaflet-city-mapper-worker.js.map +7 -0
- package/dist/leaflet-city-mapper.js +3 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +15 -3
- package/libs/leaflet.js +1 -1
- package/package.json +3 -2
- package/src/{camera → animations}/cancelCameraAnimation.js +5 -3
- package/src/{core → animations}/cancelGridFade.js +3 -2
- package/src/animations/endZoom.js +27 -0
- package/src/{camera → animations}/mapAnimateCamera.js +7 -5
- package/src/{scene → animations}/onZoomAnim.js +5 -4
- package/src/{scene → animations}/renderPendingZoomAnimation.js +4 -2
- package/src/{camera → animations}/runCameraAnimations.js +8 -6
- package/src/{core → animations}/runGridFades.js +4 -3
- package/src/{camera → animations}/scheduleCameraAnimation.js +3 -2
- package/src/animations/scheduleGridFade.js +16 -0
- package/src/{scene → animations}/startZoom.js +3 -2
- package/src/{rendering → animations}/synchronizeZoomView.js +10 -8
- package/src/{rendering → animations}/updateZoomCamera.js +11 -8
- package/src/archives/decodeDirectory.js +1 -1
- package/src/archives/findTile.js +3 -3
- package/src/archives/getDirectoryEntries.js +5 -4
- package/src/archives/getHeader.js +10 -6
- package/src/archives/getTileData.js +3 -3
- package/src/archives/getZxy.js +8 -7
- package/src/archives/loadDirectory.js +3 -3
- package/src/archives/loadSource.js +3 -2
- package/src/archives/{read.js → readArchiveRange.js} +7 -5
- package/src/camera/cameraMapReady.js +3 -2
- package/src/camera/cleanupCameraMap.js +8 -6
- package/src/camera/fitCameraBounds.js +3 -3
- package/src/camera/initializeCameraMap.js +6 -4
- package/src/camera/mapCamera.js +1 -1
- package/src/camera/mapContainerPointToLayerPoint.js +2 -2
- package/src/camera/mapGetBearing.js +3 -2
- package/src/camera/mapGetBounds.js +2 -2
- package/src/camera/mapGetBoundsZoom.js +2 -2
- package/src/camera/mapGetPitch.js +3 -2
- package/src/camera/mapLayerPointToContainerPoint.js +2 -2
- package/src/camera/mapLimitCenter.js +1 -1
- package/src/camera/mapLimitOffset.js +1 -1
- package/src/camera/mapPanBy.js +2 -2
- package/src/camera/mapPanInside.js +1 -1
- package/src/camera/mapResetNorthPitch.js +1 -1
- package/src/camera/mapSetBearing.js +1 -1
- package/src/camera/mapSetPitch.js +1 -1
- package/src/camera/mapSetPitchAndBearing.js +5 -3
- package/src/{rendering → camera}/updateMapCamera.js +19 -15
- package/src/{scene/updateCamera.js → camera/updateSceneCamera.js} +1 -1
- package/src/camera/updateSky.js +10 -9
- package/src/collision/collectIntersections.js +16 -0
- package/src/collision/collider.js +24 -9
- package/src/collision/countCrossings.js +15 -0
- package/src/collision/insideMesh.js +33 -0
- package/src/collision/insideWalker.js +46 -0
- package/src/collision/readTriangle.js +7 -4
- package/src/collision/setTrafficNormal.js +9 -0
- package/src/collision/trafficCollision.js +55 -0
- package/src/collision/vertexCount.js +3 -0
- package/src/{utils → colors}/parseColor.js +1 -1
- package/src/controls/addCameraHandler.js +5 -3
- package/src/controls/adjustCameraDrag.js +4 -3
- package/src/controls/cameraControls.js +14 -5
- package/src/controls/cameraDragClick.js +7 -7
- package/src/controls/cameraDragContextMenu.js +1 -1
- package/src/controls/cameraDragDown.js +2 -2
- package/src/controls/cameraDragEnd.js +1 -1
- package/src/controls/cameraDragMove.js +2 -2
- package/src/controls/changeCameraTouch.js +6 -3
- package/src/controls/cleanupCameraTouch.js +7 -5
- package/src/controls/dragCamera.js +1 -1
- package/src/controls/endCameraTouchEvent.js +1 -1
- package/src/controls/moveCameraTouch.js +5 -3
- package/src/controls/removeCameraDrag.js +1 -1
- package/src/controls/shiftRotateWheel.js +1 -1
- package/src/controls/startCameraTouch.js +6 -4
- package/src/core/adjustCameraMarkerPan.js +3 -3
- package/src/core/cameraCircleBounds.js +1 -1
- package/src/core/cameraMarkerDrag.js +1 -1
- package/src/core/cameraMarkerOnDrag.js +1 -1
- package/src/core/closestCameraLayerPoint.js +1 -1
- package/src/core/initializeGridContainer.js +1 -1
- package/src/core/initializeNativeLayer.js +9 -8
- package/src/core/layerCallInitHooks.js +4 -3
- package/src/core/markerSetIcon.js +1 -1
- package/src/core/markerSetPos.js +2 -2
- package/src/core/markerSetRotation.js +1 -1
- package/src/core/markerUpdateZIndex.js +5 -4
- package/src/core/popupAdjustPan.js +1 -1
- package/src/core/popupUpdatePosition.js +1 -1
- package/src/core/redrawPath.js +1 -1
- package/src/core/removeLayer.js +4 -3
- package/src/core/tooltipSetPosition.js +1 -1
- package/src/core/updateGridOpacity.js +3 -3
- package/src/core/whenReady.js +11 -0
- package/src/geometry/addBridges.js +13 -8
- package/src/{sources → geometry}/addGeneratedTriangle.js +1 -1
- package/src/{sources/addTriangle.js → geometry/appendAreaTriangle.js} +5 -5
- package/src/geometry/assembleAreaGeometry.js +41 -0
- package/src/{core → geometry}/boundsQuad.js +1 -1
- package/src/geometry/bridgePolygon.js +3 -3
- package/src/geometry/buildExtrudedPolygon.js +10 -0
- package/src/geometry/buildProjectedPoint.js +21 -0
- package/src/{sources/buildAreaPolygon.js → geometry/buildProjectedPolygon.js} +25 -29
- package/src/geometry/circleGeometry.js +1 -1
- package/src/geometry/computeBounds.js +19 -8
- package/src/geometry/conformModelToTerrain.js +17 -11
- package/src/{models → geometry}/createModelGeometry.js +5 -4
- package/src/geometry/disk.js +1 -1
- package/src/geometry/indexBridge.js +5 -4
- package/src/geometry/lampPostGeometry.js +2 -2
- package/src/geometry/lightGeometry.js +1 -1
- package/src/geometry/lineJoin.js +1 -1
- package/src/{core → geometry}/markerQuadCorners.js +9 -6
- package/src/geometry/nativeGeometry.js +1 -1
- package/src/geometry/polygon.js +1 -1
- package/src/geometry/roofCoverage.js +11 -8
- package/src/geometry/roofFootprint.js +13 -10
- package/src/geometry/segment.js +1 -1
- package/src/{shadows → geometry}/shadowBounds.js +1 -1
- package/src/geometry/surface.js +1 -1
- package/src/{terrain → geometry}/terrainBuffers.js +7 -5
- package/src/geometry/terrainTileGeometry.js +19 -0
- package/src/geometry/treeGeometry.js +2 -2
- package/src/globals/geometryWorkerUrl.js +3 -0
- package/src/globals/nativeMethodHandlers.js +14 -14
- package/src/{scene → gpu}/initializeRendererResources.js +10 -9
- package/src/gpu/initializeSharedRenderer.js +52 -0
- package/src/gpu/mountRenderer.js +26 -0
- package/src/{scene → gpu}/releaseRenderer.js +2 -2
- package/src/gpu/rendererDeviceError.js +16 -0
- package/src/gpu/rendererDeviceLost.js +16 -0
- package/src/{rendering/reportCompilation.js → gpu/reportShaderCompilation.js} +3 -3
- package/src/gpu/requestAdapter.js +12 -0
- package/src/gpu/requestDevice.js +9 -0
- package/src/index.js +8 -13
- package/src/layer-controls/layerCountTitle.js +6 -0
- package/src/layer-controls/renderLayerCount.js +20 -0
- package/src/{scene → layer-controls}/updateLayerCount.js +24 -22
- package/src/lighting/lightGrid.js +1 -1
- package/src/lighting/updatePointLights.js +13 -10
- package/src/{rendering → materials}/createProgram.js +13 -12
- package/src/{models/materialFor.js → materials/modelMaterialFor.js} +3 -3
- package/src/materials/terrainRasterProgram.js +58 -0
- package/src/models/applyModelTransform.js +8 -7
- package/src/models/createModelContext.js +3 -3
- package/src/models/loadModel.js +17 -12
- package/src/models/loadModelResources.js +7 -6
- package/src/models/modelNode.js +4 -5
- package/src/{core → native}/disposeNativeLayer.js +10 -10
- package/src/{core → native}/handleNativeMapEvent.js +5 -4
- package/src/{core → native}/initNativeGPU.js +9 -6
- package/src/native/isCurrentNativeLayer.js +7 -0
- package/src/{core → native}/nativeEventSource.js +3 -3
- package/src/{core → native}/nativeEvents.js +1 -1
- package/src/{core → native}/nativeLayer.js +16 -37
- package/src/{core → native}/nativeLayerMethod.js +14 -5
- package/src/{core → native}/pruneNativeResources.js +5 -5
- package/src/{core → native}/putNativeMesh.js +3 -3
- package/src/{core → native}/quadNativeMesh.js +1 -1
- package/src/native/readyNativeGPU.js +10 -0
- package/src/{core → native}/refreshNativeLayer.js +8 -7
- package/src/{core → native}/refreshNativeLayerContract.js +3 -2
- package/src/{core → native}/removeNativeEvents.js +1 -1
- package/src/{core → native}/removeTargets.js +3 -2
- package/src/native/reorderNativeLayer.js +17 -0
- package/src/{core → native}/styleNativeMesh.js +3 -2
- package/src/{core → native}/syncGridLayer.js +1 -1
- package/src/{core → native}/syncImageOverlay.js +1 -1
- package/src/{core → native}/syncMarker.js +1 -1
- package/src/{core → native}/syncVectorLayer.js +2 -2
- package/src/{core → native}/synchronizeNativeLayer.js +4 -3
- package/src/native/updateNativeLayerView.js +10 -0
- package/src/picking/findFeature.js +13 -9
- package/src/picking/hit.js +16 -8
- package/src/picking/onClick.js +3 -2
- package/src/picking/onPointerLeave.js +3 -2
- package/src/picking/onPointerMove.js +12 -6
- package/src/picking/raycast.js +29 -24
- package/src/picking/setHighlight.js +9 -8
- package/src/picking/shouldSkipOther.js +3 -2
- package/src/picking/showFeature.js +19 -14
- package/src/{camera/angles.js → projections/cameraAngles.js} +2 -2
- package/src/{camera → projections}/groundBounds.js +2 -2
- package/src/projections/localPosition.js +11 -0
- package/src/{camera/project.js → projections/projectCameraPoint.js} +2 -2
- package/src/{sources → projections}/projectRing.js +8 -9
- package/src/projections/projectTreePoint.js +17 -0
- package/src/{camera/animationPoint.js → projections/transformZoomAnimationPoint.js} +3 -2
- package/src/projections/walkerLocalPosition.js +18 -0
- package/src/raster/addRasterTile.js +38 -28
- package/src/raster/createRasterMesh.js +24 -19
- package/src/raster/finishRasterAttachment.js +17 -0
- package/src/raster/finishRasterTile.js +22 -19
- package/src/raster/initRaster.js +24 -15
- package/src/raster/isRasterLoading.js +8 -0
- package/src/raster/loadRasterTile.js +8 -7
- package/src/raster/onPMTileAdd.js +9 -8
- package/src/raster/onPMTileRemove.js +6 -5
- package/src/raster/pruneRasterTiles.js +19 -13
- package/src/raster/pumpRasterTiles.js +8 -6
- package/src/raster/readyRaster.js +3 -2
- package/src/raster/registerTerrainTile.js +8 -6
- package/src/raster/releaseRasterTile.js +14 -11
- package/src/raster/releaseRasterTiles.js +13 -10
- package/src/raster/removeRasterTile.js +8 -6
- package/src/raster/retainRasterTiles.js +5 -4
- package/src/raster/setPMTileOpacity.js +4 -4
- package/src/raster/setPMTileZIndex.js +4 -4
- package/src/raster/setRasterOpacity.js +8 -6
- package/src/raster/setRasterTerrain.js +12 -9
- package/src/raster/setRasterZIndex.js +8 -6
- package/src/raster/updateAttachedTiles.js +6 -5
- package/src/raster/updateRasterTiles.js +20 -15
- package/src/rendering/collectFrameMeshes.js +16 -9
- package/src/rendering/collectVisibleMesh.js +18 -9
- package/src/rendering/createMesh.js +11 -9
- package/src/rendering/disposeMesh.js +3 -3
- package/src/rendering/drawGeometry.js +9 -7
- package/src/rendering/drawSceneMeshes.js +9 -7
- package/src/rendering/prepareFrameBuffer.js +6 -5
- package/src/rendering/prepareFrameMeshes.js +9 -6
- package/src/rendering/prepareFrameUniforms.js +9 -6
- package/src/rendering/prepareMeshUniforms.js +1 -1
- package/src/rendering/render.js +39 -32
- package/src/rendering/resizeRenderer.js +17 -15
- package/src/rendering/revealRoofMesh.js +25 -6
- package/src/scene/{layerLayerAdd.js → addRegisteredLayer.js} +13 -9
- package/src/scene/addSceneLayer.js +4 -3
- package/src/scene/attachLayer.js +7 -6
- package/src/scene/attachSharedScene.js +69 -0
- package/src/scene/callLayer.js +7 -5
- package/src/scene/cancelUpdate.js +6 -5
- package/src/scene/failAttachment.js +6 -5
- package/src/scene/get3DEvents.js +5 -3
- package/src/scene/getLocation.js +3 -2
- package/src/scene/init3D.js +28 -26
- package/src/scene/initializeLayer.js +6 -4
- package/src/scene/isNativeLayer.js +3 -2
- package/src/scene/layerInitialize.js +11 -6
- package/src/scene/onAdd3DLayer.js +30 -24
- package/src/scene/onMapChange.js +5 -4
- package/src/scene/onRemove3DLayer.js +53 -35
- package/src/scene/ready3D.js +22 -13
- package/src/scene/releaseSharedScene.js +31 -25
- package/src/scene/removeLayerEvents.js +12 -9
- package/src/scene/removeSceneLayer.js +3 -2
- package/src/scene/renderPendingMapChange.js +7 -4
- package/src/scene/renderPendingUpdates.js +9 -6
- package/src/scene/restoreObject.js +15 -13
- package/src/scene/scheduleSceneUpdate.js +25 -0
- package/src/shaders/materialShaders.js +2 -2
- package/src/shadows/bindSunlight.js +4 -3
- package/src/shadows/drawShadowMeshes.js +4 -3
- package/src/shadows/renderSunlight.js +6 -5
- package/src/shadows/resizeSunlight.js +7 -6
- package/src/shadows/shadowMatrix.js +2 -2
- package/src/sources/attachAreaMesh.js +25 -20
- package/src/sources/buildArea.js +21 -22
- package/src/sources/buildAreaFeature.js +16 -10
- package/src/sources/buildAreaFeatures.js +14 -0
- package/src/sources/buildAreaPoint.js +3 -21
- package/src/sources/extrusionStyle.js +2 -2
- package/src/sources/initializeGeoJSON.js +3 -2
- package/src/sources/matchesAreaTile.js +7 -0
- package/src/sources/pendingSourceAreas.js +3 -2
- package/src/sources/prepareAreaGeometryJob.js +24 -0
- package/src/sources/projectAreaPolygons.js +15 -0
- package/src/sources/pumpSourceAreas.js +37 -0
- package/src/sources/releaseArea.js +10 -8
- package/src/sources/setGeoJSONData.js +4 -3
- package/src/sources/sourceAreaContext.js +18 -17
- package/src/sources/updateArea.js +25 -21
- package/src/sources/{updateStatus.js → updateSourceStatus.js} +5 -4
- package/src/sunlight/{addTo.js → addTimeControlToMap.js} +1 -1
- package/src/sunlight/addTimeLayer.js +3 -2
- package/src/sunlight/atmosphere.js +2 -2
- package/src/sunlight/initSunlight.js +5 -5
- package/src/sunlight/{initialize.js → initializeTimeControl.js} +5 -3
- package/src/sunlight/onAddSun.js +5 -4
- package/src/sunlight/onRemoveSun.js +1 -1
- package/src/sunlight/removeSun.js +7 -5
- package/src/sunlight/removeTimeLayer.js +3 -2
- package/src/sunlight/requestSunlightRender.js +9 -0
- package/src/sunlight/updateCelestialDisc.js +1 -1
- package/src/sunlight/updateSky.js +4 -2
- package/src/sunlight/updateSun.js +8 -6
- package/src/sunlight/useSelectedTime.js +4 -3
- package/src/terrain/applyTerrain.js +16 -13
- package/src/terrain/clearLayerTerrain.js +3 -2
- package/src/terrain/getElevation.js +9 -5
- package/src/terrain/initTerrain.js +11 -6
- package/src/terrain/loadTerrain.js +29 -20
- package/src/terrain/loadTerrainTiles.js +4 -3
- package/src/terrain/mapElevationOf.js +7 -0
- package/src/terrain/onTerrainAdd.js +14 -10
- package/src/terrain/onTerrainChange.js +4 -3
- package/src/terrain/onTerrainRemove.js +35 -21
- package/src/terrain/readyTerrainOf.js +7 -0
- package/src/terrain/setLayerTerrain.js +3 -2
- package/src/terrain/setTerrainHeight.js +19 -14
- package/src/terrain/terrainElevation.js +1 -1
- package/src/terrain/terrainTileQueue.js +11 -9
- package/src/{core → textures}/addImageState.js +1 -1
- package/src/{core/addRasterImage.js → textures/attachRasterImage.js} +1 -1
- package/src/{rendering → textures}/collectRoofTiles.js +3 -2
- package/src/{rendering → textures}/composeRoofAtlas.js +9 -7
- package/src/textures/destroyTexture.js +10 -0
- package/src/{models/textureFor.js → textures/modelTextureFor.js} +5 -4
- package/src/{core → textures}/nativeImageError.js +1 -1
- package/src/{core → textures}/nativeImageRefresh.js +2 -2
- package/src/{core/textureFor.js → textures/nativeTextureFor.js} +7 -6
- package/src/{rendering → textures}/rebuildRoofAtlas.js +12 -9
- package/src/{core → textures}/removeImageState.js +1 -1
- package/src/{rendering → textures}/resizeRoofTexture.js +5 -4
- package/src/textures/updateRoofAtlas.js +23 -0
- package/src/textures/updateRoofRaster.js +29 -0
- package/src/{core → textures}/uploadCanvasTexture.js +2 -2
- package/src/traffic/addTraffic.js +1 -1
- package/src/traffic/disposeTrafficObject.js +5 -3
- package/src/traffic/drawTrafficRoute.js +1 -1
- package/src/traffic/groundTraffic.js +6 -6
- package/src/traffic/initTraffic.js +3 -3
- package/src/traffic/loadedTrafficLanes.js +1 -1
- package/src/traffic/locateTraffic.js +3 -3
- package/src/traffic/placeTraffic.js +2 -1
- package/src/traffic/prepareTraffic.js +4 -3
- package/src/traffic/rebaseTraffic.js +3 -2
- package/src/traffic/rebuildTrafficMesh.js +1 -1
- package/src/traffic/removeTraffic.js +1 -1
- package/src/traffic/startTraffic.js +1 -1
- package/src/traffic/tickTraffic.js +4 -3
- package/src/traffic/trafficNow.js +3 -2
- package/src/traffic/updateTraffic.js +3 -2
- package/src/traffic/updateTrafficLights.js +4 -2
- package/src/vehicles/boatBenches.js +1 -1
- package/src/vehicles/boatModel.js +1 -1
- package/src/vehicles/busModel.js +1 -1
- package/src/vehicles/carModel.js +1 -1
- package/src/vehicles/metroModel.js +1 -1
- package/src/vehicles/tramModel.js +1 -1
- package/src/walk/{step.js → animateWalker.js} +15 -19
- package/src/walk/createWalk.js +15 -11
- package/src/walk/initWalk.js +4 -4
- package/src/walk/landWalker.js +38 -0
- package/src/walk/moveWalker.js +5 -4
- package/src/walk/{onAdd.js → onAddWalkControl.js} +3 -1
- package/src/walk/{onRemove.js → onRemoveWalkControl.js} +1 -1
- package/src/walk/{onKey.js → onWalkKey.js} +1 -1
- package/src/walk/{onTerrain.js → onWalkTerrain.js} +1 -1
- package/src/walk/{place.js → placeWalker.js} +2 -2
- package/src/walk/resolveWalkerPosition.js +28 -0
- package/src/walk/{start.js → startWalking.js} +8 -5
- package/src/walk/{stop.js → stopWalking.js} +4 -4
- package/src/walk/{toggle.js → toggleWalking.js} +2 -2
- package/src/walk/updateWalkerFrame.js +19 -0
- package/src/weakmaps/addedByLayer.js +1 -0
- package/src/weakmaps/archiveHeaderByLayer.js +1 -0
- package/src/weakmaps/areasByLayer.js +1 -0
- package/src/weakmaps/bridgeMeshByLayer.js +1 -0
- package/src/weakmaps/bridgesByLayer.js +1 -0
- package/src/weakmaps/cameraAnimationByMap.js +1 -0
- package/src/weakmaps/cameraBearingByMap.js +1 -0
- package/src/weakmaps/cameraByLayer.js +1 -0
- package/src/weakmaps/cameraDraggableByMap.js +1 -0
- package/src/weakmaps/cameraFields.js +37 -0
- package/src/weakmaps/cameraFrameByMap.js +1 -0
- package/src/weakmaps/cameraHandlersByMap.js +1 -0
- package/src/weakmaps/cameraMaps.js +1 -0
- package/src/weakmaps/cameraPitchByMap.js +1 -0
- package/src/weakmaps/cameraReadyByMap.js +1 -0
- package/src/weakmaps/cameraTouchStateByMap.js +1 -0
- package/src/weakmaps/cameraViewByMap.js +1 -0
- package/src/weakmaps/cameraZIndexOffsetByLayer.js +1 -0
- package/src/weakmaps/containerByLayer.js +1 -0
- package/src/weakmaps/controlByLayer.js +1 -0
- package/src/weakmaps/countStatusByLayer.js +1 -0
- package/src/weakmaps/cursorByLayer.js +1 -0
- package/src/weakmaps/demByLayer.js +1 -0
- package/src/weakmaps/directoriesByLayer.js +1 -0
- package/src/weakmaps/etagByLayer.js +1 -0
- package/src/weakmaps/eventMapByLayer.js +1 -0
- package/src/weakmaps/eventsByLayer.js +1 -0
- package/src/weakmaps/fadeFrameByLayer.js +1 -0
- package/src/weakmaps/fadeVersionByLayer.js +1 -0
- package/src/weakmaps/frameByLayer.js +1 -0
- package/src/weakmaps/geojsonByLayer.js +1 -0
- package/src/weakmaps/geometryWorkersByMap.js +1 -0
- package/src/weakmaps/groupByLayer.js +1 -0
- package/src/weakmaps/headerByLayer.js +1 -0
- package/src/weakmaps/highlightedFeatureByLayer.js +1 -0
- package/src/weakmaps/hoveredFeatureByLayer.js +1 -0
- package/src/weakmaps/inflightByLayer.js +1 -0
- package/src/weakmaps/kindByLayer.js +1 -0
- package/src/weakmaps/layersByLayer.js +1 -0
- package/src/weakmaps/loadingTilesByLayer.js +1 -0
- package/src/weakmaps/locationByLayer.js +1 -0
- package/src/weakmaps/modelByLayer.js +1 -0
- package/src/weakmaps/modelUrlByLayer.js +1 -0
- package/src/weakmaps/nativeGPUBackByMap.js +1 -0
- package/src/weakmaps/nativeGPUByLayer.js +1 -0
- package/src/weakmaps/nativeGPUOrderByMap.js +1 -0
- package/src/weakmaps/pitchSkyByMap.js +1 -0
- package/src/weakmaps/pointerEventsByLayer.js +1 -0
- package/src/weakmaps/pruneAfterByLayer.js +1 -0
- package/src/weakmaps/pruneVersionByLayer.js +1 -0
- package/src/weakmaps/pruneWantedByLayer.js +1 -0
- package/src/weakmaps/queuedByLayer.js +1 -0
- package/src/weakmaps/rasterGeometryByLayer.js +1 -0
- package/src/weakmaps/rasterProgramByLayer.js +1 -0
- package/src/weakmaps/rasterTilesByLayer.js +1 -0
- package/src/weakmaps/rasterVersionByLayer.js +1 -0
- package/src/weakmaps/raycasterByLayer.js +1 -0
- package/src/weakmaps/readyByLayer.js +1 -0
- package/src/weakmaps/rendererByLayer.js +1 -0
- package/src/weakmaps/rendererReadyByLayer.js +1 -0
- package/src/weakmaps/roofRasterByLayer.js +1 -0
- package/src/weakmaps/roofRastersByLayer.js +1 -0
- package/src/weakmaps/rootByLayer.js +1 -0
- package/src/weakmaps/rotateControlByMap.js +1 -0
- package/src/weakmaps/sceneFields.js +159 -0
- package/src/weakmaps/sceneLayers.js +1 -0
- package/src/weakmaps/sceneOriginByLayer.js +1 -0
- package/src/weakmaps/shadowMeshesByLayer.js +1 -0
- package/src/weakmaps/sharedByLayer.js +1 -0
- package/src/weakmaps/sizeByLayer.js +1 -0
- package/src/weakmaps/state3dByLayer.js +1 -0
- package/src/weakmaps/sunlightByMap.js +1 -0
- package/src/weakmaps/terrain3DByLayer.js +1 -0
- package/src/weakmaps/terrain3DByMap.js +1 -0
- package/src/weakmaps/terrainArchiveByLayer.js +1 -0
- package/src/weakmaps/terrainBaseYByLayer.js +1 -0
- package/src/weakmaps/terrainBoundsByLayer.js +1 -0
- package/src/weakmaps/terrainControllerByLayer.js +1 -0
- package/src/weakmaps/terrainGridsByLayer.js +1 -0
- package/src/weakmaps/terrainLoadingByLayer.js +1 -0
- package/src/weakmaps/terrainOriginElevationByLayer.js +1 -0
- package/src/weakmaps/terrainPromiseByLayer.js +1 -0
- package/src/weakmaps/terrainReadyByLayer.js +1 -0
- package/src/weakmaps/terrainRequestByLayer.js +1 -0
- package/src/weakmaps/terrainSourceByLayer.js +1 -0
- package/src/weakmaps/terrainTilesByLayer.js +1 -0
- package/src/weakmaps/terrainZoomByLayer.js +1 -0
- package/src/weakmaps/tileZoomByLayer.js +1 -0
- package/src/weakmaps/timeControlByMap.js +1 -0
- package/src/weakmaps/tooltipByLayer.js +1 -0
- package/src/weakmaps/touchPitchByMap.js +1 -0
- package/src/weakmaps/touchRotateByMap.js +1 -0
- package/src/weakmaps/typeByLayer.js +1 -0
- package/src/weakmaps/urlByLayer.js +1 -0
- package/src/weakmaps/visibleMeshesByLayer.js +1 -0
- package/src/weakmaps/walkerByLayer.js +1 -0
- package/src/weakmaps/wantedRasterTilesByLayer.js +1 -0
- package/src/weakmaps/zoomLevelByLayer.js +1 -0
- package/src/weakmaps/zoomTransitionsByLayer.js +1 -0
- package/src/weakmaps/zoomViewByLayer.js +1 -0
- package/src/workers/acquireGeometryWorker.js +29 -0
- package/src/workers/buildAreaInWorker.js +40 -0
- package/src/workers/closeGeometryWorkers.js +11 -0
- package/src/workers/createGeometryWorker.js +19 -0
- package/src/workers/geometryWorker.js +14 -0
- package/src/workers/settleGeometryWorker.js +10 -0
- package/src/workers/startGeometryWorker.js +16 -0
- package/src/core/bringNativeLayerToBack.js +0 -8
- package/src/core/bringNativeLayerToFront.js +0 -8
- package/src/core/current.js +0 -6
- package/src/core/localPosition.js +0 -10
- package/src/core/readyNativeGPU.js +0 -9
- package/src/core/reorderNativeLayer.js +0 -9
- package/src/core/scheduleGridFade.js +0 -14
- package/src/core/updateNativeLayerView.js +0 -9
- package/src/geometry/dot.js +0 -6
- package/src/geometry/push.js +0 -3
- package/src/globals/cameraByMap.js +0 -1
- package/src/raster/finishAttachment.js +0 -15
- package/src/raster/isLoading.js +0 -7
- package/src/raster/terrainTileGeometry.js +0 -16
- package/src/rendering/destroyTexture.js +0 -9
- package/src/rendering/sortMeshes.js +0 -6
- package/src/rendering/updateRoofAtlas.js +0 -20
- package/src/rendering/updateRoofRaster.js +0 -25
- package/src/scene/attach.js +0 -54
- package/src/scene/endZoom.js +0 -23
- package/src/scene/initializeSharedRenderer.js +0 -45
- package/src/scene/layerCountTitle.js +0 -4
- package/src/scene/mountRenderer.js +0 -25
- package/src/scene/ready.js +0 -9
- package/src/scene/renderLayerCount.js +0 -13
- package/src/scene/rendererDeviceError.js +0 -14
- package/src/scene/rendererDeviceLost.js +0 -14
- package/src/scene/requestAdapter.js +0 -12
- package/src/scene/requestDevice.js +0 -9
- package/src/scene/update.js +0 -23
- package/src/sources/projectedTree.js +0 -19
- package/src/sources/pump.js +0 -44
- package/src/sunlight/render.js +0 -9
- package/src/terrain/rasterProgram.js +0 -51
- package/src/walk/land.js +0 -32
- package/src/walk/local.js +0 -18
- /package/src/{camera → animations}/mapStopPitchBearingAnimation.js +0 -0
- /package/src/{core → animations}/runMarkerPanFrame.js +0 -0
- /package/src/{core → animations}/scheduleMarkerPan.js +0 -0
- /package/src/archives/{varint.js → readVarint.js} +0 -0
- /package/src/{sunlight → astronomy}/horizontalPosition.js +0 -0
- /package/src/{sunlight → astronomy}/moonPosition.js +0 -0
- /package/src/{sunlight → astronomy}/solarPosition.js +0 -0
- /package/src/{sunlight → astronomy}/solarTime.js +0 -0
- /package/src/{scene → camera}/createSceneCamera.js +0 -0
- /package/src/{sunlight/rgb.js → colors/formatRGB.js} +0 -0
- /package/src/{utils/channel.js → colors/hslChannel.js} +0 -0
- /package/src/{sunlight/mix.js → colors/mixColor.js} +0 -0
- /package/src/{utils → colors}/toSRGB.js +0 -0
- /package/src/controls/{editable.js → isEditableTarget.js} +0 -0
- /package/src/geometry/{nativeTriangle.js → appendNativeTriangle.js} +0 -0
- /package/src/{traffic → geometry}/appendRouteDash.js +0 -0
- /package/src/{traffic → geometry}/appendRouteSegment.js +0 -0
- /package/src/geometry/{build.js → buildGeometryParts.js} +0 -0
- /package/src/geometry/{lampRing.js → createLampRing.js} +0 -0
- /package/src/{raster/createGeometry.js → geometry/createRasterQuadGeometry.js} +0 -0
- /package/src/geometry/{treeRing.js → createTreeRing.js} +0 -0
- /package/src/geometry/{cross.js → crossVector.js} +0 -0
- /package/src/{sources → geometry}/generateTreeGeometry.js +0 -0
- /package/src/{sources → geometry}/instanceAreaGeometry.js +0 -0
- /package/src/{traffic/along.js → geometry/interpolateRoute.js} +0 -0
- /package/src/{core → geometry}/markerImageBounds.js +0 -0
- /package/src/{shadows → geometry}/meshShadowBounds.js +0 -0
- /package/src/geometry/{below.js → offsetBelowGround.js} +0 -0
- /package/src/{scene → geometry}/restoreGeometry.js +0 -0
- /package/src/{traffic → geometry}/routeGeometry.js +0 -0
- /package/src/geometry/{sub.js → subtractVector.js} +0 -0
- /package/src/{terrain → geometry}/terrainGrid.js +0 -0
- /package/src/geometry/{visit.js → visitNativeCoordinates.js} +0 -0
- /package/src/{scene → gpu}/showWebGPUWarning.js +0 -0
- /package/src/{scene → layer-controls}/placeEntry.js +0 -0
- /package/src/{scene → layer-controls}/placeEntryElement.js +0 -0
- /package/src/{scene → layer-controls}/placeUnderEntry.js +0 -0
- /package/src/{scene → layer-controls}/removeEntry.js +0 -0
- /package/src/{scene → layer-controls}/replaceEntry.js +0 -0
- /package/src/{scene → layer-controls}/runPlacements.js +0 -0
- /package/src/{scene → layer-controls}/underEntry.js +0 -0
- /package/src/lighting/{visitCells.js → visitLightGridCells.js} +0 -0
- /package/src/{rendering → materials}/createProgramLayout.js +0 -0
- /package/src/{rendering → materials}/createProgramUniforms.js +0 -0
- /package/src/{rendering → materials}/prepareMeshCutout.js +0 -0
- /package/src/{shaders → materials}/validateRoofMaterial.js +0 -0
- /package/src/{core → native}/beforeNativeRender.js +0 -0
- /package/src/{core → native}/bypassNativeEvent.js +0 -0
- /package/src/{core → native}/compareNativeHits.js +0 -0
- /package/src/{core → native}/forwardNativeError.js +0 -0
- /package/src/{core → native}/hideTargets.js +0 -0
- /package/src/{core → native}/nativeAddLatLng.js +0 -0
- /package/src/{core → native}/nativeBringToBack.js +0 -0
- /package/src/{core → native}/nativeBringToFront.js +0 -0
- /package/src/{core → native}/nativeRedraw.js +0 -0
- /package/src/{core → native}/nativeSetBounds.js +0 -0
- /package/src/{core → native}/nativeSetIcon.js +0 -0
- /package/src/{core → native}/nativeSetLatLng.js +0 -0
- /package/src/{core → native}/nativeSetLatLngs.js +0 -0
- /package/src/{core → native}/nativeSetOpacity.js +0 -0
- /package/src/{core → native}/nativeSetRadius.js +0 -0
- /package/src/{core → native}/nativeSetStyle.js +0 -0
- /package/src/{core → native}/nativeSetUrl.js +0 -0
- /package/src/{core → native}/nativeSetZIndex.js +0 -0
- /package/src/{core → native}/nativeSetZIndexOffset.js +0 -0
- /package/src/{core → native}/refreshNativeEvent.js +0 -0
- /package/src/{core → native}/rejectNativeReady.js +0 -0
- /package/src/{core → native}/resolveNativeReady.js +0 -0
- /package/src/{core → native}/restoreNativeEvents.js +0 -0
- /package/src/{core → native}/updateNativeHover.js +0 -0
- /package/src/{camera/displayPoint.js → projections/displayContainerPoint.js} +0 -0
- /package/src/{core → projections}/localPixel.js +0 -0
- /package/src/{core → projections}/localPixelForGeometry.js +0 -0
- /package/src/{core → projections}/markerCameraIconPoint.js +0 -0
- /package/src/{geometry/bridgeLocal.js → projections/projectBridgePoint.js} +0 -0
- /package/src/{sunlight → projections}/projectCelestialBody.js +0 -0
- /package/src/{camera/pointOf.js → projections/toPoint.js} +0 -0
- /package/src/{camera → projections}/verticalGroundY.js +0 -0
- /package/src/raster/{reportError.js → reportRasterError.js} +0 -0
- /package/src/scene/{emptyNode.js → createSceneNode.js} +0 -0
- /package/src/scene/{reportError.js → reportLayerError.js} +0 -0
- /package/src/sunlight/{onAdd.js → onAddTimeControl.js} +0 -0
- /package/src/sunlight/{remove.js → removeTimeControl.js} +0 -0
- /package/src/terrain/{sample.js → sampleTerrainTile.js} +0 -0
- /package/src/{rendering → textures}/bindMeshTextures.js +0 -0
- /package/src/{rendering → textures}/compareRoofTiles.js +0 -0
- /package/src/{rendering/destroyAfterSubmission.js → textures/destroyTextureAfterSubmission.js} +0 -0
- /package/src/{rendering → textures}/ensureRoofBlit.js +0 -0
- /package/src/{models/loadImage.js → textures/loadModelImage.js} +0 -0
- /package/src/{models/textureSampler.js → textures/modelTextureSampler.js} +0 -0
- /package/src/{rendering → textures}/prepareMeshTextures.js +0 -0
- /package/src/{scene → textures}/restoreMaterialTextures.js +0 -0
- /package/src/{rendering → textures}/textureBinding.js +0 -0
- /package/src/{rendering → textures}/uploadMeshTexture.js +0 -0
- /package/src/{core → textures}/uploadNativeImage.js +0 -0
- /package/src/{rendering → textures}/uploadRoofTile.js +0 -0
- /package/src/traffic/{toLanes.js → featuresToTrafficLanes.js} +0 -0
- /package/src/traffic/{tooltip.js → trafficTooltip.js} +0 -0
- /package/src/{scene → transforms}/composeLocalTransform.js +0 -0
- /package/src/{models/nodeMatrix.js → transforms/modelNodeMatrix.js} +0 -0
- /package/src/{core → transforms}/transformNativePoint.js +0 -0
- /package/src/{scene → transforms}/updateWorldMatrix.js +0 -0
- /package/src/{scene → transforms}/worldMatrixChanged.js +0 -0
- /package/src/vehicles/{carriage.js → buildCarriage.js} +0 -0
- /package/src/vehicles/{mirror.js → mirrorVehiclePart.js} +0 -0
- /package/src/walk/{initialize.js → initializeWalkControl.js} +0 -0
- /package/src/walk/{blocked.js → isWalkBlocked.js} +0 -0
- /package/src/walk/{onBlur.js → onWalkBlur.js} +0 -0
- /package/src/walk/{onPointer.js → onWalkPointer.js} +0 -0
- /package/src/{globals → weakmaps}/boundsMethods.js +0 -0
- /package/src/{globals → weakmaps}/closestMethods.js +0 -0
- /package/src/{globals → weakmaps}/colliders.js +0 -0
- /package/src/{globals → weakmaps}/dragByHandler.js +0 -0
- /package/src/{globals → weakmaps}/dragStates.js +0 -0
- /package/src/{globals → weakmaps}/gridInitializers.js +0 -0
- /package/src/{globals → weakmaps}/imageStates.js +0 -0
- /package/src/{globals → weakmaps}/nativeEventMaps.js +0 -0
- /package/src/{globals → weakmaps}/nativeRenderByLayer.js +0 -0
- /package/src/{globals → weakmaps}/rendererDevices.js +0 -0
- /package/src/{globals → weakmaps}/renderers.js +0 -0
- /package/src/{globals → weakmaps}/sceneByLayer.js +0 -0
- /package/src/{globals → weakmaps}/sunByMap.js +0 -0
- /package/src/{globals → weakmaps}/sunlightByControl.js +0 -0
- /package/src/{globals → weakmaps}/touchByContainer.js +0 -0
- /package/src/{globals → weakmaps}/trafficByLayer.js +0 -0
- /package/src/{globals → weakmaps}/walkByMap.js +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/globals/geometryEmpty.js", "../src/triangulation/minimumX.js", "../src/triangulation/mergeHoles.js", "../src/triangulation/sortHoles.js", "../src/triangulation/cross.js", "../src/triangulation/equal.js", "../src/triangulation/clean.js", "../src/triangulation/isClockWise.js", "../src/triangulation/polygonRings.js", "../src/triangulation/inside.js", "../src/triangulation/insideHole.js", "../src/triangulation/on.js", "../src/triangulation/intersects.js", "../src/triangulation/crossesRing.js", "../src/triangulation/crossesBoundary.js", "../src/triangulation/connectHole.js", "../src/triangulation/containsVertex.js", "../src/triangulation/clipEars.js", "../src/triangulation/area.js", "../src/triangulation/validateArea.js", "../src/triangulation/triangulate.js", "../src/sources/groundOffset.js", "../src/geometry/appendAreaTriangle.js", "../src/geometry/buildProjectedPolygon.js", "../src/globals/triangleContexts.js", "../src/geometry/addGeneratedTriangle.js", "../src/geometry/generateTreeGeometry.js", "../src/colors/toSRGB.js", "../src/colors/hslChannel.js", "../src/colors/parseColor.js", "../src/globals/lampDirections.js", "../src/geometry/createLampRing.js", "../src/geometry/lampPostGeometry.js", "../src/geometry/quad.js", "../src/geometry/emitter.js", "../src/geometry/lightGeometry.js", "../src/globals/roundProfile.js", "../src/globals/ringDirections.js", "../src/geometry/createTreeRing.js", "../src/geometry/surface.js", "../src/geometry/validateTree.js", "../src/geometry/treeGeometry.js", "../src/geometry/buildProjectedPoint.js", "../src/geometry/instanceAreaGeometry.js", "../src/geometry/computeBounds.js", "../src/geometry/assembleAreaGeometry.js", "../src/workers/geometryWorker.js"],
|
|
4
|
+
"sourcesContent": ["export const geometryEmpty = [];\n", "export function minimumX(ring) {\n let minimum = Infinity;\n let point;\n for (point of ring) minimum = Math.min(minimum, point.x);\n return minimum;\n}\n", "export function mergeHoles(source, target, start, width) {\r\n const middle = Math.min(start + width, source.length), end = Math.min(start + width * 2, source.length);\r\n let left = start, right = middle, output;\r\n for (output = start; output < end; output++) {\r\n if (left < middle && (right >= end || source[left].x <= source[right].x)) {\r\n target[output] = source[left++];\r\n } else {\r\n target[output] = source[right++];\r\n }\r\n }\r\n}\r\n", "import { minimumX } from './minimumX.js';\nimport { mergeHoles } from './mergeHoles.js';\n\nexport function sortHoles(holes) {\n if (holes.length < 2) return holes;\n const buffer = /* alloc */ new Array(holes.length);\n const entries = /* alloc */ [];\n let ring, width, start, previous, i;\n for (ring of holes) entries.push(/* alloc */ { ring, x: minimumX(ring) });\n let source = entries, target = buffer;\n for (width = 1; width < entries.length; width *= 2) {\n for (start = 0; start < entries.length; start += width * 2) {\n mergeHoles(source, target, start, width);\n }\n previous = source;\n source = target;\n target = previous;\n }\n for (i = 0; i < holes.length; i++) holes[i] = source[i].ring;\n return holes;\n}\n", "export function cross(a, b, c) {\r\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\r\n}\r\n", "export function equal(a, b) {\r\n return a.x === b.x && a.y === b.y;\r\n}\r\n", "import { cross } from './cross.js';\nimport { equal } from './equal.js';\n\nexport function clean(ring) {\n let changed = true;\n let i, a, b, c;\n while (changed && ring.length > 3) {\n changed = false;\n for (i = 0; i < ring.length; i++) {\n a = ring[(i + ring.length - 1) % ring.length], b = ring[i], c = ring[(i + 1) % ring.length];\n if (equal(a, b) || Math.abs(cross(a, b, c)) < 1e-10) {\n ring.splice(i, 1); changed = true; break;\n }\n }\n }\n if (ring.length < 3) throw /* alloc */ new Error('Degenerate polygon ring');\n return ring;\n}\n", "/**\n * @returns {boolean} Whether the `{x, y}` points are in clockwise order.\n */\n\nexport function isClockWise(points) {\n let area = 0;\n let i, a, b;\n for (i = 0; i < points.length; i++) {\n a = points[i], b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n return area < 0;\n}\n", "import { clean } from './clean.js';\r\nimport { isClockWise } from './isClockWise.js';\r\n\r\nexport function polygonRings(paths, vertices) {\r\n const rings = /* alloc */ [];\r\n let offset = 0, index, path, ring;\r\n for (index = 0; index < paths.length; index++) {\r\n path = paths[index];\r\n ring = clean(vertices.slice(offset, offset += path.length));\r\n if (isClockWise(ring) !== Boolean(index)) ring.reverse();\r\n rings.push(ring);\r\n }\r\n return rings;\r\n}\r\n", "export function inside(point, ring) {\n let result = false;\n let i, j, a, b;\n for (i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n a = ring[i], b = ring[j];\n if ((a.y > point.y) !== (b.y > point.y) &&\n point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x) result = !result;\n }\n return result;\n}\n", "import { inside } from './inside.js';\n\nexport function insideHole(point, rings) {\n let i;\n for (i = 1; i < rings.length; i++) if (inside(point, rings[i])) return true;\n return false;\n}\n", "export function on(p, q, r) {\r\n return Math.min(p.x, q.x) <= r.x && r.x <= Math.max(p.x, q.x) &&\r\n Math.min(p.y, q.y) <= r.y && r.y <= Math.max(p.y, q.y);\r\n}\r\n", "import { equal } from './equal.js';\r\nimport { cross } from './cross.js';\r\nimport { on } from './on.js';\r\n\r\nexport function intersects(a, b, c, d) {\r\n if (equal(a, c) || equal(a, d) || equal(b, c) || equal(b, d)) return false;\r\n const abC = cross(a, b, c), abD = cross(a, b, d), cdA = cross(c, d, a), cdB = cross(c, d, b);\r\n return abC * abD < 0 && cdA * cdB < 0 ||\r\n abC === 0 && on(a, b, c) || abD === 0 && on(a, b, d) ||\r\n cdA === 0 && on(c, d, a) || cdB === 0 && on(c, d, b);\r\n}\r\n", "import { intersects } from './intersects.js';\n\nexport function crossesRing(a, b, ring) {\n let i;\n for (i = 0; i < ring.length; i++) {\n if (intersects(a, b, ring[i], ring[(i + 1) % ring.length])) return true;\n }\n return false;\n}\n", "import { crossesRing } from './crossesRing.js';\n\nexport function crossesBoundary(a, b, polygon, rings) {\n if (crossesRing(a, b, polygon)) return true;\n let i;\n for (i = 1; i < rings.length; i++) if (crossesRing(a, b, rings[i])) return true;\n return false;\n}\n", "import { inside } from './inside.js';\r\nimport { insideHole } from './insideHole.js';\r\nimport { crossesBoundary } from './crossesBoundary.js';\r\n\r\nexport function connectHole(polygon, hole, rings, mid) {\r\n let h2 = -1, p2 = -1, distance = Infinity, h, p, a, b, d;\r\n for (h = 0; h < hole.length; h++) for (p = 0; p < polygon.length; p++) {\r\n a = hole[h], b = polygon[p], d = (a.x - b.x) ** 2 + (a.y - b.y) ** 2;\r\n if (d >= distance) continue;\r\n mid.x = (a.x + b.x) / 2; mid.y = (a.y + b.y) / 2;\r\n if (!inside(mid, rings[0]) || insideHole(mid, rings)) continue;\r\n if (crossesBoundary(a, b, polygon, rings)) continue;\r\n h2 = h; p2 = p; distance = d;\r\n }\r\n if (h2 < 0) throw /* alloc */ new Error('Unable to connect polygon hole');\r\n return /* alloc */ [...polygon.slice(0, p2 + 1), ...hole.slice(h2), ...hole.slice(0, h2 + 1),\r\n polygon[p2], ...polygon.slice(p2 + 1)];\r\n}\r\n", "import { equal } from './equal.js';\nimport { cross } from './cross.js';\n\nexport function containsVertex(polygon, a, b, c) {\n let p;\n for (p of polygon) {\n if (!equal(p, a) && !equal(p, b) && !equal(p, c) &&\n cross(a, b, p) >= 0 && cross(b, c, p) >= 0 && cross(c, a, p) >= 0) return true;\n }\n return false;\n}\n", "import { cross } from './cross.js';\r\nimport { containsVertex } from './containsVertex.js';\r\n\r\nexport function clipEars(polygon) {\r\n const result = /* alloc */ [];\r\n let clipped, i, a, b, c, p;\r\n while (polygon.length > 3) {\r\n clipped = false;\r\n for (i = 0; i < polygon.length; i++) {\r\n a = polygon[(i + polygon.length - 1) % polygon.length], b = polygon[i], c = polygon[(i + 1) % polygon.length];\r\n if (cross(a, b, c) <= 1e-10) continue;\r\n if (containsVertex(polygon, a, b, c)) continue;\r\n result.push(/* alloc */ [a.index, b.index, c.index]); polygon.splice(i, 1); clipped = true; break;\r\n }\r\n if (!clipped) throw /* alloc */ new Error('Unable to triangulate polygon: invalid or self-intersecting rings');\r\n }\r\n if (cross(...polygon) > 1e-10) {\r\n const triangle = /* alloc */ [];\r\n for (p of polygon) triangle.push(p.index);\r\n result.push(triangle);\r\n }\r\n return result;\r\n}\r\n", "export function area(ring) {\n let sum = 0;\n let i, p, q;\n for (i = 0; i < ring.length; i++) {\n p = ring[i], q = ring[(i + 1) % ring.length];\n sum += p.x * q.y - q.x * p.y;\n }\n return Math.abs(sum) / 2;\n}\n", "import { area } from './area.js';\r\nimport { cross } from './cross.js';\r\n\r\nexport function validateArea(rings, vertices, result) {\r\n let holeArea = 0, actual = 0, i, triangle;\r\n for (i = 1; i < rings.length; i++) holeArea += area(rings[i]);\r\n const expected = area(rings[0]) - holeArea;\r\n for (triangle of result) actual += cross(vertices[triangle[0]], vertices[triangle[1]], vertices[triangle[2]]) / 2;\r\n if (expected <= 0 || Math.abs(actual - expected) > Math.max(1e-7, expected * 1e-8)) throw /* alloc */ new Error('Polygon triangulation area mismatch');\r\n}\r\n", "import { geometryEmpty } from '../globals/geometryEmpty.js';\nimport { sortHoles } from './sortHoles.js';\nimport { polygonRings } from './polygonRings.js';\nimport { connectHole } from './connectHole.js';\nimport { clipEars } from './clipEars.js';\nimport { validateArea } from './validateArea.js';\n\n\n/**\n * Triangulates a polygon given as `{x, y}` points.\n * Rings omit the repeated closing point; winding is normalized internally.\n * Vertex indices remain relative to the original inputs after duplicate/collinear\n * cleanup. Hole bridges duplicate endpoints, not source vertices.\n * @param {Object[]} contour Outer boundary.\n * @param {Object[][]} [holes] Interior boundaries.\n *\n * @returns {number[][]} Triangles as indices in `[...contour, ...holes.flat()]`.\n */\n\nexport function triangulate(contour, holes = geometryEmpty) {\n const paths = /* alloc */ [contour, ...holes];\n const points = paths.flat();\n let p, index, hole;\n for (p of points) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) throw /* alloc */ new Error('Invalid polygon coordinates');\n }\n // Translate near the origin to avoid cancellation with geographic coordinates.\n const vertices = /* alloc */ [];\n for (index = 0; index < points.length; index++) {\n p = points[index];\n vertices.push(/* alloc */ { x: p.x - contour[0].x, y: p.y - contour[0].y, index });\n }\n // Remove zero-area corners before connecting holes; keep original vertex indices.\n const rings = polygonRings(paths, vertices);\n let polygon = rings[0].slice();\n // A bridge must stay inside the outer boundary, outside every hole, and cross no edge.\n // ponytail: quadratic ear clipping for building footprints; use spatial indexing for large rings.\n const holesToConnect = sortHoles(rings.slice(1));\n const mid = holesToConnect.length ? /* alloc */ { x: 0, y: 0 } : null;\n for (hole of holesToConnect) {\n polygon = connectHole(polygon, hole, rings, mid);\n }\n // Clip a convex corner only when no other vertex is inside/on its triangle.\n const result = clipEars(polygon);\n // Reject incomplete coverage instead of silently emitting a partial roof.\n validateArea(rings, vertices, result);\n return result;\n}\n", "export function groundOffset(point) {\r\n return point.ground || 0;\r\n}\n", "import { groundOffset } from '../sources/groundOffset.js';\r\n\r\nexport function addTriangle(context, a, ah, b, bh, c, ch, nx, ny, nz, color) {\r\n const { backend: layer, positions, normals, colors, uvs } = context;\r\n const ux = b.x - a.x, uy = bh - ah, uz = a.y - b.y;\r\n const vx = c.x - a.x, vy = ch - ah, vz = a.y - c.y;\r\n if ((uy * vz - uz * vy) * nx + (uz * vx - ux * vz) * ny + (ux * vy - uy * vx) * nz < 0) {\r\n const point = b, height = bh;\r\n b = c; bh = ch; c = point; ch = height;\r\n }\r\n positions.push(a.x, ah + groundOffset(a), -a.y,\r\n b.x, bh + groundOffset(b), -b.y,\r\n c.x, ch + groundOffset(c), -c.y);\r\n normals.push(nx, ny, nz, nx, ny, nz, nx, ny, nz);\r\n colors.push(color.r, color.g, color.b, color.r, color.g, color.b, color.r, color.g, color.b);\r\n if (layer.options.nightLight) uvs.push(...a.uv, ...b.uv, ...c.uv);\r\n}\r\n", "import { triangulate } from '../triangulation/triangulate.js';\r\nimport { addTriangle } from './appendAreaTriangle.js';\r\nimport { isClockWise } from '../triangulation/isClockWise.js';\r\n\r\nexport function buildProjectedPolygon(context, paths, top, bottom, baseColor) {\r\n const points = /* alloc */ [];\r\n let path, point, a, b, c, index, sign, i, length, nx, nz;\r\n for (path of paths) for (point of path) points.push(point);\r\n for ([a, b, c] of triangulate(paths[0], paths.slice(1))) {\r\n addTriangle(context, points[a], top, points[b], top, points[c], top, 0, 1, 0, baseColor);\r\n if (bottom > 0) addTriangle(context, points[a], bottom, points[b], bottom, points[c], bottom, 0, -1, 0, baseColor);\r\n }\r\n for (index = 0; index < paths.length; index++) {\r\n path = paths[index];\r\n sign = isClockWise(path) === (index === 0) ? -1 : 1;\r\n for (i = 0; i < path.length; i++) {\r\n a = path[i], b = path[(i + 1) % path.length];\r\n length = Math.hypot(b.x - a.x, b.y - a.y);\r\n if (!length) continue;\r\n nx = sign * (b.y - a.y) / length, nz = sign * (b.x - a.x) / length;\r\n addTriangle(context, a, bottom, b, bottom, b, top, nx, 0, nz, baseColor);\r\n addTriangle(context, a, bottom, b, top, a, top, nx, 0, nz, baseColor);\r\n }\r\n }\r\n}\r\n", "export const triangleContexts = [];\n", "import { triangleContexts } from '../globals/triangleContexts.js';\n\nimport { addTriangle } from './appendAreaTriangle.js';\n\nexport function addGeneratedTriangle(...args) {\r\n addTriangle(triangleContexts[triangleContexts.length - 1], ...args);\r\n}\n", "import { triangleContexts } from '../globals/triangleContexts.js';\n\n\nimport { addGeneratedTriangle } from './addGeneratedTriangle.js';\n\nexport function generateTreeGeometry(context, generator, point, style) {\r\n triangleContexts.push(context);\r\n try {\r\n generator(point, style, addGeneratedTriangle);\r\n } finally {\r\n triangleContexts.pop();\r\n }\r\n}\n", "export function toSRGB(value) {\n return value <= 0.0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - 0.055;\n}\n", "export function channel(n, h, l, a) {\n const k = (n + h * 12) % 12;\n return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n}\n", "import { toSRGB } from \"./toSRGB.js\";\nimport { channel } from \"./hslChannel.js\";\n\n/**\n * HSL inputs are linear-space to preserve the original building styling.\n * Numeric/CSS/RGB inputs are already sRGB; CSS alpha is not used for extrusion.\n * @param {number|string|Object} value 0xRRGGBB, CSS color, {r,g,b}, or {h,s,l} in 0..1.\n * @returns {Object} sRGB {r,g,b} components in 0..1.\n */\n\nexport function parseColor(value) {\n if (value && typeof value === 'object' && 'h' in value) {\n const a = value.s * Math.min(value.l, 1 - value.l);\n return /* alloc */ {\n r: toSRGB(channel(0, value.h, value.l, a)),\n g: toSRGB(channel(8, value.h, value.l, a)),\n b: toSRGB(channel(4, value.h, value.l, a))\n };\n }\n if (value && typeof value === 'object' && 'r' in value) {\n return value;\n }\n if (typeof value === 'number') {\n return /* alloc */ {\n r: (value >> 16 & 255) / 255,\n g: (value >> 8 & 255) / 255,\n b: (value & 255) / 255,\n };\n }\n if (typeof value !== 'string' || !CSS.supports('color', value)) {\n throw /* alloc */ new Error('Invalid 3D color');\n }\n const context = document.createElement('canvas').getContext('2d');\n context.fillStyle = value;\n context.fillRect(0, 0, 1, 1);\n const [r, g, b] = context.getImageData(0, 0, 1, 1).data;\n return /* alloc */ {\n r: r / 255,\n g: g / 255,\n b: b / 255\n };\n}\n", "export const lampDirections = [\r\n { x: Math.cos(0 * Math.PI / 3), y: Math.sin(0 * Math.PI / 3), nx: Math.cos(0.5 * Math.PI / 3), nz: -Math.sin(0.5 * Math.PI / 3) },\r\n { x: Math.cos(1 * Math.PI / 3), y: Math.sin(1 * Math.PI / 3), nx: Math.cos(1.5 * Math.PI / 3), nz: -Math.sin(1.5 * Math.PI / 3) },\r\n { x: Math.cos(2 * Math.PI / 3), y: Math.sin(2 * Math.PI / 3), nx: Math.cos(2.5 * Math.PI / 3), nz: -Math.sin(2.5 * Math.PI / 3) },\r\n { x: Math.cos(3 * Math.PI / 3), y: Math.sin(3 * Math.PI / 3), nx: Math.cos(3.5 * Math.PI / 3), nz: -Math.sin(3.5 * Math.PI / 3) },\r\n { x: Math.cos(4 * Math.PI / 3), y: Math.sin(4 * Math.PI / 3), nx: Math.cos(4.5 * Math.PI / 3), nz: -Math.sin(4.5 * Math.PI / 3) },\r\n { x: Math.cos(5 * Math.PI / 3), y: Math.sin(5 * Math.PI / 3), nx: Math.cos(5.5 * Math.PI / 3), nz: -Math.sin(5.5 * Math.PI / 3) },\r\n];\r\n", "import { lampDirections } from '../globals/lampDirections.js';\n\nexport function ring(point, radius) {\n const points = /* alloc */ new Array(lampDirections.length);\n let i;\n for (i = 0; i < points.length; i++) {\n points[i] = /* alloc */ {\n x: point.x + lampDirections[i].x * radius,\n y: point.y + lampDirections[i].y * radius, ground: point.ground,\n uv: /* alloc */ [3, 3],\n };\n }\n return points;\n}\n", "import { parseColor } from \"../colors/parseColor.js\";\nimport { ring } from './createLampRing.js';\nimport { lampDirections } from '../globals/lampDirections.js';\n\n/** Schematic support and lamp head; wall-mounted fixtures do not get an invented pole. */\n\nexport function lampPostGeometry(point, style, addTriangle) {\n const color = parseColor(0x50565a), radius = style.poleRadius;\n if (!Number.isFinite(radius) || radius <= 0) {\n throw /* alloc */ new Error('Invalid lamp pole radius');\n }\n const center = /* alloc */ {\n ...point, uv: /* alloc */ [3, 3],\n };\n let r, low, high, points, i, a, b, nx, nz, section;\n for (section = 0; section < 2; section++) {\n r = section ? radius * 2.5 : radius;\n low = section ? style.top - 0.25 : 0;\n high = section ? style.top + 0.15 : style.top;\n points = ring(point, r);\n for (i = 0; i < 6; i++) {\n a = points[i], b = points[(i + 1) % 6];\n nx = lampDirections[i].nx, nz = lampDirections[i].nz;\n addTriangle(a, low, b, low, b, high, nx, 0, nz, color);\n addTriangle(a, low, b, high, a, high, nx, 0, nz, color);\n addTriangle(center, high, a, high, b, high, 0, 1, 0, color);\n addTriangle(center, low, b, low, a, low, 0, -1, 0, color);\n }\n }\n}\n", "export function quad(addTriangle, color, a, b, c, d, height, nx, ny, nz) {\r\n if (typeof nx !== 'number') {\r\n addTriangle(a, height, b, height, c, height, ...nx, color);\r\n addTriangle(a, height, c, height, d, height, ...nx, color);\r\n } else {\r\n addTriangle(a, height, b, height, c, height, nx, ny, nz, color);\r\n addTriangle(a, height, c, height, d, height, nx, ny, nz, color);\r\n }\r\n}\r\n", "export function emitter(point, u, v, axis) {\r\n const r = 0.65;\r\n return /* alloc */ {\r\n x: point.x + (axis === 2 ? 0 : u * r),\r\n y: point.y + (axis === 1 ? 0 : axis === 2 ? u * r : v * r),\r\n ground: point.ground + (axis === 0 ? 0 : v * r), uv: /* alloc */ [u, v],\r\n };\r\n}\r\n", "import { parseColor } from \"../colors/parseColor.js\";\nimport { quad } from './quad.js';\nimport { emitter } from './emitter.js';\n\n/** Three crossed emitter discs; illumination itself is evaluated on receiving surfaces. */\n\nexport function lightGeometry(point, style, addTriangle) {\n if (!Number.isFinite(style.lightRadius) || style.lightRadius <= 0) throw /* alloc */ new Error('Invalid light radius');\n const color = parseColor(style.color);\n let axis;\n for (axis = 0; axis < 3; axis++) {\n quad(addTriangle, color, emitter(point, -1, -1, axis), emitter(point, 1, -1, axis), emitter(point, 1, 1, axis), emitter(point, -1, 1, axis),\n style.top, axis === 2 ? 1 : 0, axis === 0 ? 1 : 0, axis === 1 ? 1 : 0);\n }\n}\n", "export const roundProfile = [\n [0, 0],\n [0.35, 0.8],\n [0.6, 1],\n [0.85, 0.7],\n [1, 0]\n];\n", "export const ringDirections = [{\n x: Math.cos(0 * Math.PI / 4),\n y: Math.sin(0 * Math.PI / 4),\n nx: Math.cos((0 + 0.5) * Math.PI / 4),\n nz: -Math.sin((0 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(1 * Math.PI / 4),\n y: Math.sin(1 * Math.PI / 4),\n nx: Math.cos((1 + 0.5) * Math.PI / 4),\n nz: -Math.sin((1 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(2 * Math.PI / 4),\n y: Math.sin(2 * Math.PI / 4),\n nx: Math.cos((2 + 0.5) * Math.PI / 4),\n nz: -Math.sin((2 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(3 * Math.PI / 4),\n y: Math.sin(3 * Math.PI / 4),\n nx: Math.cos((3 + 0.5) * Math.PI / 4),\n nz: -Math.sin((3 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(4 * Math.PI / 4),\n y: Math.sin(4 * Math.PI / 4),\n nx: Math.cos((4 + 0.5) * Math.PI / 4),\n nz: -Math.sin((4 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(5 * Math.PI / 4),\n y: Math.sin(5 * Math.PI / 4),\n nx: Math.cos((5 + 0.5) * Math.PI / 4),\n nz: -Math.sin((5 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(6 * Math.PI / 4),\n y: Math.sin(6 * Math.PI / 4),\n nx: Math.cos((6 + 0.5) * Math.PI / 4),\n nz: -Math.sin((6 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(7 * Math.PI / 4),\n y: Math.sin(7 * Math.PI / 4),\n nx: Math.cos((7 + 0.5) * Math.PI / 4),\n nz: -Math.sin((7 + 0.5) * Math.PI / 4)\n },\n];\n", "import { ringDirections } from '../globals/ringDirections.js';\n\n\nexport function ring(point, radius) {\n const result = /* alloc */ new Array(ringDirections.length);\n let i;\n for (i = 0; i < result.length; i++) {\n result[i] = /* alloc */ {\n x: point.x + ringDirections[i].x * radius,\n y: point.y + ringDirections[i].y * radius,\n ground: point.ground,\n };\n }\n return result;\n}\n", "import { ringDirections } from '../globals/ringDirections.js';\n\nimport { ring } from './createTreeRing.js';\n\nexport function surface(point, addTriangle, lowRadius, low, highRadius, high, color) {\n const lower = ring(point, lowRadius), upper = ring(point, highRadius);\n let i, next, slope, length, nx, nz, ny, normalX, normalZ;\n for (i = 0; i < 8; i++) {\n next = (i + 1) % 8;\n slope = (lowRadius - highRadius) / (high - low);\n length = Math.hypot(1, slope);\n ({ nx, nz } = ringDirections[i]);\n ny = slope / length;\n normalX = nx / length, normalZ = nz / length;\n if (lowRadius) addTriangle(lower[i], low, lower[next], low, upper[next], high, normalX, ny, normalZ, color);\n if (highRadius) addTriangle(lower[i], low, upper[next], high, upper[i], high, normalX, ny, normalZ, color);\n }\n}\n", "export function validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape) {\r\n if (!Number.isFinite(trunkRadius) || !Number.isFinite(crownRadius) || !Number.isFinite(crownBottom) ||\r\n trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||\r\n crownShape !== 'round' && crownShape !== 'cone') {\r\n throw /* alloc */ new Error('Invalid tree dimensions or crown shape');\r\n }\r\n}\r\n", "import { roundProfile } from '../globals/roundProfile.js';\n\n\nimport { parseColor } from \"../colors/parseColor.js\";\nimport { ring } from './createTreeRing.js';\nimport { surface } from './surface.js';\nimport { validateTree } from './validateTree.js';\n\n/** Low-poly tree, sharing the source block's buffers, picking and terrain offset. */\n\nexport function treeGeometry(point, style, addTriangle) {\n const { top, bottom = 0, trunkRadius, crownRadius, crownBottom, crownShape = 'round' } = style;\n validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape);\n const trunk = parseColor(style.trunkColor ?? 0x72513a);\n const crown = parseColor(style.color ?? 0x4f823b);\n surface(point, addTriangle, trunkRadius, bottom, trunkRadius, crownBottom + (top - crownBottom) * 0.25, trunk);\n let i, low, lr, high, hr;\n if (crownShape === 'cone') {\n const base = ring(point, crownRadius);\n for (i = 0; i < 8; i++) addTriangle(point, crownBottom, base[i], crownBottom,\n base[(i + 1) % 8], crownBottom, 0, -1, 0, crown);\n surface(point, addTriangle, crownRadius, crownBottom, 0, top, crown);\n } else {\n for (i = 1; i < roundProfile.length; i++) {\n [low, lr] = roundProfile[i - 1], [high, hr] = roundProfile[i];\n surface(point, addTriangle, lr * crownRadius, crownBottom + low * (top - crownBottom),\n hr * crownRadius, crownBottom + high * (top - crownBottom), crown);\n }\n }\n}\n", "import { generateTreeGeometry } from './generateTreeGeometry.js';\r\nimport { lampPostGeometry } from './lampPostGeometry.js';\r\nimport { lightGeometry } from './lightGeometry.js';\r\nimport { treeGeometry } from './treeGeometry.js';\r\n\r\nexport function buildProjectedPoint(context, projected, style, baseColor, support) {\r\n const { top } = style;\r\n if (context.backend.options.nightLight) {\r\n if (!Number.isFinite(style.lightFlux) || style.lightFlux <= 0) throw /* alloc */ new Error('Invalid light flux');\r\n if (style.poleRadius > 0 && !context.supports.has(support)) {\r\n generateTreeGeometry(context, lampPostGeometry, projected, style);\r\n context.supports.add(support);\r\n }\r\n generateTreeGeometry(context, lightGeometry, projected, style);\r\n context.lights.push(/* alloc */ {\r\n position: /* alloc */ [projected.x, projected.ground + top, -projected.y],\r\n radius: Math.hypot(top, style.lightRadius), color: /* alloc */ [baseColor.r, baseColor.g, baseColor.b],\r\n flux: style.lightFlux,\r\n });\r\n } else generateTreeGeometry(context, treeGeometry, projected, style);\r\n}\r\n", "/** Compact repeated features only when reconstructed float32 positions compare equal. */\r\nexport function instanceAreaGeometry(context) {\r\n const { positions, normals, colors, featureFaces } = context;\r\n if (context.backend.options.nightLight || featureFaces.length < 2) return context;\r\n const vertices = featureFaces[0].vertexEnd;\r\n const length = vertices * 3;\r\n if (!vertices || positions.length !== length * featureFaces.length) return context;\r\n const originX = Math.trunc(positions[0]), originY = Math.trunc(positions[1]), originZ = Math.trunc(positions[2]);\r\n const template = /* alloc */ new Float32Array(length);\r\n let i, instance, face, start;\r\n for (i = 0; i < length; i++) template[i] = positions[i] - (i % 3 === 0 ? originX : i % 3 === 1 ? originY : originZ);\r\n const offsets = /* alloc */ new Float32Array(featureFaces.length * 4);\r\n for (instance = 0; instance < featureFaces.length; instance++) {\r\n face = featureFaces[instance];\r\n start = instance * length;\r\n if (face.vertexStart !== instance * vertices || face.vertexEnd !== (instance + 1) * vertices) return context;\r\n offsets[instance * 4] = originX + positions[start] - positions[0];\r\n offsets[instance * 4 + 1] = originY + positions[start + 1] - positions[1];\r\n offsets[instance * 4 + 2] = originZ + positions[start + 2] - positions[2];\r\n offsets[instance * 4 + 3] = instance * vertices;\r\n for (i = 0; i < length; i++) {\r\n if (Math.fround(template[i] + offsets[instance * 4 + i % 3]) !== Math.fround(positions[start + i]) ||\r\n Math.fround(normals[i]) !== Math.fround(normals[start + i]) ||\r\n Math.fround(colors[i]) !== Math.fround(colors[start + i])) return context;\r\n }\r\n }\r\n return /* alloc */ {\r\n positions: template, normals: normals.slice(0, length), colors: colors.slice(0, length),\r\n instanceOffsets: offsets,\r\n };\r\n}\r\n", "/** Cache local AABB and center for ray picking and transparent mesh sorting. */\n\nexport function computeBounds(geometry) {\n const min = /* alloc */ [Infinity, Infinity, Infinity];\n const max = /* alloc */ [-Infinity, -Infinity, -Infinity];\n const data = geometry.attributes.position.data;\n let i, x, y, z;\n for (i = 0; i < data.length; i += 3) {\n x = data[i], y = data[i + 1], z = data[i + 2];\n min[0] = Math.min(min[0], x), max[0] = Math.max(max[0], x);\n min[1] = Math.min(min[1], y), max[1] = Math.max(max[1], y);\n min[2] = Math.min(min[2], z), max[2] = Math.max(max[2], z);\n }\n const instances = geometry.attributes.instanceOffset;\n if (instances) {\n let axis, offset, low, high;\n for (axis = 0; axis < 3; axis++) {\n low = Infinity;\n high = -Infinity;\n for (offset = axis; offset < instances.data.length; offset += instances.size) {\n low = Math.min(low, instances.data[offset]);\n high = Math.max(high, instances.data[offset]);\n }\n min[axis] = Math.fround(min[axis] + low);\n max[axis] = Math.fround(max[axis] + high);\n }\n }\n const center = /* alloc */ [\n (min[0] + max[0]) / 2,\n (min[1] + max[1]) / 2,\n (min[2] + max[2]) / 2,\n ];\n let radiusSquared = 0;\n for (i = 0; !instances && i < data.length; i += 3) {\n x = data[i] - center[0], y = data[i + 1] - center[1], z = data[i + 2] - center[2];\n radiusSquared = Math.max(radiusSquared, x * x + y * y + z * z);\n }\n let radius = instances ? Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) / 2\n : Math.sqrt(radiusSquared);\n // Preserve hypot's scaling for extreme coordinates in non-Float32 CPU geometry.\n if (!instances && (radiusSquared === Infinity || radiusSquared < Number.MIN_VALUE / Number.EPSILON)) {\n radius = 0;\n for (i = 0; i < data.length; i += 3) {\n radius = Math.max(radius, Math.hypot(\n data[i] - center[0], data[i + 1] - center[1], data[i + 2] - center[2]));\n }\n }\n geometry.bounds = /* alloc */ { min, max, center, radius };\n}\n", "import { buildProjectedPolygon } from './buildProjectedPolygon.js';\r\nimport { buildProjectedPoint } from './buildProjectedPoint.js';\r\nimport { instanceAreaGeometry } from './instanceAreaGeometry.js';\r\nimport { computeBounds } from './computeBounds.js';\r\n\r\nexport function assembleAreaGeometry({ jobs, nightLight }) {\r\n const context = /* alloc */ {\r\n backend: /* alloc */ { options: /* alloc */ { nightLight } },\r\n positions: /* alloc */ [], normals: /* alloc */ [], colors: /* alloc */ [], uvs: /* alloc */ [],\r\n featureFaces: /* alloc */ [], lights: /* alloc */ [], supports: /* alloc */ new Set(),\r\n };\r\n let job, polygon, start, end;\r\n for (job of jobs) {\r\n start = context.positions.length / 3;\r\n if (job.point) buildProjectedPoint(context, job.point, job.style, job.baseColor, job.support);\r\n for (polygon of job.polygons) {\r\n buildProjectedPolygon(context, polygon, job.style.top, job.style.bottom, job.baseColor);\r\n }\r\n end = context.positions.length / 3;\r\n context.featureFaces.push(/* alloc */ { vertexStart: start, vertexEnd: end, faceStart: start / 3, faceEnd: end / 3 });\r\n }\r\n const data = instanceAreaGeometry(context);\r\n const result = /* alloc */ {\r\n positions: /* alloc */ new Float32Array(data.positions),\r\n normals: /* alloc */ new Float32Array(data.normals),\r\n colors: /* alloc */ new Float32Array(data.colors),\r\n uvs: /* alloc */ new Float32Array(context.uvs),\r\n instanceOffsets: data.instanceOffsets,\r\n ranges: context.featureFaces,\r\n lights: context.lights,\r\n };\r\n if (result.positions.length) {\r\n const geometry = /* alloc */ { attributes: /* alloc */ {\r\n position: /* alloc */ { data: result.positions },\r\n instanceOffset: result.instanceOffsets ? /* alloc */ { data: result.instanceOffsets, size: 4 } : undefined,\r\n } };\r\n computeBounds(geometry);\r\n result.bounds = geometry.bounds;\r\n }\r\n return result;\r\n}\r\n", "import { assembleAreaGeometry } from '../geometry/assembleAreaGeometry.js';\r\n\r\nexport function onGeometryMessage(event) {\r\n try {\r\n const data = assembleAreaGeometry(event.data);\r\n const transfers = /* alloc */ [data.positions.buffer, data.normals.buffer, data.colors.buffer, data.uvs.buffer];\r\n if (data.instanceOffsets) transfers.push(data.instanceOffsets.buffer);\r\n self.postMessage(data, transfers);\r\n } catch (error) {\r\n self.postMessage(/* alloc */ { error: /* alloc */ { name: error.name, message: error.message } });\r\n }\r\n}\r\n\r\nself.addEventListener('message', onGeometryMessage);\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ring", "ring", "ring", "area", "ring", "ring", "ring", "ring", "addTriangle", "addTriangle", "addTriangle", "ring", "addTriangle", "ring", "addTriangle", "ring"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(()=>{var j=[];function U(t){let n=1/0,r;for(r of t)n=Math.min(n,r.x);return n}function V(t,n,r,o){let e=Math.min(r+o,t.length),i=Math.min(r+o*2,t.length),s=r,a=e,f;for(f=r;f<i;f++)s<e&&(a>=i||t[s].x<=t[a].x)?n[f]=t[s++]:n[f]=t[a++]}function W(t){if(t.length<2)return t;let n=new Array(t.length),r=[],o,e,i,s,a;for(o of t)r.push({ring:o,x:U(o)});let f=r,h=n;for(e=1;e<r.length;e*=2){for(i=0;i<r.length;i+=e*2)V(f,h,i,e);s=f,f=h,h=s}for(a=0;a<t.length;a++)t[a]=f[a].ring;return t}function x(t,n,r){return(n.x-t.x)*(r.y-t.y)-(n.y-t.y)*(r.x-t.x)}function g(t,n){return t.x===n.x&&t.y===n.y}function Z(t){let n=!0,r,o,e,i;for(;n&&t.length>3;)for(n=!1,r=0;r<t.length;r++)if(o=t[(r+t.length-1)%t.length],e=t[r],i=t[(r+1)%t.length],g(o,e)||Math.abs(x(o,e,i))<1e-10){t.splice(r,1),n=!0;break}if(t.length<3)throw new Error("Degenerate polygon ring");return t}function G(t){let n=0,r,o,e;for(r=0;r<t.length;r++)o=t[r],e=t[(r+1)%t.length],n+=o.x*e.y-e.x*o.y;return n<0}function Y(t,n){let r=[],o=0,e,i,s;for(e=0;e<t.length;e++)i=t[e],s=Z(n.slice(o,o+=i.length)),G(s)!==!!e&&s.reverse(),r.push(s);return r}function C(t,n){let r=!1,o,e,i,s;for(o=0,e=n.length-1;o<n.length;e=o++)i=n[o],s=n[e],i.y>t.y!=s.y>t.y&&t.x<(s.x-i.x)*(t.y-i.y)/(s.y-i.y)+i.x&&(r=!r);return r}function _(t,n){let r;for(r=1;r<n.length;r++)if(C(t,n[r]))return!0;return!1}function F(t,n,r){return Math.min(t.x,n.x)<=r.x&&r.x<=Math.max(t.x,n.x)&&Math.min(t.y,n.y)<=r.y&&r.y<=Math.max(t.y,n.y)}function J(t,n,r,o){if(g(t,r)||g(t,o)||g(n,r)||g(n,o))return!1;let e=x(t,n,r),i=x(t,n,o),s=x(r,o,t),a=x(r,o,n);return e*i<0&&s*a<0||e===0&&F(t,n,r)||i===0&&F(t,n,o)||s===0&&F(r,o,t)||a===0&&F(r,o,n)}function H(t,n,r){let o;for(o=0;o<r.length;o++)if(J(t,n,r[o],r[(o+1)%r.length]))return!0;return!1}function K(t,n,r,o){if(H(t,n,r))return!0;let e;for(e=1;e<o.length;e++)if(H(t,n,o[e]))return!0;return!1}function Q(t,n,r,o){let e=-1,i=-1,s=1/0,a,f,h,l,m;for(a=0;a<n.length;a++)for(f=0;f<t.length;f++)h=n[a],l=t[f],m=(h.x-l.x)**2+(h.y-l.y)**2,!(m>=s)&&(o.x=(h.x+l.x)/2,o.y=(h.y+l.y)/2,!(!C(o,r[0])||_(o,r))&&(K(h,l,t,r)||(e=a,i=f,s=m)));if(e<0)throw new Error("Unable to connect polygon hole");return[...t.slice(0,i+1),...n.slice(e),...n.slice(0,e+1),t[i],...t.slice(i+1)]}function T(t,n,r,o){let e;for(e of t)if(!g(e,n)&&!g(e,r)&&!g(e,o)&&x(n,r,e)>=0&&x(r,o,e)>=0&&x(o,n,e)>=0)return!0;return!1}function $(t){let n=[],r,o,e,i,s,a;for(;t.length>3;){for(r=!1,o=0;o<t.length;o++)if(e=t[(o+t.length-1)%t.length],i=t[o],s=t[(o+1)%t.length],!(x(e,i,s)<=1e-10)&&!T(t,e,i,s)){n.push([e.index,i.index,s.index]),t.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(x(...t)>1e-10){let f=[];for(a of t)f.push(a.index);n.push(f)}return n}function B(t){let n=0,r,o,e;for(r=0;r<t.length;r++)o=t[r],e=t[(r+1)%t.length],n+=o.x*e.y-e.x*o.y;return Math.abs(n)/2}function tt(t,n,r){let o=0,e=0,i,s;for(i=1;i<t.length;i++)o+=B(t[i]);let a=B(t[0])-o;for(s of r)e+=x(n[s[0]],n[s[1]],n[s[2]])/2;if(a<=0||Math.abs(e-a)>Math.max(1e-7,a*1e-8))throw new Error("Polygon triangulation area mismatch")}function rt(t,n=j){let r=[t,...n],o=r.flat(),e,i,s;for(e of o)if(!Number.isFinite(e.x)||!Number.isFinite(e.y))throw new Error("Invalid polygon coordinates");let a=[];for(i=0;i<o.length;i++)e=o[i],a.push({x:e.x-t[0].x,y:e.y-t[0].y,index:i});let f=Y(r,a),h=f[0].slice(),l=W(f.slice(1)),m=l.length?{x:0,y:0}:null;for(s of l)h=Q(h,s,f,m);let u=$(h);return tt(f,a,u),u}function N(t){return t.ground||0}function d(t,n,r,o,e,i,s,a,f,h,l){let{backend:m,positions:u,normals:M,colors:p,uvs:c}=t,y=o.x-n.x,b=e-r,R=n.y-o.y,q=i.x-n.x,L=s-r,X=n.y-i.y;if((b*X-R*L)*a+(R*q-y*X)*f+(y*L-b*q)*h<0){let pt=o,Mt=e;o=i,e=s,i=pt,s=Mt}u.push(n.x,r+N(n),-n.y,o.x,e+N(o),-o.y,i.x,s+N(i),-i.y),M.push(a,f,h,a,f,h,a,f,h),p.push(l.r,l.g,l.b,l.r,l.g,l.b,l.r,l.g,l.b),m.options.nightLight&&c.push(...n.uv,...o.uv,...i.uv)}function nt(t,n,r,o,e){let i=[],s,a,f,h,l,m,u,M,p,c,y;for(s of n)for(a of s)i.push(a);for([f,h,l]of rt(n[0],n.slice(1)))d(t,i[f],r,i[h],r,i[l],r,0,1,0,e),o>0&&d(t,i[f],o,i[h],o,i[l],o,0,-1,0,e);for(m=0;m<n.length;m++)for(s=n[m],u=G(s)===(m===0)?-1:1,M=0;M<s.length;M++)f=s[M],h=s[(M+1)%s.length],p=Math.hypot(h.x-f.x,h.y-f.y),p&&(c=u*(h.y-f.y)/p,y=u*(h.x-f.x)/p,d(t,f,o,h,o,h,r,c,0,y,e),d(t,f,o,h,r,f,r,c,0,y,e))}var w=[];function ot(...t){d(w[w.length-1],...t)}function O(t,n,r,o){w.push(t);try{n(r,o,ot)}finally{w.pop()}}function k(t){return t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055}function S(t,n,r,o){let e=(t+n*12)%12;return r-o*Math.max(-1,Math.min(e-3,9-e,1))}function I(t){if(t&&typeof t=="object"&&"h"in t){let i=t.s*Math.min(t.l,1-t.l);return{r:k(S(0,t.h,t.l,i)),g:k(S(8,t.h,t.l,i)),b:k(S(4,t.h,t.l,i))}}if(t&&typeof t=="object"&&"r"in t)return t;if(typeof t=="number")return{r:(t>>16&255)/255,g:(t>>8&255)/255,b:(t&255)/255};if(typeof t!="string"||!CSS.supports("color",t))throw new Error("Invalid 3D color");let n=document.createElement("canvas").getContext("2d");n.fillStyle=t,n.fillRect(0,0,1,1);let[r,o,e]=n.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:e/255}}var P=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function et(t,n){let r=new Array(P.length),o;for(o=0;o<r.length;o++)r[o]={x:t.x+P[o].x*n,y:t.y+P[o].y*n,ground:t.ground,uv:[3,3]};return r}function it(t,n,r){let o=I(5264986),e=n.poleRadius;if(!Number.isFinite(e)||e<=0)throw new Error("Invalid lamp pole radius");let i={...t,uv:[3,3]},s,a,f,h,l,m,u,M,p,c;for(c=0;c<2;c++)for(s=c?e*2.5:e,a=c?n.top-.25:0,f=c?n.top+.15:n.top,h=et(t,s),l=0;l<6;l++)m=h[l],u=h[(l+1)%6],M=P[l].nx,p=P[l].nz,r(m,a,u,a,u,f,M,0,p,o),r(m,a,u,f,m,f,M,0,p,o),r(i,f,m,f,u,f,0,1,0,o),r(i,a,u,a,m,a,0,-1,0,o)}function st(t,n,r,o,e,i,s,a,f,h){typeof a!="number"?(t(r,s,o,s,e,s,...a,n),t(r,s,e,s,i,s,...a,n)):(t(r,s,o,s,e,s,a,f,h,n),t(r,s,e,s,i,s,a,f,h,n))}function z(t,n,r,o){return{x:t.x+(o===2?0:n*.65),y:t.y+(o===1?0:o===2?n*.65:r*.65),ground:t.ground+(o===0?0:r*.65),uv:[n,r]}}function at(t,n,r){if(!Number.isFinite(n.lightRadius)||n.lightRadius<=0)throw new Error("Invalid light radius");let o=I(n.color),e;for(e=0;e<3;e++)st(r,o,z(t,-1,-1,e),z(t,1,-1,e),z(t,1,1,e),z(t,-1,1,e),n.top,e===2?1:0,e===0?1:0,e===1?1:0)}var D=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var E=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function A(t,n){let r=new Array(E.length),o;for(o=0;o<r.length;o++)r[o]={x:t.x+E[o].x*n,y:t.y+E[o].y*n,ground:t.ground};return r}function v(t,n,r,o,e,i,s){let a=A(t,r),f=A(t,e),h,l,m,u,M,p,c,y,b;for(h=0;h<8;h++)l=(h+1)%8,m=(r-e)/(i-o),u=Math.hypot(1,m),{nx:M,nz:p}=E[h],c=m/u,y=M/u,b=p/u,r&&n(a[h],o,a[l],o,f[l],i,y,c,b,s),e&&n(a[h],o,f[l],i,f[h],i,y,c,b,s)}function ft(t,n,r,o,e,i){if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)||t<=0||n<t||r<=o||r>=e||i!=="round"&&i!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function ht(t,n,r){let{top:o,bottom:e=0,trunkRadius:i,crownRadius:s,crownBottom:a,crownShape:f="round"}=n;ft(i,s,a,e,o,f);let h=I(n.trunkColor??7491898),l=I(n.color??5210683);v(t,r,i,e,i,a+(o-a)*.25,h);let m,u,M,p,c;if(f==="cone"){let y=A(t,s);for(m=0;m<8;m++)r(t,a,y[m],a,y[(m+1)%8],a,0,-1,0,l);v(t,r,s,a,0,o,l)}else for(m=1;m<D.length;m++)[u,M]=D[m-1],[p,c]=D[m],v(t,r,M*s,a+u*(o-a),c*s,a+p*(o-a),l)}function mt(t,n,r,o,e){let{top:i}=r;if(t.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!t.supports.has(e)&&(O(t,it,n,r),t.supports.add(e)),O(t,at,n,r),t.lights.push({position:[n.x,n.ground+i,-n.y],radius:Math.hypot(i,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else O(t,ht,n,r)}function lt(t){let{positions:n,normals:r,colors:o,featureFaces:e}=t;if(t.backend.options.nightLight||e.length<2)return t;let i=e[0].vertexEnd,s=i*3;if(!i||n.length!==s*e.length)return t;let a=Math.trunc(n[0]),f=Math.trunc(n[1]),h=Math.trunc(n[2]),l=new Float32Array(s),m,u,M,p;for(m=0;m<s;m++)l[m]=n[m]-(m%3===0?a:m%3===1?f:h);let c=new Float32Array(e.length*4);for(u=0;u<e.length;u++){if(M=e[u],p=u*s,M.vertexStart!==u*i||M.vertexEnd!==(u+1)*i)return t;for(c[u*4]=a+n[p]-n[0],c[u*4+1]=f+n[p+1]-n[1],c[u*4+2]=h+n[p+2]-n[2],c[u*4+3]=u*i,m=0;m<s;m++)if(Math.fround(l[m]+c[u*4+m%3])!==Math.fround(n[p+m])||Math.fround(r[m])!==Math.fround(r[p+m])||Math.fround(o[m])!==Math.fround(o[p+m]))return t}return{positions:l,normals:r.slice(0,s),colors:o.slice(0,s),instanceOffsets:c}}function ut(t){let n=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=t.attributes.position.data,e,i,s,a;for(e=0;e<o.length;e+=3)i=o[e],s=o[e+1],a=o[e+2],n[0]=Math.min(n[0],i),r[0]=Math.max(r[0],i),n[1]=Math.min(n[1],s),r[1]=Math.max(r[1],s),n[2]=Math.min(n[2],a),r[2]=Math.max(r[2],a);let f=t.attributes.instanceOffset;if(f){let u,M,p,c;for(u=0;u<3;u++){for(p=1/0,c=-1/0,M=u;M<f.data.length;M+=f.size)p=Math.min(p,f.data[M]),c=Math.max(c,f.data[M]);n[u]=Math.fround(n[u]+p),r[u]=Math.fround(r[u]+c)}}let h=[(n[0]+r[0])/2,(n[1]+r[1])/2,(n[2]+r[2])/2],l=0;for(e=0;!f&&e<o.length;e+=3)i=o[e]-h[0],s=o[e+1]-h[1],a=o[e+2]-h[2],l=Math.max(l,i*i+s*s+a*a);let m=f?Math.hypot(r[0]-n[0],r[1]-n[1],r[2]-n[2])/2:Math.sqrt(l);if(!f&&(l===1/0||l<Number.MIN_VALUE/Number.EPSILON))for(m=0,e=0;e<o.length;e+=3)m=Math.max(m,Math.hypot(o[e]-h[0],o[e+1]-h[1],o[e+2]-h[2]));t.bounds={min:n,max:r,center:h,radius:m}}function ct({jobs:t,nightLight:n}){let r={backend:{options:{nightLight:n}},positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set},o,e,i,s;for(o of t){i=r.positions.length/3,o.point&&mt(r,o.point,o.style,o.baseColor,o.support);for(e of o.polygons)nt(r,e,o.style.top,o.style.bottom,o.baseColor);s=r.positions.length/3,r.featureFaces.push({vertexStart:i,vertexEnd:s,faceStart:i/3,faceEnd:s/3})}let a=lt(r),f={positions:new Float32Array(a.positions),normals:new Float32Array(a.normals),colors:new Float32Array(a.colors),uvs:new Float32Array(r.uvs),instanceOffsets:a.instanceOffsets,ranges:r.featureFaces,lights:r.lights};if(f.positions.length){let h={attributes:{position:{data:f.positions},instanceOffset:f.instanceOffsets?{data:f.instanceOffsets,size:4}:void 0}};ut(h),f.bounds=h.bounds}return f}function xt(t){try{let n=ct(t.data),r=[n.positions.buffer,n.normals.buffer,n.colors.buffer,n.uvs.buffer];n.instanceOffsets&&r.push(n.instanceOffsets.buffer),self.postMessage(n,r)}catch(n){self.postMessage({error:{name:n.name,message:n.message}})}}self.addEventListener("message",xt);})();
|
|
2
|
+
//# sourceMappingURL=leaflet-city-mapper-worker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/globals/geometryEmpty.js", "../src/triangulation/minimumX.js", "../src/triangulation/mergeHoles.js", "../src/triangulation/sortHoles.js", "../src/triangulation/cross.js", "../src/triangulation/equal.js", "../src/triangulation/clean.js", "../src/triangulation/isClockWise.js", "../src/triangulation/polygonRings.js", "../src/triangulation/inside.js", "../src/triangulation/insideHole.js", "../src/triangulation/on.js", "../src/triangulation/intersects.js", "../src/triangulation/crossesRing.js", "../src/triangulation/crossesBoundary.js", "../src/triangulation/connectHole.js", "../src/triangulation/containsVertex.js", "../src/triangulation/clipEars.js", "../src/triangulation/area.js", "../src/triangulation/validateArea.js", "../src/triangulation/triangulate.js", "../src/sources/groundOffset.js", "../src/geometry/appendAreaTriangle.js", "../src/geometry/buildProjectedPolygon.js", "../src/globals/triangleContexts.js", "../src/geometry/addGeneratedTriangle.js", "../src/geometry/generateTreeGeometry.js", "../src/colors/toSRGB.js", "../src/colors/hslChannel.js", "../src/colors/parseColor.js", "../src/globals/lampDirections.js", "../src/geometry/createLampRing.js", "../src/geometry/lampPostGeometry.js", "../src/geometry/quad.js", "../src/geometry/emitter.js", "../src/geometry/lightGeometry.js", "../src/globals/roundProfile.js", "../src/globals/ringDirections.js", "../src/geometry/createTreeRing.js", "../src/geometry/surface.js", "../src/geometry/validateTree.js", "../src/geometry/treeGeometry.js", "../src/geometry/buildProjectedPoint.js", "../src/geometry/instanceAreaGeometry.js", "../src/geometry/computeBounds.js", "../src/geometry/assembleAreaGeometry.js", "../src/workers/geometryWorker.js"],
|
|
4
|
+
"sourcesContent": ["export const geometryEmpty = [];\n", "export function minimumX(ring) {\n let minimum = Infinity;\n let point;\n for (point of ring) minimum = Math.min(minimum, point.x);\n return minimum;\n}\n", "export function mergeHoles(source, target, start, width) {\r\n const middle = Math.min(start + width, source.length), end = Math.min(start + width * 2, source.length);\r\n let left = start, right = middle, output;\r\n for (output = start; output < end; output++) {\r\n if (left < middle && (right >= end || source[left].x <= source[right].x)) {\r\n target[output] = source[left++];\r\n } else {\r\n target[output] = source[right++];\r\n }\r\n }\r\n}\r\n", "import { minimumX } from './minimumX.js';\nimport { mergeHoles } from './mergeHoles.js';\n\nexport function sortHoles(holes) {\n if (holes.length < 2) return holes;\n const buffer = /* alloc */ new Array(holes.length);\n const entries = /* alloc */ [];\n let ring, width, start, previous, i;\n for (ring of holes) entries.push(/* alloc */ { ring, x: minimumX(ring) });\n let source = entries, target = buffer;\n for (width = 1; width < entries.length; width *= 2) {\n for (start = 0; start < entries.length; start += width * 2) {\n mergeHoles(source, target, start, width);\n }\n previous = source;\n source = target;\n target = previous;\n }\n for (i = 0; i < holes.length; i++) holes[i] = source[i].ring;\n return holes;\n}\n", "export function cross(a, b, c) {\r\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\r\n}\r\n", "export function equal(a, b) {\r\n return a.x === b.x && a.y === b.y;\r\n}\r\n", "import { cross } from './cross.js';\nimport { equal } from './equal.js';\n\nexport function clean(ring) {\n let changed = true;\n let i, a, b, c;\n while (changed && ring.length > 3) {\n changed = false;\n for (i = 0; i < ring.length; i++) {\n a = ring[(i + ring.length - 1) % ring.length], b = ring[i], c = ring[(i + 1) % ring.length];\n if (equal(a, b) || Math.abs(cross(a, b, c)) < 1e-10) {\n ring.splice(i, 1); changed = true; break;\n }\n }\n }\n if (ring.length < 3) throw /* alloc */ new Error('Degenerate polygon ring');\n return ring;\n}\n", "/**\n * @returns {boolean} Whether the `{x, y}` points are in clockwise order.\n */\n\nexport function isClockWise(points) {\n let area = 0;\n let i, a, b;\n for (i = 0; i < points.length; i++) {\n a = points[i], b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n return area < 0;\n}\n", "import { clean } from './clean.js';\r\nimport { isClockWise } from './isClockWise.js';\r\n\r\nexport function polygonRings(paths, vertices) {\r\n const rings = /* alloc */ [];\r\n let offset = 0, index, path, ring;\r\n for (index = 0; index < paths.length; index++) {\r\n path = paths[index];\r\n ring = clean(vertices.slice(offset, offset += path.length));\r\n if (isClockWise(ring) !== Boolean(index)) ring.reverse();\r\n rings.push(ring);\r\n }\r\n return rings;\r\n}\r\n", "export function inside(point, ring) {\n let result = false;\n let i, j, a, b;\n for (i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n a = ring[i], b = ring[j];\n if ((a.y > point.y) !== (b.y > point.y) &&\n point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x) result = !result;\n }\n return result;\n}\n", "import { inside } from './inside.js';\n\nexport function insideHole(point, rings) {\n let i;\n for (i = 1; i < rings.length; i++) if (inside(point, rings[i])) return true;\n return false;\n}\n", "export function on(p, q, r) {\r\n return Math.min(p.x, q.x) <= r.x && r.x <= Math.max(p.x, q.x) &&\r\n Math.min(p.y, q.y) <= r.y && r.y <= Math.max(p.y, q.y);\r\n}\r\n", "import { equal } from './equal.js';\r\nimport { cross } from './cross.js';\r\nimport { on } from './on.js';\r\n\r\nexport function intersects(a, b, c, d) {\r\n if (equal(a, c) || equal(a, d) || equal(b, c) || equal(b, d)) return false;\r\n const abC = cross(a, b, c), abD = cross(a, b, d), cdA = cross(c, d, a), cdB = cross(c, d, b);\r\n return abC * abD < 0 && cdA * cdB < 0 ||\r\n abC === 0 && on(a, b, c) || abD === 0 && on(a, b, d) ||\r\n cdA === 0 && on(c, d, a) || cdB === 0 && on(c, d, b);\r\n}\r\n", "import { intersects } from './intersects.js';\n\nexport function crossesRing(a, b, ring) {\n let i;\n for (i = 0; i < ring.length; i++) {\n if (intersects(a, b, ring[i], ring[(i + 1) % ring.length])) return true;\n }\n return false;\n}\n", "import { crossesRing } from './crossesRing.js';\n\nexport function crossesBoundary(a, b, polygon, rings) {\n if (crossesRing(a, b, polygon)) return true;\n let i;\n for (i = 1; i < rings.length; i++) if (crossesRing(a, b, rings[i])) return true;\n return false;\n}\n", "import { inside } from './inside.js';\r\nimport { insideHole } from './insideHole.js';\r\nimport { crossesBoundary } from './crossesBoundary.js';\r\n\r\nexport function connectHole(polygon, hole, rings, mid) {\r\n let h2 = -1, p2 = -1, distance = Infinity, h, p, a, b, d;\r\n for (h = 0; h < hole.length; h++) for (p = 0; p < polygon.length; p++) {\r\n a = hole[h], b = polygon[p], d = (a.x - b.x) ** 2 + (a.y - b.y) ** 2;\r\n if (d >= distance) continue;\r\n mid.x = (a.x + b.x) / 2; mid.y = (a.y + b.y) / 2;\r\n if (!inside(mid, rings[0]) || insideHole(mid, rings)) continue;\r\n if (crossesBoundary(a, b, polygon, rings)) continue;\r\n h2 = h; p2 = p; distance = d;\r\n }\r\n if (h2 < 0) throw /* alloc */ new Error('Unable to connect polygon hole');\r\n return /* alloc */ [...polygon.slice(0, p2 + 1), ...hole.slice(h2), ...hole.slice(0, h2 + 1),\r\n polygon[p2], ...polygon.slice(p2 + 1)];\r\n}\r\n", "import { equal } from './equal.js';\nimport { cross } from './cross.js';\n\nexport function containsVertex(polygon, a, b, c) {\n let p;\n for (p of polygon) {\n if (!equal(p, a) && !equal(p, b) && !equal(p, c) &&\n cross(a, b, p) >= 0 && cross(b, c, p) >= 0 && cross(c, a, p) >= 0) return true;\n }\n return false;\n}\n", "import { cross } from './cross.js';\r\nimport { containsVertex } from './containsVertex.js';\r\n\r\nexport function clipEars(polygon) {\r\n const result = /* alloc */ [];\r\n let clipped, i, a, b, c, p;\r\n while (polygon.length > 3) {\r\n clipped = false;\r\n for (i = 0; i < polygon.length; i++) {\r\n a = polygon[(i + polygon.length - 1) % polygon.length], b = polygon[i], c = polygon[(i + 1) % polygon.length];\r\n if (cross(a, b, c) <= 1e-10) continue;\r\n if (containsVertex(polygon, a, b, c)) continue;\r\n result.push(/* alloc */ [a.index, b.index, c.index]); polygon.splice(i, 1); clipped = true; break;\r\n }\r\n if (!clipped) throw /* alloc */ new Error('Unable to triangulate polygon: invalid or self-intersecting rings');\r\n }\r\n if (cross(...polygon) > 1e-10) {\r\n const triangle = /* alloc */ [];\r\n for (p of polygon) triangle.push(p.index);\r\n result.push(triangle);\r\n }\r\n return result;\r\n}\r\n", "export function area(ring) {\n let sum = 0;\n let i, p, q;\n for (i = 0; i < ring.length; i++) {\n p = ring[i], q = ring[(i + 1) % ring.length];\n sum += p.x * q.y - q.x * p.y;\n }\n return Math.abs(sum) / 2;\n}\n", "import { area } from './area.js';\r\nimport { cross } from './cross.js';\r\n\r\nexport function validateArea(rings, vertices, result) {\r\n let holeArea = 0, actual = 0, i, triangle;\r\n for (i = 1; i < rings.length; i++) holeArea += area(rings[i]);\r\n const expected = area(rings[0]) - holeArea;\r\n for (triangle of result) actual += cross(vertices[triangle[0]], vertices[triangle[1]], vertices[triangle[2]]) / 2;\r\n if (expected <= 0 || Math.abs(actual - expected) > Math.max(1e-7, expected * 1e-8)) throw /* alloc */ new Error('Polygon triangulation area mismatch');\r\n}\r\n", "import { geometryEmpty } from '../globals/geometryEmpty.js';\nimport { sortHoles } from './sortHoles.js';\nimport { polygonRings } from './polygonRings.js';\nimport { connectHole } from './connectHole.js';\nimport { clipEars } from './clipEars.js';\nimport { validateArea } from './validateArea.js';\n\n\n/**\n * Triangulates a polygon given as `{x, y}` points.\n * Rings omit the repeated closing point; winding is normalized internally.\n * Vertex indices remain relative to the original inputs after duplicate/collinear\n * cleanup. Hole bridges duplicate endpoints, not source vertices.\n * @param {Object[]} contour Outer boundary.\n * @param {Object[][]} [holes] Interior boundaries.\n *\n * @returns {number[][]} Triangles as indices in `[...contour, ...holes.flat()]`.\n */\n\nexport function triangulate(contour, holes = geometryEmpty) {\n const paths = /* alloc */ [contour, ...holes];\n const points = paths.flat();\n let p, index, hole;\n for (p of points) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) throw /* alloc */ new Error('Invalid polygon coordinates');\n }\n // Translate near the origin to avoid cancellation with geographic coordinates.\n const vertices = /* alloc */ [];\n for (index = 0; index < points.length; index++) {\n p = points[index];\n vertices.push(/* alloc */ { x: p.x - contour[0].x, y: p.y - contour[0].y, index });\n }\n // Remove zero-area corners before connecting holes; keep original vertex indices.\n const rings = polygonRings(paths, vertices);\n let polygon = rings[0].slice();\n // A bridge must stay inside the outer boundary, outside every hole, and cross no edge.\n // ponytail: quadratic ear clipping for building footprints; use spatial indexing for large rings.\n const holesToConnect = sortHoles(rings.slice(1));\n const mid = holesToConnect.length ? /* alloc */ { x: 0, y: 0 } : null;\n for (hole of holesToConnect) {\n polygon = connectHole(polygon, hole, rings, mid);\n }\n // Clip a convex corner only when no other vertex is inside/on its triangle.\n const result = clipEars(polygon);\n // Reject incomplete coverage instead of silently emitting a partial roof.\n validateArea(rings, vertices, result);\n return result;\n}\n", "export function groundOffset(point) {\r\n return point.ground || 0;\r\n}\n", "import { groundOffset } from '../sources/groundOffset.js';\r\n\r\nexport function addTriangle(context, a, ah, b, bh, c, ch, nx, ny, nz, color) {\r\n const { backend: layer, positions, normals, colors, uvs } = context;\r\n const ux = b.x - a.x, uy = bh - ah, uz = a.y - b.y;\r\n const vx = c.x - a.x, vy = ch - ah, vz = a.y - c.y;\r\n if ((uy * vz - uz * vy) * nx + (uz * vx - ux * vz) * ny + (ux * vy - uy * vx) * nz < 0) {\r\n const point = b, height = bh;\r\n b = c; bh = ch; c = point; ch = height;\r\n }\r\n positions.push(a.x, ah + groundOffset(a), -a.y,\r\n b.x, bh + groundOffset(b), -b.y,\r\n c.x, ch + groundOffset(c), -c.y);\r\n normals.push(nx, ny, nz, nx, ny, nz, nx, ny, nz);\r\n colors.push(color.r, color.g, color.b, color.r, color.g, color.b, color.r, color.g, color.b);\r\n if (layer.options.nightLight) uvs.push(...a.uv, ...b.uv, ...c.uv);\r\n}\r\n", "import { triangulate } from '../triangulation/triangulate.js';\r\nimport { addTriangle } from './appendAreaTriangle.js';\r\nimport { isClockWise } from '../triangulation/isClockWise.js';\r\n\r\nexport function buildProjectedPolygon(context, paths, top, bottom, baseColor) {\r\n const points = /* alloc */ [];\r\n let path, point, a, b, c, index, sign, i, length, nx, nz;\r\n for (path of paths) for (point of path) points.push(point);\r\n for ([a, b, c] of triangulate(paths[0], paths.slice(1))) {\r\n addTriangle(context, points[a], top, points[b], top, points[c], top, 0, 1, 0, baseColor);\r\n if (bottom > 0) addTriangle(context, points[a], bottom, points[b], bottom, points[c], bottom, 0, -1, 0, baseColor);\r\n }\r\n for (index = 0; index < paths.length; index++) {\r\n path = paths[index];\r\n sign = isClockWise(path) === (index === 0) ? -1 : 1;\r\n for (i = 0; i < path.length; i++) {\r\n a = path[i], b = path[(i + 1) % path.length];\r\n length = Math.hypot(b.x - a.x, b.y - a.y);\r\n if (!length) continue;\r\n nx = sign * (b.y - a.y) / length, nz = sign * (b.x - a.x) / length;\r\n addTriangle(context, a, bottom, b, bottom, b, top, nx, 0, nz, baseColor);\r\n addTriangle(context, a, bottom, b, top, a, top, nx, 0, nz, baseColor);\r\n }\r\n }\r\n}\r\n", "export const triangleContexts = [];\n", "import { triangleContexts } from '../globals/triangleContexts.js';\n\nimport { addTriangle } from './appendAreaTriangle.js';\n\nexport function addGeneratedTriangle(...args) {\r\n addTriangle(triangleContexts[triangleContexts.length - 1], ...args);\r\n}\n", "import { triangleContexts } from '../globals/triangleContexts.js';\n\n\nimport { addGeneratedTriangle } from './addGeneratedTriangle.js';\n\nexport function generateTreeGeometry(context, generator, point, style) {\r\n triangleContexts.push(context);\r\n try {\r\n generator(point, style, addGeneratedTriangle);\r\n } finally {\r\n triangleContexts.pop();\r\n }\r\n}\n", "export function toSRGB(value) {\n return value <= 0.0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - 0.055;\n}\n", "export function channel(n, h, l, a) {\n const k = (n + h * 12) % 12;\n return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n}\n", "import { toSRGB } from \"./toSRGB.js\";\nimport { channel } from \"./hslChannel.js\";\n\n/**\n * HSL inputs are linear-space to preserve the original building styling.\n * Numeric/CSS/RGB inputs are already sRGB; CSS alpha is not used for extrusion.\n * @param {number|string|Object} value 0xRRGGBB, CSS color, {r,g,b}, or {h,s,l} in 0..1.\n * @returns {Object} sRGB {r,g,b} components in 0..1.\n */\n\nexport function parseColor(value) {\n if (value && typeof value === 'object' && 'h' in value) {\n const a = value.s * Math.min(value.l, 1 - value.l);\n return /* alloc */ {\n r: toSRGB(channel(0, value.h, value.l, a)),\n g: toSRGB(channel(8, value.h, value.l, a)),\n b: toSRGB(channel(4, value.h, value.l, a))\n };\n }\n if (value && typeof value === 'object' && 'r' in value) {\n return value;\n }\n if (typeof value === 'number') {\n return /* alloc */ {\n r: (value >> 16 & 255) / 255,\n g: (value >> 8 & 255) / 255,\n b: (value & 255) / 255,\n };\n }\n if (typeof value !== 'string' || !CSS.supports('color', value)) {\n throw /* alloc */ new Error('Invalid 3D color');\n }\n const context = document.createElement('canvas').getContext('2d');\n context.fillStyle = value;\n context.fillRect(0, 0, 1, 1);\n const [r, g, b] = context.getImageData(0, 0, 1, 1).data;\n return /* alloc */ {\n r: r / 255,\n g: g / 255,\n b: b / 255\n };\n}\n", "export const lampDirections = [\r\n { x: Math.cos(0 * Math.PI / 3), y: Math.sin(0 * Math.PI / 3), nx: Math.cos(0.5 * Math.PI / 3), nz: -Math.sin(0.5 * Math.PI / 3) },\r\n { x: Math.cos(1 * Math.PI / 3), y: Math.sin(1 * Math.PI / 3), nx: Math.cos(1.5 * Math.PI / 3), nz: -Math.sin(1.5 * Math.PI / 3) },\r\n { x: Math.cos(2 * Math.PI / 3), y: Math.sin(2 * Math.PI / 3), nx: Math.cos(2.5 * Math.PI / 3), nz: -Math.sin(2.5 * Math.PI / 3) },\r\n { x: Math.cos(3 * Math.PI / 3), y: Math.sin(3 * Math.PI / 3), nx: Math.cos(3.5 * Math.PI / 3), nz: -Math.sin(3.5 * Math.PI / 3) },\r\n { x: Math.cos(4 * Math.PI / 3), y: Math.sin(4 * Math.PI / 3), nx: Math.cos(4.5 * Math.PI / 3), nz: -Math.sin(4.5 * Math.PI / 3) },\r\n { x: Math.cos(5 * Math.PI / 3), y: Math.sin(5 * Math.PI / 3), nx: Math.cos(5.5 * Math.PI / 3), nz: -Math.sin(5.5 * Math.PI / 3) },\r\n];\r\n", "import { lampDirections } from '../globals/lampDirections.js';\n\nexport function ring(point, radius) {\n const points = /* alloc */ new Array(lampDirections.length);\n let i;\n for (i = 0; i < points.length; i++) {\n points[i] = /* alloc */ {\n x: point.x + lampDirections[i].x * radius,\n y: point.y + lampDirections[i].y * radius, ground: point.ground,\n uv: /* alloc */ [3, 3],\n };\n }\n return points;\n}\n", "import { parseColor } from \"../colors/parseColor.js\";\nimport { ring } from './createLampRing.js';\nimport { lampDirections } from '../globals/lampDirections.js';\n\n/** Schematic support and lamp head; wall-mounted fixtures do not get an invented pole. */\n\nexport function lampPostGeometry(point, style, addTriangle) {\n const color = parseColor(0x50565a), radius = style.poleRadius;\n if (!Number.isFinite(radius) || radius <= 0) {\n throw /* alloc */ new Error('Invalid lamp pole radius');\n }\n const center = /* alloc */ {\n ...point, uv: /* alloc */ [3, 3],\n };\n let r, low, high, points, i, a, b, nx, nz, section;\n for (section = 0; section < 2; section++) {\n r = section ? radius * 2.5 : radius;\n low = section ? style.top - 0.25 : 0;\n high = section ? style.top + 0.15 : style.top;\n points = ring(point, r);\n for (i = 0; i < 6; i++) {\n a = points[i], b = points[(i + 1) % 6];\n nx = lampDirections[i].nx, nz = lampDirections[i].nz;\n addTriangle(a, low, b, low, b, high, nx, 0, nz, color);\n addTriangle(a, low, b, high, a, high, nx, 0, nz, color);\n addTriangle(center, high, a, high, b, high, 0, 1, 0, color);\n addTriangle(center, low, b, low, a, low, 0, -1, 0, color);\n }\n }\n}\n", "export function quad(addTriangle, color, a, b, c, d, height, nx, ny, nz) {\r\n if (typeof nx !== 'number') {\r\n addTriangle(a, height, b, height, c, height, ...nx, color);\r\n addTriangle(a, height, c, height, d, height, ...nx, color);\r\n } else {\r\n addTriangle(a, height, b, height, c, height, nx, ny, nz, color);\r\n addTriangle(a, height, c, height, d, height, nx, ny, nz, color);\r\n }\r\n}\r\n", "export function emitter(point, u, v, axis) {\r\n const r = 0.65;\r\n return /* alloc */ {\r\n x: point.x + (axis === 2 ? 0 : u * r),\r\n y: point.y + (axis === 1 ? 0 : axis === 2 ? u * r : v * r),\r\n ground: point.ground + (axis === 0 ? 0 : v * r), uv: /* alloc */ [u, v],\r\n };\r\n}\r\n", "import { parseColor } from \"../colors/parseColor.js\";\nimport { quad } from './quad.js';\nimport { emitter } from './emitter.js';\n\n/** Three crossed emitter discs; illumination itself is evaluated on receiving surfaces. */\n\nexport function lightGeometry(point, style, addTriangle) {\n if (!Number.isFinite(style.lightRadius) || style.lightRadius <= 0) throw /* alloc */ new Error('Invalid light radius');\n const color = parseColor(style.color);\n let axis;\n for (axis = 0; axis < 3; axis++) {\n quad(addTriangle, color, emitter(point, -1, -1, axis), emitter(point, 1, -1, axis), emitter(point, 1, 1, axis), emitter(point, -1, 1, axis),\n style.top, axis === 2 ? 1 : 0, axis === 0 ? 1 : 0, axis === 1 ? 1 : 0);\n }\n}\n", "export const roundProfile = [\n [0, 0],\n [0.35, 0.8],\n [0.6, 1],\n [0.85, 0.7],\n [1, 0]\n];\n", "export const ringDirections = [{\n x: Math.cos(0 * Math.PI / 4),\n y: Math.sin(0 * Math.PI / 4),\n nx: Math.cos((0 + 0.5) * Math.PI / 4),\n nz: -Math.sin((0 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(1 * Math.PI / 4),\n y: Math.sin(1 * Math.PI / 4),\n nx: Math.cos((1 + 0.5) * Math.PI / 4),\n nz: -Math.sin((1 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(2 * Math.PI / 4),\n y: Math.sin(2 * Math.PI / 4),\n nx: Math.cos((2 + 0.5) * Math.PI / 4),\n nz: -Math.sin((2 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(3 * Math.PI / 4),\n y: Math.sin(3 * Math.PI / 4),\n nx: Math.cos((3 + 0.5) * Math.PI / 4),\n nz: -Math.sin((3 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(4 * Math.PI / 4),\n y: Math.sin(4 * Math.PI / 4),\n nx: Math.cos((4 + 0.5) * Math.PI / 4),\n nz: -Math.sin((4 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(5 * Math.PI / 4),\n y: Math.sin(5 * Math.PI / 4),\n nx: Math.cos((5 + 0.5) * Math.PI / 4),\n nz: -Math.sin((5 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(6 * Math.PI / 4),\n y: Math.sin(6 * Math.PI / 4),\n nx: Math.cos((6 + 0.5) * Math.PI / 4),\n nz: -Math.sin((6 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(7 * Math.PI / 4),\n y: Math.sin(7 * Math.PI / 4),\n nx: Math.cos((7 + 0.5) * Math.PI / 4),\n nz: -Math.sin((7 + 0.5) * Math.PI / 4)\n },\n];\n", "import { ringDirections } from '../globals/ringDirections.js';\n\n\nexport function ring(point, radius) {\n const result = /* alloc */ new Array(ringDirections.length);\n let i;\n for (i = 0; i < result.length; i++) {\n result[i] = /* alloc */ {\n x: point.x + ringDirections[i].x * radius,\n y: point.y + ringDirections[i].y * radius,\n ground: point.ground,\n };\n }\n return result;\n}\n", "import { ringDirections } from '../globals/ringDirections.js';\n\nimport { ring } from './createTreeRing.js';\n\nexport function surface(point, addTriangle, lowRadius, low, highRadius, high, color) {\n const lower = ring(point, lowRadius), upper = ring(point, highRadius);\n let i, next, slope, length, nx, nz, ny, normalX, normalZ;\n for (i = 0; i < 8; i++) {\n next = (i + 1) % 8;\n slope = (lowRadius - highRadius) / (high - low);\n length = Math.hypot(1, slope);\n ({ nx, nz } = ringDirections[i]);\n ny = slope / length;\n normalX = nx / length, normalZ = nz / length;\n if (lowRadius) addTriangle(lower[i], low, lower[next], low, upper[next], high, normalX, ny, normalZ, color);\n if (highRadius) addTriangle(lower[i], low, upper[next], high, upper[i], high, normalX, ny, normalZ, color);\n }\n}\n", "export function validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape) {\r\n if (!Number.isFinite(trunkRadius) || !Number.isFinite(crownRadius) || !Number.isFinite(crownBottom) ||\r\n trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||\r\n crownShape !== 'round' && crownShape !== 'cone') {\r\n throw /* alloc */ new Error('Invalid tree dimensions or crown shape');\r\n }\r\n}\r\n", "import { roundProfile } from '../globals/roundProfile.js';\n\n\nimport { parseColor } from \"../colors/parseColor.js\";\nimport { ring } from './createTreeRing.js';\nimport { surface } from './surface.js';\nimport { validateTree } from './validateTree.js';\n\n/** Low-poly tree, sharing the source block's buffers, picking and terrain offset. */\n\nexport function treeGeometry(point, style, addTriangle) {\n const { top, bottom = 0, trunkRadius, crownRadius, crownBottom, crownShape = 'round' } = style;\n validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape);\n const trunk = parseColor(style.trunkColor ?? 0x72513a);\n const crown = parseColor(style.color ?? 0x4f823b);\n surface(point, addTriangle, trunkRadius, bottom, trunkRadius, crownBottom + (top - crownBottom) * 0.25, trunk);\n let i, low, lr, high, hr;\n if (crownShape === 'cone') {\n const base = ring(point, crownRadius);\n for (i = 0; i < 8; i++) addTriangle(point, crownBottom, base[i], crownBottom,\n base[(i + 1) % 8], crownBottom, 0, -1, 0, crown);\n surface(point, addTriangle, crownRadius, crownBottom, 0, top, crown);\n } else {\n for (i = 1; i < roundProfile.length; i++) {\n [low, lr] = roundProfile[i - 1], [high, hr] = roundProfile[i];\n surface(point, addTriangle, lr * crownRadius, crownBottom + low * (top - crownBottom),\n hr * crownRadius, crownBottom + high * (top - crownBottom), crown);\n }\n }\n}\n", "import { generateTreeGeometry } from './generateTreeGeometry.js';\r\nimport { lampPostGeometry } from './lampPostGeometry.js';\r\nimport { lightGeometry } from './lightGeometry.js';\r\nimport { treeGeometry } from './treeGeometry.js';\r\n\r\nexport function buildProjectedPoint(context, projected, style, baseColor, support) {\r\n const { top } = style;\r\n if (context.backend.options.nightLight) {\r\n if (!Number.isFinite(style.lightFlux) || style.lightFlux <= 0) throw /* alloc */ new Error('Invalid light flux');\r\n if (style.poleRadius > 0 && !context.supports.has(support)) {\r\n generateTreeGeometry(context, lampPostGeometry, projected, style);\r\n context.supports.add(support);\r\n }\r\n generateTreeGeometry(context, lightGeometry, projected, style);\r\n context.lights.push(/* alloc */ {\r\n position: /* alloc */ [projected.x, projected.ground + top, -projected.y],\r\n radius: Math.hypot(top, style.lightRadius), color: /* alloc */ [baseColor.r, baseColor.g, baseColor.b],\r\n flux: style.lightFlux,\r\n });\r\n } else generateTreeGeometry(context, treeGeometry, projected, style);\r\n}\r\n", "/** Compact repeated features only when reconstructed float32 positions compare equal. */\r\nexport function instanceAreaGeometry(context) {\r\n const { positions, normals, colors, featureFaces } = context;\r\n if (context.backend.options.nightLight || featureFaces.length < 2) return context;\r\n const vertices = featureFaces[0].vertexEnd;\r\n const length = vertices * 3;\r\n if (!vertices || positions.length !== length * featureFaces.length) return context;\r\n const originX = Math.trunc(positions[0]), originY = Math.trunc(positions[1]), originZ = Math.trunc(positions[2]);\r\n const template = /* alloc */ new Float32Array(length);\r\n let i, instance, face, start;\r\n for (i = 0; i < length; i++) template[i] = positions[i] - (i % 3 === 0 ? originX : i % 3 === 1 ? originY : originZ);\r\n const offsets = /* alloc */ new Float32Array(featureFaces.length * 4);\r\n for (instance = 0; instance < featureFaces.length; instance++) {\r\n face = featureFaces[instance];\r\n start = instance * length;\r\n if (face.vertexStart !== instance * vertices || face.vertexEnd !== (instance + 1) * vertices) return context;\r\n offsets[instance * 4] = originX + positions[start] - positions[0];\r\n offsets[instance * 4 + 1] = originY + positions[start + 1] - positions[1];\r\n offsets[instance * 4 + 2] = originZ + positions[start + 2] - positions[2];\r\n offsets[instance * 4 + 3] = instance * vertices;\r\n for (i = 0; i < length; i++) {\r\n if (Math.fround(template[i] + offsets[instance * 4 + i % 3]) !== Math.fround(positions[start + i]) ||\r\n Math.fround(normals[i]) !== Math.fround(normals[start + i]) ||\r\n Math.fround(colors[i]) !== Math.fround(colors[start + i])) return context;\r\n }\r\n }\r\n return /* alloc */ {\r\n positions: template, normals: normals.slice(0, length), colors: colors.slice(0, length),\r\n instanceOffsets: offsets,\r\n };\r\n}\r\n", "/** Cache local AABB and center for ray picking and transparent mesh sorting. */\n\nexport function computeBounds(geometry) {\n const min = /* alloc */ [Infinity, Infinity, Infinity];\n const max = /* alloc */ [-Infinity, -Infinity, -Infinity];\n const data = geometry.attributes.position.data;\n let i, x, y, z;\n for (i = 0; i < data.length; i += 3) {\n x = data[i], y = data[i + 1], z = data[i + 2];\n min[0] = Math.min(min[0], x), max[0] = Math.max(max[0], x);\n min[1] = Math.min(min[1], y), max[1] = Math.max(max[1], y);\n min[2] = Math.min(min[2], z), max[2] = Math.max(max[2], z);\n }\n const instances = geometry.attributes.instanceOffset;\n if (instances) {\n let axis, offset, low, high;\n for (axis = 0; axis < 3; axis++) {\n low = Infinity;\n high = -Infinity;\n for (offset = axis; offset < instances.data.length; offset += instances.size) {\n low = Math.min(low, instances.data[offset]);\n high = Math.max(high, instances.data[offset]);\n }\n min[axis] = Math.fround(min[axis] + low);\n max[axis] = Math.fround(max[axis] + high);\n }\n }\n const center = /* alloc */ [\n (min[0] + max[0]) / 2,\n (min[1] + max[1]) / 2,\n (min[2] + max[2]) / 2,\n ];\n let radiusSquared = 0;\n for (i = 0; !instances && i < data.length; i += 3) {\n x = data[i] - center[0], y = data[i + 1] - center[1], z = data[i + 2] - center[2];\n radiusSquared = Math.max(radiusSquared, x * x + y * y + z * z);\n }\n let radius = instances ? Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) / 2\n : Math.sqrt(radiusSquared);\n // Preserve hypot's scaling for extreme coordinates in non-Float32 CPU geometry.\n if (!instances && (radiusSquared === Infinity || radiusSquared < Number.MIN_VALUE / Number.EPSILON)) {\n radius = 0;\n for (i = 0; i < data.length; i += 3) {\n radius = Math.max(radius, Math.hypot(\n data[i] - center[0], data[i + 1] - center[1], data[i + 2] - center[2]));\n }\n }\n geometry.bounds = /* alloc */ { min, max, center, radius };\n}\n", "import { buildProjectedPolygon } from './buildProjectedPolygon.js';\r\nimport { buildProjectedPoint } from './buildProjectedPoint.js';\r\nimport { instanceAreaGeometry } from './instanceAreaGeometry.js';\r\nimport { computeBounds } from './computeBounds.js';\r\n\r\nexport function assembleAreaGeometry({ jobs, nightLight }) {\r\n const context = /* alloc */ {\r\n backend: /* alloc */ { options: /* alloc */ { nightLight } },\r\n positions: /* alloc */ [], normals: /* alloc */ [], colors: /* alloc */ [], uvs: /* alloc */ [],\r\n featureFaces: /* alloc */ [], lights: /* alloc */ [], supports: /* alloc */ new Set(),\r\n };\r\n let job, polygon, start, end;\r\n for (job of jobs) {\r\n start = context.positions.length / 3;\r\n if (job.point) buildProjectedPoint(context, job.point, job.style, job.baseColor, job.support);\r\n for (polygon of job.polygons) {\r\n buildProjectedPolygon(context, polygon, job.style.top, job.style.bottom, job.baseColor);\r\n }\r\n end = context.positions.length / 3;\r\n context.featureFaces.push(/* alloc */ { vertexStart: start, vertexEnd: end, faceStart: start / 3, faceEnd: end / 3 });\r\n }\r\n const data = instanceAreaGeometry(context);\r\n const result = /* alloc */ {\r\n positions: /* alloc */ new Float32Array(data.positions),\r\n normals: /* alloc */ new Float32Array(data.normals),\r\n colors: /* alloc */ new Float32Array(data.colors),\r\n uvs: /* alloc */ new Float32Array(context.uvs),\r\n instanceOffsets: data.instanceOffsets,\r\n ranges: context.featureFaces,\r\n lights: context.lights,\r\n };\r\n if (result.positions.length) {\r\n const geometry = /* alloc */ { attributes: /* alloc */ {\r\n position: /* alloc */ { data: result.positions },\r\n instanceOffset: result.instanceOffsets ? /* alloc */ { data: result.instanceOffsets, size: 4 } : undefined,\r\n } };\r\n computeBounds(geometry);\r\n result.bounds = geometry.bounds;\r\n }\r\n return result;\r\n}\r\n", "import { assembleAreaGeometry } from '../geometry/assembleAreaGeometry.js';\r\n\r\nexport function onGeometryMessage(event) {\r\n try {\r\n const data = assembleAreaGeometry(event.data);\r\n const transfers = /* alloc */ [data.positions.buffer, data.normals.buffer, data.colors.buffer, data.uvs.buffer];\r\n if (data.instanceOffsets) transfers.push(data.instanceOffsets.buffer);\r\n self.postMessage(data, transfers);\r\n } catch (error) {\r\n self.postMessage(/* alloc */ { error: /* alloc */ { name: error.name, message: error.message } });\r\n }\r\n}\r\n\r\nself.addEventListener('message', onGeometryMessage);\r\n"],
|
|
5
|
+
"mappings": "MAAO,IAAMA,EAAgB,CAAC,ECAvB,SAASC,EAASC,EAAM,CAC7B,IAAIC,EAAU,IACVC,EACJ,IAAKA,KAASF,EAAMC,EAAU,KAAK,IAAIA,EAASC,EAAM,CAAC,EACvD,OAAOD,CACT,CCLO,SAASE,EAAWC,EAAQC,EAAQC,EAAOC,EAAO,CACvD,IAAMC,EAAS,KAAK,IAAIF,EAAQC,EAAOH,EAAO,MAAM,EAAGK,EAAM,KAAK,IAAIH,EAAQC,EAAQ,EAAGH,EAAO,MAAM,EAClGM,EAAOJ,EAAOK,EAAQH,EAAQI,EAClC,IAAKA,EAASN,EAAOM,EAASH,EAAKG,IAC7BF,EAAOF,IAAWG,GAASF,GAAOL,EAAOM,CAAI,EAAE,GAAKN,EAAOO,CAAK,EAAE,GACpEN,EAAOO,CAAM,EAAIR,EAAOM,GAAM,EAE9BL,EAAOO,CAAM,EAAIR,EAAOO,GAAO,CAGrC,CCPO,SAASE,EAAUC,EAAO,CAC/B,GAAIA,EAAM,OAAS,EAAG,OAAOA,EAC7B,IAAMC,EAAqB,IAAI,MAAMD,EAAM,MAAM,EAC3CE,EAAsB,CAAC,EACzBC,EAAMC,EAAOC,EAAOC,EAAUC,EAClC,IAAKJ,KAAQH,EAAOE,EAAQ,KAAiB,CAAE,KAAAC,EAAM,EAAGK,EAASL,CAAI,CAAE,CAAC,EACxE,IAAIM,EAASP,EAASQ,EAAST,EAC/B,IAAKG,EAAQ,EAAGA,EAAQF,EAAQ,OAAQE,GAAS,EAAG,CAClD,IAAKC,EAAQ,EAAGA,EAAQH,EAAQ,OAAQG,GAASD,EAAQ,EACvDO,EAAWF,EAAQC,EAAQL,EAAOD,CAAK,EAEzCE,EAAWG,EACXA,EAASC,EACTA,EAASJ,CACX,CACA,IAAKC,EAAI,EAAGA,EAAIP,EAAM,OAAQO,IAAKP,EAAMO,CAAC,EAAIE,EAAOF,CAAC,EAAE,KACxD,OAAOP,CACT,CCpBO,SAASY,EAAMC,EAAGC,EAAGC,EAAG,CAC7B,OAAQD,EAAE,EAAID,EAAE,IAAME,EAAE,EAAIF,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAME,EAAE,EAAIF,EAAE,EAC5D,CCFO,SAASG,EAAMC,EAAGC,EAAG,CAC1B,OAAOD,EAAE,IAAMC,EAAE,GAAKD,EAAE,IAAMC,EAAE,CAClC,CCCO,SAASC,EAAMC,EAAM,CAC1B,IAAIC,EAAU,GACVC,EAAGC,EAAGC,EAAGC,EACb,KAAOJ,GAAWD,EAAK,OAAS,GAE9B,IADAC,EAAU,GACLC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAE3B,GADAC,EAAIH,GAAME,EAAIF,EAAK,OAAS,GAAKA,EAAK,MAAM,EAAGI,EAAIJ,EAAKE,CAAC,EAAGG,EAAIL,GAAME,EAAI,GAAKF,EAAK,MAAM,EACtFM,EAAMH,EAAGC,CAAC,GAAK,KAAK,IAAIG,EAAMJ,EAAGC,EAAGC,CAAC,CAAC,EAAI,MAAO,CACnDL,EAAK,OAAOE,EAAG,CAAC,EAAGD,EAAU,GAAM,KACrC,CAGJ,GAAID,EAAK,OAAS,EAAG,MAAkB,IAAI,MAAM,yBAAyB,EAC1E,OAAOA,CACT,CCbO,SAASQ,EAAYC,EAAQ,CAClC,IAAIC,EAAO,EACPC,EAAGC,EAAGC,EACV,IAAKF,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IAC7BC,EAAIH,EAAOE,CAAC,EAAGE,EAAIJ,GAAQE,EAAI,GAAKF,EAAO,MAAM,EACjDC,GAAQE,EAAE,EAAIC,EAAE,EAAIA,EAAE,EAAID,EAAE,EAE9B,OAAOF,EAAO,CAChB,CCTO,SAASI,EAAaC,EAAOC,EAAU,CAC5C,IAAMC,EAAoB,CAAC,EACvBC,EAAS,EAAGC,EAAOC,EAAMC,EAC7B,IAAKF,EAAQ,EAAGA,EAAQJ,EAAM,OAAQI,IACpCC,EAAOL,EAAMI,CAAK,EAClBE,EAAOC,EAAMN,EAAS,MAAME,EAAQA,GAAUE,EAAK,MAAM,CAAC,EACtDG,EAAYF,CAAI,IAAM,EAAQF,GAAQE,EAAK,QAAQ,EACvDJ,EAAM,KAAKI,CAAI,EAEjB,OAAOJ,CACT,CCbO,SAASO,EAAOC,EAAOC,EAAM,CAClC,IAAIC,EAAS,GACTC,EAAGC,EAAGC,EAAGC,EACb,IAAKH,EAAI,EAAGC,EAAIH,EAAK,OAAS,EAAGE,EAAIF,EAAK,OAAQG,EAAID,IACpDE,EAAIJ,EAAKE,CAAC,EAAGG,EAAIL,EAAKG,CAAC,EAClBC,EAAE,EAAIL,EAAM,GAAQM,EAAE,EAAIN,EAAM,GACnCA,EAAM,GAAKM,EAAE,EAAID,EAAE,IAAML,EAAM,EAAIK,EAAE,IAAMC,EAAE,EAAID,EAAE,GAAKA,EAAE,IAAGH,EAAS,CAACA,GAE3E,OAAOA,CACT,CCPO,SAASK,EAAWC,EAAOC,EAAO,CACvC,IAAIC,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,GAAIC,EAAOH,EAAOC,EAAMC,CAAC,CAAC,EAAG,MAAO,GACvE,MAAO,EACT,CCNO,SAASE,EAAGC,EAAGC,EAAG,EAAG,CAC1B,OAAO,KAAK,IAAID,EAAE,EAAGC,EAAE,CAAC,GAAK,EAAE,GAAK,EAAE,GAAK,KAAK,IAAID,EAAE,EAAGC,EAAE,CAAC,GAC1D,KAAK,IAAID,EAAE,EAAGC,EAAE,CAAC,GAAK,EAAE,GAAK,EAAE,GAAK,KAAK,IAAID,EAAE,EAAGC,EAAE,CAAC,CACzD,CCCO,SAASC,EAAWC,EAAGC,EAAGC,EAAGC,EAAG,CACrC,GAAIC,EAAMJ,EAAGE,CAAC,GAAKE,EAAMJ,EAAGG,CAAC,GAAKC,EAAMH,EAAGC,CAAC,GAAKE,EAAMH,EAAGE,CAAC,EAAG,MAAO,GACrE,IAAME,EAAMC,EAAMN,EAAGC,EAAGC,CAAC,EAAGK,EAAMD,EAAMN,EAAGC,EAAGE,CAAC,EAAGK,EAAMF,EAAMJ,EAAGC,EAAGH,CAAC,EAAGS,EAAMH,EAAMJ,EAAGC,EAAGF,CAAC,EAC3F,OAAOI,EAAME,EAAM,GAAKC,EAAMC,EAAM,GAClCJ,IAAQ,GAAKK,EAAGV,EAAGC,EAAGC,CAAC,GAAKK,IAAQ,GAAKG,EAAGV,EAAGC,EAAGE,CAAC,GACnDK,IAAQ,GAAKE,EAAGR,EAAGC,EAAGH,CAAC,GAAKS,IAAQ,GAAKC,EAAGR,EAAGC,EAAGF,CAAC,CACvD,CCRO,SAASU,EAAYC,EAAGC,EAAGC,EAAM,CACtC,IAAIC,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAC3B,GAAIC,EAAWJ,EAAGC,EAAGC,EAAKC,CAAC,EAAGD,GAAMC,EAAI,GAAKD,EAAK,MAAM,CAAC,EAAG,MAAO,GAErE,MAAO,EACT,CCNO,SAASG,EAAgBC,EAAGC,EAAGC,EAASC,EAAO,CACpD,GAAIC,EAAYJ,EAAGC,EAAGC,CAAO,EAAG,MAAO,GACvC,IAAIG,EACJ,IAAKA,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAAK,GAAID,EAAYJ,EAAGC,EAAGE,EAAME,CAAC,CAAC,EAAG,MAAO,GAC3E,MAAO,EACT,CCHO,SAASC,EAAYC,EAASC,EAAMC,EAAOC,EAAK,CACrD,IAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAW,IAAUC,EAAGC,EAAGC,EAAGC,EAAGC,EACvD,IAAKJ,EAAI,EAAGA,EAAIN,EAAK,OAAQM,IAAK,IAAKC,EAAI,EAAGA,EAAIR,EAAQ,OAAQQ,IAChEC,EAAIR,EAAKM,CAAC,EAAGG,EAAIV,EAAQQ,CAAC,EAAGG,GAAKF,EAAE,EAAIC,EAAE,IAAM,GAAKD,EAAE,EAAIC,EAAE,IAAM,EAC/D,EAAAC,GAAKL,KACTH,EAAI,GAAKM,EAAE,EAAIC,EAAE,GAAK,EAAGP,EAAI,GAAKM,EAAE,EAAIC,EAAE,GAAK,EAC3C,GAACE,EAAOT,EAAKD,EAAM,CAAC,CAAC,GAAKW,EAAWV,EAAKD,CAAK,KAC/CY,EAAgBL,EAAGC,EAAGV,EAASE,CAAK,IACxCE,EAAKG,EAAGF,EAAKG,EAAGF,EAAWK,KAE7B,GAAIP,EAAK,EAAG,MAAkB,IAAI,MAAM,gCAAgC,EACxE,MAAmB,CAAC,GAAGJ,EAAQ,MAAM,EAAGK,EAAK,CAAC,EAAG,GAAGJ,EAAK,MAAMG,CAAE,EAAG,GAAGH,EAAK,MAAM,EAAGG,EAAK,CAAC,EACzFJ,EAAQK,CAAE,EAAG,GAAGL,EAAQ,MAAMK,EAAK,CAAC,CAAC,CACzC,CCdO,SAASU,EAAeC,EAASC,EAAGC,EAAGC,EAAG,CAC/C,IAAIC,EACJ,IAAKA,KAAKJ,EACR,GAAI,CAACK,EAAMD,EAAGH,CAAC,GAAK,CAACI,EAAMD,EAAGF,CAAC,GAAK,CAACG,EAAMD,EAAGD,CAAC,GAC7CG,EAAML,EAAGC,EAAGE,CAAC,GAAK,GAAKE,EAAMJ,EAAGC,EAAGC,CAAC,GAAK,GAAKE,EAAMH,EAAGF,EAAGG,CAAC,GAAK,EAAG,MAAO,GAE9E,MAAO,EACT,CCPO,SAASG,EAASC,EAAS,CAChC,IAAMC,EAAqB,CAAC,EACxBC,EAASC,EAAGC,EAAGC,EAAGC,EAAGC,EACzB,KAAOP,EAAQ,OAAS,GAAG,CAEzB,IADAE,EAAU,GACLC,EAAI,EAAGA,EAAIH,EAAQ,OAAQG,IAE9B,GADAC,EAAIJ,GAASG,EAAIH,EAAQ,OAAS,GAAKA,EAAQ,MAAM,EAAGK,EAAIL,EAAQG,CAAC,EAAGG,EAAIN,GAASG,EAAI,GAAKH,EAAQ,MAAM,EACxG,EAAAQ,EAAMJ,EAAGC,EAAGC,CAAC,GAAK,QAClB,CAAAG,EAAeT,EAASI,EAAGC,EAAGC,CAAC,EACnC,CAAAL,EAAO,KAAiB,CAACG,EAAE,MAAOC,EAAE,MAAOC,EAAE,KAAK,CAAC,EAAGN,EAAQ,OAAOG,EAAG,CAAC,EAAGD,EAAU,GAAM,MAE9F,GAAI,CAACA,EAAS,MAAkB,IAAI,MAAM,mEAAmE,CAC/G,CACA,GAAIM,EAAM,GAAGR,CAAO,EAAI,MAAO,CAC7B,IAAMU,EAAuB,CAAC,EAC9B,IAAKH,KAAKP,EAASU,EAAS,KAAKH,EAAE,KAAK,EACxCN,EAAO,KAAKS,CAAQ,CACtB,CACA,OAAOT,CACT,CCtBO,SAASU,EAAKC,EAAM,CACzB,IAAIC,EAAM,EACNC,EAAGC,EAAGC,EACV,IAAKF,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAC3BC,EAAIH,EAAKE,CAAC,EAAGE,EAAIJ,GAAME,EAAI,GAAKF,EAAK,MAAM,EAC3CC,GAAOE,EAAE,EAAIC,EAAE,EAAIA,EAAE,EAAID,EAAE,EAE7B,OAAO,KAAK,IAAIF,CAAG,EAAI,CACzB,CCLO,SAASI,GAAaC,EAAOC,EAAUC,EAAQ,CACpD,IAAIC,EAAW,EAAGC,EAAS,EAAG,EAAGC,EACjC,IAAK,EAAI,EAAG,EAAIL,EAAM,OAAQ,IAAKG,GAAYG,EAAKN,EAAM,CAAC,CAAC,EAC5D,IAAMO,EAAWD,EAAKN,EAAM,CAAC,CAAC,EAAIG,EAClC,IAAKE,KAAYH,EAAQE,GAAUI,EAAMP,EAASI,EAAS,CAAC,CAAC,EAAGJ,EAASI,EAAS,CAAC,CAAC,EAAGJ,EAASI,EAAS,CAAC,CAAC,CAAC,EAAI,EAChH,GAAIE,GAAY,GAAK,KAAK,IAAIH,EAASG,CAAQ,EAAI,KAAK,IAAI,KAAMA,EAAW,IAAI,EAAG,MAAkB,IAAI,MAAM,qCAAqC,CACvJ,CCUO,SAASE,GAAYC,EAASC,EAAQC,EAAe,CAC1D,IAAMC,EAAoB,CAACH,EAAS,GAAGC,CAAK,EACtCG,EAASD,EAAM,KAAK,EACtBE,EAAGC,EAAOC,EACd,IAAKF,KAAKD,EACR,GAAI,CAAC,OAAO,SAASC,EAAE,CAAC,GAAK,CAAC,OAAO,SAASA,EAAE,CAAC,EAAG,MAAkB,IAAI,MAAM,6BAA6B,EAG/G,IAAMG,EAAuB,CAAC,EAC9B,IAAKF,EAAQ,EAAGA,EAAQF,EAAO,OAAQE,IACrCD,EAAID,EAAOE,CAAK,EAChBE,EAAS,KAAiB,CAAE,EAAGH,EAAE,EAAIL,EAAQ,CAAC,EAAE,EAAG,EAAGK,EAAE,EAAIL,EAAQ,CAAC,EAAE,EAAG,MAAAM,CAAM,CAAC,EAGnF,IAAMG,EAAQC,EAAaP,EAAOK,CAAQ,EACtCG,EAAUF,EAAM,CAAC,EAAE,MAAM,EAGvBG,EAAiBC,EAAUJ,EAAM,MAAM,CAAC,CAAC,EACzCK,EAAMF,EAAe,OAAqB,CAAE,EAAG,EAAG,EAAG,CAAE,EAAI,KACjE,IAAKL,KAAQK,EACXD,EAAUI,EAAYJ,EAASJ,EAAME,EAAOK,CAAG,EAGjD,IAAME,EAASC,EAASN,CAAO,EAE/B,OAAAO,GAAaT,EAAOD,EAAUQ,CAAM,EAC7BA,CACT,CC/CO,SAASG,EAAaC,EAAO,CAClC,OAAOA,EAAM,QAAU,CACzB,CCAO,SAASC,EAAYC,EAASC,EAAGC,EAAIC,EAAGC,EAAIC,EAAGC,EAAIC,EAAIC,EAAIC,EAAIC,EAAO,CAC3E,GAAM,CAAE,QAASC,EAAO,UAAAC,EAAW,QAAAC,EAAS,OAAAC,EAAQ,IAAAC,CAAI,EAAIf,EACtDgB,EAAKb,EAAE,EAAIF,EAAE,EAAGgB,EAAKb,EAAKF,EAAIgB,EAAKjB,EAAE,EAAIE,EAAE,EAC3CgB,EAAKd,EAAE,EAAIJ,EAAE,EAAGmB,EAAKd,EAAKJ,EAAImB,EAAKpB,EAAE,EAAII,EAAE,EACjD,IAAKY,EAAKI,EAAKH,EAAKE,GAAMb,GAAMW,EAAKC,EAAKH,EAAKK,GAAMb,GAAMQ,EAAKI,EAAKH,EAAKE,GAAMV,EAAK,EAAG,CACtF,IAAMa,GAAQnB,EAAGoB,GAASnB,EAC1BD,EAAIE,EAAGD,EAAKE,EAAID,EAAIiB,GAAOhB,EAAKiB,EAClC,CACAX,EAAU,KAAKX,EAAE,EAAGC,EAAKsB,EAAavB,CAAC,EAAG,CAACA,EAAE,EAC3CE,EAAE,EAAGC,EAAKoB,EAAarB,CAAC,EAAG,CAACA,EAAE,EAC9BE,EAAE,EAAGC,EAAKkB,EAAanB,CAAC,EAAG,CAACA,EAAE,CAAC,EACjCQ,EAAQ,KAAKN,EAAIC,EAAIC,EAAIF,EAAIC,EAAIC,EAAIF,EAAIC,EAAIC,CAAE,EAC/CK,EAAO,KAAKJ,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,EACvFC,EAAM,QAAQ,YAAYI,EAAI,KAAK,GAAGd,EAAE,GAAI,GAAGE,EAAE,GAAI,GAAGE,EAAE,EAAE,CAClE,CCZO,SAASoB,GAAsBC,EAASC,EAAOC,EAAKC,EAAQC,EAAW,CAC5E,IAAMC,EAAqB,CAAC,EACxBC,EAAMC,EAAOC,EAAGC,EAAGC,EAAGC,EAAOC,EAAMC,EAAGC,EAAQC,EAAIC,EACtD,IAAKV,KAAQL,EAAO,IAAKM,KAASD,EAAMD,EAAO,KAAKE,CAAK,EACzD,IAAK,CAACC,EAAGC,EAAGC,CAAC,IAAKO,GAAYhB,EAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,CAAC,EACpDiB,EAAYlB,EAASK,EAAOG,CAAC,EAAGN,EAAKG,EAAOI,CAAC,EAAGP,EAAKG,EAAOK,CAAC,EAAGR,EAAK,EAAG,EAAG,EAAGE,CAAS,EACnFD,EAAS,GAAGe,EAAYlB,EAASK,EAAOG,CAAC,EAAGL,EAAQE,EAAOI,CAAC,EAAGN,EAAQE,EAAOK,CAAC,EAAGP,EAAQ,EAAG,GAAI,EAAGC,CAAS,EAEnH,IAAKO,EAAQ,EAAGA,EAAQV,EAAM,OAAQU,IAGpC,IAFAL,EAAOL,EAAMU,CAAK,EAClBC,EAAOO,EAAYb,CAAI,KAAOK,IAAU,GAAK,GAAK,EAC7CE,EAAI,EAAGA,EAAIP,EAAK,OAAQO,IAC3BL,EAAIF,EAAKO,CAAC,EAAGJ,EAAIH,GAAMO,EAAI,GAAKP,EAAK,MAAM,EAC3CQ,EAAS,KAAK,MAAML,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAID,EAAE,CAAC,EACnCM,IACLC,EAAKH,GAAQH,EAAE,EAAID,EAAE,GAAKM,EAAQE,EAAKJ,GAAQH,EAAE,EAAID,EAAE,GAAKM,EAC5DI,EAAYlB,EAASQ,EAAGL,EAAQM,EAAGN,EAAQM,EAAGP,EAAKa,EAAI,EAAGC,EAAIZ,CAAS,EACvEc,EAAYlB,EAASQ,EAAGL,EAAQM,EAAGP,EAAKM,EAAGN,EAAKa,EAAI,EAAGC,EAAIZ,CAAS,EAG1E,CCxBO,IAAMgB,EAAmB,CAAC,ECI1B,SAASC,MAAwBC,EAAM,CAC5CC,EAAYC,EAAiBA,EAAiB,OAAS,CAAC,EAAG,GAAGF,CAAI,CACpE,CCDO,SAASG,EAAqBC,EAASC,EAAWC,EAAOC,EAAO,CACrEC,EAAiB,KAAKJ,CAAO,EAC7B,GAAI,CACFC,EAAUC,EAAOC,EAAOE,EAAoB,CAC9C,QAAE,CACAD,EAAiB,IAAI,CACvB,CACF,CCZO,SAASE,EAAOC,EAAO,CAC5B,OAAOA,GAAS,SAAYA,EAAQ,MAAQ,MAAQA,IAAU,EAAI,KAAO,IAC3E,CCFO,SAASC,EAAQC,EAAGC,EAAGC,EAAGC,EAAG,CAClC,IAAMC,GAAKJ,EAAIC,EAAI,IAAM,GACzB,OAAOC,EAAIC,EAAI,KAAK,IAAI,GAAI,KAAK,IAAIC,EAAI,EAAG,EAAIA,EAAG,CAAC,CAAC,CACvD,CCOO,SAASC,EAAWC,EAAO,CAChC,GAAIA,GAAS,OAAOA,GAAU,UAAY,MAAOA,EAAO,CACtD,IAAMC,EAAID,EAAM,EAAI,KAAK,IAAIA,EAAM,EAAG,EAAIA,EAAM,CAAC,EACjD,MAAmB,CACjB,EAAGE,EAAOC,EAAQ,EAAGH,EAAM,EAAGA,EAAM,EAAGC,CAAC,CAAC,EACzC,EAAGC,EAAOC,EAAQ,EAAGH,EAAM,EAAGA,EAAM,EAAGC,CAAC,CAAC,EACzC,EAAGC,EAAOC,EAAQ,EAAGH,EAAM,EAAGA,EAAM,EAAGC,CAAC,CAAC,CAC3C,CACF,CACA,GAAID,GAAS,OAAOA,GAAU,UAAY,MAAOA,EAC/C,OAAOA,EAET,GAAI,OAAOA,GAAU,SACnB,MAAmB,CACjB,GAAIA,GAAS,GAAK,KAAO,IACzB,GAAIA,GAAS,EAAI,KAAO,IACxB,GAAIA,EAAQ,KAAO,GACrB,EAEF,GAAI,OAAOA,GAAU,UAAY,CAAC,IAAI,SAAS,QAASA,CAAK,EAC3D,MAAkB,IAAI,MAAM,kBAAkB,EAEhD,IAAMI,EAAU,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI,EAChEA,EAAQ,UAAYJ,EACpBI,EAAQ,SAAS,EAAG,EAAG,EAAG,CAAC,EAC3B,GAAM,CAAC,EAAGC,EAAGC,CAAC,EAAIF,EAAQ,aAAa,EAAG,EAAG,EAAG,CAAC,EAAE,KACnD,MAAmB,CACjB,EAAG,EAAI,IACP,EAAGC,EAAI,IACP,EAAGC,EAAI,GACT,CACF,CCzCO,IAAMC,EAAiB,CAC5B,CAAE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,GAAI,KAAK,IAAI,GAAM,KAAK,GAAK,CAAC,EAAG,GAAI,CAAC,KAAK,IAAI,GAAM,KAAK,GAAK,CAAC,CAAE,EAChI,CAAE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,GAAI,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,EAAG,GAAI,CAAC,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,CAAE,EAChI,CAAE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,GAAI,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,EAAG,GAAI,CAAC,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,CAAE,EAChI,CAAE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,GAAI,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,EAAG,GAAI,CAAC,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,CAAE,EAChI,CAAE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,GAAI,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,EAAG,GAAI,CAAC,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,CAAE,EAChI,CAAE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAAG,GAAI,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,EAAG,GAAI,CAAC,KAAK,IAAI,IAAM,KAAK,GAAK,CAAC,CAAE,CAClI,ECLO,SAASC,GAAKC,EAAOC,EAAQ,CAClC,IAAMC,EAAqB,IAAI,MAAMC,EAAe,MAAM,EACtDC,EACJ,IAAKA,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IAC7BF,EAAOE,CAAC,EAAgB,CACtB,EAAGJ,EAAM,EAAIG,EAAeC,CAAC,EAAE,EAAIH,EACnC,EAAGD,EAAM,EAAIG,EAAeC,CAAC,EAAE,EAAIH,EAAQ,OAAQD,EAAM,OACzD,GAAgB,CAAC,EAAG,CAAC,CACvB,EAEF,OAAOE,CACT,CCPO,SAASG,GAAiBC,EAAOC,EAAOC,EAAa,CAC1D,IAAMC,EAAQC,EAAW,OAAQ,EAAGC,EAASJ,EAAM,WACnD,GAAI,CAAC,OAAO,SAASI,CAAM,GAAKA,GAAU,EACxC,MAAkB,IAAI,MAAM,0BAA0B,EAExD,IAAMC,EAAqB,CACzB,GAAGN,EAAO,GAAgB,CAAC,EAAG,CAAC,CACjC,EACIO,EAAGC,EAAKC,EAAMC,EAAQC,EAAGC,EAAGC,EAAGC,EAAIC,EAAIC,EAC3C,IAAKA,EAAU,EAAGA,EAAU,EAAGA,IAK7B,IAJAT,EAAIS,EAAUX,EAAS,IAAMA,EAC7BG,EAAMQ,EAAUf,EAAM,IAAM,IAAO,EACnCQ,EAAOO,EAAUf,EAAM,IAAM,IAAOA,EAAM,IAC1CS,EAASO,GAAKjB,EAAOO,CAAC,EACjBI,EAAI,EAAGA,EAAI,EAAGA,IACjBC,EAAIF,EAAOC,CAAC,EAAGE,EAAIH,GAAQC,EAAI,GAAK,CAAC,EACrCG,EAAKI,EAAeP,CAAC,EAAE,GAAII,EAAKG,EAAeP,CAAC,EAAE,GAClDT,EAAYU,EAAGJ,EAAKK,EAAGL,EAAKK,EAAGJ,EAAMK,EAAI,EAAGC,EAAIZ,CAAK,EACrDD,EAAYU,EAAGJ,EAAKK,EAAGJ,EAAMG,EAAGH,EAAMK,EAAI,EAAGC,EAAIZ,CAAK,EACtDD,EAAYI,EAAQG,EAAMG,EAAGH,EAAMI,EAAGJ,EAAM,EAAG,EAAG,EAAGN,CAAK,EAC1DD,EAAYI,EAAQE,EAAKK,EAAGL,EAAKI,EAAGJ,EAAK,EAAG,GAAI,EAAGL,CAAK,CAG9D,CC7BO,SAASgB,GAAKC,EAAaC,EAAOC,EAAGC,EAAGC,EAAGC,EAAGC,EAAQC,EAAIC,EAAIC,EAAI,CACnE,OAAOF,GAAO,UAChBP,EAAYE,EAAGI,EAAQH,EAAGG,EAAQF,EAAGE,EAAQ,GAAGC,EAAIN,CAAK,EACzDD,EAAYE,EAAGI,EAAQF,EAAGE,EAAQD,EAAGC,EAAQ,GAAGC,EAAIN,CAAK,IAEzDD,EAAYE,EAAGI,EAAQH,EAAGG,EAAQF,EAAGE,EAAQC,EAAIC,EAAIC,EAAIR,CAAK,EAC9DD,EAAYE,EAAGI,EAAQF,EAAGE,EAAQD,EAAGC,EAAQC,EAAIC,EAAIC,EAAIR,CAAK,EAElE,CCRO,SAASS,EAAQC,EAAOC,EAAGC,EAAGC,EAAM,CAEzC,MAAmB,CACjB,EAAGH,EAAM,GAAKG,IAAS,EAAI,EAAIF,EAAI,KACnC,EAAGD,EAAM,GAAKG,IAAS,EAAI,EAAIA,IAAS,EAAIF,EAAI,IAAIC,EAAI,KACxD,OAAQF,EAAM,QAAUG,IAAS,EAAI,EAAID,EAAI,KAAI,GAAgB,CAACD,EAAGC,CAAC,CACxE,CACF,CCDO,SAASE,GAAcC,EAAOC,EAAOC,EAAa,CACvD,GAAI,CAAC,OAAO,SAASD,EAAM,WAAW,GAAKA,EAAM,aAAe,EAAG,MAAkB,IAAI,MAAM,sBAAsB,EACrH,IAAME,EAAQC,EAAWH,EAAM,KAAK,EAChCI,EACJ,IAAKA,EAAO,EAAGA,EAAO,EAAGA,IACvBC,GAAKJ,EAAaC,EAAOI,EAAQP,EAAO,GAAI,GAAIK,CAAI,EAAGE,EAAQP,EAAO,EAAG,GAAIK,CAAI,EAAGE,EAAQP,EAAO,EAAG,EAAGK,CAAI,EAAGE,EAAQP,EAAO,GAAI,EAAGK,CAAI,EACxIJ,EAAM,IAAKI,IAAS,EAAI,EAAI,EAAGA,IAAS,EAAI,EAAI,EAAGA,IAAS,EAAI,EAAI,CAAC,CAE3E,CCdO,IAAMG,EAAe,CAC1B,CAAC,EAAG,CAAC,EACL,CAAC,IAAM,EAAG,EACV,CAAC,GAAK,CAAC,EACP,CAAC,IAAM,EAAG,EACV,CAAC,EAAG,CAAC,CACP,ECNO,IAAMC,EAAiB,CAAC,CAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,GAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,GAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,EACA,CACE,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,EAAG,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,EAC3B,GAAI,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,EACpC,GAAI,CAAC,KAAK,IAAK,IAAW,KAAK,GAAK,CAAC,CACvC,CACF,EC7CO,SAASC,EAAKC,EAAOC,EAAQ,CAClC,IAAMC,EAAqB,IAAI,MAAMC,EAAe,MAAM,EACtDC,EACJ,IAAKA,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IAC7BF,EAAOE,CAAC,EAAgB,CACtB,EAAGJ,EAAM,EAAIG,EAAeC,CAAC,EAAE,EAAIH,EACnC,EAAGD,EAAM,EAAIG,EAAeC,CAAC,EAAE,EAAIH,EACnC,OAAQD,EAAM,MAChB,EAEF,OAAOE,CACT,CCVO,SAASG,EAAQC,EAAOC,EAAaC,EAAWC,EAAKC,EAAYC,EAAMC,EAAO,CACnF,IAAMC,EAAQC,EAAKR,EAAOE,CAAS,EAAGO,EAAQD,EAAKR,EAAOI,CAAU,EAChEM,EAAGC,EAAMC,EAAOC,EAAQC,EAAIC,EAAIC,EAAIC,EAASC,EACjD,IAAKR,EAAI,EAAGA,EAAI,EAAGA,IACjBC,GAAQD,EAAI,GAAK,EACjBE,GAASV,EAAYE,IAAeC,EAAOF,GAC3CU,EAAS,KAAK,MAAM,EAAGD,CAAK,EAC3B,CAAE,GAAAE,EAAI,GAAAC,CAAG,EAAII,EAAeT,CAAC,EAC9BM,EAAKJ,EAAQC,EACbI,EAAUH,EAAKD,EAAQK,EAAUH,EAAKF,EAClCX,GAAWD,EAAYM,EAAMG,CAAC,EAAGP,EAAKI,EAAMI,CAAI,EAAGR,EAAKM,EAAME,CAAI,EAAGN,EAAMY,EAASD,EAAIE,EAASZ,CAAK,EACtGF,GAAYH,EAAYM,EAAMG,CAAC,EAAGP,EAAKM,EAAME,CAAI,EAAGN,EAAMI,EAAMC,CAAC,EAAGL,EAAMY,EAASD,EAAIE,EAASZ,CAAK,CAE7G,CCjBO,SAASc,GAAaC,EAAaC,EAAaC,EAAaC,EAAQC,EAAKC,EAAY,CAC3F,GAAI,CAAC,OAAO,SAASL,CAAW,GAAK,CAAC,OAAO,SAASC,CAAW,GAAK,CAAC,OAAO,SAASC,CAAW,GAChGF,GAAe,GAAKC,EAAcD,GAAeE,GAAeC,GAAUD,GAAeE,GACzFC,IAAe,SAAWA,IAAe,OACzC,MAAkB,IAAI,MAAM,wCAAwC,CAExE,CCIO,SAASC,GAAaC,EAAOC,EAAOC,EAAa,CACtD,GAAM,CAAE,IAAAC,EAAK,OAAAC,EAAS,EAAG,YAAAC,EAAa,YAAAC,EAAa,YAAAC,EAAa,WAAAC,EAAa,OAAQ,EAAIP,EACzFQ,GAAaJ,EAAaC,EAAaC,EAAaH,EAAQD,EAAKK,CAAU,EAC3E,IAAME,EAAQC,EAAWV,EAAM,YAAc,OAAQ,EAC/CW,EAAQD,EAAWV,EAAM,OAAS,OAAQ,EAChDY,EAAQb,EAAOE,EAAaG,EAAaD,EAAQC,EAAaE,GAAeJ,EAAMI,GAAe,IAAMG,CAAK,EAC7G,IAAII,EAAGC,EAAKC,EAAIC,EAAMC,EACtB,GAAIV,IAAe,OAAQ,CACzB,IAAMW,EAAOC,EAAKpB,EAAOM,CAAW,EACpC,IAAKQ,EAAI,EAAGA,EAAI,EAAGA,IAAKZ,EAAYF,EAAOO,EAAaY,EAAKL,CAAC,EAAGP,EAC/DY,GAAML,EAAI,GAAK,CAAC,EAAGP,EAAa,EAAG,GAAI,EAAGK,CAAK,EACjDC,EAAQb,EAAOE,EAAaI,EAAaC,EAAa,EAAGJ,EAAKS,CAAK,CACrE,KACE,KAAKE,EAAI,EAAGA,EAAIO,EAAa,OAAQP,IACnC,CAACC,EAAKC,CAAE,EAAIK,EAAaP,EAAI,CAAC,EAAG,CAACG,EAAMC,CAAE,EAAIG,EAAaP,CAAC,EAC5DD,EAAQb,EAAOE,EAAac,EAAKV,EAAaC,EAAcQ,GAAOZ,EAAMI,GACvEW,EAAKZ,EAAaC,EAAcU,GAAQd,EAAMI,GAAcK,CAAK,CAGzE,CCxBO,SAASU,GAAoBC,EAASC,EAAWC,EAAOC,EAAWC,EAAS,CACjF,GAAM,CAAE,IAAAC,CAAI,EAAIH,EAChB,GAAIF,EAAQ,QAAQ,QAAQ,WAAY,CACtC,GAAI,CAAC,OAAO,SAASE,EAAM,SAAS,GAAKA,EAAM,WAAa,EAAG,MAAkB,IAAI,MAAM,oBAAoB,EAC3GA,EAAM,WAAa,GAAK,CAACF,EAAQ,SAAS,IAAII,CAAO,IACvDE,EAAqBN,EAASO,GAAkBN,EAAWC,CAAK,EAChEF,EAAQ,SAAS,IAAII,CAAO,GAE9BE,EAAqBN,EAASQ,GAAeP,EAAWC,CAAK,EAC7DF,EAAQ,OAAO,KAAiB,CAC9B,SAAsB,CAACC,EAAU,EAAGA,EAAU,OAASI,EAAK,CAACJ,EAAU,CAAC,EACxE,OAAQ,KAAK,MAAMI,EAAKH,EAAM,WAAW,EAAG,MAAmB,CAACC,EAAU,EAAGA,EAAU,EAAGA,EAAU,CAAC,EACrG,KAAMD,EAAM,SACd,CAAC,CACH,MAAOI,EAAqBN,EAASS,GAAcR,EAAWC,CAAK,CACrE,CCnBO,SAASQ,GAAqBC,EAAS,CAC5C,GAAM,CAAE,UAAAC,EAAW,QAAAC,EAAS,OAAAC,EAAQ,aAAAC,CAAa,EAAIJ,EACrD,GAAIA,EAAQ,QAAQ,QAAQ,YAAcI,EAAa,OAAS,EAAG,OAAOJ,EAC1E,IAAMK,EAAWD,EAAa,CAAC,EAAE,UAC3BE,EAASD,EAAW,EAC1B,GAAI,CAACA,GAAYJ,EAAU,SAAWK,EAASF,EAAa,OAAQ,OAAOJ,EAC3E,IAAMO,EAAU,KAAK,MAAMN,EAAU,CAAC,CAAC,EAAGO,EAAU,KAAK,MAAMP,EAAU,CAAC,CAAC,EAAGQ,EAAU,KAAK,MAAMR,EAAU,CAAC,CAAC,EACzGS,EAAuB,IAAI,aAAaJ,CAAM,EAChDK,EAAGC,EAAUC,EAAMC,EACvB,IAAKH,EAAI,EAAGA,EAAIL,EAAQK,IAAKD,EAASC,CAAC,EAAIV,EAAUU,CAAC,GAAKA,EAAI,IAAM,EAAIJ,EAAUI,EAAI,IAAM,EAAIH,EAAUC,GAC3G,IAAMM,EAAsB,IAAI,aAAaX,EAAa,OAAS,CAAC,EACpE,IAAKQ,EAAW,EAAGA,EAAWR,EAAa,OAAQQ,IAAY,CAG7D,GAFAC,EAAOT,EAAaQ,CAAQ,EAC5BE,EAAQF,EAAWN,EACfO,EAAK,cAAgBD,EAAWP,GAAYQ,EAAK,aAAeD,EAAW,GAAKP,EAAU,OAAOL,EAKrG,IAJAe,EAAQH,EAAW,CAAC,EAAIL,EAAUN,EAAUa,CAAK,EAAIb,EAAU,CAAC,EAChEc,EAAQH,EAAW,EAAI,CAAC,EAAIJ,EAAUP,EAAUa,EAAQ,CAAC,EAAIb,EAAU,CAAC,EACxEc,EAAQH,EAAW,EAAI,CAAC,EAAIH,EAAUR,EAAUa,EAAQ,CAAC,EAAIb,EAAU,CAAC,EACxEc,EAAQH,EAAW,EAAI,CAAC,EAAIA,EAAWP,EAClCM,EAAI,EAAGA,EAAIL,EAAQK,IACtB,GAAI,KAAK,OAAOD,EAASC,CAAC,EAAII,EAAQH,EAAW,EAAID,EAAI,CAAC,CAAC,IAAM,KAAK,OAAOV,EAAUa,EAAQH,CAAC,CAAC,GAC7F,KAAK,OAAOT,EAAQS,CAAC,CAAC,IAAM,KAAK,OAAOT,EAAQY,EAAQH,CAAC,CAAC,GAC1D,KAAK,OAAOR,EAAOQ,CAAC,CAAC,IAAM,KAAK,OAAOR,EAAOW,EAAQH,CAAC,CAAC,EAAG,OAAOX,CAE1E,CACA,MAAmB,CACjB,UAAWU,EAAU,QAASR,EAAQ,MAAM,EAAGI,CAAM,EAAG,OAAQH,EAAO,MAAM,EAAGG,CAAM,EACtF,gBAAiBS,CACnB,CACF,CC5BO,SAASC,GAAcC,EAAU,CACtC,IAAMC,EAAkB,CAAC,IAAU,IAAU,GAAQ,EAC/CC,EAAkB,CAAC,KAAW,KAAW,IAAS,EAClDC,EAAOH,EAAS,WAAW,SAAS,KACtCI,EAAGC,EAAGC,EAAGC,EACb,IAAKH,EAAI,EAAGA,EAAID,EAAK,OAAQC,GAAK,EAChCC,EAAIF,EAAKC,CAAC,EAAGE,EAAIH,EAAKC,EAAI,CAAC,EAAGG,EAAIJ,EAAKC,EAAI,CAAC,EAC5CH,EAAI,CAAC,EAAI,KAAK,IAAIA,EAAI,CAAC,EAAGI,CAAC,EAAGH,EAAI,CAAC,EAAI,KAAK,IAAIA,EAAI,CAAC,EAAGG,CAAC,EACzDJ,EAAI,CAAC,EAAI,KAAK,IAAIA,EAAI,CAAC,EAAGK,CAAC,EAAGJ,EAAI,CAAC,EAAI,KAAK,IAAIA,EAAI,CAAC,EAAGI,CAAC,EACzDL,EAAI,CAAC,EAAI,KAAK,IAAIA,EAAI,CAAC,EAAGM,CAAC,EAAGL,EAAI,CAAC,EAAI,KAAK,IAAIA,EAAI,CAAC,EAAGK,CAAC,EAE3D,IAAMC,EAAYR,EAAS,WAAW,eACtC,GAAIQ,EAAW,CACb,IAAIC,EAAMC,EAAQC,EAAKC,EACvB,IAAKH,EAAO,EAAGA,EAAO,EAAGA,IAAQ,CAG/B,IAFAE,EAAM,IACNC,EAAO,KACFF,EAASD,EAAMC,EAASF,EAAU,KAAK,OAAQE,GAAUF,EAAU,KACtEG,EAAM,KAAK,IAAIA,EAAKH,EAAU,KAAKE,CAAM,CAAC,EAC1CE,EAAO,KAAK,IAAIA,EAAMJ,EAAU,KAAKE,CAAM,CAAC,EAE9CT,EAAIQ,CAAI,EAAI,KAAK,OAAOR,EAAIQ,CAAI,EAAIE,CAAG,EACvCT,EAAIO,CAAI,EAAI,KAAK,OAAOP,EAAIO,CAAI,EAAIG,CAAI,CAC1C,CACF,CACA,IAAMC,EAAqB,EACxBZ,EAAI,CAAC,EAAIC,EAAI,CAAC,GAAK,GACnBD,EAAI,CAAC,EAAIC,EAAI,CAAC,GAAK,GACnBD,EAAI,CAAC,EAAIC,EAAI,CAAC,GAAK,CACtB,EACIY,EAAgB,EACpB,IAAKV,EAAI,EAAG,CAACI,GAAaJ,EAAID,EAAK,OAAQC,GAAK,EAC9CC,EAAIF,EAAKC,CAAC,EAAIS,EAAO,CAAC,EAAGP,EAAIH,EAAKC,EAAI,CAAC,EAAIS,EAAO,CAAC,EAAGN,EAAIJ,EAAKC,EAAI,CAAC,EAAIS,EAAO,CAAC,EAChFC,EAAgB,KAAK,IAAIA,EAAeT,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,CAAC,EAE/D,IAAIQ,EAASP,EAAY,KAAK,MAAMN,EAAI,CAAC,EAAID,EAAI,CAAC,EAAGC,EAAI,CAAC,EAAID,EAAI,CAAC,EAAGC,EAAI,CAAC,EAAID,EAAI,CAAC,CAAC,EAAI,EACrF,KAAK,KAAKa,CAAa,EAE3B,GAAI,CAACN,IAAcM,IAAkB,KAAYA,EAAgB,OAAO,UAAY,OAAO,SAEzF,IADAC,EAAS,EACJX,EAAI,EAAGA,EAAID,EAAK,OAAQC,GAAK,EAChCW,EAAS,KAAK,IAAIA,EAAQ,KAAK,MAC7BZ,EAAKC,CAAC,EAAIS,EAAO,CAAC,EAAGV,EAAKC,EAAI,CAAC,EAAIS,EAAO,CAAC,EAAGV,EAAKC,EAAI,CAAC,EAAIS,EAAO,CAAC,CAAC,CAAC,EAG5Eb,EAAS,OAAqB,CAAE,IAAAC,EAAK,IAAAC,EAAK,OAAAW,EAAQ,OAAAE,CAAO,CAC3D,CC3CO,SAASC,GAAqB,CAAE,KAAAC,EAAM,WAAAC,CAAW,EAAG,CACzD,IAAMC,EAAsB,CAC1B,QAAqB,CAAE,QAAqB,CAAE,WAAAD,CAAW,CAAE,EAC3D,UAAuB,CAAC,EAAG,QAAqB,CAAC,EAAG,OAAoB,CAAC,EAAG,IAAiB,CAAC,EAC9F,aAA0B,CAAC,EAAG,OAAoB,CAAC,EAAG,SAAsB,IAAI,GAClF,EACIE,EAAKC,EAASC,EAAOC,EACzB,IAAKH,KAAOH,EAAM,CAChBK,EAAQH,EAAQ,UAAU,OAAS,EAC/BC,EAAI,OAAOI,GAAoBL,EAASC,EAAI,MAAOA,EAAI,MAAOA,EAAI,UAAWA,EAAI,OAAO,EAC5F,IAAKC,KAAWD,EAAI,SAClBK,GAAsBN,EAASE,EAASD,EAAI,MAAM,IAAKA,EAAI,MAAM,OAAQA,EAAI,SAAS,EAExFG,EAAMJ,EAAQ,UAAU,OAAS,EACjCA,EAAQ,aAAa,KAAiB,CAAE,YAAaG,EAAO,UAAWC,EAAK,UAAWD,EAAQ,EAAG,QAASC,EAAM,CAAE,CAAC,CACtH,CACA,IAAMG,EAAOC,GAAqBR,CAAO,EACnCS,EAAqB,CACzB,UAAuB,IAAI,aAAaF,EAAK,SAAS,EACtD,QAAqB,IAAI,aAAaA,EAAK,OAAO,EAClD,OAAoB,IAAI,aAAaA,EAAK,MAAM,EAChD,IAAiB,IAAI,aAAaP,EAAQ,GAAG,EAC7C,gBAAiBO,EAAK,gBACtB,OAAQP,EAAQ,aAChB,OAAQA,EAAQ,MAClB,EACA,GAAIS,EAAO,UAAU,OAAQ,CAC3B,IAAMC,EAAuB,CAAE,WAAwB,CACrD,SAAsB,CAAE,KAAMD,EAAO,SAAU,EAC/C,eAAgBA,EAAO,gBAA8B,CAAE,KAAMA,EAAO,gBAAiB,KAAM,CAAE,EAAI,MACnG,CAAE,EACFE,GAAcD,CAAQ,EACtBD,EAAO,OAASC,EAAS,MAC3B,CACA,OAAOD,CACT,CCtCO,SAASG,GAAkBC,EAAO,CACvC,GAAI,CACF,IAAMC,EAAOC,GAAqBF,EAAM,IAAI,EACtCG,EAAwB,CAACF,EAAK,UAAU,OAAQA,EAAK,QAAQ,OAAQA,EAAK,OAAO,OAAQA,EAAK,IAAI,MAAM,EAC1GA,EAAK,iBAAiBE,EAAU,KAAKF,EAAK,gBAAgB,MAAM,EACpE,KAAK,YAAYA,EAAME,CAAS,CAClC,OAASC,EAAO,CACd,KAAK,YAAwB,CAAE,MAAmB,CAAE,KAAMA,EAAM,KAAM,QAASA,EAAM,OAAQ,CAAE,CAAC,CAClG,CACF,CAEA,KAAK,iBAAiB,UAAWL,EAAiB",
|
|
6
|
+
"names": ["geometryEmpty", "minimumX", "ring", "minimum", "point", "mergeHoles", "source", "target", "start", "width", "middle", "end", "left", "right", "output", "sortHoles", "holes", "buffer", "entries", "ring", "width", "start", "previous", "i", "minimumX", "source", "target", "mergeHoles", "cross", "a", "b", "c", "equal", "a", "b", "clean", "ring", "changed", "i", "a", "b", "c", "equal", "cross", "isClockWise", "points", "area", "i", "a", "b", "polygonRings", "paths", "vertices", "rings", "offset", "index", "path", "ring", "clean", "isClockWise", "inside", "point", "ring", "result", "i", "j", "a", "b", "insideHole", "point", "rings", "i", "inside", "on", "p", "q", "intersects", "a", "b", "c", "d", "equal", "abC", "cross", "abD", "cdA", "cdB", "on", "crossesRing", "a", "b", "ring", "i", "intersects", "crossesBoundary", "a", "b", "polygon", "rings", "crossesRing", "i", "connectHole", "polygon", "hole", "rings", "mid", "h2", "p2", "distance", "h", "p", "a", "b", "d", "inside", "insideHole", "crossesBoundary", "containsVertex", "polygon", "a", "b", "c", "p", "equal", "cross", "clipEars", "polygon", "result", "clipped", "i", "a", "b", "c", "p", "cross", "containsVertex", "triangle", "area", "ring", "sum", "i", "p", "q", "validateArea", "rings", "vertices", "result", "holeArea", "actual", "triangle", "area", "expected", "cross", "triangulate", "contour", "holes", "geometryEmpty", "paths", "points", "p", "index", "hole", "vertices", "rings", "polygonRings", "polygon", "holesToConnect", "sortHoles", "mid", "connectHole", "result", "clipEars", "validateArea", "groundOffset", "point", "addTriangle", "context", "a", "ah", "b", "bh", "c", "ch", "nx", "ny", "nz", "color", "layer", "positions", "normals", "colors", "uvs", "ux", "uy", "uz", "vx", "vy", "vz", "point", "height", "groundOffset", "buildProjectedPolygon", "context", "paths", "top", "bottom", "baseColor", "points", "path", "point", "a", "b", "c", "index", "sign", "i", "length", "nx", "nz", "triangulate", "addTriangle", "isClockWise", "triangleContexts", "addGeneratedTriangle", "args", "addTriangle", "triangleContexts", "generateTreeGeometry", "context", "generator", "point", "style", "triangleContexts", "addGeneratedTriangle", "toSRGB", "value", "channel", "n", "h", "l", "a", "k", "parseColor", "value", "a", "toSRGB", "channel", "context", "g", "b", "lampDirections", "ring", "point", "radius", "points", "lampDirections", "i", "lampPostGeometry", "point", "style", "addTriangle", "color", "parseColor", "radius", "center", "r", "low", "high", "points", "i", "a", "b", "nx", "nz", "section", "ring", "lampDirections", "quad", "addTriangle", "color", "a", "b", "c", "d", "height", "nx", "ny", "nz", "emitter", "point", "u", "v", "axis", "lightGeometry", "point", "style", "addTriangle", "color", "parseColor", "axis", "quad", "emitter", "roundProfile", "ringDirections", "ring", "point", "radius", "result", "ringDirections", "i", "surface", "point", "addTriangle", "lowRadius", "low", "highRadius", "high", "color", "lower", "ring", "upper", "i", "next", "slope", "length", "nx", "nz", "ny", "normalX", "normalZ", "ringDirections", "validateTree", "trunkRadius", "crownRadius", "crownBottom", "bottom", "top", "crownShape", "treeGeometry", "point", "style", "addTriangle", "top", "bottom", "trunkRadius", "crownRadius", "crownBottom", "crownShape", "validateTree", "trunk", "parseColor", "crown", "surface", "i", "low", "lr", "high", "hr", "base", "ring", "roundProfile", "buildProjectedPoint", "context", "projected", "style", "baseColor", "support", "top", "generateTreeGeometry", "lampPostGeometry", "lightGeometry", "treeGeometry", "instanceAreaGeometry", "context", "positions", "normals", "colors", "featureFaces", "vertices", "length", "originX", "originY", "originZ", "template", "i", "instance", "face", "start", "offsets", "computeBounds", "geometry", "min", "max", "data", "i", "x", "y", "z", "instances", "axis", "offset", "low", "high", "center", "radiusSquared", "radius", "assembleAreaGeometry", "jobs", "nightLight", "context", "job", "polygon", "start", "end", "buildProjectedPoint", "buildProjectedPolygon", "data", "instanceAreaGeometry", "result", "geometry", "computeBounds", "onGeometryMessage", "event", "data", "assembleAreaGeometry", "transfers", "error"]
|
|
7
|
+
}
|