@juun-roh/cesium-utils 0.0.12 → 0.0.13
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/dist/chunk-6ED7EA2J.js +1 -0
- package/dist/collection/index.d.cts +1 -1
- package/dist/collection/index.d.ts +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/viewer/index.cjs +1 -1
- package/dist/viewer/index.d.cts +19 -50
- package/dist/viewer/index.d.ts +19 -50
- package/dist/viewer/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-P5SZETSP.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Viewer as w}from"cesium";import{defined as f}from"cesium";function d(t,i){if(f(t)&&f(i)){let{camera:n}=t;i.camera.position=n.positionWC.clone(),i.camera.direction=n.directionWC.clone(),i.camera.up=n.upWC.clone()}}function _(t,i,n){let o={baseLayerPicker:t.baseLayerPicker!==void 0,geocoder:t.geocoder!==void 0,homeButton:t.homeButton!==void 0,sceneModePicker:t.sceneModePicker!==void 0,timeline:t.timeline!==void 0,navigationHelpButton:t.navigationHelpButton!==void 0,animation:t.animation!==void 0,fullscreenButton:t.fullscreenButton!==void 0,shouldAnimate:t.clock.shouldAnimate,terrainProvider:t.terrainProvider,requestRenderMode:t.scene.requestRenderMode,infoBox:t.infoBox!==void 0},e=new w(i,{...o,...n});d(t,e);let a=t.imageryLayers;e.imageryLayers.removeAll();for(let r=0;r<a.length;r++){let E=a.get(r);e.imageryLayers.addImageryProvider(E.imageryProvider,r)}e.clock.startTime=t.clock.startTime.clone(),e.clock.stopTime=t.clock.stopTime.clone(),e.clock.currentTime=t.clock.currentTime.clone(),e.clock.multiplier=t.clock.multiplier,e.clock.clockStep=t.clock.clockStep,e.clock.clockRange=t.clock.clockRange,e.clock.shouldAnimate=t.clock.shouldAnimate,e.scene.globe.enableLighting=t.scene.globe.enableLighting,e.scene.globe.depthTestAgainstTerrain=t.scene.globe.depthTestAgainstTerrain,e.scene.screenSpaceCameraController.enableCollisionDetection=t.scene.screenSpaceCameraController.enableCollisionDetection;let l=t.scene.screenSpaceCameraController.tiltEventTypes;l&&(e.scene.screenSpaceCameraController.tiltEventTypes=Array.isArray(l)?[...l]:l);let s=t.scene.screenSpaceCameraController.zoomEventTypes;return s&&(e.scene.screenSpaceCameraController.zoomEventTypes=Array.isArray(s)?[...s]:s),e}import{Cartesian3 as h,ClassificationType as m,Color as v,defined as T,Entity as c,GroundPrimitive as u,HeightReference as p,PolygonGraphics as C,PolygonHierarchy as V,PolylineGraphics as g,RectangleGraphics as R}from"cesium";var y=class t{static instances=new Map;_defaultColor=v.YELLOW.withAlpha(.5);_highlightEntity;_viewerEntities;constructor(i){this._viewerEntities=i.entities,this._highlightEntity=this._viewerEntities.add(new c({id:`highlight-entity-${Math.random().toString(36).substring(2)}`,show:!1}))}static getInstance(i){let n=i.container;return t.instances.has(n)||t.instances.set(n,new t(i)),t.instances.get(n)}static releaseInstance(i){let n=i.container,o=t.instances.get(n);o&&(o.hide(),o._highlightEntity&&i.entities.remove(o._highlightEntity),t.instances.delete(n))}show(i,n=this._defaultColor,o=!1){if(!(!T(i)||!this._highlightEntity)){this._clearGeometries();try{if(i instanceof c)this._update(i,n,o);else if(i.id instanceof c)this._update(i.id,n,o);else if(i.primitive instanceof u)this._update(i.primitive,n,o);else return;return this._highlightEntity.show=!0,this._highlightEntity}catch(e){console.error("Failed to highlight object:",e);return}}}_clearGeometries(){this._highlightEntity&&(this._highlightEntity.polygon=void 0,this._highlightEntity.polyline=void 0,this._highlightEntity.rectangle=void 0)}_update(i,n,o){if(this._highlightEntity){if(i instanceof c){if(i.polygon)if(o){let e=i.polygon.hierarchy?.getValue();if(e&&e.positions){let a;e.positions.length>0&&!h.equals(e.positions[0],e.positions[e.positions.length-1])?a=[...e.positions,e.positions[0]]:a=e.positions,this._highlightEntity.polyline=new g({positions:a,material:n,width:2,clampToGround:i.polygon.heightReference?.getValue()===p.CLAMP_TO_GROUND})}}else{let e=i.polygon.hierarchy?.getValue();e&&(this._highlightEntity.polygon=new C({hierarchy:e,material:n,heightReference:i.polygon.heightReference?.getValue(),classificationType:i.polygon.classificationType?.getValue()||m.BOTH}))}else if(i.polyline){let e=i.polyline.positions?.getValue();if(e){let a=i.polyline.width?.getValue()||2;this._highlightEntity.polyline=new g({positions:e,material:n,width:a+2,clampToGround:i.polyline.clampToGround?.getValue()})}}else if(i.rectangle)if(o){let e=i.rectangle.coordinates?.getValue();if(e){let a=[h.fromRadians(e.west,e.north),h.fromRadians(e.east,e.north),h.fromRadians(e.east,e.south),h.fromRadians(e.west,e.south),h.fromRadians(e.west,e.north)];this._highlightEntity.polyline=new g({positions:a,material:n,width:2,clampToGround:i.rectangle.heightReference?.getValue()===p.CLAMP_TO_GROUND})}}else{let e=i.rectangle.coordinates?.getValue();e&&(this._highlightEntity.rectangle=new R({coordinates:e,material:n,heightReference:i.rectangle.heightReference?.getValue()}))}}else if(i instanceof u){let e=i.geometryInstances,a=Array.isArray(e)?e[0]:e;if(!a||!a.geometry.attributes.position)return;let l=a.geometry.attributes.position.values,s=[];for(let r=0;r<l.length;r+=3)s.push(new h(l[r],l[r+1],l[r+2]));o?this._highlightEntity.polyline=new g({positions:s,material:n,width:2,clampToGround:!0}):this._highlightEntity.polygon=new C({hierarchy:new V(s),material:n,heightReference:p.CLAMP_TO_GROUND,classificationType:m.BOTH})}}}hide(){this._highlightEntity&&(this._highlightEntity.show=!1)}get defaultColor(){return this._defaultColor}set defaultColor(i){this._defaultColor=i}get highlightEntity(){return this._highlightEntity}};export{d as a,_ as b,y as c};
|
|
@@ -25,7 +25,7 @@ type NonFunction<T> = {
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* @class
|
|
28
|
-
*
|
|
28
|
+
* A wrapper class that enhances Cesium collection objects with tagging functionality.
|
|
29
29
|
* This class provides a consistent API for working with different types of Cesium collections
|
|
30
30
|
* and allows grouping and manipulating collection items by custom tags.
|
|
31
31
|
*
|
|
@@ -25,7 +25,7 @@ type NonFunction<T> = {
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* @class
|
|
28
|
-
*
|
|
28
|
+
* A wrapper class that enhances Cesium collection objects with tagging functionality.
|
|
29
29
|
* This class provides a consistent API for working with different types of Cesium collections
|
|
30
30
|
* and allows grouping and manipulating collection items by custom tags.
|
|
31
31
|
*
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var L=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var $=(n,e)=>{for(var t in e)L(n,t,{get:e[t],enumerable:!0})},W=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of j(e))!B.call(n,i)&&i!==t&&L(n,i,{get:()=>e[i],enumerable:!(r=Y(e,i))||r.enumerable});return n};var q=n=>W(L({},"__esModule",{value:!0}),n);var U={};$(U,{Collection:()=>T,Highlight:()=>A,HybridTerrainProvider:()=>R,TerrainArea:()=>f,TerrainAreaCollection:()=>y,TerrainVisualizer:()=>p,cloneViewer:()=>H,computeRectangle:()=>E,isGetterOnly:()=>C,syncCamera:()=>P});module.exports=q(U);var _=require("cesium");var d=require("cesium");var p=class n{_viewer;_collection;_terrainProvider;_visible=!1;_level=15;_tileCoordinatesLayer;_colors=new Map([["custom",d.Color.RED],["default",d.Color.BLUE],["fallback",d.Color.GRAY],["grid",d.Color.YELLOW]]);constructor(e,t){this._viewer=e,this._collection=new T({collection:e.entities,tag:n.tag.default}),t&&(t.colors&&Object.entries(t.colors).forEach(([r,i])=>{this._colors.set(r,i)}),t.tile!==void 0&&(this._visible=t.tile),t.activeLevel!==void 0&&(this._level=t.activeLevel),t.terrainProvider&&this.setTerrainProvider(t.terrainProvider))}setTerrainProvider(e){this._terrainProvider=e,this.update()}update(){this.clear(),this._visible&&this.show(this._level)}clear(){this._collection.remove(this._collection.tags)}show(e=15){if(!this._terrainProvider)return;this._collection.remove(n.tag.grid),this._level=e;let t=this._terrainProvider.tilingScheme;this._tileCoordinatesLayer||(this._tileCoordinatesLayer=this._viewer.imageryLayers.addImageryProvider(new d.TileCoordinatesImageryProvider({tilingScheme:t,color:d.Color.YELLOW})));let r=(a,l,c)=>{if(this._terrainProvider){for(let h of this._terrainProvider.terrainAreas)if(h.contains(a,l,c))return h.isCustom?this._colors.get("custom")||d.Color.RED:this._colors.get("default")||d.Color.BLUE;if(this._terrainProvider.getTileDataAvailable(a,l,c))return this._colors.get("default")||d.Color.BLUE}return this._colors.get("fallback")||d.Color.TRANSPARENT},i=this._getVisibleRectangle();if(!i)return;function o(a){return a&&Number.isFinite(a.west)&&Number.isFinite(a.south)&&Number.isFinite(a.east)&&Number.isFinite(a.north)&&a.west<=a.east&&a.south<=a.north}if(!o(i)){console.warn("Invalid visible rectangle detected, skipping grid display");return}try{let a=t.positionToTileXY(d.Rectangle.northwest(i),e),l=t.positionToTileXY(d.Rectangle.southeast(i),e);if(!a||!l)return;let c=100,h=Math.min(l.x-a.x+1,c),m=Math.min(l.y-a.y+1,c);for(let u=a.x;u<=a.x+h-1;u++)for(let g=a.y;g<=a.y+m-1;g++)try{let v=t.tileXYToRectangle(u,g,e);if(!o(v)){console.warn(`Invalid rectangle for tile (${u}, ${g}, ${e}), skipping`);continue}let I=r(u,g,e),b=n.createRectangle(v,I.withAlpha(.3));b.properties?.addProperty("tileX",u),b.properties?.addProperty("tileY",g),b.properties?.addProperty("tileLevel",e),this._collection.add(b,n.tag.grid)}catch(v){console.warn(`Error creating tile (${u}, ${g}, ${e}): ${v.message}`);continue}console.log("\u{1F680} ~ TerrainVisualizer ~ showGrid ~ collection:",this._collection),this._visible=!0}catch(a){console.error("Error displaying tile grid:",a)}}hide(){this._collection.remove(n.tag.grid),this._tileCoordinatesLayer&&(this._viewer.imageryLayers.remove(this._tileCoordinatesLayer),this._tileCoordinatesLayer=void 0),this._visible=!1}setColors(e){Object.entries(e).forEach(([t,r])=>{this._colors.set(t,r)}),this.update()}flyTo(e,t){let{rectangle:r}=e;this._viewer.camera.flyTo({destination:r,...t,complete:()=>{this._visible&&this.update()}})}_getVisibleRectangle(){return this._viewer.camera.computeViewRectangle()}get level(){return this._level}set level(e){this._level=e,this._visible&&this.update()}get visible(){return this._visible}get collection(){return this._collection}get viewer(){return this._viewer}get colors(){return this._colors}get terrainProvider(){return this._terrainProvider}};(r=>{r.tag={default:"Terrain Visualizer",boundary:"Terrain Visualizer Boundary",grid:"Terrain Visualizer Tile Grid"};function e(i,o){return new d.Entity({rectangle:{coordinates:i,material:o,heightReference:d.HeightReference.CLAMP_TO_GROUND}})}r.createRectangle=e;function t(i,o,a){let l=a?.tag||"terrain_area_visualization",c=a?.color||d.Color.RED,h=a?.maxTilesToShow||100,m=a?.show??!0,u=a?.alpha||.7,g=a?.tileAlpha||.2,v=new T({collection:o.entities,tag:l}),{rectangle:I}=i;if(v.add(r.createRectangle(I,c.withAlpha(u)),l),m&&i.tileRanges.size>0){let{tilingScheme:b}=i.terrainProvider,x=0;i.tileRanges.forEach((w,z)=>{for(let M=w.start.x;M<=w.end.x&&x<h;M++)for(let O=w.start.y;O<=w.end.y&&x<h;O++){let F=b.tileXYToRectangle(M,O,z);v.add(e(F,c.withAlpha(g)),`${l}_tile`),x++}})}return v}r.visualize=t})(p||={});function C(n,e){let t=!1,r=Object.getOwnPropertyDescriptor(n,e);if(!r){let i=Object.getPrototypeOf(n);for(;i&&!r;)r=Object.getOwnPropertyDescriptor(i,e),i=Object.getPrototypeOf(i)}return r&&r.get&&!r.set&&(t=!0),t}var V=class n{static symbol=Symbol("cesium-item-tag");tag;collection;_valuesCache=null;_tagMap=new Map;_eventListeners=new Map;constructor({collection:e,tag:t}){this.tag=t||"default",this.collection=e}[Symbol.iterator](){return this.values[Symbol.iterator]()}_emit(e,t){let r=this._eventListeners.get(e);if(r){let i={type:e,...t};r.forEach(o=>o(i))}}_addToTagMap(e,t){this._tagMap.has(t)||this._tagMap.set(t,new Set),this._tagMap.get(t)?.add(e)}_removeFromTagMap(e){let t=e[n.symbol],r=this._tagMap.get(t);r&&(r.delete(e),r.size===0&&this._tagMap.delete(t))}_invalidateCache(){this._valuesCache=null}addEventListener(e,t){return this._eventListeners.has(e)||this._eventListeners.set(e,new Set),this._eventListeners.get(e)?.add(t),this}removeEventListener(e,t){return this._eventListeners.get(e)?.delete(t),this}add(e,t=this.tag,r){return Array.isArray(e)?e.forEach(i=>{this.add(i,t)}):(Object.defineProperty(e,n.symbol,{value:t,enumerable:!1,writable:!0,configurable:!0}),this.collection.add(e,r),this._addToTagMap(e,t),this._invalidateCache(),this._emit("add",{items:[e],tag:t})),e}contains(e){if(typeof e=="object")return this.collection.contains(e);let t=this._tagMap.get(e);return!!t&&t.size>0}remove(e){if(typeof e=="object"&&!Array.isArray(e)){let i=this.collection.remove(e);return i&&(this._removeFromTagMap(e),this._invalidateCache(),this._emit("remove",{items:[e]})),i}if(Array.isArray(e)){if(e.length===0)return!1;let i=!1;for(let o of e)this.remove(o)&&(i=!0);return i}let t=this.get(e);if(t.length===0)return!1;let r=!1;for(let i of t)this.remove(i)&&(r=!0);return r}removeAll(){this._tagMap.clear(),this.collection.removeAll(),this._invalidateCache(),this._emit("clear")}get values(){if(this.collection instanceof _.EntityCollection)return this.collection.values;{let e=[];for(let t=0;t<this.collection.length;t++)e.push(this.collection.get(t));return e}}get length(){return this.values?.length||0}get(e){let t=this._tagMap.get(e);return t?Array.from(t):[]}first(e){let t=this._tagMap.get(e);if(t&&t.size>0)return t.values().next().value}get tags(){return Array.from(this._tagMap.keys())}update(e,t){let r=this.get(e);for(let i of r)this._removeFromTagMap(i),Object.defineProperty(i,n.symbol,{value:t,enumerable:!1,writable:!0,configurable:!0}),this._addToTagMap(i,t);return r.length>0&&this._emit("update",{items:r,tag:t}),r.length}show(e){let t=this.get(e);for(let r of t)(0,_.defined)(r.show)&&(r.show=!0);return this}hide(e){let t=this.get(e);for(let r of t)(0,_.defined)(r.show)&&(r.show=!1);return this}toggle(e){let t=this.get(e);for(let r of t)(0,_.defined)(r.show)&&(r.show=!r.show);return this}setProperty(e,t,r=this.tag){let i=this.get(r);for(let o of i)if(e in o&&typeof o[e]!="function"){if(C(o,e))throw Error(`setProperty(${o}, ${e}) failed; The property is readonly.`);o[e]=t}return this}filter(e,t){return(t?this.get(t):this.values).filter(e)}forEach(e,t){(t?this.get(t):this.values).forEach((i,o)=>e(i,o))}map(e,t){return(t?this.get(t):this.values).map(e)}find(e,t){return(t?this.get(t):this.values).find(e)}},T=V;var k=require("cesium");var N=require("cesium");var S=require("cesium");function E(n,e){if(e.size===0)return new S.Rectangle;let t=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY,a=Array.from(e.keys()),l=Math.min(...a),c=e.get(l);if(c){let{start:h,end:m}=c,u=n.tileXYToRectangle(h.x,h.y,l),g=n.tileXYToRectangle(m.x,m.y,l);t=Math.min(u.west,t),r=Math.min(g.south,r),i=Math.max(g.east,i),o=Math.max(u.north,o)}return new S.Rectangle(t,r,i,o)}var f=class{_terrainProvider;_rectangle;_tileRanges;_ready=!1;_credit;_isCustom;constructor(e){this._terrainProvider=e.terrainProvider,this._tileRanges=e.tileRanges,this._credit=e.credit||"custom",this._isCustom=e.isCustom!==void 0?e.isCustom:!0,this._rectangle=E(e.terrainProvider.tilingScheme,e.tileRanges),e.tileRanges.forEach((t,r)=>{this._terrainProvider.availability?.addAvailableTileRange(r,t.start.x,t.start.y,t.end.x,t.end.y)}),this._ready=!0}contains(e,t,r){if(this._tileRanges.size===0||!this._tileRanges.has(r))return!1;let i=this._tileRanges.get(r);return e>=i.start.x&&e<=i.end.x&&t>=i.start.y&&t<=i.end.y}requestTileGeometry(e,t,r,i){if(!(!this._ready||!this.contains(e,t,r)))return this._terrainProvider.requestTileGeometry(e,t,r,i)}getTileDataAvailable(e,t,r){if(this._tileRanges.size===0||!this._tileRanges.has(r))return!1;let i=this._tileRanges.get(r);return e>=i.start.x&&e<=i.end.x&&t>=i.start.y&&t<=i.end.y}get isCustom(){return this._isCustom}get credit(){return this._credit}get terrainProvider(){return this._terrainProvider}get tileRanges(){return this._tileRanges}get rectangle(){return this._rectangle}get ready(){return this._ready}};(e=>{async function n(t,r,i){let o=i?.credit||"custom",a=await N.CesiumTerrainProvider.fromUrl(t,{...i,credit:o});return new e({terrainProvider:a,tileRanges:r,credit:o})}e.fromUrl=n})(f||={});var y=class extends Array{add(e){if(Array.isArray(e)){for(let r of e)this.add(r);return this.length}let t;return e instanceof f?t=e:t=new f(e),this.push(t)}remove(e){if(Array.isArray(e))return e.forEach(r=>this.remove(r)),this;let t=this.indexOf(e);return t>=0&&this.splice(t,1),this}removeAll(){this.length=0}};var R=class{_terrainAreas=new y;_terrainProvider;_fallbackProvider;_tilingScheme;_ready=!1;_availability;constructor(e){this._terrainProvider=e.terrainProvider,this._fallbackProvider=e.fallbackProvider||new k.EllipsoidTerrainProvider,this._tilingScheme=e.terrainProvider.tilingScheme,this._terrainAreas=new y(...e.terrainAreas),this._availability=e.terrainProvider.availability,this._ready=!0}get ready(){return this._ready}get tilingScheme(){return this._tilingScheme}get availability(){return this._availability}get terrainAreas(){return[...this._terrainAreas]}get defaultProvider(){return this._terrainProvider}get fallbackProvider(){return this._fallbackProvider}get credit(){return this._terrainProvider?.credit}get errorEvent(){return this._terrainProvider.errorEvent}get hasWaterMask(){return this._terrainProvider.hasWaterMask}get hasVertexNormals(){return this._terrainProvider.hasVertexNormals}loadTileDataAvailability(e,t,r){return this._terrainProvider.loadTileDataAvailability(e,t,r)}getLevelMaximumGeometricError(e){return this._terrainProvider.getLevelMaximumGeometricError(e)}requestTileGeometry(e,t,r,i){if(this._ready){for(let o of this._terrainAreas)if(o.contains(e,t,r))return o.requestTileGeometry(e,t,r,i);return this._terrainProvider.getTileDataAvailable(e,t,r)?this._terrainProvider.requestTileGeometry(e,t,r,i):this._fallbackProvider.requestTileGeometry(e,t,r,i)}}getTileDataAvailable(e,t,r){for(let i of this._terrainAreas)if(i.contains(e,t,r))return i.getTileDataAvailable(e,t,r);return this._terrainProvider.getTileDataAvailable(e,t,r)}};var D=require("cesium");var G=require("cesium");function P(n,e){if((0,G.defined)(n)&&(0,G.defined)(e)){let{camera:t}=n;e.camera.position=t.positionWC.clone(),e.camera.direction=t.directionWC.clone(),e.camera.up=t.upWC.clone()}}function H(n,e,t){let r={baseLayerPicker:n.baseLayerPicker!==void 0,geocoder:n.geocoder!==void 0,homeButton:n.homeButton!==void 0,sceneModePicker:n.sceneModePicker!==void 0,timeline:n.timeline!==void 0,navigationHelpButton:n.navigationHelpButton!==void 0,animation:n.animation!==void 0,fullscreenButton:n.fullscreenButton!==void 0,shouldAnimate:n.clock.shouldAnimate,terrainProvider:n.terrainProvider,requestRenderMode:n.scene.requestRenderMode,infoBox:n.infoBox!==void 0},i=new D.Viewer(e,{...r,...t});P(n,i);let o=n.imageryLayers;i.imageryLayers.removeAll();for(let c=0;c<o.length;c++){let h=o.get(c);i.imageryLayers.addImageryProvider(h.imageryProvider,c)}i.clock.startTime=n.clock.startTime.clone(),i.clock.stopTime=n.clock.stopTime.clone(),i.clock.currentTime=n.clock.currentTime.clone(),i.clock.multiplier=n.clock.multiplier,i.clock.clockStep=n.clock.clockStep,i.clock.clockRange=n.clock.clockRange,i.clock.shouldAnimate=n.clock.shouldAnimate,i.scene.globe.enableLighting=n.scene.globe.enableLighting,i.scene.globe.depthTestAgainstTerrain=n.scene.globe.depthTestAgainstTerrain,i.scene.screenSpaceCameraController.enableCollisionDetection=n.scene.screenSpaceCameraController.enableCollisionDetection;let a=n.scene.screenSpaceCameraController.tiltEventTypes;a&&(i.scene.screenSpaceCameraController.tiltEventTypes=Array.isArray(a)?[...a]:a);let l=n.scene.screenSpaceCameraController.zoomEventTypes;return l&&(i.scene.screenSpaceCameraController.zoomEventTypes=Array.isArray(l)?[...l]:l),i}var s=require("cesium");var A=class n{static instances=new Map;_activeHighlights=new Set;_defaultColor=s.Color.YELLOW.withAlpha(.5);_entities;_cache=new Map;constructor(e){this._entities=new T({collection:e.entities,tag:"Highlights"})}static getInstance(e){let t=e.container;return n.instances.has(t)||n.instances.set(t,new n(e)),n.instances.get(t)}static releaseInstance(e){let t=e.container,r=n.instances.get(t);r&&(r.removeAll(),n.instances.delete(t))}add(e,t=this._defaultColor,r=!1){if(!(0,s.defined)(e))return;let i;if(e instanceof s.Entity){if(this._activeHighlights.has(e))return e;i=this._createEntity(e,t,r)}else if(e.id instanceof s.Entity){if(this._activeHighlights.has(e.id))return e.id;i=this._createEntity(e.id,t,r)}else if(e.primitive instanceof s.GroundPrimitive){if(this._activeHighlights.has(e.primitive))return e.primitive;i=this._createEntity(e.primitive,t,r)}return i&&(this._entities.add(i),this._activeHighlights.add(i),i.isShowing||(i.show=!0)),i}remove(e){this._entities.remove(e),this._activeHighlights.delete(e)}removeAll(){this._entities.remove("Highlights"),this._activeHighlights.clear()}_getGeometryId(e){if(e.id)return`geometry-${e.id}`;if(e.geometry?.attributes?.position){let t=e.geometry.attributes.position.values,r="",i=Math.min(9,t.length/4);for(let o=0;o<i;o++)r+=Math.round(t[o])+"-";if(t.length>i*2)for(let o=t.length-i;o<t.length;o++)r+=Math.round(t[o]);return`geometry-hash-${r}`}}_createEntity(e,t,r=!1){try{if(e instanceof s.GroundPrimitive){let i=e.geometryInstances,o=Array.isArray(i)?i[0]:i;if(!o||!o.geometry.attributes.position)return;let a=this._getGeometryId(o),l=o.geometry.attributes.position.values,c=[];for(let m=0;m<l.length;m+=3)c.push(new s.Cartesian3(l[m],l[m+1],l[m+2]));let h={id:a?`highlight-${a}`:void 0};return r?h.polyline={positions:c,width:2,material:t,clampToGround:!0}:h.polygon={hierarchy:new s.PolygonHierarchy(c),material:t,classificationType:s.ClassificationType.BOTH,heightReference:s.HeightReference.CLAMP_TO_GROUND},new s.Entity(h)}else{let i={id:`highlight-${e.id}`};if(e.polygon)r?i.polyline={positions:e.polygon.hierarchy?.getValue().positions,material:t,width:2,clampToGround:e.polygon.heightReference?.getValue()===s.HeightReference.CLAMP_TO_GROUND}:i.polygon={hierarchy:e.polygon.hierarchy?.getValue(),material:t,classificationType:s.ClassificationType.BOTH};else if(e.polyline)i.polyline={positions:e.polyline.positions,width:(e.polyline.width?.getValue()||2)+2,material:t,clampToGround:e.polyline.clampToGround};else if(e.rectangle)if(r){let o=e.rectangle.coordinates?.getValue();if(o){let a=[s.Cartesian3.fromRadians(o.west,o.north),s.Cartesian3.fromRadians(o.east,o.north),s.Cartesian3.fromRadians(o.east,o.south),s.Cartesian3.fromRadians(o.west,o.south),s.Cartesian3.fromRadians(o.west,o.north)];i.polyline={positions:a,material:t,width:2,clampToGround:e.rectangle.heightReference?.getValue()===s.HeightReference.CLAMP_TO_GROUND}}}else i.rectangle=e.rectangle.clone(),i.rectangle.material=t;else return;return new s.Entity(i)}}catch(i){console.error("Failed to create highlight Entity:",i);return}}get activeHighlights(){return Array.from(this._activeHighlights)}get defaultColor(){return this._defaultColor}set defaultColor(e){this._defaultColor=e}get entities(){return this._entities}};
|
|
1
|
+
"use strict";var M=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var W=(n,e)=>{for(var t in e)M(n,t,{get:e[t],enumerable:!0})},q=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Y(e))!B.call(n,i)&&i!==t&&M(n,i,{get:()=>e[i],enumerable:!(r=F(e,i))||r.enumerable});return n};var $=n=>q(M({},"__esModule",{value:!0}),n);var U={};W(U,{Collection:()=>b,Highlight:()=>w,HybridTerrainProvider:()=>R,TerrainArea:()=>m,TerrainAreaCollection:()=>v,TerrainVisualizer:()=>p,cloneViewer:()=>k,computeRectangle:()=>E,isGetterOnly:()=>C,syncCamera:()=>P});module.exports=$(U);var _=require("cesium");var h=require("cesium");var p=class n{_viewer;_collection;_terrainProvider;_visible=!1;_level=15;_tileCoordinatesLayer;_colors=new Map([["custom",h.Color.RED],["default",h.Color.BLUE],["fallback",h.Color.GRAY],["grid",h.Color.YELLOW]]);constructor(e,t){this._viewer=e,this._collection=new b({collection:e.entities,tag:n.tag.default}),t&&(t.colors&&Object.entries(t.colors).forEach(([r,i])=>{this._colors.set(r,i)}),t.tile!==void 0&&(this._visible=t.tile),t.activeLevel!==void 0&&(this._level=t.activeLevel),t.terrainProvider&&this.setTerrainProvider(t.terrainProvider))}setTerrainProvider(e){this._terrainProvider=e,this.update()}update(){this.clear(),this._visible&&this.show(this._level)}clear(){this._collection.remove(this._collection.tags)}show(e=15){if(!this._terrainProvider)return;this._collection.remove(n.tag.grid),this._level=e;let t=this._terrainProvider.tilingScheme;this._tileCoordinatesLayer||(this._tileCoordinatesLayer=this._viewer.imageryLayers.addImageryProvider(new h.TileCoordinatesImageryProvider({tilingScheme:t,color:h.Color.YELLOW})));let r=(a,l,c)=>{if(this._terrainProvider){for(let d of this._terrainProvider.terrainAreas)if(d.contains(a,l,c))return d.isCustom?this._colors.get("custom")||h.Color.RED:this._colors.get("default")||h.Color.BLUE;if(this._terrainProvider.getTileDataAvailable(a,l,c))return this._colors.get("default")||h.Color.BLUE}return this._colors.get("fallback")||h.Color.TRANSPARENT},i=this._getVisibleRectangle();if(!i)return;function o(a){return a&&Number.isFinite(a.west)&&Number.isFinite(a.south)&&Number.isFinite(a.east)&&Number.isFinite(a.north)&&a.west<=a.east&&a.south<=a.north}if(!o(i)){console.warn("Invalid visible rectangle detected, skipping grid display");return}try{let a=t.positionToTileXY(h.Rectangle.northwest(i),e),l=t.positionToTileXY(h.Rectangle.southeast(i),e);if(!a||!l)return;let c=100,d=Math.min(l.x-a.x+1,c),y=Math.min(l.y-a.y+1,c);for(let u=a.x;u<=a.x+d-1;u++)for(let g=a.y;g<=a.y+y-1;g++)try{let f=t.tileXYToRectangle(u,g,e);if(!o(f)){console.warn(`Invalid rectangle for tile (${u}, ${g}, ${e}), skipping`);continue}let I=r(u,g,e),T=n.createRectangle(f,I.withAlpha(.3));T.properties?.addProperty("tileX",u),T.properties?.addProperty("tileY",g),T.properties?.addProperty("tileLevel",e),this._collection.add(T,n.tag.grid)}catch(f){console.warn(`Error creating tile (${u}, ${g}, ${e}): ${f.message}`);continue}console.log("\u{1F680} ~ TerrainVisualizer ~ showGrid ~ collection:",this._collection),this._visible=!0}catch(a){console.error("Error displaying tile grid:",a)}}hide(){this._collection.remove(n.tag.grid),this._tileCoordinatesLayer&&(this._viewer.imageryLayers.remove(this._tileCoordinatesLayer),this._tileCoordinatesLayer=void 0),this._visible=!1}setColors(e){Object.entries(e).forEach(([t,r])=>{this._colors.set(t,r)}),this.update()}flyTo(e,t){let{rectangle:r}=e;this._viewer.camera.flyTo({destination:r,...t,complete:()=>{this._visible&&this.update()}})}_getVisibleRectangle(){return this._viewer.camera.computeViewRectangle()}get level(){return this._level}set level(e){this._level=e,this._visible&&this.update()}get visible(){return this._visible}get collection(){return this._collection}get viewer(){return this._viewer}get colors(){return this._colors}get terrainProvider(){return this._terrainProvider}};(r=>{r.tag={default:"Terrain Visualizer",boundary:"Terrain Visualizer Boundary",grid:"Terrain Visualizer Tile Grid"};function e(i,o){return new h.Entity({rectangle:{coordinates:i,material:o,heightReference:h.HeightReference.CLAMP_TO_GROUND}})}r.createRectangle=e;function t(i,o,a){let l=a?.tag||"terrain_area_visualization",c=a?.color||h.Color.RED,d=a?.maxTilesToShow||100,y=a?.show??!0,u=a?.alpha||.7,g=a?.tileAlpha||.2,f=new b({collection:o.entities,tag:l}),{rectangle:I}=i;if(f.add(r.createRectangle(I,c.withAlpha(u)),l),y&&i.tileRanges.size>0){let{tilingScheme:T}=i.terrainProvider,x=0;i.tileRanges.forEach((A,z)=>{for(let V=A.start.x;V<=A.end.x&&x<d;V++)for(let O=A.start.y;O<=A.end.y&&x<d;O++){let j=T.tileXYToRectangle(V,O,z);f.add(e(j,c.withAlpha(g)),`${l}_tile`),x++}})}return f}r.visualize=t})(p||={});function C(n,e){let t=!1,r=Object.getOwnPropertyDescriptor(n,e);if(!r){let i=Object.getPrototypeOf(n);for(;i&&!r;)r=Object.getOwnPropertyDescriptor(i,e),i=Object.getPrototypeOf(i)}return r&&r.get&&!r.set&&(t=!0),t}var L=class n{static symbol=Symbol("cesium-item-tag");tag;collection;_valuesCache=null;_tagMap=new Map;_eventListeners=new Map;constructor({collection:e,tag:t}){this.tag=t||"default",this.collection=e}[Symbol.iterator](){return this.values[Symbol.iterator]()}_emit(e,t){let r=this._eventListeners.get(e);if(r){let i={type:e,...t};r.forEach(o=>o(i))}}_addToTagMap(e,t){this._tagMap.has(t)||this._tagMap.set(t,new Set),this._tagMap.get(t)?.add(e)}_removeFromTagMap(e){let t=e[n.symbol],r=this._tagMap.get(t);r&&(r.delete(e),r.size===0&&this._tagMap.delete(t))}_invalidateCache(){this._valuesCache=null}addEventListener(e,t){return this._eventListeners.has(e)||this._eventListeners.set(e,new Set),this._eventListeners.get(e)?.add(t),this}removeEventListener(e,t){return this._eventListeners.get(e)?.delete(t),this}add(e,t=this.tag,r){return Array.isArray(e)?e.forEach(i=>{this.add(i,t)}):(Object.defineProperty(e,n.symbol,{value:t,enumerable:!1,writable:!0,configurable:!0}),this.collection.add(e,r),this._addToTagMap(e,t),this._invalidateCache(),this._emit("add",{items:[e],tag:t})),e}contains(e){if(typeof e=="object")return this.collection.contains(e);let t=this._tagMap.get(e);return!!t&&t.size>0}remove(e){if(typeof e=="object"&&!Array.isArray(e)){let i=this.collection.remove(e);return i&&(this._removeFromTagMap(e),this._invalidateCache(),this._emit("remove",{items:[e]})),i}if(Array.isArray(e)){if(e.length===0)return!1;let i=!1;for(let o of e)this.remove(o)&&(i=!0);return i}let t=this.get(e);if(t.length===0)return!1;let r=!1;for(let i of t)this.remove(i)&&(r=!0);return r}removeAll(){this._tagMap.clear(),this.collection.removeAll(),this._invalidateCache(),this._emit("clear")}get values(){if(this.collection instanceof _.EntityCollection)return this.collection.values;{let e=[];for(let t=0;t<this.collection.length;t++)e.push(this.collection.get(t));return e}}get length(){return this.values?.length||0}get(e){let t=this._tagMap.get(e);return t?Array.from(t):[]}first(e){let t=this._tagMap.get(e);if(t&&t.size>0)return t.values().next().value}get tags(){return Array.from(this._tagMap.keys())}update(e,t){let r=this.get(e);for(let i of r)this._removeFromTagMap(i),Object.defineProperty(i,n.symbol,{value:t,enumerable:!1,writable:!0,configurable:!0}),this._addToTagMap(i,t);return r.length>0&&this._emit("update",{items:r,tag:t}),r.length}show(e){let t=this.get(e);for(let r of t)(0,_.defined)(r.show)&&(r.show=!0);return this}hide(e){let t=this.get(e);for(let r of t)(0,_.defined)(r.show)&&(r.show=!1);return this}toggle(e){let t=this.get(e);for(let r of t)(0,_.defined)(r.show)&&(r.show=!r.show);return this}setProperty(e,t,r=this.tag){let i=this.get(r);for(let o of i)if(e in o&&typeof o[e]!="function"){if(C(o,e))throw Error(`setProperty(${o}, ${e}) failed; The property is readonly.`);o[e]=t}return this}filter(e,t){return(t?this.get(t):this.values).filter(e)}forEach(e,t){(t?this.get(t):this.values).forEach((i,o)=>e(i,o))}map(e,t){return(t?this.get(t):this.values).map(e)}find(e,t){return(t?this.get(t):this.values).find(e)}},b=L;var D=require("cesium");var N=require("cesium");var S=require("cesium");function E(n,e){if(e.size===0)return new S.Rectangle;let t=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY,a=Array.from(e.keys()),l=Math.min(...a),c=e.get(l);if(c){let{start:d,end:y}=c,u=n.tileXYToRectangle(d.x,d.y,l),g=n.tileXYToRectangle(y.x,y.y,l);t=Math.min(u.west,t),r=Math.min(g.south,r),i=Math.max(g.east,i),o=Math.max(u.north,o)}return new S.Rectangle(t,r,i,o)}var m=class{_terrainProvider;_rectangle;_tileRanges;_ready=!1;_credit;_isCustom;constructor(e){this._terrainProvider=e.terrainProvider,this._tileRanges=e.tileRanges,this._credit=e.credit||"custom",this._isCustom=e.isCustom!==void 0?e.isCustom:!0,this._rectangle=E(e.terrainProvider.tilingScheme,e.tileRanges),e.tileRanges.forEach((t,r)=>{this._terrainProvider.availability?.addAvailableTileRange(r,t.start.x,t.start.y,t.end.x,t.end.y)}),this._ready=!0}contains(e,t,r){if(this._tileRanges.size===0||!this._tileRanges.has(r))return!1;let i=this._tileRanges.get(r);return e>=i.start.x&&e<=i.end.x&&t>=i.start.y&&t<=i.end.y}requestTileGeometry(e,t,r,i){if(!(!this._ready||!this.contains(e,t,r)))return this._terrainProvider.requestTileGeometry(e,t,r,i)}getTileDataAvailable(e,t,r){if(this._tileRanges.size===0||!this._tileRanges.has(r))return!1;let i=this._tileRanges.get(r);return e>=i.start.x&&e<=i.end.x&&t>=i.start.y&&t<=i.end.y}get isCustom(){return this._isCustom}get credit(){return this._credit}get terrainProvider(){return this._terrainProvider}get tileRanges(){return this._tileRanges}get rectangle(){return this._rectangle}get ready(){return this._ready}};(e=>{async function n(t,r,i){let o=i?.credit||"custom",a=await N.CesiumTerrainProvider.fromUrl(t,{...i,credit:o});return new e({terrainProvider:a,tileRanges:r,credit:o})}e.fromUrl=n})(m||={});var v=class extends Array{add(e){if(Array.isArray(e)){for(let r of e)this.add(r);return this.length}let t;return e instanceof m?t=e:t=new m(e),this.push(t)}remove(e){if(Array.isArray(e))return e.forEach(r=>this.remove(r)),this;let t=this.indexOf(e);return t>=0&&this.splice(t,1),this}removeAll(){this.length=0}};var R=class{_terrainAreas=new v;_terrainProvider;_fallbackProvider;_tilingScheme;_ready=!1;_availability;constructor(e){this._terrainProvider=e.terrainProvider,this._fallbackProvider=e.fallbackProvider||new D.EllipsoidTerrainProvider,this._tilingScheme=e.terrainProvider.tilingScheme,this._terrainAreas=new v(...e.terrainAreas),this._availability=e.terrainProvider.availability,this._ready=!0}get ready(){return this._ready}get tilingScheme(){return this._tilingScheme}get availability(){return this._availability}get terrainAreas(){return[...this._terrainAreas]}get defaultProvider(){return this._terrainProvider}get fallbackProvider(){return this._fallbackProvider}get credit(){return this._terrainProvider?.credit}get errorEvent(){return this._terrainProvider.errorEvent}get hasWaterMask(){return this._terrainProvider.hasWaterMask}get hasVertexNormals(){return this._terrainProvider.hasVertexNormals}loadTileDataAvailability(e,t,r){return this._terrainProvider.loadTileDataAvailability(e,t,r)}getLevelMaximumGeometricError(e){return this._terrainProvider.getLevelMaximumGeometricError(e)}requestTileGeometry(e,t,r,i){if(this._ready){for(let o of this._terrainAreas)if(o.contains(e,t,r))return o.requestTileGeometry(e,t,r,i);return this._terrainProvider.getTileDataAvailable(e,t,r)?this._terrainProvider.requestTileGeometry(e,t,r,i):this._fallbackProvider.requestTileGeometry(e,t,r,i)}}getTileDataAvailable(e,t,r){for(let i of this._terrainAreas)if(i.contains(e,t,r))return i.getTileDataAvailable(e,t,r);return this._terrainProvider.getTileDataAvailable(e,t,r)}};var H=require("cesium");var G=require("cesium");function P(n,e){if((0,G.defined)(n)&&(0,G.defined)(e)){let{camera:t}=n;e.camera.position=t.positionWC.clone(),e.camera.direction=t.directionWC.clone(),e.camera.up=t.upWC.clone()}}function k(n,e,t){let r={baseLayerPicker:n.baseLayerPicker!==void 0,geocoder:n.geocoder!==void 0,homeButton:n.homeButton!==void 0,sceneModePicker:n.sceneModePicker!==void 0,timeline:n.timeline!==void 0,navigationHelpButton:n.navigationHelpButton!==void 0,animation:n.animation!==void 0,fullscreenButton:n.fullscreenButton!==void 0,shouldAnimate:n.clock.shouldAnimate,terrainProvider:n.terrainProvider,requestRenderMode:n.scene.requestRenderMode,infoBox:n.infoBox!==void 0},i=new H.Viewer(e,{...r,...t});P(n,i);let o=n.imageryLayers;i.imageryLayers.removeAll();for(let c=0;c<o.length;c++){let d=o.get(c);i.imageryLayers.addImageryProvider(d.imageryProvider,c)}i.clock.startTime=n.clock.startTime.clone(),i.clock.stopTime=n.clock.stopTime.clone(),i.clock.currentTime=n.clock.currentTime.clone(),i.clock.multiplier=n.clock.multiplier,i.clock.clockStep=n.clock.clockStep,i.clock.clockRange=n.clock.clockRange,i.clock.shouldAnimate=n.clock.shouldAnimate,i.scene.globe.enableLighting=n.scene.globe.enableLighting,i.scene.globe.depthTestAgainstTerrain=n.scene.globe.depthTestAgainstTerrain,i.scene.screenSpaceCameraController.enableCollisionDetection=n.scene.screenSpaceCameraController.enableCollisionDetection;let a=n.scene.screenSpaceCameraController.tiltEventTypes;a&&(i.scene.screenSpaceCameraController.tiltEventTypes=Array.isArray(a)?[...a]:a);let l=n.scene.screenSpaceCameraController.zoomEventTypes;return l&&(i.scene.screenSpaceCameraController.zoomEventTypes=Array.isArray(l)?[...l]:l),i}var s=require("cesium"),w=class n{static instances=new Map;_defaultColor=s.Color.YELLOW.withAlpha(.5);_highlightEntity;_viewerEntities;constructor(e){this._viewerEntities=e.entities,this._highlightEntity=this._viewerEntities.add(new s.Entity({id:`highlight-entity-${Math.random().toString(36).substring(2)}`,show:!1}))}static getInstance(e){let t=e.container;return n.instances.has(t)||n.instances.set(t,new n(e)),n.instances.get(t)}static releaseInstance(e){let t=e.container,r=n.instances.get(t);r&&(r.hide(),r._highlightEntity&&e.entities.remove(r._highlightEntity),n.instances.delete(t))}show(e,t=this._defaultColor,r=!1){if(!(!(0,s.defined)(e)||!this._highlightEntity)){this._clearGeometries();try{if(e instanceof s.Entity)this._update(e,t,r);else if(e.id instanceof s.Entity)this._update(e.id,t,r);else if(e.primitive instanceof s.GroundPrimitive)this._update(e.primitive,t,r);else return;return this._highlightEntity.show=!0,this._highlightEntity}catch(i){console.error("Failed to highlight object:",i);return}}}_clearGeometries(){this._highlightEntity&&(this._highlightEntity.polygon=void 0,this._highlightEntity.polyline=void 0,this._highlightEntity.rectangle=void 0)}_update(e,t,r){if(this._highlightEntity){if(e instanceof s.Entity){if(e.polygon)if(r){let i=e.polygon.hierarchy?.getValue();if(i&&i.positions){let o;i.positions.length>0&&!s.Cartesian3.equals(i.positions[0],i.positions[i.positions.length-1])?o=[...i.positions,i.positions[0]]:o=i.positions,this._highlightEntity.polyline=new s.PolylineGraphics({positions:o,material:t,width:2,clampToGround:e.polygon.heightReference?.getValue()===s.HeightReference.CLAMP_TO_GROUND})}}else{let i=e.polygon.hierarchy?.getValue();i&&(this._highlightEntity.polygon=new s.PolygonGraphics({hierarchy:i,material:t,heightReference:e.polygon.heightReference?.getValue(),classificationType:e.polygon.classificationType?.getValue()||s.ClassificationType.BOTH}))}else if(e.polyline){let i=e.polyline.positions?.getValue();if(i){let o=e.polyline.width?.getValue()||2;this._highlightEntity.polyline=new s.PolylineGraphics({positions:i,material:t,width:o+2,clampToGround:e.polyline.clampToGround?.getValue()})}}else if(e.rectangle)if(r){let i=e.rectangle.coordinates?.getValue();if(i){let o=[s.Cartesian3.fromRadians(i.west,i.north),s.Cartesian3.fromRadians(i.east,i.north),s.Cartesian3.fromRadians(i.east,i.south),s.Cartesian3.fromRadians(i.west,i.south),s.Cartesian3.fromRadians(i.west,i.north)];this._highlightEntity.polyline=new s.PolylineGraphics({positions:o,material:t,width:2,clampToGround:e.rectangle.heightReference?.getValue()===s.HeightReference.CLAMP_TO_GROUND})}}else{let i=e.rectangle.coordinates?.getValue();i&&(this._highlightEntity.rectangle=new s.RectangleGraphics({coordinates:i,material:t,heightReference:e.rectangle.heightReference?.getValue()}))}}else if(e instanceof s.GroundPrimitive){let i=e.geometryInstances,o=Array.isArray(i)?i[0]:i;if(!o||!o.geometry.attributes.position)return;let a=o.geometry.attributes.position.values,l=[];for(let c=0;c<a.length;c+=3)l.push(new s.Cartesian3(a[c],a[c+1],a[c+2]));r?this._highlightEntity.polyline=new s.PolylineGraphics({positions:l,material:t,width:2,clampToGround:!0}):this._highlightEntity.polygon=new s.PolygonGraphics({hierarchy:new s.PolygonHierarchy(l),material:t,heightReference:s.HeightReference.CLAMP_TO_GROUND,classificationType:s.ClassificationType.BOTH})}}}hide(){this._highlightEntity&&(this._highlightEntity.show=!1)}get defaultColor(){return this._defaultColor}set defaultColor(e){this._defaultColor=e}get highlightEntity(){return this._highlightEntity}};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as i,b as t,c as m,d as p}from"./chunk-OFZW33MB.js";import{a as
|
|
1
|
+
import{a as i,b as t,c as m,d as p}from"./chunk-OFZW33MB.js";import{a as r,b as o,c as e}from"./chunk-Q4LRNVAX.js";import{a as n,b as a,c as l}from"./chunk-6ED7EA2J.js";export{e as Collection,l as Highlight,p as HybridTerrainProvider,t as TerrainArea,m as TerrainAreaCollection,r as TerrainVisualizer,a as cloneViewer,i as computeRectangle,o as isGetterOnly,n as syncCamera};
|
package/dist/viewer/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var A=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var z=(n,e)=>{for(var t in e)A(n,t,{get:e[t],enumerable:!0})},B=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of G(e))!k.call(n,i)&&i!==t&&A(n,i,{get:()=>e[i],enumerable:!(r=S(e,i))||r.enumerable});return n};var $=n=>B(A({},"__esModule",{value:!0}),n);var j={};z(j,{Highlight:()=>C,cloneViewer:()=>M,syncCamera:()=>b});module.exports=$(j);var O=require("cesium");var R=require("cesium");function b(n,e){if((0,R.defined)(n)&&(0,R.defined)(e)){let{camera:t}=n;e.camera.position=t.positionWC.clone(),e.camera.direction=t.directionWC.clone(),e.camera.up=t.upWC.clone()}}function M(n,e,t){let r={baseLayerPicker:n.baseLayerPicker!==void 0,geocoder:n.geocoder!==void 0,homeButton:n.homeButton!==void 0,sceneModePicker:n.sceneModePicker!==void 0,timeline:n.timeline!==void 0,navigationHelpButton:n.navigationHelpButton!==void 0,animation:n.animation!==void 0,fullscreenButton:n.fullscreenButton!==void 0,shouldAnimate:n.clock.shouldAnimate,terrainProvider:n.terrainProvider,requestRenderMode:n.scene.requestRenderMode,infoBox:n.infoBox!==void 0},i=new O.Viewer(e,{...r,...t});b(n,i);let o=n.imageryLayers;i.imageryLayers.removeAll();for(let h=0;h<o.length;h++){let d=o.get(h);i.imageryLayers.addImageryProvider(d.imageryProvider,h)}i.clock.startTime=n.clock.startTime.clone(),i.clock.stopTime=n.clock.stopTime.clone(),i.clock.currentTime=n.clock.currentTime.clone(),i.clock.multiplier=n.clock.multiplier,i.clock.clockStep=n.clock.clockStep,i.clock.clockRange=n.clock.clockRange,i.clock.shouldAnimate=n.clock.shouldAnimate,i.scene.globe.enableLighting=n.scene.globe.enableLighting,i.scene.globe.depthTestAgainstTerrain=n.scene.globe.depthTestAgainstTerrain,i.scene.screenSpaceCameraController.enableCollisionDetection=n.scene.screenSpaceCameraController.enableCollisionDetection;let a=n.scene.screenSpaceCameraController.tiltEventTypes;a&&(i.scene.screenSpaceCameraController.tiltEventTypes=Array.isArray(a)?[...a]:a);let l=n.scene.screenSpaceCameraController.zoomEventTypes;return l&&(i.scene.screenSpaceCameraController.zoomEventTypes=Array.isArray(l)?[...l]:l),i}var s=require("cesium");var p=require("cesium");var c=require("cesium");var y=class n{_viewer;_collection;_terrainProvider;_visible=!1;_level=15;_tileCoordinatesLayer;_colors=new Map([["custom",c.Color.RED],["default",c.Color.BLUE],["fallback",c.Color.GRAY],["grid",c.Color.YELLOW]]);constructor(e,t){this._viewer=e,this._collection=new T({collection:e.entities,tag:n.tag.default}),t&&(t.colors&&Object.entries(t.colors).forEach(([r,i])=>{this._colors.set(r,i)}),t.tile!==void 0&&(this._visible=t.tile),t.activeLevel!==void 0&&(this._level=t.activeLevel),t.terrainProvider&&this.setTerrainProvider(t.terrainProvider))}setTerrainProvider(e){this._terrainProvider=e,this.update()}update(){this.clear(),this._visible&&this.show(this._level)}clear(){this._collection.remove(this._collection.tags)}show(e=15){if(!this._terrainProvider)return;this._collection.remove(n.tag.grid),this._level=e;let t=this._terrainProvider.tilingScheme;this._tileCoordinatesLayer||(this._tileCoordinatesLayer=this._viewer.imageryLayers.addImageryProvider(new c.TileCoordinatesImageryProvider({tilingScheme:t,color:c.Color.YELLOW})));let r=(a,l,h)=>{if(this._terrainProvider){for(let d of this._terrainProvider.terrainAreas)if(d.contains(a,l,h))return d.isCustom?this._colors.get("custom")||c.Color.RED:this._colors.get("default")||c.Color.BLUE;if(this._terrainProvider.getTileDataAvailable(a,l,h))return this._colors.get("default")||c.Color.BLUE}return this._colors.get("fallback")||c.Color.TRANSPARENT},i=this._getVisibleRectangle();if(!i)return;function o(a){return a&&Number.isFinite(a.west)&&Number.isFinite(a.south)&&Number.isFinite(a.east)&&Number.isFinite(a.north)&&a.west<=a.east&&a.south<=a.north}if(!o(i)){console.warn("Invalid visible rectangle detected, skipping grid display");return}try{let a=t.positionToTileXY(c.Rectangle.northwest(i),e),l=t.positionToTileXY(c.Rectangle.southeast(i),e);if(!a||!l)return;let h=100,d=Math.min(l.x-a.x+1,h),g=Math.min(l.y-a.y+1,h);for(let m=a.x;m<=a.x+d-1;m++)for(let u=a.y;u<=a.y+g-1;u++)try{let f=t.tileXYToRectangle(m,u,e);if(!o(f)){console.warn(`Invalid rectangle for tile (${m}, ${u}, ${e}), skipping`);continue}let w=r(m,u,e),v=n.createRectangle(f,w.withAlpha(.3));v.properties?.addProperty("tileX",m),v.properties?.addProperty("tileY",u),v.properties?.addProperty("tileLevel",e),this._collection.add(v,n.tag.grid)}catch(f){console.warn(`Error creating tile (${m}, ${u}, ${e}): ${f.message}`);continue}console.log("\u{1F680} ~ TerrainVisualizer ~ showGrid ~ collection:",this._collection),this._visible=!0}catch(a){console.error("Error displaying tile grid:",a)}}hide(){this._collection.remove(n.tag.grid),this._tileCoordinatesLayer&&(this._viewer.imageryLayers.remove(this._tileCoordinatesLayer),this._tileCoordinatesLayer=void 0),this._visible=!1}setColors(e){Object.entries(e).forEach(([t,r])=>{this._colors.set(t,r)}),this.update()}flyTo(e,t){let{rectangle:r}=e;this._viewer.camera.flyTo({destination:r,...t,complete:()=>{this._visible&&this.update()}})}_getVisibleRectangle(){return this._viewer.camera.computeViewRectangle()}get level(){return this._level}set level(e){this._level=e,this._visible&&this.update()}get visible(){return this._visible}get collection(){return this._collection}get viewer(){return this._viewer}get colors(){return this._colors}get terrainProvider(){return this._terrainProvider}};(r=>{r.tag={default:"Terrain Visualizer",boundary:"Terrain Visualizer Boundary",grid:"Terrain Visualizer Tile Grid"};function e(i,o){return new c.Entity({rectangle:{coordinates:i,material:o,heightReference:c.HeightReference.CLAMP_TO_GROUND}})}r.createRectangle=e;function t(i,o,a){let l=a?.tag||"terrain_area_visualization",h=a?.color||c.Color.RED,d=a?.maxTilesToShow||100,g=a?.show??!0,m=a?.alpha||.7,u=a?.tileAlpha||.2,f=new T({collection:o.entities,tag:l}),{rectangle:w}=i;if(f.add(r.createRectangle(w,h.withAlpha(m)),l),g&&i.tileRanges.size>0){let{tilingScheme:v}=i.terrainProvider,E=0;i.tileRanges.forEach((_,V)=>{for(let I=_.start.x;I<=_.end.x&&E<d;I++)for(let P=_.start.y;P<=_.end.y&&E<d;P++){let H=v.tileXYToRectangle(I,P,V);f.add(e(H,h.withAlpha(u)),`${l}_tile`),E++}})}return f}r.visualize=t})(y||={});function L(n,e){let t=!1,r=Object.getOwnPropertyDescriptor(n,e);if(!r){let i=Object.getPrototypeOf(n);for(;i&&!r;)r=Object.getOwnPropertyDescriptor(i,e),i=Object.getPrototypeOf(i)}return r&&r.get&&!r.set&&(t=!0),t}var x=class n{static symbol=Symbol("cesium-item-tag");tag;collection;_valuesCache=null;_tagMap=new Map;_eventListeners=new Map;constructor({collection:e,tag:t}){this.tag=t||"default",this.collection=e}[Symbol.iterator](){return this.values[Symbol.iterator]()}_emit(e,t){let r=this._eventListeners.get(e);if(r){let i={type:e,...t};r.forEach(o=>o(i))}}_addToTagMap(e,t){this._tagMap.has(t)||this._tagMap.set(t,new Set),this._tagMap.get(t)?.add(e)}_removeFromTagMap(e){let t=e[n.symbol],r=this._tagMap.get(t);r&&(r.delete(e),r.size===0&&this._tagMap.delete(t))}_invalidateCache(){this._valuesCache=null}addEventListener(e,t){return this._eventListeners.has(e)||this._eventListeners.set(e,new Set),this._eventListeners.get(e)?.add(t),this}removeEventListener(e,t){return this._eventListeners.get(e)?.delete(t),this}add(e,t=this.tag,r){return Array.isArray(e)?e.forEach(i=>{this.add(i,t)}):(Object.defineProperty(e,n.symbol,{value:t,enumerable:!1,writable:!0,configurable:!0}),this.collection.add(e,r),this._addToTagMap(e,t),this._invalidateCache(),this._emit("add",{items:[e],tag:t})),e}contains(e){if(typeof e=="object")return this.collection.contains(e);let t=this._tagMap.get(e);return!!t&&t.size>0}remove(e){if(typeof e=="object"&&!Array.isArray(e)){let i=this.collection.remove(e);return i&&(this._removeFromTagMap(e),this._invalidateCache(),this._emit("remove",{items:[e]})),i}if(Array.isArray(e)){if(e.length===0)return!1;let i=!1;for(let o of e)this.remove(o)&&(i=!0);return i}let t=this.get(e);if(t.length===0)return!1;let r=!1;for(let i of t)this.remove(i)&&(r=!0);return r}removeAll(){this._tagMap.clear(),this.collection.removeAll(),this._invalidateCache(),this._emit("clear")}get values(){if(this.collection instanceof p.EntityCollection)return this.collection.values;{let e=[];for(let t=0;t<this.collection.length;t++)e.push(this.collection.get(t));return e}}get length(){return this.values?.length||0}get(e){let t=this._tagMap.get(e);return t?Array.from(t):[]}first(e){let t=this._tagMap.get(e);if(t&&t.size>0)return t.values().next().value}get tags(){return Array.from(this._tagMap.keys())}update(e,t){let r=this.get(e);for(let i of r)this._removeFromTagMap(i),Object.defineProperty(i,n.symbol,{value:t,enumerable:!1,writable:!0,configurable:!0}),this._addToTagMap(i,t);return r.length>0&&this._emit("update",{items:r,tag:t}),r.length}show(e){let t=this.get(e);for(let r of t)(0,p.defined)(r.show)&&(r.show=!0);return this}hide(e){let t=this.get(e);for(let r of t)(0,p.defined)(r.show)&&(r.show=!1);return this}toggle(e){let t=this.get(e);for(let r of t)(0,p.defined)(r.show)&&(r.show=!r.show);return this}setProperty(e,t,r=this.tag){let i=this.get(r);for(let o of i)if(e in o&&typeof o[e]!="function"){if(L(o,e))throw Error(`setProperty(${o}, ${e}) failed; The property is readonly.`);o[e]=t}return this}filter(e,t){return(t?this.get(t):this.values).filter(e)}forEach(e,t){(t?this.get(t):this.values).forEach((i,o)=>e(i,o))}map(e,t){return(t?this.get(t):this.values).map(e)}find(e,t){return(t?this.get(t):this.values).find(e)}},T=x;var C=class n{static instances=new Map;_activeHighlights=new Set;_defaultColor=s.Color.YELLOW.withAlpha(.5);_entities;_cache=new Map;constructor(e){this._entities=new T({collection:e.entities,tag:"Highlights"})}static getInstance(e){let t=e.container;return n.instances.has(t)||n.instances.set(t,new n(e)),n.instances.get(t)}static releaseInstance(e){let t=e.container,r=n.instances.get(t);r&&(r.removeAll(),n.instances.delete(t))}add(e,t=this._defaultColor,r=!1){if(!(0,s.defined)(e))return;let i;if(e instanceof s.Entity){if(this._activeHighlights.has(e))return e;i=this._createEntity(e,t,r)}else if(e.id instanceof s.Entity){if(this._activeHighlights.has(e.id))return e.id;i=this._createEntity(e.id,t,r)}else if(e.primitive instanceof s.GroundPrimitive){if(this._activeHighlights.has(e.primitive))return e.primitive;i=this._createEntity(e.primitive,t,r)}return i&&(this._entities.add(i),this._activeHighlights.add(i),i.isShowing||(i.show=!0)),i}remove(e){this._entities.remove(e),this._activeHighlights.delete(e)}removeAll(){this._entities.remove("Highlights"),this._activeHighlights.clear()}_getGeometryId(e){if(e.id)return`geometry-${e.id}`;if(e.geometry?.attributes?.position){let t=e.geometry.attributes.position.values,r="",i=Math.min(9,t.length/4);for(let o=0;o<i;o++)r+=Math.round(t[o])+"-";if(t.length>i*2)for(let o=t.length-i;o<t.length;o++)r+=Math.round(t[o]);return`geometry-hash-${r}`}}_createEntity(e,t,r=!1){try{if(e instanceof s.GroundPrimitive){let i=e.geometryInstances,o=Array.isArray(i)?i[0]:i;if(!o||!o.geometry.attributes.position)return;let a=this._getGeometryId(o),l=o.geometry.attributes.position.values,h=[];for(let g=0;g<l.length;g+=3)h.push(new s.Cartesian3(l[g],l[g+1],l[g+2]));let d={id:a?`highlight-${a}`:void 0};return r?d.polyline={positions:h,width:2,material:t,clampToGround:!0}:d.polygon={hierarchy:new s.PolygonHierarchy(h),material:t,classificationType:s.ClassificationType.BOTH,heightReference:s.HeightReference.CLAMP_TO_GROUND},new s.Entity(d)}else{let i={id:`highlight-${e.id}`};if(e.polygon)r?i.polyline={positions:e.polygon.hierarchy?.getValue().positions,material:t,width:2,clampToGround:e.polygon.heightReference?.getValue()===s.HeightReference.CLAMP_TO_GROUND}:i.polygon={hierarchy:e.polygon.hierarchy?.getValue(),material:t,classificationType:s.ClassificationType.BOTH};else if(e.polyline)i.polyline={positions:e.polyline.positions,width:(e.polyline.width?.getValue()||2)+2,material:t,clampToGround:e.polyline.clampToGround};else if(e.rectangle)if(r){let o=e.rectangle.coordinates?.getValue();if(o){let a=[s.Cartesian3.fromRadians(o.west,o.north),s.Cartesian3.fromRadians(o.east,o.north),s.Cartesian3.fromRadians(o.east,o.south),s.Cartesian3.fromRadians(o.west,o.south),s.Cartesian3.fromRadians(o.west,o.north)];i.polyline={positions:a,material:t,width:2,clampToGround:e.rectangle.heightReference?.getValue()===s.HeightReference.CLAMP_TO_GROUND}}}else i.rectangle=e.rectangle.clone(),i.rectangle.material=t;else return;return new s.Entity(i)}}catch(i){console.error("Failed to create highlight Entity:",i);return}}get activeHighlights(){return Array.from(this._activeHighlights)}get defaultColor(){return this._defaultColor}set defaultColor(e){this._defaultColor=e}get entities(){return this._entities}};
|
|
1
|
+
"use strict";var d=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var w=(t,i)=>{for(var o in i)d(t,o,{get:i[o],enumerable:!0})},_=(t,i,o,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let e of C(i))!E.call(t,e)&&e!==o&&d(t,e,{get:()=>i[e],enumerable:!(a=u(i,e))||a.enumerable});return t};var v=t=>_(d({},"__esModule",{value:!0}),t);var T={};w(T,{Highlight:()=>g,cloneViewer:()=>f,syncCamera:()=>c});module.exports=v(T);var y=require("cesium");var p=require("cesium");function c(t,i){if((0,p.defined)(t)&&(0,p.defined)(i)){let{camera:o}=t;i.camera.position=o.positionWC.clone(),i.camera.direction=o.directionWC.clone(),i.camera.up=o.upWC.clone()}}function f(t,i,o){let a={baseLayerPicker:t.baseLayerPicker!==void 0,geocoder:t.geocoder!==void 0,homeButton:t.homeButton!==void 0,sceneModePicker:t.sceneModePicker!==void 0,timeline:t.timeline!==void 0,navigationHelpButton:t.navigationHelpButton!==void 0,animation:t.animation!==void 0,fullscreenButton:t.fullscreenButton!==void 0,shouldAnimate:t.clock.shouldAnimate,terrainProvider:t.terrainProvider,requestRenderMode:t.scene.requestRenderMode,infoBox:t.infoBox!==void 0},e=new y.Viewer(i,{...a,...o});c(t,e);let r=t.imageryLayers;e.imageryLayers.removeAll();for(let l=0;l<r.length;l++){let m=r.get(l);e.imageryLayers.addImageryProvider(m.imageryProvider,l)}e.clock.startTime=t.clock.startTime.clone(),e.clock.stopTime=t.clock.stopTime.clone(),e.clock.currentTime=t.clock.currentTime.clone(),e.clock.multiplier=t.clock.multiplier,e.clock.clockStep=t.clock.clockStep,e.clock.clockRange=t.clock.clockRange,e.clock.shouldAnimate=t.clock.shouldAnimate,e.scene.globe.enableLighting=t.scene.globe.enableLighting,e.scene.globe.depthTestAgainstTerrain=t.scene.globe.depthTestAgainstTerrain,e.scene.screenSpaceCameraController.enableCollisionDetection=t.scene.screenSpaceCameraController.enableCollisionDetection;let s=t.scene.screenSpaceCameraController.tiltEventTypes;s&&(e.scene.screenSpaceCameraController.tiltEventTypes=Array.isArray(s)?[...s]:s);let h=t.scene.screenSpaceCameraController.zoomEventTypes;return h&&(e.scene.screenSpaceCameraController.zoomEventTypes=Array.isArray(h)?[...h]:h),e}var n=require("cesium"),g=class t{static instances=new Map;_defaultColor=n.Color.YELLOW.withAlpha(.5);_highlightEntity;_viewerEntities;constructor(i){this._viewerEntities=i.entities,this._highlightEntity=this._viewerEntities.add(new n.Entity({id:`highlight-entity-${Math.random().toString(36).substring(2)}`,show:!1}))}static getInstance(i){let o=i.container;return t.instances.has(o)||t.instances.set(o,new t(i)),t.instances.get(o)}static releaseInstance(i){let o=i.container,a=t.instances.get(o);a&&(a.hide(),a._highlightEntity&&i.entities.remove(a._highlightEntity),t.instances.delete(o))}show(i,o=this._defaultColor,a=!1){if(!(!(0,n.defined)(i)||!this._highlightEntity)){this._clearGeometries();try{if(i instanceof n.Entity)this._update(i,o,a);else if(i.id instanceof n.Entity)this._update(i.id,o,a);else if(i.primitive instanceof n.GroundPrimitive)this._update(i.primitive,o,a);else return;return this._highlightEntity.show=!0,this._highlightEntity}catch(e){console.error("Failed to highlight object:",e);return}}}_clearGeometries(){this._highlightEntity&&(this._highlightEntity.polygon=void 0,this._highlightEntity.polyline=void 0,this._highlightEntity.rectangle=void 0)}_update(i,o,a){if(this._highlightEntity){if(i instanceof n.Entity){if(i.polygon)if(a){let e=i.polygon.hierarchy?.getValue();if(e&&e.positions){let r;e.positions.length>0&&!n.Cartesian3.equals(e.positions[0],e.positions[e.positions.length-1])?r=[...e.positions,e.positions[0]]:r=e.positions,this._highlightEntity.polyline=new n.PolylineGraphics({positions:r,material:o,width:2,clampToGround:i.polygon.heightReference?.getValue()===n.HeightReference.CLAMP_TO_GROUND})}}else{let e=i.polygon.hierarchy?.getValue();e&&(this._highlightEntity.polygon=new n.PolygonGraphics({hierarchy:e,material:o,heightReference:i.polygon.heightReference?.getValue(),classificationType:i.polygon.classificationType?.getValue()||n.ClassificationType.BOTH}))}else if(i.polyline){let e=i.polyline.positions?.getValue();if(e){let r=i.polyline.width?.getValue()||2;this._highlightEntity.polyline=new n.PolylineGraphics({positions:e,material:o,width:r+2,clampToGround:i.polyline.clampToGround?.getValue()})}}else if(i.rectangle)if(a){let e=i.rectangle.coordinates?.getValue();if(e){let r=[n.Cartesian3.fromRadians(e.west,e.north),n.Cartesian3.fromRadians(e.east,e.north),n.Cartesian3.fromRadians(e.east,e.south),n.Cartesian3.fromRadians(e.west,e.south),n.Cartesian3.fromRadians(e.west,e.north)];this._highlightEntity.polyline=new n.PolylineGraphics({positions:r,material:o,width:2,clampToGround:i.rectangle.heightReference?.getValue()===n.HeightReference.CLAMP_TO_GROUND})}}else{let e=i.rectangle.coordinates?.getValue();e&&(this._highlightEntity.rectangle=new n.RectangleGraphics({coordinates:e,material:o,heightReference:i.rectangle.heightReference?.getValue()}))}}else if(i instanceof n.GroundPrimitive){let e=i.geometryInstances,r=Array.isArray(e)?e[0]:e;if(!r||!r.geometry.attributes.position)return;let s=r.geometry.attributes.position.values,h=[];for(let l=0;l<s.length;l+=3)h.push(new n.Cartesian3(s[l],s[l+1],s[l+2]));a?this._highlightEntity.polyline=new n.PolylineGraphics({positions:h,material:o,width:2,clampToGround:!0}):this._highlightEntity.polygon=new n.PolygonGraphics({hierarchy:new n.PolygonHierarchy(h),material:o,heightReference:n.HeightReference.CLAMP_TO_GROUND,classificationType:n.ClassificationType.BOTH})}}}hide(){this._highlightEntity&&(this._highlightEntity.show=!1)}get defaultColor(){return this._defaultColor}set defaultColor(i){this._defaultColor=i}get highlightEntity(){return this._highlightEntity}};
|
package/dist/viewer/index.d.cts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Viewer, Color, Entity
|
|
2
|
-
import { Collection } from '../collection/index.cjs';
|
|
1
|
+
import { Viewer, Color, Entity } from 'cesium';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Copies configuration and state from one Cesium Viewer to another.
|
|
@@ -12,7 +11,7 @@ declare function cloneViewer(source: Viewer, container: Element | string, option
|
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* @class
|
|
15
|
-
*
|
|
14
|
+
* Lightweight multiton highlight manager for Cesium using a single reusable entity.
|
|
16
15
|
*
|
|
17
16
|
* @example
|
|
18
17
|
* ```
|
|
@@ -24,10 +23,10 @@ declare function cloneViewer(source: Viewer, container: Element | string, option
|
|
|
24
23
|
* const highlighter2 = Highlight.getInstance(viewer2);
|
|
25
24
|
*
|
|
26
25
|
* // This highlight only affects viewer1
|
|
27
|
-
* highlighter1.
|
|
26
|
+
* highlighter1.show(someEntity, Color.RED);
|
|
28
27
|
*
|
|
29
28
|
* // This highlight only affects viewer2
|
|
30
|
-
* highlighter2.
|
|
29
|
+
* highlighter2.show(someEntity, Color.BLUE);
|
|
31
30
|
*
|
|
32
31
|
* // When done with viewers
|
|
33
32
|
* Highlight.releaseInstance(viewer1);
|
|
@@ -37,31 +36,14 @@ declare function cloneViewer(source: Viewer, container: Element | string, option
|
|
|
37
36
|
* ```
|
|
38
37
|
*/
|
|
39
38
|
declare class Highlight {
|
|
40
|
-
/**
|
|
41
|
-
* A map for viewer identification.
|
|
42
|
-
* @private @static
|
|
43
|
-
*/
|
|
44
39
|
private static instances;
|
|
45
|
-
/**
|
|
46
|
-
* A set of highlighted entities.
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
private _activeHighlights;
|
|
50
|
-
/**
|
|
51
|
-
* The default highlight color.
|
|
52
|
-
* @private
|
|
53
|
-
*/
|
|
54
40
|
private _defaultColor;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
* @private
|
|
58
|
-
*/
|
|
59
|
-
private _entities;
|
|
60
|
-
private _cache;
|
|
41
|
+
private _highlightEntity?;
|
|
42
|
+
private _viewerEntities;
|
|
61
43
|
/**
|
|
62
44
|
* Creates a new `Highlight` instance.
|
|
63
45
|
* @private Use {@link getInstance `Highlight.getInstance()`}
|
|
64
|
-
* @param viewer A viewer
|
|
46
|
+
* @param viewer A viewer to create highlight entity in
|
|
65
47
|
*/
|
|
66
48
|
private constructor();
|
|
67
49
|
/**
|
|
@@ -75,40 +57,27 @@ declare class Highlight {
|
|
|
75
57
|
*/
|
|
76
58
|
static releaseInstance(viewer: Viewer): void;
|
|
77
59
|
/**
|
|
78
|
-
* Highlights a picked object
|
|
60
|
+
* Highlights a picked object by updating the reusable entity
|
|
79
61
|
* @param picked The object returned from `scene.pick()` or `drillPick()`
|
|
80
62
|
* @param color Optional color for the highlight. Defaults to yellow with 0.5 alpha.
|
|
81
63
|
* @param outline Optional style for the highlight. Defaults to `false`.
|
|
82
|
-
* @returns The
|
|
64
|
+
* @returns The entity being used for highlighting
|
|
83
65
|
*/
|
|
84
|
-
|
|
66
|
+
show(picked: any, color?: Color, outline?: boolean): Entity | undefined;
|
|
85
67
|
/**
|
|
86
|
-
*
|
|
87
|
-
* @
|
|
88
|
-
*/
|
|
89
|
-
remove(highlight: Entity): void;
|
|
90
|
-
/**
|
|
91
|
-
* Clears all highlights.
|
|
68
|
+
* Removes all geometry properties from the highlight entity
|
|
69
|
+
* @private
|
|
92
70
|
*/
|
|
93
|
-
|
|
71
|
+
private _clearGeometries;
|
|
94
72
|
/**
|
|
95
|
-
*
|
|
73
|
+
* Updates the highlight entity from an Entity object
|
|
96
74
|
* @private
|
|
97
|
-
* @param instance The geometry instance
|
|
98
|
-
* @returns A unique string identifier
|
|
99
75
|
*/
|
|
100
|
-
private
|
|
76
|
+
private _update;
|
|
101
77
|
/**
|
|
102
|
-
*
|
|
103
|
-
* @private
|
|
104
|
-
* @param from The GroundPrimitive object to create from
|
|
105
|
-
* @param color The color to use for the highlight
|
|
106
|
-
* @param outline Whether to create an outline (polyline) instead of a filled polygon
|
|
107
|
-
* @returns The created Entity
|
|
78
|
+
* Clears the current highlight
|
|
108
79
|
*/
|
|
109
|
-
|
|
110
|
-
/** Gets all active highlights */
|
|
111
|
-
get activeHighlights(): readonly Entity[];
|
|
80
|
+
hide(): void;
|
|
112
81
|
/** Gets the default highlight color. */
|
|
113
82
|
get defaultColor(): Color;
|
|
114
83
|
/**
|
|
@@ -116,8 +85,8 @@ declare class Highlight {
|
|
|
116
85
|
* @param color The new default color for highlights
|
|
117
86
|
*/
|
|
118
87
|
set defaultColor(color: Color);
|
|
119
|
-
/** Gets
|
|
120
|
-
get
|
|
88
|
+
/** Gets the highlight entity */
|
|
89
|
+
get highlightEntity(): Entity | undefined;
|
|
121
90
|
}
|
|
122
91
|
|
|
123
92
|
/**
|
package/dist/viewer/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Viewer, Color, Entity
|
|
2
|
-
import { Collection } from '../collection/index.js';
|
|
1
|
+
import { Viewer, Color, Entity } from 'cesium';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Copies configuration and state from one Cesium Viewer to another.
|
|
@@ -12,7 +11,7 @@ declare function cloneViewer(source: Viewer, container: Element | string, option
|
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* @class
|
|
15
|
-
*
|
|
14
|
+
* Lightweight multiton highlight manager for Cesium using a single reusable entity.
|
|
16
15
|
*
|
|
17
16
|
* @example
|
|
18
17
|
* ```
|
|
@@ -24,10 +23,10 @@ declare function cloneViewer(source: Viewer, container: Element | string, option
|
|
|
24
23
|
* const highlighter2 = Highlight.getInstance(viewer2);
|
|
25
24
|
*
|
|
26
25
|
* // This highlight only affects viewer1
|
|
27
|
-
* highlighter1.
|
|
26
|
+
* highlighter1.show(someEntity, Color.RED);
|
|
28
27
|
*
|
|
29
28
|
* // This highlight only affects viewer2
|
|
30
|
-
* highlighter2.
|
|
29
|
+
* highlighter2.show(someEntity, Color.BLUE);
|
|
31
30
|
*
|
|
32
31
|
* // When done with viewers
|
|
33
32
|
* Highlight.releaseInstance(viewer1);
|
|
@@ -37,31 +36,14 @@ declare function cloneViewer(source: Viewer, container: Element | string, option
|
|
|
37
36
|
* ```
|
|
38
37
|
*/
|
|
39
38
|
declare class Highlight {
|
|
40
|
-
/**
|
|
41
|
-
* A map for viewer identification.
|
|
42
|
-
* @private @static
|
|
43
|
-
*/
|
|
44
39
|
private static instances;
|
|
45
|
-
/**
|
|
46
|
-
* A set of highlighted entities.
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
private _activeHighlights;
|
|
50
|
-
/**
|
|
51
|
-
* The default highlight color.
|
|
52
|
-
* @private
|
|
53
|
-
*/
|
|
54
40
|
private _defaultColor;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
* @private
|
|
58
|
-
*/
|
|
59
|
-
private _entities;
|
|
60
|
-
private _cache;
|
|
41
|
+
private _highlightEntity?;
|
|
42
|
+
private _viewerEntities;
|
|
61
43
|
/**
|
|
62
44
|
* Creates a new `Highlight` instance.
|
|
63
45
|
* @private Use {@link getInstance `Highlight.getInstance()`}
|
|
64
|
-
* @param viewer A viewer
|
|
46
|
+
* @param viewer A viewer to create highlight entity in
|
|
65
47
|
*/
|
|
66
48
|
private constructor();
|
|
67
49
|
/**
|
|
@@ -75,40 +57,27 @@ declare class Highlight {
|
|
|
75
57
|
*/
|
|
76
58
|
static releaseInstance(viewer: Viewer): void;
|
|
77
59
|
/**
|
|
78
|
-
* Highlights a picked object
|
|
60
|
+
* Highlights a picked object by updating the reusable entity
|
|
79
61
|
* @param picked The object returned from `scene.pick()` or `drillPick()`
|
|
80
62
|
* @param color Optional color for the highlight. Defaults to yellow with 0.5 alpha.
|
|
81
63
|
* @param outline Optional style for the highlight. Defaults to `false`.
|
|
82
|
-
* @returns The
|
|
64
|
+
* @returns The entity being used for highlighting
|
|
83
65
|
*/
|
|
84
|
-
|
|
66
|
+
show(picked: any, color?: Color, outline?: boolean): Entity | undefined;
|
|
85
67
|
/**
|
|
86
|
-
*
|
|
87
|
-
* @
|
|
88
|
-
*/
|
|
89
|
-
remove(highlight: Entity): void;
|
|
90
|
-
/**
|
|
91
|
-
* Clears all highlights.
|
|
68
|
+
* Removes all geometry properties from the highlight entity
|
|
69
|
+
* @private
|
|
92
70
|
*/
|
|
93
|
-
|
|
71
|
+
private _clearGeometries;
|
|
94
72
|
/**
|
|
95
|
-
*
|
|
73
|
+
* Updates the highlight entity from an Entity object
|
|
96
74
|
* @private
|
|
97
|
-
* @param instance The geometry instance
|
|
98
|
-
* @returns A unique string identifier
|
|
99
75
|
*/
|
|
100
|
-
private
|
|
76
|
+
private _update;
|
|
101
77
|
/**
|
|
102
|
-
*
|
|
103
|
-
* @private
|
|
104
|
-
* @param from The GroundPrimitive object to create from
|
|
105
|
-
* @param color The color to use for the highlight
|
|
106
|
-
* @param outline Whether to create an outline (polyline) instead of a filled polygon
|
|
107
|
-
* @returns The created Entity
|
|
78
|
+
* Clears the current highlight
|
|
108
79
|
*/
|
|
109
|
-
|
|
110
|
-
/** Gets all active highlights */
|
|
111
|
-
get activeHighlights(): readonly Entity[];
|
|
80
|
+
hide(): void;
|
|
112
81
|
/** Gets the default highlight color. */
|
|
113
82
|
get defaultColor(): Color;
|
|
114
83
|
/**
|
|
@@ -116,8 +85,8 @@ declare class Highlight {
|
|
|
116
85
|
* @param color The new default color for highlights
|
|
117
86
|
*/
|
|
118
87
|
set defaultColor(color: Color);
|
|
119
|
-
/** Gets
|
|
120
|
-
get
|
|
88
|
+
/** Gets the highlight entity */
|
|
89
|
+
get highlightEntity(): Entity | undefined;
|
|
121
90
|
}
|
|
122
91
|
|
|
123
92
|
/**
|
package/dist/viewer/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c}from"../chunk-
|
|
1
|
+
import{a,b,c}from"../chunk-6ED7EA2J.js";export{c as Highlight,b as cloneViewer,a as syncCamera};
|
package/package.json
CHANGED
package/dist/chunk-P5SZETSP.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as f}from"./chunk-Q4LRNVAX.js";import{Viewer as E}from"cesium";import{defined as u}from"cesium";function y(i,e){if(u(i)&&u(e)){let{camera:n}=i;e.camera.position=n.positionWC.clone(),e.camera.direction=n.directionWC.clone(),e.camera.up=n.upWC.clone()}}function w(i,e,n){let r={baseLayerPicker:i.baseLayerPicker!==void 0,geocoder:i.geocoder!==void 0,homeButton:i.homeButton!==void 0,sceneModePicker:i.sceneModePicker!==void 0,timeline:i.timeline!==void 0,navigationHelpButton:i.navigationHelpButton!==void 0,animation:i.animation!==void 0,fullscreenButton:i.fullscreenButton!==void 0,shouldAnimate:i.clock.shouldAnimate,terrainProvider:i.terrainProvider,requestRenderMode:i.scene.requestRenderMode,infoBox:i.infoBox!==void 0},t=new E(e,{...r,...n});y(i,t);let o=i.imageryLayers;t.imageryLayers.removeAll();for(let s=0;s<o.length;s++){let h=o.get(s);t.imageryLayers.addImageryProvider(h.imageryProvider,s)}t.clock.startTime=i.clock.startTime.clone(),t.clock.stopTime=i.clock.stopTime.clone(),t.clock.currentTime=i.clock.currentTime.clone(),t.clock.multiplier=i.clock.multiplier,t.clock.clockStep=i.clock.clockStep,t.clock.clockRange=i.clock.clockRange,t.clock.shouldAnimate=i.clock.shouldAnimate,t.scene.globe.enableLighting=i.scene.globe.enableLighting,t.scene.globe.depthTestAgainstTerrain=i.scene.globe.depthTestAgainstTerrain,t.scene.screenSpaceCameraController.enableCollisionDetection=i.scene.screenSpaceCameraController.enableCollisionDetection;let a=i.scene.screenSpaceCameraController.tiltEventTypes;a&&(t.scene.screenSpaceCameraController.tiltEventTypes=Array.isArray(a)?[...a]:a);let l=i.scene.screenSpaceCameraController.zoomEventTypes;return l&&(t.scene.screenSpaceCameraController.zoomEventTypes=Array.isArray(l)?[...l]:l),t}import{Cartesian3 as c,ClassificationType as C,Color as T,defined as _,Entity as g,GroundPrimitive as v,HeightReference as m,PolygonHierarchy as A}from"cesium";var p=class i{static instances=new Map;_activeHighlights=new Set;_defaultColor=T.YELLOW.withAlpha(.5);_entities;_cache=new Map;constructor(e){this._entities=new f({collection:e.entities,tag:"Highlights"})}static getInstance(e){let n=e.container;return i.instances.has(n)||i.instances.set(n,new i(e)),i.instances.get(n)}static releaseInstance(e){let n=e.container,r=i.instances.get(n);r&&(r.removeAll(),i.instances.delete(n))}add(e,n=this._defaultColor,r=!1){if(!_(e))return;let t;if(e instanceof g){if(this._activeHighlights.has(e))return e;t=this._createEntity(e,n,r)}else if(e.id instanceof g){if(this._activeHighlights.has(e.id))return e.id;t=this._createEntity(e.id,n,r)}else if(e.primitive instanceof v){if(this._activeHighlights.has(e.primitive))return e.primitive;t=this._createEntity(e.primitive,n,r)}return t&&(this._entities.add(t),this._activeHighlights.add(t),t.isShowing||(t.show=!0)),t}remove(e){this._entities.remove(e),this._activeHighlights.delete(e)}removeAll(){this._entities.remove("Highlights"),this._activeHighlights.clear()}_getGeometryId(e){if(e.id)return`geometry-${e.id}`;if(e.geometry?.attributes?.position){let n=e.geometry.attributes.position.values,r="",t=Math.min(9,n.length/4);for(let o=0;o<t;o++)r+=Math.round(n[o])+"-";if(n.length>t*2)for(let o=n.length-t;o<n.length;o++)r+=Math.round(n[o]);return`geometry-hash-${r}`}}_createEntity(e,n,r=!1){try{if(e instanceof v){let t=e.geometryInstances,o=Array.isArray(t)?t[0]:t;if(!o||!o.geometry.attributes.position)return;let a=this._getGeometryId(o),l=o.geometry.attributes.position.values,s=[];for(let d=0;d<l.length;d+=3)s.push(new c(l[d],l[d+1],l[d+2]));let h={id:a?`highlight-${a}`:void 0};return r?h.polyline={positions:s,width:2,material:n,clampToGround:!0}:h.polygon={hierarchy:new A(s),material:n,classificationType:C.BOTH,heightReference:m.CLAMP_TO_GROUND},new g(h)}else{let t={id:`highlight-${e.id}`};if(e.polygon)r?t.polyline={positions:e.polygon.hierarchy?.getValue().positions,material:n,width:2,clampToGround:e.polygon.heightReference?.getValue()===m.CLAMP_TO_GROUND}:t.polygon={hierarchy:e.polygon.hierarchy?.getValue(),material:n,classificationType:C.BOTH};else if(e.polyline)t.polyline={positions:e.polyline.positions,width:(e.polyline.width?.getValue()||2)+2,material:n,clampToGround:e.polyline.clampToGround};else if(e.rectangle)if(r){let o=e.rectangle.coordinates?.getValue();if(o){let a=[c.fromRadians(o.west,o.north),c.fromRadians(o.east,o.north),c.fromRadians(o.east,o.south),c.fromRadians(o.west,o.south),c.fromRadians(o.west,o.north)];t.polyline={positions:a,material:n,width:2,clampToGround:e.rectangle.heightReference?.getValue()===m.CLAMP_TO_GROUND}}}else t.rectangle=e.rectangle.clone(),t.rectangle.material=n;else return;return new g(t)}}catch(t){console.error("Failed to create highlight Entity:",t);return}}get activeHighlights(){return Array.from(this._activeHighlights)}get defaultColor(){return this._defaultColor}set defaultColor(e){this._defaultColor=e}get entities(){return this._entities}};export{y as a,w as b,p as c};
|