@combeenation/3d-viewer 11.0.0 → 12.0.0-alpha2
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/lib-cjs/api/manager/gltfExportManager.d.ts +17 -93
- package/dist/lib-cjs/api/manager/gltfExportManager.js +114 -249
- package/dist/lib-cjs/api/manager/gltfExportManager.js.map +1 -1
- package/dist/lib-cjs/api/util/geometryHelper.d.ts +7 -7
- package/dist/lib-cjs/api/util/geometryHelper.js +23 -49
- package/dist/lib-cjs/api/util/geometryHelper.js.map +1 -1
- package/dist/lib-cjs/api/util/structureHelper.js +2 -9
- package/dist/lib-cjs/api/util/structureHelper.js.map +1 -1
- package/dist/lib-cjs/buildinfo.json +1 -1
- package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/api/manager/gltfExportManager.ts +129 -245
- package/src/api/util/geometryHelper.ts +28 -50
- package/src/api/util/structureHelper.ts +2 -7
|
@@ -1,53 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.resetTransformation = exports.bakeGeometryOfMesh = exports.createMeshFromInstancedMesh = void 0;
|
|
4
4
|
const buffer_1 = require("@babylonjs/core/Buffers/buffer");
|
|
5
5
|
const math_vector_1 = require("@babylonjs/core/Maths/math.vector");
|
|
6
|
-
const
|
|
7
|
-
const mesh_1 = require("@babylonjs/core/Meshes/mesh");
|
|
8
|
-
const transformNode_1 = require("@babylonjs/core/Meshes/transformNode");
|
|
9
|
-
/**
|
|
10
|
-
* Removes morph targets and sets transformation values back to their default values.
|
|
11
|
-
* The effects from morph targets and tranformation values will be "baked" in the geometry, so that the final appearance
|
|
12
|
-
* of the meshes stay the same.
|
|
13
|
-
*/
|
|
14
|
-
const bakeGeometryOfAllMeshes = function (scene) {
|
|
15
|
-
// instanced meshes have to be converted, since they share the geometry of the source mesh, which would lead to issues
|
|
16
|
-
// when baking the transformation values
|
|
17
|
-
scene.meshes.forEach(mesh => {
|
|
18
|
-
if (mesh instanceof instancedMesh_1.InstancedMesh) {
|
|
19
|
-
convertInstancedMeshToMesh(mesh);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
// do the geometry baking for all meshes in the scene
|
|
23
|
-
scene.meshes.forEach(mesh => {
|
|
24
|
-
if (mesh instanceof mesh_1.Mesh) {
|
|
25
|
-
bakeGeometryOfMesh(mesh);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
// some nodes (mostly transform nodes), are not affected by the baking algorithm since they have no geometry
|
|
29
|
-
// => reset their transformation manually
|
|
30
|
-
const allNodes = scene.getNodes().filter(node => node instanceof transformNode_1.TransformNode);
|
|
31
|
-
allNodes.forEach(node => {
|
|
32
|
-
resetTransformation(node);
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
exports.bakeGeometryOfAllMeshes = bakeGeometryOfAllMeshes;
|
|
36
|
-
const convertInstancedMeshToMesh = function (instancedMesh) {
|
|
6
|
+
const createMeshFromInstancedMesh = function (instancedMesh, newName, clonedParent) {
|
|
37
7
|
// first create a clone of the source mesh
|
|
38
|
-
const newMesh = instancedMesh.sourceMesh.clone(
|
|
39
|
-
// apply the transformation data
|
|
40
|
-
|
|
41
|
-
newMesh.
|
|
42
|
-
newMesh.
|
|
43
|
-
newMesh.scaling = instancedMesh.scaling;
|
|
8
|
+
const newMesh = instancedMesh.sourceMesh.clone(newName, clonedParent, true);
|
|
9
|
+
// apply the transformation data, it's important to create clones of the transformations to not touch the original
|
|
10
|
+
// transformation when applying changes (eg: geometry baking)
|
|
11
|
+
newMesh.position = instancedMesh.position.clone();
|
|
12
|
+
newMesh.rotation = instancedMesh.rotation.clone();
|
|
13
|
+
newMesh.scaling = instancedMesh.scaling.clone();
|
|
14
|
+
// rotation quaternion is optional
|
|
15
|
+
if (instancedMesh.rotationQuaternion) {
|
|
16
|
+
newMesh.rotationQuaternion = instancedMesh.rotationQuaternion.clone();
|
|
17
|
+
}
|
|
44
18
|
// also sync the enabled state from the original instanced mesh
|
|
45
19
|
newMesh.setEnabled(instancedMesh.isEnabled(false));
|
|
46
|
-
|
|
47
|
-
instancedMesh.getChildren(undefined).forEach(childNode => (childNode.parent = newMesh));
|
|
48
|
-
// finally delete the original instanced mesh
|
|
49
|
-
instancedMesh.dispose();
|
|
20
|
+
return newMesh;
|
|
50
21
|
};
|
|
22
|
+
exports.createMeshFromInstancedMesh = createMeshFromInstancedMesh;
|
|
51
23
|
const bakeGeometryOfMesh = function (mesh) {
|
|
52
24
|
if (!mesh.geometry) {
|
|
53
25
|
// no geometry available, nothing to do
|
|
@@ -60,21 +32,22 @@ const bakeGeometryOfMesh = function (mesh) {
|
|
|
60
32
|
if (morphTargetManager === null || morphTargetManager === void 0 ? void 0 : morphTargetManager.numTargets) {
|
|
61
33
|
// apply morph target vertices data to mesh geometry
|
|
62
34
|
// mostly only the "PositionKind" is implemented
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
35
|
+
_bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.PositionKind, morphTargetManager, geometry);
|
|
36
|
+
_bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.NormalKind, morphTargetManager, geometry);
|
|
37
|
+
_bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.TangentKind, morphTargetManager, geometry);
|
|
38
|
+
_bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.UVKind, morphTargetManager, geometry);
|
|
67
39
|
// remove morph target manager with all it's morph targets
|
|
68
40
|
mesh.morphTargetManager = null;
|
|
69
41
|
}
|
|
70
42
|
// bake the transformation data in the mesh geometry, fortunately there is already a help function from Babylon.js
|
|
71
43
|
mesh.bakeCurrentTransformIntoVertices();
|
|
72
44
|
};
|
|
45
|
+
exports.bakeGeometryOfMesh = bakeGeometryOfMesh;
|
|
73
46
|
/**
|
|
74
47
|
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
75
48
|
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
76
49
|
*/
|
|
77
|
-
const
|
|
50
|
+
const _bakeMorphTargetManagerIntoVertices = function (kind, morphTargetManager, geometry) {
|
|
78
51
|
const origVerticesData = geometry.getVerticesData(kind);
|
|
79
52
|
if (!origVerticesData) {
|
|
80
53
|
// no vertices data for this kind availabe on the mesh geometry
|
|
@@ -83,7 +56,7 @@ const bakeMorphTargetManagerIntoVertices = function (kind, morphTargetManager, g
|
|
|
83
56
|
let verticesData = [...origVerticesData];
|
|
84
57
|
for (let i = 0; i < morphTargetManager.numTargets; i++) {
|
|
85
58
|
const target = morphTargetManager.getTarget(i);
|
|
86
|
-
const targetVerticesData =
|
|
59
|
+
const targetVerticesData = _getVerticesDataFromMorphTarget(kind, target);
|
|
87
60
|
if (targetVerticesData) {
|
|
88
61
|
// vertices data of this kind are implemented on the morph target
|
|
89
62
|
// add the influence of this morph target to the vertices data
|
|
@@ -94,7 +67,7 @@ const bakeMorphTargetManagerIntoVertices = function (kind, morphTargetManager, g
|
|
|
94
67
|
// apply the updated vertices data
|
|
95
68
|
geometry.setVerticesData(kind, verticesData);
|
|
96
69
|
};
|
|
97
|
-
const
|
|
70
|
+
const _getVerticesDataFromMorphTarget = function (kind, morphTarget) {
|
|
98
71
|
switch (kind) {
|
|
99
72
|
case buffer_1.VertexBuffer.PositionKind:
|
|
100
73
|
return morphTarget.getPositions();
|
|
@@ -113,4 +86,5 @@ const resetTransformation = function (node) {
|
|
|
113
86
|
node.rotationQuaternion = null;
|
|
114
87
|
node.scaling = new math_vector_1.Vector3(1, 1, 1);
|
|
115
88
|
};
|
|
89
|
+
exports.resetTransformation = resetTransformation;
|
|
116
90
|
//# sourceMappingURL=geometryHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryHelper.js","sourceRoot":"","sources":["../../../../src/api/util/geometryHelper.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"geometryHelper.js","sourceRoot":"","sources":["../../../../src/api/util/geometryHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ exports.isNodeIncludedInExclusionList = void 0;
|
|
|
4
4
|
const element_1 = require("../classes/element");
|
|
5
5
|
const variant_1 = require("../classes/variant");
|
|
6
6
|
const variantInstance_1 = require("../classes/variantInstance");
|
|
7
|
-
const gltfExportManager_1 = require("../manager/gltfExportManager");
|
|
8
7
|
const transformNode_1 = require("@babylonjs/core/Meshes/transformNode");
|
|
9
8
|
const tags_1 = require("@babylonjs/core/Misc/tags");
|
|
10
9
|
/**
|
|
@@ -15,11 +14,7 @@ const tags_1 = require("@babylonjs/core/Misc/tags");
|
|
|
15
14
|
*/
|
|
16
15
|
const isNodeIncludedInExclusionList = function (node, list) {
|
|
17
16
|
const checkNode = (inputNode, nodeToCheck) => {
|
|
18
|
-
|
|
19
|
-
// check name instead of unique id, since the unique id changes when copying the scene, which is the case in the
|
|
20
|
-
// GLB export
|
|
21
|
-
const nodeName = (_b = (_a = nodeToCheck.metadata) === null || _a === void 0 ? void 0 : _a[gltfExportManager_1.GltfExportManager.NAME_BEFORE_EXPORT_METADATA_PROPERTY]) !== null && _b !== void 0 ? _b : nodeToCheck.name;
|
|
22
|
-
return inputNode.name === nodeName;
|
|
17
|
+
return inputNode.name === nodeToCheck.name;
|
|
23
18
|
};
|
|
24
19
|
const checkElement = (inputEl, nodeToCheck) => {
|
|
25
20
|
return inputEl.nodesFlat.some(m => checkNode(m, nodeToCheck));
|
|
@@ -31,9 +26,7 @@ const isNodeIncludedInExclusionList = function (node, list) {
|
|
|
31
26
|
return inputVarInst.variant.elements.some(el => checkElement(el, nodeToCheck));
|
|
32
27
|
};
|
|
33
28
|
const checkTagManagerSubject = (inputSubject, nodeToCheck) => {
|
|
34
|
-
|
|
35
|
-
const nodeName = (_b = (_a = nodeToCheck.metadata) === null || _a === void 0 ? void 0 : _a[gltfExportManager_1.GltfExportManager.NAME_BEFORE_EXPORT_METADATA_PROPERTY]) !== null && _b !== void 0 ? _b : nodeToCheck.name;
|
|
36
|
-
const nameMatches = inputSubject.nodeName && inputSubject.nodeName === nodeName;
|
|
29
|
+
const nameMatches = inputSubject.nodeName && inputSubject.nodeName === nodeToCheck.name;
|
|
37
30
|
const tagMatches = inputSubject.tagName && tags_1.Tags.MatchesQuery(nodeToCheck, inputSubject.tagName);
|
|
38
31
|
return nameMatches || tagMatches;
|
|
39
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structureHelper.js","sourceRoot":"","sources":["../../../../src/api/util/structureHelper.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAC7C,gDAA6C;AAC7C,gEAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"structureHelper.js","sourceRoot":"","sources":["../../../../src/api/util/structureHelper.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAC7C,gDAA6C;AAC7C,gEAA6D;AAC7D,wEAAqE;AACrE,oDAAiD;AAEjD;;;;;GAKG;AACH,MAAM,6BAA6B,GAAG,UAAU,IAAmB,EAAE,IAA0B;IAC7F,MAAM,SAAS,GAAG,CAAC,SAAwB,EAAE,WAA0B,EAAE,EAAE;QACzE,OAAO,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,WAA0B,EAAE,EAAE;QACpE,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,YAAqB,EAAE,WAA0B,EAAE,EAAE;QACzE,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,CAAC,YAA6B,EAAE,WAA0B,EAAE,EAAE;QACzF,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IACF,MAAM,sBAAsB,GAAG,CAAC,YAA+B,EAAE,WAA0B,EAAE,EAAE;QAC7F,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,KAAK,WAAW,CAAC,IAAI,CAAC;QACxF,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,IAAI,WAAI,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAChG,OAAO,WAAW,IAAI,UAAU,CAAC;IACnC,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,iBAAmC,EAAE,IAAmB,EAAE,EAAE;QACzE,IAAI,iBAAiB,YAAY,iCAAe,EAAE;YAChD,OAAO,oBAAoB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SACtD;QACD,IAAI,iBAAiB,YAAY,iBAAO,EAAE;YACxC,OAAO,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC9C;QACD,IAAI,iBAAiB,YAAY,iBAAO,EAAE;YACxC,OAAO,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC9C;QACD,IAAI,iBAAiB,YAAY,6BAAa,EAAE;YAC9C,OAAO,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC3C;QACD,IAAK,iBAAuC,CAAC,OAAO,IAAK,iBAAuC,CAAC,QAAQ,EAAE;YACzG,OAAO,sBAAsB,CAAC,iBAAsC,EAAE,IAAI,CAAC,CAAC;SAC7E;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,YAAY,6BAAa,EAAE;QACvD,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC/D;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEO,sEAA6B"}
|