@deck.gl/geo-layers 8.10.0-alpha.7 → 9.0.0-alpha.4
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/dist.dev.js +2374 -19037
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/es5/geohash-layer/geohash-layer.js.map +1 -1
- package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js +10 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/index.js +0 -8
- package/dist/es5/index.js.map +1 -1
- package/{src/mesh-layer/mesh-layer.ts → dist/es5/mesh-layer/mesh-layer.ts.disabled} +8 -7
- package/dist/es5/mvt-layer/mvt-layer.js +15 -6
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/es5/s2-layer/s2-layer.js.map +1 -1
- package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
- package/{src/tile-3d-layer/tile-3d-layer.ts → dist/es5/tile-3d-layer/tile-3d-layer.ts.disabled} +10 -11
- package/dist/es5/tile-layer/tile-layer.js +19 -9
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tileset-2d/tileset-2d.js +1 -1
- package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
- package/dist/es5/tileset-2d/utils.js +2 -3
- package/dist/es5/tileset-2d/utils.js.map +1 -1
- package/dist/es5/trips-layer/trips-layer.js.map +1 -1
- package/dist/es5/wms-layer/wms-layer.js +6 -8
- package/dist/es5/wms-layer/wms-layer.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
- package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-cluster-layer.js +5 -0
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer.ts.disabled +176 -0
- package/dist/esm/mvt-layer/mvt-layer.js +6 -1
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/esm/s2-layer/s2-layer.js.map +1 -1
- package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.ts.disabled +435 -0
- package/dist/esm/tile-layer/tile-layer.js +10 -6
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tileset-2d/tileset-2d.js +1 -1
- package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
- package/dist/esm/tileset-2d/utils.js +2 -2
- package/dist/esm/tileset-2d/utils.js.map +1 -1
- package/dist/esm/trips-layer/trips-layer.js.map +1 -1
- package/dist/esm/wms-layer/wms-layer.js +5 -5
- package/dist/esm/wms-layer/wms-layer.js.map +1 -1
- package/dist.min.js +29 -161
- package/package.json +14 -14
- package/src/geo-cell-layer/GeoCellLayer.ts +1 -1
- package/src/geohash-layer/geohash-layer.ts +2 -2
- package/src/great-circle-layer/great-circle-layer.ts +1 -1
- package/src/h3-layers/h3-cluster-layer.ts +6 -2
- package/src/h3-layers/h3-hexagon-layer.ts +2 -2
- package/src/index.ts +4 -2
- package/src/mesh-layer/mesh-layer.ts.disabled +176 -0
- package/src/mvt-layer/mvt-layer.ts +16 -6
- package/src/quadkey-layer/quadkey-layer.ts +3 -2
- package/src/s2-layer/s2-layer.ts +2 -2
- package/src/terrain-layer/terrain-layer.ts +2 -2
- package/src/tile-3d-layer/tile-3d-layer.ts.disabled +435 -0
- package/src/tile-layer/tile-layer.ts +20 -10
- package/src/tileset-2d/tile-2d-traversal.ts +1 -1
- package/src/tileset-2d/tileset-2d.ts +6 -7
- package/src/tileset-2d/utils.ts +4 -4
- package/src/trips-layer/trips-layer.ts +3 -3
- package/src/wms-layer/wms-layer.ts +10 -8
- package/typed/geo-cell-layer/GeoCellLayer.d.ts +1 -1
- package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
- package/typed/geohash-layer/geohash-layer.d.ts +2 -2
- package/typed/geohash-layer/geohash-layer.d.ts.map +1 -1
- package/typed/great-circle-layer/great-circle-layer.d.ts +2 -2
- package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -1
- package/typed/h3-layers/h3-cluster-layer.d.ts +7 -2
- package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
- package/typed/h3-layers/h3-hexagon-layer.d.ts +2 -2
- package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
- package/typed/index.d.ts +0 -2
- package/typed/index.d.ts.map +1 -1
- package/typed/mvt-layer/mvt-layer.d.ts +9 -1
- package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
- package/typed/quadkey-layer/quadkey-layer.d.ts +2 -2
- package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -1
- package/typed/s2-layer/s2-layer.d.ts +2 -2
- package/typed/s2-layer/s2-layer.d.ts.map +1 -1
- package/typed/terrain-layer/terrain-layer.d.ts +2 -2
- package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
- package/typed/tile-layer/tile-layer.d.ts +7 -2
- package/typed/tile-layer/tile-layer.d.ts.map +1 -1
- package/typed/tileset-2d/tile-2d-traversal.d.ts +1 -1
- package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -1
- package/typed/tileset-2d/tileset-2d.d.ts +4 -4
- package/typed/tileset-2d/tileset-2d.d.ts.map +1 -1
- package/typed/tileset-2d/utils.d.ts +2 -2
- package/typed/tileset-2d/utils.d.ts.map +1 -1
- package/typed/trips-layer/trips-layer.d.ts +3 -3
- package/typed/trips-layer/trips-layer.d.ts.map +1 -1
- package/typed/wms-layer/wms-layer.d.ts.map +1 -1
- package/LICENSE +0 -19
- package/dist/es5/mesh-layer/mesh-layer.js +0 -212
- package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -512
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
- package/dist/esm/mesh-layer/mesh-layer.js +0 -177
- package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -443
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
- package/typed/mesh-layer/mesh-layer.d.ts +0 -38
- package/typed/mesh-layer/mesh-layer.d.ts.map +0 -1
- package/typed/tile-3d-layer/tile-3d-layer.d.ts +0 -62
- package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +0 -1
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { GLTFMaterialParser } from '@luma.gl/experimental';
|
|
2
|
-
import { Model, pbr } from '@luma.gl/core';
|
|
3
|
-
import { SimpleMeshLayer } from '@deck.gl/mesh-layers';
|
|
4
|
-
import vs from './mesh-layer-vertex.glsl';
|
|
5
|
-
import fs from './mesh-layer-fragment.glsl';
|
|
6
|
-
|
|
7
|
-
function validateGeometryAttributes(attributes) {
|
|
8
|
-
const hasColorAttribute = attributes.COLOR_0 || attributes.colors;
|
|
9
|
-
|
|
10
|
-
if (!hasColorAttribute) {
|
|
11
|
-
attributes.colors = {
|
|
12
|
-
constant: true,
|
|
13
|
-
value: new Float32Array([1, 1, 1])
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const defaultProps = {
|
|
19
|
-
pbrMaterial: {
|
|
20
|
-
type: 'object',
|
|
21
|
-
value: null
|
|
22
|
-
},
|
|
23
|
-
featureIds: {
|
|
24
|
-
type: 'array',
|
|
25
|
-
value: null,
|
|
26
|
-
optional: true
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
export default class MeshLayer extends SimpleMeshLayer {
|
|
30
|
-
getShaders() {
|
|
31
|
-
const shaders = super.getShaders();
|
|
32
|
-
const modules = shaders.modules;
|
|
33
|
-
modules.push(pbr);
|
|
34
|
-
return { ...shaders,
|
|
35
|
-
vs,
|
|
36
|
-
fs
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
initializeState() {
|
|
41
|
-
const {
|
|
42
|
-
featureIds
|
|
43
|
-
} = this.props;
|
|
44
|
-
super.initializeState();
|
|
45
|
-
const attributeManager = this.getAttributeManager();
|
|
46
|
-
|
|
47
|
-
if (featureIds) {
|
|
48
|
-
attributeManager.add({
|
|
49
|
-
featureIdsPickingColors: {
|
|
50
|
-
type: 5121,
|
|
51
|
-
size: 3,
|
|
52
|
-
noAlloc: true,
|
|
53
|
-
update: this.calculateFeatureIdsPickingColors
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
updateState(params) {
|
|
60
|
-
super.updateState(params);
|
|
61
|
-
const {
|
|
62
|
-
props,
|
|
63
|
-
oldProps
|
|
64
|
-
} = params;
|
|
65
|
-
|
|
66
|
-
if (props.pbrMaterial !== oldProps.pbrMaterial) {
|
|
67
|
-
this.updatePbrMaterialUniforms(props.pbrMaterial);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
draw(opts) {
|
|
72
|
-
const {
|
|
73
|
-
featureIds
|
|
74
|
-
} = this.props;
|
|
75
|
-
|
|
76
|
-
if (!this.state.model) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
this.state.model.setUniforms({
|
|
81
|
-
u_Camera: this.state.model.getUniforms().project_uCameraPosition,
|
|
82
|
-
pickFeatureIds: Boolean(featureIds)
|
|
83
|
-
});
|
|
84
|
-
super.draw(opts);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
getModel(mesh) {
|
|
88
|
-
const {
|
|
89
|
-
id,
|
|
90
|
-
pbrMaterial
|
|
91
|
-
} = this.props;
|
|
92
|
-
const materialParser = this.parseMaterial(pbrMaterial, mesh);
|
|
93
|
-
this.setState({
|
|
94
|
-
materialParser
|
|
95
|
-
});
|
|
96
|
-
const shaders = this.getShaders();
|
|
97
|
-
validateGeometryAttributes(mesh.attributes);
|
|
98
|
-
const model = new Model(this.context.gl, { ...this.getShaders(),
|
|
99
|
-
id,
|
|
100
|
-
geometry: mesh,
|
|
101
|
-
defines: { ...shaders.defines,
|
|
102
|
-
...(materialParser === null || materialParser === void 0 ? void 0 : materialParser.defines),
|
|
103
|
-
HAS_UV_REGIONS: mesh.attributes.uvRegions
|
|
104
|
-
},
|
|
105
|
-
parameters: materialParser === null || materialParser === void 0 ? void 0 : materialParser.parameters,
|
|
106
|
-
isInstanced: true
|
|
107
|
-
});
|
|
108
|
-
return model;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
updatePbrMaterialUniforms(pbrMaterial) {
|
|
112
|
-
const {
|
|
113
|
-
model
|
|
114
|
-
} = this.state;
|
|
115
|
-
|
|
116
|
-
if (model) {
|
|
117
|
-
const {
|
|
118
|
-
mesh
|
|
119
|
-
} = this.props;
|
|
120
|
-
const materialParser = this.parseMaterial(pbrMaterial, mesh);
|
|
121
|
-
this.setState({
|
|
122
|
-
materialParser
|
|
123
|
-
});
|
|
124
|
-
model.setUniforms(materialParser.uniforms);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
parseMaterial(pbrMaterial, mesh) {
|
|
129
|
-
var _this$state$materialP;
|
|
130
|
-
|
|
131
|
-
const unlit = Boolean(pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture);
|
|
132
|
-
(_this$state$materialP = this.state.materialParser) === null || _this$state$materialP === void 0 ? void 0 : _this$state$materialP.delete();
|
|
133
|
-
return new GLTFMaterialParser(this.context.gl, {
|
|
134
|
-
attributes: {
|
|
135
|
-
NORMAL: mesh.attributes.normals,
|
|
136
|
-
TEXCOORD_0: mesh.attributes.texCoords
|
|
137
|
-
},
|
|
138
|
-
material: {
|
|
139
|
-
unlit,
|
|
140
|
-
...pbrMaterial
|
|
141
|
-
},
|
|
142
|
-
pbrDebug: false,
|
|
143
|
-
imageBasedLightingEnvironment: null,
|
|
144
|
-
lights: true,
|
|
145
|
-
useTangents: false
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
calculateFeatureIdsPickingColors(attribute) {
|
|
150
|
-
const featureIds = this.props.featureIds;
|
|
151
|
-
const value = new Uint8ClampedArray(featureIds.length * attribute.size);
|
|
152
|
-
const pickingColor = [];
|
|
153
|
-
|
|
154
|
-
for (let index = 0; index < featureIds.length; index++) {
|
|
155
|
-
this.encodePickingColor(featureIds[index], pickingColor);
|
|
156
|
-
value[index * 3] = pickingColor[0];
|
|
157
|
-
value[index * 3 + 1] = pickingColor[1];
|
|
158
|
-
value[index * 3 + 2] = pickingColor[2];
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
attribute.value = value;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
finalizeState(context) {
|
|
165
|
-
var _this$state$materialP2;
|
|
166
|
-
|
|
167
|
-
super.finalizeState(context);
|
|
168
|
-
(_this$state$materialP2 = this.state.materialParser) === null || _this$state$materialP2 === void 0 ? void 0 : _this$state$materialP2.delete();
|
|
169
|
-
this.setState({
|
|
170
|
-
materialParser: null
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
MeshLayer.layerName = 'MeshLayer';
|
|
176
|
-
MeshLayer.defaultProps = defaultProps;
|
|
177
|
-
//# sourceMappingURL=mesh-layer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mesh-layer/mesh-layer.ts"],"names":["GLTFMaterialParser","Model","pbr","SimpleMeshLayer","vs","fs","validateGeometryAttributes","attributes","hasColorAttribute","COLOR_0","colors","constant","value","Float32Array","defaultProps","pbrMaterial","type","featureIds","optional","MeshLayer","getShaders","shaders","modules","push","initializeState","props","attributeManager","getAttributeManager","add","featureIdsPickingColors","size","noAlloc","update","calculateFeatureIdsPickingColors","updateState","params","oldProps","updatePbrMaterialUniforms","draw","opts","state","model","setUniforms","u_Camera","getUniforms","project_uCameraPosition","pickFeatureIds","Boolean","getModel","mesh","id","materialParser","parseMaterial","setState","context","gl","geometry","defines","HAS_UV_REGIONS","uvRegions","parameters","isInstanced","uniforms","unlit","pbrMetallicRoughness","baseColorTexture","delete","NORMAL","normals","TEXCOORD_0","texCoords","material","pbrDebug","imageBasedLightingEnvironment","lights","useTangents","attribute","Uint8ClampedArray","length","pickingColor","index","encodePickingColor","finalizeState","layerName"],"mappings":"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","sourcesContent":["import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = any> = _MeshLayerProps & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbr);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n });\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n"],"file":"mesh-layer.js"}
|
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
import { Geometry } from '@luma.gl/core';
|
|
2
|
-
import { CompositeLayer, COORDINATE_SYSTEM, log } from '@deck.gl/core';
|
|
3
|
-
import { PointCloudLayer } from '@deck.gl/layers';
|
|
4
|
-
import { ScenegraphLayer } from '@deck.gl/mesh-layers';
|
|
5
|
-
import { default as MeshLayer } from '../mesh-layer/mesh-layer';
|
|
6
|
-
import { load } from '@loaders.gl/core';
|
|
7
|
-
import { Tileset3D, TILE_TYPE } from '@loaders.gl/tiles';
|
|
8
|
-
import { Tiles3DLoader } from '@loaders.gl/3d-tiles';
|
|
9
|
-
const SINGLE_DATA = [0];
|
|
10
|
-
const defaultProps = {
|
|
11
|
-
getPointColor: {
|
|
12
|
-
type: 'accessor',
|
|
13
|
-
value: [0, 0, 0, 255]
|
|
14
|
-
},
|
|
15
|
-
pointSize: 1.0,
|
|
16
|
-
data: '',
|
|
17
|
-
loader: Tiles3DLoader,
|
|
18
|
-
onTilesetLoad: {
|
|
19
|
-
type: 'function',
|
|
20
|
-
value: tileset3d => {}
|
|
21
|
-
},
|
|
22
|
-
onTileLoad: {
|
|
23
|
-
type: 'function',
|
|
24
|
-
value: tileHeader => {}
|
|
25
|
-
},
|
|
26
|
-
onTileUnload: {
|
|
27
|
-
type: 'function',
|
|
28
|
-
value: tileHeader => {}
|
|
29
|
-
},
|
|
30
|
-
onTileError: {
|
|
31
|
-
type: 'function',
|
|
32
|
-
value: (tile, message, url) => {}
|
|
33
|
-
},
|
|
34
|
-
_getMeshColor: {
|
|
35
|
-
type: 'function',
|
|
36
|
-
value: tileHeader => [255, 255, 255]
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
export default class Tile3DLayer extends CompositeLayer {
|
|
40
|
-
constructor(...args) {
|
|
41
|
-
super(...args);
|
|
42
|
-
this.state = void 0;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
initializeState() {
|
|
46
|
-
if ('onTileLoadFail' in this.props) {
|
|
47
|
-
log.removed('onTileLoadFail', 'onTileError')();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
this.state = {
|
|
51
|
-
layerMap: {},
|
|
52
|
-
tileset3d: null,
|
|
53
|
-
activeViewports: {},
|
|
54
|
-
lastUpdatedViewports: null
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
get isLoaded() {
|
|
59
|
-
const {
|
|
60
|
-
tileset3d
|
|
61
|
-
} = this.state;
|
|
62
|
-
return tileset3d !== null && tileset3d.isLoaded();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
shouldUpdateState({
|
|
66
|
-
changeFlags
|
|
67
|
-
}) {
|
|
68
|
-
return changeFlags.somethingChanged;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
updateState({
|
|
72
|
-
props,
|
|
73
|
-
oldProps,
|
|
74
|
-
changeFlags
|
|
75
|
-
}) {
|
|
76
|
-
if (props.data && props.data !== oldProps.data) {
|
|
77
|
-
this._loadTileset(props.data);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (changeFlags.viewportChanged) {
|
|
81
|
-
const {
|
|
82
|
-
activeViewports
|
|
83
|
-
} = this.state;
|
|
84
|
-
const viewportsNumber = Object.keys(activeViewports).length;
|
|
85
|
-
|
|
86
|
-
if (viewportsNumber) {
|
|
87
|
-
this._updateTileset(activeViewports);
|
|
88
|
-
|
|
89
|
-
this.state.lastUpdatedViewports = activeViewports;
|
|
90
|
-
this.state.activeViewports = {};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (changeFlags.propsChanged) {
|
|
95
|
-
const {
|
|
96
|
-
layerMap
|
|
97
|
-
} = this.state;
|
|
98
|
-
|
|
99
|
-
for (const key in layerMap) {
|
|
100
|
-
layerMap[key].needsUpdate = true;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
activateViewport(viewport) {
|
|
106
|
-
const {
|
|
107
|
-
activeViewports,
|
|
108
|
-
lastUpdatedViewports
|
|
109
|
-
} = this.state;
|
|
110
|
-
this.internalState.viewport = viewport;
|
|
111
|
-
activeViewports[viewport.id] = viewport;
|
|
112
|
-
const lastViewport = lastUpdatedViewports === null || lastUpdatedViewports === void 0 ? void 0 : lastUpdatedViewports[viewport.id];
|
|
113
|
-
|
|
114
|
-
if (!lastViewport || !viewport.equals(lastViewport)) {
|
|
115
|
-
this.setChangeFlags({
|
|
116
|
-
viewportChanged: true
|
|
117
|
-
});
|
|
118
|
-
this.setNeedsUpdate();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
getPickingInfo({
|
|
123
|
-
info,
|
|
124
|
-
sourceLayer
|
|
125
|
-
}) {
|
|
126
|
-
const sourceTile = sourceLayer && sourceLayer.props.tile;
|
|
127
|
-
|
|
128
|
-
if (info.picked) {
|
|
129
|
-
info.object = sourceTile;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
info.sourceTile = sourceTile;
|
|
133
|
-
return info;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
filterSubLayer({
|
|
137
|
-
layer,
|
|
138
|
-
viewport
|
|
139
|
-
}) {
|
|
140
|
-
const {
|
|
141
|
-
tile
|
|
142
|
-
} = layer.props;
|
|
143
|
-
const {
|
|
144
|
-
id: viewportId
|
|
145
|
-
} = viewport;
|
|
146
|
-
return tile.selected && tile.viewportIds.includes(viewportId);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
_updateAutoHighlight(info) {
|
|
150
|
-
const sourceTile = info.sourceTile;
|
|
151
|
-
const layerCache = this.state.layerMap[sourceTile === null || sourceTile === void 0 ? void 0 : sourceTile.id];
|
|
152
|
-
|
|
153
|
-
if (layerCache && layerCache.layer) {
|
|
154
|
-
layerCache.layer.updateAutoHighlight(info);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
async _loadTileset(tilesetUrl) {
|
|
159
|
-
const {
|
|
160
|
-
loadOptions = {}
|
|
161
|
-
} = this.props;
|
|
162
|
-
let loader = this.props.loader || this.props.loaders;
|
|
163
|
-
|
|
164
|
-
if (Array.isArray(loader)) {
|
|
165
|
-
loader = loader[0];
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const options = {
|
|
169
|
-
loadOptions: { ...loadOptions
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
let actualTilesetUrl = tilesetUrl;
|
|
173
|
-
|
|
174
|
-
if (loader.preload) {
|
|
175
|
-
const preloadOptions = await loader.preload(tilesetUrl, loadOptions);
|
|
176
|
-
|
|
177
|
-
if (preloadOptions.url) {
|
|
178
|
-
actualTilesetUrl = preloadOptions.url;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
if (preloadOptions.headers) {
|
|
182
|
-
options.loadOptions.fetch = { ...options.loadOptions.fetch,
|
|
183
|
-
headers: preloadOptions.headers
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
Object.assign(options, preloadOptions);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
const tilesetJson = await load(actualTilesetUrl, loader, options.loadOptions);
|
|
191
|
-
const tileset3d = new Tileset3D(tilesetJson, {
|
|
192
|
-
onTileLoad: this._onTileLoad.bind(this),
|
|
193
|
-
onTileUnload: this._onTileUnload.bind(this),
|
|
194
|
-
onTileError: this.props.onTileError,
|
|
195
|
-
...options
|
|
196
|
-
});
|
|
197
|
-
this.setState({
|
|
198
|
-
tileset3d,
|
|
199
|
-
layerMap: {}
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
this._updateTileset(this.state.activeViewports);
|
|
203
|
-
|
|
204
|
-
this.props.onTilesetLoad(tileset3d);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
_onTileLoad(tileHeader) {
|
|
208
|
-
const {
|
|
209
|
-
lastUpdatedViewports
|
|
210
|
-
} = this.state;
|
|
211
|
-
this.props.onTileLoad(tileHeader);
|
|
212
|
-
|
|
213
|
-
this._updateTileset(lastUpdatedViewports);
|
|
214
|
-
|
|
215
|
-
this.setNeedsUpdate();
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
_onTileUnload(tileHeader) {
|
|
219
|
-
delete this.state.layerMap[tileHeader.id];
|
|
220
|
-
this.props.onTileUnload(tileHeader);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
_updateTileset(viewports) {
|
|
224
|
-
if (!viewports) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const {
|
|
229
|
-
tileset3d
|
|
230
|
-
} = this.state;
|
|
231
|
-
const {
|
|
232
|
-
timeline
|
|
233
|
-
} = this.context;
|
|
234
|
-
const viewportsNumber = Object.keys(viewports).length;
|
|
235
|
-
|
|
236
|
-
if (!timeline || !viewportsNumber || !tileset3d) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
tileset3d.selectTiles(Object.values(viewports)).then(frameNumber => {
|
|
241
|
-
const tilesetChanged = this.state.frameNumber !== frameNumber;
|
|
242
|
-
|
|
243
|
-
if (tilesetChanged) {
|
|
244
|
-
this.setState({
|
|
245
|
-
frameNumber
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
_getSubLayer(tileHeader, oldLayer) {
|
|
252
|
-
if (!tileHeader.content) {
|
|
253
|
-
return null;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
switch (tileHeader.type) {
|
|
257
|
-
case TILE_TYPE.POINTCLOUD:
|
|
258
|
-
return this._makePointCloudLayer(tileHeader, oldLayer);
|
|
259
|
-
|
|
260
|
-
case TILE_TYPE.SCENEGRAPH:
|
|
261
|
-
return this._make3DModelLayer(tileHeader);
|
|
262
|
-
|
|
263
|
-
case TILE_TYPE.MESH:
|
|
264
|
-
return this._makeSimpleMeshLayer(tileHeader, oldLayer);
|
|
265
|
-
|
|
266
|
-
default:
|
|
267
|
-
throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
_makePointCloudLayer(tileHeader, oldLayer) {
|
|
272
|
-
const {
|
|
273
|
-
attributes,
|
|
274
|
-
pointCount,
|
|
275
|
-
constantRGBA,
|
|
276
|
-
cartographicOrigin,
|
|
277
|
-
modelMatrix
|
|
278
|
-
} = tileHeader.content;
|
|
279
|
-
const {
|
|
280
|
-
positions,
|
|
281
|
-
normals,
|
|
282
|
-
colors
|
|
283
|
-
} = attributes;
|
|
284
|
-
|
|
285
|
-
if (!positions) {
|
|
286
|
-
return null;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
const data = oldLayer && oldLayer.props.data || {
|
|
290
|
-
header: {
|
|
291
|
-
vertexCount: pointCount
|
|
292
|
-
},
|
|
293
|
-
attributes: {
|
|
294
|
-
POSITION: positions,
|
|
295
|
-
NORMAL: normals,
|
|
296
|
-
COLOR_0: colors
|
|
297
|
-
}
|
|
298
|
-
};
|
|
299
|
-
const {
|
|
300
|
-
pointSize,
|
|
301
|
-
getPointColor
|
|
302
|
-
} = this.props;
|
|
303
|
-
const SubLayerClass = this.getSubLayerClass('pointcloud', PointCloudLayer);
|
|
304
|
-
return new SubLayerClass({
|
|
305
|
-
pointSize
|
|
306
|
-
}, this.getSubLayerProps({
|
|
307
|
-
id: 'pointcloud'
|
|
308
|
-
}), {
|
|
309
|
-
id: `${this.id}-pointcloud-${tileHeader.id}`,
|
|
310
|
-
tile: tileHeader,
|
|
311
|
-
data,
|
|
312
|
-
coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
|
|
313
|
-
coordinateOrigin: cartographicOrigin,
|
|
314
|
-
modelMatrix,
|
|
315
|
-
getColor: constantRGBA || getPointColor,
|
|
316
|
-
_offset: 0
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
_make3DModelLayer(tileHeader) {
|
|
321
|
-
const {
|
|
322
|
-
gltf,
|
|
323
|
-
instances,
|
|
324
|
-
cartographicOrigin,
|
|
325
|
-
modelMatrix
|
|
326
|
-
} = tileHeader.content;
|
|
327
|
-
const SubLayerClass = this.getSubLayerClass('scenegraph', ScenegraphLayer);
|
|
328
|
-
return new SubLayerClass({
|
|
329
|
-
_lighting: 'pbr'
|
|
330
|
-
}, this.getSubLayerProps({
|
|
331
|
-
id: 'scenegraph'
|
|
332
|
-
}), {
|
|
333
|
-
id: `${this.id}-scenegraph-${tileHeader.id}`,
|
|
334
|
-
tile: tileHeader,
|
|
335
|
-
data: instances || SINGLE_DATA,
|
|
336
|
-
scenegraph: gltf,
|
|
337
|
-
coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
|
|
338
|
-
coordinateOrigin: cartographicOrigin,
|
|
339
|
-
modelMatrix,
|
|
340
|
-
getTransformMatrix: instance => instance.modelMatrix,
|
|
341
|
-
getPosition: [0, 0, 0],
|
|
342
|
-
_offset: 0
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
_makeSimpleMeshLayer(tileHeader, oldLayer) {
|
|
347
|
-
const content = tileHeader.content;
|
|
348
|
-
const {
|
|
349
|
-
attributes,
|
|
350
|
-
indices,
|
|
351
|
-
modelMatrix,
|
|
352
|
-
cartographicOrigin,
|
|
353
|
-
coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS,
|
|
354
|
-
material,
|
|
355
|
-
featureIds
|
|
356
|
-
} = content;
|
|
357
|
-
const {
|
|
358
|
-
_getMeshColor
|
|
359
|
-
} = this.props;
|
|
360
|
-
const geometry = oldLayer && oldLayer.props.mesh || new Geometry({
|
|
361
|
-
drawMode: 4,
|
|
362
|
-
attributes: getMeshGeometry(attributes),
|
|
363
|
-
indices
|
|
364
|
-
});
|
|
365
|
-
const SubLayerClass = this.getSubLayerClass('mesh', MeshLayer);
|
|
366
|
-
return new SubLayerClass(this.getSubLayerProps({
|
|
367
|
-
id: 'mesh'
|
|
368
|
-
}), {
|
|
369
|
-
id: `${this.id}-mesh-${tileHeader.id}`,
|
|
370
|
-
tile: tileHeader,
|
|
371
|
-
mesh: geometry,
|
|
372
|
-
data: SINGLE_DATA,
|
|
373
|
-
getColor: _getMeshColor(tileHeader),
|
|
374
|
-
pbrMaterial: material,
|
|
375
|
-
modelMatrix,
|
|
376
|
-
coordinateOrigin: cartographicOrigin,
|
|
377
|
-
coordinateSystem,
|
|
378
|
-
featureIds,
|
|
379
|
-
_offset: 0
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
renderLayers() {
|
|
384
|
-
const {
|
|
385
|
-
tileset3d,
|
|
386
|
-
layerMap
|
|
387
|
-
} = this.state;
|
|
388
|
-
|
|
389
|
-
if (!tileset3d) {
|
|
390
|
-
return null;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
return tileset3d.tiles.map(tile => {
|
|
394
|
-
const layerCache = layerMap[tile.id] = layerMap[tile.id] || {
|
|
395
|
-
tile
|
|
396
|
-
};
|
|
397
|
-
let {
|
|
398
|
-
layer
|
|
399
|
-
} = layerCache;
|
|
400
|
-
|
|
401
|
-
if (tile.selected) {
|
|
402
|
-
if (!layer) {
|
|
403
|
-
layer = this._getSubLayer(tile);
|
|
404
|
-
} else if (layerCache.needsUpdate) {
|
|
405
|
-
layer = this._getSubLayer(tile, layer);
|
|
406
|
-
layerCache.needsUpdate = false;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
layerCache.layer = layer;
|
|
411
|
-
return layer;
|
|
412
|
-
}).filter(Boolean);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
}
|
|
416
|
-
Tile3DLayer.defaultProps = defaultProps;
|
|
417
|
-
Tile3DLayer.layerName = 'Tile3DLayer';
|
|
418
|
-
|
|
419
|
-
function getMeshGeometry(contentAttributes) {
|
|
420
|
-
const attributes = {};
|
|
421
|
-
attributes.positions = { ...contentAttributes.positions,
|
|
422
|
-
value: new Float32Array(contentAttributes.positions.value)
|
|
423
|
-
};
|
|
424
|
-
|
|
425
|
-
if (contentAttributes.normals) {
|
|
426
|
-
attributes.normals = contentAttributes.normals;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
if (contentAttributes.texCoords) {
|
|
430
|
-
attributes.texCoords = contentAttributes.texCoords;
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
if (contentAttributes.colors) {
|
|
434
|
-
attributes.colors = contentAttributes.colors;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
if (contentAttributes.uvRegions) {
|
|
438
|
-
attributes.uvRegions = contentAttributes.uvRegions;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
return attributes;
|
|
442
|
-
}
|
|
443
|
-
//# sourceMappingURL=tile-3d-layer.js.map
|