@holoscript/engine 6.0.3 → 6.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoMesher-CK47F6AV.js +17 -0
- package/dist/GPUBuffers-2LHBCD7X.js +9 -0
- package/dist/WebGPUContext-TNEUYU2Y.js +11 -0
- package/dist/animation/index.cjs +38 -38
- package/dist/animation/index.d.cts +1 -1
- package/dist/animation/index.d.ts +1 -1
- package/dist/animation/index.js +1 -1
- package/dist/audio/index.cjs +16 -6
- package/dist/audio/index.d.cts +1 -1
- package/dist/audio/index.d.ts +1 -1
- package/dist/audio/index.js +1 -1
- package/dist/camera/index.cjs +23 -23
- package/dist/camera/index.d.cts +1 -1
- package/dist/camera/index.d.ts +1 -1
- package/dist/camera/index.js +1 -1
- package/dist/character/index.cjs +6 -4
- package/dist/character/index.js +1 -1
- package/dist/choreography/index.cjs +1194 -0
- package/dist/choreography/index.d.cts +687 -0
- package/dist/choreography/index.d.ts +687 -0
- package/dist/choreography/index.js +1156 -0
- package/dist/chunk-2CSNRI2N.js +217 -0
- package/dist/chunk-33T2WINR.js +266 -0
- package/dist/chunk-35R73OFM.js +1257 -0
- package/dist/chunk-4MMDSUNP.js +1256 -0
- package/dist/chunk-5V6HOU72.js +319 -0
- package/dist/chunk-6QOP6PYF.js +1038 -0
- package/dist/chunk-7KMJVHIL.js +8944 -0
- package/dist/chunk-7VPUC62U.js +1106 -0
- package/dist/chunk-A2Y6RCAT.js +1878 -0
- package/dist/chunk-AHM42MK6.js +8944 -0
- package/dist/chunk-BL7IDTHE.js +218 -0
- package/dist/chunk-CITOMSWL.js +10462 -0
- package/dist/chunk-CXDPKW2K.js +8944 -0
- package/dist/chunk-CXZPLD4S.js +223 -0
- package/dist/chunk-CZYJE7IH.js +5169 -0
- package/dist/chunk-D2OP7YC7.js +6325 -0
- package/dist/chunk-EDRVQHUU.js +1544 -0
- package/dist/chunk-EJSLOOW2.js +3589 -0
- package/dist/chunk-F53SFGW5.js +1878 -0
- package/dist/chunk-HCFPELPY.js +919 -0
- package/dist/chunk-HNEE36PY.js +93 -0
- package/dist/chunk-HYXNV36F.js +1256 -0
- package/dist/chunk-IB7KHVFY.js +821 -0
- package/dist/chunk-IBBO7YYG.js +690 -0
- package/dist/chunk-ILIBGINU.js +5470 -0
- package/dist/chunk-IS4MHLKN.js +5479 -0
- package/dist/chunk-JT2PFKWD.js +5479 -0
- package/dist/chunk-K4CUB4NY.js +1038 -0
- package/dist/chunk-KATDQXRJ.js +10462 -0
- package/dist/chunk-KBQE6ZFJ.js +8944 -0
- package/dist/chunk-KBVD5K7E.js +560 -0
- package/dist/chunk-KCDPVQRY.js +4088 -0
- package/dist/chunk-KN4QJPKN.js +8944 -0
- package/dist/chunk-KWJ3ROSI.js +8944 -0
- package/dist/chunk-L45VF6DD.js +919 -0
- package/dist/chunk-LY4T37YK.js +307 -0
- package/dist/chunk-MDN5WZXA.js +1544 -0
- package/dist/chunk-MGCDP6VU.js +928 -0
- package/dist/chunk-NCX7X6G2.js +8681 -0
- package/dist/chunk-OF54BPVD.js +913 -0
- package/dist/chunk-OWSN2Q3Q.js +690 -0
- package/dist/chunk-PRRB5TTA.js +406 -0
- package/dist/chunk-PXWVQF76.js +4086 -0
- package/dist/chunk-PYCOIDT2.js +812 -0
- package/dist/chunk-PZCSADOV.js +928 -0
- package/dist/chunk-Q2XBVS2K.js +1038 -0
- package/dist/chunk-QDZRXWN5.js +1776 -0
- package/dist/chunk-RNWOZ6WQ.js +913 -0
- package/dist/chunk-ROLFT4CJ.js +1693 -0
- package/dist/chunk-SLTJRZ2N.js +266 -0
- package/dist/chunk-SRUS5XSU.js +4088 -0
- package/dist/chunk-TKCA3WZ5.js +5409 -0
- package/dist/chunk-TNRMXYI2.js +1650 -0
- package/dist/chunk-TQB3GJGM.js +9763 -0
- package/dist/chunk-TUFGXG6K.js +510 -0
- package/dist/chunk-U6KMTGQJ.js +632 -0
- package/dist/chunk-VMGJQST6.js +8681 -0
- package/dist/chunk-X4F4TCG4.js +5470 -0
- package/dist/chunk-ZIFROE75.js +1544 -0
- package/dist/chunk-ZIJQYHSQ.js +1204 -0
- package/dist/combat/index.cjs +4 -4
- package/dist/combat/index.d.cts +1 -1
- package/dist/combat/index.d.ts +1 -1
- package/dist/combat/index.js +1 -1
- package/dist/ecs/index.cjs +1 -1
- package/dist/ecs/index.js +1 -1
- package/dist/environment/index.cjs +14 -14
- package/dist/environment/index.d.cts +1 -1
- package/dist/environment/index.d.ts +1 -1
- package/dist/environment/index.js +1 -1
- package/dist/gpu/index.cjs +4810 -0
- package/dist/gpu/index.js +3714 -0
- package/dist/hologram/index.cjs +27 -1
- package/dist/hologram/index.js +1 -1
- package/dist/index-B2PIsAmR.d.cts +2180 -0
- package/dist/index-B2PIsAmR.d.ts +2180 -0
- package/dist/index-BHySEPX7.d.cts +2921 -0
- package/dist/index-BJV21zuy.d.cts +341 -0
- package/dist/index-BJV21zuy.d.ts +341 -0
- package/dist/index-BQutTphC.d.cts +790 -0
- package/dist/index-ByIq2XrS.d.cts +3910 -0
- package/dist/index-BysHjDSO.d.cts +224 -0
- package/dist/index-BysHjDSO.d.ts +224 -0
- package/dist/index-CKwAJGck.d.ts +455 -0
- package/dist/index-CUl3QstQ.d.cts +3006 -0
- package/dist/index-CUl3QstQ.d.ts +3006 -0
- package/dist/index-CmYtNiI-.d.cts +953 -0
- package/dist/index-CmYtNiI-.d.ts +953 -0
- package/dist/index-CnRzWxi_.d.cts +522 -0
- package/dist/index-CnRzWxi_.d.ts +522 -0
- package/dist/index-CwRWbSC7.d.ts +2921 -0
- package/dist/index-CxKIBstO.d.ts +790 -0
- package/dist/index-DJ6-R8vh.d.cts +455 -0
- package/dist/index-DQKisbcI.d.cts +4968 -0
- package/dist/index-DQKisbcI.d.ts +4968 -0
- package/dist/index-DRT2zJez.d.ts +3910 -0
- package/dist/index-DfNLiAka.d.cts +192 -0
- package/dist/index-DfNLiAka.d.ts +192 -0
- package/dist/index-nMvkoRm8.d.cts +405 -0
- package/dist/index-nMvkoRm8.d.ts +405 -0
- package/dist/index-s9yOFU37.d.cts +604 -0
- package/dist/index-s9yOFU37.d.ts +604 -0
- package/dist/index.cjs +22966 -6960
- package/dist/index.d.cts +864 -20
- package/dist/index.d.ts +864 -20
- package/dist/index.js +3062 -48
- package/dist/input/index.cjs +1 -1
- package/dist/input/index.js +1 -1
- package/dist/orbital/index.cjs +3 -3
- package/dist/orbital/index.d.cts +1 -1
- package/dist/orbital/index.d.ts +1 -1
- package/dist/orbital/index.js +1 -1
- package/dist/particles/index.cjs +16 -16
- package/dist/particles/index.d.cts +1 -1
- package/dist/particles/index.d.ts +1 -1
- package/dist/particles/index.js +1 -1
- package/dist/physics/index.cjs +2377 -21
- package/dist/physics/index.d.cts +1 -1
- package/dist/physics/index.d.ts +1 -1
- package/dist/physics/index.js +35 -1
- package/dist/postfx/index.cjs +3491 -0
- package/dist/postfx/index.js +93 -0
- package/dist/procedural/index.cjs +1 -1
- package/dist/procedural/index.js +1 -1
- package/dist/puppeteer-5VF6KDVO.js +52197 -0
- package/dist/puppeteer-IZVZ3SG4.js +52197 -0
- package/dist/rendering/index.cjs +33 -32
- package/dist/rendering/index.d.cts +1 -1
- package/dist/rendering/index.d.ts +1 -1
- package/dist/rendering/index.js +8 -6
- package/dist/runtime/index.cjs +23 -13
- package/dist/runtime/index.d.cts +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +8 -6
- package/dist/runtime/protocols/index.cjs +349 -0
- package/dist/runtime/protocols/index.js +15 -0
- package/dist/scene/index.cjs +8 -8
- package/dist/scene/index.d.cts +1 -1
- package/dist/scene/index.d.ts +1 -1
- package/dist/scene/index.js +1 -1
- package/dist/shader/index.cjs +3087 -0
- package/dist/shader/index.js +3044 -0
- package/dist/simulation/index.cjs +10680 -0
- package/dist/simulation/index.d.cts +3 -0
- package/dist/simulation/index.d.ts +3 -0
- package/dist/simulation/index.js +307 -0
- package/dist/spatial/index.cjs +2443 -0
- package/dist/spatial/index.d.cts +1545 -0
- package/dist/spatial/index.d.ts +1545 -0
- package/dist/spatial/index.js +2400 -0
- package/dist/terrain/index.cjs +1 -1
- package/dist/terrain/index.d.cts +1 -1
- package/dist/terrain/index.d.ts +1 -1
- package/dist/terrain/index.js +1 -1
- package/dist/transformers.node-4NKAPD5U.js +45620 -0
- package/dist/vm/index.cjs +7 -8
- package/dist/vm/index.d.cts +1 -1
- package/dist/vm/index.d.ts +1 -1
- package/dist/vm/index.js +1 -1
- package/dist/vm-bridge/index.cjs +2 -2
- package/dist/vm-bridge/index.d.cts +2 -2
- package/dist/vm-bridge/index.d.ts +2 -2
- package/dist/vm-bridge/index.js +1 -1
- package/dist/vr/index.cjs +6 -6
- package/dist/vr/index.js +1 -1
- package/dist/world/index.cjs +3 -3
- package/dist/world/index.d.cts +1 -1
- package/dist/world/index.d.ts +1 -1
- package/dist/world/index.js +1 -1
- package/package.json +53 -21
- package/LICENSE +0 -21
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// src/simulation/AutoMesher.ts
|
|
2
|
+
function meshBox(options) {
|
|
3
|
+
const origin = options.origin ?? [0, 0, 0];
|
|
4
|
+
const [lx, ly, lz] = options.size;
|
|
5
|
+
const [nx, ny, nz] = options.divisions ?? [4, 4, 4];
|
|
6
|
+
if (nx < 1 || ny < 1 || nz < 1) {
|
|
7
|
+
throw new Error(`Divisions must be >= 1, got [${nx}, ${ny}, ${nz}]`);
|
|
8
|
+
}
|
|
9
|
+
if (lx <= 0 || ly <= 0 || lz <= 0) {
|
|
10
|
+
throw new Error(`Size must be positive, got [${lx}, ${ly}, ${lz}]`);
|
|
11
|
+
}
|
|
12
|
+
const nodeCount = (nx + 1) * (ny + 1) * (nz + 1);
|
|
13
|
+
const vertices = new Float64Array(nodeCount * 3);
|
|
14
|
+
let idx = 0;
|
|
15
|
+
for (let k = 0; k <= nz; k++) {
|
|
16
|
+
for (let j = 0; j <= ny; j++) {
|
|
17
|
+
for (let i = 0; i <= nx; i++) {
|
|
18
|
+
vertices[idx++] = origin[0] + i * lx / nx;
|
|
19
|
+
vertices[idx++] = origin[1] + j * ly / ny;
|
|
20
|
+
vertices[idx++] = origin[2] + k * lz / nz;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function nodeIndex(i, j, k) {
|
|
25
|
+
return k * (nx + 1) * (ny + 1) + j * (nx + 1) + i;
|
|
26
|
+
}
|
|
27
|
+
const elementCount = nx * ny * nz * 5;
|
|
28
|
+
const tetrahedra = new Uint32Array(elementCount * 4);
|
|
29
|
+
let tetIdx = 0;
|
|
30
|
+
for (let k = 0; k < nz; k++) {
|
|
31
|
+
for (let j = 0; j < ny; j++) {
|
|
32
|
+
for (let i = 0; i < nx; i++) {
|
|
33
|
+
const v0 = nodeIndex(i, j, k);
|
|
34
|
+
const v1 = nodeIndex(i + 1, j, k);
|
|
35
|
+
const v2 = nodeIndex(i + 1, j + 1, k);
|
|
36
|
+
const v3 = nodeIndex(i, j + 1, k);
|
|
37
|
+
const v4 = nodeIndex(i, j, k + 1);
|
|
38
|
+
const v5 = nodeIndex(i + 1, j, k + 1);
|
|
39
|
+
const v6 = nodeIndex(i + 1, j + 1, k + 1);
|
|
40
|
+
const v7 = nodeIndex(i, j + 1, k + 1);
|
|
41
|
+
if ((i + j + k) % 2 === 0) {
|
|
42
|
+
tetrahedra[tetIdx++] = v0;
|
|
43
|
+
tetrahedra[tetIdx++] = v1;
|
|
44
|
+
tetrahedra[tetIdx++] = v3;
|
|
45
|
+
tetrahedra[tetIdx++] = v4;
|
|
46
|
+
tetrahedra[tetIdx++] = v1;
|
|
47
|
+
tetrahedra[tetIdx++] = v2;
|
|
48
|
+
tetrahedra[tetIdx++] = v3;
|
|
49
|
+
tetrahedra[tetIdx++] = v6;
|
|
50
|
+
tetrahedra[tetIdx++] = v4;
|
|
51
|
+
tetrahedra[tetIdx++] = v5;
|
|
52
|
+
tetrahedra[tetIdx++] = v1;
|
|
53
|
+
tetrahedra[tetIdx++] = v6;
|
|
54
|
+
tetrahedra[tetIdx++] = v4;
|
|
55
|
+
tetrahedra[tetIdx++] = v7;
|
|
56
|
+
tetrahedra[tetIdx++] = v6;
|
|
57
|
+
tetrahedra[tetIdx++] = v3;
|
|
58
|
+
tetrahedra[tetIdx++] = v1;
|
|
59
|
+
tetrahedra[tetIdx++] = v4;
|
|
60
|
+
tetrahedra[tetIdx++] = v6;
|
|
61
|
+
tetrahedra[tetIdx++] = v3;
|
|
62
|
+
} else {
|
|
63
|
+
tetrahedra[tetIdx++] = v1;
|
|
64
|
+
tetrahedra[tetIdx++] = v0;
|
|
65
|
+
tetrahedra[tetIdx++] = v5;
|
|
66
|
+
tetrahedra[tetIdx++] = v2;
|
|
67
|
+
tetrahedra[tetIdx++] = v3;
|
|
68
|
+
tetrahedra[tetIdx++] = v0;
|
|
69
|
+
tetrahedra[tetIdx++] = v2;
|
|
70
|
+
tetrahedra[tetIdx++] = v7;
|
|
71
|
+
tetrahedra[tetIdx++] = v4;
|
|
72
|
+
tetrahedra[tetIdx++] = v5;
|
|
73
|
+
tetrahedra[tetIdx++] = v0;
|
|
74
|
+
tetrahedra[tetIdx++] = v7;
|
|
75
|
+
tetrahedra[tetIdx++] = v6;
|
|
76
|
+
tetrahedra[tetIdx++] = v5;
|
|
77
|
+
tetrahedra[tetIdx++] = v7;
|
|
78
|
+
tetrahedra[tetIdx++] = v2;
|
|
79
|
+
tetrahedra[tetIdx++] = v0;
|
|
80
|
+
tetrahedra[tetIdx++] = v5;
|
|
81
|
+
tetrahedra[tetIdx++] = v2;
|
|
82
|
+
tetrahedra[tetIdx++] = v7;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { vertices, tetrahedra, nodeCount, elementCount };
|
|
88
|
+
}
|
|
89
|
+
function findNodesOnFace(mesh, face, tolerance = 1e-10) {
|
|
90
|
+
const verts = mesh.vertices;
|
|
91
|
+
const nodeCount = mesh.nodeCount;
|
|
92
|
+
let minX = Infinity, maxX = -Infinity;
|
|
93
|
+
let minY = Infinity, maxY = -Infinity;
|
|
94
|
+
let minZ = Infinity, maxZ = -Infinity;
|
|
95
|
+
for (let i = 0; i < nodeCount; i++) {
|
|
96
|
+
const x = verts[i * 3], y = verts[i * 3 + 1], z = verts[i * 3 + 2];
|
|
97
|
+
if (x < minX) minX = x;
|
|
98
|
+
if (x > maxX) maxX = x;
|
|
99
|
+
if (y < minY) minY = y;
|
|
100
|
+
if (y > maxY) maxY = y;
|
|
101
|
+
if (z < minZ) minZ = z;
|
|
102
|
+
if (z > maxZ) maxZ = z;
|
|
103
|
+
}
|
|
104
|
+
const targets = {
|
|
105
|
+
"x-": { axis: 0, value: minX },
|
|
106
|
+
"x+": { axis: 0, value: maxX },
|
|
107
|
+
"y-": { axis: 1, value: minY },
|
|
108
|
+
"y+": { axis: 1, value: maxY },
|
|
109
|
+
"z-": { axis: 2, value: minZ },
|
|
110
|
+
"z+": { axis: 2, value: maxZ }
|
|
111
|
+
};
|
|
112
|
+
const { axis, value } = targets[face];
|
|
113
|
+
const nodes = [];
|
|
114
|
+
for (let i = 0; i < nodeCount; i++) {
|
|
115
|
+
if (Math.abs(verts[i * 3 + axis] - value) < tolerance) {
|
|
116
|
+
nodes.push(i);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return nodes;
|
|
120
|
+
}
|
|
121
|
+
function findNodesInSphere(mesh, center, radius) {
|
|
122
|
+
const verts = mesh.vertices;
|
|
123
|
+
const r2 = radius * radius;
|
|
124
|
+
const nodes = [];
|
|
125
|
+
for (let i = 0; i < mesh.nodeCount; i++) {
|
|
126
|
+
const dx = verts[i * 3] - center[0];
|
|
127
|
+
const dy = verts[i * 3 + 1] - center[1];
|
|
128
|
+
const dz = verts[i * 3 + 2] - center[2];
|
|
129
|
+
if (dx * dx + dy * dy + dz * dz <= r2) {
|
|
130
|
+
nodes.push(i);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return nodes;
|
|
134
|
+
}
|
|
135
|
+
var registeredMesher = null;
|
|
136
|
+
function registerWasmMesher(mesher) {
|
|
137
|
+
registeredMesher = mesher;
|
|
138
|
+
}
|
|
139
|
+
async function meshSurface(surface, options) {
|
|
140
|
+
if (registeredMesher) {
|
|
141
|
+
return registeredMesher.tetrahedralize(surface, options);
|
|
142
|
+
}
|
|
143
|
+
const verts = surface.vertices;
|
|
144
|
+
const nodeCount = verts.length / 3;
|
|
145
|
+
let minX = Infinity, maxX = -Infinity;
|
|
146
|
+
let minY = Infinity, maxY = -Infinity;
|
|
147
|
+
let minZ = Infinity, maxZ = -Infinity;
|
|
148
|
+
for (let i = 0; i < nodeCount; i++) {
|
|
149
|
+
const x = verts[i * 3], y = verts[i * 3 + 1], z = verts[i * 3 + 2];
|
|
150
|
+
if (x < minX) minX = x;
|
|
151
|
+
if (x > maxX) maxX = x;
|
|
152
|
+
if (y < minY) minY = y;
|
|
153
|
+
if (y > maxY) maxY = y;
|
|
154
|
+
if (z < minZ) minZ = z;
|
|
155
|
+
if (z > maxZ) maxZ = z;
|
|
156
|
+
}
|
|
157
|
+
const lx = maxX - minX || 1;
|
|
158
|
+
const ly = maxY - minY || 1;
|
|
159
|
+
const lz = maxZ - minZ || 1;
|
|
160
|
+
const targetEdge = options?.maxEdgeLength ?? Math.min(lx, ly, lz) / 4;
|
|
161
|
+
const nx = Math.max(2, Math.round(lx / targetEdge));
|
|
162
|
+
const ny = Math.max(2, Math.round(ly / targetEdge));
|
|
163
|
+
const nz = Math.max(2, Math.round(lz / targetEdge));
|
|
164
|
+
return meshBox({
|
|
165
|
+
origin: [minX, minY, minZ],
|
|
166
|
+
size: [lx, ly, lz],
|
|
167
|
+
divisions: [nx, ny, nz]
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function meshQuality(mesh) {
|
|
171
|
+
const verts = mesh.vertices;
|
|
172
|
+
const tets = mesh.tetrahedra;
|
|
173
|
+
let minVol = Infinity, maxVol = -Infinity, sumVol = 0;
|
|
174
|
+
let minAR = Infinity;
|
|
175
|
+
let inverted = 0;
|
|
176
|
+
for (let e = 0; e < mesh.elementCount; e++) {
|
|
177
|
+
const base = e * 4;
|
|
178
|
+
const n0 = tets[base], n1 = tets[base + 1], n2 = tets[base + 2], n3 = tets[base + 3];
|
|
179
|
+
const dx1 = verts[n1 * 3] - verts[n0 * 3], dy1 = verts[n1 * 3 + 1] - verts[n0 * 3 + 1], dz1 = verts[n1 * 3 + 2] - verts[n0 * 3 + 2];
|
|
180
|
+
const dx2 = verts[n2 * 3] - verts[n0 * 3], dy2 = verts[n2 * 3 + 1] - verts[n0 * 3 + 1], dz2 = verts[n2 * 3 + 2] - verts[n0 * 3 + 2];
|
|
181
|
+
const dx3 = verts[n3 * 3] - verts[n0 * 3], dy3 = verts[n3 * 3 + 1] - verts[n0 * 3 + 1], dz3 = verts[n3 * 3 + 2] - verts[n0 * 3 + 2];
|
|
182
|
+
const det = dx1 * (dy2 * dz3 - dz2 * dy3) - dy1 * (dx2 * dz3 - dz2 * dx3) + dz1 * (dx2 * dy3 - dy2 * dx3);
|
|
183
|
+
const vol = det / 6;
|
|
184
|
+
if (vol < 0) inverted++;
|
|
185
|
+
const absVol = Math.abs(vol);
|
|
186
|
+
if (absVol < minVol) minVol = absVol;
|
|
187
|
+
if (absVol > maxVol) maxVol = absVol;
|
|
188
|
+
sumVol += absVol;
|
|
189
|
+
const edges = [
|
|
190
|
+
Math.sqrt(dx1 * dx1 + dy1 * dy1 + dz1 * dz1),
|
|
191
|
+
Math.sqrt(dx2 * dx2 + dy2 * dy2 + dz2 * dz2),
|
|
192
|
+
Math.sqrt(dx3 * dx3 + dy3 * dy3 + dz3 * dz3),
|
|
193
|
+
Math.sqrt((dx2 - dx1) ** 2 + (dy2 - dy1) ** 2 + (dz2 - dz1) ** 2),
|
|
194
|
+
Math.sqrt((dx3 - dx1) ** 2 + (dy3 - dy1) ** 2 + (dz3 - dz1) ** 2),
|
|
195
|
+
Math.sqrt((dx3 - dx2) ** 2 + (dy3 - dy2) ** 2 + (dz3 - dz2) ** 2)
|
|
196
|
+
];
|
|
197
|
+
const minE = Math.min(...edges);
|
|
198
|
+
const maxE = Math.max(...edges);
|
|
199
|
+
const ar = minE > 0 ? minE / maxE : 0;
|
|
200
|
+
if (ar < minAR) minAR = ar;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
minVolume: minVol === Infinity ? 0 : minVol,
|
|
204
|
+
maxVolume: maxVol === -Infinity ? 0 : maxVol,
|
|
205
|
+
avgVolume: mesh.elementCount > 0 ? sumVol / mesh.elementCount : 0,
|
|
206
|
+
minAspectRatio: minAR === Infinity ? 0 : minAR,
|
|
207
|
+
invertedCount: inverted
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export {
|
|
212
|
+
meshBox,
|
|
213
|
+
findNodesOnFace,
|
|
214
|
+
findNodesInSphere,
|
|
215
|
+
registerWasmMesher,
|
|
216
|
+
meshSurface,
|
|
217
|
+
meshQuality
|
|
218
|
+
};
|