@vcmap/core 5.0.0-rc.0
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/LICENSE.md +21 -0
- package/README.md +44 -0
- package/build/postinstall.js +44 -0
- package/index.js +139 -0
- package/package.json +92 -0
- package/src/cesium/cesium3DTileFeature.js +9 -0
- package/src/cesium/cesium3DTilePointFeature.js +9 -0
- package/src/cesium/cesiumVcsCameraPrimitive.js +146 -0
- package/src/cesium/wallpaperMaterial.js +64 -0
- package/src/ol/feature.js +47 -0
- package/src/ol/geom/circle.js +24 -0
- package/src/ol/geom/geometryCollection.js +33 -0
- package/src/ol/render/canvas/canvasTileRenderer.js +179 -0
- package/src/ol/source/ClusterEnhancedVectorSource.js +39 -0
- package/src/ol/source/VcsCluster.js +37 -0
- package/src/vcs/vcm/classRegistry.js +106 -0
- package/src/vcs/vcm/event/vcsEvent.js +89 -0
- package/src/vcs/vcm/globalCollections.js +11 -0
- package/src/vcs/vcm/interaction/abstractInteraction.js +149 -0
- package/src/vcs/vcm/interaction/coordinateAtPixel.js +102 -0
- package/src/vcs/vcm/interaction/eventHandler.js +425 -0
- package/src/vcs/vcm/interaction/featureAtPixelInteraction.js +286 -0
- package/src/vcs/vcm/interaction/featureProviderInteraction.js +54 -0
- package/src/vcs/vcm/interaction/interactionChain.js +124 -0
- package/src/vcs/vcm/interaction/interactionType.js +114 -0
- package/src/vcs/vcm/layer/buildings.js +17 -0
- package/src/vcs/vcm/layer/cesium/cesiumTilesetCesium.js +359 -0
- package/src/vcs/vcm/layer/cesium/clusterContext.js +95 -0
- package/src/vcs/vcm/layer/cesium/dataSourceCesium.js +171 -0
- package/src/vcs/vcm/layer/cesium/openStreetMapCesium.js +29 -0
- package/src/vcs/vcm/layer/cesium/pointCloudCesium.js +58 -0
- package/src/vcs/vcm/layer/cesium/rasterLayerCesium.js +110 -0
- package/src/vcs/vcm/layer/cesium/singleImageCesium.js +49 -0
- package/src/vcs/vcm/layer/cesium/terrainCesium.js +80 -0
- package/src/vcs/vcm/layer/cesium/tmsCesium.js +54 -0
- package/src/vcs/vcm/layer/cesium/vectorCesium.js +255 -0
- package/src/vcs/vcm/layer/cesium/vectorContext.js +167 -0
- package/src/vcs/vcm/layer/cesium/vectorRasterTileCesium.js +116 -0
- package/src/vcs/vcm/layer/cesium/vectorTileImageryProvider.js +246 -0
- package/src/vcs/vcm/layer/cesium/wmsCesium.js +71 -0
- package/src/vcs/vcm/layer/cesium/wmtsCesium.js +101 -0
- package/src/vcs/vcm/layer/cesium/x3dmHelper.js +22 -0
- package/src/vcs/vcm/layer/cesiumTileset.js +376 -0
- package/src/vcs/vcm/layer/czml.js +141 -0
- package/src/vcs/vcm/layer/dataSource.js +259 -0
- package/src/vcs/vcm/layer/featureLayer.js +261 -0
- package/src/vcs/vcm/layer/featureStore.js +647 -0
- package/src/vcs/vcm/layer/featureStoreChanges.js +360 -0
- package/src/vcs/vcm/layer/featureStoreState.js +19 -0
- package/src/vcs/vcm/layer/featureVisibility.js +435 -0
- package/src/vcs/vcm/layer/geojson.js +185 -0
- package/src/vcs/vcm/layer/geojsonHelpers.js +450 -0
- package/src/vcs/vcm/layer/globalHider.js +157 -0
- package/src/vcs/vcm/layer/layer.js +752 -0
- package/src/vcs/vcm/layer/layerImplementation.js +102 -0
- package/src/vcs/vcm/layer/layerState.js +17 -0
- package/src/vcs/vcm/layer/layerSymbols.js +6 -0
- package/src/vcs/vcm/layer/oblique/layerOblique.js +76 -0
- package/src/vcs/vcm/layer/oblique/obliqueHelpers.js +175 -0
- package/src/vcs/vcm/layer/oblique/vectorOblique.js +469 -0
- package/src/vcs/vcm/layer/openStreetMap.js +194 -0
- package/src/vcs/vcm/layer/openlayers/layerOpenlayers.js +79 -0
- package/src/vcs/vcm/layer/openlayers/openStreetMapOpenlayers.js +27 -0
- package/src/vcs/vcm/layer/openlayers/rasterLayerOpenlayers.js +121 -0
- package/src/vcs/vcm/layer/openlayers/singleImageOpenlayers.js +49 -0
- package/src/vcs/vcm/layer/openlayers/tileDebugOpenlayers.js +39 -0
- package/src/vcs/vcm/layer/openlayers/tmsOpenlayers.js +62 -0
- package/src/vcs/vcm/layer/openlayers/vectorOpenlayers.js +118 -0
- package/src/vcs/vcm/layer/openlayers/vectorTileOpenlayers.js +177 -0
- package/src/vcs/vcm/layer/openlayers/wmsOpenlayers.js +55 -0
- package/src/vcs/vcm/layer/openlayers/wmtsOpenlayers.js +141 -0
- package/src/vcs/vcm/layer/pointCloud.js +162 -0
- package/src/vcs/vcm/layer/rasterLayer.js +294 -0
- package/src/vcs/vcm/layer/singleImage.js +119 -0
- package/src/vcs/vcm/layer/terrain.js +122 -0
- package/src/vcs/vcm/layer/terrainHelpers.js +123 -0
- package/src/vcs/vcm/layer/tileLoadedHelper.js +72 -0
- package/src/vcs/vcm/layer/tileProvider/mvtTileProvider.js +104 -0
- package/src/vcs/vcm/layer/tileProvider/staticGeojsonTileProvider.js +67 -0
- package/src/vcs/vcm/layer/tileProvider/tileProvider.js +584 -0
- package/src/vcs/vcm/layer/tileProvider/tileProviderFactory.js +28 -0
- package/src/vcs/vcm/layer/tileProvider/urlTemplateTileProvider.js +106 -0
- package/src/vcs/vcm/layer/tms.js +121 -0
- package/src/vcs/vcm/layer/vector.js +632 -0
- package/src/vcs/vcm/layer/vectorHelpers.js +206 -0
- package/src/vcs/vcm/layer/vectorProperties.js +1391 -0
- package/src/vcs/vcm/layer/vectorSymbols.js +40 -0
- package/src/vcs/vcm/layer/vectorTile.js +480 -0
- package/src/vcs/vcm/layer/wfs.js +165 -0
- package/src/vcs/vcm/layer/wms.js +270 -0
- package/src/vcs/vcm/layer/wmsHelpers.js +65 -0
- package/src/vcs/vcm/layer/wmts.js +235 -0
- package/src/vcs/vcm/maps/baseOLMap.js +257 -0
- package/src/vcs/vcm/maps/cameraLimiter.js +219 -0
- package/src/vcs/vcm/maps/cesium.js +1192 -0
- package/src/vcs/vcm/maps/map.js +511 -0
- package/src/vcs/vcm/maps/mapState.js +17 -0
- package/src/vcs/vcm/maps/oblique.js +536 -0
- package/src/vcs/vcm/maps/openlayers.js +205 -0
- package/src/vcs/vcm/object.js +92 -0
- package/src/vcs/vcm/oblique/ObliqueCollection.js +572 -0
- package/src/vcs/vcm/oblique/ObliqueDataSet.js +357 -0
- package/src/vcs/vcm/oblique/ObliqueImage.js +247 -0
- package/src/vcs/vcm/oblique/ObliqueImageMeta.js +126 -0
- package/src/vcs/vcm/oblique/ObliqueProvider.js +433 -0
- package/src/vcs/vcm/oblique/ObliqueView.js +130 -0
- package/src/vcs/vcm/oblique/ObliqueViewDirection.js +40 -0
- package/src/vcs/vcm/oblique/helpers.js +483 -0
- package/src/vcs/vcm/oblique/parseImageJson.js +248 -0
- package/src/vcs/vcm/util/clipping/clippingObject.js +386 -0
- package/src/vcs/vcm/util/clipping/clippingObjectManager.js +312 -0
- package/src/vcs/vcm/util/clipping/clippingPlaneHelper.js +413 -0
- package/src/vcs/vcm/util/collection.js +193 -0
- package/src/vcs/vcm/util/dateTime.js +60 -0
- package/src/vcs/vcm/util/exclusiveManager.js +135 -0
- package/src/vcs/vcm/util/extent.js +124 -0
- package/src/vcs/vcm/util/featureProvider/abstractFeatureProvider.js +196 -0
- package/src/vcs/vcm/util/featureProvider/featureProviderHelpers.js +51 -0
- package/src/vcs/vcm/util/featureProvider/featureProviderSymbols.js +11 -0
- package/src/vcs/vcm/util/featureProvider/tileProviderFeatureProvider.js +62 -0
- package/src/vcs/vcm/util/featureProvider/wmsFeatureProvider.js +280 -0
- package/src/vcs/vcm/util/featureconverter/circleToCesium.js +215 -0
- package/src/vcs/vcm/util/featureconverter/convert.js +83 -0
- package/src/vcs/vcm/util/featureconverter/extent3d.js +154 -0
- package/src/vcs/vcm/util/featureconverter/featureconverterHelper.js +591 -0
- package/src/vcs/vcm/util/featureconverter/lineStringToCesium.js +171 -0
- package/src/vcs/vcm/util/featureconverter/pointToCesium.js +359 -0
- package/src/vcs/vcm/util/featureconverter/polygonToCesium.js +229 -0
- package/src/vcs/vcm/util/geometryHelpers.js +172 -0
- package/src/vcs/vcm/util/indexedCollection.js +158 -0
- package/src/vcs/vcm/util/isMobile.js +12 -0
- package/src/vcs/vcm/util/layerCollection.js +216 -0
- package/src/vcs/vcm/util/locale.js +53 -0
- package/src/vcs/vcm/util/mapCollection.js +363 -0
- package/src/vcs/vcm/util/math.js +71 -0
- package/src/vcs/vcm/util/projection.js +348 -0
- package/src/vcs/vcm/util/splitScreen.js +233 -0
- package/src/vcs/vcm/util/style/declarativeStyleItem.js +631 -0
- package/src/vcs/vcm/util/style/shapesCategory.js +67 -0
- package/src/vcs/vcm/util/style/styleFactory.js +48 -0
- package/src/vcs/vcm/util/style/styleHelpers.js +555 -0
- package/src/vcs/vcm/util/style/styleItem.js +226 -0
- package/src/vcs/vcm/util/style/vectorStyleItem.js +927 -0
- package/src/vcs/vcm/util/style/writeStyle.js +48 -0
- package/src/vcs/vcm/util/urlHelpers.js +16 -0
- package/src/vcs/vcm/util/viewpoint.js +333 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { check } from '@vcsuite/check';
|
|
2
|
+
import { clearClippingPlanes, setClippingPlanes } from './clippingPlaneHelper.js';
|
|
3
|
+
import ClippingObject from './clippingObject.js';
|
|
4
|
+
import CesiumMap from '../../maps/cesium.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* ClippingObjectManager, a singleton Class for managing [ClippingObjects]{@link ClippingObject}. The manager takes care to only apply a
|
|
8
|
+
* single [ClippingObject]{@link ClippingObject} to a target, such as a Cesium3DTileset or Entity.
|
|
9
|
+
* The manager ensures, [ClippingObjects]{@link ClippingObject} which
|
|
10
|
+
* can be manipulated by the user take precedence over other [ClippingObjects]{@link ClippingObject}.
|
|
11
|
+
* [ClippingObjects]{@link ClippingObject} with the same target get
|
|
12
|
+
* overwritten in the order they where added to the manager. Exclusive [ClippingObjects]{@link ClippingObject} are always applied last, even
|
|
13
|
+
* if a default [ClippingObject]{@link ClippingObject} is added after.
|
|
14
|
+
* @class
|
|
15
|
+
* @export
|
|
16
|
+
* @api stable
|
|
17
|
+
*/
|
|
18
|
+
class ClippingObjectManager {
|
|
19
|
+
static get className() {
|
|
20
|
+
return 'vcs.vcm.util.clipping.ClippingObjectManager';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
constructor(layerCollection) {
|
|
24
|
+
/**
|
|
25
|
+
* @type {Set<ClippingObject>}
|
|
26
|
+
* @private
|
|
27
|
+
*/
|
|
28
|
+
this._defaultClippingObjects = new Set();
|
|
29
|
+
/**
|
|
30
|
+
* @type {Array<ClippingObject>}
|
|
31
|
+
* @private
|
|
32
|
+
*/
|
|
33
|
+
this._exclusiveClippingObjects = null;
|
|
34
|
+
/**
|
|
35
|
+
* @type {Map<(import("@vcmap/cesium").Globe|import("@vcmap/cesium").Entity|import("@vcmap/cesium").Cesium3DTileset), ClippingObject>}
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
this._targetsMap = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* @type {Map<ClippingObject, Array<Function>>}
|
|
41
|
+
* @private
|
|
42
|
+
*/
|
|
43
|
+
this._listenersMap = new Map();
|
|
44
|
+
/**
|
|
45
|
+
* @type {null|Function}
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
this._exclusiveRemovedCb = null;
|
|
49
|
+
/** @type {boolean} */
|
|
50
|
+
this.initialized = false;
|
|
51
|
+
/**
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
this._updateSuspended = false;
|
|
56
|
+
/**
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
this._dirty = false;
|
|
61
|
+
this._layerCollection = layerCollection;
|
|
62
|
+
/**
|
|
63
|
+
* @type {import("@vcmap/core").VcsMap|null}
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
this._activeMap = null;
|
|
67
|
+
/**
|
|
68
|
+
* @type {Function}
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
this._layerChangedListener = this._layerCollection.stateChanged.addEventListener((layer) => {
|
|
72
|
+
this._layerChanged(layer);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Suspend updates, changes to managed [ClippingObjects]{@link ClippingObject} will not trigger a reset of targets or plane definitions
|
|
78
|
+
* @type {boolean}
|
|
79
|
+
* @api
|
|
80
|
+
*/
|
|
81
|
+
get suspendUpdate() {
|
|
82
|
+
return this._updateSuspended;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param {boolean} suspend
|
|
87
|
+
*/
|
|
88
|
+
set suspendUpdate(suspend) {
|
|
89
|
+
check(suspend, Boolean);
|
|
90
|
+
|
|
91
|
+
this._updateSuspended = suspend;
|
|
92
|
+
if (!this._updateSuspended && this._dirty) {
|
|
93
|
+
this._dirty = false;
|
|
94
|
+
this._update();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {import("@vcmap/core").Layer} layer
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
_layerChanged(layer) {
|
|
103
|
+
this.suspendUpdate = true;
|
|
104
|
+
this._defaultClippingObjects.forEach((co) => { co.handleLayerChanged(layer); });
|
|
105
|
+
if (this._exclusiveClippingObjects) {
|
|
106
|
+
this._exclusiveClippingObjects.forEach((co) => { co.handleLayerChanged(layer); });
|
|
107
|
+
}
|
|
108
|
+
this.suspendUpdate = false;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @param {import("@vcmap/core").VcsMap} map
|
|
113
|
+
*/
|
|
114
|
+
mapActivated(map) {
|
|
115
|
+
this.suspendUpdate = true;
|
|
116
|
+
this._defaultClippingObjects.forEach((co) => { co.handleMapChanged(map); });
|
|
117
|
+
if (this._exclusiveClippingObjects) {
|
|
118
|
+
this._exclusiveClippingObjects.forEach((co) => { co.handleMapChanged(map); });
|
|
119
|
+
}
|
|
120
|
+
this.suspendUpdate = false;
|
|
121
|
+
this._activeMap = map;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Add a default [ClippingObject]{@link ClippingObject} to the manager. The order in which objects are added, determines their priority.
|
|
126
|
+
* In case two objects have the same target, the one added last is applied. Should the last added object be removed,
|
|
127
|
+
* the first one is re-applied. An object may not be added if is already part of the manager, use [hasClippingObject]{@link ClippingObjectManager#hasClippingObject}
|
|
128
|
+
* to test.
|
|
129
|
+
* @api
|
|
130
|
+
* @param {ClippingObject} clippingObject
|
|
131
|
+
* @throws ClippingObject is already managed
|
|
132
|
+
*/
|
|
133
|
+
addClippingObject(clippingObject) {
|
|
134
|
+
check(clippingObject, ClippingObject);
|
|
135
|
+
|
|
136
|
+
if (this.hasClippingObject(clippingObject)) {
|
|
137
|
+
throw new Error('ClippingObject already managed, remove it first');
|
|
138
|
+
}
|
|
139
|
+
clippingObject.setLayerCollection(this._layerCollection);
|
|
140
|
+
|
|
141
|
+
this._defaultClippingObjects.add(clippingObject);
|
|
142
|
+
if (this._activeMap instanceof CesiumMap) {
|
|
143
|
+
clippingObject.handleMapChanged(this._activeMap);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
this._listenersMap.set(clippingObject, [
|
|
147
|
+
clippingObject.targetsUpdated.addEventListener(this._update.bind(this)),
|
|
148
|
+
clippingObject.clippingPlaneUpdated.addEventListener(this._clippingPlaneUpdated.bind(this, clippingObject)),
|
|
149
|
+
]);
|
|
150
|
+
this._update();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Remove a default [ClippingObject]{@link ClippingObject} instance from the manager.
|
|
155
|
+
* @api
|
|
156
|
+
* @param {ClippingObject} clippingObject
|
|
157
|
+
*/
|
|
158
|
+
removeClippingObject(clippingObject) {
|
|
159
|
+
check(clippingObject, ClippingObject);
|
|
160
|
+
|
|
161
|
+
if (this._defaultClippingObjects.has(clippingObject)) {
|
|
162
|
+
this._defaultClippingObjects.delete(clippingObject);
|
|
163
|
+
this._listenersMap.get(clippingObject).forEach((cb) => { cb(); });
|
|
164
|
+
this._listenersMap.delete(clippingObject);
|
|
165
|
+
this._update();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Test if a {@link ClippingObject} is part of managers context
|
|
171
|
+
* @param {ClippingObject} clippingObject
|
|
172
|
+
* @returns {boolean}
|
|
173
|
+
* @api
|
|
174
|
+
*/
|
|
175
|
+
hasClippingObject(clippingObject) {
|
|
176
|
+
check(clippingObject, ClippingObject);
|
|
177
|
+
|
|
178
|
+
return this._defaultClippingObjects.has(clippingObject) ||
|
|
179
|
+
!!(this._exclusiveClippingObjects && this._exclusiveClippingObjects.includes(clippingObject));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Sets an Array of [ClippingObjects]{@link ClippingObject} to be added to the managers context. Exclusive objects
|
|
184
|
+
* are intended for [ClippingObjects]{@link ClippingObject} which can be directly manipulated by the user. They
|
|
185
|
+
* are always applied last and will overwrite any managed default [ClippingObject]{@link ClippingObject} with the same targets.
|
|
186
|
+
* The manager will only allow a single context (eg. one widget/plugin) for exclusive objects. Should the current context be switched or cleared, the provided
|
|
187
|
+
* callback is called to inform the setting context of its removal.
|
|
188
|
+
* @param {Array<ClippingObject>} clippingObjects
|
|
189
|
+
* @param {Function} removedCb
|
|
190
|
+
* @throws ClippingObjects is already managed
|
|
191
|
+
* @api
|
|
192
|
+
*/
|
|
193
|
+
setExclusiveClippingObjects(clippingObjects, removedCb) {
|
|
194
|
+
check(clippingObjects, [ClippingObject]);
|
|
195
|
+
check(removedCb, Function);
|
|
196
|
+
|
|
197
|
+
if (clippingObjects.find(co => this._defaultClippingObjects.has(co))) {
|
|
198
|
+
throw new Error('Some ClippingObjects are already managed, remove them first');
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
this._clearExclusiveClippingObjects();
|
|
202
|
+
this._exclusiveRemovedCb = removedCb;
|
|
203
|
+
this._exclusiveClippingObjects = clippingObjects;
|
|
204
|
+
this._exclusiveClippingObjects.forEach((clippingObject) => {
|
|
205
|
+
clippingObject.setLayerCollection(this._layerCollection);
|
|
206
|
+
|
|
207
|
+
if (this._activeMap instanceof CesiumMap) {
|
|
208
|
+
clippingObject.handleMapChanged(this._activeMap);
|
|
209
|
+
}
|
|
210
|
+
this._listenersMap.set(clippingObject, [
|
|
211
|
+
clippingObject.targetsUpdated.addEventListener(this._update.bind(this)),
|
|
212
|
+
clippingObject.clippingPlaneUpdated.addEventListener(this._clippingPlaneUpdated.bind(this, clippingObject)),
|
|
213
|
+
]);
|
|
214
|
+
});
|
|
215
|
+
this._update();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* @param {boolean=} silent
|
|
220
|
+
* @private
|
|
221
|
+
*/
|
|
222
|
+
_clearExclusiveClippingObjects(silent) {
|
|
223
|
+
if (this._exclusiveClippingObjects) {
|
|
224
|
+
this._exclusiveClippingObjects.forEach((cp) => {
|
|
225
|
+
this._listenersMap.get(cp).forEach((cb) => { cb(); });
|
|
226
|
+
this._listenersMap.delete(cp);
|
|
227
|
+
});
|
|
228
|
+
this._exclusiveClippingObjects = null;
|
|
229
|
+
}
|
|
230
|
+
if (!silent && this._exclusiveRemovedCb) {
|
|
231
|
+
this._exclusiveRemovedCb();
|
|
232
|
+
}
|
|
233
|
+
this._exclusiveRemovedCb = null;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Clears the exclusive set of [ClippingObject]{@link ClippingObject}. If called with the silent flag, the
|
|
238
|
+
* removed callback is not called (eg. when removing exclusive clipping objects from the same context).
|
|
239
|
+
* @param {boolean=} silent
|
|
240
|
+
* @api
|
|
241
|
+
*/
|
|
242
|
+
clearExclusiveClippingObjects(silent) {
|
|
243
|
+
this._clearExclusiveClippingObjects(silent);
|
|
244
|
+
this._update();
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* @private
|
|
249
|
+
*/
|
|
250
|
+
_update() {
|
|
251
|
+
if (this._updateSuspended) {
|
|
252
|
+
this._dirty = true;
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const currentTargets = new Set(this._targetsMap.keys());
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* @param {ClippingObject} clippingObject
|
|
259
|
+
*/
|
|
260
|
+
const setTargets = (clippingObject) => {
|
|
261
|
+
clippingObject.targets.forEach((target) => {
|
|
262
|
+
this._targetsMap.set(target, clippingObject);
|
|
263
|
+
currentTargets.delete(target);
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
this._targetsMap.clear();
|
|
268
|
+
this._defaultClippingObjects.forEach(setTargets);
|
|
269
|
+
if (this._exclusiveClippingObjects) {
|
|
270
|
+
this._exclusiveClippingObjects.forEach(setTargets);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
currentTargets.forEach((t) => { clearClippingPlanes(t); });
|
|
274
|
+
this._targetsMap.forEach((clippingObject, target) => {
|
|
275
|
+
if (clippingObject.clippingPlaneCollection) {
|
|
276
|
+
setClippingPlanes(
|
|
277
|
+
target,
|
|
278
|
+
clippingObject.clippingPlaneCollection,
|
|
279
|
+
clippingObject.local,
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* @param {ClippingObject} clippingObject
|
|
287
|
+
* @private
|
|
288
|
+
*/
|
|
289
|
+
_clippingPlaneUpdated(clippingObject) {
|
|
290
|
+
this._targetsMap.forEach((setClippingObject, target) => {
|
|
291
|
+
if (setClippingObject === clippingObject && clippingObject.clippingPlaneCollection) {
|
|
292
|
+
setClippingPlanes(target, clippingObject.clippingPlaneCollection);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Destroys this clippingObject Manager
|
|
299
|
+
*/
|
|
300
|
+
destroy() {
|
|
301
|
+
this._listenersMap.forEach((listeners) => {
|
|
302
|
+
listeners.forEach((cb) => { cb(); });
|
|
303
|
+
});
|
|
304
|
+
this._layerChangedListener();
|
|
305
|
+
this._listenersMap.clear();
|
|
306
|
+
this._targetsMap.clear();
|
|
307
|
+
this._defaultClippingObjects.clear();
|
|
308
|
+
this._exclusiveClippingObjects = null;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export default ClippingObjectManager;
|