@loaders.gl/3d-tiles 3.2.12 → 3.3.0-alpha.10
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.min.js +1247 -1414
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/cesium-ion-loader.js +7 -26
- package/dist/es5/cesium-ion-loader.js.map +1 -1
- package/dist/es5/index.js +14 -23
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js +1 -5
- package/dist/es5/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
- package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js +1 -40
- package/dist/es5/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
- package/dist/es5/lib/classes/tile-3d-batch-table.js +12 -59
- package/dist/es5/lib/classes/tile-3d-batch-table.js.map +1 -1
- package/dist/es5/lib/classes/tile-3d-feature-table.js +4 -23
- package/dist/es5/lib/classes/tile-3d-feature-table.js.map +1 -1
- package/dist/es5/lib/constants.js +3 -1
- package/dist/es5/lib/constants.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js +7 -16
- package/dist/es5/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-composite.js +2 -11
- package/dist/es5/lib/encoders/encode-3d-tile-composite.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js +10 -17
- package/dist/es5/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js +8 -16
- package/dist/es5/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
- package/dist/es5/lib/encoders/encode-3d-tile.js +0 -12
- package/dist/es5/lib/encoders/encode-3d-tile.js.map +1 -1
- package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js +6 -9
- package/dist/es5/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/ion/ion.js +5 -46
- package/dist/es5/lib/ion/ion.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js +2 -11
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js +0 -8
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js +0 -5
- package/dist/es5/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +19 -51
- package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js +6 -25
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +40 -49
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js +6 -14
- package/dist/es5/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
- package/dist/es5/lib/parsers/helpers/parse-utils.js +1 -3
- package/dist/es5/lib/parsers/helpers/parse-utils.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js +0 -16
- package/dist/es5/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-composite.js +1 -11
- package/dist/es5/lib/parsers/parse-3d-tile-composite.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-gltf.js +0 -8
- package/dist/es5/lib/parsers/parse-3d-tile-gltf.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-header.js +127 -111
- package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js +5 -41
- package/dist/es5/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js +4 -71
- package/dist/es5/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
- package/dist/es5/lib/parsers/parse-3d-tile.js +5 -28
- package/dist/es5/lib/parsers/parse-3d-tile.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/tile-3d-subtree-loader.js +0 -4
- package/dist/es5/tile-3d-subtree-loader.js.map +1 -1
- package/dist/es5/tile-3d-writer.js +0 -6
- package/dist/es5/tile-3d-writer.js.map +1 -1
- package/dist/es5/tiles-3d-loader.js +5 -55
- package/dist/es5/tiles-3d-loader.js.map +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/cesium-ion-loader.js +9 -7
- package/dist/esm/cesium-ion-loader.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js +1 -0
- package/dist/esm/lib/classes/helpers/tile-3d-accessor-utils.js.map +1 -1
- package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js +3 -40
- package/dist/esm/lib/classes/tile-3d-batch-table-hierarchy.js.map +1 -1
- package/dist/esm/lib/classes/tile-3d-batch-table.js +7 -67
- package/dist/esm/lib/classes/tile-3d-batch-table.js.map +1 -1
- package/dist/esm/lib/classes/tile-3d-feature-table.js +5 -26
- package/dist/esm/lib/classes/tile-3d-feature-table.js.map +1 -1
- package/dist/esm/lib/constants.js +3 -0
- package/dist/esm/lib/constants.js.map +1 -1
- package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js +5 -3
- package/dist/esm/lib/encoders/encode-3d-tile-batched-model.js.map +1 -1
- package/dist/esm/lib/encoders/encode-3d-tile-composite.js +2 -2
- package/dist/esm/lib/encoders/encode-3d-tile-composite.js.map +1 -1
- package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js +5 -1
- package/dist/esm/lib/encoders/encode-3d-tile-instanced-model.js.map +1 -1
- package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js +4 -1
- package/dist/esm/lib/encoders/encode-3d-tile-point-cloud.js.map +1 -1
- package/dist/esm/lib/encoders/encode-3d-tile.js +2 -6
- package/dist/esm/lib/encoders/encode-3d-tile.js.map +1 -1
- package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js +3 -3
- package/dist/esm/lib/encoders/helpers/encode-3d-tile-header.js.map +1 -1
- package/dist/esm/lib/ion/ion.js +10 -8
- package/dist/esm/lib/ion/ion.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js +1 -6
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-colors.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js +0 -4
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-normals.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js +1 -2
- package/dist/esm/lib/parsers/helpers/normalize-3d-tile-positions.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +4 -16
- package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js +6 -9
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-gltf-view.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js +5 -2
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-header.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js +26 -17
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js +4 -7
- package/dist/esm/lib/parsers/helpers/parse-3d-tile-tables.js.map +1 -1
- package/dist/esm/lib/parsers/helpers/parse-utils.js +6 -1
- package/dist/esm/lib/parsers/helpers/parse-utils.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js +3 -4
- package/dist/esm/lib/parsers/parse-3d-tile-batched-model.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-composite.js +5 -1
- package/dist/esm/lib/parsers/parse-3d-tile-composite.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-gltf.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-header.js +35 -40
- package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js +7 -25
- package/dist/esm/lib/parsers/parse-3d-tile-instanced-model.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js +9 -37
- package/dist/esm/lib/parsers/parse-3d-tile-point-cloud.js.map +1 -1
- package/dist/esm/lib/parsers/parse-3d-tile.js +8 -6
- package/dist/esm/lib/parsers/parse-3d-tile.js.map +1 -1
- package/dist/esm/lib/utils/version.js +2 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/tile-3d-subtree-loader.js +1 -0
- package/dist/esm/tile-3d-subtree-loader.js.map +1 -1
- package/dist/esm/tile-3d-writer.js +1 -1
- package/dist/esm/tile-3d-writer.js.map +1 -1
- package/dist/esm/tiles-3d-loader.js +3 -17
- package/dist/esm/tiles-3d-loader.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/classes/helpers/tile-3d-accessor-utils.d.ts +1 -1
- package/dist/lib/classes/tile-3d-batch-table.d.ts +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -13
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +2 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -1
- package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +36 -7
- package/dist/lib/parsers/parse-3d-tile-header.d.ts +5 -4
- package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-3d-tile-header.js +37 -18
- package/dist/tiles-3d-loader.d.ts.map +1 -1
- package/dist/tiles-3d-loader.js +1 -8
- package/dist/types.d.ts +26 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +1 -1
- package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +2 -14
- package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +50 -7
- package/src/lib/parsers/parse-3d-tile-header.ts +59 -21
- package/src/tiles-3d-loader.ts +2 -16
- package/src/types.ts +18 -3
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
const defined = x => x !== undefined;
|
|
2
1
|
|
|
2
|
+
|
|
3
|
+
const defined = x => x !== undefined;
|
|
3
4
|
export function initializeHierarchy(batchTable, jsonHeader, binaryBody) {
|
|
4
5
|
if (!jsonHeader) {
|
|
5
6
|
return null;
|
|
6
7
|
}
|
|
7
|
-
|
|
8
8
|
let hierarchy = batchTable.getExtension('3DTILES_batch_table_hierarchy');
|
|
9
9
|
const legacyHierarchy = jsonHeader.HIERARCHY;
|
|
10
|
-
|
|
11
10
|
if (legacyHierarchy) {
|
|
12
11
|
console.warn('3D Tile Parser: HIERARCHY is deprecated. Use 3DTILES_batch_table_hierarchy.');
|
|
13
12
|
jsonHeader.extensions = jsonHeader.extensions || {};
|
|
14
13
|
jsonHeader.extensions['3DTILES_batch_table_hierarchy'] = legacyHierarchy;
|
|
15
14
|
hierarchy = legacyHierarchy;
|
|
16
15
|
}
|
|
17
|
-
|
|
18
16
|
if (!hierarchy) {
|
|
19
17
|
return null;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
return initializeHierarchyValues(hierarchy, binaryBody);
|
|
23
20
|
}
|
|
24
21
|
|
|
@@ -32,16 +29,13 @@ function initializeHierarchyValues(hierarchyJson, binaryBody) {
|
|
|
32
29
|
let parentCounts = hierarchyJson.parentCounts;
|
|
33
30
|
let parentIds = hierarchyJson.parentIds;
|
|
34
31
|
let parentIdsLength = instancesLength;
|
|
35
|
-
|
|
36
32
|
if (defined(classIds.byteOffset)) {
|
|
37
33
|
classIds.componentType = defaultValue(classIds.componentType, GL.UNSIGNED_SHORT);
|
|
38
34
|
classIds.type = AttributeType.SCALAR;
|
|
39
35
|
binaryAccessor = getBinaryAccessor(classIds);
|
|
40
36
|
classIds = binaryAccessor.createArrayBufferView(binaryBody.buffer, binaryBody.byteOffset + classIds.byteOffset, instancesLength);
|
|
41
37
|
}
|
|
42
|
-
|
|
43
38
|
let parentIndexes;
|
|
44
|
-
|
|
45
39
|
if (defined(parentCounts)) {
|
|
46
40
|
if (defined(parentCounts.byteOffset)) {
|
|
47
41
|
parentCounts.componentType = defaultValue(parentCounts.componentType, GL.UNSIGNED_SHORT);
|
|
@@ -49,41 +43,33 @@ function initializeHierarchyValues(hierarchyJson, binaryBody) {
|
|
|
49
43
|
binaryAccessor = getBinaryAccessor(parentCounts);
|
|
50
44
|
parentCounts = binaryAccessor.createArrayBufferView(binaryBody.buffer, binaryBody.byteOffset + parentCounts.byteOffset, instancesLength);
|
|
51
45
|
}
|
|
52
|
-
|
|
53
46
|
parentIndexes = new Uint16Array(instancesLength);
|
|
54
47
|
parentIdsLength = 0;
|
|
55
|
-
|
|
56
48
|
for (i = 0; i < instancesLength; ++i) {
|
|
57
49
|
parentIndexes[i] = parentIdsLength;
|
|
58
50
|
parentIdsLength += parentCounts[i];
|
|
59
51
|
}
|
|
60
52
|
}
|
|
61
|
-
|
|
62
53
|
if (defined(parentIds) && defined(parentIds.byteOffset)) {
|
|
63
54
|
parentIds.componentType = defaultValue(parentIds.componentType, GL.UNSIGNED_SHORT);
|
|
64
55
|
parentIds.type = AttributeType.SCALAR;
|
|
65
56
|
binaryAccessor = getBinaryAccessor(parentIds);
|
|
66
57
|
parentIds = binaryAccessor.createArrayBufferView(binaryBody.buffer, binaryBody.byteOffset + parentIds.byteOffset, parentIdsLength);
|
|
67
58
|
}
|
|
68
|
-
|
|
69
59
|
const classesLength = classes.length;
|
|
70
|
-
|
|
71
60
|
for (i = 0; i < classesLength; ++i) {
|
|
72
61
|
const classInstancesLength = classes[i].length;
|
|
73
62
|
const properties = classes[i].instances;
|
|
74
63
|
const binaryProperties = getBinaryProperties(classInstancesLength, properties, binaryBody);
|
|
75
64
|
classes[i].instances = combine(binaryProperties, properties);
|
|
76
65
|
}
|
|
77
|
-
|
|
78
66
|
const classCounts = new Array(classesLength).fill(0);
|
|
79
67
|
const classIndexes = new Uint16Array(instancesLength);
|
|
80
|
-
|
|
81
68
|
for (i = 0; i < instancesLength; ++i) {
|
|
82
69
|
classId = classIds[i];
|
|
83
70
|
classIndexes[i] = classCounts[classId];
|
|
84
71
|
++classCounts[classId];
|
|
85
72
|
}
|
|
86
|
-
|
|
87
73
|
const hierarchy = {
|
|
88
74
|
classes,
|
|
89
75
|
classIds,
|
|
@@ -100,18 +86,14 @@ export function traverseHierarchy(hierarchy, instanceIndex, endConditionCallback
|
|
|
100
86
|
if (!hierarchy) {
|
|
101
87
|
return;
|
|
102
88
|
}
|
|
103
|
-
|
|
104
89
|
const parentCounts = hierarchy.parentCounts;
|
|
105
90
|
const parentIds = hierarchy.parentIds;
|
|
106
|
-
|
|
107
91
|
if (parentIds) {
|
|
108
92
|
return endConditionCallback(hierarchy, instanceIndex);
|
|
109
93
|
}
|
|
110
|
-
|
|
111
94
|
if (parentCounts > 0) {
|
|
112
95
|
return traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback);
|
|
113
96
|
}
|
|
114
|
-
|
|
115
97
|
return traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback);
|
|
116
98
|
}
|
|
117
99
|
|
|
@@ -121,57 +103,45 @@ function traverseHierarchyMultipleParents(hierarchy, instanceIndex, endCondition
|
|
|
121
103
|
const parentIds = hierarchy.parentIds;
|
|
122
104
|
const parentIndexes = hierarchy.parentIndexes;
|
|
123
105
|
const instancesLength = classIds.length;
|
|
106
|
+
|
|
124
107
|
const visited = scratchVisited;
|
|
125
108
|
visited.length = Math.max(visited.length, instancesLength);
|
|
126
109
|
const visitedMarker = ++marker;
|
|
127
110
|
const stack = scratchStack;
|
|
128
111
|
stack.length = 0;
|
|
129
112
|
stack.push(instanceIndex);
|
|
130
|
-
|
|
131
113
|
while (stack.length > 0) {
|
|
132
114
|
instanceIndex = stack.pop();
|
|
133
|
-
|
|
134
115
|
if (visited[instanceIndex] === visitedMarker) {
|
|
135
116
|
continue;
|
|
136
117
|
}
|
|
137
|
-
|
|
138
118
|
visited[instanceIndex] = visitedMarker;
|
|
139
119
|
const result = endConditionCallback(hierarchy, instanceIndex);
|
|
140
|
-
|
|
141
120
|
if (defined(result)) {
|
|
142
121
|
return result;
|
|
143
122
|
}
|
|
144
|
-
|
|
145
123
|
const parentCount = parentCounts[instanceIndex];
|
|
146
124
|
const parentIndex = parentIndexes[instanceIndex];
|
|
147
|
-
|
|
148
125
|
for (let i = 0; i < parentCount; ++i) {
|
|
149
126
|
const parentId = parentIds[parentIndex + i];
|
|
150
|
-
|
|
151
127
|
if (parentId !== instanceIndex) {
|
|
152
128
|
stack.push(parentId);
|
|
153
129
|
}
|
|
154
130
|
}
|
|
155
131
|
}
|
|
156
|
-
|
|
157
132
|
return null;
|
|
158
133
|
}
|
|
159
|
-
|
|
160
134
|
function traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback) {
|
|
161
135
|
let hasParent = true;
|
|
162
|
-
|
|
163
136
|
while (hasParent) {
|
|
164
137
|
const result = endConditionCallback(hierarchy, instanceIndex);
|
|
165
|
-
|
|
166
138
|
if (defined(result)) {
|
|
167
139
|
return result;
|
|
168
140
|
}
|
|
169
|
-
|
|
170
141
|
const parentId = hierarchy.parentIds[instanceIndex];
|
|
171
142
|
hasParent = parentId !== instanceIndex;
|
|
172
143
|
instanceIndex = parentId;
|
|
173
144
|
}
|
|
174
|
-
|
|
175
145
|
throw new Error('traverseHierarchySingleParent');
|
|
176
146
|
}
|
|
177
147
|
|
|
@@ -179,37 +149,30 @@ function validateHierarchy(hierarchy) {
|
|
|
179
149
|
const scratchValidateStack = [];
|
|
180
150
|
const classIds = hierarchy.classIds;
|
|
181
151
|
const instancesLength = classIds.length;
|
|
182
|
-
|
|
183
152
|
for (let i = 0; i < instancesLength; ++i) {
|
|
184
153
|
validateInstance(hierarchy, i, stack);
|
|
185
154
|
}
|
|
186
155
|
}
|
|
187
|
-
|
|
188
156
|
function validateInstance(hierarchy, instanceIndex, stack) {
|
|
189
157
|
const parentCounts = hierarchy.parentCounts;
|
|
190
158
|
const parentIds = hierarchy.parentIds;
|
|
191
159
|
const parentIndexes = hierarchy.parentIndexes;
|
|
192
160
|
const classIds = hierarchy.classIds;
|
|
193
161
|
const instancesLength = classIds.length;
|
|
194
|
-
|
|
195
162
|
if (!defined(parentIds)) {
|
|
196
163
|
return;
|
|
197
164
|
}
|
|
198
|
-
|
|
199
165
|
assert(instanceIndex < instancesLength, "Parent index ".concat(instanceIndex, " exceeds the total number of instances: ").concat(instancesLength));
|
|
200
166
|
assert(stack.indexOf(instanceIndex) === -1, 'Circular dependency detected in the batch table hierarchy.');
|
|
201
167
|
stack.push(instanceIndex);
|
|
202
168
|
const parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;
|
|
203
169
|
const parentIndex = defined(parentCounts) ? parentIndexes[instanceIndex] : instanceIndex;
|
|
204
|
-
|
|
205
170
|
for (let i = 0; i < parentCount; ++i) {
|
|
206
171
|
const parentId = parentIds[parentIndex + i];
|
|
207
|
-
|
|
208
172
|
if (parentId !== instanceIndex) {
|
|
209
173
|
validateInstance(hierarchy, parentId, stack);
|
|
210
174
|
}
|
|
211
175
|
}
|
|
212
|
-
|
|
213
176
|
stack.pop(instanceIndex);
|
|
214
177
|
}
|
|
215
178
|
//# sourceMappingURL=tile-3d-batch-table-hierarchy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/classes/tile-3d-batch-table-hierarchy.ts"],"names":["defined","x","undefined","initializeHierarchy","batchTable","jsonHeader","binaryBody","hierarchy","getExtension","legacyHierarchy","HIERARCHY","console","warn","extensions","initializeHierarchyValues","hierarchyJson","i","classId","binaryAccessor","instancesLength","classes","classIds","parentCounts","parentIds","parentIdsLength","byteOffset","componentType","defaultValue","GL","UNSIGNED_SHORT","type","AttributeType","SCALAR","getBinaryAccessor","createArrayBufferView","buffer","parentIndexes","Uint16Array","classesLength","length","classInstancesLength","properties","instances","binaryProperties","getBinaryProperties","combine","classCounts","Array","fill","classIndexes","validateHierarchy","traverseHierarchy","instanceIndex","endConditionCallback","traverseHierarchyMultipleParents","traverseHierarchySingleParent","visited","scratchVisited","Math","max","visitedMarker","marker","stack","scratchStack","push","pop","result","parentCount","parentIndex","parentId","hasParent","Error","scratchValidateStack","validateInstance","assert","indexOf"],"mappings":"AAMA,MAAMA,OAAO,GAAIC,CAAD,IAAOA,CAAC,KAAKC,SAA7B;;AAEA,OAAO,SAASC,mBAAT,CAA6BC,UAA7B,EAAyCC,UAAzC,EAAqDC,UAArD,EAAiE;AACtE,MAAI,CAACD,UAAL,EAAiB;AACf,WAAO,IAAP;AACD;;AAED,MAAIE,SAAS,GAAGH,UAAU,CAACI,YAAX,CAAwB,+BAAxB,CAAhB;AAEA,QAAMC,eAAe,GAAGJ,UAAU,CAACK,SAAnC;;AACA,MAAID,eAAJ,EAAqB;AAEnBE,IAAAA,OAAO,CAACC,IAAR,CAAa,6EAAb;AACAP,IAAAA,UAAU,CAACQ,UAAX,GAAwBR,UAAU,CAACQ,UAAX,IAAyB,EAAjD;AACAR,IAAAA,UAAU,CAACQ,UAAX,CAAsB,+BAAtB,IAAyDJ,eAAzD;AACAF,IAAAA,SAAS,GAAGE,eAAZ;AACD;;AAED,MAAI,CAACF,SAAL,EAAgB;AACd,WAAO,IAAP;AACD;;AAED,SAAOO,yBAAyB,CAACP,SAAD,EAAYD,UAAZ,CAAhC;AACD;;AAGD,SAASQ,yBAAT,CAAmCC,aAAnC,EAAkDT,UAAlD,EAA8D;AAC5D,MAAIU,CAAJ;AACA,MAAIC,OAAJ;AACA,MAAIC,cAAJ;AAEA,QAAMC,eAAe,GAAGJ,aAAa,CAACI,eAAtC;AACA,QAAMC,OAAO,GAAGL,aAAa,CAACK,OAA9B;AACA,MAAIC,QAAQ,GAAGN,aAAa,CAACM,QAA7B;AACA,MAAIC,YAAY,GAAGP,aAAa,CAACO,YAAjC;AACA,MAAIC,SAAS,GAAGR,aAAa,CAACQ,SAA9B;AACA,MAAIC,eAAe,GAAGL,eAAtB;;AAEA,MAAInB,OAAO,CAACqB,QAAQ,CAACI,UAAV,CAAX,EAAkC;AAChCJ,IAAAA,QAAQ,CAACK,aAAT,GAAyBC,YAAY,CAACN,QAAQ,CAACK,aAAV,EAAyBE,EAAE,CAACC,cAA5B,CAArC;AACAR,IAAAA,QAAQ,CAACS,IAAT,GAAgBC,aAAa,CAACC,MAA9B;AACAd,IAAAA,cAAc,GAAGe,iBAAiB,CAACZ,QAAD,CAAlC;AACAA,IAAAA,QAAQ,GAAGH,cAAc,CAACgB,qBAAf,CACT5B,UAAU,CAAC6B,MADF,EAET7B,UAAU,CAACmB,UAAX,GAAwBJ,QAAQ,CAACI,UAFxB,EAGTN,eAHS,CAAX;AAKD;;AAED,MAAIiB,aAAJ;;AACA,MAAIpC,OAAO,CAACsB,YAAD,CAAX,EAA2B;AACzB,QAAItB,OAAO,CAACsB,YAAY,CAACG,UAAd,CAAX,EAAsC;AACpCH,MAAAA,YAAY,CAACI,aAAb,GAA6BC,YAAY,CAACL,YAAY,CAACI,aAAd,EAA6BE,EAAE,CAACC,cAAhC,CAAzC;AACAP,MAAAA,YAAY,CAACQ,IAAb,GAAoBC,aAAa,CAACC,MAAlC;AACAd,MAAAA,cAAc,GAAGe,iBAAiB,CAACX,YAAD,CAAlC;AACAA,MAAAA,YAAY,GAAGJ,cAAc,CAACgB,qBAAf,CACb5B,UAAU,CAAC6B,MADE,EAEb7B,UAAU,CAACmB,UAAX,GAAwBH,YAAY,CAACG,UAFxB,EAGbN,eAHa,CAAf;AAKD;;AACDiB,IAAAA,aAAa,GAAG,IAAIC,WAAJ,CAAgBlB,eAAhB,CAAhB;AACAK,IAAAA,eAAe,GAAG,CAAlB;;AACA,SAAKR,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGG,eAAhB,EAAiC,EAAEH,CAAnC,EAAsC;AACpCoB,MAAAA,aAAa,CAACpB,CAAD,CAAb,GAAmBQ,eAAnB;AACAA,MAAAA,eAAe,IAAIF,YAAY,CAACN,CAAD,CAA/B;AACD;AACF;;AAED,MAAIhB,OAAO,CAACuB,SAAD,CAAP,IAAsBvB,OAAO,CAACuB,SAAS,CAACE,UAAX,CAAjC,EAAyD;AACvDF,IAAAA,SAAS,CAACG,aAAV,GAA0BC,YAAY,CAACJ,SAAS,CAACG,aAAX,EAA0BE,EAAE,CAACC,cAA7B,CAAtC;AACAN,IAAAA,SAAS,CAACO,IAAV,GAAiBC,aAAa,CAACC,MAA/B;AACAd,IAAAA,cAAc,GAAGe,iBAAiB,CAACV,SAAD,CAAlC;AACAA,IAAAA,SAAS,GAAGL,cAAc,CAACgB,qBAAf,CACV5B,UAAU,CAAC6B,MADD,EAEV7B,UAAU,CAACmB,UAAX,GAAwBF,SAAS,CAACE,UAFxB,EAGVD,eAHU,CAAZ;AAKD;;AAED,QAAMc,aAAa,GAAGlB,OAAO,CAACmB,MAA9B;;AACA,OAAKvB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGsB,aAAhB,EAA+B,EAAEtB,CAAjC,EAAoC;AAClC,UAAMwB,oBAAoB,GAAGpB,OAAO,CAACJ,CAAD,CAAP,CAAWuB,MAAxC;AACA,UAAME,UAAU,GAAGrB,OAAO,CAACJ,CAAD,CAAP,CAAW0B,SAA9B;AACA,UAAMC,gBAAgB,GAAGC,mBAAmB,CAACJ,oBAAD,EAAuBC,UAAvB,EAAmCnC,UAAnC,CAA5C;AACAc,IAAAA,OAAO,CAACJ,CAAD,CAAP,CAAW0B,SAAX,GAAuBG,OAAO,CAACF,gBAAD,EAAmBF,UAAnB,CAA9B;AACD;;AAED,QAAMK,WAAW,GAAG,IAAIC,KAAJ,CAAUT,aAAV,EAAyBU,IAAzB,CAA8B,CAA9B,CAApB;AACA,QAAMC,YAAY,GAAG,IAAIZ,WAAJ,CAAgBlB,eAAhB,CAArB;;AACA,OAAKH,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGG,eAAhB,EAAiC,EAAEH,CAAnC,EAAsC;AACpCC,IAAAA,OAAO,GAAGI,QAAQ,CAACL,CAAD,CAAlB;AACAiC,IAAAA,YAAY,CAACjC,CAAD,CAAZ,GAAkB8B,WAAW,CAAC7B,OAAD,CAA7B;AACA,MAAE6B,WAAW,CAAC7B,OAAD,CAAb;AACD;;AAED,QAAMV,SAAS,GAAG;AAChBa,IAAAA,OADgB;AAEhBC,IAAAA,QAFgB;AAGhB4B,IAAAA,YAHgB;AAIhB3B,IAAAA,YAJgB;AAKhBc,IAAAA,aALgB;AAMhBb,IAAAA;AANgB,GAAlB;AASA2B,EAAAA,iBAAiB,CAAC3C,SAAD,CAAjB;AAEA,SAAOA,SAAP;AACD;;AAMD,OAAO,SAAS4C,iBAAT,CAA2B5C,SAA3B,EAAsC6C,aAAtC,EAAqDC,oBAArD,EAA2E;AAChF,MAAI,CAAC9C,SAAL,EAAgB;AACd;AACD;;AAED,QAAMe,YAAY,GAAGf,SAAS,CAACe,YAA/B;AACA,QAAMC,SAAS,GAAGhB,SAAS,CAACgB,SAA5B;;AACA,MAAIA,SAAJ,EAAe;AACb,WAAO8B,oBAAoB,CAAC9C,SAAD,EAAY6C,aAAZ,CAA3B;AACD;;AACD,MAAI9B,YAAY,GAAG,CAAnB,EAAsB;AACpB,WAAOgC,gCAAgC,CAAC/C,SAAD,EAAY6C,aAAZ,EAA2BC,oBAA3B,CAAvC;AACD;;AACD,SAAOE,6BAA6B,CAAChD,SAAD,EAAY6C,aAAZ,EAA2BC,oBAA3B,CAApC;AACD;;AAGD,SAASC,gCAAT,CAA0C/C,SAA1C,EAAqD6C,aAArD,EAAoEC,oBAApE,EAA0F;AACxF,QAAMhC,QAAQ,GAAGd,SAAS,CAACc,QAA3B;AACA,QAAMC,YAAY,GAAGf,SAAS,CAACe,YAA/B;AACA,QAAMC,SAAS,GAAGhB,SAAS,CAACgB,SAA5B;AACA,QAAMa,aAAa,GAAG7B,SAAS,CAAC6B,aAAhC;AACA,QAAMjB,eAAe,GAAGE,QAAQ,CAACkB,MAAjC;AAKA,QAAMiB,OAAO,GAAGC,cAAhB;AACAD,EAAAA,OAAO,CAACjB,MAAR,GAAiBmB,IAAI,CAACC,GAAL,CAASH,OAAO,CAACjB,MAAjB,EAAyBpB,eAAzB,CAAjB;AACA,QAAMyC,aAAa,GAAG,EAAEC,MAAxB;AAEA,QAAMC,KAAK,GAAGC,YAAd;AACAD,EAAAA,KAAK,CAACvB,MAAN,GAAe,CAAf;AACAuB,EAAAA,KAAK,CAACE,IAAN,CAAWZ,aAAX;;AAEA,SAAOU,KAAK,CAACvB,MAAN,GAAe,CAAtB,EAAyB;AACvBa,IAAAA,aAAa,GAAGU,KAAK,CAACG,GAAN,EAAhB;;AACA,QAAIT,OAAO,CAACJ,aAAD,CAAP,KAA2BQ,aAA/B,EAA8C;AAE5C;AACD;;AACDJ,IAAAA,OAAO,CAACJ,aAAD,CAAP,GAAyBQ,aAAzB;AACA,UAAMM,MAAM,GAAGb,oBAAoB,CAAC9C,SAAD,EAAY6C,aAAZ,CAAnC;;AACA,QAAIpD,OAAO,CAACkE,MAAD,CAAX,EAAqB;AAEnB,aAAOA,MAAP;AACD;;AACD,UAAMC,WAAW,GAAG7C,YAAY,CAAC8B,aAAD,CAAhC;AACA,UAAMgB,WAAW,GAAGhC,aAAa,CAACgB,aAAD,CAAjC;;AACA,SAAK,IAAIpC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmD,WAApB,EAAiC,EAAEnD,CAAnC,EAAsC;AACpC,YAAMqD,QAAQ,GAAG9C,SAAS,CAAC6C,WAAW,GAAGpD,CAAf,CAA1B;;AAGA,UAAIqD,QAAQ,KAAKjB,aAAjB,EAAgC;AAC9BU,QAAAA,KAAK,CAACE,IAAN,CAAWK,QAAX;AACD;AACF;AACF;;AAED,SAAO,IAAP;AACD;;AAED,SAASd,6BAAT,CAAuChD,SAAvC,EAAkD6C,aAAlD,EAAiEC,oBAAjE,EAAuF;AACrF,MAAIiB,SAAS,GAAG,IAAhB;;AACA,SAAOA,SAAP,EAAkB;AAChB,UAAMJ,MAAM,GAAGb,oBAAoB,CAAC9C,SAAD,EAAY6C,aAAZ,CAAnC;;AACA,QAAIpD,OAAO,CAACkE,MAAD,CAAX,EAAqB;AAEnB,aAAOA,MAAP;AACD;;AACD,UAAMG,QAAQ,GAAG9D,SAAS,CAACgB,SAAV,CAAoB6B,aAApB,CAAjB;AACAkB,IAAAA,SAAS,GAAGD,QAAQ,KAAKjB,aAAzB;AACAA,IAAAA,aAAa,GAAGiB,QAAhB;AACD;;AACD,QAAM,IAAIE,KAAJ,CAAU,+BAAV,CAAN;AACD;;AAID,SAASrB,iBAAT,CAA2B3C,SAA3B,EAAsC;AACpC,QAAMiE,oBAAoB,GAAG,EAA7B;AAEA,QAAMnD,QAAQ,GAAGd,SAAS,CAACc,QAA3B;AACA,QAAMF,eAAe,GAAGE,QAAQ,CAACkB,MAAjC;;AAEA,OAAK,IAAIvB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGG,eAApB,EAAqC,EAAEH,CAAvC,EAA0C;AACxCyD,IAAAA,gBAAgB,CAAClE,SAAD,EAAYS,CAAZ,EAAe8C,KAAf,CAAhB;AACD;AACF;;AAED,SAASW,gBAAT,CAA0BlE,SAA1B,EAAqC6C,aAArC,EAAoDU,KAApD,EAA2D;AACzD,QAAMxC,YAAY,GAAGf,SAAS,CAACe,YAA/B;AACA,QAAMC,SAAS,GAAGhB,SAAS,CAACgB,SAA5B;AACA,QAAMa,aAAa,GAAG7B,SAAS,CAAC6B,aAAhC;AACA,QAAMf,QAAQ,GAAGd,SAAS,CAACc,QAA3B;AACA,QAAMF,eAAe,GAAGE,QAAQ,CAACkB,MAAjC;;AAEA,MAAI,CAACvC,OAAO,CAACuB,SAAD,CAAZ,EAAyB;AAEvB;AACD;;AAEDmD,EAAAA,MAAM,CACJtB,aAAa,GAAGjC,eADZ,yBAEYiC,aAFZ,qDAEoEjC,eAFpE,EAAN;AAIAuD,EAAAA,MAAM,CACJZ,KAAK,CAACa,OAAN,CAAcvB,aAAd,MAAiC,CAAC,CAD9B,EAEJ,4DAFI,CAAN;AAKAU,EAAAA,KAAK,CAACE,IAAN,CAAWZ,aAAX;AACA,QAAMe,WAAW,GAAGnE,OAAO,CAACsB,YAAD,CAAP,GAAwBA,YAAY,CAAC8B,aAAD,CAApC,GAAsD,CAA1E;AACA,QAAMgB,WAAW,GAAGpE,OAAO,CAACsB,YAAD,CAAP,GAAwBc,aAAa,CAACgB,aAAD,CAArC,GAAuDA,aAA3E;;AACA,OAAK,IAAIpC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmD,WAApB,EAAiC,EAAEnD,CAAnC,EAAsC;AACpC,UAAMqD,QAAQ,GAAG9C,SAAS,CAAC6C,WAAW,GAAGpD,CAAf,CAA1B;;AAEA,QAAIqD,QAAQ,KAAKjB,aAAjB,EAAgC;AAC9BqB,MAAAA,gBAAgB,CAAClE,SAAD,EAAY8D,QAAZ,EAAsBP,KAAtB,CAAhB;AACD;AACF;;AACDA,EAAAA,KAAK,CAACG,GAAN,CAAUb,aAAV;AACD","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// TODO - Finish hierarchy suypport: this file is only half ported\n/* eslint-disable */\n// @ts-nocheck\nconst defined = (x) => x !== undefined;\n\nexport function initializeHierarchy(batchTable, jsonHeader, binaryBody) {\n if (!jsonHeader) {\n return null;\n }\n\n let hierarchy = batchTable.getExtension('3DTILES_batch_table_hierarchy');\n\n const legacyHierarchy = jsonHeader.HIERARCHY;\n if (legacyHierarchy) {\n // eslint-disable-next-line\n console.warn('3D Tile Parser: HIERARCHY is deprecated. Use 3DTILES_batch_table_hierarchy.');\n jsonHeader.extensions = jsonHeader.extensions || {};\n jsonHeader.extensions['3DTILES_batch_table_hierarchy'] = legacyHierarchy;\n hierarchy = legacyHierarchy;\n }\n\n if (!hierarchy) {\n return null;\n }\n\n return initializeHierarchyValues(hierarchy, binaryBody);\n}\n\n// eslint-disable-next-line max-statements\nfunction initializeHierarchyValues(hierarchyJson, binaryBody) {\n let i;\n let classId;\n let binaryAccessor;\n\n const instancesLength = hierarchyJson.instancesLength;\n const classes = hierarchyJson.classes;\n let classIds = hierarchyJson.classIds;\n let parentCounts = hierarchyJson.parentCounts;\n let parentIds = hierarchyJson.parentIds;\n let parentIdsLength = instancesLength;\n\n if (defined(classIds.byteOffset)) {\n classIds.componentType = defaultValue(classIds.componentType, GL.UNSIGNED_SHORT);\n classIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(classIds);\n classIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + classIds.byteOffset,\n instancesLength\n );\n }\n\n let parentIndexes;\n if (defined(parentCounts)) {\n if (defined(parentCounts.byteOffset)) {\n parentCounts.componentType = defaultValue(parentCounts.componentType, GL.UNSIGNED_SHORT);\n parentCounts.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentCounts);\n parentCounts = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentCounts.byteOffset,\n instancesLength\n );\n }\n parentIndexes = new Uint16Array(instancesLength);\n parentIdsLength = 0;\n for (i = 0; i < instancesLength; ++i) {\n parentIndexes[i] = parentIdsLength;\n parentIdsLength += parentCounts[i];\n }\n }\n\n if (defined(parentIds) && defined(parentIds.byteOffset)) {\n parentIds.componentType = defaultValue(parentIds.componentType, GL.UNSIGNED_SHORT);\n parentIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentIds);\n parentIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentIds.byteOffset,\n parentIdsLength\n );\n }\n\n const classesLength = classes.length;\n for (i = 0; i < classesLength; ++i) {\n const classInstancesLength = classes[i].length;\n const properties = classes[i].instances;\n const binaryProperties = getBinaryProperties(classInstancesLength, properties, binaryBody);\n classes[i].instances = combine(binaryProperties, properties);\n }\n\n const classCounts = new Array(classesLength).fill(0);\n const classIndexes = new Uint16Array(instancesLength);\n for (i = 0; i < instancesLength; ++i) {\n classId = classIds[i];\n classIndexes[i] = classCounts[classId];\n ++classCounts[classId];\n }\n\n const hierarchy = {\n classes,\n classIds,\n classIndexes,\n parentCounts,\n parentIndexes,\n parentIds\n };\n\n validateHierarchy(hierarchy);\n\n return hierarchy;\n}\n\n// HELPER CODE\n\n// Traverse over the hierarchy and process each instance with the endConditionCallback.\n// When the endConditionCallback returns a value, the traversal stops and that value is returned.\nexport function traverseHierarchy(hierarchy, instanceIndex, endConditionCallback) {\n if (!hierarchy) {\n return;\n }\n\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n if (parentIds) {\n return endConditionCallback(hierarchy, instanceIndex);\n }\n if (parentCounts > 0) {\n return traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback);\n }\n return traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback);\n}\n\n// eslint-disable-next-line max-statements\nfunction traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback) {\n const classIds = hierarchy.classIds;\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const instancesLength = classIds.length;\n\n // Ignore instances that have already been visited. This occurs in diamond inheritance situations.\n // Use a marker value to indicate that an instance has been visited, which increments with each run.\n // This is more efficient than clearing the visited array every time.\n const visited = scratchVisited;\n visited.length = Math.max(visited.length, instancesLength);\n const visitedMarker = ++marker;\n\n const stack = scratchStack;\n stack.length = 0;\n stack.push(instanceIndex);\n\n while (stack.length > 0) {\n instanceIndex = stack.pop();\n if (visited[instanceIndex] === visitedMarker) {\n // This instance has already been visited, stop traversal\n continue;\n }\n visited[instanceIndex] = visitedMarker;\n const result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n const parentCount = parentCounts[instanceIndex];\n const parentIndex = parentIndexes[instanceIndex];\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself)\n // else add the parent to the stack to continue the traversal.\n if (parentId !== instanceIndex) {\n stack.push(parentId);\n }\n }\n }\n\n return null;\n}\n\nfunction traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback) {\n let hasParent = true;\n while (hasParent) {\n const result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n const parentId = hierarchy.parentIds[instanceIndex];\n hasParent = parentId !== instanceIndex;\n instanceIndex = parentId;\n }\n throw new Error('traverseHierarchySingleParent');\n}\n\n// DEBUG CODE\n\nfunction validateHierarchy(hierarchy) {\n const scratchValidateStack = [];\n\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n for (let i = 0; i < instancesLength; ++i) {\n validateInstance(hierarchy, i, stack);\n }\n}\n\nfunction validateInstance(hierarchy, instanceIndex, stack) {\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n if (!defined(parentIds)) {\n // No need to validate if there are no parents\n return;\n }\n\n assert(\n instanceIndex < instancesLength,\n `Parent index ${instanceIndex} exceeds the total number of instances: ${instancesLength}`\n );\n assert(\n stack.indexOf(instanceIndex) === -1,\n 'Circular dependency detected in the batch table hierarchy.'\n );\n\n stack.push(instanceIndex);\n const parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;\n const parentIndex = defined(parentCounts) ? parentIndexes[instanceIndex] : instanceIndex;\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself), else continue the traversal.\n if (parentId !== instanceIndex) {\n validateInstance(hierarchy, parentId, stack);\n }\n }\n stack.pop(instanceIndex);\n}\n"],"file":"tile-3d-batch-table-hierarchy.js"}
|
|
1
|
+
{"version":3,"file":"tile-3d-batch-table-hierarchy.js","names":["defined","x","undefined","initializeHierarchy","batchTable","jsonHeader","binaryBody","hierarchy","getExtension","legacyHierarchy","HIERARCHY","console","warn","extensions","initializeHierarchyValues","hierarchyJson","i","classId","binaryAccessor","instancesLength","classes","classIds","parentCounts","parentIds","parentIdsLength","byteOffset","componentType","defaultValue","GL","UNSIGNED_SHORT","type","AttributeType","SCALAR","getBinaryAccessor","createArrayBufferView","buffer","parentIndexes","Uint16Array","classesLength","length","classInstancesLength","properties","instances","binaryProperties","getBinaryProperties","combine","classCounts","Array","fill","classIndexes","validateHierarchy","traverseHierarchy","instanceIndex","endConditionCallback","traverseHierarchyMultipleParents","traverseHierarchySingleParent","visited","scratchVisited","Math","max","visitedMarker","marker","stack","scratchStack","push","pop","result","parentCount","parentIndex","parentId","hasParent","Error","scratchValidateStack","validateInstance","assert","indexOf"],"sources":["../../../../src/lib/classes/tile-3d-batch-table-hierarchy.ts"],"sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// TODO - Finish hierarchy suypport: this file is only half ported\n/* eslint-disable */\n// @ts-nocheck\nconst defined = (x) => x !== undefined;\n\nexport function initializeHierarchy(batchTable, jsonHeader, binaryBody) {\n if (!jsonHeader) {\n return null;\n }\n\n let hierarchy = batchTable.getExtension('3DTILES_batch_table_hierarchy');\n\n const legacyHierarchy = jsonHeader.HIERARCHY;\n if (legacyHierarchy) {\n // eslint-disable-next-line\n console.warn('3D Tile Parser: HIERARCHY is deprecated. Use 3DTILES_batch_table_hierarchy.');\n jsonHeader.extensions = jsonHeader.extensions || {};\n jsonHeader.extensions['3DTILES_batch_table_hierarchy'] = legacyHierarchy;\n hierarchy = legacyHierarchy;\n }\n\n if (!hierarchy) {\n return null;\n }\n\n return initializeHierarchyValues(hierarchy, binaryBody);\n}\n\n// eslint-disable-next-line max-statements\nfunction initializeHierarchyValues(hierarchyJson, binaryBody) {\n let i;\n let classId;\n let binaryAccessor;\n\n const instancesLength = hierarchyJson.instancesLength;\n const classes = hierarchyJson.classes;\n let classIds = hierarchyJson.classIds;\n let parentCounts = hierarchyJson.parentCounts;\n let parentIds = hierarchyJson.parentIds;\n let parentIdsLength = instancesLength;\n\n if (defined(classIds.byteOffset)) {\n classIds.componentType = defaultValue(classIds.componentType, GL.UNSIGNED_SHORT);\n classIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(classIds);\n classIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + classIds.byteOffset,\n instancesLength\n );\n }\n\n let parentIndexes;\n if (defined(parentCounts)) {\n if (defined(parentCounts.byteOffset)) {\n parentCounts.componentType = defaultValue(parentCounts.componentType, GL.UNSIGNED_SHORT);\n parentCounts.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentCounts);\n parentCounts = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentCounts.byteOffset,\n instancesLength\n );\n }\n parentIndexes = new Uint16Array(instancesLength);\n parentIdsLength = 0;\n for (i = 0; i < instancesLength; ++i) {\n parentIndexes[i] = parentIdsLength;\n parentIdsLength += parentCounts[i];\n }\n }\n\n if (defined(parentIds) && defined(parentIds.byteOffset)) {\n parentIds.componentType = defaultValue(parentIds.componentType, GL.UNSIGNED_SHORT);\n parentIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentIds);\n parentIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentIds.byteOffset,\n parentIdsLength\n );\n }\n\n const classesLength = classes.length;\n for (i = 0; i < classesLength; ++i) {\n const classInstancesLength = classes[i].length;\n const properties = classes[i].instances;\n const binaryProperties = getBinaryProperties(classInstancesLength, properties, binaryBody);\n classes[i].instances = combine(binaryProperties, properties);\n }\n\n const classCounts = new Array(classesLength).fill(0);\n const classIndexes = new Uint16Array(instancesLength);\n for (i = 0; i < instancesLength; ++i) {\n classId = classIds[i];\n classIndexes[i] = classCounts[classId];\n ++classCounts[classId];\n }\n\n const hierarchy = {\n classes,\n classIds,\n classIndexes,\n parentCounts,\n parentIndexes,\n parentIds\n };\n\n validateHierarchy(hierarchy);\n\n return hierarchy;\n}\n\n// HELPER CODE\n\n// Traverse over the hierarchy and process each instance with the endConditionCallback.\n// When the endConditionCallback returns a value, the traversal stops and that value is returned.\nexport function traverseHierarchy(hierarchy, instanceIndex, endConditionCallback) {\n if (!hierarchy) {\n return;\n }\n\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n if (parentIds) {\n return endConditionCallback(hierarchy, instanceIndex);\n }\n if (parentCounts > 0) {\n return traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback);\n }\n return traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback);\n}\n\n// eslint-disable-next-line max-statements\nfunction traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback) {\n const classIds = hierarchy.classIds;\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const instancesLength = classIds.length;\n\n // Ignore instances that have already been visited. This occurs in diamond inheritance situations.\n // Use a marker value to indicate that an instance has been visited, which increments with each run.\n // This is more efficient than clearing the visited array every time.\n const visited = scratchVisited;\n visited.length = Math.max(visited.length, instancesLength);\n const visitedMarker = ++marker;\n\n const stack = scratchStack;\n stack.length = 0;\n stack.push(instanceIndex);\n\n while (stack.length > 0) {\n instanceIndex = stack.pop();\n if (visited[instanceIndex] === visitedMarker) {\n // This instance has already been visited, stop traversal\n continue;\n }\n visited[instanceIndex] = visitedMarker;\n const result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n const parentCount = parentCounts[instanceIndex];\n const parentIndex = parentIndexes[instanceIndex];\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself)\n // else add the parent to the stack to continue the traversal.\n if (parentId !== instanceIndex) {\n stack.push(parentId);\n }\n }\n }\n\n return null;\n}\n\nfunction traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback) {\n let hasParent = true;\n while (hasParent) {\n const result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n const parentId = hierarchy.parentIds[instanceIndex];\n hasParent = parentId !== instanceIndex;\n instanceIndex = parentId;\n }\n throw new Error('traverseHierarchySingleParent');\n}\n\n// DEBUG CODE\n\nfunction validateHierarchy(hierarchy) {\n const scratchValidateStack = [];\n\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n for (let i = 0; i < instancesLength; ++i) {\n validateInstance(hierarchy, i, stack);\n }\n}\n\nfunction validateInstance(hierarchy, instanceIndex, stack) {\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n if (!defined(parentIds)) {\n // No need to validate if there are no parents\n return;\n }\n\n assert(\n instanceIndex < instancesLength,\n `Parent index ${instanceIndex} exceeds the total number of instances: ${instancesLength}`\n );\n assert(\n stack.indexOf(instanceIndex) === -1,\n 'Circular dependency detected in the batch table hierarchy.'\n );\n\n stack.push(instanceIndex);\n const parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;\n const parentIndex = defined(parentCounts) ? parentIndexes[instanceIndex] : instanceIndex;\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself), else continue the traversal.\n if (parentId !== instanceIndex) {\n validateInstance(hierarchy, parentId, stack);\n }\n }\n stack.pop(instanceIndex);\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
|
|
2
3
|
import { assert } from '@loaders.gl/loader-utils';
|
|
3
4
|
import { createTypedArrayFromAccessor } from './helpers/tile-3d-accessor-utils';
|
|
4
5
|
import { initializeHierarchy, traverseHierarchy } from './tile-3d-batch-table-hierarchy';
|
|
5
|
-
|
|
6
6
|
function defined(x) {
|
|
7
7
|
return x !== undefined && x !== null;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
9
|
const clone = (x, y) => x;
|
|
11
10
|
|
|
12
11
|
const IGNORED_PROPERTY_FIELDS = {
|
|
@@ -14,55 +13,45 @@ const IGNORED_PROPERTY_FIELDS = {
|
|
|
14
13
|
extensions: true,
|
|
15
14
|
extras: true
|
|
16
15
|
};
|
|
16
|
+
|
|
17
17
|
export default class Tile3DBatchTableParser {
|
|
18
|
-
constructor(json, binary, featureCount, options = {}) {
|
|
19
|
-
var _this$json;
|
|
20
18
|
|
|
19
|
+
constructor(json, binary, featureCount) {
|
|
20
|
+
var _this$json;
|
|
21
|
+
let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
21
22
|
_defineProperty(this, "json", void 0);
|
|
22
|
-
|
|
23
23
|
_defineProperty(this, "binary", void 0);
|
|
24
|
-
|
|
25
24
|
_defineProperty(this, "featureCount", void 0);
|
|
26
|
-
|
|
27
25
|
_defineProperty(this, "_extensions", void 0);
|
|
28
|
-
|
|
29
26
|
_defineProperty(this, "_properties", void 0);
|
|
30
|
-
|
|
31
27
|
_defineProperty(this, "_binaryProperties", void 0);
|
|
32
|
-
|
|
33
28
|
_defineProperty(this, "_hierarchy", void 0);
|
|
34
|
-
|
|
35
29
|
assert(featureCount >= 0);
|
|
36
30
|
this.json = json || {};
|
|
37
31
|
this.binary = binary;
|
|
38
32
|
this.featureCount = featureCount;
|
|
39
33
|
this._extensions = ((_this$json = this.json) === null || _this$json === void 0 ? void 0 : _this$json.extensions) || {};
|
|
40
|
-
this._properties = {};
|
|
41
34
|
|
|
35
|
+
this._properties = {};
|
|
42
36
|
for (const propertyName in this.json) {
|
|
43
37
|
if (!IGNORED_PROPERTY_FIELDS[propertyName]) {
|
|
44
38
|
this._properties[propertyName] = this.json[propertyName];
|
|
45
39
|
}
|
|
46
40
|
}
|
|
47
|
-
|
|
48
41
|
this._binaryProperties = this._initializeBinaryProperties();
|
|
49
42
|
|
|
50
43
|
if (options['3DTILES_batch_table_hierarchy']) {
|
|
51
44
|
this._hierarchy = initializeHierarchy(this, this.json, this.binary);
|
|
52
45
|
}
|
|
53
46
|
}
|
|
54
|
-
|
|
55
47
|
getExtension(extensionName) {
|
|
56
48
|
return this.json && this.json.extensions && this.json.extensions[extensionName];
|
|
57
49
|
}
|
|
58
|
-
|
|
59
50
|
memorySizeInBytes() {
|
|
60
51
|
return 0;
|
|
61
52
|
}
|
|
62
|
-
|
|
63
53
|
isClass(batchId, className) {
|
|
64
54
|
this._checkBatchId(batchId);
|
|
65
|
-
|
|
66
55
|
assert(typeof className === 'string', className);
|
|
67
56
|
|
|
68
57
|
if (this._hierarchy) {
|
|
@@ -73,15 +62,12 @@ export default class Tile3DBatchTableParser {
|
|
|
73
62
|
});
|
|
74
63
|
return defined(result);
|
|
75
64
|
}
|
|
76
|
-
|
|
77
65
|
return false;
|
|
78
66
|
}
|
|
79
|
-
|
|
80
67
|
isExactClass(batchId, className) {
|
|
81
68
|
assert(typeof className === 'string', className);
|
|
82
69
|
return this.getExactClassName(batchId) === className;
|
|
83
70
|
}
|
|
84
|
-
|
|
85
71
|
getExactClassName(batchId) {
|
|
86
72
|
this._checkBatchId(batchId);
|
|
87
73
|
|
|
@@ -90,75 +76,54 @@ export default class Tile3DBatchTableParser {
|
|
|
90
76
|
const instanceClass = this._hierarchy.classes[classId];
|
|
91
77
|
return instanceClass.name;
|
|
92
78
|
}
|
|
93
|
-
|
|
94
79
|
return undefined;
|
|
95
80
|
}
|
|
96
|
-
|
|
97
81
|
hasProperty(batchId, name) {
|
|
98
82
|
this._checkBatchId(batchId);
|
|
99
|
-
|
|
100
83
|
assert(typeof name === 'string', name);
|
|
101
84
|
return defined(this._properties[name]) || this._hasPropertyInHierarchy(batchId, name);
|
|
102
85
|
}
|
|
103
|
-
|
|
104
86
|
getPropertyNames(batchId, results) {
|
|
105
87
|
this._checkBatchId(batchId);
|
|
106
|
-
|
|
107
88
|
results = defined(results) ? results : [];
|
|
108
89
|
results.length = 0;
|
|
109
90
|
const propertyNames = Object.keys(this._properties);
|
|
110
91
|
results.push(...propertyNames);
|
|
111
|
-
|
|
112
92
|
if (this._hierarchy) {
|
|
113
93
|
this._getPropertyNamesInHierarchy(batchId, results);
|
|
114
94
|
}
|
|
115
|
-
|
|
116
95
|
return results;
|
|
117
96
|
}
|
|
118
|
-
|
|
119
97
|
getProperty(batchId, name) {
|
|
120
98
|
this._checkBatchId(batchId);
|
|
121
|
-
|
|
122
99
|
assert(typeof name === 'string', name);
|
|
123
|
-
|
|
124
100
|
if (this._binaryProperties) {
|
|
125
101
|
const binaryProperty = this._binaryProperties[name];
|
|
126
|
-
|
|
127
102
|
if (defined(binaryProperty)) {
|
|
128
103
|
return this._getBinaryProperty(binaryProperty, batchId);
|
|
129
104
|
}
|
|
130
105
|
}
|
|
131
|
-
|
|
132
106
|
const propertyValues = this._properties[name];
|
|
133
|
-
|
|
134
107
|
if (defined(propertyValues)) {
|
|
135
108
|
return clone(propertyValues[batchId], true);
|
|
136
109
|
}
|
|
137
110
|
|
|
138
111
|
if (this._hierarchy) {
|
|
139
112
|
const hierarchyProperty = this._getHierarchyProperty(batchId, name);
|
|
140
|
-
|
|
141
113
|
if (defined(hierarchyProperty)) {
|
|
142
114
|
return hierarchyProperty;
|
|
143
115
|
}
|
|
144
116
|
}
|
|
145
|
-
|
|
146
117
|
return undefined;
|
|
147
118
|
}
|
|
148
|
-
|
|
149
119
|
setProperty(batchId, name, value) {
|
|
150
120
|
const featureCount = this.featureCount;
|
|
151
|
-
|
|
152
121
|
this._checkBatchId(batchId);
|
|
153
|
-
|
|
154
122
|
assert(typeof name === 'string', name);
|
|
155
|
-
|
|
156
123
|
if (this._binaryProperties) {
|
|
157
124
|
const binaryProperty = this._binaryProperties[name];
|
|
158
|
-
|
|
159
125
|
if (binaryProperty) {
|
|
160
126
|
this._setBinaryProperty(binaryProperty, batchId, value);
|
|
161
|
-
|
|
162
127
|
return;
|
|
163
128
|
}
|
|
164
129
|
}
|
|
@@ -168,56 +133,45 @@ export default class Tile3DBatchTableParser {
|
|
|
168
133
|
return;
|
|
169
134
|
}
|
|
170
135
|
}
|
|
171
|
-
|
|
172
136
|
let propertyValues = this._properties[name];
|
|
173
|
-
|
|
174
137
|
if (!defined(propertyValues)) {
|
|
175
138
|
this._properties[name] = new Array(featureCount);
|
|
176
139
|
propertyValues = this._properties[name];
|
|
177
140
|
}
|
|
178
|
-
|
|
179
141
|
propertyValues[batchId] = clone(value, true);
|
|
180
142
|
}
|
|
181
143
|
|
|
182
144
|
_checkBatchId(batchId) {
|
|
183
145
|
const valid = batchId >= 0 && batchId < this.featureCount;
|
|
184
|
-
|
|
185
146
|
if (!valid) {
|
|
186
147
|
throw new Error('batchId not in range [0, featureCount - 1].');
|
|
187
148
|
}
|
|
188
149
|
}
|
|
189
|
-
|
|
190
150
|
_getBinaryProperty(binaryProperty, index) {
|
|
191
151
|
return binaryProperty.unpack(binaryProperty.typedArray, index);
|
|
192
152
|
}
|
|
193
|
-
|
|
194
153
|
_setBinaryProperty(binaryProperty, index, value) {
|
|
195
154
|
binaryProperty.pack(value, binaryProperty.typedArray, index);
|
|
196
155
|
}
|
|
197
|
-
|
|
198
156
|
_initializeBinaryProperties() {
|
|
199
157
|
let binaryProperties = null;
|
|
200
|
-
|
|
201
158
|
for (const name in this._properties) {
|
|
202
159
|
const property = this._properties[name];
|
|
203
|
-
|
|
204
160
|
const binaryProperty = this._initializeBinaryProperty(name, property);
|
|
205
|
-
|
|
206
161
|
if (binaryProperty) {
|
|
207
162
|
binaryProperties = binaryProperties || {};
|
|
208
163
|
binaryProperties[name] = binaryProperty;
|
|
209
164
|
}
|
|
210
165
|
}
|
|
211
|
-
|
|
212
166
|
return binaryProperties;
|
|
213
167
|
}
|
|
214
|
-
|
|
215
168
|
_initializeBinaryProperty(name, property) {
|
|
216
169
|
if ('byteOffset' in property) {
|
|
217
170
|
const tile3DAccessor = property;
|
|
218
171
|
assert(this.binary, "Property ".concat(name, " requires a batch table binary."));
|
|
219
172
|
assert(tile3DAccessor.type, "Property ".concat(name, " requires a type."));
|
|
220
173
|
const accessor = createTypedArrayFromAccessor(tile3DAccessor, this.binary.buffer, this.binary.byteOffset | 0, this.featureCount);
|
|
174
|
+
|
|
221
175
|
return {
|
|
222
176
|
typedArray: accessor.values,
|
|
223
177
|
componentCount: accessor.size,
|
|
@@ -225,7 +179,6 @@ export default class Tile3DBatchTableParser {
|
|
|
225
179
|
pack: accessor.packer
|
|
226
180
|
};
|
|
227
181
|
}
|
|
228
|
-
|
|
229
182
|
return null;
|
|
230
183
|
}
|
|
231
184
|
|
|
@@ -233,7 +186,6 @@ export default class Tile3DBatchTableParser {
|
|
|
233
186
|
if (!this._hierarchy) {
|
|
234
187
|
return false;
|
|
235
188
|
}
|
|
236
|
-
|
|
237
189
|
const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
|
|
238
190
|
const classId = hierarchy.classIds[instanceIndex];
|
|
239
191
|
const instances = hierarchy.classes[classId].instances;
|
|
@@ -241,12 +193,10 @@ export default class Tile3DBatchTableParser {
|
|
|
241
193
|
});
|
|
242
194
|
return defined(result);
|
|
243
195
|
}
|
|
244
|
-
|
|
245
196
|
_getPropertyNamesInHierarchy(batchId, results) {
|
|
246
197
|
traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
|
|
247
198
|
const classId = hierarchy.classIds[instanceIndex];
|
|
248
199
|
const instances = hierarchy.classes[classId].instances;
|
|
249
|
-
|
|
250
200
|
for (const name in instances) {
|
|
251
201
|
if (instances.hasOwnProperty(name)) {
|
|
252
202
|
if (results.indexOf(name) === -1) {
|
|
@@ -256,49 +206,39 @@ export default class Tile3DBatchTableParser {
|
|
|
256
206
|
}
|
|
257
207
|
});
|
|
258
208
|
}
|
|
259
|
-
|
|
260
209
|
_getHierarchyProperty(batchId, name) {
|
|
261
210
|
return traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
|
|
262
211
|
const classId = hierarchy.classIds[instanceIndex];
|
|
263
212
|
const instanceClass = hierarchy.classes[classId];
|
|
264
213
|
const indexInClass = hierarchy.classIndexes[instanceIndex];
|
|
265
214
|
const propertyValues = instanceClass.instances[name];
|
|
266
|
-
|
|
267
215
|
if (defined(propertyValues)) {
|
|
268
216
|
if (defined(propertyValues.typedArray)) {
|
|
269
217
|
return this._getBinaryProperty(propertyValues, indexInClass);
|
|
270
218
|
}
|
|
271
|
-
|
|
272
219
|
return clone(propertyValues[indexInClass], true);
|
|
273
220
|
}
|
|
274
|
-
|
|
275
221
|
return null;
|
|
276
222
|
});
|
|
277
223
|
}
|
|
278
|
-
|
|
279
224
|
_setHierarchyProperty(batchTable, batchId, name, value) {
|
|
280
225
|
const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {
|
|
281
226
|
const classId = hierarchy.classIds[instanceIndex];
|
|
282
227
|
const instanceClass = hierarchy.classes[classId];
|
|
283
228
|
const indexInClass = hierarchy.classIndexes[instanceIndex];
|
|
284
229
|
const propertyValues = instanceClass.instances[name];
|
|
285
|
-
|
|
286
230
|
if (defined(propertyValues)) {
|
|
287
231
|
assert(instanceIndex === batchId, "Inherited property \"".concat(name, "\" is read-only."));
|
|
288
|
-
|
|
289
232
|
if (defined(propertyValues.typedArray)) {
|
|
290
233
|
this._setBinaryProperty(propertyValues, indexInClass, value);
|
|
291
234
|
} else {
|
|
292
235
|
propertyValues[indexInClass] = clone(value, true);
|
|
293
236
|
}
|
|
294
|
-
|
|
295
237
|
return true;
|
|
296
238
|
}
|
|
297
|
-
|
|
298
239
|
return false;
|
|
299
240
|
});
|
|
300
241
|
return defined(result);
|
|
301
242
|
}
|
|
302
|
-
|
|
303
243
|
}
|
|
304
244
|
//# sourceMappingURL=tile-3d-batch-table.js.map
|