@combeenation/3d-viewer 3.1.1-alpha7 → 3.1.2
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/README.md +111 -111
- package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
- package/dist/lib-cjs/api/classes/animationInterface.js +1 -1
- package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
- package/dist/lib-cjs/api/classes/dottedPath.js +190 -190
- package/dist/lib-cjs/api/classes/element.d.ts +125 -126
- package/dist/lib-cjs/api/classes/element.js +678 -674
- package/dist/lib-cjs/api/classes/element.js.map +1 -1
- package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +14 -14
- package/dist/lib-cjs/api/classes/elementParameterizable.js +134 -134
- package/dist/lib-cjs/api/classes/event.d.ts +312 -312
- package/dist/lib-cjs/api/classes/event.js +357 -357
- package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
- package/dist/lib-cjs/api/classes/eventBroadcaster.js +53 -53
- package/dist/lib-cjs/api/classes/parameter.d.ts +165 -165
- package/dist/lib-cjs/api/classes/parameter.js +267 -267
- package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
- package/dist/lib-cjs/api/classes/parameterObservable.js +126 -126
- package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
- package/dist/lib-cjs/api/classes/parameterizable.js +149 -149
- package/dist/lib-cjs/api/classes/placementAnimation.d.ts +38 -38
- package/dist/lib-cjs/api/classes/placementAnimation.js +138 -138
- package/dist/lib-cjs/api/classes/variant.d.ts +180 -190
- package/dist/lib-cjs/api/classes/variant.js +863 -873
- package/dist/lib-cjs/api/classes/variant.js.map +1 -1
- package/dist/lib-cjs/api/classes/variantInstance.d.ts +41 -41
- package/dist/lib-cjs/api/classes/variantInstance.js +98 -98
- package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
- package/dist/lib-cjs/api/classes/variantParameterizable.js +92 -92
- package/dist/lib-cjs/api/classes/viewer.d.ts +128 -128
- package/dist/lib-cjs/api/classes/viewer.js +486 -486
- package/dist/lib-cjs/api/classes/viewerLight.d.ts +65 -66
- package/dist/lib-cjs/api/classes/viewerLight.js +322 -389
- package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
- package/dist/lib-cjs/api/internal/debugViewer.d.ts +13 -13
- package/dist/lib-cjs/api/internal/debugViewer.js +87 -87
- package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
- package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
- package/dist/lib-cjs/api/internal/sceneSetup.d.ts +6 -6
- package/dist/lib-cjs/api/internal/sceneSetup.js +227 -227
- package/dist/lib-cjs/api/manager/animationManager.d.ts +29 -29
- package/dist/lib-cjs/api/manager/animationManager.js +121 -121
- package/dist/lib-cjs/api/manager/sceneManager.d.ts +32 -32
- package/dist/lib-cjs/api/manager/sceneManager.js +132 -132
- package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +90 -90
- package/dist/lib-cjs/api/manager/variantInstanceManager.js +321 -321
- package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
- package/dist/lib-cjs/api/store/specStorage.js +51 -51
- package/dist/lib-cjs/api/util/babylonHelper.d.ts +125 -125
- package/dist/lib-cjs/api/util/babylonHelper.js +368 -368
- package/dist/lib-cjs/api/util/globalTypes.d.ts +275 -275
- package/dist/lib-cjs/api/util/globalTypes.js +1 -1
- package/dist/lib-cjs/api/util/resourceHelper.d.ts +30 -30
- package/dist/lib-cjs/api/util/resourceHelper.js +247 -203
- package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
- package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
- package/dist/lib-cjs/api/util/stringHelper.js +25 -25
- package/dist/lib-cjs/buildinfo.json +3 -3
- package/dist/lib-cjs/index.d.ts +46 -46
- package/dist/lib-cjs/index.js +82 -82
- package/dist/webpack-stats.json +0 -0
- package/package.json +83 -83
- package/src/api/classes/animationInterface.ts +11 -11
- package/src/api/classes/dottedPath.ts +189 -189
- package/src/api/classes/element.ts +608 -606
- package/src/api/classes/elementParameterizable.ts +78 -78
- package/src/api/classes/event.ts +355 -355
- package/src/api/classes/eventBroadcaster.ts +54 -54
- package/src/api/classes/parameter.ts +277 -277
- package/src/api/classes/parameterObservable.ts +121 -121
- package/src/api/classes/placementAnimation.ts +133 -133
- package/src/api/classes/variant.ts +659 -670
- package/src/api/classes/variantInstance.ts +81 -81
- package/src/api/classes/viewer.ts +421 -421
- package/src/api/internal/debugViewer.ts +81 -81
- package/src/api/internal/lensRendering.ts +10 -10
- package/src/api/internal/sceneSetup.ts +203 -203
- package/src/api/manager/animationManager.ts +116 -116
- package/src/api/manager/sceneManager.ts +105 -105
- package/src/api/manager/variantInstanceManager.ts +236 -236
- package/src/api/store/specStorage.ts +53 -53
- package/src/api/util/babylonHelper.ts +392 -392
- package/src/api/util/globalTypes.ts +314 -314
- package/src/api/util/resourceHelper.ts +168 -155
- package/src/buildinfo.json +2 -2
- package/src/commonjs.tsconfig.json +13 -13
- package/src/declaration.tsconfig.json +10 -10
- package/src/dev.ts +44 -46
- package/src/es6.tsconfig.json +13 -13
- package/src/index.ts +87 -87
- package/src/pagesconfig.json +47 -47
- package/src/tsconfig.json +43 -43
- package/src/tsconfig.types.json +9 -9
- package/src/types.d.ts +4 -4
|
@@ -1,369 +1,369 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getClientRectFromMesh = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = exports.deactivateTransformNode = exports.activateTransformNode = exports.assertTransformNode = exports.injectTransformNodeMetadata = exports.cloneTransformNodeMaterial = exports.cloneTransformNode = exports.getDottedPathForTransformNode = exports.mapToDottedNodes = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
|
-
var math_vector_1 = require("@babylonjs/core/Maths/math.vector");
|
|
6
|
-
var abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
|
|
7
|
-
var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
|
|
8
|
-
var lodash_es_1 = require("lodash-es");
|
|
9
|
-
var dottedPath_1 = require("../classes/dottedPath");
|
|
10
|
-
/**
|
|
11
|
-
* @param nodes
|
|
12
|
-
* @param predicate
|
|
13
|
-
* @return Map<DottedPath, T>
|
|
14
|
-
*/
|
|
15
|
-
var mapToDottedNodes = function (nodes, predicate) {
|
|
16
|
-
var map = new Map();
|
|
17
|
-
var addNodes = function (_node) {
|
|
18
|
-
if (predicate && predicate(_node)) {
|
|
19
|
-
map.set(_node.metadata.dottedPath, _node);
|
|
20
|
-
}
|
|
21
|
-
_node.getChildren().forEach(function (child) {
|
|
22
|
-
addNodes(child);
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
nodes.forEach(function (node) {
|
|
26
|
-
addNodes(node);
|
|
27
|
-
});
|
|
28
|
-
return map;
|
|
29
|
-
};
|
|
30
|
-
exports.mapToDottedNodes = mapToDottedNodes;
|
|
31
|
-
/**
|
|
32
|
-
* @param node
|
|
33
|
-
* @return DottedPath
|
|
34
|
-
*/
|
|
35
|
-
var getDottedPathForTransformNode = function (node) {
|
|
36
|
-
var dottedPath = dottedPath_1.DottedPath.create(node.name);
|
|
37
|
-
var _parent = node;
|
|
38
|
-
while (_parent.parent) {
|
|
39
|
-
_parent = _parent.parent;
|
|
40
|
-
dottedPath.unshiftPart(_parent.name);
|
|
41
|
-
}
|
|
42
|
-
return dottedPath;
|
|
43
|
-
};
|
|
44
|
-
exports.getDottedPathForTransformNode = getDottedPathForTransformNode;
|
|
45
|
-
/**
|
|
46
|
-
*
|
|
47
|
-
* @param node
|
|
48
|
-
* @param predicate
|
|
49
|
-
* @param deep
|
|
50
|
-
* @return TransformNode | null
|
|
51
|
-
*/
|
|
52
|
-
var cloneTransformNode = function (node, predicate, deep) {
|
|
53
|
-
if (deep === void 0) { deep = true; }
|
|
54
|
-
if (predicate && !predicate(node)) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
var clone = node.clone(node.name, node.parent, true);
|
|
58
|
-
if (clone) {
|
|
59
|
-
clone.metadata = lodash_es_1.cloneDeep(node.metadata);
|
|
60
|
-
}
|
|
61
|
-
if (deep) {
|
|
62
|
-
var children = node.getChildTransformNodes(true);
|
|
63
|
-
children.forEach(function (child) {
|
|
64
|
-
var clonedChild = cloneTransformNode(child, predicate, deep);
|
|
65
|
-
if (clonedChild) {
|
|
66
|
-
clonedChild.parent = clone;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
return clone;
|
|
71
|
-
};
|
|
72
|
-
exports.cloneTransformNode = cloneTransformNode;
|
|
73
|
-
/**
|
|
74
|
-
* @param node
|
|
75
|
-
* @param deep
|
|
76
|
-
* @param prefix
|
|
77
|
-
* @return TransformNode
|
|
78
|
-
*/
|
|
79
|
-
var cloneTransformNodeMaterial = function (node, prefix, deep) {
|
|
80
|
-
if (prefix === void 0) { prefix = ''; }
|
|
81
|
-
if (deep === void 0) { deep = true; }
|
|
82
|
-
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
83
|
-
var _prefix = dottedPath_1.DottedPath.create(prefix).addParts([
|
|
84
|
-
'node',
|
|
85
|
-
node.uniqueId.toString()
|
|
86
|
-
]);
|
|
87
|
-
node.material = node.material.clone(_prefix.path);
|
|
88
|
-
}
|
|
89
|
-
if (deep) {
|
|
90
|
-
var children = node.getChildTransformNodes(true);
|
|
91
|
-
children.forEach(function (child) { return cloneTransformNodeMaterial(child, prefix, deep); });
|
|
92
|
-
}
|
|
93
|
-
return node;
|
|
94
|
-
};
|
|
95
|
-
exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
|
|
96
|
-
/**
|
|
97
|
-
* @param node
|
|
98
|
-
* @param deep
|
|
99
|
-
* @param metadata
|
|
100
|
-
*/
|
|
101
|
-
var injectTransformNodeMetadata = function (node, metadata, deep) {
|
|
102
|
-
if (deep === void 0) { deep = true; }
|
|
103
|
-
node.metadata = lodash_es_1.merge({}, node.metadata, metadata);
|
|
104
|
-
if (deep) {
|
|
105
|
-
var children = node.getChildTransformNodes(true);
|
|
106
|
-
children.forEach(function (child) { return injectTransformNodeMetadata(child, metadata, deep); });
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
exports.injectTransformNodeMetadata = injectTransformNodeMetadata;
|
|
110
|
-
/**
|
|
111
|
-
* @param node
|
|
112
|
-
* @param assertCallable
|
|
113
|
-
* @param callableParameters
|
|
114
|
-
* @param deep
|
|
115
|
-
*/
|
|
116
|
-
var assertTransformNode = function (node, assertCallable, callableParameters, deep) {
|
|
117
|
-
if (callableParameters === void 0) { callableParameters = []; }
|
|
118
|
-
if (deep === void 0) { deep = true; }
|
|
119
|
-
assertCallable.apply(void 0, tslib_1.__spreadArrays([node], callableParameters));
|
|
120
|
-
if (deep) {
|
|
121
|
-
var children = node.getChildTransformNodes(true);
|
|
122
|
-
children.forEach(function (child) { return assertTransformNode(child, assertCallable, callableParameters, deep); });
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
exports.assertTransformNode = assertTransformNode;
|
|
126
|
-
/**
|
|
127
|
-
* @param node
|
|
128
|
-
* @param deep
|
|
129
|
-
*/
|
|
130
|
-
var activateTransformNode = function (node, deep) {
|
|
131
|
-
if (deep === void 0) { deep = true; }
|
|
132
|
-
node.setEnabled(true);
|
|
133
|
-
/*
|
|
134
|
-
if( node instanceof AbstractMesh ) {
|
|
135
|
-
node.visibility = 1;
|
|
136
|
-
node.isPickable = true;
|
|
137
|
-
}
|
|
138
|
-
*/
|
|
139
|
-
if (deep) {
|
|
140
|
-
node.getChildTransformNodes(true).forEach(function (child) { return activateTransformNode(child, deep); });
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
exports.activateTransformNode = activateTransformNode;
|
|
144
|
-
/**
|
|
145
|
-
* @param node
|
|
146
|
-
* @param deep
|
|
147
|
-
*/
|
|
148
|
-
var deactivateTransformNode = function (node, deep) {
|
|
149
|
-
if (deep === void 0) { deep = true; }
|
|
150
|
-
node.setEnabled(false);
|
|
151
|
-
/*
|
|
152
|
-
if( node instanceof AbstractMesh ) {
|
|
153
|
-
node.visibility = 0;
|
|
154
|
-
node.isPickable = false;
|
|
155
|
-
}
|
|
156
|
-
*/
|
|
157
|
-
if (deep) {
|
|
158
|
-
node.getChildTransformNodes(true).forEach(function (child) { return deactivateTransformNode(child, deep); });
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
exports.deactivateTransformNode = deactivateTransformNode;
|
|
162
|
-
/**
|
|
163
|
-
* @param node
|
|
164
|
-
* @param material
|
|
165
|
-
* @param deep
|
|
166
|
-
*/
|
|
167
|
-
var setMaterial = function (node, material, deep) {
|
|
168
|
-
if (deep === void 0) { deep = true; }
|
|
169
|
-
if (node instanceof abstractMesh_1.AbstractMesh) {
|
|
170
|
-
node.material = material;
|
|
171
|
-
}
|
|
172
|
-
if (deep) {
|
|
173
|
-
node.getChildTransformNodes(true).forEach(function (child) { return setMaterial(child, material, deep); });
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
exports.setMaterial = setMaterial;
|
|
177
|
-
/**
|
|
178
|
-
* !!! Warning !!!
|
|
179
|
-
* This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
|
|
180
|
-
* situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
|
|
181
|
-
*
|
|
182
|
-
* See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
|
|
183
|
-
*
|
|
184
|
-
* Set material of an instanced meshes source mesh.
|
|
185
|
-
* Changes the material of all instanced meshes which have the same source mesh.
|
|
186
|
-
*
|
|
187
|
-
* @param node
|
|
188
|
-
* @param material
|
|
189
|
-
* @param deep
|
|
190
|
-
*
|
|
191
|
-
* @ignore
|
|
192
|
-
*/
|
|
193
|
-
var setSourceNodeMaterial = function (node, material, deep) {
|
|
194
|
-
if (deep === void 0) { deep = true; }
|
|
195
|
-
var warn = "\tYou're using \"setSourceNodeMaterial\" which is not public API.\n\tWhilst it can help solving certain problems, it only works reliably in well defined situations and can cause unwanted side effects under some conditions.\n\tUse carefully at your own risk!";
|
|
196
|
-
console.warn("!!! Warning !!!\n" + warn);
|
|
197
|
-
if (node instanceof instancedMesh_1.InstancedMesh) {
|
|
198
|
-
node.sourceMesh.material = material;
|
|
199
|
-
}
|
|
200
|
-
if (deep) {
|
|
201
|
-
node.getChildTransformNodes(true).forEach(function (child) { return setSourceNodeMaterial(child, material, deep); });
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
exports.setSourceNodeMaterial = setSourceNodeMaterial;
|
|
205
|
-
/**
|
|
206
|
-
* @param node
|
|
207
|
-
* @param color
|
|
208
|
-
* @param deep
|
|
209
|
-
*/
|
|
210
|
-
var setMaterialColor = function (node, color, deep) {
|
|
211
|
-
if (deep === void 0) { deep = true; }
|
|
212
|
-
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
213
|
-
var materialCls = node.material.getClassName();
|
|
214
|
-
switch (materialCls) {
|
|
215
|
-
case 'PBRMaterial':
|
|
216
|
-
node.material.albedoColor = color.toLinearSpace();
|
|
217
|
-
break;
|
|
218
|
-
case 'StandardMaterial':
|
|
219
|
-
node.material.diffuseColor = color;
|
|
220
|
-
break;
|
|
221
|
-
default:
|
|
222
|
-
throw new Error("Setting color for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (deep) {
|
|
226
|
-
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialColor(child, color, deep); });
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
exports.setMaterialColor = setMaterialColor;
|
|
230
|
-
/**
|
|
231
|
-
* @param node
|
|
232
|
-
* @param texture
|
|
233
|
-
* @param deep
|
|
234
|
-
*/
|
|
235
|
-
var setMaterialTexture = function (node, texture, deep) {
|
|
236
|
-
if (deep === void 0) { deep = true; }
|
|
237
|
-
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
238
|
-
var materialCls = node.material.getClassName();
|
|
239
|
-
switch (materialCls) {
|
|
240
|
-
case 'PBRMaterial':
|
|
241
|
-
node.material.albedoTexture = texture;
|
|
242
|
-
break;
|
|
243
|
-
case 'StandardMaterial':
|
|
244
|
-
node.material.diffuseTexture = texture;
|
|
245
|
-
break;
|
|
246
|
-
default:
|
|
247
|
-
throw new Error("Setting texture for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (deep) {
|
|
251
|
-
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialTexture(child, texture, deep); });
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
exports.setMaterialTexture = setMaterialTexture;
|
|
255
|
-
/**
|
|
256
|
-
* @param node
|
|
257
|
-
* @param metallness
|
|
258
|
-
* @param deep
|
|
259
|
-
*/
|
|
260
|
-
var setMaterialMetallness = function (node, metallness, deep) {
|
|
261
|
-
if (deep === void 0) { deep = true; }
|
|
262
|
-
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
263
|
-
var materialCls = node.material.getClassName();
|
|
264
|
-
switch (materialCls) {
|
|
265
|
-
case 'PBRMaterial':
|
|
266
|
-
node.material.metallic = metallness;
|
|
267
|
-
break;
|
|
268
|
-
default:
|
|
269
|
-
throw new Error("Setting metallness for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
if (deep) {
|
|
273
|
-
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialMetallness(child, metallness, deep); });
|
|
274
|
-
}
|
|
275
|
-
};
|
|
276
|
-
exports.setMaterialMetallness = setMaterialMetallness;
|
|
277
|
-
/**
|
|
278
|
-
* @param node
|
|
279
|
-
* @param roughness
|
|
280
|
-
* @param deep
|
|
281
|
-
*/
|
|
282
|
-
var setMaterialRoughness = function (node, roughness, deep) {
|
|
283
|
-
if (deep === void 0) { deep = true; }
|
|
284
|
-
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
285
|
-
var materialCls = node.material.getClassName();
|
|
286
|
-
switch (materialCls) {
|
|
287
|
-
case 'PBRMaterial':
|
|
288
|
-
node.material.roughness = roughness;
|
|
289
|
-
break;
|
|
290
|
-
case 'StandardMaterial':
|
|
291
|
-
node.material.roughness = roughness;
|
|
292
|
-
break;
|
|
293
|
-
default:
|
|
294
|
-
throw new Error("Setting roughness for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
if (deep) {
|
|
298
|
-
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialRoughness(child, roughness, deep); });
|
|
299
|
-
}
|
|
300
|
-
};
|
|
301
|
-
exports.setMaterialRoughness = setMaterialRoughness;
|
|
302
|
-
/**
|
|
303
|
-
* @param node
|
|
304
|
-
* @param layer
|
|
305
|
-
* @param color
|
|
306
|
-
* @param deep
|
|
307
|
-
*/
|
|
308
|
-
var addToHighlightLayer = function (layer, color, node, deep) {
|
|
309
|
-
if (deep === void 0) { deep = true; }
|
|
310
|
-
if (node instanceof abstractMesh_1.AbstractMesh) {
|
|
311
|
-
layer.addMesh(node, color);
|
|
312
|
-
}
|
|
313
|
-
if (deep) {
|
|
314
|
-
node.getChildTransformNodes(true).forEach(function (child) { return addToHighlightLayer(layer, color, child, deep); });
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
exports.addToHighlightLayer = addToHighlightLayer;
|
|
318
|
-
/**
|
|
319
|
-
* @param node
|
|
320
|
-
* @param layer
|
|
321
|
-
* @param deep
|
|
322
|
-
*/
|
|
323
|
-
var removeFromHighlightLayer = function (layer, node, deep) {
|
|
324
|
-
if (deep === void 0) { deep = true; }
|
|
325
|
-
if (node instanceof abstractMesh_1.AbstractMesh) {
|
|
326
|
-
layer.removeMesh(node);
|
|
327
|
-
}
|
|
328
|
-
if (deep) {
|
|
329
|
-
node.getChildTransformNodes(true).forEach(function (child) { return removeFromHighlightLayer(layer, child, deep); });
|
|
330
|
-
}
|
|
331
|
-
};
|
|
332
|
-
exports.removeFromHighlightLayer = removeFromHighlightLayer;
|
|
333
|
-
/**
|
|
334
|
-
* https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
|
|
335
|
-
* @param mesh
|
|
336
|
-
* @param scene
|
|
337
|
-
* @param canvas
|
|
338
|
-
*/
|
|
339
|
-
var getClientRectFromMesh = function (mesh, scene, canvas) {
|
|
340
|
-
// get bounding box of the mesh
|
|
341
|
-
var meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
|
|
342
|
-
// get the matrix and viewport needed to project the vectors onto the screen
|
|
343
|
-
var worldMatrix = mesh.getWorldMatrix();
|
|
344
|
-
var transformMatrix = scene.getTransformMatrix();
|
|
345
|
-
var viewport = scene.activeCamera.viewport;
|
|
346
|
-
// loop though all the vectors and project them against the current camera viewport to get a set of coordinates
|
|
347
|
-
var coordinates = meshVectors.map(function (vector) {
|
|
348
|
-
var projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
|
|
349
|
-
projection.x = projection.x * canvas.clientWidth;
|
|
350
|
-
projection.y = projection.y * canvas.clientHeight;
|
|
351
|
-
return projection;
|
|
352
|
-
});
|
|
353
|
-
// get the min and max for all the coordinates so we can calculate the largest possible screen size
|
|
354
|
-
var maxX = Math.max.apply(Math, coordinates.map(function (o) { return o.x; }));
|
|
355
|
-
var minX = Math.min.apply(Math, coordinates.map(function (o) { return o.x; }));
|
|
356
|
-
var maxY = Math.max.apply(Math, coordinates.map(function (o) { return o.y; }));
|
|
357
|
-
var minY = Math.min.apply(Math, coordinates.map(function (o) { return o.y; }));
|
|
358
|
-
// return a ClientRect from this
|
|
359
|
-
return {
|
|
360
|
-
width: maxX - minX,
|
|
361
|
-
height: maxY - minY,
|
|
362
|
-
left: minX,
|
|
363
|
-
top: minY,
|
|
364
|
-
right: maxX,
|
|
365
|
-
bottom: maxY,
|
|
366
|
-
};
|
|
367
|
-
};
|
|
368
|
-
exports.getClientRectFromMesh = getClientRectFromMesh;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getClientRectFromMesh = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = exports.deactivateTransformNode = exports.activateTransformNode = exports.assertTransformNode = exports.injectTransformNodeMetadata = exports.cloneTransformNodeMaterial = exports.cloneTransformNode = exports.getDottedPathForTransformNode = exports.mapToDottedNodes = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var math_vector_1 = require("@babylonjs/core/Maths/math.vector");
|
|
6
|
+
var abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
|
|
7
|
+
var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
|
|
8
|
+
var lodash_es_1 = require("lodash-es");
|
|
9
|
+
var dottedPath_1 = require("../classes/dottedPath");
|
|
10
|
+
/**
|
|
11
|
+
* @param nodes
|
|
12
|
+
* @param predicate
|
|
13
|
+
* @return Map<DottedPath, T>
|
|
14
|
+
*/
|
|
15
|
+
var mapToDottedNodes = function (nodes, predicate) {
|
|
16
|
+
var map = new Map();
|
|
17
|
+
var addNodes = function (_node) {
|
|
18
|
+
if (predicate && predicate(_node)) {
|
|
19
|
+
map.set(_node.metadata.dottedPath, _node);
|
|
20
|
+
}
|
|
21
|
+
_node.getChildren().forEach(function (child) {
|
|
22
|
+
addNodes(child);
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
nodes.forEach(function (node) {
|
|
26
|
+
addNodes(node);
|
|
27
|
+
});
|
|
28
|
+
return map;
|
|
29
|
+
};
|
|
30
|
+
exports.mapToDottedNodes = mapToDottedNodes;
|
|
31
|
+
/**
|
|
32
|
+
* @param node
|
|
33
|
+
* @return DottedPath
|
|
34
|
+
*/
|
|
35
|
+
var getDottedPathForTransformNode = function (node) {
|
|
36
|
+
var dottedPath = dottedPath_1.DottedPath.create(node.name);
|
|
37
|
+
var _parent = node;
|
|
38
|
+
while (_parent.parent) {
|
|
39
|
+
_parent = _parent.parent;
|
|
40
|
+
dottedPath.unshiftPart(_parent.name);
|
|
41
|
+
}
|
|
42
|
+
return dottedPath;
|
|
43
|
+
};
|
|
44
|
+
exports.getDottedPathForTransformNode = getDottedPathForTransformNode;
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* @param node
|
|
48
|
+
* @param predicate
|
|
49
|
+
* @param deep
|
|
50
|
+
* @return TransformNode | null
|
|
51
|
+
*/
|
|
52
|
+
var cloneTransformNode = function (node, predicate, deep) {
|
|
53
|
+
if (deep === void 0) { deep = true; }
|
|
54
|
+
if (predicate && !predicate(node)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
var clone = node.clone(node.name, node.parent, true);
|
|
58
|
+
if (clone) {
|
|
59
|
+
clone.metadata = lodash_es_1.cloneDeep(node.metadata);
|
|
60
|
+
}
|
|
61
|
+
if (deep) {
|
|
62
|
+
var children = node.getChildTransformNodes(true);
|
|
63
|
+
children.forEach(function (child) {
|
|
64
|
+
var clonedChild = cloneTransformNode(child, predicate, deep);
|
|
65
|
+
if (clonedChild) {
|
|
66
|
+
clonedChild.parent = clone;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return clone;
|
|
71
|
+
};
|
|
72
|
+
exports.cloneTransformNode = cloneTransformNode;
|
|
73
|
+
/**
|
|
74
|
+
* @param node
|
|
75
|
+
* @param deep
|
|
76
|
+
* @param prefix
|
|
77
|
+
* @return TransformNode
|
|
78
|
+
*/
|
|
79
|
+
var cloneTransformNodeMaterial = function (node, prefix, deep) {
|
|
80
|
+
if (prefix === void 0) { prefix = ''; }
|
|
81
|
+
if (deep === void 0) { deep = true; }
|
|
82
|
+
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
83
|
+
var _prefix = dottedPath_1.DottedPath.create(prefix).addParts([
|
|
84
|
+
'node',
|
|
85
|
+
node.uniqueId.toString()
|
|
86
|
+
]);
|
|
87
|
+
node.material = node.material.clone(_prefix.path);
|
|
88
|
+
}
|
|
89
|
+
if (deep) {
|
|
90
|
+
var children = node.getChildTransformNodes(true);
|
|
91
|
+
children.forEach(function (child) { return cloneTransformNodeMaterial(child, prefix, deep); });
|
|
92
|
+
}
|
|
93
|
+
return node;
|
|
94
|
+
};
|
|
95
|
+
exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
|
|
96
|
+
/**
|
|
97
|
+
* @param node
|
|
98
|
+
* @param deep
|
|
99
|
+
* @param metadata
|
|
100
|
+
*/
|
|
101
|
+
var injectTransformNodeMetadata = function (node, metadata, deep) {
|
|
102
|
+
if (deep === void 0) { deep = true; }
|
|
103
|
+
node.metadata = lodash_es_1.merge({}, node.metadata, metadata);
|
|
104
|
+
if (deep) {
|
|
105
|
+
var children = node.getChildTransformNodes(true);
|
|
106
|
+
children.forEach(function (child) { return injectTransformNodeMetadata(child, metadata, deep); });
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.injectTransformNodeMetadata = injectTransformNodeMetadata;
|
|
110
|
+
/**
|
|
111
|
+
* @param node
|
|
112
|
+
* @param assertCallable
|
|
113
|
+
* @param callableParameters
|
|
114
|
+
* @param deep
|
|
115
|
+
*/
|
|
116
|
+
var assertTransformNode = function (node, assertCallable, callableParameters, deep) {
|
|
117
|
+
if (callableParameters === void 0) { callableParameters = []; }
|
|
118
|
+
if (deep === void 0) { deep = true; }
|
|
119
|
+
assertCallable.apply(void 0, tslib_1.__spreadArrays([node], callableParameters));
|
|
120
|
+
if (deep) {
|
|
121
|
+
var children = node.getChildTransformNodes(true);
|
|
122
|
+
children.forEach(function (child) { return assertTransformNode(child, assertCallable, callableParameters, deep); });
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
exports.assertTransformNode = assertTransformNode;
|
|
126
|
+
/**
|
|
127
|
+
* @param node
|
|
128
|
+
* @param deep
|
|
129
|
+
*/
|
|
130
|
+
var activateTransformNode = function (node, deep) {
|
|
131
|
+
if (deep === void 0) { deep = true; }
|
|
132
|
+
node.setEnabled(true);
|
|
133
|
+
/*
|
|
134
|
+
if( node instanceof AbstractMesh ) {
|
|
135
|
+
node.visibility = 1;
|
|
136
|
+
node.isPickable = true;
|
|
137
|
+
}
|
|
138
|
+
*/
|
|
139
|
+
if (deep) {
|
|
140
|
+
node.getChildTransformNodes(true).forEach(function (child) { return activateTransformNode(child, deep); });
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
exports.activateTransformNode = activateTransformNode;
|
|
144
|
+
/**
|
|
145
|
+
* @param node
|
|
146
|
+
* @param deep
|
|
147
|
+
*/
|
|
148
|
+
var deactivateTransformNode = function (node, deep) {
|
|
149
|
+
if (deep === void 0) { deep = true; }
|
|
150
|
+
node.setEnabled(false);
|
|
151
|
+
/*
|
|
152
|
+
if( node instanceof AbstractMesh ) {
|
|
153
|
+
node.visibility = 0;
|
|
154
|
+
node.isPickable = false;
|
|
155
|
+
}
|
|
156
|
+
*/
|
|
157
|
+
if (deep) {
|
|
158
|
+
node.getChildTransformNodes(true).forEach(function (child) { return deactivateTransformNode(child, deep); });
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
exports.deactivateTransformNode = deactivateTransformNode;
|
|
162
|
+
/**
|
|
163
|
+
* @param node
|
|
164
|
+
* @param material
|
|
165
|
+
* @param deep
|
|
166
|
+
*/
|
|
167
|
+
var setMaterial = function (node, material, deep) {
|
|
168
|
+
if (deep === void 0) { deep = true; }
|
|
169
|
+
if (node instanceof abstractMesh_1.AbstractMesh) {
|
|
170
|
+
node.material = material;
|
|
171
|
+
}
|
|
172
|
+
if (deep) {
|
|
173
|
+
node.getChildTransformNodes(true).forEach(function (child) { return setMaterial(child, material, deep); });
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
exports.setMaterial = setMaterial;
|
|
177
|
+
/**
|
|
178
|
+
* !!! Warning !!!
|
|
179
|
+
* This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
|
|
180
|
+
* situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
|
|
181
|
+
*
|
|
182
|
+
* See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
|
|
183
|
+
*
|
|
184
|
+
* Set material of an instanced meshes source mesh.
|
|
185
|
+
* Changes the material of all instanced meshes which have the same source mesh.
|
|
186
|
+
*
|
|
187
|
+
* @param node
|
|
188
|
+
* @param material
|
|
189
|
+
* @param deep
|
|
190
|
+
*
|
|
191
|
+
* @ignore
|
|
192
|
+
*/
|
|
193
|
+
var setSourceNodeMaterial = function (node, material, deep) {
|
|
194
|
+
if (deep === void 0) { deep = true; }
|
|
195
|
+
var warn = "\tYou're using \"setSourceNodeMaterial\" which is not public API.\n\tWhilst it can help solving certain problems, it only works reliably in well defined situations and can cause unwanted side effects under some conditions.\n\tUse carefully at your own risk!";
|
|
196
|
+
console.warn("!!! Warning !!!\n" + warn);
|
|
197
|
+
if (node instanceof instancedMesh_1.InstancedMesh) {
|
|
198
|
+
node.sourceMesh.material = material;
|
|
199
|
+
}
|
|
200
|
+
if (deep) {
|
|
201
|
+
node.getChildTransformNodes(true).forEach(function (child) { return setSourceNodeMaterial(child, material, deep); });
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
exports.setSourceNodeMaterial = setSourceNodeMaterial;
|
|
205
|
+
/**
|
|
206
|
+
* @param node
|
|
207
|
+
* @param color
|
|
208
|
+
* @param deep
|
|
209
|
+
*/
|
|
210
|
+
var setMaterialColor = function (node, color, deep) {
|
|
211
|
+
if (deep === void 0) { deep = true; }
|
|
212
|
+
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
213
|
+
var materialCls = node.material.getClassName();
|
|
214
|
+
switch (materialCls) {
|
|
215
|
+
case 'PBRMaterial':
|
|
216
|
+
node.material.albedoColor = color.toLinearSpace();
|
|
217
|
+
break;
|
|
218
|
+
case 'StandardMaterial':
|
|
219
|
+
node.material.diffuseColor = color;
|
|
220
|
+
break;
|
|
221
|
+
default:
|
|
222
|
+
throw new Error("Setting color for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (deep) {
|
|
226
|
+
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialColor(child, color, deep); });
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
exports.setMaterialColor = setMaterialColor;
|
|
230
|
+
/**
|
|
231
|
+
* @param node
|
|
232
|
+
* @param texture
|
|
233
|
+
* @param deep
|
|
234
|
+
*/
|
|
235
|
+
var setMaterialTexture = function (node, texture, deep) {
|
|
236
|
+
if (deep === void 0) { deep = true; }
|
|
237
|
+
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
238
|
+
var materialCls = node.material.getClassName();
|
|
239
|
+
switch (materialCls) {
|
|
240
|
+
case 'PBRMaterial':
|
|
241
|
+
node.material.albedoTexture = texture;
|
|
242
|
+
break;
|
|
243
|
+
case 'StandardMaterial':
|
|
244
|
+
node.material.diffuseTexture = texture;
|
|
245
|
+
break;
|
|
246
|
+
default:
|
|
247
|
+
throw new Error("Setting texture for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (deep) {
|
|
251
|
+
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialTexture(child, texture, deep); });
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
exports.setMaterialTexture = setMaterialTexture;
|
|
255
|
+
/**
|
|
256
|
+
* @param node
|
|
257
|
+
* @param metallness
|
|
258
|
+
* @param deep
|
|
259
|
+
*/
|
|
260
|
+
var setMaterialMetallness = function (node, metallness, deep) {
|
|
261
|
+
if (deep === void 0) { deep = true; }
|
|
262
|
+
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
263
|
+
var materialCls = node.material.getClassName();
|
|
264
|
+
switch (materialCls) {
|
|
265
|
+
case 'PBRMaterial':
|
|
266
|
+
node.material.metallic = metallness;
|
|
267
|
+
break;
|
|
268
|
+
default:
|
|
269
|
+
throw new Error("Setting metallness for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (deep) {
|
|
273
|
+
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialMetallness(child, metallness, deep); });
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
exports.setMaterialMetallness = setMaterialMetallness;
|
|
277
|
+
/**
|
|
278
|
+
* @param node
|
|
279
|
+
* @param roughness
|
|
280
|
+
* @param deep
|
|
281
|
+
*/
|
|
282
|
+
var setMaterialRoughness = function (node, roughness, deep) {
|
|
283
|
+
if (deep === void 0) { deep = true; }
|
|
284
|
+
if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
|
|
285
|
+
var materialCls = node.material.getClassName();
|
|
286
|
+
switch (materialCls) {
|
|
287
|
+
case 'PBRMaterial':
|
|
288
|
+
node.material.roughness = roughness;
|
|
289
|
+
break;
|
|
290
|
+
case 'StandardMaterial':
|
|
291
|
+
node.material.roughness = roughness;
|
|
292
|
+
break;
|
|
293
|
+
default:
|
|
294
|
+
throw new Error("Setting roughness for material of instance \"" + materialCls + "\" not implemented (yet).");
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (deep) {
|
|
298
|
+
node.getChildTransformNodes(true).forEach(function (child) { return setMaterialRoughness(child, roughness, deep); });
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
exports.setMaterialRoughness = setMaterialRoughness;
|
|
302
|
+
/**
|
|
303
|
+
* @param node
|
|
304
|
+
* @param layer
|
|
305
|
+
* @param color
|
|
306
|
+
* @param deep
|
|
307
|
+
*/
|
|
308
|
+
var addToHighlightLayer = function (layer, color, node, deep) {
|
|
309
|
+
if (deep === void 0) { deep = true; }
|
|
310
|
+
if (node instanceof abstractMesh_1.AbstractMesh) {
|
|
311
|
+
layer.addMesh(node, color);
|
|
312
|
+
}
|
|
313
|
+
if (deep) {
|
|
314
|
+
node.getChildTransformNodes(true).forEach(function (child) { return addToHighlightLayer(layer, color, child, deep); });
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
exports.addToHighlightLayer = addToHighlightLayer;
|
|
318
|
+
/**
|
|
319
|
+
* @param node
|
|
320
|
+
* @param layer
|
|
321
|
+
* @param deep
|
|
322
|
+
*/
|
|
323
|
+
var removeFromHighlightLayer = function (layer, node, deep) {
|
|
324
|
+
if (deep === void 0) { deep = true; }
|
|
325
|
+
if (node instanceof abstractMesh_1.AbstractMesh) {
|
|
326
|
+
layer.removeMesh(node);
|
|
327
|
+
}
|
|
328
|
+
if (deep) {
|
|
329
|
+
node.getChildTransformNodes(true).forEach(function (child) { return removeFromHighlightLayer(layer, child, deep); });
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
exports.removeFromHighlightLayer = removeFromHighlightLayer;
|
|
333
|
+
/**
|
|
334
|
+
* https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
|
|
335
|
+
* @param mesh
|
|
336
|
+
* @param scene
|
|
337
|
+
* @param canvas
|
|
338
|
+
*/
|
|
339
|
+
var getClientRectFromMesh = function (mesh, scene, canvas) {
|
|
340
|
+
// get bounding box of the mesh
|
|
341
|
+
var meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
|
|
342
|
+
// get the matrix and viewport needed to project the vectors onto the screen
|
|
343
|
+
var worldMatrix = mesh.getWorldMatrix();
|
|
344
|
+
var transformMatrix = scene.getTransformMatrix();
|
|
345
|
+
var viewport = scene.activeCamera.viewport;
|
|
346
|
+
// loop though all the vectors and project them against the current camera viewport to get a set of coordinates
|
|
347
|
+
var coordinates = meshVectors.map(function (vector) {
|
|
348
|
+
var projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
|
|
349
|
+
projection.x = projection.x * canvas.clientWidth;
|
|
350
|
+
projection.y = projection.y * canvas.clientHeight;
|
|
351
|
+
return projection;
|
|
352
|
+
});
|
|
353
|
+
// get the min and max for all the coordinates so we can calculate the largest possible screen size
|
|
354
|
+
var maxX = Math.max.apply(Math, coordinates.map(function (o) { return o.x; }));
|
|
355
|
+
var minX = Math.min.apply(Math, coordinates.map(function (o) { return o.x; }));
|
|
356
|
+
var maxY = Math.max.apply(Math, coordinates.map(function (o) { return o.y; }));
|
|
357
|
+
var minY = Math.min.apply(Math, coordinates.map(function (o) { return o.y; }));
|
|
358
|
+
// return a ClientRect from this
|
|
359
|
+
return {
|
|
360
|
+
width: maxX - minX,
|
|
361
|
+
height: maxY - minY,
|
|
362
|
+
left: minX,
|
|
363
|
+
top: minY,
|
|
364
|
+
right: maxX,
|
|
365
|
+
bottom: maxY,
|
|
366
|
+
};
|
|
367
|
+
};
|
|
368
|
+
exports.getClientRectFromMesh = getClientRectFromMesh;
|
|
369
369
|
//# sourceMappingURL=babylonHelper.js.map
|