Skip to content

Commit

Permalink
feature(Layer): add method to clear cache and update tiles
Browse files Browse the repository at this point in the history
  • Loading branch information
a-dutremble committed Jul 5, 2023
1 parent 651c6eb commit d532105
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 4 deletions.
19 changes: 19 additions & 0 deletions src/Core/View.js
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,25 @@ class View extends THREE.EventDispatcher {
}
}

/**
* Redraws some imagery layers from the current layer list when the style has been modified.
* @example
* view.redrawLayer(layers);
* @param {string|Array<string>} layerId The identifier or an array of identifier
*/
redrawLayer(layerId) {
if (!layerId.isArray) { layerId = [layerId]; }
layerId.forEach((layerIds) => {
const layer = this.getLayerById(layerIds);
if (layer) {
layer.invalidateCache();
this.notifyChange(layer);
} else {
throw new Error(`${layerIds} doesn't exist`);
}
});
}

/**
* Notifies the scene it needs to be updated due to changes exterior to the
* scene itself (e.g. camera movement).
Expand Down
10 changes: 10 additions & 0 deletions src/Layer/ColorLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,16 @@ class ColorLayer extends RasterLayer {
update(context, layer, node, parent) {
return updateLayeredMaterialNodeImagery(context, this, node, parent);
}

invalidateCache() {
this.cache.clear();
this.parent.level0Nodes.forEach((node0) => {
node0.traverse((tile) => {
tile.layerUpdateState[this.id] = undefined;
tile.redraw = true;
});
});
}
}

export default ColorLayer;
10 changes: 10 additions & 0 deletions src/Layer/FeatureGeometryLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ class FeatureGeometryLayer extends GeometryLayer {
this.object3d.clear();
}
}

invalidateCache() {
this.cache.clear();
this.parent.level0Nodes.forEach((node0) => {
node0.traverse((tile) => {
tile.layerUpdateState[this.id] = undefined;
tile.redraw = true;
});
});
}
}

export default FeatureGeometryLayer;
8 changes: 8 additions & 0 deletions src/Layer/Layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,14 @@ class Layer extends THREE.EventDispatcher {
delete(clearCache) {
console.warn('Function delete doesn\'t exist for this layer');
}

/**
* Invalidate the cache of this layer.
* Only implemented in {@link ColorLayer} and {@link FeatureGeometryLayer} for the moment.
*/
invalidateCache() {
throw new Error('invalidateCache is not supported yet in this type of layer');
}
}

export default Layer;
Expand Down
4 changes: 4 additions & 0 deletions src/Process/FeatureProcessing.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ export default {
return;
}

if (node.redraw) {
node.link[this.id] = [];
}

if (node.layerUpdateState[layer.id] === undefined) {
node.layerUpdateState[layer.id] = new LayerUpdateState();
} else if (!node.layerUpdateState[layer.id].canTryUpdate()) {
Expand Down
12 changes: 8 additions & 4 deletions src/Process/LayeredMaterialNodeProcessing.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,15 @@ export function updateLayeredMaterialNodeImagery(context, layer, node, parent) {
return;
}

if (nodeLayer.level >= extentsDestination[0].zoom) {
// default decision method
node.layerUpdateState[layer.id].noMoreUpdatePossible();
return;
// During the redraw processing, skip the noMoreUpdatePossible state
if (!node.redraw) {
if (nodeLayer.level >= extentsDestination[0].zoom) {
// default decision method
node.layerUpdateState[layer.id].noMoreUpdatePossible();
return;
}
}
node.redraw = false;

// is fetching data from this layer disabled?
if (layer.frozen) {
Expand Down

0 comments on commit d532105

Please sign in to comment.