@arcgis/core 5.2.0-next.104 → 5.2.0-next.106
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/WebScene.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/0630e650abdfea1792e4.js +1 -0
- package/assets/esri/core/workers/chunks/{9a084a12afd6f0bbabce.js → 082069f80eee0407b828.js} +1 -1
- package/assets/esri/core/workers/chunks/{ec5542d6ecc0622f7705.js → 1ec01fd6330d011c76d6.js} +1 -1
- package/assets/esri/core/workers/chunks/{4b0e3f83a5f2d3b0478a.js → 20a9d39673d95ed401cc.js} +1 -1
- package/assets/esri/core/workers/chunks/24673aac70d6c949b6fa.js +1 -0
- package/assets/esri/core/workers/chunks/{bba3eb07a2a0065759f9.js → 25bb07d3c32b16a08813.js} +1 -1
- package/assets/esri/core/workers/chunks/{ffca0b2333e760b66d3a.js → 262052dfaec3af8a58b9.js} +1 -1
- package/assets/esri/core/workers/chunks/33e583166ab3943ecf0e.js +1 -0
- package/assets/esri/core/workers/chunks/{98414a10f6de21107a03.js → 3dc5b97408b54daa9a8d.js} +1 -1
- package/assets/esri/core/workers/chunks/{2350f1eb70819cc06bb6.js → 4c00a46bf0345f99a9bb.js} +1 -1
- package/assets/esri/core/workers/chunks/{2165493d36c85b7c9a04.js → 5c8f423812a23c02c1fd.js} +1 -1
- package/assets/esri/core/workers/chunks/{c2d19bb097d074a1ef21.js → 753d1ff177ecee8e2377.js} +1 -1
- package/assets/esri/core/workers/chunks/777fc163530448eea13e.js +1 -0
- package/assets/esri/core/workers/chunks/{09a40fd0e462144c4640.js → 842f993fa60b410cb613.js} +1 -1
- package/assets/esri/core/workers/chunks/{6cf881f793fd0ec93981.js → 8c521caf050a486b6548.js} +1 -1
- package/assets/esri/core/workers/chunks/91e545745706111f5f62.js +1 -0
- package/assets/esri/core/workers/chunks/{c582441200ee1cdf51a7.js → 925a0b29d3ed7165b8dd.js} +1 -1
- package/assets/esri/core/workers/chunks/b013b70e40dfb6ce013e.js +1 -0
- package/assets/esri/core/workers/chunks/{34e04b24942da2b9b87c.js → b56c5883a5468b18b122.js} +1 -1
- package/assets/esri/core/workers/chunks/c7b762bae945f383c723.js +1 -0
- package/assets/esri/core/workers/chunks/d0eb609a214d85d21ed5.js +1 -0
- package/assets/esri/core/workers/chunks/d9b63cf111035b05cd2e.js +1 -0
- package/assets/esri/core/workers/chunks/{23c4ec0bcbc83179013e.js → dc1b38f490142f7273ef.js} +1 -1
- package/assets/esri/core/workers/chunks/f05622413cadfd14553e.js +1 -0
- package/assets/esri/core/workers/chunks/{c91905b5808b8049f96d.js → f3a547f179fe7e655af9.js} +10 -9
- package/chunks/GlobalIllumination.glsl.js +4 -4
- package/config.js +1 -1
- package/kernel.js +1 -1
- package/layers/AnnotationFeatureLayer.d.ts +22 -0
- package/layers/AnnotationFeatureLayer.js +1 -1
- package/layers/DimensionFeatureLayer.js +1 -1
- package/layers/list/Item.d.ts +11 -28
- package/layers/list/Item.js +1 -1
- package/layers/list/LayerItemCollection.js +1 -1
- package/layers/list/types.d.ts +30 -0
- package/layers/save/featureLayerUtils.js +1 -1
- package/layers/support/AnnotationFeatureSublayer.d.ts +24 -3
- package/layers/support/AnnotationFeatureSublayer.js +1 -1
- package/layers/support/layerUtils.js +1 -1
- package/layers/support/layersMapping.js +1 -1
- package/layers/support/telemetryDisplayUtils.js +2 -0
- package/package.json +5 -5
- package/support/revision.js +1 -1
- package/symbols/TextSymbol3DLayer.js +1 -1
- package/symbols/cim/TextRasterizer.js +1 -1
- package/symbols/cim/richTextUtils.js +1 -1
- package/symbols/support/Symbol3DTextBorder.js +2 -0
- package/views/2d/engine/webgl/GlyphWorker.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
- package/views/2d/layers/MediaLayerView2D.js +1 -1
- package/views/2d/layers/support/annodime/DimensionInfo.js +1 -1
- package/views/2d/layers/support/annodime/MatcherGeometryOverride.js +1 -1
- package/views/2d/layers/support/annodime/dimensionUtils.js +1 -1
- package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
- package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
- package/views/3d/support/QualityProfile.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceRayMarching.glsl.js +7 -6
- package/views/3d/webgl-engine/lib/BufferGeometry.js +1 -1
- package/views/3d/webgl-engine/lib/BufferGeometryBaseInstance.js +2 -0
- package/views/3d/webgl-engine/lib/BufferObject3D.js +1 -1
- package/views/3d/webgl-engine/lib/Buffers.js +2 -0
- package/views/3d/webgl-engine/lib/Intersector.js +1 -1
- package/views/3d/webgl-engine/lib/TextRenderParameters.js +1 -1
- package/views/3d/webgl-engine/lib/TextRenderer.js +1 -1
- package/views/3d/webgl-engine/materials/renderers/VaoWriter.js +1 -1
- package/widgets/FloorFilter/FloorFilterViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/0d69a18146722f792b5b.js +0 -1
- package/assets/esri/core/workers/chunks/3a8f6010a9f06a2457ae.js +0 -1
- package/assets/esri/core/workers/chunks/546213fb53fa921a3928.js +0 -1
- package/assets/esri/core/workers/chunks/5ed56ade84a0bea4a0c8.js +0 -1
- package/assets/esri/core/workers/chunks/93375f5f5bb754eca35f.js +0 -1
- package/assets/esri/core/workers/chunks/9e514a58b1165e273202.js +0 -1
- package/assets/esri/core/workers/chunks/a191ddb3b59ec1a7d818.js +0 -1
- package/assets/esri/core/workers/chunks/b24e1c901f7fda2a62ca.js +0 -1
- package/assets/esri/core/workers/chunks/da77257b517119578088.js +0 -1
- package/assets/esri/core/workers/chunks/fbbc5f551115787363d2.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import has from"../../../core/has.js";import t from"../../../core/Logger.js";import{abortMaybe as i,destroyMaybe as r,removeMaybe as s}from"../../../core/maybe.js";import{throwIfAborted as a,createAbortError as o}from"../../../core/promiseUtils.js";import{initial as n,watch as l,when as c}from"../../../core/reactiveUtils.js";import{schedule as d}from"../../../core/scheduling.js";import{isUint8Array as h,isFloat32Array as u,isUint32Array as m,isUint16Array as p}from"../../../core/typedArrayUtil.js";import{unitFromRESTJSON as f,convertUnit as g}from"../../../core/units.js";import{property as y,subclass as b}from"../../../core/accessorSupport/decorators.js";import{fromMat4 as _,invert as v}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{create as w,IDENTITY as C}from"../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{create as T}from"../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{fromValues as x}from"../../../core/libs/gl-matrix-2/factories/quatf64.js";import{normalize as j,sub as E,dot as M,set as R}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as O,freeze as S,clone as V,ZEROS as U,fromValues as P}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as H,clone as I,ONES as D}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{isMoon as L,isMars as A,getReferenceEllipsoid as k,SphericalECEFSpatialReferenceLike as F}from"../../../geometry/ellipsoidUtils.js";import G from"../../../geometry/HeightModelInfo.js";import{computeTranslationToOriginAndRotation as z}from"../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{localLinearScaleFactors as B}from"../../../geometry/projection/localLinearScaleFactors.js";import{projectVectorToVector as N}from"../../../geometry/projection/projectVectorToVector.js";import{create as q}from"../../../geometry/support/aaBoundingRect.js";import{isCompatible as W}from"../../../geometry/support/heightModelInfoUtils.js";import{isPlateCarree as X,isWebMercator as $,equals as Z,isGeographic as Y,isCGCS2000 as J}from"../../../geometry/support/spatialReferenceUtils.js";import K from"../../../geometry/support/WKIDUnitConversion.js";import{BufferViewVec4u8 as Q,BufferViewVec3u8 as ee,BufferViewVec2f as te,BufferViewVec3f as ie,BufferViewUint32 as re,BufferViewUint16 as se}from"../../../geometry/support/buffer/BufferView.js";import{nullId as ae}from"../../../layers/ILyr3DWasmPerSceneView.js";import oe from"../../../layers/support/SceneModification.js";import{getHeightModelInfoFromVCS as ne,validateEntity3D as le,makeCacheKey as ce}from"../../../layers/support/tiles3DUtils.js";import{getElevationOffsetInMeters as de}from"../../../support/elevationInfoUtils.js";import{IntegratedMesh3DTilesLayerWorkerHandle as he}from"./IntegratedMesh3DTilesLayerWorkerHandle.js";import{LayerView3D as ue}from"./LayerView3D.js";import{Lyr3DViewPerformanceInfo as me}from"./Lyr3DViewPerformanceInfo.js";import{addLayerViewToWasm as pe,removeLayerViewFromWasm as fe,getLyr3DWasm as ge}from"./Lyr3DWasm.js";import{toWasmModification as ye}from"./SceneLayerWorkerHandle.js";import{LayerElevationProvider as be}from"./i3s/LayerElevationProvider.js";import{IntegratedMesh3DTilesLayerView3DSymbol as _e}from"./support/integratedMesh3DTilesLayerViewInstanceUtils.js";import{primTypeConversion as ve,alphaModeConversion as we,faceCullingConversion as Ce,wrapModeConversion as Te}from"./support/lyr3dTypeConversions.js";import{makeScheduleFunction as xe}from"./support/makeScheduleFunction.js";import{Tiles3DMeshIntersectionHandler as je}from"./support/Tiles3DMeshIntersectionHandler.js";import{Frustum as Ee}from"../state/Frustum.js";import{ElevationRange as Me}from"../support/ElevationRange.js";import{toBoundingRect as Re}from"../support/extentUtils.js";import{Obb as Oe}from"../support/orientedBoundingBox.js";import{glLayout as Se}from"../support/buffer/glUtil.js";import{getGroundTransparencyModeFromOpacity as Ve}from"../terrain/TransparencyMode.js";import{ComponentGeometryParameters as Ue,SourceGeometry as Pe}from"../webgl-engine/collections/Component/SourceGeometry.js";import{Transform as He}from"../webgl-engine/collections/Component/Transform.js";import{RenderTexture as Ie}from"../webgl-engine/core/material/RenderTexture.js";import{ManagedTexture as De}from"../webgl-engine/lib/ManagedTexture.js";import{compressNormals as Le}from"../webgl-engine/lib/Normals.js";import{advancedMRRFactors as Ae}from"../webgl-engine/materials/pbrUtils.js";import ke from"../../layers/LayerView.js";import{spatialReferenceIncompatibleError as Fe,isInEffectiveScaleRange as Ge,validateScaleRange as ze}from"../../support/layerViewUtils.js";import{TaskPriority as Be}from"../../support/Scheduler.js";import{TextureCompressionTracker as Ne}from"../../support/TextureCompressionTracker.js";import{CompressedTextureFormat as qe,SizedPixelFormat as We}from"../../webgl/enums.js";import{alphaCutoff as Xe}from"../../../webscene/support/AlphaCutoff.js";var $e;function Ze(e,t,i){if("image/vnd-ms.dds"===t)switch(i){case"Dxt1":return qe.COMPRESSED_RGB_S3TC_DXT1_EXT;case"Dxt5":return qe.COMPRESSED_RGBA_S3TC_DXT5_EXT;default:return null}if("image/ktx"===t)return"Etc1"===i?qe.COMPRESSED_RGB8_ETC2:null;switch(e){case 33319:return We.RG8;case 6407:return We.RGB8;case 6408:return We.RGBA8;case 6403:return We.R8;default:return null}}let Ye=class extends(ue(ke)){static{$e=_e}constructor(e){super(e),this[$e]=!0,this.type="integrated-mesh-3dtiles",this.freeze=!1,this._modifications=new Array,this._visibleGeometryChangedSchedulerHandle=null,this._initializationController=null,this._wasmLayerId=-1,this._metersPerVCSUnit=1,this.ignoresMemoryFactor=!1,this._usedMemory=0,this._cacheMemory=0,this._useEsriCrs=!1,this.fullExtentInLocalViewSpatialReference=null,this._replacesTerrain=!1,this._isUsedAsGroundLayer=!1,this._applySSAO=!has("disable-feature:im-ssao"),this._imShading=!!has("enable-feature:im-shading"),this._imVertexNormals=!!has("enable-feature:im-vertex-normals"),this._lyrHandleToObjects=new Map,this._visibleObjects=new Set,this._loadedObjects=new Set,this._compressionTracker=new Ne,this._dbgFlags=new Set;const t=e.view.resourceController;this._memCache=t.memoryController.newCache(`IM3DTiles-${this.uid}`,e=>this._deletePerObjectData(e)),this._replacesTerrain=e.layer.replacesTerrain,this._isUsedAsGroundLayer=e.layer.isUsedAsGroundLayer,this._frameTask=t.scheduler.registerTask(Be.TILES3D,this),this._frustum=new Ee(e.view.renderCoordsHelper)}tryRecycleWith(e,t){return this.canRecycleWith(e)?e.load(t).then(()=>{a(t);const i=this.layer.queryElevationCallback;this.layer=e,this.layer.queryElevationCallback=i}):null}canRecycleWith(e){return e.url===this.layer.url&&"integrated-mesh-3dtiles"===e.type&&e.replacesTerrain===this._replacesTerrain&&e.isUsedAsGroundLayer===this._isUsedAsGroundLayer}initialize(){this._dbg(2,"Tiles3DLayerView3D initialize() called");const{view:e}=this;if(this._workerHandle=new he(xe(e.resourceController)),this._updatingHandles.add(()=>this.layer.modifications,()=>this._loadModifications(),n),!this._canProjectWithoutEngine())throw Fe("layer",this.layer.spatialReference.wkid,e.renderSpatialReference?.wkid);this._initializationController=new AbortController;const t=pe(this,this._initializationController.signal).then(t=>{a(this._initializationController.signal),this._wasmLayerId=t,this._intersectionHandler=new je(this),e.sceneIntersectionHelper.addIntersectionHandler(this._intersectionHandler),this._updatingHandles.add(()=>this.slicePlaneEnabled,e=>this._slicePlaneEnabledChange(e)),this._updatingHandles.add(()=>this._modifications,()=>this._modificationsChanged()),this._updatingHandles.add(()=>this.fullOpacity,()=>this._opacityChange()),this._updatingHandles.add(()=>this.view.overlayManager.renderer.isEmpty,()=>this._opacityChange()),this._updatingHandles.add(()=>e.clippingArea,()=>this._clippingAreaChanged(),n),this._updatingHandles.add(()=>e.state.contentCamera,()=>this._cameraChanged(),n),this._elevationProvider=new be({view:e,layerElevationSource:this,intersectionHandler:this._intersectionHandler});const i=this._replacesTerrain?0:1;e.elevationProvider.register(i,this._elevationProvider),e.overlayManager.registerDrapeTarget(this),this.addHandles([l(()=>this.layer.elevationInfo,e=>this._elevationInfoChanged(e)),c(()=>this.fullOpacity,()=>this._opacityChange()),l(()=>this.suspended,e=>this._wasm?.setEnabled(this,!e),n),l(()=>this.freeze,e=>{e?this._wasm?.incrementFrozenLayerViewCount(this):(this._wasm?.decrementFrozenLayerViewCount(this),this._cameraChanged())})]),this._initializationController=null,this.addHandles(c(()=>this._replacesTerrain&&this._wasm?.isTerrainReady,()=>{this.layer.queryElevationCallback=(e,t)=>this._queryElevation(e,t)}))});this.addResolvingPromise(t)}destroy(){if(this.freeze=!1,this._initializationController=i(this._initializationController),this._dbg(2,"Tiles3DLayerView3D destroy() called"),this._workerHandle?.destroyContextAndSelf(this.uid),fe(this),this.layer.queryElevationCallback=null,this._intersectionHandler&&(this.view.sceneIntersectionHelper.removeIntersectionHandler(this._intersectionHandler),this._intersectionHandler.destroy(),this._intersectionHandler=null),this._elevationProvider){const e=Array.from(this._lyrHandleToObjects.values()),t=e.reduce((e,{componentObjects:t})=>e+t.length,0);this._elevationProvider.notifyObjectsChangedFunctional(t,t=>{for(const{componentObjects:i}of e)for(const{obb:e}of i)if(!t(e))return}),this.view.elevationProvider.unregister(this._elevationProvider),this._elevationProvider=null}this.view.overlayManager.unregisterDrapeTarget(this),this._lyrHandleToObjects.forEach(e=>this.freeObject(e)),this._lyrHandleToObjects.clear(),this._visibleObjects.clear(),this._loadedObjects.clear(),this._usedMemory=0,this._cacheMemory=0,this._memCache.destroy(),this._frameTask.remove(),this._updatingHandles=r(this._updatingHandles),this.emit("visible-geometry-changed"),this._visibleGeometryChangedSchedulerHandle=s(this._visibleGeometryChangedSchedulerHandle)}get usedAsGround(){return this._isUsedAsGroundLayer}get fullOpacity(){return this.layer.replacesTerrain?this.view.map.ground.opacity:1}get opaque(){return 0===this._groundTransparencyMode}get invisible(){return 3===this._groundTransparencyMode}get _groundTransparencyMode(){return this.layer.replacesTerrain?Ve(this.fullOpacity,this.view.overlayManager.renderer.isEmpty):0}get _renderOpacity(){switch(this._groundTransparencyMode){case 3:return 0;case 2:return Xe;default:return this.fullOpacity}}get hasModifications(){return this._modifications&&this._modifications.length>0}_opacityChange(){const e=this._renderOpacity,t=this._groundTransparencyMode;this.forEachComponentObject(i=>this._collection.updateObjectOpacity(i,e,t))}_cameraChanged(){if(this.freeze)return;const e=this._frustum;e.update(this.view.state.contentCamera);const t=this._visibleObjects;let i=!1;this._loadedObjects.forEach(r=>{const s=r.obb?.intersectsFrustum(e)??!1;s!==r.isVisible&&(r.isVisible=s,s?t.add(r):t.delete(r),r.componentObjects.forEach(e=>this._collection.setObjectVisibility(e,s)),i||=this._isVisibileElevationRangeModifiedByChangedTileVisbility(s,r.elevationRange))}),i&&this._setVisibleElevationRangeDirty()}intersect(e,t,i,r){this._intersectionHandler.intersectRay(e,t,i,r,null,!1)}get ready(){return!this.layer.replacesTerrain||!!this._wasm?.isTerrainReady}_modificationsChanged(){const e=this.useEsriCrs?this.layer.supportedSpatialReferences[1]:this.layer.supportedSpatialReferences[0],t=ye(this._layerClippingArea,this._modifications,e,this.view.state.isGlobal);this._wasm?.setMeshModifications(this,t)}_clippingAreaChanged(){const e=this.layer.spatialReference,t=q();this._layerClippingArea=Re(this.view.clippingArea,t,e)?t:null,this._modificationsChanged()}_visibleGeometryChanged(){this._visibleGeometryChangedSchedulerHandle??=d(()=>{this.emit("visible-geometry-changed"),this._visibleGeometryChangedSchedulerHandle=null})}_slicePlaneEnabledChange(e){this._intersectionHandler&&(this._intersectionHandler.slicePlaneEnabled=e&&!this.layer.replacesTerrain),this.forEachComponentObject(t=>t.updateMaterial({slicePlaneEnabled:e}))}_elevationInfoChanged(e){this._wasm?.setLayerOffset(this,de(e))}get _wasm(){return ge(this.view)}_queryElevation(e,t){return this.destroying||this.destroyed?Promise.reject(o()):this._wasm?.queryElevation(this,e,t)??Promise.reject(o())}get wasmLayerId(){return this._wasmLayerId}get metersPerVCSUnit(){return this._metersPerVCSUnit}get usedMemory(){return this._usedMemory}get unloadedMemory(){return 0}get cachedMemory(){return this._cacheMemory}get useEsriCrs(){return this._useEsriCrs}get visibleAtCurrentScale(){return this.layer.isUsedAsGroundLayer||Ge(this.layer.effectiveScaleRange,this.view.scale)}canResume(){const e=this.layer&&"effectiveScaleRange"in this.layer?this.layer.effectiveScaleRange:null;return this.visible&&this.layer?.loaded&&this.parent&&!this.parent.suspended&&this.view?.ready&&(this.layer.isUsedAsGroundLayer||ze(e)&&this.visibleAtCurrentScale)&&this.visibleAtCurrentTimeExtent||!1}get performanceInfo(){let e=0,t=0,i=0,r=0,s=0,a=0;return this._lyrHandleToObjects.forEach(o=>{o.isLoaded?(e+=o.textureMemoryUsage,t+=o.vboMemoryUsage,s++):(i+=o.textureMemoryUsage,r+=o.vboMemoryUsage,a++)}),new me(this.usedMemory,s,a,Qe(t),Qe(e),Qe(r),Qe(i))}_canProjectWithoutEngine(){if(1===this.view.state.viewingMode)return!0;if(X(this.view.renderSpatialReference)||$(this.view.renderSpatialReference))return!0;if(this.layer.esriCrsSpatialReference&&Z(this.layer.esriCrsSpatialReference,this.view.renderSpatialReference)){if(115700===this.layer.esriCrsSpatialReference.vcsWkid)return!1;let e=ne(this.layer.esriCrsSpatialReference);if(!e){const t=this.layer.esriCrsSpatialReference;let i="meters";!Y(t)&&t.wkid&&-1!==t.wkid&&(i=f(K.units[K[t.wkid]])),i&&(e=new G({heightModel:"gravity-related-height",heightUnit:i}))}const t=this.view.heightModelInfo;return this._useEsriCrs=0===W(e,t,!1),this._useEsriCrs&&(e&&(this._metersPerVCSUnit=g(1,e.heightUnit,"meters")),this.fullExtentInLocalViewSpatialReference=this.layer.esriCrsFullExtent),this._useEsriCrs}return!1}get _stage(){return this.view.stage}get _collection(){return this._stage.renderView.componentObjectCollection}get elevationProvider(){return this._elevationProvider}get elevationOffset(){return de(this.layer.elevationInfo)}get elevationRange(){const e=this.fullExtent;return e?.zmin&&e?.zmax?new Me(e.zmin,e.zmax):null}getElevationRange(e){return this._intersectionHandler.getElevationRange(e)}get visibleElevationRange(){const e=new Me;0===this._visibleObjects.size?e.setElevationRangeValues(0,0):(e.setElevationRangeValues(1/0,-1/0),this._forEachRelevantVisibleTile(t=>e.expandElevationRange(t.elevationRange)),e.minElevation===1/0&&e.setElevationRangeValues(0,0));const t=this._get("visibleElevationRange");return t&&t.minElevation===e.minElevation&&t.maxElevation===e.maxElevation?t:e}_setVisibleElevationRangeDirty(){this.notifyChange("visibleElevationRange")}_forEachRelevantVisibleTile(e){const{view:t}=this,{spatialReference:i}=t,r=i.isWGS84||i.isWebMercator||J(i)||L(i)||A(i);if(this.view.state.isGlobal||!r)return this.forEachVisibleTile(e);const s=k(i).radius,{eye:a,viewForward:o,near:n}=t.state.contentCamera,l=j(O(),o),c=500,d=Math.max(a[2],c),h=d+s,u=Math.sqrt(h**2-s**2),m=Math.abs(Math.atan2(u,s))*s,p=d>.5*s?.5*Math.PI*s:m,f=O();this.forEachVisibleTile(t=>{const{mbsRadius:i,mbsCenter:r}=t;if(i<0)return;E(f,r,a);const s=M(f,l);Math.abs(s)<p&&s+i>n&&s-i<p&&e(t)})}get fullExtent(){return this.layer.fullExtent}forEachComponentObject(e){this._forEachObject(this._lyrHandleToObjects.values(),e)}forEachVisibleTile(e){for(const t of this._visibleObjects)e(t)}forEachTile(e){for(const t of this._loadedObjects)e(t)}forEachVisibleComponentObject(e){this._forEachObject(this._visibleObjects,e)}_forEachObject(e,t){for(const{componentObjects:i}of e)for(const e of i)t(e)}get drapeTargetType(){return this._replacesTerrain?0:1}isUpdating(){const e=this._wasm;return!this.freeze&&this._wasmLayerId>=0&&null!=e&&(e.isUpdating(this._wasmLayerId)||this._compressionTracker.compressing)}get readyToRun(){return!!this._frameTask?.readyToRun}runTask(e){this._frameTask.processQueue(e)}updatingFlagChanged(){this.notifyChange("updating")}async createRenderable(e){if(this.destroyed||this.destroying)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderable called after destroy");const{entity3d:t}=e;if(!le(t))throw new Error("entity3D not valid");const i=new Map;let r;try{r=this._createPrimitiveTextureBundles(t,i)}catch(a){throw i.forEach(e=>this._stage?.removeTexture(e)),a}let s=null;try{if(s=await this._createRenderableMain(t,r),this.destroyed)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderable aborted due to destroyed instance");const{tileObb:a,componentObjects:o,elevationRange:n}=s;let l=0,c=0,d=0;for(const e of o){const{texture:t,textureMetallicRoughness:i,textureEmissive:r,textureOcclusion:s,textureNormal:a}=e.renderable.drawParameters;l+=(t?.usedMemory??0)+(i?.usedMemory??0)+(r?.usedMemory??0)+(s?.usedMemory??0)+(a?.usedMemory??0),c+=this._collection.getObjectGPUMemoryUsage(e),d+=e.intersectionGeometry.usedMemory}const h=Array.from(i.values()),u=new Ke(e.handle,o,h,d,c,l,a,e.stableNodeId,e.nodeDepth,n);return this._lyrHandleToObjects.set(e.handle,u),()=>{this._memCache.put(ce(u.handle),u);const{usedMemory:e}=u;return this._cacheMemory+=e,{memUsageBytes:e}}}catch(a){throw r.forEach(e=>e.cleanup()),s?.componentObjects.forEach(e=>this._collection.destroyObject(e)),i.forEach(e=>this._stage?.removeTexture(e)),a}}_createPrimitiveTextureBundles(e,t){const i=new Array;try{const r=e.desc.geometry;for(const s of e.validPrimitiveIndices){const a=r.prims[s].materialId,o=e.desc.materials?.materials&&null!=a&&a!==ae?e.desc.materials.materials[a]:null;let n=Promise.resolve(tt),l=null,c=null,d=null,h=null,u=null;if(o){const i="Pbr"===o.lightingModel;l=this._getTexture(o.baseColorTex,e,t),c=i?this._getTexture(o.metalTex,e,t):null,d=i?this._getTexture(o.emissiveTex,e,t):null,h=i?this._getTexture(o.occlusionTex,e,t):null,u=i?this._getTexture(o.normalTex,e,t):null;const r=[l,c,d,h,u].map(e=>e?.loadPromise??null);n=Promise.all(r)}i.push(new it(n,l,c,d,h,u))}}catch(r){throw i.forEach(e=>e.cleanup()),r}return i}async _createRenderableMain(e,t){if(this.destroyed||this.destroying)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderableMain called after destroy");const i=new Array,r=e.desc,s=S(...e.origin),a=this.view.groundView.spatialReference,o=this.view.state.isGlobal;let n=C;if(o){const e=T();z(F,s,e,a),n=_(w(),e)}const l=et(r.obb),c=o?k(this.view.spatialReference).radius:0,d=new Array;try{let h=-1;for(const i of e.validPrimitiveIndices){h+=1;const s=r.geometry.prims[i],a=t[h];this._dbgFlags.has(2)&&this._dbg(2,JSON.stringify(s));if(null==ve[s.ptype]){this._dbg(2,"[Unsupported Feature] Unsupported primitive mode ("+s.ptype+"). Skipping primitive."),a.cleanup();continue}const{positionView:o,normalsData:n,colorView:l,texCoord0Data:c,indicesView:u}=this._getBufferViews(s,e);if(null==o||null==u){a.cleanup();continue}const m=o.count,p=(e,t)=>null==e||e===m||(this._dbg(3,`${t} !== numPos. Skipping primitive.`),!1);p(null!=c?c.length/2:void 0,"numTexcoord")&&p(l?.count,"numColors")&&p(n?.length,"normals")?d.push({componentIndex:h,positionView:o,indicesView:u,texCoord0Data:c,colorView:l,normalsData:n}):a.cleanup()}const u=n!==C,m=u?v(w(),n)??C:C,{vertexProcessingOutputs:p,obbHalfSizeAccumulator:f,elevationRange:g}=await this._workerHandle.processTiles3DVertices(d,s,c,o,n,l,this._imVertexNormals&&!this._isUsedAsGroundLayer);if(this.destroyed)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderableMain aborted due to destroyed instance");const y=r.materials;if(await Promise.all(t.map(e=>e.materialPromise)),this.destroyed)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderableMain aborted due to destroyed instance");p.length>0&&l.setHalfSize(f);for(const o of p){const{componentIndex:n,positionView:c,indicesView:d,layout:h,textureCoordinateType:p,interleavedVertexData:f,indices:g}=o,b=e.validPrimitiveIndices[n],_=r.geometry.prims[b],v=t[n],w=l.clone(),C=Se(h),T=new Uint32Array([0,d.typedBuffer.length]),x=new Ue(C,this._imShading?2:0,p,u?2:0),j=new Pe({interleavedVertexData:f,vertexCount:f.byteLength/C[0].stride,indexData:g},{positions:c.typedBuffer,indices:d.typedBuffer},T,x),E=this.view.renderSpatialReference,M=O(),R=[1,1,1];B(s,E,R,a)||this._dbg(3,"Unsupported coordinate system for IM overlay"),N(s,E,M,a);const S=this._createComponentMaterialInitParameters(y,_.materialId,v);S.baseColorTexture||this._dbg(3,"No colour texture 1");const V=this._collection.createObject({toMapSpace:H(M[0],M[1],R[0],R[1]),transform:new He(s,m),obb:w,geometry:j,elevationAlignable:!1},S);i.push(V)}const{fullExtent:b}=this.layer;return b?.hasZ&&b.zmax&&b.zmin&&(g.minElevation=Math.max(g.minElevation,b.zmin),g.maxElevation=Math.min(g.maxElevation,b.zmax)),{tileObb:l,componentObjects:i,elevationRange:g}}catch(h){throw i.forEach(e=>this._collection.destroyObject(e)),h}}_createComponentMaterialInitParameters(e,t,i){const r=null!=e?.materials&&null!=t&&t!==ae?e.materials[t]:null;let s=1;const a=r?.baseColorTex?.imageId;if(null!=a&&e&&Array.isArray(e.images)&&a>=0&&a<e.images.length){const t=e.images[a];t.alpha&&(s=we[t.alpha])}const o="Pbr"===(null!=r?r.lightingModel:"Unlit");let n=D,l=Xe,c=!1,d=2,h=P(0,0,0);const u=V(Ae),m=i.baseColorTexture,p=i.metallicRoughnessTexture,f=i.emissionTexture,g=i.occlusionTexture,y=i.normalTexture;return r&&(n=I(r.baseColorFactor),l=r.alphaCutoff??Xe,o&&(R(u,r.metallicFactor,r.roughnessFactor,0),r.emissiveFactor&&(h=r.emissiveFactor)),c=r.isDoubleSided,d=Ce[r.faceCulling??"NotSet"]),{isIntegratedMesh:!0,baseColor:n,textureAlphaCutoff:l,mrrFactors:u,baseColorTexture:m,metallicRoughnessTexture:p,normalTexture:y,occlusionTexture:g,emissionTexture:f,hasParametersFromSource:!1,sphereDepthInterpolate:this.layer.hasGoogleUrl,alphaDiscardMode:s,doubleSided:c,cullFace:d,isGround:this.layer.replacesTerrain,groundTransparencyMode:this._groundTransparencyMode,emissiveBaseColor:h,usePBR:o,slicePlaneEnabled:this.slicePlaneEnabled,opacity:this._renderOpacity,polygonOffset:0,ellipsoidMode:1,applySSAO:this._applySSAO}}freeRenderable(e){const t=this._lyrHandleToObjects.get(e);t?(t.isLoaded?(this._loadedObjects.delete(t),this._visibleObjects.delete(t),this._intersectionHandler.removeTile(t),this._usedMemory-=t.usedMemory):this._cacheMemory-=t.usedMemory,this.freeObject(t),this._lyrHandleToObjects.delete(e)):this._dbg(3,`freeRendedrable on non-existent renderable ${e}`)}freeObject(e){const t=ce(e.handle);this._memCache.pop(t),e.textures.forEach(e=>this._stage.removeTexture(e)),e.componentObjects.forEach(e=>this._collection.destroyObject(e))}setRenderableVisibility(e,t,i){if(this.destroyed||this.destroying)return;const r=this._frustum,s=new Array;let a=!1,o=!1;for(let n=0;n<i;++n){if(!t[n])continue;const i=e[n],l=this._lyrHandleToObjects.get(i);if(l){if(l.isLoaded){this._dbg(3,`Already loaded object marked loaded again ${l.stableNodeId}`);continue}a=!0,l.isLoaded=!0,this._loadedObjects.add(l),this._intersectionHandler.addTile(l),this._usedMemory+=l.usedMemory,this._cacheMemory-=l.usedMemory;const e=l.obb?.intersectsFrustum(r)??!0;l.isVisible=e,e&&(this._visibleObjects.add(l),o||=this._isVisibileElevationRangeModifiedByChangedTileVisbility(e,l.elevationRange)),s.push(l.obb),l.componentObjects.forEach(t=>{this._collection.setObjectVisibility(t,e)}),this._memCache.pop(ce(i))}else this._dbg(3,`Tried to mark Non existent object ${i} as loaded`)}for(let n=0;n<i;++n){const i=e[n];if(t[n])continue;const r=this._lyrHandleToObjects.get(i);if(r){if(!r.isLoaded){this._dbg(3,`Tried to unload not-loaded object ${r.stableNodeId}`);continue}const e=r.isVisible;this._visibleObjects.delete(r),r.isVisible=!1,r.isLoaded=!1,this._loadedObjects.delete(r),this._intersectionHandler.removeTile(r),e&&(this._visibleGeometryChanged(),o||=this._isVisibileElevationRangeModifiedByChangedTileVisbility(!1,r.elevationRange)),this._usedMemory-=r.usedMemory,this._cacheMemory+=r.usedMemory,s.push(r.obb),r.componentObjects.forEach(e=>{this._collection.setObjectVisibility(e,!1)}),this._memCache.put(ce(i),r)}else this._dbg(3,`Tried to mark Non existent object ${i} as not loaded`)}a&&this._visibleGeometryChanged(),s.length>0&&this._elevationProvider.notifyObjectsChanged(s),o&&this._setVisibleElevationRangeDirty()}setLodPixelThreshold(e){this._wasm?.setLodPixelThreshold(this,e)}_isVisibileElevationRangeModifiedByChangedTileVisbility(e,t){const{visibleElevationRange:i}=this,{minElevation:r,maxElevation:s}=t;return e?r<i.minElevation||s>i.maxElevation:r===i.minElevation||s===i.maxElevation}_getTexture(e,t,i){const r=e&&t.desc.materials?.images?.[e.imageId];if(!r||null==r.data||r.data===ae)return null;const s=t.assets[r.data];if(!s||s.byteCount<1||"U8"!==s.dataType)return null;const a=i.get(r)??this._createTexture(e,r,s,i);return a?new Ie(this._stage.renderView.textures,a.id):null}_createTexture(e,t,i,r){const s=this._stage.renderView.renderingContext.parameters.maxMaxAnisotropy,a=!!t.mipCount||s>1,o=Te[e.wrapMode??"None"];let n=t.alpha?6408:6407;const l=new Uint8Array(i.data.buffer,0,i.byteCount);let c=null,d=null,h=null;switch(t.format){case"Raw":"R8"===t.pixelFormat?(c=l,n=6403,d=""):"Rg8"===t.pixelFormat||"Ga8"===t.pixelFormat?(c=l,n=33319,d=""):"Rgb8"===t.pixelFormat?(c=l,n=6407,d=""):"Rgba8"===t.pixelFormat&&(c=l,n=6408,d="");break;case"Dxt1":c=l,n=6407,d="image/vnd-ms.dds";break;case"Dxt5":c=l,n=6408,d="image/vnd-ms.dds";break;case"Basis":c=l,n=6407,d="image/ktx2";break;case"Etc1":c=l,n=6407,d="image/ktx";break;case"Png":d="image/png",h=document.createElement("img");break;case"Jpeg":d="image/jpeg",h=document.createElement("img");break;case"Etc2":d="image/ktx",h=document.createElement("img");break;case"Astc":this._dbg(3,"Astc texture not supported");break;case"Pvrtc":this._dbg(3,"Pvrtc texture not supported")}if(h&&d){const e=new Blob([l],{type:d});h.src=URL.createObjectURL(e),c=h}if(c&&null!=d){const e=has("enable-feature:esri-compress-IM-textures")?{compressionTracker:this._compressionTracker}:void 0,i=Ze(n,d,t.format),l=new De(c,{mipmap:a,maxAnisotropy:s,encoding:d,wrap:o,pixelFormat:n,internalFormat:i??void 0,immutable:null!=i,compressionOptions:e,noUnpackFlip:!0,width:t.mip0Width,height:t.mip0Height});return this._stage.addTexture(l),r.set(t,l),l}return null}_getBufferViews(e,t){let i,r,s,a,o;for(let c=0;c<e.atrbs.length;c++){const o=e.atrbs[c],n=t.assets[o.assetId];if(!n)continue;const d=n.data.buffer,m=void 0,p=0,f=n.byteCount;try{switch(o.sem){case"Position":3===n.ncomp&&"F32"===n.dataType&&u(n.data)?i=new ie(d,p,m,f):this._dbg(3,"[Unsupported Feature] Unsupported view for Position ("+n+")");break;case"Normal":if(3===n.ncomp&&"F32"===n.dataType&&u(n.data)){const e=new ie(d,p,m,f);a=new Uint32Array(e.count),Le(e.typedBuffer,new Int16Array(a.buffer,a.byteOffset,2*a.length))}else this._dbg(3,"[Unsupported Feature] Unsupported view for Normal ("+n+")");break;case"TexCoord":2===n.ncomp&&"F32"===n.dataType&&u(n.data)?void 0===s&&(s=new te(d,p,m,f).typedBuffer):this._dbg(3,"[Unsupported Feature] Unsupported view for Texcoord ("+n+")");break;case"Color":"U8"===n.dataType&&h(n.data)&&(4===n.ncomp?r=new Q(d,p,m,f):3===n.ncomp&&(r=new ee(d,p,m,f))),null==r&&this._dbg(3,"[Unsupported Feature] Unsupported view for Color ("+n+")");break;case"FeatureIndex":break;default:this._dbg(2,"[Unsupported Feature] Unsupported semantic ("+o.sem+"). Skipping vertex attribute.")}}catch(l){this._dbg(2,"Error Creating buffer ("+l+"). Skipping vertex attribute.")}}let n=!1;if(null!=e.index&&e.index!==ae){const i=t.assets[e.index];if(i){const e=void 0,t=0,r=i.byteCount;switch(i.dataType){case"U16":1===i.ncomp&&p(i.data)&&(o=new se(i.data.buffer,t,e,r));break;case"U32":1===i.ncomp&&m(i.data)&&(o=new re(i.data.buffer,t,e,r))}n=!o}else n=!0}if(!n&&null==o&&null!=i){const e=i.count;o=o=e<65535?new se(new Uint16Array(e).buffer):new re(new Uint32Array(e).buffer);for(let t=0;t<e;t++)o.set(t,t)}return{positionView:i,colorView:r,texCoord0Data:s,indicesView:o,normalsData:a}}_loadModifications(){if(this.removeHandles("modifications"),null==this.layer.modifications)return void(this._modifications=[]);const e=this.layer.modifications;this.addHandles(this._updatingHandles.addOnCollectionChange(()=>e,()=>{this._modifications=e.filter(e=>!(this.layer.isUsedAsGroundLayer&&"replace"!==e.type)).toArray(),this._modifications.length<e.length&&t.getLogger(this).info("Ground layers only support replace modifications. Other modification types have been ignored.")},n),"modifications")}_deletePerObjectData(e){this._wasm?.onRenderableEvicted(this,e.handle,e.usedMemory),this.freeRenderable(e.handle)}_dbg(e,i){this._dbgFlags.has(e)&&(3===e?t.getLogger(this).error(i):t.getLogger(this).warn(i))}};e([y()],Ye.prototype,"freeze",void 0),e([y()],Ye.prototype,"fullOpacity",null),e([y()],Ye.prototype,"opaque",null),e([y()],Ye.prototype,"invisible",null),e([y({readOnly:!0})],Ye.prototype,"ready",null),e([y({type:[oe]})],Ye.prototype,"_modifications",void 0),e([y()],Ye.prototype,"_visibleGeometryChangedSchedulerHandle",void 0),e([y()],Ye.prototype,"layer",void 0),e([y({readOnly:!0})],Ye.prototype,"visibleAtCurrentScale",null),e([y({readOnly:!0})],Ye.prototype,"_collection",null),e([y()],Ye.prototype,"elevationOffset",null),e([y({readOnly:!0})],Ye.prototype,"visibleElevationRange",null),e([y()],Ye.prototype,"fullExtentInLocalViewSpatialReference",void 0),Ye=e([b("esri.views.3d.layers.IntegratedMesh3DTilesLayerView3D")],Ye);const Je=Ye;class Ke{constructor(e,t,i,r,s,a,o,n,l,c){this.handle=e,this.componentObjects=t,this.textures=i,this.cpuMemoryUsage=r,this.vboMemoryUsage=s,this.textureMemoryUsage=a,this.obb=o,this.stableNodeId=n,this.nodeDepth=l,this.elevationRange=c,this.bvhIntersectionGeneration=0,this.isLoaded=!1,this.isVisible=!1;const d=O();o?.getCenter(d),this._obbCenterX=d[0],this._obbCenterY=d[1],this._obbCenterZ=d[2];const h=o?.radius??-1;this._obbRadius=h,this._obbRadiusSquared=h*h,this._obbShortestHalfsize=o?Math.min(o.halfSizeX,o.halfSizeY,o.halfSizeZ):0,this._mbsCenter=o?o.getCenter(O()):U}get usedMemory(){return this.textureMemoryUsage+this.vboMemoryUsage+this.cpuMemoryUsage}get mbsRadius(){return this._obbRadius}get mbsCenter(){return this._mbsCenter}boundingVolumeIntersectsRay(e,t){if(!this.obb)return!0;const{_obbCenterX:i,_obbCenterY:r,_obbCenterZ:s}=this,a=i-e[0],o=r-e[1],n=s-e[2],l=a*t[0]+o*t[1]+n*t[2];return a*a+o*o+n*n-l*l<=this._obbRadiusSquared&&this.obb.intersectRay(e,t)}boundingVolumeIntersectsSphere(e){const t=this._obbRadius;if(t<0)return!0;const i=e.center,r=e.radius,s=t+r,a=this._obbCenterX-i[0];if(a>s)return!1;const o=this._obbCenterY-i[1];if(o>s)return!1;const n=this._obbCenterZ-i[2];if(n>s)return!1;const l=a*a+o*o+n*n;if(l>s*s)return!1;if(l<=(this._obbShortestHalfsize+r)**2)return!0;const c=r-t;return c>0&&l<=c*c||(this.obb?.intersectSphere(e)??!0)}}function Qe(e){return Math.round(e/1048.576)/1e3}function et(e){return new Oe(e.center,e.halfSize,x(...e.quaternion))}const tt=new Array;class it{constructor(e,t,i,r,s,a){this.materialPromise=e,this.baseColorTexture=t,this.metallicRoughnessTexture=i,this.emissionTexture=r,this.occlusionTexture=s,this.normalTexture=a}cleanup(){this.baseColorTexture?.dispose(),this.metallicRoughnessTexture?.dispose(),this.emissionTexture?.dispose(),this.occlusionTexture?.dispose(),this.normalTexture?.dispose()}}export{Je as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import has from"../../../core/has.js";import t from"../../../core/Logger.js";import{abortMaybe as i,destroyMaybe as r,removeMaybe as s}from"../../../core/maybe.js";import{throwIfAborted as a,createAbortError as o}from"../../../core/promiseUtils.js";import{initial as n,whenOnce as l,watch as c,when as d}from"../../../core/reactiveUtils.js";import{schedule as h}from"../../../core/scheduling.js";import{isUint8Array as u,isFloat32Array as m,isUint32Array as p,isUint16Array as f}from"../../../core/typedArrayUtil.js";import{unitFromRESTJSON as g,convertUnit as y}from"../../../core/units.js";import{property as b,subclass as _}from"../../../core/accessorSupport/decorators.js";import{fromMat4 as v,invert as w}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{create as C,IDENTITY as T}from"../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{create as x}from"../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{fromValues as j}from"../../../core/libs/gl-matrix-2/factories/quatf64.js";import{normalize as E,sub as M,dot as R,set as O}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as S,freeze as V,clone as U,ZEROS as P,fromValues as I}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as H,clone as D,ONES as A}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{isMoon as L,isMars as k,getReferenceEllipsoid as F,SphericalECEFSpatialReferenceLike as G}from"../../../geometry/ellipsoidUtils.js";import z from"../../../geometry/HeightModelInfo.js";import{computeTranslationToOriginAndRotation as B}from"../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{localLinearScaleFactors as N}from"../../../geometry/projection/localLinearScaleFactors.js";import{projectVectorToVector as q}from"../../../geometry/projection/projectVectorToVector.js";import{create as W}from"../../../geometry/support/aaBoundingRect.js";import{isCompatible as X}from"../../../geometry/support/heightModelInfoUtils.js";import{isPlateCarree as $,isWebMercator as Z,equals as Y,isGeographic as J,isCGCS2000 as K}from"../../../geometry/support/spatialReferenceUtils.js";import Q from"../../../geometry/support/WKIDUnitConversion.js";import{BufferViewVec4u8 as ee,BufferViewVec3u8 as te,BufferViewVec2f as ie,BufferViewVec3f as re,BufferViewUint32 as se,BufferViewUint16 as ae}from"../../../geometry/support/buffer/BufferView.js";import{nullId as oe}from"../../../layers/ILyr3DWasmPerSceneView.js";import ne from"../../../layers/support/SceneModification.js";import{getHeightModelInfoFromVCS as le,validateEntity3D as ce,makeCacheKey as de}from"../../../layers/support/tiles3DUtils.js";import{getElevationOffsetInMeters as he}from"../../../support/elevationInfoUtils.js";import{IntegratedMesh3DTilesLayerWorkerHandle as ue}from"./IntegratedMesh3DTilesLayerWorkerHandle.js";import{LayerView3D as me}from"./LayerView3D.js";import{Lyr3DViewPerformanceInfo as pe}from"./Lyr3DViewPerformanceInfo.js";import{addLayerViewToWasm as fe,removeLayerViewFromWasm as ge,getLyr3DWasm as ye}from"./Lyr3DWasm.js";import{toWasmModification as be}from"./SceneLayerWorkerHandle.js";import{LayerElevationProvider as _e}from"./i3s/LayerElevationProvider.js";import{IntegratedMesh3DTilesLayerView3DSymbol as ve}from"./support/integratedMesh3DTilesLayerViewInstanceUtils.js";import{primTypeConversion as we,alphaModeConversion as Ce,faceCullingConversion as Te,wrapModeConversion as xe}from"./support/lyr3dTypeConversions.js";import{makeScheduleFunction as je}from"./support/makeScheduleFunction.js";import{Tiles3DMeshIntersectionHandler as Ee}from"./support/Tiles3DMeshIntersectionHandler.js";import{Frustum as Me}from"../state/Frustum.js";import{ElevationRange as Re}from"../support/ElevationRange.js";import{toBoundingRect as Oe}from"../support/extentUtils.js";import{Obb as Se}from"../support/orientedBoundingBox.js";import{glLayout as Ve}from"../support/buffer/glUtil.js";import{getGroundTransparencyModeFromOpacity as Ue}from"../terrain/TransparencyMode.js";import{ComponentGeometryParameters as Pe,SourceGeometry as Ie}from"../webgl-engine/collections/Component/SourceGeometry.js";import{Transform as He}from"../webgl-engine/collections/Component/Transform.js";import{RenderTexture as De}from"../webgl-engine/core/material/RenderTexture.js";import{ManagedTexture as Ae}from"../webgl-engine/lib/ManagedTexture.js";import{compressNormals as Le}from"../webgl-engine/lib/Normals.js";import{advancedMRRFactors as ke}from"../webgl-engine/materials/pbrUtils.js";import Fe from"../../layers/LayerView.js";import{spatialReferenceIncompatibleError as Ge,isInEffectiveScaleRange as ze,validateScaleRange as Be}from"../../support/layerViewUtils.js";import{TaskPriority as Ne}from"../../support/Scheduler.js";import{TextureCompressionTracker as qe}from"../../support/TextureCompressionTracker.js";import{CompressedTextureFormat as We,SizedPixelFormat as Xe}from"../../webgl/enums.js";import{alphaCutoff as $e}from"../../../webscene/support/AlphaCutoff.js";var Ze;function Ye(e,t,i){if("image/vnd-ms.dds"===t)switch(i){case"Dxt1":return We.COMPRESSED_RGB_S3TC_DXT1_EXT;case"Dxt5":return We.COMPRESSED_RGBA_S3TC_DXT5_EXT;default:return null}if("image/ktx"===t)return"Etc1"===i?We.COMPRESSED_RGB8_ETC2:null;switch(e){case 33319:return Xe.RG8;case 6407:return Xe.RGB8;case 6408:return Xe.RGBA8;case 6403:return Xe.R8;default:return null}}let Je=class extends(me(Fe)){static{Ze=ve}constructor(e){super(e),this[Ze]=!0,this.type="integrated-mesh-3dtiles",this.freeze=!1,this._modifications=new Array,this._visibleGeometryChangedSchedulerHandle=null,this._initializationController=null,this._wasmLayerId=-1,this._metersPerVCSUnit=1,this.ignoresMemoryFactor=!1,this._usedMemory=0,this._cacheMemory=0,this._useEsriCrs=!1,this.fullExtentInLocalViewSpatialReference=null,this._replacesTerrain=!1,this._isUsedAsGroundLayer=!1,this._applySSAO=!has("disable-feature:im-ssao"),this._imShading=!!has("enable-feature:im-shading"),this._imVertexNormals=!!has("enable-feature:im-vertex-normals"),this._lyrHandleToObjects=new Map,this._visibleObjects=new Set,this._loadedObjects=new Set,this._compressionTracker=new qe,this._dbgFlags=new Set;const t=e.view.resourceController;this._memCache=t.memoryController.newCache(`IM3DTiles-${this.uid}`,e=>this._deletePerObjectData(e)),this._replacesTerrain=e.layer.replacesTerrain,this._isUsedAsGroundLayer=e.layer.isUsedAsGroundLayer,this._frameTask=t.scheduler.registerTask(Ne.TILES3D,this),this._frustum=new Me(e.view.renderCoordsHelper)}tryRecycleWith(e,t){return this.canRecycleWith(e)?e.load(t).then(()=>{a(t);const i=this.layer.queryElevationCallback;this.layer=e,this.layer.queryElevationCallback=i}):null}canRecycleWith(e){return e.url===this.layer.url&&"integrated-mesh-3dtiles"===e.type&&e.replacesTerrain===this._replacesTerrain&&e.isUsedAsGroundLayer===this._isUsedAsGroundLayer}initialize(){this._dbg(2,"Tiles3DLayerView3D initialize() called");const{view:e}=this;this._workerHandle=new ue(je(e.resourceController)),this._updatingHandles.add(()=>this.layer.modifications,()=>this._loadModifications(),n),this.addResolvingPromise(this._initializeAsync(e))}async _initializeAsync(e){this._initializationController=new AbortController;const{signal:t}=this._initializationController;if(await l(()=>e?.defaultsFromMap.heightModelInfoReady,t),a(t),!this._canProjectWithoutEngine())throw Ge("layer",this.layer.spatialReference.wkid,e.renderSpatialReference?.wkid);this._wasmLayerId=await fe(this,t),a(t);const i=new Ee(this);this._intersectionHandler=i,e.sceneIntersectionHelper.addIntersectionHandler(i),this._elevationProvider=new _e({view:e,layerElevationSource:this,intersectionHandler:i});const r=this._replacesTerrain?0:1;e.elevationProvider.register(r,this._elevationProvider),this._updatingHandles.add(()=>this.slicePlaneEnabled,e=>this._slicePlaneEnabledChange(e)),this._updatingHandles.add(()=>this._modifications,()=>this._modificationsChanged()),this._updatingHandles.add(()=>this.fullOpacity,()=>this._opacityChange()),this._updatingHandles.add(()=>e.overlayManager.renderer.isEmpty,()=>this._opacityChange()),this._updatingHandles.add(()=>e.clippingArea,()=>this._clippingAreaChanged(),n),this._updatingHandles.add(()=>e.state.contentCamera,()=>this._cameraChanged(),n),e.overlayManager.registerDrapeTarget(this),this.addHandles([c(()=>this.layer.elevationInfo,e=>this._elevationInfoChanged(e)),d(()=>this.fullOpacity,()=>this._opacityChange()),c(()=>this.suspended,e=>this._wasm?.setEnabled(this,!e),n),c(()=>this.freeze,e=>{e?this._wasm?.incrementFrozenLayerViewCount(this):(this._wasm?.decrementFrozenLayerViewCount(this),this._cameraChanged())})]),this._initializationController=null,this.addHandles(d(()=>this._replacesTerrain&&this._wasm?.isTerrainReady,()=>{this.layer.queryElevationCallback=(e,t)=>this._queryElevation(e,t)}))}destroy(){if(this.freeze=!1,this._initializationController=i(this._initializationController),this._dbg(2,"Tiles3DLayerView3D destroy() called"),this._workerHandle?.destroyContextAndSelf(this.uid),ge(this),this.layer.queryElevationCallback=null,this._intersectionHandler&&(this.view.sceneIntersectionHelper.removeIntersectionHandler(this._intersectionHandler),this._intersectionHandler.destroy(),this._intersectionHandler=null),this._elevationProvider){const e=Array.from(this._lyrHandleToObjects.values()),t=e.reduce((e,{componentObjects:t})=>e+t.length,0);this._elevationProvider.notifyObjectsChangedFunctional(t,t=>{for(const{componentObjects:i}of e)for(const{obb:e}of i)if(!t(e))return}),this.view.elevationProvider.unregister(this._elevationProvider),this._elevationProvider=null}this.view.overlayManager.unregisterDrapeTarget(this),this._lyrHandleToObjects.forEach(e=>this.freeObject(e)),this._lyrHandleToObjects.clear(),this._visibleObjects.clear(),this._loadedObjects.clear(),this._usedMemory=0,this._cacheMemory=0,this._memCache.destroy(),this._frameTask.remove(),this._updatingHandles=r(this._updatingHandles),this.emit("visible-geometry-changed"),this._visibleGeometryChangedSchedulerHandle=s(this._visibleGeometryChangedSchedulerHandle)}get usedAsGround(){return this._isUsedAsGroundLayer}get fullOpacity(){return this.layer.replacesTerrain?this.view.map.ground.opacity:1}get opaque(){return 0===this._groundTransparencyMode}get invisible(){return 3===this._groundTransparencyMode}get _groundTransparencyMode(){return this.layer.replacesTerrain?Ue(this.fullOpacity,this.view.overlayManager.renderer.isEmpty):0}get _renderOpacity(){switch(this._groundTransparencyMode){case 3:return 0;case 2:return $e;default:return this.fullOpacity}}get hasModifications(){return this._modifications&&this._modifications.length>0}_opacityChange(){const e=this._renderOpacity,t=this._groundTransparencyMode;this.forEachComponentObject(i=>this._collection.updateObjectOpacity(i,e,t))}_cameraChanged(){if(this.freeze)return;const e=this._frustum;e.update(this.view.state.contentCamera);const t=this._visibleObjects;let i=!1;this._loadedObjects.forEach(r=>{const s=r.obb?.intersectsFrustum(e)??!1;s!==r.isVisible&&(r.isVisible=s,s?t.add(r):t.delete(r),r.componentObjects.forEach(e=>this._collection.setObjectVisibility(e,s)),i||=this._isVisibileElevationRangeModifiedByChangedTileVisbility(s,r.elevationRange))}),i&&this._setVisibleElevationRangeDirty()}intersect(e,t,i,r){this._intersectionHandler.intersectRay(e,t,i,r,null,!1)}get ready(){return!this.layer.replacesTerrain||!!this._wasm?.isTerrainReady}_modificationsChanged(){const e=this.useEsriCrs?this.layer.supportedSpatialReferences[1]:this.layer.supportedSpatialReferences[0],t=be(this._layerClippingArea,this._modifications,e,this.view.state.isGlobal);this._wasm?.setMeshModifications(this,t)}_clippingAreaChanged(){const e=this.layer.spatialReference,t=W();this._layerClippingArea=Oe(this.view.clippingArea,t,e)?t:null,this._modificationsChanged()}_visibleGeometryChanged(){this._visibleGeometryChangedSchedulerHandle??=h(()=>{this.emit("visible-geometry-changed"),this._visibleGeometryChangedSchedulerHandle=null})}_slicePlaneEnabledChange(e){this._intersectionHandler&&(this._intersectionHandler.slicePlaneEnabled=e&&!this.layer.replacesTerrain),this.forEachComponentObject(t=>t.updateMaterial({slicePlaneEnabled:e}))}_elevationInfoChanged(e){this._wasm?.setLayerOffset(this,he(e))}get _wasm(){return ye(this.view)}_queryElevation(e,t){return this.destroying||this.destroyed?Promise.reject(o()):this._wasm?.queryElevation(this,e,t)??Promise.reject(o())}get wasmLayerId(){return this._wasmLayerId}get metersPerVCSUnit(){return this._metersPerVCSUnit}get usedMemory(){return this._usedMemory}get unloadedMemory(){return 0}get cachedMemory(){return this._cacheMemory}get useEsriCrs(){return this._useEsriCrs}get visibleAtCurrentScale(){return this.layer.isUsedAsGroundLayer||ze(this.layer.effectiveScaleRange,this.view.scale)}canResume(){const e=this.layer&&"effectiveScaleRange"in this.layer?this.layer.effectiveScaleRange:null;return this.visible&&this.layer?.loaded&&this.parent&&!this.parent.suspended&&this.view?.ready&&(this.layer.isUsedAsGroundLayer||Be(e)&&this.visibleAtCurrentScale)&&this.visibleAtCurrentTimeExtent||!1}get performanceInfo(){let e=0,t=0,i=0,r=0,s=0,a=0;return this._lyrHandleToObjects.forEach(o=>{o.isLoaded?(e+=o.textureMemoryUsage,t+=o.vboMemoryUsage,s++):(i+=o.textureMemoryUsage,r+=o.vboMemoryUsage,a++)}),new pe(this.usedMemory,s,a,et(t),et(e),et(r),et(i))}_canProjectWithoutEngine(){if(1===this.view.state.viewingMode)return!0;if($(this.view.renderSpatialReference)||Z(this.view.renderSpatialReference))return!0;if(this.layer.esriCrsSpatialReference&&Y(this.layer.esriCrsSpatialReference,this.view.renderSpatialReference)){if(115700===this.layer.esriCrsSpatialReference.vcsWkid)return!1;let e=le(this.layer.esriCrsSpatialReference);if(!e){const t=this.layer.esriCrsSpatialReference;let i="meters";!J(t)&&t.wkid&&-1!==t.wkid&&(i=g(Q.units[Q[t.wkid]])),i&&(e=new z({heightModel:"gravity-related-height",heightUnit:i}))}const t=this.view.heightModelInfo;return this._useEsriCrs=0===X(e,t,!1),this._useEsriCrs&&(e&&(this._metersPerVCSUnit=y(1,e.heightUnit,"meters")),this.fullExtentInLocalViewSpatialReference=this.layer.esriCrsFullExtent),this._useEsriCrs}return!1}get _stage(){return this.view.stage}get _collection(){return this._stage.renderView.componentObjectCollection}get elevationProvider(){return this._elevationProvider}get elevationOffset(){return he(this.layer.elevationInfo)}get elevationRange(){const e=this.fullExtent;return e?.zmin&&e?.zmax?new Re(e.zmin,e.zmax):null}getElevationRange(e){return this._intersectionHandler.getElevationRange(e)}get visibleElevationRange(){const e=new Re;0===this._visibleObjects.size?e.setElevationRangeValues(0,0):(e.setElevationRangeValues(1/0,-1/0),this._forEachRelevantVisibleTile(t=>e.expandElevationRange(t.elevationRange)),e.minElevation===1/0&&e.setElevationRangeValues(0,0));const t=this._get("visibleElevationRange");return t&&t.minElevation===e.minElevation&&t.maxElevation===e.maxElevation?t:e}_setVisibleElevationRangeDirty(){this.notifyChange("visibleElevationRange")}_forEachRelevantVisibleTile(e){const{view:t}=this,{spatialReference:i}=t,r=i.isWGS84||i.isWebMercator||K(i)||L(i)||k(i);if(this.view.state.isGlobal||!r)return this.forEachVisibleTile(e);const s=F(i).radius,{eye:a,viewForward:o,near:n}=t.state.contentCamera,l=E(S(),o),c=500,d=Math.max(a[2],c),h=d+s,u=Math.sqrt(h**2-s**2),m=Math.abs(Math.atan2(u,s))*s,p=d>.5*s?.5*Math.PI*s:m,f=S();this.forEachVisibleTile(t=>{const{mbsRadius:i,mbsCenter:r}=t;if(i<0)return;M(f,r,a);const s=R(f,l);Math.abs(s)<p&&s+i>n&&s-i<p&&e(t)})}get fullExtent(){return this.layer.fullExtent}forEachComponentObject(e){this._forEachObject(this._lyrHandleToObjects.values(),e)}forEachVisibleTile(e){for(const t of this._visibleObjects)e(t)}forEachTile(e){for(const t of this._loadedObjects)e(t)}forEachVisibleComponentObject(e){this._forEachObject(this._visibleObjects,e)}_forEachObject(e,t){for(const{componentObjects:i}of e)for(const e of i)t(e)}get drapeTargetType(){return this._replacesTerrain?0:1}isUpdating(){const e=this._wasm;return!this.freeze&&this._wasmLayerId>=0&&null!=e&&(e.isUpdating(this._wasmLayerId)||this._compressionTracker.compressing)}get readyToRun(){return!!this._frameTask?.readyToRun}runTask(e){this._frameTask.processQueue(e)}updatingFlagChanged(){this.notifyChange("updating")}async createRenderable(e){if(this.destroyed||this.destroying)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderable called after destroy");const{entity3d:t}=e;if(!ce(t))throw new Error("entity3D not valid");const i=new Map;let r;try{r=this._createPrimitiveTextureBundles(t,i)}catch(a){throw i.forEach(e=>this._stage?.removeTexture(e)),a}let s=null;try{if(s=await this._createRenderableMain(t,r),this.destroyed)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderable aborted due to destroyed instance");const{tileObb:a,componentObjects:o,elevationRange:n}=s;let l=0,c=0,d=0;for(const e of o){const{texture:t,textureMetallicRoughness:i,textureEmissive:r,textureOcclusion:s,textureNormal:a}=e.renderable.drawParameters;l+=(t?.usedMemory??0)+(i?.usedMemory??0)+(r?.usedMemory??0)+(s?.usedMemory??0)+(a?.usedMemory??0),c+=this._collection.getObjectGPUMemoryUsage(e),d+=e.intersectionGeometry.usedMemory}const h=Array.from(i.values()),u=new Qe(e.handle,o,h,d,c,l,a,e.stableNodeId,e.nodeDepth,n);return this._lyrHandleToObjects.set(e.handle,u),()=>{this._memCache.put(de(u.handle),u);const{usedMemory:e}=u;return this._cacheMemory+=e,{memUsageBytes:e}}}catch(a){throw r.forEach(e=>e.cleanup()),s?.componentObjects.forEach(e=>this._collection.destroyObject(e)),i.forEach(e=>this._stage?.removeTexture(e)),a}}_createPrimitiveTextureBundles(e,t){const i=new Array;try{const r=e.desc.geometry;for(const s of e.validPrimitiveIndices){const a=r.prims[s].materialId,o=e.desc.materials?.materials&&null!=a&&a!==oe?e.desc.materials.materials[a]:null;let n=Promise.resolve(it),l=null,c=null,d=null,h=null,u=null;if(o){const i="Pbr"===o.lightingModel;l=this._getTexture(o.baseColorTex,e,t),c=i?this._getTexture(o.metalTex,e,t):null,d=i?this._getTexture(o.emissiveTex,e,t):null,h=i?this._getTexture(o.occlusionTex,e,t):null,u=i?this._getTexture(o.normalTex,e,t):null;const r=[l,c,d,h,u].map(e=>e?.loadPromise??null);n=Promise.all(r)}i.push(new rt(n,l,c,d,h,u))}}catch(r){throw i.forEach(e=>e.cleanup()),r}return i}async _createRenderableMain(e,t){if(this.destroyed||this.destroying)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderableMain called after destroy");const i=new Array,r=e.desc,s=V(...e.origin),a=this.view.groundView.spatialReference,o=this.view.state.isGlobal;let n=T;if(o){const e=x();B(G,s,e,a),n=v(C(),e)}const l=tt(r.obb),c=o?F(this.view.spatialReference).radius:0,d=new Array;try{let h=-1;for(const i of e.validPrimitiveIndices){h+=1;const s=r.geometry.prims[i],a=t[h];this._dbgFlags.has(2)&&this._dbg(2,JSON.stringify(s));if(null==we[s.ptype]){this._dbg(2,"[Unsupported Feature] Unsupported primitive mode ("+s.ptype+"). Skipping primitive."),a.cleanup();continue}const{positionView:o,normalsData:n,colorView:l,texCoord0Data:c,indicesView:u}=this._getBufferViews(s,e);if(null==o||null==u){a.cleanup();continue}const m=o.count,p=(e,t)=>null==e||e===m||(this._dbg(3,`${t} !== numPos. Skipping primitive.`),!1);p(null!=c?c.length/2:void 0,"numTexcoord")&&p(l?.count,"numColors")&&p(n?.length,"normals")?d.push({componentIndex:h,positionView:o,indicesView:u,texCoord0Data:c,colorView:l,normalsData:n}):a.cleanup()}const u=n!==T,m=u?w(C(),n)??T:T,{vertexProcessingOutputs:p,obbHalfSizeAccumulator:f,elevationRange:g}=await this._workerHandle.processTiles3DVertices(d,s,c,o,n,l,this._imVertexNormals&&!this._isUsedAsGroundLayer);if(this.destroyed)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderableMain aborted due to destroyed instance");const y=r.materials;if(await Promise.all(t.map(e=>e.materialPromise)),this.destroyed)throw new Error("IntegratedMesh3DTilesLayerView3D: createRenderableMain aborted due to destroyed instance");p.length>0&&l.setHalfSize(f);for(const o of p){const{componentIndex:n,positionView:c,indicesView:d,layout:h,textureCoordinateType:p,interleavedVertexData:f,indices:g}=o,b=e.validPrimitiveIndices[n],_=r.geometry.prims[b],v=t[n],w=l.clone(),C=Ve(h),T=new Uint32Array([0,d.typedBuffer.length]),x=new Pe(C,this._imShading?2:0,p,u?2:0),j=new Ie({interleavedVertexData:f,vertexCount:f.byteLength/C[0].stride,indexData:g},{positions:c.typedBuffer,indices:d.typedBuffer},T,x),E=this.view.renderSpatialReference,M=S(),R=[1,1,1];N(s,E,R,a)||this._dbg(3,"Unsupported coordinate system for IM overlay"),q(s,E,M,a);const O=this._createComponentMaterialInitParameters(y,_.materialId,v);O.baseColorTexture||this._dbg(3,"No colour texture 1");const V=this._collection.createObject({toMapSpace:H(M[0],M[1],R[0],R[1]),transform:new He(s,m),obb:w,geometry:j,elevationAlignable:!1},O);i.push(V)}const{fullExtent:b}=this.layer;return b?.hasZ&&b.zmax&&b.zmin&&(g.minElevation=Math.max(g.minElevation,b.zmin),g.maxElevation=Math.min(g.maxElevation,b.zmax)),{tileObb:l,componentObjects:i,elevationRange:g}}catch(h){throw i.forEach(e=>this._collection.destroyObject(e)),h}}_createComponentMaterialInitParameters(e,t,i){const r=null!=e?.materials&&null!=t&&t!==oe?e.materials[t]:null;let s=1;const a=r?.baseColorTex?.imageId;if(null!=a&&e&&Array.isArray(e.images)&&a>=0&&a<e.images.length){const t=e.images[a];t.alpha&&(s=Ce[t.alpha])}const o="Pbr"===(null!=r?r.lightingModel:"Unlit");let n=A,l=$e,c=!1,d=2,h=I(0,0,0);const u=U(ke),m=i.baseColorTexture,p=i.metallicRoughnessTexture,f=i.emissionTexture,g=i.occlusionTexture,y=i.normalTexture;return r&&(n=D(r.baseColorFactor),l=r.alphaCutoff??$e,o&&(O(u,r.metallicFactor,r.roughnessFactor,0),r.emissiveFactor&&(h=r.emissiveFactor)),c=r.isDoubleSided,d=Te[r.faceCulling??"NotSet"]),{isIntegratedMesh:!0,baseColor:n,textureAlphaCutoff:l,mrrFactors:u,baseColorTexture:m,metallicRoughnessTexture:p,normalTexture:y,occlusionTexture:g,emissionTexture:f,hasParametersFromSource:!1,sphereDepthInterpolate:this.layer.hasGoogleUrl,alphaDiscardMode:s,doubleSided:c,cullFace:d,isGround:this.layer.replacesTerrain,groundTransparencyMode:this._groundTransparencyMode,emissiveBaseColor:h,usePBR:o,slicePlaneEnabled:this.slicePlaneEnabled,opacity:this._renderOpacity,polygonOffset:0,ellipsoidMode:1,applySSAO:this._applySSAO}}freeRenderable(e){const t=this._lyrHandleToObjects.get(e);t?(t.isLoaded?(this._loadedObjects.delete(t),this._visibleObjects.delete(t),this._intersectionHandler.removeTile(t),this._usedMemory-=t.usedMemory):this._cacheMemory-=t.usedMemory,this.freeObject(t),this._lyrHandleToObjects.delete(e)):this._dbg(3,`freeRendedrable on non-existent renderable ${e}`)}freeObject(e){const t=de(e.handle);this._memCache.pop(t),e.textures.forEach(e=>this._stage.removeTexture(e)),e.componentObjects.forEach(e=>this._collection.destroyObject(e))}setRenderableVisibility(e,t,i){if(this.destroyed||this.destroying)return;const r=this._frustum,s=new Array;let a=!1,o=!1;for(let n=0;n<i;++n){if(!t[n])continue;const i=e[n],l=this._lyrHandleToObjects.get(i);if(l){if(l.isLoaded){this._dbg(3,`Already loaded object marked loaded again ${l.stableNodeId}`);continue}a=!0,l.isLoaded=!0,this._loadedObjects.add(l),this._intersectionHandler.addTile(l),this._usedMemory+=l.usedMemory,this._cacheMemory-=l.usedMemory;const e=l.obb?.intersectsFrustum(r)??!0;l.isVisible=e,e&&(this._visibleObjects.add(l),o||=this._isVisibileElevationRangeModifiedByChangedTileVisbility(e,l.elevationRange)),s.push(l.obb),l.componentObjects.forEach(t=>{this._collection.setObjectVisibility(t,e)}),this._memCache.pop(de(i))}else this._dbg(3,`Tried to mark Non existent object ${i} as loaded`)}for(let n=0;n<i;++n){const i=e[n];if(t[n])continue;const r=this._lyrHandleToObjects.get(i);if(r){if(!r.isLoaded){this._dbg(3,`Tried to unload not-loaded object ${r.stableNodeId}`);continue}const e=r.isVisible;this._visibleObjects.delete(r),r.isVisible=!1,r.isLoaded=!1,this._loadedObjects.delete(r),this._intersectionHandler.removeTile(r),e&&(this._visibleGeometryChanged(),o||=this._isVisibileElevationRangeModifiedByChangedTileVisbility(!1,r.elevationRange)),this._usedMemory-=r.usedMemory,this._cacheMemory+=r.usedMemory,s.push(r.obb),r.componentObjects.forEach(e=>{this._collection.setObjectVisibility(e,!1)}),this._memCache.put(de(i),r)}else this._dbg(3,`Tried to mark Non existent object ${i} as not loaded`)}a&&this._visibleGeometryChanged(),s.length>0&&this._elevationProvider.notifyObjectsChanged(s),o&&this._setVisibleElevationRangeDirty()}setLodPixelThreshold(e){this._wasm?.setLodPixelThreshold(this,e)}_isVisibileElevationRangeModifiedByChangedTileVisbility(e,t){const{visibleElevationRange:i}=this,{minElevation:r,maxElevation:s}=t;return e?r<i.minElevation||s>i.maxElevation:r===i.minElevation||s===i.maxElevation}_getTexture(e,t,i){const r=e&&t.desc.materials?.images?.[e.imageId];if(!r||null==r.data||r.data===oe)return null;const s=t.assets[r.data];if(!s||s.byteCount<1||"U8"!==s.dataType)return null;const a=i.get(r)??this._createTexture(e,r,s,i);return a?new De(this._stage.renderView.textures,a.id):null}_createTexture(e,t,i,r){const s=this._stage.renderView.renderingContext.parameters.maxMaxAnisotropy,a=!!t.mipCount||s>1,o=xe[e.wrapMode??"None"];let n=t.alpha?6408:6407;const l=new Uint8Array(i.data.buffer,0,i.byteCount);let c=null,d=null,h=null;switch(t.format){case"Raw":"R8"===t.pixelFormat?(c=l,n=6403,d=""):"Rg8"===t.pixelFormat||"Ga8"===t.pixelFormat?(c=l,n=33319,d=""):"Rgb8"===t.pixelFormat?(c=l,n=6407,d=""):"Rgba8"===t.pixelFormat&&(c=l,n=6408,d="");break;case"Dxt1":c=l,n=6407,d="image/vnd-ms.dds";break;case"Dxt5":c=l,n=6408,d="image/vnd-ms.dds";break;case"Basis":c=l,n=6407,d="image/ktx2";break;case"Etc1":c=l,n=6407,d="image/ktx";break;case"Png":d="image/png",h=document.createElement("img");break;case"Jpeg":d="image/jpeg",h=document.createElement("img");break;case"Etc2":d="image/ktx",h=document.createElement("img");break;case"Astc":this._dbg(3,"Astc texture not supported");break;case"Pvrtc":this._dbg(3,"Pvrtc texture not supported")}if(h&&d){const e=new Blob([l],{type:d});h.src=URL.createObjectURL(e),c=h}if(c&&null!=d){const e=has("enable-feature:esri-compress-IM-textures")?{compressionTracker:this._compressionTracker}:void 0,i=Ye(n,d,t.format),l=new Ae(c,{mipmap:a,maxAnisotropy:s,encoding:d,wrap:o,pixelFormat:n,internalFormat:i??void 0,immutable:null!=i,compressionOptions:e,noUnpackFlip:!0,width:t.mip0Width,height:t.mip0Height});return this._stage.addTexture(l),r.set(t,l),l}return null}_getBufferViews(e,t){let i,r,s,a,o;for(let c=0;c<e.atrbs.length;c++){const o=e.atrbs[c],n=t.assets[o.assetId];if(!n)continue;const d=n.data.buffer,h=void 0,p=0,f=n.byteCount;try{switch(o.sem){case"Position":3===n.ncomp&&"F32"===n.dataType&&m(n.data)?i=new re(d,p,h,f):this._dbg(3,"[Unsupported Feature] Unsupported view for Position ("+n+")");break;case"Normal":if(3===n.ncomp&&"F32"===n.dataType&&m(n.data)){const e=new re(d,p,h,f);a=new Uint32Array(e.count),Le(e.typedBuffer,new Int16Array(a.buffer,a.byteOffset,2*a.length))}else this._dbg(3,"[Unsupported Feature] Unsupported view for Normal ("+n+")");break;case"TexCoord":2===n.ncomp&&"F32"===n.dataType&&m(n.data)?void 0===s&&(s=new ie(d,p,h,f).typedBuffer):this._dbg(3,"[Unsupported Feature] Unsupported view for Texcoord ("+n+")");break;case"Color":"U8"===n.dataType&&u(n.data)&&(4===n.ncomp?r=new ee(d,p,h,f):3===n.ncomp&&(r=new te(d,p,h,f))),null==r&&this._dbg(3,"[Unsupported Feature] Unsupported view for Color ("+n+")");break;case"FeatureIndex":break;default:this._dbg(2,"[Unsupported Feature] Unsupported semantic ("+o.sem+"). Skipping vertex attribute.")}}catch(l){this._dbg(2,"Error Creating buffer ("+l+"). Skipping vertex attribute.")}}let n=!1;if(null!=e.index&&e.index!==oe){const i=t.assets[e.index];if(i){const e=void 0,t=0,r=i.byteCount;switch(i.dataType){case"U16":1===i.ncomp&&f(i.data)&&(o=new ae(i.data.buffer,t,e,r));break;case"U32":1===i.ncomp&&p(i.data)&&(o=new se(i.data.buffer,t,e,r))}n=!o}else n=!0}if(!n&&null==o&&null!=i){const e=i.count;o=o=e<65535?new ae(new Uint16Array(e).buffer):new se(new Uint32Array(e).buffer);for(let t=0;t<e;t++)o.set(t,t)}return{positionView:i,colorView:r,texCoord0Data:s,indicesView:o,normalsData:a}}_loadModifications(){if(this.removeHandles("modifications"),null==this.layer.modifications)return void(this._modifications=[]);const e=this.layer.modifications;this.addHandles(this._updatingHandles.addOnCollectionChange(()=>e,()=>{this._modifications=e.filter(e=>!(this.layer.isUsedAsGroundLayer&&"replace"!==e.type)).toArray(),this._modifications.length<e.length&&t.getLogger(this).info("Ground layers only support replace modifications. Other modification types have been ignored.")},n),"modifications")}_deletePerObjectData(e){this._wasm?.onRenderableEvicted(this,e.handle,e.usedMemory),this.freeRenderable(e.handle)}_dbg(e,i){this._dbgFlags.has(e)&&(3===e?t.getLogger(this).error(i):t.getLogger(this).warn(i))}};e([b()],Je.prototype,"freeze",void 0),e([b()],Je.prototype,"fullOpacity",null),e([b()],Je.prototype,"opaque",null),e([b()],Je.prototype,"invisible",null),e([b({readOnly:!0})],Je.prototype,"ready",null),e([b({type:[ne]})],Je.prototype,"_modifications",void 0),e([b()],Je.prototype,"_visibleGeometryChangedSchedulerHandle",void 0),e([b()],Je.prototype,"layer",void 0),e([b({readOnly:!0})],Je.prototype,"visibleAtCurrentScale",null),e([b({readOnly:!0})],Je.prototype,"_collection",null),e([b()],Je.prototype,"elevationOffset",null),e([b({readOnly:!0})],Je.prototype,"visibleElevationRange",null),e([b()],Je.prototype,"fullExtentInLocalViewSpatialReference",void 0),Je=e([_("esri.views.3d.layers.IntegratedMesh3DTilesLayerView3D")],Je);const Ke=Je;class Qe{constructor(e,t,i,r,s,a,o,n,l,c){this.handle=e,this.componentObjects=t,this.textures=i,this.cpuMemoryUsage=r,this.vboMemoryUsage=s,this.textureMemoryUsage=a,this.obb=o,this.stableNodeId=n,this.nodeDepth=l,this.elevationRange=c,this.bvhIntersectionGeneration=0,this.isLoaded=!1,this.isVisible=!1;const d=S();o?.getCenter(d),this._obbCenterX=d[0],this._obbCenterY=d[1],this._obbCenterZ=d[2];const h=o?.radius??-1;this._obbRadius=h,this._obbRadiusSquared=h*h,this._obbShortestHalfsize=o?Math.min(o.halfSizeX,o.halfSizeY,o.halfSizeZ):0,this._mbsCenter=o?o.getCenter(S()):P}get usedMemory(){return this.textureMemoryUsage+this.vboMemoryUsage+this.cpuMemoryUsage}get mbsRadius(){return this._obbRadius}get mbsCenter(){return this._mbsCenter}boundingVolumeIntersectsRay(e,t){if(!this.obb)return!0;const{_obbCenterX:i,_obbCenterY:r,_obbCenterZ:s}=this,a=i-e[0],o=r-e[1],n=s-e[2],l=a*t[0]+o*t[1]+n*t[2];return a*a+o*o+n*n-l*l<=this._obbRadiusSquared&&this.obb.intersectRay(e,t)}boundingVolumeIntersectsSphere(e){const t=this._obbRadius;if(t<0)return!0;const i=e.center,r=e.radius,s=t+r,a=this._obbCenterX-i[0];if(a>s)return!1;const o=this._obbCenterY-i[1];if(o>s)return!1;const n=this._obbCenterZ-i[2];if(n>s)return!1;const l=a*a+o*o+n*n;if(l>s*s)return!1;if(l<=(this._obbShortestHalfsize+r)**2)return!0;const c=r-t;return c>0&&l<=c*c||(this.obb?.intersectSphere(e)??!0)}}function et(e){return Math.round(e/1048.576)/1e3}function tt(e){return new Se(e.center,e.halfSize,j(...e.quaternion))}const it=new Array;class rt{constructor(e,t,i,r,s,a){this.materialPromise=e,this.baseColorTexture=t,this.metallicRoughnessTexture=i,this.emissionTexture=r,this.occlusionTexture=s,this.normalTexture=a}cleanup(){this.baseColorTexture?.dispose(),this.metallicRoughnessTexture?.dispose(),this.emissionTexture?.dispose(),this.occlusionTexture?.dispose(),this.normalTexture?.dispose()}}export{Ke as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import has from"../../../core/has.js";import{Milliseconds as e}from"../../../core/time.js";function a(e){return l[e]}function i(){return has("esri-iPhone")?"low":"medium"}const o={reset(){const e=m();for(const a of Object.keys(e))l[a]=e[a]}},t={IPhone12Pro:120,GalaxyS20:200,FullHD:240,SurfacePro7:300,FullHDRetina:430},l=m();function m(){const a=!!has("esri-mobile"),i=!!has("ios"),o=e(400);return{low:{graphics3D:{maxTotalNumberOfFeatures:5e4,maxNumberOfDrawCalls:8e3,maxTotalNumberOfVertices:255e4,polygonLodFactor:.5,polylineLodFactor:1,snapshotAvailable:!1,skipHighSymbolLods:!0},heatmap:{pixelRatio:.125},sceneService:{objectLoDFactor:.2,pointLoDFactor:1,meshLoDFactor:.6,pointCloudLoDFactor:.5},gaussianSplat:{minimumPixelRadius:2,minimumOpacity:0,maximumNumberOfGaussians:
|
|
2
|
+
import has from"../../../core/has.js";import{Milliseconds as e}from"../../../core/time.js";function a(e){return l[e]}function i(){return has("esri-iPhone")?"low":"medium"}const o={reset(){const e=m();for(const a of Object.keys(e))l[a]=e[a]}},t={IPhone12Pro:120,GalaxyS20:200,FullHD:240,SurfacePro7:300,FullHDRetina:430},l=m();function m(){const a=!!has("esri-mobile"),i=!!has("ios"),o=e(400);return{low:{graphics3D:{maxTotalNumberOfFeatures:5e4,maxNumberOfDrawCalls:8e3,maxTotalNumberOfVertices:255e4,polygonLodFactor:.5,polylineLodFactor:1,snapshotAvailable:!1,skipHighSymbolLods:!0},heatmap:{pixelRatio:.125},sceneService:{objectLoDFactor:.2,pointLoDFactor:1,meshLoDFactor:.6,pointCloudLoDFactor:.5},gaussianSplat:{minimumPixelRadius:2,minimumOpacity:0,maximumNumberOfGaussians:2e6},flow:{maxTotalNumberOfStreamlines:5e3,maxTracingResolution:1024,transitionEnabled:!1},tiledSurface:{lodBias:-1,angledSplitBias:.5,vtlContentZoom:.75,elevationLevelDelta:3,reduceTileLevelDifferences:!0},fadeDuration:e(0),physicallyBasedRenderingEnabled:!1,maxTexturePixels:a?1048576:4194304,memoryLimit:200+t.IPhone12Pro,additionalCacheMemory:0,frameRate:0,maximumPixelRatio:1},medium:{graphics3D:{maxTotalNumberOfFeatures:15e4,maxNumberOfDrawCalls:17e3,maxTotalNumberOfVertices:625e4,polygonLodFactor:a?.8:1,polylineLodFactor:a?1.2:1.5,snapshotAvailable:!i,skipHighSymbolLods:!1},heatmap:{pixelRatio:.25},sceneService:{objectLoDFactor:1,pointLoDFactor:1,meshLoDFactor:1,pointCloudLoDFactor:1},gaussianSplat:{minimumPixelRadius:1,minimumOpacity:1,maximumNumberOfGaussians:4e6},flow:{maxTotalNumberOfStreamlines:2e4,maxTracingResolution:2048,transitionEnabled:!0},tiledSurface:{lodBias:0,angledSplitBias:1,vtlContentZoom:1.5,elevationLevelDelta:3,reduceTileLevelDifferences:!0},fadeDuration:o,physicallyBasedRenderingEnabled:!0,maxTexturePixels:a?4194304:4096**2,memoryLimit:a?600+t.GalaxyS20:750+t.FullHD,additionalCacheMemory:a?-100:150,frameRate:0,maximumPixelRatio:1},high:{graphics3D:{maxTotalNumberOfFeatures:3e5,maxNumberOfDrawCalls:17e3,maxTotalNumberOfVertices:125e5,polygonLodFactor:a?1.2:2,polylineLodFactor:a?1.2:2,snapshotAvailable:!i,skipHighSymbolLods:!1},heatmap:{pixelRatio:.5},sceneService:{objectLoDFactor:1,pointLoDFactor:1,meshLoDFactor:1,pointCloudLoDFactor:1},gaussianSplat:{minimumPixelRadius:.5,minimumOpacity:2,maximumNumberOfGaussians:8e6},flow:{maxTotalNumberOfStreamlines:2e4,maxTracingResolution:2048,transitionEnabled:!0},tiledSurface:{lodBias:0,angledSplitBias:1,vtlContentZoom:1.5,elevationLevelDelta:2,reduceTileLevelDifferences:!0},fadeDuration:o,physicallyBasedRenderingEnabled:!0,maxTexturePixels:a?4096**2:1/0,memoryLimit:a?900+t.SurfacePro7:1500+t.FullHDRetina,additionalCacheMemory:a?-150:0,frameRate:0,maximumPixelRatio:a?1:1/0}}}export{o as QualityProfileTest,i as getDefaultQualityProfileName,a as getQualityProfileSettings};
|
|
@@ -95,8 +95,9 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
95
95
|
|
|
96
96
|
float previousEstimatedDepthDifference = 0.0;
|
|
97
97
|
|
|
98
|
+
vec2 offsetProjectedPosition = projectedPosition + rayStepOffset * projectedStep;
|
|
98
99
|
projectedPosition = clamp(
|
|
99
|
-
|
|
100
|
+
offsetProjectedPosition,
|
|
100
101
|
vec2(0.0),
|
|
101
102
|
vec2(0.999)
|
|
102
103
|
);
|
|
@@ -118,12 +119,12 @@ import{ReadDepth as e}from"../output/ReadDepth.glsl.js";import{Float2BindUniform
|
|
|
118
119
|
return firstSegmentHit;
|
|
119
120
|
}
|
|
120
121
|
|
|
121
|
-
// Preserve the original march result, but remember a
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
float
|
|
122
|
+
// Preserve the original march result, but remember a first sample within the surface thickness.
|
|
123
|
+
// A clamped sample no longer matches the UV of the reconstructed ray depth.
|
|
124
|
+
if (stepIndex == 0 && rayStepOffset > 0.0 && all(equal(projectedPosition, offsetProjectedPosition))) {
|
|
125
|
+
float firstSegmentDepthDifference = -homogeneousPosition.z / inverseW - sampledDepth;
|
|
125
126
|
vec2 firstSegmentPixelOffset = (projectedPosition - projectedCoordStart.xy) * vec2(textureSize(depthMap, 0));
|
|
126
|
-
if (firstSegmentDepthDifference < 0.025 / abs(inverseW)
|
|
127
|
+
if (firstSegmentDepthDifference < 0.025 / abs(inverseW) &&
|
|
127
128
|
firstSegmentDepthDifference > 0.0 &&
|
|
128
129
|
sampledDepth > nearFar[0] &&
|
|
129
130
|
sampledDepth < nearFar[1] &&
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{
|
|
2
|
+
import{add as i}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{getContinuousIndexArray as t}from"../../../../geometry/support/Indices.js";import{NullSphere as e,Sphere as n}from"../../../../geometry/support/sphere.js";import{BoundingInfo as s}from"./BoundingInfo.js";import{BufferGeometryBaseInstance as h}from"./BufferGeometryBaseInstance.js";import{Object3DHighlightStateID as o}from"./Object3DStateID.js";import{assert as r}from"./Util.js";class u extends h{constructor(i,t,e,n={},s=null){super(t),this.material=i,this.localOrigin=e,this.baseGeometry=s,this.layerViewUid=null,this.graphicUid=null,this._readPrimitivePosition=null,this._boundingInfo=null,this._boundingSphere=null,this._highlights=null,this._highlightOptionsCounts=null,this.occludees=void 0,this.visible=!0;const h=i?.useIndexing??!1,o=null!=t.index,u=null!=s;r(!u||!h&&null==s.buffers.index&&!o,"Instancing for index materials is not supported"),r(!u||1===t.vertex.count,"Instanced BufferGeometry requires exactly one instance"),r(h===o,"Material index requirement and BufferGeometry.buffers.index must match"),this.castShadow=n.castShadow??!1}get indexCount(){return this.baseGeometry?.buffers.indexCount??this._buffers.indexCount??0}get faceCount(){return this.indexCount/3}get readPrimitivePosition(){return this._readPrimitivePosition??=this.material.createPrimitivePositionReader(this.buffers,this.baseGeometry?.buffers),this._readPrimitivePosition}get boundingInfo(){return this._boundingInfo??=this._calculateBoundingInfo(),this._boundingInfo}get boundingSphere(){const t=this.boundingInfo?.sphere;if(null==t)return e;if(null==this._boundingSphere){const e=new n;e.copyFrom(t),i(e.center,e.center,this.localOrigin.vec3),this._boundingSphere=e}return this._boundingSphere}_calculateBoundingInfo(){const i=this.indexCount;if(0===i)return null;const e=this.material.primitiveVertexCount;r(i%e===0,"Indexing error: "+i+" not divisible by "+e);const n=t(i/e);return new s(n,e,this.readPrimitivePosition)}invalidateBoundingInfo(){this._boundingInfo=null,this._boundingSphere=null}computeAttachmentOrigin(t){return!!this.material.computeAttachmentOrigin(t,this.readPrimitivePosition,this.indexCount)&&(i(t,t,this.localOrigin.vec3),!0)}get highlights(){return this._highlights||g}get hasHighlights(){return(this._highlightOptionsCounts?.size??0)>0}forEachHighlightOption(i){this._highlightOptionsCounts?.forEach((t,e)=>i(e))}allocateIdAndHighlight(i){const t=new o(i);return this.addHighlight(t)}addHighlight(i){this._ensureHighlights().add(i);const{highlightName:t}=i,e=(this._highlightOptionsCounts?.get(t)??0)+1;return this._ensureHighlightOptionsCounts().set(t,e),i}_ensureHighlights(){let i=this._highlights;return i||(i=new Set,this._highlights=i),i}_ensureHighlightOptionsCounts(){let i=this._highlightOptionsCounts;return i||(i=new Map,this._highlightOptionsCounts=i),i}removeHighlight(i){if(this._highlights?.delete(i)){const{highlightName:t}=i,e=this._highlightOptionsCounts?.get(t)??0;e<=1?this._highlightOptionsCounts?.delete(t):this._ensureHighlightOptionsCounts().set(t,e-1)}}}const g=new Set;export{u as BufferGeometry};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{generateUID as e}from"../../../../core/uid.js";import{identity as t}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as i,IDENTITY as r}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{
|
|
2
|
+
import{generateUID as e}from"../../../../core/uid.js";import{identity as t}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as i,IDENTITY as r}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{empty as o,copy as s,offset as n}from"../../../../geometry/support/aaBoundingBox.js";import{BoundingVolume as l}from"./BoundingVolume.js";import{Object3DOccludeeStateID as h,Object3DHighlightStateID as m}from"./Object3DStateID.js";import{assert as g}from"./Util.js";import{addObject3DStateID as a,removeObject3DStateID as u}from"../materials/renderers/utils.js";class d{constructor(t){this.id=e(),this.type=1,this.lastValidElevationBB=void 0,this._layer=null,this._boundingVolume=null,this._geometries=[t.geometry],t.isElevationSource&&(this.lastValidElevationBB=o())}dispose(){this._geometries.length=0}get layerViewUid(){return this.geometry.layerViewUid}get graphicUid(){return this.geometry.graphicUid}get geometries(){return this._geometries}get geometry(){return this._geometries[0]}get layer(){return this._layer}set layer(e){g(null==this._layer||null==e,"BufferObject3D can only be added to a single Layer"),this._layer=e}get visible(){return this.geometry.visible}set visible(e){this.visible!==e&&(this.geometry.visible=e,this._emit("visibilityChanged",this))}_emit(e,t){this.layer?.events.emit(e,t)}maskOccludee(){const e=new h;return this.geometry.occludees=a(this.geometry.occludees,e),this._emit("occlusionChanged",this),e}removeOcclude(e){this.geometry.occludees=u(this.geometry.occludees,e),this._emit("occlusionChanged",this)}highlight(e){const t=new m(e);return this.geometry.addHighlight(t),this._emit("highlightChanged",this),t}removeHighlight(e){this.geometry.removeHighlight(e),this._emit("highlightChanged",this)}removeStateID(e){0===e.channel?this.removeHighlight(e):this.removeOcclude(e)}getCombinedStaticTransformation(e,i){return t(i)}getCombinedShaderTransformation(e,r=i()){return t(r)}get boundingVolumeWorldSpace(){return this._boundingVolume||(this._boundingVolume=new l,this._validateBoundingVolume(this._boundingVolume)),this._boundingVolume}get boundingVolumeObjectSpace(){return this.boundingVolumeWorldSpace}_validateBoundingVolume(e){const{boundingInfo:t,localOrigin:i,boundingSphere:r}=this.geometry;if(null==t)return;const{box:o,sphere:l}=e,[h,m,g]=i.vec3;s(o,t.box),n(o,h,m,g),l.copyFrom(r)}get transformation(){return r}get shaderTransformation(){return null}get effectiveTransformation(){return r}}export{d as BufferObject3D};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{add as
|
|
2
|
+
import{fromTranslation as t}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as e}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{add as s,transformMat4 as i,copy as r}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as n}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{intersectsSphere as o}from"../../../../geometry/support/frustumPlanes.js";import{create as a,fromPoints as l,copy as c}from"../../../../geometry/support/ray.js";import h from"../../webgl/RenderCamera.js";import{HUDTarget as f,HUDIntersectorResult as m}from"./HUDIntersectorResult.js";import{IntersectorOptions as u}from"./IntersectorInterfaces.js";import{IntersectorResultRay as y,compareOrderedIntersectionHits as d}from"./IntersectorResult.js";import{ObjectTarget as g}from"./ObjectTarget.js";import{PolygonIntersectionResults as p}from"./PolygonIntersectionResults.js";import{IntersectorTransform as _,getVerticalOffsetObject3D as v}from"./verticalOffsetUtils.js";const b=1e-5,j=e();class O{constructor(t){this.options=new u,this._results=new P,this.polygonResults=new p,this.transform=new _,this.camera=new h,this.screenPolygonPrimitiveProcessor=w,this.tolerance=b,this.verticalOffset=null,this._ray=a(),this._rayEnd=n(),this._rayBeginTransformed=n(),this._rayEndTransformed=n(),this.viewingMode=t??1}get results(){return this._results}get ray(){return this._ray}get rayBegin(){return this._ray.origin}get rayEnd(){return this._rayEnd}reset(t,e,s){this.resetWithRay(l(t,e,this._ray),s)}resetWithRay(t,e){this.camera=e,t!==this._ray&&c(t,this._ray),0!==this.options.verticalOffset?2===this.viewingMode?this._ray.origin[2]-=this.options.verticalOffset:this.verticalOffset=this.options.verticalOffset:this.verticalOffset=null,s(this._rayEnd,this._ray.origin,this._ray.direction),this._results.init(this._ray),this.polygonResults.init()}intersect(t=null,e,s,i,r){this.point=e,this.filterPredicate=i,this.tolerance=s??b;const n=v(this.verticalOffset);if(t&&t.length>0){const e=r?t=>{r(t)&&this.intersectObject(t)}:t=>{this.intersectObject(t)};for(const s of t){const t=s.getSpatialQueryAccelerator?.();null!=t?(null!=n?t.forEachAlongRayWithVerticalOffset(this._ray.origin,this._ray.direction,e,n):t.forEachAlongRay(this._ray.origin,this._ray.direction,e),this.options.selectionMode&&this.options.hud&&t.forEachDegenerateObject(e)):s.objects.forEach(t=>e(t))}}this.sortResults()}*intersectScreenPolygon(t=null,e){if(this.verticalOffset=null,t?.length)for(const s of t){const t=s.getSpatialQueryAccelerator?.();if(null!=t)for(const s of t.intersectingFrustumValues(e.broadPhaseFrustum,t=>t.visible))yield*this._intersectScreenPolygonObject(s,e);else for(const i of s.objects.values())i.visible&&o(e.broadPhaseFrustum,i.boundingVolumeWorldSpace.sphere)&&(yield*this._intersectScreenPolygonObject(i,e))}}*intersectHUDScreenPolygon(t=null,e){if(this.verticalOffset=null,this.options.selectionMode&&this.options.hud&&t?.length)for(const s of t){const t=s.getSpatialQueryAccelerator?.(),i=t?.degenerateObjectValues()??s.objects.values();for(const s of i)yield*this._intersectScreenPolygonObject(s,e)}}*_intersectScreenPolygonObject(t,e){const s=t.geometries;if(!t.visible||!s)return;const i=t.effectiveTransformation;for(const r of s){if(!r.visible)continue;const{material:s,id:n}=r;if(!s.visible||!s.intersectScreenPolygon)continue;this._setGeometryTransform(i,r);const o=s.intersectScreenPolygon(r,this.transform.transform,this,e);o?.valid&&this._handleObjectScreenPolygonIntersection(o.type,new g(t,n,o.primitiveIndex),o.distance,o.point),yield}}intersectObject(t){const e=t.geometries;if(!e)return;const s=t.effectiveTransformation,r=v(this.verticalOffset);for(const n of e){if(!n.visible)continue;const{material:e,id:o}=n;if(!e.visible)continue;this._setGeometryTransform(s,n),i(this._rayBeginTransformed,this.rayBegin,this.transform.inverse),i(this._rayEndTransformed,this.rayEnd,this.transform.inverse);const a=this.transform.transform;null!=r&&(r.objectTransform=this.transform),e.intersectRay(n,this.transform.transform,this,this._rayBeginTransformed,this._rayEndTransformed,(e,s,i,r,n)=>this.handleObjectIntersection({object:t,geometryId:o,primitiveIndex:r},e,s,i,a,n))}}_setGeometryTransform(e,s){const i=1===s.type?t(j,s.localOrigin.vec3):s.transformation;this.transform.setAndInvalidateLazyTransforms(e,i)}handleObjectIntersection(t,e,s,i,r,n){if(e<0||null!=this.filterPredicate&&!this.filterPredicate(this._ray.origin,this._rayEnd,s))return;const o=n?this._results.hud:this._results;t=n?new f(t,n):t;const a=n?r=>r.set(1,t,e,s,i):n=>n.set(4,t,e,s,i,r);if((null==o.min.renderDistance||s<o.min.renderDistance)&&a(o.min),0!==this.options.store&&(null==o.max.renderDistance||s>o.max.renderDistance)&&a(o.max),2===this.options.store)if(n){const t=new m(this._ray);a(t),this._results.hud.all.push(t)}else{const t=new y(this._ray);a(t),this._results.all.push(t)}}_handleObjectScreenPolygonIntersection(t,e,s,i){s<0||(null==this.filterPredicate||null!=i&&this.filterPredicate(this.camera.eye,i,1))&&this.polygonResults.add(t,1===t&&i?new f(e,i):e,s)}sortResults(t=this._results.all){t.sort(d)}}class P{constructor(){this.min=new y(a()),this.max=new y(a()),this.hud={min:new m(a()),max:new m(a()),all:new Array},this.ground=new y(a()),this.all=[]}init(t){this.min.init(t),this.max.init(t),this.ground.init(t),this.all.length=0,this.hud.min.init(t),this.hud.max.init(t),this.hud.all.length=0}}const w={*processTriangle(t){yield t},*processLineSegment(t,e,s){r(t[0],e),r(t[1],s),yield t},validatePoint:()=>!0};export{O as Intersector,w as defaultScreenPolygonPrimitiveProcessor,b as defaultTolerance};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{isCachedFontFace as o,loadFont as
|
|
2
|
+
import{isCachedFontFace as o,loadFont as e}from"../../../../core/fontUtils.js";import t from"../../../../core/Logger.js";import{pt2px as r}from"../../../../core/screenUtils.js";import{ZEROS as i}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";class n{constructor(o){this.definition=o,this.key=JSON.stringify(o),this.haloSize=Math.round(o.halo.size),this.textStyle=l(o.color),this.haloStyle=s(o.halo.color),this.backgroundStyle=a(o.background.color),this.borderSize=o.background.border.size,this.borderStyle=a(o.background.border.color)}fontString(o){const e=this.definition.font,t="sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji";return`${e.style} ${e.weight} ${o}px ${e.family}, ${t}`}setFontProperties(o,e){o.font=this.fontString(e),o.textAlign="left",o.textBaseline="alphabetic"}static async fromSymbol(s,l){const a=f(s?.material?.color),m=null!=s.size?r(s.size):12,u=s.lineHeight,g=f(s.background?.color),d=s.border,h=f(d?.color),b=null!=d&&d.size>0&&h!==i?{size:r(d.size),color:h}:{size:0,color:i},y=null!=s.background||b.size>0,S={family:s.font?.family??"sans-serif",decoration:s.font?.decoration??"none",weight:s.font?.weight??"normal",style:s.font?.style??"normal"},p=s.halo,z=null!=p?.color&&p.size>0?{size:r(p.size),color:p.color.toUnitRGBA()}:{size:0,color:i},w=new n({color:a,size:m,background:{color:g,border:b,padding:y?[.65*m,.5*m]:[0,0],borderRadius:y?m*(6/16):0},lineSpacingFactor:u,font:S,halo:z,pixelRatio:l});if(s.font){let r=!1;const i=w.fontString(m);try{r=(await document.fonts.load(i)).some(e=>!o(e))}catch(x){t.getLogger("esri.views.3d.webgl-engine.lib.TextRenderParameters").warnOnce(`Failed to preload font '${i}'. Some text symbology may be rendered using the default browser font.`)}if(!r&&!c.has(s.font.family))try{await e(s.font)}catch(x){}}return w}}function s(o){return`rgb(${o.slice(0,3).map(o=>Math.floor(255*o)).toString()})`}function l(o){return`rgba(${o.slice(0,3).map(o=>Math.floor(255*o)).toString()},${o[3]})`}function a(o){return 0!==o[3]?l(o):null}const c=new Set(["Arial","Times New Roman","Courier New","serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]);function f(o){return null!=o&&0!==o.a?o.toUnitRGBA():i}export{n as TextRenderParameters};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{clamp as t}from"../../../../core/mathUtils.js";import{debugFlags as e}from"../../support/debugFlags.js";import{getFontMetrics as i}from"./FontMetrics.js";import{getTextHelperCanvas as s}from"./TextHelperCanvas.js";const n=1;class r{constructor(t,e,i,s){this.text=t,this._alignment=e,this._parameters=i,this._maxSize=s,this._textWidths=[],this._lineWidths=[],this._renderPixelRatio=null,this._metricsCached=null,this.key=`${t}--${this._parameters.key}-${this._alignment}`,this._lines=t.replaceAll(" "," ").split(/\r?\n/)}get displayWidth(){return Math.ceil(this._displayWidth+2*this._horizontalPadding)}get displayHeight(){let t=this._metrics.firstLineAscent;for(let e=0;e<this._lines.length-1;e++)t+=this._lineSpacing;return t+=this._metrics.lastLineDescent,Math.ceil(t+2*this._haloSize+2*this._verticalPadding)}get renderedWidth(){return this._toRoundedRenderUnit(this.displayWidth)}get renderedHeight(){return this._toRoundedRenderUnit(this.displayHeight)}get firstRenderedBaselinePosition(){return this._toRenderUnit(this._firstLineYOffset+this._metrics.firstLineAscent)}get _firstLineYOffset(){return this._verticalPadding+this._haloSize}get _metrics(){if(null==this._metricsCached){const t=s(o,d,d).getContext("2d"),e=this._parameters.definition.pixelRatio,n=this._fontSize*e;this._parameters.setFontProperties(t,n);let r=2*this._haloSize;const h=this._parameters.definition.font;"italic"!==h.style&&"oblique"!==h.style&&"bold"!==h.weight&&"bolder"!==h.weight||(r+=.3*t.measureText("A").width),this._textWidths.length=0,this._lineWidths.length=0;let a=0,l=0,c=0,g=0,m=0;this._lines.forEach((i,s)=>{const n=t.measureText(i),h=n.width/e,o=h+r;this._textWidths.push(h),this._lineWidths.push(o),a=Math.max(a,o),g=Math.max(g,n.actualBoundingBoxAscent/e),m=Math.max(m,n.actualBoundingBoxDescent/e),0===s&&(l=n.actualBoundingBoxAscent/e),s===this._lines.length-1&&(c=n.actualBoundingBoxDescent/e)});const
|
|
2
|
+
import{clamp as t}from"../../../../core/mathUtils.js";import{debugFlags as e}from"../../support/debugFlags.js";import{getFontMetrics as i}from"./FontMetrics.js";import{getTextHelperCanvas as s}from"./TextHelperCanvas.js";const n=1;class r{constructor(t,e,i,s){this.text=t,this._alignment=e,this._parameters=i,this._maxSize=s,this._textWidths=[],this._lineWidths=[],this._renderPixelRatio=null,this._metricsCached=null,this.key=`${t}--${this._parameters.key}-${this._alignment}`,this._lines=t.replaceAll(" "," ").split(/\r?\n/)}get displayWidth(){return Math.ceil(this._displayWidth+2*this._horizontalPadding)}get displayHeight(){let t=this._metrics.firstLineAscent;for(let e=0;e<this._lines.length-1;e++)t+=this._lineSpacing;return t+=this._metrics.lastLineDescent,Math.ceil(t+2*this._haloSize+2*this._verticalPadding)}get renderedWidth(){return this._toRoundedRenderUnit(this.displayWidth)}get renderedHeight(){return this._toRoundedRenderUnit(this.displayHeight)}get firstRenderedBaselinePosition(){return this._toRenderUnit(this._firstLineYOffset+this._metrics.firstLineAscent)}get _firstLineYOffset(){return this._verticalPadding+this._haloSize}get _metrics(){if(null==this._metricsCached){const t=s(o,d,d).getContext("2d"),e=this._parameters.definition.pixelRatio,n=this._fontSize*e;this._parameters.setFontProperties(t,n);let r=2*this._haloSize;const h=this._parameters.definition.font;"italic"!==h.style&&"oblique"!==h.style&&"bold"!==h.weight&&"bolder"!==h.weight||(r+=.3*t.measureText("A").width),this._textWidths.length=0,this._lineWidths.length=0;let a=0,l=0,c=0,g=0,m=0;this._lines.forEach((i,s)=>{const n=t.measureText(i),h=n.width/e,o=h+r;this._textWidths.push(h),this._lineWidths.push(o),a=Math.max(a,o),g=Math.max(g,n.actualBoundingBoxAscent/e),m=Math.max(m,n.actualBoundingBoxDescent/e),0===s&&(l=n.actualBoundingBoxAscent/e),s===this._lines.length-1&&(c=n.actualBoundingBoxDescent/e)});const u=i(this._parameters),f=Math.max(g,u.maxAscent),p=Math.max(m,u.maxDescent),x=l,S="underline"===this._parameters.definition.font.decoration?p:c,R=a;this._metricsCached=new _(x,S,f,p,R)}return this._metricsCached}get _lineSpacing(){return(this._midLineHeight+this._linePadding)*this._parameters.definition.lineSpacingFactor}get _midLineHeight(){return this._metrics.midLineHeight}get _linePadding(){return this._midLineHeight*a}get _midLineAscent(){return this._metrics.maxLineAscent}get _renderedFontSize(){return this._toRenderUnit(this._fontSize)}get _fontSize(){return this._parameters.definition.size}get _renderedHaloSize(){return this._toRenderUnit(this._haloSize)}get _haloSize(){return this._parameters.haloSize}get _horizontalPadding(){return this._hasBackgroundOrBorder?this._parameters.definition.background.padding[0]+this._borderSize:0}get _verticalPadding(){return Math.max(this._hasBackgroundOrBorder?this._parameters.definition.background.padding[1]:0,n)+this._borderSize}get _hasBackground(){return null!=this._parameters.backgroundStyle}get _hasBackgroundOrBorder(){return this._hasBackground||this._hasBorder}get _hasBorder(){return null!=this._parameters.borderStyle&&this._parameters.borderSize>0}get _borderSize(){return this._hasBorder?this._parameters.borderSize:0}get _rendererBorderSize(){return this._toRenderUnit(this._borderSize)}get renderPixelRatio(){if(null==this._renderPixelRatio){const t=this._parameters.definition.pixelRatio;this._renderPixelRatio=Math.min(t,Math.min(this._maxSize[0]/this.displayWidth,this._maxSize[1]/this.displayHeight))}return this._renderPixelRatio}_getLineXOffset(t){switch(this._alignment){case 0:return this._horizontalPadding;case 1:return(this.displayWidth-this._lineWidths[t])/2;case 2:return this.displayWidth-this._horizontalPadding-this._lineWidths[t]}}render(i,s,n){i.save();const r=s/=this.renderPixelRatio,h=n/=this.renderPixelRatio,o=this._haloSize,a=this._firstLineYOffset+this._metrics.firstLineAscent;s+=o,n+=a;const d=this._haloSize>0;d&&this._renderHalo(i,r,h,o,a),this._parameters.setFontProperties(i,this._renderedFontSize);for(let t=0;t<this._lines.length;++t){const e=this._lines[t],r=this._getLineXOffset(t);d&&(i.globalCompositeOperation="destination-out",i.fillStyle="rgb(0, 0, 0)",this._fillText(i,e,s+r,n),this._renderLineDecoration(i,s+r,n,this._textWidths[t])),i.globalCompositeOperation="source-over",i.fillStyle=this._parameters.textStyle,this._fillText(i,e,s+this._getLineXOffset(t),n),this._renderLineDecoration(i,s+r,n,this._textWidths[t]),n+=this._lineSpacing}if(e.TEXT_SHOW_BASELINE){i.strokeStyle=l,i.setLineDash([2,2]),i.lineWidth=1;let t=h+a;for(let e=0;e<this._lines.length;++e)this._drawLine(i,[r,t],[r+this.displayWidth,t]),t+=this._lineSpacing}if(e.TEXT_SHOW_BORDER&&(i.strokeStyle=l,i.setLineDash([]),i.lineWidth=1,this._drawBox(i,[r,h],[this.displayWidth,this.displayHeight])),this._hasBackgroundOrBorder){const e=this._rendererBorderSize,s=t(this._parameters.definition.background.borderRadius*this.renderPixelRatio,0,Math.floor(Math.min(this.renderedWidth-e,this.renderedHeight-e)/2)),n=Math.max(s-e/2,0);i.globalCompositeOperation="destination-over",this._hasBackground&&(this._roundedRect(i,r,h,n,e),i.fillStyle=this._parameters.backgroundStyle,i.fill()),this._hasBorder&&(this._roundedRect(i,r,h,s,e/2),i.strokeStyle=this._parameters.borderStyle,i.lineWidth=e,i.lineJoin="round",i.stroke())}i.restore()}_renderLineDecoration(t,e,i,s,n=!1){if("none"===this._parameters.definition.font.decoration||0===s)return;const r=1,h=Math.max(this._parameters.definition.size/16,r);switch(this._parameters.definition.font.decoration){case"underline":i+=2*h;break;case"line-through":i-=.33*this._midLineAscent}const o=n?this._haloSize:0;t.strokeStyle=n?this._parameters.haloStyle:this._parameters.textStyle,t.lineWidth=this._toRenderUnit(h+2*o),t.beginPath(),t.moveTo(this._toRenderUnit(e-o),this._toRenderUnit(i)),t.lineTo(this._toRenderUnit(e+s+o),this._toRenderUnit(i)),t.stroke()}_roundedRect(t,e,i,s,n){e=this._toRenderUnit(e)+n,i=this._toRenderUnit(i)+n;const r=this.renderedWidth-2*n,h=this.renderedHeight-2*n;if(!(r<=0||h<=0)){if(t.beginPath(),0===s)return t.moveTo(e,i),t.lineTo(e+r,i),t.lineTo(e+r,i+h),t.lineTo(e,i+h),void t.closePath();t.moveTo(e,i+s),t.arcTo(e,i,e+s,i,s),t.lineTo(e+r-s,i),t.arcTo(e+r,i,e+r,i+s,s),t.lineTo(e+r,i+h-s),t.arcTo(e+r,i+h,e+r-s,i+h,s),t.lineTo(e+s,i+h),t.arcTo(e,i+h,e,i+h-s,s),t.closePath()}}_renderHalo(t,e,i,n,r){const h=this.renderedWidth,a=this.renderedHeight,l=s(o,Math.max(h,d),Math.max(a,d)),_=l.getContext("2d");_.clearRect(0,0,h,a),this._parameters.setFontProperties(_,this._renderedFontSize),_.fillStyle=this._parameters.haloStyle,_.strokeStyle=this._parameters.haloStyle;const c=this._renderedHaloSize<3;_.lineJoin=c?"miter":"round",c?this._renderHaloEmulated(_,n,r):this._renderHaloNative(_,n,r);let g=r;for(let s=0;s<this._lines.length;++s){const t=this._getLineXOffset(s);this._renderLineDecoration(_,n+t,g,this._textWidths[s],!0),g+=this._lineSpacing}t.globalAlpha=this._parameters.definition.halo.color[3],t.drawImage(l,0,0,h,a,this._toRenderUnit(e),this._toRenderUnit(i),h,a),t.globalAlpha=1}_renderHaloEmulated(t,e,i){for(let s=0;s<this._lines.length;++s){const n=this._lines[s],r=this._getLineXOffset(s);for(const[s,o]of h)this._fillText(t,n,e+r+this._haloSize*s,i+this._haloSize*o);i+=this._lineSpacing}}_renderHaloNative(t,e,i){const s=2*this._haloSize;for(let n=0;n<this._lines.length;++n){const r=this._lines[n],h=this._getLineXOffset(n),o=5,a=.1;for(let n=0;n<o;n++){const d=1-(o-1)*a+n*a;t.lineWidth=this._toRenderUnit(d*s),this._strokeText(t,r,e+h,i)}i+=this._lineSpacing}}get _displayWidth(){return this._metrics.displayWidth}_toRenderUnit(t){return t*this.renderPixelRatio}_toRoundedRenderUnit(t){return Math.round(t*this.renderPixelRatio)}_fillText(t,e,i,s){t.fillText(e,this._toRenderUnit(i),this._toRenderUnit(s))}_strokeText(t,e,i,s){t.strokeText(e,this._toRenderUnit(i),this._toRenderUnit(s))}_drawLine(t,e,i){t.beginPath(),t.moveTo(this._toRoundedRenderUnit(e[0])+.5,this._toRoundedRenderUnit(e[1])+.5),t.lineTo(this._toRoundedRenderUnit(i[0])+.5,this._toRoundedRenderUnit(i[1])+.5),t.stroke()}_drawBox(t,e,i){const s=this._toRenderUnit(e[0]),n=this._toRenderUnit(e[1]),r=this._toRenderUnit(i[0]),h=this._toRenderUnit(i[1]),o=Math.floor(s)+.5,a=Math.ceil(s+r)-.5,d=Math.floor(n)+.5,l=Math.ceil(n+h)-.5;t.beginPath(),t.moveTo(o,d),t.lineTo(a,d),t.lineTo(a,l),t.lineTo(o,l),t.lineTo(o,d),t.stroke()}}const h=[];{const t=16;for(let e=0;e<360;e+=360/t)h.push([Math.cos(Math.PI*e/180),Math.sin(Math.PI*e/180)])}const o={canvas:null},a=.2,d=512,l="rgb(255, 0, 255, 0.5)";class _{get firstLineHeight(){return this.firstLineAscent+this.maxLineDescent}get midLineHeight(){return this.maxLineAscent+this.maxLineDescent}get lastLineHeight(){return this.maxLineAscent+this.lastLineDescent}constructor(t,e,i,s,n){this.firstLineAscent=t,this.lastLineDescent=e,this.maxLineAscent=i,this.maxLineDescent=s,this.displayWidth=n}}export{r as TextRenderer,n as textVerticalPaddingPx};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{nextHighestPowerOfTwo as e,roundUpToNearest as t}from"../../../../../core/mathUtils.js";import{maxUint32 as r}from"../../../../../core/typedArrayUtil.js";import{copy as s,invert as n,transpose as o}from"../../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as a}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{glLayout as i}from"../../../support/buffer/glUtil.js";import{assert as u}from"../../lib/Util.js";import{VertexArrayObject as f}from"../../lib/VertexArrayObject.js";import{getMaxItemCount as c,getMaxByteSize as l}from"../../lib/TextureBackedBuffer/TextureBackedBufferUtils.js";import{bufferRangePool as h,rangesIntersect as g}from"./BufferRange.js";import{DrawCommand as m}from"./DrawCommand.js";import{getIndexLayoutForMaxIndex as d,getIndexLayoutForDataType as y}from"./IndexLayout.js";import{BaseInstanceData as x}from"./PerBaseInstanceData.js";import{VertexBuffer as _}from"../../../../webgl/VertexBuffer.js";class B{constructor(e,t){this._rctx=t,this._vaoCacheValue=null,this._instanceVboCacheValue=null,this._textureBufferCacheValue=null,this._vboCacheValue=null;const r=e.createBufferWriter();this._bufferWriter=r;const s=["geometry"],n="textureBufferLayout"in r&&null!=r.textureBufferLayout;this.useTextureBuffer=n,n&&s.push("texture"),this.useIndexing=e.useIndexing,this.useIndexing&&s.push("index"),this.targetBuffers=s}get _vaoCache(){return this._vaoCacheValue??=this._rctx.getVaoCache(i(this._bufferWriter.layout)),this._vaoCacheValue}get _instanceVboCache(){return this._instanceVboCacheValue??=this._rctx.getVboCache(i(this._bufferWriter.layout,1)),this._instanceVboCacheValue}get _textureBufferCache(){return this.useTextureBuffer?(this._textureBufferCacheValue??=this._rctx.getTextureBufferCache(this._bufferWriter.textureBufferLayout),this._textureBufferCacheValue):null}get _vboCache(){return this._vboCacheValue??=this._rctx.getVboCache(i(this._bufferWriter.layout)),this._vboCacheValue}maxElements(e){if("texture"===e){const e=this._targetLayout("texture");return null==e?0:c(this._rctx,e,this._bufferWriter.maxTextureBufferItemIndex??r)}const t=Math.floor(V/this._targetStrideBytes("geometry"));if("index"===e){const e=d(t-1).dataType;return Math.floor(V/this._targetStrideBytes("index",e))}return t}_targetStrideBytes(e,t){return this._targetLayout(e,t)?.stride??0}_targetLayout(e,t){return"geometry"===e?this._bufferWriter.layout:"baseInstance"===e?this._bufferWriter.baseInstanceLayout:"index"===e?y(t):this._bufferWriter.textureBufferLayout}evaluateBufferAllocation(e,t,r,s){const n=this._targetStrideBytes("geometry"),o=t.reduce((e,t)=>e+this.vertexElementCount(t),0),a=r.reduce((e,t)=>e+this.vertexElementCount(t),0),i=Math.min((e+o-a)*n,V),u=s.vao?.buffer("geometry"),f=u?.sizeBytes??0;return i>T&&i<f/2?0:i>f?1:2}deleteBuffer(e){e.isInstanced?(e.instancedCommandVAOs?.dispose(),this._instanceVboCache.deleteVbo(e.vao?.mutableBuffer("geometry")),e.vao?.disposeVAOOnly()):this.useIndexing?(this._vboCache.deleteVbo(e.vao?.mutableBuffer("geometry")),this._rctx.indexBufferCache.deleteIndexBuffer(e.vao?.indexBuffer),e.vao?.disposeVAOOnly()):this._vaoCache.deleteVao(e.vao),this._textureBufferCache?.deleteTextureBuffer(e.textureBuffer),e.vao=null,e.textureBuffer=null,e.endElements.geometry=0,e.endElements.texture=0,e.endElements.index=0}createBaseInstanceData(e){const{_bufferWriter:t}=this;if(null==e||null==t.baseInstanceLayout||null==t.writeBaseInstance||null==t.elementCountBaseInstance)return null;const r=this._targetLayout("baseInstance"),s=t.elementCountBaseInstance(e.attributes),n=s*r.stride,o=new _(this._rctx,i(r));o.setSize(Math.ceil(n));const a=E(n),u=r.createView(a.buffer);t.writeBaseInstance(e.attributes,u),o.setSubData(a,0,0,n);const f=new m;return f.first=0,f.count=s,new x(e,o,f)}reallocateBuffer(e,t,r){if(this.deleteBuffer(t),null!=e){u(!this.useIndexing,"Instanced indexed rendering is not supported");const s=e.baseInstanceBuffer,n=r.geometry*this._targetStrideBytes("geometry"),o=this._instanceVboCache.newVbo(L(n));t.vao=new f(this._rctx,new Map([["baseInstance",s],["geometry",o]]))}else if(this.useIndexing){const e=r.geometry*this._targetStrideBytes("geometry"),s=this._vboCache.newVbo(L(e)),n=Math.floor(s.sizeBytes/this._bufferWriter.layout.stride)-1,o=d(n),a=r.index*o.stride,i=Math.ceil(L(a)/o.stride),u=this._rctx.indexBufferCache.newIndexBuffer(i,o.dataType);t.vao=new f(this._rctx,s,u)}else{const e=r.geometry*this._targetStrideBytes("geometry");t.vao=this._vaoCache.newVao(L(e))}const s=this._targetLayout("texture"),n=this._textureBufferCache;if(null!=s&&null!=n){const e=L(r.texture*s.stride),o=Math.min(Math.ceil(e/s.stride),this.maxElements("texture"));t.textureBuffer=n.newTextureBuffer(o)}t.endElements.geometry=Math.floor((t.vao?.getByteLength("geometry")??0)/this._targetStrideBytes("geometry")),t.endElements.texture=t.textureBuffer?.itemCount??0,t.endElements.index=t.vao?.indexBuffer?.size??0}elementCount(e,t){const r=e.type;switch(r){case 0:{const{attributes:r}=e.geometry;switch(t){case"geometry":return this._bufferWriter.elementCount(r);case"index":return e.geometry.drawIndices?.length??0;case"texture":return this._bufferWriter.elementCountTextureBuffer?.(r)??0;default:throw new Error(`Unhandled target: ${t}`)}}case 1:{const{buffers:r}=e;switch(t){case"geometry":return r.vertex.count;case"index":return r.index?.length??0;case"texture":return r.storage?.count??0;default:throw new Error(`Unhandled target: ${t}`)}}default:throw new Error(`Invalid geometry type: ${r}`)}}vertexElementCount(e){const t=e.type;switch(t){case 0:return this._bufferWriter.elementCount(e.geometry.attributes);case 1:{const{buffers:t}=e;return t.vertex.count}default:throw new Error(`Invalid geometry type: ${t}`)}}canGrow(e,t){const r=this.targetBuffers.map(r=>this._evaluateTargetBufferGrowth(r,e,t));return r.every(({canGrow:e})=>e)&&r.some(({needsToGrow:e})=>e)}_evaluateTargetBufferGrowth(e,t,s){const n=this._targetLayout(e,t.indexType),o=t.getTargetBuffer(e);if(null==n||null==o)return{needsToGrow:null!=n,canGrow:!0};return{needsToGrow:s[e]*n.stride>o.sizeBytes,canGrow:"geometry"===e||"index"===e?o.sizeBytes<L(V-T):o.sizeBytes<l(this._rctx,n,this._bufferWriter.maxTextureBufferItemIndex??r)}}clearHoles(e,t){const{indexType:r}=t;for(const s of this.targetBuffers){const n=this._targetStrideBytes(s,r),o=e[s],a=o.reduce((e,t)=>Math.max(e,t.numElements),0)*n,i=E(a);i.fill(this._getTargetClearValue(t,s),0,a);for(const e of o)this._setTargetSubData(s,t,n,e,i)}}clearHolesMetal(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={};let i=0;for(const c of n){const e=t[c].numElements*this._targetStrideBytes(c,s);o[c]=e,a[c]=i,i+=M(e)}const u=E(i);for(const c of n)u.fill(this._getTargetClearValue(r,c),a[c],a[c]+o[c]);const f={};for(const c of n)f[c]=this._targetLayout(c,s)?.createView(u.buffer,a[c]);for(const c of e)this._writeIntersectingInstanceTargets(c,f,t);for(const c of n)this._setTargetSubData(c,r,this._targetStrideBytes(c,s),t[c],u,a[c])}writeRandomInstances(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={},i={},u={};let f=0;for(const g of n)o[g]=e[g]*this._targetStrideBytes(g,s),a[g]=f,i[g]=0,u[g]=h.acquire(0,0),f+=M(o[g]);const c=E(f),l={};for(const h of n)l[h]=this._targetLayout(h,s)?.createView(c.buffer,a[h]);for(const h of t){for(const e of n){const t=h.targetRanges[e],n=u[e];n.to===t.from||(n.numElements>0&&this._setTargetSubData(e,r,this._targetStrideBytes(e,s),u[e],c,a[e]),n.from=t.from,i[e]=0)}this._writeGeometry(h.geometry,l,i,h.targetRanges);for(const e of n){const t=h.targetRanges[e];i[e]+=t.numElements,u[e].to=t.to}}for(const g of n){const e=u[g];e.numElements>0&&this._setTargetSubData(g,r,this._targetStrideBytes(g,s),e,c,a[g]),h.release(u[g])}}writeInstanceRangeMetal(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={};let i=0;for(const c of n)o[c]=e[c].numElements*this._targetStrideBytes(c,s),a[c]=i,i+=M(o[c]);const u=E(i),f={};for(const c of n)f[c]=this._targetLayout(c,s)?.createView(u.buffer,a[c]);for(const c of n)u.fill(this._getTargetClearValue(r,c),a[c],a[c]+o[c]);for(const c of t)this._writeIntersectingInstanceTargets(c,f,e);for(const c of n)e[c].numElements>0&&this._setTargetSubData(c,r,this._targetStrideBytes(c,s),e[c],u,a[c])}rebuildInstances(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={},i={};let u=0;for(const l of n)o[l]=e[l]*this._targetStrideBytes(l,s),a[l]=u,u+=M(o[l]),i[l]=0;const f=E(u),c={};for(const l of n)c[l]=this._targetLayout(l,s)?.createView(f.buffer,a[l]);for(const l of t){const e={},t={};for(const r of n){e[r]=i[r],i[r]+=this.elementCount(l.geometry,r);const s=l.targetRanges[r];s.from=e[r],s.to=i[r],t[r]=s}this._writeGeometry(l.geometry,c,e,t)}for(const l of n){const e=h.acquire(0,i[l]);this._setTargetSubData(l,r,this._targetStrideBytes(l,s),e,f,a[l]),h.release(e)}return i}updateInstance(e,t){const{indexType:r}=t,{targetBuffers:s}=this,n={},o={};let a=0;for(const c of s){const t=this._targetStrideBytes(c,r);n[c]=this.elementCount(e.geometry,c)*t,o[c]=a,a+=M(n[c])}const i=E(a),u={},f={};for(const c of s)f[c]=0,u[c]=this._targetLayout(c,r)?.createView(i.buffer,o[c]);this._writeGeometry(e.geometry,u,f,e.targetRanges);for(const c of s)this._setTargetSubData(c,t,this._targetStrideBytes(c,r),e.targetRanges[c],i,o[c])}updateInstancesMetal(e){const{targetBuffers:t}=this;for(const[r,s]of e){const e={};for(const r of t)e[r]=h.acquire(1/0,-1/0);for(const r of s)for(const s of t){const t=e[s],n=r.targetRanges[s];t.from=Math.min(t.from,n.from),t.to=Math.max(t.to,n.to)}this.writeInstanceRangeMetal(e,r.instances.values(),r);for(const r of t)h.release(e[r])}}_writeIntersectingInstanceTargets(e,t,r){const s={},n={};let o=!1;for(const a of this.targetBuffers){const i=e.targetRanges[a],u=r[a],f=g(i,u);n[a]=f?t[a]:null,s[a]=f?i.from-u.from:0,o||=f}o&&this._writeGeometry(e.geometry,n,s,e.targetRanges)}_writeGeometry(e,t,r,s){const n=e.type;switch(n){case 0:return this._writeAttributeGeometry(e,t,r,s);case 1:return this._writeBuffersGeometry(e,t,r,s);default:throw new Error(`Invlaid geometry type: ${n}`)}}_writeBuffersGeometry(e,t,r,s){const{_bufferWriter:n}=this;if(null==n||!("rebaseBuffers"in n)||!n.rebaseBuffers)throw new Error("BufferGeometry materials must provide BufferWriter.rebaseBuffers");const o=null!=t.geometry?{buffer:t.geometry,offset:r.geometry}:null,a=null!=t.texture?{buffer:t.texture,offset:r.texture}:null,{buffers:i}=e;if(n.rebaseBuffers(i,o,s.texture,a),this.useIndexing&&null!=t.index){const e=i.index;u(null!=e,"Material requires vertex indices"),this._writeIndexBuffer(s.geometry,t.index,r,e)}}_writeAttributeGeometry(e,t,r,a){const{_bufferWriter:i}=this;if(null==i)return;s(w,e.transformation),w[12]-=e.localOrigin.vec3[0],w[13]-=e.localOrigin.vec3[1],w[14]-=e.localOrigin.vec3[2],n(I,w),o(I,I);const f=null!=t.geometry?{buffer:t.geometry,offset:r.geometry}:null,c=null!=t.texture?{buffer:t.texture,offset:r.texture}:null;if(i.write(w,I,e.geometry.attributes,f,a.texture,c),this.useIndexing&&null!=t.index){const s=e.geometry.drawIndices;u(null!=s,"Material requires vertex indices"),this._writeIndexBuffer(a.geometry,t.index,r,s)}}_writeIndexBuffer(e,t,r,s){const n=e.from,o=t,a=r.index;for(let i=0;i<s.length;++i)o[a+i]=s[i]+n}_setTargetSubData(e,t,r,s,n,o=0){if("geometry"===e){const a=t.getTargetBuffer(e);a?.setSubData(n,s.from*r,o,o+s.numElements*r)}else if("texture"===e){const r=t.getTargetBuffer(e);r?.setSubData(n.buffer,s.from,o,s.numElements)}else if("index"===e){const a=t.getTargetBuffer(e);a?.setSubData(n,s.from*r,o,o+s.numElements*r)}}_getTargetClearValue(e,t){if("index"!==t)return 0;const r=e.vao.indexBuffer?.indexType;return y(r).primitiveRestart}static prune(){S=new Uint8Array(T)}}function b(e=v,t=p){return V=e,T=t,{[Symbol.dispose]:()=>{V=v,T=p}}}const w=a(),I=a(),p=262144,C=1024,v=16777216;let T=p,V=v,S=new Uint8Array(T);function E(e){return S.byteLength<e&&(S=new Uint8Array(e)),S}function M(e){return t(e,4)}function L(t){return t<=C?C:t<T?e(t):Math.max(Math.min(Math.ceil(1.5*t/T)*T,V),t)}export{B as VaoWriter,b as withVaoWriterSizes};
|
|
2
|
+
import{nextHighestPowerOfTwo as e,roundUpToNearest as t}from"../../../../../core/mathUtils.js";import{maxUint32 as r}from"../../../../../core/typedArrayUtil.js";import{copy as s,invert as n,transpose as o}from"../../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as a}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{glLayout as i}from"../../../support/buffer/glUtil.js";import{assert as u}from"../../lib/Util.js";import{VertexArrayObject as f}from"../../lib/VertexArrayObject.js";import{getMaxItemCount as c,getMaxByteSize as l}from"../../lib/TextureBackedBuffer/TextureBackedBufferUtils.js";import{bufferRangePool as h,rangesIntersect as g}from"./BufferRange.js";import{DrawCommand as m}from"./DrawCommand.js";import{getIndexLayoutForMaxIndex as d,getIndexLayoutForDataType as y}from"./IndexLayout.js";import{BaseInstanceData as x}from"./PerBaseInstanceData.js";import{VertexBuffer as _}from"../../../../webgl/VertexBuffer.js";class B{constructor(e,t){this._rctx=t,this._vaoCacheValue=null,this._instanceVboCacheValue=null,this._textureBufferCacheValue=null,this._vboCacheValue=null;const r=e.createBufferWriter();this._bufferWriter=r;const s=["geometry"],n="textureBufferLayout"in r&&null!=r.textureBufferLayout;this.useTextureBuffer=n,n&&s.push("texture"),this.useIndexing=e.useIndexing,this.useIndexing&&s.push("index"),this.targetBuffers=s}get _vaoCache(){return this._vaoCacheValue??=this._rctx.getVaoCache(i(this._bufferWriter.layout)),this._vaoCacheValue}get _instanceVboCache(){return this._instanceVboCacheValue??=this._rctx.getVboCache(i(this._bufferWriter.layout,1)),this._instanceVboCacheValue}get _textureBufferCache(){return this.useTextureBuffer?(this._textureBufferCacheValue??=this._rctx.getTextureBufferCache(this._bufferWriter.textureBufferLayout),this._textureBufferCacheValue):null}get _vboCache(){return this._vboCacheValue??=this._rctx.getVboCache(i(this._bufferWriter.layout)),this._vboCacheValue}maxElements(e){if("texture"===e){const e=this._targetLayout("texture");return null==e?0:c(this._rctx,e,this._bufferWriter.maxTextureBufferItemIndex??r)}const t=Math.floor(V/this._targetStrideBytes("geometry"));if("index"===e){const e=d(t-1).dataType;return Math.floor(V/this._targetStrideBytes("index",e))}return t}_targetStrideBytes(e,t){return this._targetLayout(e,t)?.stride??0}_targetLayout(e,t){return"geometry"===e?this._bufferWriter.layout:"baseInstance"===e?this._bufferWriter.baseInstanceLayout:"index"===e?y(t):this._bufferWriter.textureBufferLayout}evaluateBufferAllocation(e,t,r,s){const n=this._targetStrideBytes("geometry"),o=t.reduce((e,t)=>e+this.vertexElementCount(t),0),a=r.reduce((e,t)=>e+this.vertexElementCount(t),0),i=Math.min((e+o-a)*n,V),u=s.vao?.buffer("geometry"),f=u?.sizeBytes??0;return i>T&&i<f/2?0:i>f?1:2}deleteBuffer(e){e.isInstanced?(e.instancedCommandVAOs?.dispose(),this._instanceVboCache.deleteVbo(e.vao?.mutableBuffer("geometry")),e.vao?.disposeVAOOnly()):this.useIndexing?(this._vboCache.deleteVbo(e.vao?.mutableBuffer("geometry")),this._rctx.indexBufferCache.deleteIndexBuffer(e.vao?.indexBuffer),e.vao?.disposeVAOOnly()):this._vaoCache.deleteVao(e.vao),this._textureBufferCache?.deleteTextureBuffer(e.textureBuffer),e.vao=null,e.textureBuffer=null,e.endElements.geometry=0,e.endElements.texture=0,e.endElements.index=0}createBaseInstanceData(e){const{_bufferWriter:t}=this;if(null==e)return null;if(null==t.baseInstanceLayout||0===e.type&&(null==t.writeBaseInstance||null==t.elementCountBaseInstance))throw new Error("Using a base instance, but the material does not support instancing");const r=this._targetLayout("baseInstance"),s=this._elementCountBaseInstance(e),n=s*r.stride,o=new _(this._rctx,i(r));switch(o.setSize(Math.ceil(n)),e.type){case 0:{const s=E(n),a=r.createView(s.buffer);t.writeBaseInstance(e.attributes,a),o.setSubData(s,0,0,n);break}case 1:{const t=e.buffers.vertex,r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);o.setSubData(r,0,0,n);break}default:throw new Error("Invalid geometry type")}const a=new m;return a.first=0,a.count=s,new x(e,o,a)}reallocateBuffer(e,t,r){if(this.deleteBuffer(t),null!=e){u(!this.useIndexing,"Instanced indexed rendering is not supported");const s=e.baseInstanceBuffer,n=r.geometry*this._targetStrideBytes("geometry"),o=this._instanceVboCache.newVbo(L(n));t.vao=new f(this._rctx,new Map([["baseInstance",s],["geometry",o]]))}else if(this.useIndexing){const e=r.geometry*this._targetStrideBytes("geometry"),s=this._vboCache.newVbo(L(e)),n=Math.floor(s.sizeBytes/this._bufferWriter.layout.stride)-1,o=d(n),a=r.index*o.stride,i=Math.ceil(L(a)/o.stride),u=this._rctx.indexBufferCache.newIndexBuffer(i,o.dataType);t.vao=new f(this._rctx,s,u)}else{const e=r.geometry*this._targetStrideBytes("geometry");t.vao=this._vaoCache.newVao(L(e))}const s=this._targetLayout("texture"),n=this._textureBufferCache;if(null!=s&&null!=n){const e=L(r.texture*s.stride),o=Math.min(Math.ceil(e/s.stride),this.maxElements("texture"));t.textureBuffer=n.newTextureBuffer(o)}t.endElements.geometry=Math.floor((t.vao?.getByteLength("geometry")??0)/this._targetStrideBytes("geometry")),t.endElements.texture=t.textureBuffer?.itemCount??0,t.endElements.index=t.vao?.indexBuffer?.size??0}elementCount(e,t){const r=e.type;switch(r){case 0:{const{attributes:r}=e.geometry;switch(t){case"geometry":return this._bufferWriter.elementCount(r);case"index":return e.geometry.drawIndices?.length??0;case"texture":return this._bufferWriter.elementCountTextureBuffer?.(r)??0;default:throw new Error(`Unhandled target: ${t}`)}}case 1:{const{buffers:r}=e;switch(t){case"geometry":return r.vertex.count;case"index":return r.index?.length??0;case"texture":return r.storage?.count??0;default:throw new Error(`Unhandled target: ${t}`)}}default:throw new Error(`Invalid geometry type: ${r}`)}}_elementCountBaseInstance(e){const t=e.type;switch(t){case 0:return this._bufferWriter.elementCountBaseInstance(e.attributes);case 1:return e.buffers.vertex.count;default:throw new Error(`Invalid geometry type: ${t}`)}}vertexElementCount(e){const t=e.type;switch(t){case 0:return this._bufferWriter.elementCount(e.geometry.attributes);case 1:{const{buffers:t}=e;return t.vertex.count}default:throw new Error(`Invalid geometry type: ${t}`)}}canGrow(e,t){const r=this.targetBuffers.map(r=>this._evaluateTargetBufferGrowth(r,e,t));return r.every(({canGrow:e})=>e)&&r.some(({needsToGrow:e})=>e)}_evaluateTargetBufferGrowth(e,t,s){const n=this._targetLayout(e,t.indexType),o=t.getTargetBuffer(e);if(null==n||null==o)return{needsToGrow:null!=n,canGrow:!0};return{needsToGrow:s[e]*n.stride>o.sizeBytes,canGrow:"geometry"===e||"index"===e?o.sizeBytes<L(V-T):o.sizeBytes<l(this._rctx,n,this._bufferWriter.maxTextureBufferItemIndex??r)}}clearHoles(e,t){const{indexType:r}=t;for(const s of this.targetBuffers){const n=this._targetStrideBytes(s,r),o=e[s],a=o.reduce((e,t)=>Math.max(e,t.numElements),0)*n,i=E(a);i.fill(this._getTargetClearValue(t,s),0,a);for(const e of o)this._setTargetSubData(s,t,n,e,i)}}clearHolesMetal(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={};let i=0;for(const c of n){const e=t[c].numElements*this._targetStrideBytes(c,s);o[c]=e,a[c]=i,i+=M(e)}const u=E(i);for(const c of n)u.fill(this._getTargetClearValue(r,c),a[c],a[c]+o[c]);const f={};for(const c of n)f[c]=this._targetLayout(c,s)?.createView(u.buffer,a[c]);for(const c of e)this._writeIntersectingInstanceTargets(c,f,t);for(const c of n)this._setTargetSubData(c,r,this._targetStrideBytes(c,s),t[c],u,a[c])}writeRandomInstances(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={},i={},u={};let f=0;for(const g of n)o[g]=e[g]*this._targetStrideBytes(g,s),a[g]=f,i[g]=0,u[g]=h.acquire(0,0),f+=M(o[g]);const c=E(f),l={};for(const h of n)l[h]=this._targetLayout(h,s)?.createView(c.buffer,a[h]);for(const h of t){for(const e of n){const t=h.targetRanges[e],n=u[e];n.to===t.from||(n.numElements>0&&this._setTargetSubData(e,r,this._targetStrideBytes(e,s),u[e],c,a[e]),n.from=t.from,i[e]=0)}this._writeGeometry(h.geometry,l,i,h.targetRanges);for(const e of n){const t=h.targetRanges[e];i[e]+=t.numElements,u[e].to=t.to}}for(const g of n){const e=u[g];e.numElements>0&&this._setTargetSubData(g,r,this._targetStrideBytes(g,s),e,c,a[g]),h.release(u[g])}}writeInstanceRangeMetal(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={};let i=0;for(const c of n)o[c]=e[c].numElements*this._targetStrideBytes(c,s),a[c]=i,i+=M(o[c]);const u=E(i),f={};for(const c of n)f[c]=this._targetLayout(c,s)?.createView(u.buffer,a[c]);for(const c of n)u.fill(this._getTargetClearValue(r,c),a[c],a[c]+o[c]);for(const c of t)this._writeIntersectingInstanceTargets(c,f,e);for(const c of n)e[c].numElements>0&&this._setTargetSubData(c,r,this._targetStrideBytes(c,s),e[c],u,a[c])}rebuildInstances(e,t,r){const{indexType:s}=r,{targetBuffers:n}=this,o={},a={},i={};let u=0;for(const l of n)o[l]=e[l]*this._targetStrideBytes(l,s),a[l]=u,u+=M(o[l]),i[l]=0;const f=E(u),c={};for(const l of n)c[l]=this._targetLayout(l,s)?.createView(f.buffer,a[l]);for(const l of t){const e={},t={};for(const r of n){e[r]=i[r],i[r]+=this.elementCount(l.geometry,r);const s=l.targetRanges[r];s.from=e[r],s.to=i[r],t[r]=s}this._writeGeometry(l.geometry,c,e,t)}for(const l of n){const e=h.acquire(0,i[l]);this._setTargetSubData(l,r,this._targetStrideBytes(l,s),e,f,a[l]),h.release(e)}return i}updateInstance(e,t){const{indexType:r}=t,{targetBuffers:s}=this,n={},o={};let a=0;for(const c of s){const t=this._targetStrideBytes(c,r);n[c]=this.elementCount(e.geometry,c)*t,o[c]=a,a+=M(n[c])}const i=E(a),u={},f={};for(const c of s)f[c]=0,u[c]=this._targetLayout(c,r)?.createView(i.buffer,o[c]);this._writeGeometry(e.geometry,u,f,e.targetRanges);for(const c of s)this._setTargetSubData(c,t,this._targetStrideBytes(c,r),e.targetRanges[c],i,o[c])}updateInstancesMetal(e){const{targetBuffers:t}=this;for(const[r,s]of e){const e={};for(const r of t)e[r]=h.acquire(1/0,-1/0);for(const r of s)for(const s of t){const t=e[s],n=r.targetRanges[s];t.from=Math.min(t.from,n.from),t.to=Math.max(t.to,n.to)}this.writeInstanceRangeMetal(e,r.instances.values(),r);for(const r of t)h.release(e[r])}}_writeIntersectingInstanceTargets(e,t,r){const s={},n={};let o=!1;for(const a of this.targetBuffers){const i=e.targetRanges[a],u=r[a],f=g(i,u);n[a]=f?t[a]:null,s[a]=f?i.from-u.from:0,o||=f}o&&this._writeGeometry(e.geometry,n,s,e.targetRanges)}_writeGeometry(e,t,r,s){const n=e.type;switch(n){case 0:return this._writeAttributeGeometry(e,t,r,s);case 1:return this._writeBuffersGeometry(e,t,r,s);default:throw new Error(`Invlaid geometry type: ${n}`)}}_writeBuffersGeometry(e,t,r,s){const{_bufferWriter:n}=this;if(null==n||!("rebaseBuffers"in n)||!n.rebaseBuffers)throw new Error("BufferGeometry materials must provide BufferWriter.rebaseBuffers");const o=null!=t.geometry?{buffer:t.geometry,offset:r.geometry}:null,a=null!=t.texture?{buffer:t.texture,offset:r.texture}:null,{buffers:i}=e;if(n.rebaseBuffers(i,o,s.texture,a),this.useIndexing&&null!=t.index){const e=i.index;u(null!=e,"Material requires vertex indices"),this._writeIndexBuffer(s.geometry,t.index,r,e)}}_writeAttributeGeometry(e,t,r,a){const{_bufferWriter:i}=this;if(null==i)return;s(w,e.transformation),w[12]-=e.localOrigin.vec3[0],w[13]-=e.localOrigin.vec3[1],w[14]-=e.localOrigin.vec3[2],n(p,w),o(p,p);const f=null!=t.geometry?{buffer:t.geometry,offset:r.geometry}:null,c=null!=t.texture?{buffer:t.texture,offset:r.texture}:null;if(i.write(w,p,e.geometry.attributes,f,a.texture,c),this.useIndexing&&null!=t.index){const s=e.geometry.drawIndices;u(null!=s,"Material requires vertex indices"),this._writeIndexBuffer(a.geometry,t.index,r,s)}}_writeIndexBuffer(e,t,r,s){const n=e.from,o=t,a=r.index;for(let i=0;i<s.length;++i)o[a+i]=s[i]+n}_setTargetSubData(e,t,r,s,n,o=0){if("geometry"===e){const a=t.getTargetBuffer(e);a?.setSubData(n,s.from*r,o,o+s.numElements*r)}else if("texture"===e){const r=t.getTargetBuffer(e);r?.setSubData(n.buffer,s.from,o,s.numElements)}else if("index"===e){const a=t.getTargetBuffer(e);a?.setSubData(n,s.from*r,o,o+s.numElements*r)}}_getTargetClearValue(e,t){if("index"!==t)return 0;const r=e.vao.indexBuffer?.indexType;return y(r).primitiveRestart}static prune(){S=new Uint8Array(T)}}function b(e=C,t=I){return V=e,T=t,{[Symbol.dispose]:()=>{V=C,T=I}}}const w=a(),p=a(),I=262144,v=1024,C=16777216;let T=I,V=C,S=new Uint8Array(T);function E(e){return S.byteLength<e&&(S=new Uint8Array(e)),S}function M(e){return t(e,4)}function L(t){return t<=v?v:t<T?e(t):Math.max(Math.min(Math.ceil(1.5*t/T)*T,V),t)}export{B as VaoWriter,b as withVaoWriterSizes};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import{createTask as i}from"../../core/asyncUtils.js";import l from"../../core/Collection.js";import s from"../../core/Error.js";import{throwIfAborted as r}from"../../core/promiseUtils.js";import{watch as o,initial as a,syncAndInitial as n}from"../../core/reactiveUtils.js";import{Milliseconds as d}from"../../core/time.js";import{property as h,subclass as c}from"../../core/accessorSupport/decorators.js";import u from"../../webdoc/Widgets.js";import f from"../../webdoc/widgets/FloorFilter.js";import{isWebMap as p}from"../../webmap/utils.js";import{GoTo as y}from"../support/GoTo.js";function v(e){return"esri.WebScene"===e.declaredClass}let m=class extends(y(t)){constructor(e){super(e),this.filterMenuOpen=!1,this.filterMenuType="site",this.filterMode="base-floors",this.levelsExpanded=!0,this.searchTerm=null,this.view=null,this._updateFloorFilterTask=null,this._viewHeightBreakpoint=null,this._viewWidthBreakpoint=null}initialize(){this.addHandles([o(()=>this.view?.map,e=>{null!=this._updateFloorFilterTask&&(this._updateFloorFilterTask.abort(),this._updateFloorFilterTask=null),this._updateFloorFilterTask=i(async t=>{await this._updateFloorFilterFromMap(e),r(t),this._setInitialViewState(e)})},a),o(()=>this.view,(e,t)=>{this._unregisterWidget(t),this._registerWidget(e),this._watchSearchResults(e)},n),o(()=>this.view?.widthBreakpoint??null,e=>{this._viewWidthBreakpoint=e}),o(()=>this.view?.heightBreakpoint??null,e=>{this._viewHeightBreakpoint=e})])}destroy(){this._unregisterWidget(this.view),this.view=null,null!=this._updateFloorFilterTask&&(this._updateFloorFilterTask.abort(),this._updateFloorFilterTask=null)}set enabled(e){this._callOverride("enabled",e)}set facility(e){if(e&&this._isOverridden("facility")){const t=this.getFacility(e);this.hasMultipleSites&&(this.site=t?.siteId||null)}this._callOverride("facility",e)}set filterFeatures(e){this._callOverride("filterFeatures",e)}set filterLayers(e){this._callOverride("filterLayers",e)}get floorVisibilityMode(){return this.view&&v(this.view?.map)?this.view.map.widgets?.floorFilter?.floorVisibilityMode??"belowSelected":"belowSelected"}get hasFacilities(){return null!=this.filterLayers?.facilityLayer&&this.filterFeatures?.facilities?.facilitiesInfo?.length>0}get hasLevels(){return null!=this.filterLayers?.levelLayer&&this.filterFeatures?.levels?.levelsInfo?.length>0}get hasMultipleSites(){return null!=this.filterLayers?.siteLayer&&this.filterFeatures?.sites?.sitesInfo?.length>1}get isNormalMode(){let e=!0;const t=this._viewWidthBreakpoint;return"xsmall"!==this._viewHeightBreakpoint&&"xsmall"!==t||(e=!1),e}set level(e){if(!e)return this._callOverride("level",e),this.facility=null,this.site=null,void this.setFloors(null);let t=null,i=null;const l=e?.split("--");if(l?.length>1&&"all"===l[0]?(i=l[1],t={id:e,facilityId:i,shortName:null,longName:null,levelNumber:null,verticalOrder:null}):(t=this.getLevel(e),i=t?.facilityId??null),this.level!==e||this.isNormalMode||this.levelsExpanded)t&&this.hasFacilities&&this.hasLevels?(this.facility=i,this.hasMultipleSites&&(this.site=this.getFacility(i)?.siteId||null),this.setFloors(t)):this._isOverridden("level")&&(this.facility=null,this.site=null,this.hasMultipleSites&&(this.filterMenuType="site"),this.setFloors(null)),this._callOverride("level",e);else{const e=this.getFacilityLevels(i);e?.length>1&&(this.levelsExpanded=!0)}}set longNames(e){this._callOverride("longNames",e)}set minimized(e){this._callOverride("minimized",e)}set pinnedLevels(e){this._callOverride("pinnedLevels",e)}get selectedVerticalOrder(){if(p(this.view?.map)){const e=this.view.map.resourceInfo;return e?.widgets?.floorFilter?.selectedVerticalOrder??null}return null}set site(e){this._callOverride("site",e)}get state(){return this.view&&this.filterFeatures&&this.hasFacilities&&this.hasLevels?"ready":this.view&&!this.filterFeatures?"loading":"disabled"}get useVerticalOrder(){return null!=this.view?.map&&(!(!p(this.view?.map)&&!v(this.view.map))&&(this.view.map.widgets?.floorFilter?.useVerticalOrder??!1))}filterFacilities(e){let t=e;this.searchTerm&&(this.searchTerm=this.searchTerm.trim(),t=e.filter(e=>{const{name:t}=e;return t.toLowerCase().includes(this.searchTerm?.toLowerCase())})),this.site&&(t=t.filter(e=>e.siteId===this.site));return t.sort((e,t)=>{const i=e.name,l=t.name;return i.localeCompare(l,void 0,{sensitivity:"base"})})}filterSites(e){let t=e;this.searchTerm&&(this.searchTerm=this.searchTerm.trim(),t=e.filter(e=>{const{name:t}=e;return t.toLowerCase().includes(this.searchTerm?.toLowerCase())}));return t.sort((e,t)=>{const i=e.name,l=t.name;return i.localeCompare(l,void 0,{sensitivity:"base"})})}getBaseLevel(e){const t=this.filterFeatures?.levels?.levelsInfo;let i=null;if(e){const{id:l}=e;if(t&&t.length>0&&(t.forEach(e=>{0===e.verticalOrder&&e.facilityId===l&&(i=e)}),!i)){let e=null;t.forEach(t=>{t.facilityId===l&&(e?(t.verticalOrder??0)>=0?null!=e.verticalOrder&&(e.verticalOrder<0||(t.verticalOrder??0)<e.verticalOrder)&&(e=t):null!=e.verticalOrder&&null!=t.verticalOrder&&e.verticalOrder<0&&t.verticalOrder>e.verticalOrder&&(e=t):e=t)}),e&&(i=e)}}return i}getFacility(e){return this.filterFeatures?.facilities?.facilitiesInfo?.find(t=>t.id===e)??null}getFacilityLevels(e){if(!e||!this.filterFeatures?.levels?.levelsInfo)return[];return this.filterFeatures.levels.levelsInfo.filter(t=>t.facilityId===e).sort((e,t)=>{const i=e.verticalOrder??0,l=t.verticalOrder??0;return i>l?-1:i===l?0:1})}getLevel(e){return this.filterFeatures?.levels?.levelsInfo?.find(t=>t.id===e)??null}getSite(e){return this.filterFeatures?.sites?.sitesInfo?.find(t=>t.id===e)??null}async goTo(e){const{view:t}=this;if(!t||!e)return;const{geometry:i}=e;if(i?.extent){const e=e=>{this.callGoTo({target:e,options:{duration:d(1e3),easing:"quad-in-out-coast"}})};if(i.hasZ&&i.spatialReference?.vcsWkid!==t.spatialReference?.vcsWkid){const{projectIsLoaded:l,projectLoad:s,projectExecute:r}=await(import("../../geometry/operators/projectOperator.js"));l()||await s();const o=r(i.extent,t.spatialReference.clone(),{zConversionDisabled:!0});o&&e(o)}else e(i.extent)}}setFloors(e){const{view:t}=this;t&&(t?.map?.allLayers?.forEach(e=>{"feature"===e.type&&this._computeViewAllModeFloors(e)}),t.floors=new l(this._computeFloors(e)))}updateWebDocument(e){if(p(e)||v(e)){const t={enabled:this.enabled,longNames:this.longNames,minimized:this.minimized,pinnedLevels:this.pinnedLevels,site:this.site??null,facility:this.facility??null,level:this.level??null,useVerticalOrder:this.useVerticalOrder,selectedVerticalOrder:this.selectedVerticalOrder};v(e)&&(t.floorVisibilityMode=this.floorVisibilityMode);const i=new f(t);e.widgets??=new u,e.widgets.floorFilter=i}}_computeFloors(e){if("single-floor"===this.filterMode)this._computeSingleFloor(e);else if("base-floors"===this.filterMode)return"3d"===this.view?.type?this._computeBaseFloors3D(e):this._computeBaseFloors(e);return this._computeEmptyFloors()}_computeSingleFloor(e){if(!e)return this._computeEmptyFloors();const t=[];if("all"===e?.id){this.getFacilityLevels(e.facilityId).forEach(e=>{e.id&&t.push(e.id)})}else e&&t.push(e.id);return t}_computeBaseFloors(e){const t=this.filterFeatures?.levels?.levelsInfo;if(!t?.length)return this._computeEmptyFloors();const i=[];if("all"===e?.id){this.getFacilityLevels(e.facilityId).forEach(e=>{e.id&&i.push(e.id)})}else e&&i.push(e.id);const l=e?.facilityId,s=e?.verticalOrder,r=(e,t)=>{0===e&&i.push(t)};return t.forEach(e=>{const{id:t,facilityId:o,verticalOrder:a}=e;l||i.includes(t)?o===l||i.includes(t)||(this.useVerticalOrder?a===s&&i.push(t):r(a,t)):r(a,t)}),i}_computeBaseFloors3D(e){const t=this.filterFeatures?.levels?.levelsInfo;if(!t?.length)return this._computeEmptyFloors();const i=[],l=e?.id.split("--")??[],s=l?.length>1&&"all"===l[0];if(s){this.getFacilityLevels(e?.facilityId).forEach(e=>{e.id&&i.push(e.id)})}else e&&i.push(e.id);const r=e?.facilityId,o=e?.verticalOrder;return t.forEach(e=>{const{id:t,facilityId:l,verticalOrder:a}=e;if(r||i.includes(t)){if(!i.includes(t)){const{floorVisibilityMode:e,useVerticalOrder:n}=this,d=a<=o;l!==r?(s||!n||"selectedOnly"===e&&a===o||"belowSelected"===e&&d)&&i.push(t):"belowSelected"===e&&d&&i.push(t)}}else i.push(t)}),i}_computeEmptyFloors(){return[]}async _setFilterLayers(){const{view:e}=this;if(e&&!this._isOverridden("filterLayers")){if(!p(e.map)&&!v(e.map))throw new s("floorfilter:unsupported-map","Map must be a webmap or webscene");{const t=e.map,i=t?.allLayers;if(i?.items?.length>0){const e={siteLayer:null,facilityLayer:null,levelLayer:null},l=t.floorInfo?.siteLayer?.layerId,s=t.floorInfo?.facilityLayer?.layerId,r=t.floorInfo?.levelLayer?.layerId,o=t.floorInfo?.siteLayer?.sublayerId||t.floorInfo?.facilityLayer?.sublayerId||t.floorInfo?.levelLayer?.sublayerId;if(!s||!r)return;const a=i.items.filter(e=>"feature"===e.type||"scene"===e.type),n=i.items.filter(e=>"map-image"===e.type);if(n?.length>0&&o){await Promise.all(n.map(e=>e.load()));const i=t.floorInfo?.siteLayer?.sublayerId,o=t.floorInfo?.facilityLayer?.sublayerId,a=t.floorInfo?.levelLayer?.sublayerId;n.forEach(t=>{const n=t.id,d=t?.allSublayers,h=d?.items;(n===l||n===s||n===r)&&h?.length>0&&d.items.forEach(t=>{const s=t.id;n===l&&s===i?e.siteLayer=t:s===o?e.facilityLayer=t:s===a&&(e.levelLayer=t)})})}a?.length>0&&a.forEach(t=>{const i=t.id;i===l?e.siteLayer=t:i===s?e.facilityLayer=t:i===r&&(e.levelLayer=t)}),this.filterLayers=e}}}}async _getFilterFeatures(){if(this._isOverridden("filterFeatures"))return this.filterFeatures;const[e,t,i]=await Promise.all([this._getSites(),this._getFacilities(),this._getLevels()]);return{sites:e,facilities:t,levels:i}}async _getSites(){const e={sitesInfo:[]},{filterLayers:t,view:i}=this,l=i?.map,{siteLayer:s}=t;if(!s||!l?.floorInfo?.siteLayer)return e;const r=s.createQuery();r.returnGeometry=!0,r.outFields=["*"],r.returnZ=!0,"type"in s&&"scene"===s.type&&(r.multipatchOption="xyFootprint");const{siteIdField:o,nameField:a}=l.floorInfo.siteLayer,n=await s.queryFeatures(r);if(n?.features?.length>0){const t=n.features,i=s?.fieldsIndex.get(o)?.name||o,l=s?.fieldsIndex.get(a)?.name||a;null!=i&&null!=l&&t.forEach(t=>{const s=t.attributes,r=t.geometry,o=s[i],a=s[l];o&&a&&e.sitesInfo.push({id:o,name:a,geometry:r})})}return e}async _getFacilities(){const{filterLayers:e,view:t}=this,i=t?.map,{facilityLayer:l}=e,s={facilitiesInfo:[]};if(!l||!i?.floorInfo?.facilityLayer)return s;const r=l.createQuery();r.returnGeometry=!0,r.outFields=["*"],r.returnZ=!0,"type"in l&&"scene"===l.type&&(r.multipatchOption="xyFootprint");const{facilityIdField:o,siteIdField:a,nameField:n}=i.floorInfo.facilityLayer,d=await l.queryFeatures(r);if(d?.features?.length>0){const e=d.features,t=l?.fieldsIndex.get(o)?.name||o,i=l?.fieldsIndex.get(a)?.name||a,r=l?.fieldsIndex.get(n)?.name||n;t&&i&&r&&e.forEach(e=>{const l=e.attributes,o=e.geometry,a=l[t],n=l[i],d=l[r];a&&d&&s.facilitiesInfo.push({id:a,siteId:n,name:d,geometry:o})})}return s}async _getLevels(){const{filterLayers:e,view:t}=this,i=t?.map,{levelLayer:l}=e,s={levelsInfo:[]};if(!l||!i?.floorInfo?.levelLayer)return s;const r=l.createQuery();r.returnGeometry=!0,r.outFields=["*"],r.returnZ=!0;const{levelIdField:o,facilityIdField:a,longNameField:n,shortNameField:d,levelNumberField:h,verticalOrderField:c}=i.floorInfo.levelLayer,u=await l.queryFeatures(r);if(u?.features?.length>0){const e=u.features,t=l?.fieldsIndex.get(o)?.name||o,i=l?.fieldsIndex.get(a)?.name||a,r=l?.fieldsIndex.get(n)?.name||n,f=l?.fieldsIndex.get(d)?.name||d,p=l?.fieldsIndex.get(h)?.name||h,y=l?.fieldsIndex.get(c)?.name||c;t&&i&&r&&f&&p&&y&&e.forEach(e=>{const l=e.attributes,o=l[t],a=l[i],n=l[r],d=l[f],h=l[p],c=l[y];o&&a&&n&&d&&"number"==typeof h&&"number"==typeof c&&s.levelsInfo.push({id:o,facilityId:a,longName:n,shortName:d,levelNumber:h,verticalOrder:c})})}return s}_registerWidget(e){e?.registerComponent(this)}_unregisterWidget(e){e?.unregisterComponent(this)}_watchSearchResults(e){e?.on("select-result-floor",e=>{const t=this.getLevel(e);t&&this.level!==e&&(this.level=e,this.setFloors(t))})}async _setInitialViewState(e){if(this.view)try{await this.view.when(),await this._setFilterLayers();const t=await this._getFilterFeatures();if(!t)return;if(this.filterFeatures=t,!this.hasFacilities||!this.hasLevels)return void console.error("Facilities and Levels are required for the Floor Filter widget");if(this.hasMultipleSites||(this.filterMenuType="facility"),this.facility&&this.level){this.filterMenuType="facility";const e=this.getFacility(this.facility),t=this.getLevel(this.level);this.site||(this.site=e?.siteId||void 0),this.setFloors(t)}else if(this.facility&&!this.level){this.filterMenuType="facility";const e=this.getFacility(this.facility),t=this.getBaseLevel(e);this.site||(this.site=e?.siteId||void 0),this.level=t?.id||void 0,this.setFloors(t)}else if(!this.facility&&this.level){this.filterMenuType="facility";const e=this.getLevel(this.level),t=this.getFacility(e?.facilityId);this.facility=t?.id||void 0,this.site||(this.site=t?.siteId||void 0),this.setFloors(e)}else if(!this.site||this.facility||this.level){if(!e||!p(e))return void this.setFloors(null);const t=e?.widgets?.floorFilter;if(!t)return void this.setFloors(null);t.site&&!this.site&&(this.site=t.site,this.filterMenuType="facility"),this.setFloors(null)}else this.filterMenuType="site",this.setFloors(null)}catch(t){console.error("Couldn't retrieve sites, facilities, and levels",t)}}_callOverride(e,t){this._override(e,t)}async _updateFloorFilterFromMap(e){if(!e||!p(e))return;await(this.view?.when());const t=e?.widgets?.floorFilter;t&&(this._isOverridden("enabled")||(this.enabled=t.enabled),this._isOverridden("longNames")||(this.longNames=t.longNames),this._isOverridden("minimized")||(this.minimized=t.minimized),this._isOverridden("pinnedLevels")||(this.pinnedLevels=t.pinnedLevels),this._isOverridden("site")||(this.site=t.site),this._isOverridden("facility")||(this.facility=t.facility),this._isOverridden("level")||(this.level=t.level))}_computeViewAllModeFloors(e){const{filterFeatures:t}=this;if(e.floorInfo?.viewAllMode&&this.hasLevels&&this.hasFacilities&&"base-floors"===this.filterMode){const{level:i,facility:s}=this,r=[];t.levels.levelsInfo.forEach(e=>{const{id:t,facilityId:l}=e;s&&l===s?i&&t===i&&r.push(t):r.push(t)}),e.floorInfo.viewAllLevelIds=new l(r)}}};e([h({value:!1})],m.prototype,"enabled",null),e([h({value:void 0})],m.prototype,"facility",null),e([h({value:null})],m.prototype,"filterFeatures",null),e([h({value:null})],m.prototype,"filterLayers",null),e([h()],m.prototype,"filterMenuOpen",void 0),e([h()],m.prototype,"filterMenuType",void 0),e([h()],m.prototype,"filterMode",void 0),e([h({readOnly:!0,value:"belowSelected"})],m.prototype,"floorVisibilityMode",null),e([h()],m.prototype,"hasFacilities",null),e([h()],m.prototype,"hasLevels",null),e([h()],m.prototype,"hasMultipleSites",null),e([h({readOnly:!0})],m.prototype,"isNormalMode",null),e([h({value:void 0})],m.prototype,"level",null),e([h({value:!1})],m.prototype,"longNames",null),e([h()],m.prototype,"levelsExpanded",void 0),e([h({value:!1})],m.prototype,"minimized",null),e([h({value:!1})],m.prototype,"pinnedLevels",null),e([h()],m.prototype,"searchTerm",void 0),e([h({readOnly:!0})],m.prototype,"selectedVerticalOrder",null),e([h({value:void 0})],m.prototype,"site",null),e([h({readOnly:!0})],m.prototype,"state",null),e([h({readOnly:!0,value:!1})],m.prototype,"useVerticalOrder",null),e([h()],m.prototype,"view",void 0),e([h()],m.prototype,"_viewHeightBreakpoint",void 0),e([h()],m.prototype,"_viewWidthBreakpoint",void 0),e([h()],m.prototype,"updateWebDocument",null),m=e([c("esri.widgets.FloorFilter.FloorFilterViewModel")],m);const F=m;export{F as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import{createTask as i}from"../../core/asyncUtils.js";import l from"../../core/Collection.js";import s from"../../core/Error.js";import r from"../../core/Logger.js";import{throwIfAborted as o}from"../../core/promiseUtils.js";import{watch as a,initial as n,syncAndInitial as c}from"../../core/reactiveUtils.js";import{Milliseconds as h}from"../../core/time.js";import{isBlobProtocol as d}from"../../core/urlUtils.js";import{property as f,subclass as u}from"../../core/accessorSupport/decorators.js";import y from"../../geometry/Polygon.js";import p from"../../webdoc/Widgets.js";import v from"../../webdoc/widgets/FloorFilter.js";import{isWebMap as m}from"../../webmap/utils.js";import{GoTo as g}from"../support/GoTo.js";function F(e){return"esri.WebScene"===e.declaredClass}let w=class extends(g(t)){constructor(e){super(e),this.filterMenuOpen=!1,this.filterMenuType="site",this.filterMode="base-floors",this.levelsExpanded=!0,this.searchTerm=null,this.view=null,this._updateFloorFilterTask=null,this._viewHeightBreakpoint=null,this._viewWidthBreakpoint=null}initialize(){this.addHandles([a(()=>this.view?.map,e=>{null!=this._updateFloorFilterTask&&(this._updateFloorFilterTask.abort(),this._updateFloorFilterTask=null),this._updateFloorFilterTask=i(async t=>{await this._updateFloorFilterFromMap(e),o(t),this._setInitialViewState(e)})},n),a(()=>this.view,(e,t)=>{this._unregisterWidget(t),this._registerWidget(e),this._watchSearchResults(e)},c),a(()=>this.view?.widthBreakpoint??null,e=>{this._viewWidthBreakpoint=e}),a(()=>this.view?.heightBreakpoint??null,e=>{this._viewHeightBreakpoint=e}),a(()=>this.facility,()=>{this.getOverlays()}),a(()=>this.level,e=>this._updateMediaLayer(e))])}destroy(){if(this._unregisterWidget(this.view),this.mediaLayer&&this.view?.map.remove(this.mediaLayer),this.overlaysByLevel){for(const e of this.overlaysByLevel.values()){const t=e.image.image;d(t)&&URL.revokeObjectURL(t)}this.overlaysByFacility?.clear(),this.overlaysByLevel.clear()}this.view=null,null!=this._updateFloorFilterTask&&(this._updateFloorFilterTask.abort(),this._updateFloorFilterTask=null)}set enabled(e){this._callOverride("enabled",e)}set facility(e){if(e&&this._isOverridden("facility")){const t=this.getFacility(e);this.hasMultipleSites&&(this.site=t?.siteId||null)}this._callOverride("facility",e)}set filterFeatures(e){this._callOverride("filterFeatures",e)}set filterLayers(e){this._callOverride("filterLayers",e)}get floorVisibilityMode(){return this.view&&F(this.view?.map)?this.view.map.widgets?.floorFilter?.floorVisibilityMode??"belowSelected":"belowSelected"}get hasFacilities(){return null!=this.filterLayers?.facilityLayer&&this.filterFeatures?.facilities?.facilitiesInfo?.length>0}get hasLevels(){return null!=this.filterLayers?.levelLayer&&this.filterFeatures?.levels?.levelsInfo?.length>0}get hasMultipleSites(){return null!=this.filterLayers?.siteLayer&&this.filterFeatures?.sites?.sitesInfo?.length>1}get isNormalMode(){let e=!0;const t=this._viewWidthBreakpoint;return"xsmall"!==this._viewHeightBreakpoint&&"xsmall"!==t||(e=!1),e}set level(e){if(!e)return this._callOverride("level",e),this.facility=null,this.site=null,void this.setFloors(null);let t=null,i=null;const l=e?.split("--");if(l?.length>1&&"all"===l[0]?(i=l[1],t={id:e,facilityId:i,shortName:null,longName:null,levelNumber:null,verticalOrder:null}):(t=this.getLevel(e),i=t?.facilityId??null),this.level!==e||this.isNormalMode||this.levelsExpanded)t&&this.hasFacilities&&this.hasLevels?(this.facility=i,this.hasMultipleSites&&(this.site=this.getFacility(i)?.siteId||null),this.setFloors(t)):this._isOverridden("level")&&(this.facility=null,this.site=null,this.hasMultipleSites&&(this.filterMenuType="site"),this.setFloors(null)),this._callOverride("level",e);else{const e=this.getFacilityLevels(i);e?.length>1&&(this.levelsExpanded=!0)}}set longNames(e){this._callOverride("longNames",e)}set minimized(e){this._callOverride("minimized",e)}set pinnedLevels(e){this._callOverride("pinnedLevels",e)}get selectedVerticalOrder(){if(m(this.view?.map)){const e=this.view.map.resourceInfo;return e?.widgets?.floorFilter?.selectedVerticalOrder??null}return null}set site(e){this._callOverride("site",e)}get state(){return this.view&&this.filterFeatures&&this.hasFacilities&&this.hasLevels?"ready":this.view&&!this.filterFeatures?"loading":"disabled"}get useVerticalOrder(){return null!=this.view?.map&&(!(!m(this.view?.map)&&!F(this.view.map))&&(this.view.map.widgets?.floorFilter?.useVerticalOrder??!1))}filterFacilities(e){let t=e;this.searchTerm&&(this.searchTerm=this.searchTerm.trim(),t=e.filter(e=>{const{name:t}=e;return t.toLowerCase().includes(this.searchTerm?.toLowerCase())})),this.site&&(t=t.filter(e=>e.siteId===this.site));return t.sort((e,t)=>{const i=e.name,l=t.name;return i.localeCompare(l,void 0,{sensitivity:"base"})})}filterSites(e){let t=e;this.searchTerm&&(this.searchTerm=this.searchTerm.trim(),t=e.filter(e=>{const{name:t}=e;return t.toLowerCase().includes(this.searchTerm?.toLowerCase())}));return t.sort((e,t)=>{const i=e.name,l=t.name;return i.localeCompare(l,void 0,{sensitivity:"base"})})}getBaseLevel(e){const t=this.filterFeatures?.levels?.levelsInfo;let i=null;if(e){const{id:l}=e;if(t&&t.length>0&&(t.forEach(e=>{0===e.verticalOrder&&e.facilityId===l&&(i=e)}),!i)){let e=null;t.forEach(t=>{t.facilityId===l&&(e?(t.verticalOrder??0)>=0?null!=e.verticalOrder&&(e.verticalOrder<0||(t.verticalOrder??0)<e.verticalOrder)&&(e=t):null!=e.verticalOrder&&null!=t.verticalOrder&&e.verticalOrder<0&&t.verticalOrder>e.verticalOrder&&(e=t):e=t)}),e&&(i=e)}}return i}getFacility(e){return this.filterFeatures?.facilities?.facilitiesInfo?.find(t=>t.id===e)??null}getFacilityLevels(e){if(!e||!this.filterFeatures?.levels?.levelsInfo)return[];return this.filterFeatures.levels.levelsInfo.filter(t=>t.facilityId===e).sort((e,t)=>{const i=e.verticalOrder??0,l=t.verticalOrder??0;return i>l?-1:i===l?0:1})}getLevel(e){return this.filterFeatures?.levels?.levelsInfo?.find(t=>t.id===e)??null}async getOverlays(e=!1){const{facility:t,level:i,mediaLayer:s,overlaysByFacility:r,overlaysByLevel:o,view:a}=this;if(!m(a?.map)||!s)return;const n=s?.source;if(n.elements.removeAll(),t?.length&&(!r?.has(t)||e)){r?.set(t,new l);const e=a.map.floorInfo?.levelLayer?.layerId,i=a.map.findLayerById(e??"");if(!i||"2d"!==a.type)return;const s=await this._getAttachments(i,t),{default:n}=await(import("../../request.js")),c=Object.keys(s).map(async e=>{const l=s[e],a=l.find(e=>"application/json"===e.contentType);if(!a?.url)return;const c=new URL(a.url);i.gdbVersion?.length&&c.searchParams.set("gdbVersion",i.gdbVersion);const{data:h}=await n(c.toString(),{responseType:"json"}),d=l.find(e=>e.name===h.name),f=d?.url??"";if(f?.length>0){const e=new URL(f);e.searchParams.delete("token"),i.gdbVersion?.length&&e.searchParams.set("gdbVersion",i.gdbVersion);const{default:l}=await(import("../../layers/support/ControlPointsGeoreference.js")),s=l.fromJSON(h.georeference),n=await this.toImageElement(e.toString(),s,h.opacity,h.clipImage,h.geometry);await n.load();const c={...h,attachments:[a,d],facilityId:t,image:n,source:JSON.stringify(h),url:e.toString()};o?.set(c.levelId,c),r?.get(t)?.push(c)}});await Promise.all(c)}this._updateMediaLayer(i)}getSite(e){return this.filterFeatures?.sites?.sitesInfo?.find(t=>t.id===e)??null}async goTo(e){const{view:t}=this;if(!t||!e)return;const{geometry:i}=e;if(i?.extent){const e=e=>{this.callGoTo({target:e,options:{duration:h(1e3),easing:"quad-in-out-coast"}})};if(i.hasZ&&i.spatialReference?.vcsWkid!==t.spatialReference?.vcsWkid){const{projectIsLoaded:l,projectLoad:s,projectExecute:r}=await(import("../../geometry/operators/projectOperator.js"));l()||await s();const o=r(i.extent,t.spatialReference.clone(),{zConversionDisabled:!0});o&&e(o)}else e(i.extent)}}setFloors(e){const{view:t}=this;t&&(t?.map?.allLayers?.forEach(e=>{"feature"===e.type&&this._computeViewAllModeFloors(e)}),t.floors=new l(this._computeFloors(e)))}async toImageElement(e,t,i,l,s){const{default:o}=await(import("../../layers/support/ImageElement.js")),{facility:a}=this,n=()=>new o({image:e,georeference:t,opacity:i});if(!l)return n();try{const l=s?y.fromJSON(s):this.getFacility(a)?.geometry;if(null==l)return n();const r=await this._polygonToImagePixels(t,l),{pixelRings:c,width:h,height:d}=r,f=await this._imagePolygonToBlob(e,c,h,d);return new o({image:URL.createObjectURL(f),georeference:t,opacity:i})}catch(c){return r.getLogger(this).warn(`Unable to clip image; using full image instead: ${c.message}`,c),n()}}updateWebDocument(e){if(m(e)||F(e)){const t={enabled:this.enabled,longNames:this.longNames,minimized:this.minimized,pinnedLevels:this.pinnedLevels,site:this.site??null,facility:this.facility??null,level:this.level??null,useVerticalOrder:this.useVerticalOrder,selectedVerticalOrder:this.selectedVerticalOrder};F(e)&&(t.floorVisibilityMode=this.floorVisibilityMode);const i=new v(t);e.widgets??=new p,e.widgets.floorFilter=i}}_computeFloors(e){if("single-floor"===this.filterMode)this._computeSingleFloor(e);else if("base-floors"===this.filterMode)return"3d"===this.view?.type?this._computeBaseFloors3D(e):this._computeBaseFloors(e);return this._computeEmptyFloors()}_computeSingleFloor(e){if(!e)return this._computeEmptyFloors();const t=[];if("all"===e?.id){this.getFacilityLevels(e.facilityId).forEach(e=>{e.id&&t.push(e.id)})}else e&&t.push(e.id);return t}_computeBaseFloors(e){const t=this.filterFeatures?.levels?.levelsInfo;if(!t?.length)return this._computeEmptyFloors();const i=[];if("all"===e?.id){this.getFacilityLevels(e.facilityId).forEach(e=>{e.id&&i.push(e.id)})}else e&&i.push(e.id);const l=e?.facilityId,s=e?.verticalOrder,r=(e,t)=>{0===e&&i.push(t)};return t.forEach(e=>{const{id:t,facilityId:o,verticalOrder:a}=e;l||i.includes(t)?o===l||i.includes(t)||(this.useVerticalOrder?a===s&&i.push(t):r(a,t)):r(a,t)}),i}_computeBaseFloors3D(e){const t=this.filterFeatures?.levels?.levelsInfo;if(!t?.length)return this._computeEmptyFloors();const i=[],l=e?.id.split("--")??[],s=l?.length>1&&"all"===l[0];if(s){this.getFacilityLevels(e?.facilityId).forEach(e=>{e.id&&i.push(e.id)})}else e&&i.push(e.id);const r=e?.facilityId,o=e?.verticalOrder;return t.forEach(e=>{const{id:t,facilityId:l,verticalOrder:a}=e;if(r||i.includes(t)){if(!i.includes(t)){const{floorVisibilityMode:e,useVerticalOrder:n}=this,c=a<=o;l!==r?(s||!n||"selectedOnly"===e&&a===o||"belowSelected"===e&&c)&&i.push(t):"belowSelected"===e&&c&&i.push(t)}}else i.push(t)}),i}_computeEmptyFloors(){return[]}async _setFilterLayers(){const{view:e}=this;if(e&&!this._isOverridden("filterLayers")){if(!m(e.map)&&!F(e.map))throw new s("floorfilter:unsupported-map","Map must be a webmap or webscene");{const t=e.map,i=t?.allLayers;if(i?.items?.length>0){const e={siteLayer:null,facilityLayer:null,levelLayer:null},l=t.floorInfo?.siteLayer?.layerId,s=t.floorInfo?.facilityLayer?.layerId,r=t.floorInfo?.levelLayer?.layerId,o=t.floorInfo?.siteLayer?.sublayerId||t.floorInfo?.facilityLayer?.sublayerId||t.floorInfo?.levelLayer?.sublayerId;if(!s||!r)return;const a=i.items.filter(e=>"feature"===e.type||"scene"===e.type),n=i.items.filter(e=>"map-image"===e.type);if(n?.length>0&&o){await Promise.all(n.map(e=>e.load()));const i=t.floorInfo?.siteLayer?.sublayerId,o=t.floorInfo?.facilityLayer?.sublayerId,a=t.floorInfo?.levelLayer?.sublayerId;n.forEach(t=>{const n=t.id,c=t?.allSublayers,h=c?.items;(n===l||n===s||n===r)&&h?.length>0&&c.items.forEach(t=>{const s=t.id;n===l&&s===i?e.siteLayer=t:s===o?e.facilityLayer=t:s===a&&(e.levelLayer=t)})})}a?.length>0&&a.forEach(t=>{const i=t.id;i===l?e.siteLayer=t:i===s?e.facilityLayer=t:i===r&&(e.levelLayer=t)}),this.filterLayers=e}}}}async _getAttachments(e,t){const{view:i}=this;if(m(i?.map)){const l=i.map.floorInfo,{facilityIdField:s}=l?.levelLayer??{};if(e&&"2d"===i.type&&t?.length>0&&e.capabilities.data.supportsAttachment)return e.queryAttachments({returnMetadata:!0,where:`${s} = '${t}'`})}return{}}async _getFilterFeatures(){if(this._isOverridden("filterFeatures"))return this.filterFeatures;const[e,t,i]=await Promise.all([this._getSites(),this._getFacilities(),this._getLevels()]);return{sites:e,facilities:t,levels:i}}async _getSites(){const e={sitesInfo:[]},{filterLayers:t,view:i}=this,l=i?.map,{siteLayer:s}=t;if(!s||!l?.floorInfo?.siteLayer)return e;const r=s.createQuery();r.returnGeometry=!0,r.outFields=["*"],r.returnZ=!0,"type"in s&&"scene"===s.type&&(r.multipatchOption="xyFootprint");const{siteIdField:o,nameField:a}=l.floorInfo.siteLayer,n=await s.queryFeatures(r);if(n?.features?.length>0){const t=n.features,i=s?.fieldsIndex.get(o)?.name||o,l=s?.fieldsIndex.get(a)?.name||a;null!=i&&null!=l&&t.forEach(t=>{const s=t.attributes,r=t.geometry,o=s[i],a=s[l];o&&a&&e.sitesInfo.push({id:o,name:a,geometry:r})})}return e}async _getFacilities(){const{filterLayers:e,view:t}=this,i=t?.map,{facilityLayer:l}=e,s={facilitiesInfo:[]};if(!l||!i?.floorInfo?.facilityLayer)return s;const r=l.createQuery();r.returnGeometry=!0,r.outFields=["*"],r.returnZ=!0,"type"in l&&"scene"===l.type&&(r.multipatchOption="xyFootprint");const{facilityIdField:o,siteIdField:a,nameField:n}=i.floorInfo.facilityLayer,c=await l.queryFeatures(r);if(c?.features?.length>0){const e=c.features,t=l?.fieldsIndex.get(o)?.name||o,i=l?.fieldsIndex.get(a)?.name||a,r=l?.fieldsIndex.get(n)?.name||n;t&&i&&r&&e.forEach(e=>{const l=e.attributes,o=e.geometry,a=l[t],n=l[i],c=l[r];a&&c&&s.facilitiesInfo.push({id:a,siteId:n,name:c,geometry:o})})}return s}async _getLevels(){const{filterLayers:e,view:t}=this,i=t?.map,{levelLayer:l}=e,s={levelsInfo:[]};if(!l||!i?.floorInfo?.levelLayer)return s;const r=l.createQuery();r.returnGeometry=!0,r.outFields=["*"],r.returnZ=!0;const{levelIdField:o,facilityIdField:a,longNameField:n,shortNameField:c,levelNumberField:h,verticalOrderField:d}=i.floorInfo.levelLayer,f=await l.queryFeatures(r);if(f?.features?.length>0){const e=f.features,t=l?.fieldsIndex.get(o)?.name||o,i=l?.fieldsIndex.get(a)?.name||a,r=l?.fieldsIndex.get(n)?.name||n,u=l?.fieldsIndex.get(c)?.name||c,y=l?.fieldsIndex.get(h)?.name||h,p=l?.fieldsIndex.get(d)?.name||d;t&&i&&r&&u&&y&&p&&e.forEach(e=>{const l=e.attributes,o=l[t],a=l[i],n=l[r],c=l[u],h=l[y],d=l[p];o&&a&&n&&c&&"number"==typeof h&&"number"==typeof d&&s.levelsInfo.push({id:o,facilityId:a,longName:n,shortName:c,levelNumber:h,verticalOrder:d})})}return s}async _imagePolygonToBlob(e,t,i,l){const{getImageData:r}=await(import("../../core/imageUtils.js")),o=await r(e),a=new OffscreenCanvas(i,l),n=a.getContext("2d");if(!n)throw new s("floorfilter:floor-plan-overlay","Unable to obtain a rendering context from the canvas.");const c=new Path2D;for(const s of t)if(!(s.length<3)){c.moveTo(s[0].x,s[0].y);for(let e=1;e<s.length;e++)c.lineTo(s[e].x,s[e].y);c.closePath()}return n.save(),n.clip(c,"evenodd"),n.drawImage(o,0,0,i,l),n.restore(),await a.convertToBlob({type:"image/png"})}async _polygonToImagePixels(e,t){if("control-points"!==e?.type)throw new s("floorfilter:floor-plan-overlay","Expected a `ControlPointsGeoreference`.");const{default:i}=await(import("../../geometry/Point.js"));return{pixelRings:t.rings.map(l=>l.map(([l,r])=>{const o=new i({x:l,y:r,spatialReference:t.spatialReference}),a=e.toSource(o);if(!a)throw new s("floorfilter:floor-plan-overlay","toSource() returned null; check spatial references and projectOperator.");return{x:a.x,y:a.y}})),width:e.width,height:e.height}}_registerWidget(e){e?.registerComponent(this)}_unregisterWidget(e){e?.unregisterComponent(this)}_watchSearchResults(e){e?.on("select-result-floor",e=>{const t=this.getLevel(e);t&&this.level!==e&&(this.level=e,this.setFloors(t))})}async _setInitialViewState(e){if(this.view)try{await this.view.when(),await this._setFilterLayers();const t=await this._getFilterFeatures();if(!t)return;if(this.filterFeatures=t,!this.hasFacilities||!this.hasLevels)return void r.getLogger(this).error("Facilities and Levels are required for the Floor Filter widget");if(this.hasMultipleSites||(this.filterMenuType="facility"),this.facility&&this.level){this.filterMenuType="facility";const e=this.getFacility(this.facility),t=this.getLevel(this.level);this.site||(this.site=e?.siteId||void 0),this.setFloors(t)}else if(this.facility&&!this.level){this.filterMenuType="facility";const e=this.getFacility(this.facility),t=this.getBaseLevel(e);this.site||(this.site=e?.siteId||void 0),this.level=t?.id||void 0,this.setFloors(t)}else if(!this.facility&&this.level){this.filterMenuType="facility";const e=this.getLevel(this.level),t=this.getFacility(e?.facilityId);this.facility=t?.id||void 0,this.site||(this.site=t?.siteId||void 0),this.setFloors(e)}else if(!this.site||this.facility||this.level){if(!e||!m(e))return void this.setFloors(null);const t=e?.widgets?.floorFilter;if(!t)return void this.setFloors(null);t.site&&!this.site&&(this.site=t.site,this.filterMenuType="facility"),this.setFloors(null)}else this.filterMenuType="site",this.setFloors(null);if("feature"===this.filterLayers?.levelLayer?.type&&this.filterLayers.levelLayer.capabilities.data.supportsAttachment&&null==this.mediaLayer){const{default:e}=await(import("../../layers/MediaLayer.js"));this.mediaLayer=new e({title:"floor-filter-media-layer",listMode:"hide",blendMode:"normal",spatialReference:this.view.spatialReference.clone()}),this.overlaysByFacility=new Map,this.overlaysByLevel=new Map,this.view.map.add(this.mediaLayer),this.getOverlays(!0)}}catch(t){r.getLogger(this).error("Couldn't retrieve sites, facilities, and levels",t)}}_callOverride(e,t){this._override(e,t)}async _updateFloorFilterFromMap(e){if(!e||!m(e))return;await(this.view?.when());const t=e?.widgets?.floorFilter;t&&(this._isOverridden("enabled")||(this.enabled=t.enabled),this._isOverridden("longNames")||(this.longNames=t.longNames),this._isOverridden("minimized")||(this.minimized=t.minimized),this._isOverridden("pinnedLevels")||(this.pinnedLevels=t.pinnedLevels),this._isOverridden("site")||(this.site=t.site),this._isOverridden("facility")||(this.facility=t.facility),this._isOverridden("level")||(this.level=t.level))}_updateMediaLayer(e){const{mediaLayer:t,overlaysByLevel:i}=this;if(t&&i&&e?.length){const l=t.source;l.elements.removeAll(),!0===i.get(e)?.visible&&l.elements.push(i.get(e)?.image)}}_computeViewAllModeFloors(e){const{filterFeatures:t}=this;if(e.floorInfo?.viewAllMode&&this.hasLevels&&this.hasFacilities&&"base-floors"===this.filterMode){const{level:i,facility:s}=this,r=[];t.levels.levelsInfo.forEach(e=>{const{id:t,facilityId:l}=e;s&&l===s?i&&t===i&&r.push(t):r.push(t)}),e.floorInfo.viewAllLevelIds=new l(r)}}};e([f({value:!1})],w.prototype,"enabled",null),e([f({value:void 0})],w.prototype,"facility",null),e([f({value:null})],w.prototype,"filterFeatures",null),e([f({value:null})],w.prototype,"filterLayers",null),e([f()],w.prototype,"filterMenuOpen",void 0),e([f()],w.prototype,"filterMenuType",void 0),e([f()],w.prototype,"filterMode",void 0),e([f({readOnly:!0,value:"belowSelected"})],w.prototype,"floorVisibilityMode",null),e([f()],w.prototype,"hasFacilities",null),e([f()],w.prototype,"hasLevels",null),e([f()],w.prototype,"hasMultipleSites",null),e([f({readOnly:!0})],w.prototype,"isNormalMode",null),e([f({value:void 0})],w.prototype,"level",null),e([f({value:!1})],w.prototype,"longNames",null),e([f()],w.prototype,"levelsExpanded",void 0),e([f()],w.prototype,"mediaLayer",void 0),e([f({value:!1})],w.prototype,"minimized",null),e([f()],w.prototype,"overlaysByFacility",void 0),e([f()],w.prototype,"overlaysByLevel",void 0),e([f({value:!1})],w.prototype,"pinnedLevels",null),e([f()],w.prototype,"searchTerm",void 0),e([f({readOnly:!0})],w.prototype,"selectedVerticalOrder",null),e([f({value:void 0})],w.prototype,"site",null),e([f({readOnly:!0})],w.prototype,"state",null),e([f({readOnly:!0,value:!1})],w.prototype,"useVerticalOrder",null),e([f()],w.prototype,"view",void 0),e([f()],w.prototype,"_viewHeightBreakpoint",void 0),e([f()],w.prototype,"_viewWidthBreakpoint",void 0),e([f()],w.prototype,"updateWebDocument",null),w=e([u("esri.widgets.FloorFilter.FloorFilterViewModel")],w);const L=w;export{L as default};
|