Skip to content

Commit 26d72da

Browse files
committed
fix(ElevationLayer): scale elevation isn't updated
1 parent d033279 commit 26d72da

File tree

5 files changed

+28
-23
lines changed

5 files changed

+28
-23
lines changed

src/Core/TileMesh.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ class TileMesh extends THREE.Mesh {
5757
if (min == null && max == null) {
5858
return;
5959
}
60-
// FIXME: Why the floors ? This is not conservative : the obb may be too short by almost 1m !
61-
if (Math.floor(min) !== Math.floor(this.obb.z.min) || Math.floor(max) !== Math.floor(this.obb.z.max)) {
60+
// update bbox if min or max have changed by at least one decimal
61+
// or if scale changed
62+
if (min.toFixed(1) !== this.obb.z.min.toFixed(1) || max.toFixed(1) !== this.obb.z.max.toFixed(1) || scale != this.obb.z.scale) {
6263
this.obb.updateZ(min, max, scale);
6364
if (this.horizonCullingPointElevationScaled) {
6465
this.horizonCullingPointElevationScaled.setLength(this.obb.z.delta + this.horizonCullingPoint.length());

src/Layer/ElevationLayer.js

+8-15
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,7 @@ class ElevationLayer extends RasterLayer {
5555
constructor(id, config = {}) {
5656
super(id, config);
5757
this.isElevationLayer = true;
58-
59-
// This is used to add a factor needed to color texture
60-
let baseScale = 1.0;
61-
if (this.useColorTextureElevation) {
62-
baseScale = this.colorTextureElevationMaxZ - this.colorTextureElevationMinZ;
63-
}
64-
65-
this.defineLayerProperty('scale', this.scale || 1.0, (self) => {
66-
self.parent.object3d.traverse((obj) => {
67-
if (obj.layer == self.parent && obj.material) {
68-
obj.material.setElevationScale(self.scale * baseScale);
69-
obj.obb.updateScaleZ(self.scale);
70-
}
71-
});
72-
});
58+
this.defineLayerProperty('scale', this.scale || 1.0);
7359
}
7460

7561
/**
@@ -91,6 +77,13 @@ class ElevationLayer extends RasterLayer {
9177
// listen elevation updating
9278
rasterElevationNode.addEventListener('updatedElevation', updateBBox);
9379

80+
// listen scaling elevation updating
81+
this.addEventListener('scale-property-changed', updateBBox);
82+
// remove scaling elevation updating if node is removed
83+
node.addEventListener('dispose', () => {
84+
this.removeEventListener('scale-property-changed', updateBBox);
85+
});
86+
9487
return rasterElevationNode;
9588
}
9689

src/Process/ObjectRemovalHelper.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export default {
2525
} else {
2626
obj.material.dispose();
2727
}
28-
// obj.material = null;
2928
}
29+
obj.dispatchEvent({ type: 'dispose' });
3030
}
3131
},
3232

src/Renderer/RasterTile.js

+15-4
Original file line numberDiff line numberDiff line change
@@ -118,21 +118,20 @@ export class RasterElevationTile extends RasterTile {
118118
super(material, layer);
119119
const defaultEle = {
120120
bias: 0,
121-
scale: 1,
122121
mode: ELEVATION_MODES.DATA,
123122
zmin: 0,
124123
zmax: Infinity,
125124
};
126125

127-
let scaleFactor = 1.0;
126+
this.scaleFactor = 1.0;
128127

129128
// Define elevation properties
130129
if (layer.useRgbaTextureElevation) {
131130
defaultEle.mode = ELEVATION_MODES.RGBA;
132131
defaultEle.zmax = 5000;
133132
throw new Error('Restore this feature');
134133
} else if (layer.useColorTextureElevation) {
135-
scaleFactor = layer.colorTextureElevationMaxZ - layer.colorTextureElevationMinZ;
134+
this.scaleFactor = layer.colorTextureElevationMaxZ - layer.colorTextureElevationMinZ;
136135
defaultEle.mode = ELEVATION_MODES.COLOR;
137136
defaultEle.bias = layer.colorTextureElevationMinZ;
138137
this.min = this.layer.colorTextureElevationMinZ;
@@ -143,10 +142,22 @@ export class RasterElevationTile extends RasterTile {
143142
}
144143

145144
this.bias = layer.bias || defaultEle.bias;
146-
this.scale = (layer.scale || defaultEle.scale) * scaleFactor;
147145
this.mode = layer.mode || defaultEle.mode;
148146
this.zmin = layer.zmin || defaultEle.zmin;
149147
this.zmax = layer.zmax || defaultEle.zmax;
148+
149+
layer.addEventListener('scale-property-changed', this._handlerCBEvent);
150+
}
151+
152+
get scale() {
153+
return this.layer.scale * this.scaleFactor;
154+
}
155+
156+
dispose(removeEvent) {
157+
super.dispose(removeEvent);
158+
if (removeEvent) {
159+
this.layer.removeEventListener('scale-property-changed', this._handlerCBEvent);
160+
}
150161
}
151162

152163
initFromParent(parent, extents) {

test/unit/dataSourceProvider.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('Provide in Sources', function () {
6363
planarlayer.attach(colorlayer);
6464
planarlayer.attach(elevationlayer);
6565

66-
const fakeNode = { material, setBBoxZ: () => {} };
66+
const fakeNode = { material, setBBoxZ: () => {}, addEventListener: () => {} };
6767
colorlayer.setupRasterNode(fakeNode);
6868
elevationlayer.setupRasterNode(fakeNode);
6969

0 commit comments

Comments
 (0)