@antv/l7-layers 2.8.31 → 2.8.34
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/es/Geometry/models/plane.d.ts +13 -11
- package/es/Geometry/models/plane.js +134 -110
- package/es/Geometry/models/plane.js.map +1 -1
- package/es/canvas/models/canvas.js +5 -3
- package/es/canvas/models/canvas.js.map +1 -1
- package/es/core/BaseLayer.d.ts +5 -1
- package/es/core/BaseLayer.js +47 -0
- package/es/core/BaseLayer.js.map +1 -1
- package/es/core/interface.d.ts +3 -0
- package/es/core/interface.js.map +1 -1
- package/es/heatmap/index.d.ts +2 -0
- package/es/heatmap/index.js +9 -0
- package/es/heatmap/index.js.map +1 -1
- package/es/heatmap/models/heatmap.js +1 -0
- package/es/heatmap/models/heatmap.js.map +1 -1
- package/es/line/index.d.ts +1 -1
- package/es/line/index.js +1 -0
- package/es/line/index.js.map +1 -1
- package/es/line/models/index.d.ts +1 -1
- package/es/line/models/index.js +3 -1
- package/es/line/models/index.js.map +1 -1
- package/es/line/models/line.js +1 -0
- package/es/line/models/line.js.map +1 -1
- package/es/line/models/linearline.d.ts +20 -0
- package/es/line/models/linearline.js +267 -0
- package/es/line/models/linearline.js.map +1 -0
- package/es/point/models/fill.js +6 -2
- package/es/point/models/fill.js.map +1 -1
- package/es/point/models/normal.js +1 -0
- package/es/point/models/normal.js.map +1 -1
- package/es/point/models/simplePoint.js +1 -0
- package/es/point/models/simplePoint.js.map +1 -1
- package/es/polygon/models/extrude.d.ts +2 -0
- package/es/polygon/models/extrude.js +11 -5
- package/es/polygon/models/extrude.js.map +1 -1
- package/es/polygon/models/fill.d.ts +1 -0
- package/es/polygon/models/fill.js +6 -2
- package/es/polygon/models/fill.js.map +1 -1
- package/es/utils/layerData.d.ts +2 -0
- package/es/utils/layerData.js +152 -0
- package/es/utils/layerData.js.map +1 -0
- package/lib/Geometry/models/plane.js +133 -108
- package/lib/Geometry/models/plane.js.map +1 -1
- package/lib/canvas/models/canvas.js +5 -3
- package/lib/canvas/models/canvas.js.map +1 -1
- package/lib/core/BaseLayer.js +47 -0
- package/lib/core/BaseLayer.js.map +1 -1
- package/lib/core/interface.js.map +1 -1
- package/lib/heatmap/index.js +9 -0
- package/lib/heatmap/index.js.map +1 -1
- package/lib/heatmap/models/heatmap.js +1 -0
- package/lib/heatmap/models/heatmap.js.map +1 -1
- package/lib/line/index.js +1 -0
- package/lib/line/index.js.map +1 -1
- package/lib/line/models/index.js +4 -1
- package/lib/line/models/index.js.map +1 -1
- package/lib/line/models/line.js +1 -0
- package/lib/line/models/line.js.map +1 -1
- package/lib/line/models/linearline.js +283 -0
- package/lib/line/models/linearline.js.map +1 -0
- package/lib/point/models/fill.js +6 -2
- package/lib/point/models/fill.js.map +1 -1
- package/lib/point/models/normal.js +1 -0
- package/lib/point/models/normal.js.map +1 -1
- package/lib/point/models/simplePoint.js +1 -0
- package/lib/point/models/simplePoint.js.map +1 -1
- package/lib/polygon/models/extrude.js +11 -5
- package/lib/polygon/models/extrude.js.map +1 -1
- package/lib/polygon/models/fill.js +6 -2
- package/lib/polygon/models/fill.js.map +1 -1
- package/lib/utils/layerData.js +163 -0
- package/lib/utils/layerData.js.map +1 -0
- package/package.json +5 -5
|
@@ -2,9 +2,9 @@ import { IModelUniform, ITexture2D } from '@antv/l7-core';
|
|
|
2
2
|
import BaseModel from '../../core/BaseModel';
|
|
3
3
|
export default class PlaneModel extends BaseModel {
|
|
4
4
|
protected texture: ITexture2D;
|
|
5
|
+
protected terrainImage: HTMLImageElement;
|
|
6
|
+
protected terrainImageLoaded: boolean;
|
|
5
7
|
protected mapTexture: string | undefined;
|
|
6
|
-
protected positions: number[];
|
|
7
|
-
protected indices: number[];
|
|
8
8
|
initPlane(width?: number, height?: number, widthSegments?: number, heightSegments?: number, lng?: number, lat?: number): {
|
|
9
9
|
indices: number[];
|
|
10
10
|
positions: number[];
|
|
@@ -14,21 +14,23 @@ export default class PlaneModel extends BaseModel {
|
|
|
14
14
|
indices: number[];
|
|
15
15
|
size: number;
|
|
16
16
|
};
|
|
17
|
-
planeGeometryUpdateTriangulation: () => {
|
|
18
|
-
vertices: number[];
|
|
19
|
-
indices: number[];
|
|
20
|
-
size: number;
|
|
21
|
-
};
|
|
22
17
|
getUninforms(): IModelUniform;
|
|
23
18
|
clearModels(): void;
|
|
24
19
|
initModels(): import("@antv/l7-core").IModel[];
|
|
25
|
-
|
|
20
|
+
buildModels(): import("@antv/l7-core").IModel[];
|
|
21
|
+
createModelData(options?: any): {
|
|
22
|
+
attributes: {
|
|
23
|
+
[attributeName: string]: import("@antv/l7-core").IAttribute;
|
|
24
|
+
};
|
|
25
|
+
elements: import("@antv/l7-core").IElements;
|
|
26
|
+
};
|
|
27
|
+
updateTexture(mapTexture: string | undefined): void;
|
|
28
|
+
protected getImageData(img: HTMLImageElement): ImageData;
|
|
29
|
+
protected translateVertex(positions: number[], indices: number[], image: HTMLImageElement, widthSegments: number, heightSegments: number, rgb2height: (r: number, g: number, b: number) => number): void;
|
|
26
30
|
/**
|
|
27
31
|
* load terrain texture & offset attribute z
|
|
28
32
|
*/
|
|
29
|
-
loadTerrainTexture(): void;
|
|
30
|
-
buildModels(): import("@antv/l7-core").IModel[];
|
|
31
|
-
updateTexture(mapTexture: string | undefined): void;
|
|
33
|
+
protected loadTerrainTexture(positions: number[], indices: number[]): void;
|
|
32
34
|
protected getConfigSchema(): {
|
|
33
35
|
properties: {
|
|
34
36
|
opacity: {
|
|
@@ -37,11 +37,11 @@ var PlaneModel = function (_BaseModel) {
|
|
|
37
37
|
|
|
38
38
|
_defineProperty(_assertThisInitialized(_this), "texture", void 0);
|
|
39
39
|
|
|
40
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
40
|
+
_defineProperty(_assertThisInitialized(_this), "terrainImage", void 0);
|
|
41
41
|
|
|
42
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
42
|
+
_defineProperty(_assertThisInitialized(_this), "terrainImageLoaded", false);
|
|
43
43
|
|
|
44
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
44
|
+
_defineProperty(_assertThisInitialized(_this), "mapTexture", void 0);
|
|
45
45
|
|
|
46
46
|
_defineProperty(_assertThisInitialized(_this), "planeGeometryTriangulation", function () {
|
|
47
47
|
var _this2;
|
|
@@ -63,11 +63,8 @@ var PlaneModel = function (_BaseModel) {
|
|
|
63
63
|
indices = _this$initPlane.indices,
|
|
64
64
|
positions = _this$initPlane.positions;
|
|
65
65
|
|
|
66
|
-
_this.positions = positions;
|
|
67
|
-
_this.indices = indices;
|
|
68
|
-
|
|
69
66
|
if (terrainTexture) {
|
|
70
|
-
_this.loadTerrainTexture();
|
|
67
|
+
_this.loadTerrainTexture(positions, indices);
|
|
71
68
|
}
|
|
72
69
|
|
|
73
70
|
return {
|
|
@@ -77,14 +74,6 @@ var PlaneModel = function (_BaseModel) {
|
|
|
77
74
|
};
|
|
78
75
|
});
|
|
79
76
|
|
|
80
|
-
_defineProperty(_assertThisInitialized(_this), "planeGeometryUpdateTriangulation", function () {
|
|
81
|
-
return {
|
|
82
|
-
vertices: _this.positions,
|
|
83
|
-
indices: _this.indices,
|
|
84
|
-
size: 5
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
|
|
88
77
|
return _this;
|
|
89
78
|
}
|
|
90
79
|
|
|
@@ -118,9 +107,9 @@ var PlaneModel = function (_BaseModel) {
|
|
|
118
107
|
var _ref2 = this.mapService.lngLatToCoord([x + lng, -y + lat]),
|
|
119
108
|
_ref3 = _slicedToArray(_ref2, 2),
|
|
120
109
|
a = _ref3[0],
|
|
121
|
-
|
|
110
|
+
_b = _ref3[1];
|
|
122
111
|
|
|
123
|
-
positions.push(a,
|
|
112
|
+
positions.push(a, _b, 0);
|
|
124
113
|
} else {
|
|
125
114
|
positions.push(x + lng, -y + lat, 0);
|
|
126
115
|
}
|
|
@@ -134,12 +123,12 @@ var PlaneModel = function (_BaseModel) {
|
|
|
134
123
|
for (var _ix = 0; _ix < gridX; _ix++) {
|
|
135
124
|
var _a = _ix + gridX1 * _iy;
|
|
136
125
|
|
|
137
|
-
var
|
|
126
|
+
var _b2 = _ix + gridX1 * (_iy + 1);
|
|
138
127
|
|
|
139
128
|
var c = _ix + 1 + gridX1 * (_iy + 1);
|
|
140
129
|
var d = _ix + 1 + gridX1 * _iy;
|
|
141
|
-
indices.push(_a,
|
|
142
|
-
indices.push(
|
|
130
|
+
indices.push(_a, _b2, d);
|
|
131
|
+
indices.push(_b2, c, d);
|
|
143
132
|
}
|
|
144
133
|
}
|
|
145
134
|
|
|
@@ -178,6 +167,7 @@ var PlaneModel = function (_BaseModel) {
|
|
|
178
167
|
value: function clearModels() {
|
|
179
168
|
var _this$texture2;
|
|
180
169
|
|
|
170
|
+
this.terrainImage = null;
|
|
181
171
|
(_this$texture2 = this.texture) === null || _this$texture2 === void 0 ? void 0 : _this$texture2.destroy();
|
|
182
172
|
}
|
|
183
173
|
}, {
|
|
@@ -214,101 +204,42 @@ var PlaneModel = function (_BaseModel) {
|
|
|
214
204
|
}
|
|
215
205
|
})];
|
|
216
206
|
}
|
|
217
|
-
}, {
|
|
218
|
-
key: "getImageData",
|
|
219
|
-
value: function getImageData(img) {
|
|
220
|
-
var canvas = document.createElement('canvas');
|
|
221
|
-
var ctx = canvas.getContext('2d');
|
|
222
|
-
var width = img.width,
|
|
223
|
-
height = img.height;
|
|
224
|
-
canvas.width = width;
|
|
225
|
-
canvas.height = height;
|
|
226
|
-
ctx.drawImage(img, 0, 0, width, height);
|
|
227
|
-
var imageData = ctx.getImageData(0, 0, width, height);
|
|
228
|
-
return imageData;
|
|
229
|
-
}
|
|
230
|
-
}, {
|
|
231
|
-
key: "loadTerrainTexture",
|
|
232
|
-
value: function loadTerrainTexture() {
|
|
233
|
-
var _this3 = this;
|
|
234
|
-
|
|
235
|
-
var _ref6 = this.layer.getLayerConfig(),
|
|
236
|
-
_ref6$mask = _ref6.mask,
|
|
237
|
-
mask = _ref6$mask === void 0 ? false : _ref6$mask,
|
|
238
|
-
_ref6$maskInside = _ref6.maskInside,
|
|
239
|
-
maskInside = _ref6$maskInside === void 0 ? true : _ref6$maskInside,
|
|
240
|
-
_ref6$widthSegments = _ref6.widthSegments,
|
|
241
|
-
widthSegments = _ref6$widthSegments === void 0 ? 1 : _ref6$widthSegments,
|
|
242
|
-
_ref6$heightSegments = _ref6.heightSegments,
|
|
243
|
-
heightSegments = _ref6$heightSegments === void 0 ? 1 : _ref6$heightSegments,
|
|
244
|
-
terrainTexture = _ref6.terrainTexture,
|
|
245
|
-
_ref6$rgb2height = _ref6.rgb2height,
|
|
246
|
-
rgb2height = _ref6$rgb2height === void 0 ? function (r, g, b) {
|
|
247
|
-
return r + g + b;
|
|
248
|
-
} : _ref6$rgb2height;
|
|
249
|
-
|
|
250
|
-
var terrainImage = new Image();
|
|
251
|
-
terrainImage.crossOrigin = 'anonymous';
|
|
252
|
-
|
|
253
|
-
terrainImage.onload = function () {
|
|
254
|
-
var imgWidth = terrainImage.width;
|
|
255
|
-
var imgHeight = terrainImage.height;
|
|
256
|
-
|
|
257
|
-
var imageData = _this3.getImageData(terrainImage).data;
|
|
258
|
-
|
|
259
|
-
var gridX = Math.floor(widthSegments);
|
|
260
|
-
var gridY = Math.floor(heightSegments);
|
|
261
|
-
var gridX1 = gridX + 1;
|
|
262
|
-
var gridY1 = gridY + 1;
|
|
263
|
-
var widthStep = imgWidth / gridX;
|
|
264
|
-
var heihgtStep = imgHeight / gridY;
|
|
265
|
-
|
|
266
|
-
for (var iy = 0; iy < gridY1; iy++) {
|
|
267
|
-
var imgIndexY = Math.floor(iy * heihgtStep);
|
|
268
|
-
var imgLen = imgIndexY * imgWidth;
|
|
269
|
-
|
|
270
|
-
for (var ix = 0; ix < gridX1; ix++) {
|
|
271
|
-
var imgIndexX = Math.floor(ix * widthStep);
|
|
272
|
-
var imgDataIndex = (imgLen + imgIndexX) * 4;
|
|
273
|
-
var r = imageData[imgDataIndex];
|
|
274
|
-
var g = imageData[imgDataIndex + 1];
|
|
275
|
-
var b = imageData[imgDataIndex + 2];
|
|
276
|
-
var z = (iy * gridX1 + ix) * 5 + 2;
|
|
277
|
-
_this3.positions[z] = rgb2height(r, g, b);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
_this3.layer.models = [_this3.layer.buildLayerModel({
|
|
282
|
-
moduleName: 'geometry_plane',
|
|
283
|
-
vertexShader: planeVert,
|
|
284
|
-
fragmentShader: planeFrag,
|
|
285
|
-
triangulation: _this3.planeGeometryUpdateTriangulation,
|
|
286
|
-
primitive: gl.TRIANGLES,
|
|
287
|
-
depth: {
|
|
288
|
-
enable: true
|
|
289
|
-
},
|
|
290
|
-
blend: _this3.getBlend(),
|
|
291
|
-
stencil: getMask(mask, maskInside),
|
|
292
|
-
cull: {
|
|
293
|
-
enable: true,
|
|
294
|
-
face: gl.BACK
|
|
295
|
-
}
|
|
296
|
-
})];
|
|
297
|
-
|
|
298
|
-
_this3.layerService.renderLayers();
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
terrainImage.src = terrainTexture;
|
|
302
|
-
}
|
|
303
207
|
}, {
|
|
304
208
|
key: "buildModels",
|
|
305
209
|
value: function buildModels() {
|
|
306
210
|
return this.initModels();
|
|
307
211
|
}
|
|
212
|
+
}, {
|
|
213
|
+
key: "createModelData",
|
|
214
|
+
value: function createModelData(options) {
|
|
215
|
+
if (options) {
|
|
216
|
+
var _ref6 = this.layer.getLayerConfig(),
|
|
217
|
+
oldwidthSegments = _ref6.widthSegments,
|
|
218
|
+
oldheightSegments = _ref6.heightSegments,
|
|
219
|
+
oldwidth = _ref6.width,
|
|
220
|
+
oldheight = _ref6.height;
|
|
221
|
+
|
|
222
|
+
var _ref7 = options,
|
|
223
|
+
widthSegments = _ref7.widthSegments,
|
|
224
|
+
heightSegments = _ref7.heightSegments,
|
|
225
|
+
width = _ref7.width,
|
|
226
|
+
height = _ref7.height;
|
|
227
|
+
this.layer.style({
|
|
228
|
+
widthSegments: widthSegments !== undefined ? widthSegments : oldwidthSegments,
|
|
229
|
+
heightSegments: heightSegments !== undefined ? heightSegments : oldheightSegments,
|
|
230
|
+
width: width !== undefined ? width : oldwidth,
|
|
231
|
+
height: height !== undefined ? height : oldheight
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
var oldFeatures = this.layer.getEncodedData();
|
|
236
|
+
var res = this.styleAttributeService.createAttributesAndIndices(oldFeatures, this.planeGeometryTriangulation);
|
|
237
|
+
return res;
|
|
238
|
+
}
|
|
308
239
|
}, {
|
|
309
240
|
key: "updateTexture",
|
|
310
241
|
value: function updateTexture(mapTexture) {
|
|
311
|
-
var
|
|
242
|
+
var _this3 = this;
|
|
312
243
|
|
|
313
244
|
var createTexture2D = this.rendererService.createTexture2D;
|
|
314
245
|
|
|
@@ -317,7 +248,7 @@ var PlaneModel = function (_BaseModel) {
|
|
|
317
248
|
img.crossOrigin = 'anonymous';
|
|
318
249
|
|
|
319
250
|
img.onload = function () {
|
|
320
|
-
|
|
251
|
+
_this3.texture = createTexture2D({
|
|
321
252
|
data: img,
|
|
322
253
|
width: img.width,
|
|
323
254
|
height: img.height,
|
|
@@ -325,9 +256,9 @@ var PlaneModel = function (_BaseModel) {
|
|
|
325
256
|
wrapT: gl.CLAMP_TO_EDGE
|
|
326
257
|
});
|
|
327
258
|
|
|
328
|
-
|
|
259
|
+
_this3.layerService.updateLayerRenderList();
|
|
329
260
|
|
|
330
|
-
|
|
261
|
+
_this3.layerService.renderLayers();
|
|
331
262
|
};
|
|
332
263
|
|
|
333
264
|
img.src = mapTexture;
|
|
@@ -338,6 +269,99 @@ var PlaneModel = function (_BaseModel) {
|
|
|
338
269
|
});
|
|
339
270
|
}
|
|
340
271
|
}
|
|
272
|
+
}, {
|
|
273
|
+
key: "getImageData",
|
|
274
|
+
value: function getImageData(img) {
|
|
275
|
+
var canvas = document.createElement('canvas');
|
|
276
|
+
var ctx = canvas.getContext('2d');
|
|
277
|
+
var width = img.width,
|
|
278
|
+
height = img.height;
|
|
279
|
+
canvas.width = width;
|
|
280
|
+
canvas.height = height;
|
|
281
|
+
ctx.drawImage(img, 0, 0, width, height);
|
|
282
|
+
var imageData = ctx.getImageData(0, 0, width, height);
|
|
283
|
+
return imageData;
|
|
284
|
+
}
|
|
285
|
+
}, {
|
|
286
|
+
key: "translateVertex",
|
|
287
|
+
value: function translateVertex(positions, indices, image, widthSegments, heightSegments, rgb2height) {
|
|
288
|
+
var imgWidth = image.width;
|
|
289
|
+
var imgHeight = image.height;
|
|
290
|
+
var imageData = this.getImageData(image).data;
|
|
291
|
+
var gridX = Math.floor(widthSegments);
|
|
292
|
+
var gridY = Math.floor(heightSegments);
|
|
293
|
+
var gridX1 = gridX + 1;
|
|
294
|
+
var gridY1 = gridY + 1;
|
|
295
|
+
var widthStep = imgWidth / gridX;
|
|
296
|
+
var heihgtStep = imgHeight / gridY;
|
|
297
|
+
|
|
298
|
+
for (var iy = 0; iy < gridY1; iy++) {
|
|
299
|
+
var imgIndexY = Math.floor(iy * heihgtStep);
|
|
300
|
+
var imgLen = imgIndexY * imgWidth;
|
|
301
|
+
|
|
302
|
+
for (var ix = 0; ix < gridX1; ix++) {
|
|
303
|
+
var imgIndexX = Math.floor(ix * widthStep);
|
|
304
|
+
var imgDataIndex = (imgLen + imgIndexX) * 4;
|
|
305
|
+
var _r = imageData[imgDataIndex];
|
|
306
|
+
var _g = imageData[imgDataIndex + 1];
|
|
307
|
+
var _b3 = imageData[imgDataIndex + 2];
|
|
308
|
+
var z = (iy * gridX1 + ix) * 5 + 2;
|
|
309
|
+
positions[z] = rgb2height(_r, _g, _b3);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
var oldFeatures = this.layer.getEncodedData();
|
|
314
|
+
var modelData = this.styleAttributeService.createAttributesAndIndices(oldFeatures, function () {
|
|
315
|
+
return {
|
|
316
|
+
vertices: positions,
|
|
317
|
+
indices: indices,
|
|
318
|
+
size: 5
|
|
319
|
+
};
|
|
320
|
+
});
|
|
321
|
+
this.layer.updateModelData(modelData);
|
|
322
|
+
this.layerService.renderLayers();
|
|
323
|
+
}
|
|
324
|
+
}, {
|
|
325
|
+
key: "loadTerrainTexture",
|
|
326
|
+
value: function loadTerrainTexture(positions, indices) {
|
|
327
|
+
var _this4 = this;
|
|
328
|
+
|
|
329
|
+
var _ref8 = this.layer.getLayerConfig(),
|
|
330
|
+
_ref8$widthSegments = _ref8.widthSegments,
|
|
331
|
+
widthSegments = _ref8$widthSegments === void 0 ? 1 : _ref8$widthSegments,
|
|
332
|
+
_ref8$heightSegments = _ref8.heightSegments,
|
|
333
|
+
heightSegments = _ref8$heightSegments === void 0 ? 1 : _ref8$heightSegments,
|
|
334
|
+
terrainTexture = _ref8.terrainTexture,
|
|
335
|
+
_ref8$rgb2height = _ref8.rgb2height,
|
|
336
|
+
rgb2height = _ref8$rgb2height === void 0 ? function (r, g, b) {
|
|
337
|
+
return r + g + b;
|
|
338
|
+
} : _ref8$rgb2height;
|
|
339
|
+
|
|
340
|
+
if (this.terrainImage) {
|
|
341
|
+
if (this.terrainImageLoaded) {
|
|
342
|
+
this.translateVertex(positions, indices, this.terrainImage, widthSegments, heightSegments, rgb2height);
|
|
343
|
+
} else {
|
|
344
|
+
this.terrainImage.onload = function () {
|
|
345
|
+
_this4.translateVertex(positions, indices, _this4.terrainImage, widthSegments, heightSegments, rgb2height);
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
} else {
|
|
349
|
+
var terrainImage = new Image();
|
|
350
|
+
this.terrainImage = terrainImage;
|
|
351
|
+
terrainImage.crossOrigin = 'anonymous';
|
|
352
|
+
|
|
353
|
+
terrainImage.onload = function () {
|
|
354
|
+
_this4.terrainImageLoaded = true;
|
|
355
|
+
setTimeout(function () {
|
|
356
|
+
return _this4.layer.emit('terrainImageLoaded', null);
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
_this4.translateVertex(positions, indices, terrainImage, widthSegments, heightSegments, rgb2height);
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
terrainImage.src = terrainTexture;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
341
365
|
}, {
|
|
342
366
|
key: "getConfigSchema",
|
|
343
367
|
value: function getConfigSchema() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Geometry/models/plane.ts"],"names":["AttributeType","gl","Version","getMask","BaseModel","PlaneModel","layer","getLayerConfig","width","height","widthSegments","heightSegments","center","terrainTexture","initPlane","indices","positions","loadTerrainTexture","vertices","size","lng","lat","widthHalf","heightHalf","gridX","Math","floor","gridY","gridX1","gridY1","segmentWidth","segmentHeight","iy","y","ix","x","mapService","version","lngLatToCoord","a","b","push","c","d","opacity","mapTexture","terrainClipHeight","texture","destroy","updateTexture","u_opacity","u_mapFlag","u_terrainClipHeight","u_texture","mask","maskInside","createTexture2D","rendererService","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","stencil","cull","face","BACK","img","canvas","document","createElement","ctx","getContext","drawImage","imageData","getImageData","rgb2height","r","g","terrainImage","Image","crossOrigin","onload","imgWidth","imgHeight","data","widthStep","heihgtStep","imgIndexY","imgLen","imgIndexX","imgDataIndex","z","models","planeGeometryUpdateTriangulation","layerService","renderLayers","src","initModels","wrapS","CLAMP_TO_EDGE","wrapT","updateLayerRenderList","properties","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { Version } from '@antv/l7-maps';\nimport { getMask, isMini } from '@antv/l7-utils';\n// import { mat4, vec3 } from 'gl-matrix';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/plane_frag.glsl';\nimport planeVert from '../shaders/plane_vert.glsl';\n\nexport default class PlaneModel extends BaseModel {\n protected texture: ITexture2D;\n protected mapTexture: string | undefined;\n protected positions: number[];\n protected indices: number[];\n\n public initPlane(\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n lng = 120,\n lat = 30,\n ) {\n // https://github.com/mrdoob/three.js/blob/dev/src/geometries/PlaneGeometry.js\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n const indices = [];\n const positions = [];\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n if (this.mapService.version === Version['GAODE2.x']) {\n // @ts-ignore\n const [a, b] = this.mapService.lngLatToCoord([x + lng, -y + lat]) as [\n number,\n number,\n ];\n positions.push(a, b, 0);\n } else {\n positions.push(x + lng, -y + lat, 0);\n }\n\n positions.push(ix / gridX);\n positions.push(1 - iy / gridY);\n }\n }\n\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n return { indices, positions };\n }\n\n public planeGeometryTriangulation = () => {\n const {\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n center = [120, 30],\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n const { indices, positions } = this.initPlane(\n width,\n height,\n widthSegments,\n heightSegments,\n ...center,\n );\n this.positions = positions;\n this.indices = indices;\n\n if (terrainTexture) {\n // 存在地形贴图的时候会根据地形贴图对顶点进行偏移\n this.loadTerrainTexture();\n }\n\n return {\n vertices: positions,\n indices,\n size: 5,\n };\n };\n public planeGeometryUpdateTriangulation = () => {\n return {\n vertices: this.positions,\n indices: this.indices,\n size: 5,\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n mapTexture,\n terrainClipHeight = 0,\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n if (this.mapTexture !== mapTexture) {\n this.mapTexture = mapTexture;\n this.texture?.destroy();\n this.updateTexture(mapTexture);\n }\n return {\n u_opacity: opacity || 1,\n u_mapFlag: mapTexture ? 1 : 0,\n u_terrainClipHeight: terrainTexture ? terrainClipHeight : -1,\n u_texture: this.texture,\n // u_ModelMatrix: mat4.translate(mat4.create(), mat4.create(), [1, 0, 0])\n // u_ModelMatrix: mat4.rotateZ(mat4.create(), mat4.create(), 10)\n // u_ModelMatrix: mat4.rotateZ(mat4.create(), mat4.create(), 10)\n // u_ModelMatrix: this.rotateZ()\n };\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n mapTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n this.mapTexture = mapTexture;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n this.updateTexture(mapTexture);\n\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_plane',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: gl.BACK, // gl.FRONT | gl.BACK;\n },\n }),\n ];\n }\n\n public getImageData(img: HTMLImageElement) {\n const canvas: HTMLCanvasElement = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const { width, height } = img;\n canvas.width = width;\n canvas.height = height;\n\n ctx.drawImage(img, 0, 0, width, height);\n const imageData = ctx.getImageData(0, 0, width, height);\n\n return imageData;\n }\n\n /**\n * load terrain texture & offset attribute z\n */\n public loadTerrainTexture(): void {\n const {\n mask = false,\n maskInside = true,\n widthSegments = 1,\n heightSegments = 1,\n terrainTexture,\n rgb2height = (r: number, g: number, b: number) => r + g + b,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const terrainImage = new Image();\n terrainImage.crossOrigin = 'anonymous';\n terrainImage.onload = () => {\n const imgWidth = terrainImage.width;\n const imgHeight = terrainImage.height;\n\n const imageData = this.getImageData(terrainImage).data;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const widthStep = imgWidth / gridX;\n const heihgtStep = imgHeight / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const imgIndexY = Math.floor(iy * heihgtStep);\n const imgLen = imgIndexY * imgWidth;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const imgIndexX = Math.floor(ix * widthStep);\n const imgDataIndex = (imgLen + imgIndexX) * 4;\n\n const r = imageData[imgDataIndex];\n const g = imageData[imgDataIndex + 1];\n const b = imageData[imgDataIndex + 2];\n\n const z = (iy * gridX1 + ix) * 5 + 2;\n this.positions[z] = rgb2height(r, g, b);\n }\n }\n\n this.layer.models = [\n this.layer.buildLayerModel({\n moduleName: 'geometry_plane',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryUpdateTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: gl.BACK,\n },\n }),\n ];\n this.layerService.renderLayers();\n };\n terrainImage.src = terrainTexture as string;\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public updateTexture(mapTexture: string | undefined): void {\n const { createTexture2D } = this.rendererService;\n\n if (mapTexture) {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n this.texture = createTexture2D({\n data: img,\n width: img.width,\n height: img.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n };\n img.src = mapTexture;\n } else {\n this.texture = createTexture2D({\n width: 0,\n height: 0,\n });\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n}\n"],"file":"plane.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/Geometry/models/plane.ts"],"names":["AttributeType","gl","Version","getMask","BaseModel","PlaneModel","layer","getLayerConfig","width","height","widthSegments","heightSegments","center","terrainTexture","initPlane","indices","positions","loadTerrainTexture","vertices","size","lng","lat","widthHalf","heightHalf","gridX","Math","floor","gridY","gridX1","gridY1","segmentWidth","segmentHeight","iy","y","ix","x","mapService","version","lngLatToCoord","a","b","push","c","d","opacity","mapTexture","terrainClipHeight","texture","destroy","updateTexture","u_opacity","u_mapFlag","u_terrainClipHeight","u_texture","terrainImage","mask","maskInside","createTexture2D","rendererService","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","stencil","cull","face","BACK","initModels","options","oldwidthSegments","oldheightSegments","oldwidth","oldheight","style","undefined","oldFeatures","getEncodedData","res","styleAttributeService","createAttributesAndIndices","img","Image","crossOrigin","onload","data","wrapS","CLAMP_TO_EDGE","wrapT","layerService","updateLayerRenderList","renderLayers","src","canvas","document","createElement","ctx","getContext","drawImage","imageData","getImageData","image","rgb2height","imgWidth","imgHeight","widthStep","heihgtStep","imgIndexY","imgLen","imgIndexX","imgDataIndex","r","g","z","modelData","updateModelData","terrainImageLoaded","translateVertex","setTimeout","emit","properties","type","minimum","maximum","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttrubuteAndElements,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { Version } from '@antv/l7-maps';\nimport { getMask, isMini } from '@antv/l7-utils';\n// import { mat4, vec3 } from 'gl-matrix';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/plane_frag.glsl';\nimport planeVert from '../shaders/plane_vert.glsl';\n\nexport default class PlaneModel extends BaseModel {\n protected texture: ITexture2D;\n protected terrainImage: HTMLImageElement;\n protected terrainImageLoaded: boolean = false;\n protected mapTexture: string | undefined;\n\n public initPlane(\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n lng = 120,\n lat = 30,\n ) {\n // https://github.com/mrdoob/three.js/blob/dev/src/geometries/PlaneGeometry.js\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n const indices = [];\n const positions = [];\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n if (this.mapService.version === Version['GAODE2.x']) {\n // @ts-ignore\n const [a, b] = this.mapService.lngLatToCoord([x + lng, -y + lat]) as [\n number,\n number,\n ];\n positions.push(a, b, 0);\n } else {\n positions.push(x + lng, -y + lat, 0);\n }\n\n positions.push(ix / gridX);\n positions.push(1 - iy / gridY);\n }\n }\n\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n return { indices, positions };\n }\n\n public planeGeometryTriangulation = () => {\n const {\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n center = [120, 30],\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const { indices, positions } = this.initPlane(\n width,\n height,\n widthSegments,\n heightSegments,\n ...center,\n );\n if (terrainTexture) {\n // 存在地形贴图的时候会根据地形贴图对顶点进行偏移\n this.loadTerrainTexture(positions, indices);\n }\n\n return {\n vertices: positions,\n indices,\n size: 5,\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n mapTexture,\n terrainClipHeight = 0,\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n if (this.mapTexture !== mapTexture) {\n this.mapTexture = mapTexture;\n this.texture?.destroy();\n this.updateTexture(mapTexture);\n }\n return {\n u_opacity: opacity || 1,\n u_mapFlag: mapTexture ? 1 : 0,\n u_terrainClipHeight: terrainTexture ? terrainClipHeight : -1,\n u_texture: this.texture,\n };\n }\n\n public clearModels(): void {\n // @ts-ignore\n this.terrainImage = null;\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n mapTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n this.mapTexture = mapTexture;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n this.updateTexture(mapTexture);\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_plane',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n // primitive: gl.LINES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: gl.BACK, // gl.FRONT | gl.BACK;\n },\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public createModelData(options?: any) {\n if (options) {\n const {\n widthSegments: oldwidthSegments,\n heightSegments: oldheightSegments,\n width: oldwidth,\n height: oldheight,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const {\n widthSegments,\n heightSegments,\n width,\n height,\n } = options as IGeometryLayerStyleOptions;\n this.layer.style({\n widthSegments:\n widthSegments !== undefined ? widthSegments : oldwidthSegments,\n heightSegments:\n heightSegments !== undefined ? heightSegments : oldheightSegments,\n width: width !== undefined ? width : oldwidth,\n height: height !== undefined ? height : oldheight,\n });\n }\n const oldFeatures = this.layer.getEncodedData();\n const res = this.styleAttributeService.createAttributesAndIndices(\n oldFeatures,\n this.planeGeometryTriangulation,\n );\n return res;\n }\n\n public updateTexture(mapTexture: string | undefined): void {\n const { createTexture2D } = this.rendererService;\n\n if (mapTexture) {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n this.texture = createTexture2D({\n data: img,\n width: img.width,\n height: img.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n };\n img.src = mapTexture;\n } else {\n this.texture = createTexture2D({\n width: 0,\n height: 0,\n });\n }\n }\n\n protected getImageData(img: HTMLImageElement) {\n const canvas: HTMLCanvasElement = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const { width, height } = img;\n canvas.width = width;\n canvas.height = height;\n\n ctx.drawImage(img, 0, 0, width, height);\n const imageData = ctx.getImageData(0, 0, width, height);\n\n return imageData;\n }\n\n protected translateVertex(\n positions: number[],\n indices: number[],\n image: HTMLImageElement,\n widthSegments: number,\n heightSegments: number,\n rgb2height: (r: number, g: number, b: number) => number,\n ) {\n const imgWidth = image.width;\n const imgHeight = image.height;\n const imageData = this.getImageData(image).data;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const widthStep = imgWidth / gridX;\n const heihgtStep = imgHeight / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const imgIndexY = Math.floor(iy * heihgtStep);\n const imgLen = imgIndexY * imgWidth;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const imgIndexX = Math.floor(ix * widthStep);\n const imgDataIndex = (imgLen + imgIndexX) * 4;\n\n const r = imageData[imgDataIndex];\n const g = imageData[imgDataIndex + 1];\n const b = imageData[imgDataIndex + 2];\n\n const z = (iy * gridX1 + ix) * 5 + 2;\n positions[z] = rgb2height(r, g, b);\n }\n }\n\n const oldFeatures = this.layer.getEncodedData();\n const modelData = this.styleAttributeService.createAttributesAndIndices(\n oldFeatures,\n () => {\n return {\n vertices: positions,\n indices,\n size: 5,\n };\n },\n );\n this.layer.updateModelData(modelData as IAttrubuteAndElements);\n this.layerService.renderLayers();\n }\n\n /**\n * load terrain texture & offset attribute z\n */\n protected loadTerrainTexture(positions: number[], indices: number[]) {\n const {\n widthSegments = 1,\n heightSegments = 1,\n terrainTexture,\n rgb2height = (r: number, g: number, b: number) => r + g + b,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n if (this.terrainImage) {\n // 若当前已经存在 image,直接进行偏移计算(LOD)\n if (this.terrainImageLoaded) {\n this.translateVertex(\n positions,\n indices,\n this.terrainImage,\n widthSegments,\n heightSegments,\n rgb2height,\n );\n } else {\n this.terrainImage.onload = () => {\n this.translateVertex(\n positions,\n indices,\n this.terrainImage,\n widthSegments,\n heightSegments,\n rgb2height,\n );\n };\n }\n } else {\n // 加载地形贴图、根据地形贴图对 planeGeometry 进行偏移\n const terrainImage = new Image();\n this.terrainImage = terrainImage;\n terrainImage.crossOrigin = 'anonymous';\n terrainImage.onload = () => {\n this.terrainImageLoaded = true;\n // 图片加载完,触发事件,可以进行地形图的顶点计算存储\n setTimeout(() => this.layer.emit('terrainImageLoaded', null));\n this.translateVertex(\n positions,\n indices,\n terrainImage,\n widthSegments,\n heightSegments,\n rgb2height,\n );\n };\n terrainImage.src = terrainTexture as string;\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n}\n"],"file":"plane.js"}
|
|
@@ -143,7 +143,9 @@ var CanvaModel = function (_BaseModel) {
|
|
|
143
143
|
key: "clearModels",
|
|
144
144
|
value: function clearModels() {
|
|
145
145
|
if (this.canvas) {
|
|
146
|
-
|
|
146
|
+
var _this$mapService$getC;
|
|
147
|
+
|
|
148
|
+
(_this$mapService$getC = this.mapService.getContainer()) === null || _this$mapService$getC === void 0 ? void 0 : _this$mapService$getC.removeChild(this.canvas);
|
|
147
149
|
this.canvas = null;
|
|
148
150
|
}
|
|
149
151
|
|
|
@@ -166,7 +168,7 @@ var CanvaModel = function (_BaseModel) {
|
|
|
166
168
|
}, {
|
|
167
169
|
key: "initCanvas",
|
|
168
170
|
value: function initCanvas() {
|
|
169
|
-
var _this$mapService$
|
|
171
|
+
var _this$mapService$getC2;
|
|
170
172
|
|
|
171
173
|
var _ref4 = this.layer.getLayerConfig(),
|
|
172
174
|
zIndex = _ref4.zIndex;
|
|
@@ -193,7 +195,7 @@ var CanvaModel = function (_BaseModel) {
|
|
|
193
195
|
canvas.style.top = '0';
|
|
194
196
|
canvas.style.left = '0';
|
|
195
197
|
canvas.style.zIndex = zIndex + '';
|
|
196
|
-
(_this$mapService$
|
|
198
|
+
(_this$mapService$getC2 = this.mapService.getContainer()) === null || _this$mapService$getC2 === void 0 ? void 0 : _this$mapService$getC2.appendChild(canvas);
|
|
197
199
|
var ctx = canvas.getContext('2d');
|
|
198
200
|
this.ctx = ctx;
|
|
199
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/canvas/models/canvas.ts"],"names":["BaseModel","CanvasUpdateType","CanvaModel","ALWAYS","layer","getLayerConfig","zIndex","update","animateOption","enable","duration","canvas","style","updateMode","unBindListener","bindListener","renderCanvas","mapService","off","clearCanvas","on","ctx","rendererService","getViewportSize","w","width","h","height","clearRect","viewWidth","viewHeight","prevSize","size","getSize","drawingOnCanvas","
|
|
1
|
+
{"version":3,"sources":["../../../src/canvas/models/canvas.ts"],"names":["BaseModel","CanvasUpdateType","CanvaModel","ALWAYS","layer","getLayerConfig","zIndex","update","animateOption","enable","duration","canvas","style","updateMode","unBindListener","bindListener","renderCanvas","mapService","off","clearCanvas","on","ctx","rendererService","getViewportSize","w","width","h","height","clearRect","viewWidth","viewHeight","prevSize","size","getSize","drawingOnCanvas","getContainer","removeChild","initCanvas","document","createElement","pointerEvents","position","top","left","appendChild","getContext","initModels"],"mappings":"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","sourcesContent":["import { ILayerConfig, IModelUniform } from '@antv/l7-core';\nimport BaseModel from '../../core/BaseModel';\nimport {\n CanvasUpdateType,\n ICanvasLayerStyleOptions,\n IDrawingOnCanvas,\n} from '../../core/interface';\n\nexport default class CanvaModel extends BaseModel {\n protected updateMode: CanvasUpdateType = CanvasUpdateType.ALWAYS;\n protected canvas: HTMLCanvasElement;\n protected ctx: CanvasRenderingContext2D;\n protected prevSize: [number, number];\n\n public renderUpdate = () => {\n const {\n zIndex = 10,\n update = CanvasUpdateType.ALWAYS,\n animateOption = { enable: false, duration: 20 },\n } = this.layer.getLayerConfig() as Partial<\n ICanvasLayerStyleOptions & ILayerConfig\n >;\n if (+this.canvas.style.zIndex === zIndex) {\n this.canvas.style.zIndex = zIndex + '';\n }\n if (this.updateMode !== update) {\n this.updateMode = update as CanvasUpdateType;\n this.unBindListener();\n this.bindListener();\n }\n if (this.updateMode === CanvasUpdateType.ALWAYS && animateOption.enable) {\n this.renderCanvas();\n }\n };\n\n public unBindListener = () => {\n this.mapService.off('mapchange', this.renderCanvas);\n this.mapService.off('zoomstart', this.clearCanvas);\n this.mapService.off('zoomend', this.renderCanvas);\n this.mapService.off('movestart', this.clearCanvas);\n this.mapService.off('moveend', this.renderCanvas);\n };\n\n public bindListener = () => {\n if (this.updateMode === CanvasUpdateType.ALWAYS) {\n this.mapService.on('mapchange', this.renderCanvas);\n } else {\n this.mapService.on('zoomstart', this.clearCanvas);\n this.mapService.on('zoomend', this.renderCanvas);\n this.mapService.on('movestart', this.clearCanvas);\n this.mapService.on('moveend', this.renderCanvas);\n }\n };\n\n public clearModels(): void {\n if (this.canvas) {\n this.mapService.getContainer()?.removeChild(this.canvas);\n // @ts-ignore\n this.canvas = null;\n }\n this.unBindListener();\n }\n\n public initModels() {\n const {\n update = CanvasUpdateType.ALWAYS,\n } = this.layer.getLayerConfig() as ICanvasLayerStyleOptions;\n this.updateMode = update as CanvasUpdateType;\n this.initCanvas();\n\n this.renderCanvas();\n\n this.bindListener();\n\n this.mapService.getContainer();\n return [];\n }\n\n public initCanvas(): void {\n const { zIndex } = this.layer.getLayerConfig() as ICanvasLayerStyleOptions;\n const size = this.mapService.getSize();\n const [width, height] = size;\n const {\n width: viewWidth,\n height: viewHeight,\n } = this.rendererService.getViewportSize();\n this.prevSize = [viewWidth, viewHeight];\n\n const canvas = document.createElement('canvas');\n this.canvas = canvas;\n canvas.width = viewWidth;\n canvas.height = viewHeight;\n canvas.style.pointerEvents = 'none';\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n canvas.style.position = 'absolute';\n canvas.style.top = '0';\n canvas.style.left = '0';\n canvas.style.zIndex = zIndex + '';\n this.mapService.getContainer()?.appendChild(canvas);\n\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n this.ctx = ctx;\n }\n\n public clearCanvas = () => {\n if (this.ctx) {\n const { width: w, height: h } = this.rendererService.getViewportSize();\n this.ctx.clearRect(0, 0, w, h);\n }\n };\n\n public renderCanvas = () => {\n const {\n width: viewWidth,\n height: viewHeight,\n } = this.rendererService.getViewportSize();\n if (this.prevSize[0] !== viewWidth || this.prevSize[1] !== viewHeight) {\n this.prevSize = [viewWidth, viewHeight];\n const size = this.mapService.getSize();\n const [width, height] = size;\n this.canvas.width = viewWidth;\n this.canvas.height = viewHeight;\n this.canvas.style.width = width + 'px';\n this.canvas.style.height = height + 'px';\n }\n\n const {\n drawingOnCanvas,\n } = this.layer.getLayerConfig() as ICanvasLayerStyleOptions;\n\n if (this.ctx) {\n drawingOnCanvas({\n canvas: this.canvas,\n ctx: this.ctx,\n mapService: this.mapService,\n size: [viewWidth, viewHeight],\n });\n }\n };\n\n public buildModels() {\n return this.initModels();\n }\n\n protected registerBuiltinAttributes() {\n return;\n }\n}\n"],"file":"canvas.js"}
|
package/es/core/BaseLayer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';
|
|
2
|
-
import { BlendType, IActiveOption, IAnimateOption, ICameraService, ICoordinateSystemService, IDataState, IEncodeFeature, IFontService, IGlobalConfigService, IIconService, IInteractionService, ILayer, ILayerConfig, ILayerModel, ILayerModelInitializationOptions, ILayerPlugin, ILayerService, IMapService, IModel, IModelInitializationOptions, IMultiPassRenderer, IPass, IPickingService, IPostProcessingPass, IRendererService, IScale, IScaleOptions, IShaderModuleService, ISourceCFG, IStyleAttributeService, IStyleAttributeUpdateOptions, LegendItems, StyleAttributeField, StyleAttributeOption } from '@antv/l7-core';
|
|
2
|
+
import { BlendType, IActiveOption, IAnimateOption, IAttrubuteAndElements, ICameraService, ICoordinateSystemService, IDataState, IEncodeFeature, IFontService, IGlobalConfigService, IIconService, IInteractionService, ILayer, ILayerConfig, ILayerModel, ILayerModelInitializationOptions, ILayerPlugin, ILayerService, IMapService, IModel, IModelInitializationOptions, IMultiPassRenderer, IPass, IPickingService, IPostProcessingPass, IRendererService, IScale, IScaleOptions, IShaderModuleService, ISourceCFG, IStyleAttributeService, IStyleAttributeUpdateOptions, LegendItems, StyleAttributeField, StyleAttributeOption, Triangulation } from '@antv/l7-core';
|
|
3
3
|
import Source from '@antv/l7-source';
|
|
4
4
|
import { EventEmitter } from 'eventemitter3';
|
|
5
5
|
import { Container } from 'inversify';
|
|
@@ -20,6 +20,7 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter
|
|
|
20
20
|
clusterZoom: number;
|
|
21
21
|
layerType?: string | undefined;
|
|
22
22
|
isLayerGroup: boolean;
|
|
23
|
+
triangulation?: Triangulation | undefined;
|
|
23
24
|
dataState: IDataState;
|
|
24
25
|
hooks: {
|
|
25
26
|
init: SyncBailHook;
|
|
@@ -102,6 +103,9 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter
|
|
|
102
103
|
getBottomColor(): string;
|
|
103
104
|
addPlugin(plugin: ILayerPlugin): ILayer;
|
|
104
105
|
init(): this;
|
|
106
|
+
updateModelData(data: IAttrubuteAndElements): void;
|
|
107
|
+
createModelData(data: any, option?: ISourceCFG): any;
|
|
108
|
+
calculateEncodeData(data: any, option?: ISourceCFG): IEncodeFeature[] | null;
|
|
105
109
|
/**
|
|
106
110
|
* Model初始化前需要更新Model样式
|
|
107
111
|
*/
|
package/es/core/BaseLayer.js
CHANGED
|
@@ -41,6 +41,7 @@ import { encodePickingColor } from '@antv/l7-utils';
|
|
|
41
41
|
import { EventEmitter } from 'eventemitter3';
|
|
42
42
|
import { BlendTypes } from '../utils/blend';
|
|
43
43
|
import { handleStyleDataMapping } from '../utils/dataMappingStyle';
|
|
44
|
+
import { calculateData } from '../utils/layerData';
|
|
44
45
|
import { createMultiPassRenderer, normalizePasses } from '../utils/multiPassRender';
|
|
45
46
|
import { updateShape } from '../utils/updateShape';
|
|
46
47
|
var layerIdCounter = 0;
|
|
@@ -90,6 +91,8 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
90
91
|
|
|
91
92
|
_defineProperty(_assertThisInitialized(_this), "isLayerGroup", false);
|
|
92
93
|
|
|
94
|
+
_defineProperty(_assertThisInitialized(_this), "triangulation", void 0);
|
|
95
|
+
|
|
93
96
|
_defineProperty(_assertThisInitialized(_this), "dataState", {
|
|
94
97
|
dataSourceNeedUpdate: false,
|
|
95
98
|
dataMappingNeedUpdate: false,
|
|
@@ -351,6 +354,46 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
351
354
|
});
|
|
352
355
|
return this;
|
|
353
356
|
}
|
|
357
|
+
}, {
|
|
358
|
+
key: "updateModelData",
|
|
359
|
+
value: function updateModelData(data) {
|
|
360
|
+
if (data.attributes && data.elements) {
|
|
361
|
+
this.models.map(function (m) {
|
|
362
|
+
m.updateAttributesAndElements(data.attributes, data.elements);
|
|
363
|
+
});
|
|
364
|
+
} else {
|
|
365
|
+
console.warn('data error');
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}, {
|
|
369
|
+
key: "createModelData",
|
|
370
|
+
value: function createModelData(data, option) {
|
|
371
|
+
if (this.layerModel.createModelData) {
|
|
372
|
+
return this.layerModel.createModelData(option);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
var calEncodeData = this.calculateEncodeData(data, option);
|
|
376
|
+
var triangulation = this.triangulation;
|
|
377
|
+
|
|
378
|
+
if (calEncodeData && triangulation) {
|
|
379
|
+
return this.styleAttributeService.createAttributesAndIndices(calEncodeData, triangulation);
|
|
380
|
+
} else {
|
|
381
|
+
return {
|
|
382
|
+
attributes: undefined,
|
|
383
|
+
elements: undefined
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}, {
|
|
388
|
+
key: "calculateEncodeData",
|
|
389
|
+
value: function calculateEncodeData(data, option) {
|
|
390
|
+
if (this.inited) {
|
|
391
|
+
return calculateData(this, this.fontService, this.mapService, this.styleAttributeService, data, option);
|
|
392
|
+
} else {
|
|
393
|
+
console.warn('layer not inited!');
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
354
397
|
}, {
|
|
355
398
|
key: "prepareBuildModel",
|
|
356
399
|
value: function prepareBuildModel() {
|
|
@@ -713,6 +756,10 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
713
756
|
}, {
|
|
714
757
|
key: "hide",
|
|
715
758
|
value: function hide() {
|
|
759
|
+
if (this.type === 'CanvasLayer' && this.layerModel.clearCanvas) {
|
|
760
|
+
this.layerModel.clearCanvas();
|
|
761
|
+
}
|
|
762
|
+
|
|
716
763
|
this.updateLayerConfig({
|
|
717
764
|
visible: false
|
|
718
765
|
});
|