@aura3d/addons 0.0.0-stage → 5.0.0
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 +11 -2
- package/dist/effects/AsciiOutput.d.ts +60 -0
- package/dist/effects/AsciiOutput.d.ts.map +1 -0
- package/dist/effects/AsciiOutput.js +187 -0
- package/dist/effects/AsciiOutput.js.map +1 -0
- package/dist/effects/OutlineOutput.d.ts +58 -0
- package/dist/effects/OutlineOutput.d.ts.map +1 -0
- package/dist/effects/OutlineOutput.js +274 -0
- package/dist/effects/OutlineOutput.js.map +1 -0
- package/dist/effects/StereoOutputs.d.ts +106 -0
- package/dist/effects/StereoOutputs.d.ts.map +1 -0
- package/dist/effects/StereoOutputs.js +315 -0
- package/dist/effects/StereoOutputs.js.map +1 -0
- package/dist/generators/EnvironmentGenerators.d.ts +100 -0
- package/dist/generators/EnvironmentGenerators.d.ts.map +1 -0
- package/dist/generators/EnvironmentGenerators.js +477 -0
- package/dist/generators/EnvironmentGenerators.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/MarchingCubes.d.ts +80 -0
- package/dist/objects/MarchingCubes.d.ts.map +1 -0
- package/dist/objects/MarchingCubes.js +289 -0
- package/dist/objects/MarchingCubes.js.map +1 -0
- package/dist/objects/SpecializedObjects.d.ts +150 -0
- package/dist/objects/SpecializedObjects.d.ts.map +1 -0
- package/dist/objects/SpecializedObjects.js +544 -0
- package/dist/objects/SpecializedObjects.js.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts +76 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.js +279 -0
- package/dist/renderers/SpatialDOMRenderer.js.map +1 -0
- package/dist/renderers/VectorRenderer.d.ts +98 -0
- package/dist/renderers/VectorRenderer.d.ts.map +1 -0
- package/dist/renderers/VectorRenderer.js +253 -0
- package/dist/renderers/VectorRenderer.js.map +1 -0
- package/dist/tools/Fracture.d.ts +87 -0
- package/dist/tools/Fracture.d.ts.map +1 -0
- package/dist/tools/Fracture.js +422 -0
- package/dist/tools/Fracture.js.map +1 -0
- package/dist/tools/Sculptor.d.ts +84 -0
- package/dist/tools/Sculptor.d.ts.map +1 -0
- package/dist/tools/Sculptor.js +207 -0
- package/dist/tools/Sculptor.js.map +1 -0
- package/dist/tools/TubePainter.d.ts +47 -0
- package/dist/tools/TubePainter.d.ts.map +1 -0
- package/dist/tools/TubePainter.js +170 -0
- package/dist/tools/TubePainter.js.map +1 -0
- package/dist/utils/WorkerPool.d.ts +93 -0
- package/dist/utils/WorkerPool.d.ts.map +1 -0
- package/dist/utils/WorkerPool.js +360 -0
- package/dist/utils/WorkerPool.js.map +1 -0
- package/package.json +114 -3
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic, CPU-side fracture of closed convex triangle meshes.
|
|
3
|
+
*
|
|
4
|
+
* The algorithm clips each outward-facing polygon against a plane, then fills
|
|
5
|
+
* the cross section on both sides. It is authored for Aura3D and does not
|
|
6
|
+
* invoke another geometry engine. Returned geometry can be passed to
|
|
7
|
+
* `defineAuraCustomGeometry` / `geometry.dynamic` without a GPU allocation.
|
|
8
|
+
*/
|
|
9
|
+
const MAX_INPUT_VERTICES = 4096;
|
|
10
|
+
const MAX_INPUT_TRIANGLES = 8192;
|
|
11
|
+
const MAX_FRAGMENTS = 128;
|
|
12
|
+
const MAX_OUTPUT_TRIANGLES = 250_000;
|
|
13
|
+
const sub = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
14
|
+
const cross = (a, b) => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
15
|
+
const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
16
|
+
const length = (a) => Math.hypot(a[0], a[1], a[2]);
|
|
17
|
+
const distance = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
18
|
+
const scale = (a, k) => [a[0] * k, a[1] * k, a[2] * k];
|
|
19
|
+
function boundedInteger(value, min, max, name) {
|
|
20
|
+
if (!Number.isInteger(value) || value < min || value > max) {
|
|
21
|
+
throw new RangeError(`${name} must be an integer from ${min} to ${max}.`);
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function average(points) {
|
|
26
|
+
const origin = points[0];
|
|
27
|
+
let x = 0, y = 0, z = 0;
|
|
28
|
+
for (const p of points) {
|
|
29
|
+
x += p[0] - origin[0];
|
|
30
|
+
y += p[1] - origin[1];
|
|
31
|
+
z += p[2] - origin[2];
|
|
32
|
+
}
|
|
33
|
+
return [origin[0] + x / points.length, origin[1] + y / points.length, origin[2] + z / points.length];
|
|
34
|
+
}
|
|
35
|
+
/** Signed tetrahedral integration around an interior point avoids origin cancellation. */
|
|
36
|
+
function measure(solid) {
|
|
37
|
+
// The weighted mean of all face vertices is inside any convex solid. It is
|
|
38
|
+
// sufficient as an integration origin and avoids an O(vertices²) dedupe.
|
|
39
|
+
const ref = average(solid.faces.flatMap((face) => face.points));
|
|
40
|
+
let sum = 0, x = 0, y = 0, z = 0;
|
|
41
|
+
for (const face of solid.faces) {
|
|
42
|
+
const a = face.points[0];
|
|
43
|
+
for (let i = 1; i + 1 < face.points.length; i++) {
|
|
44
|
+
const b = face.points[i], c = face.points[i + 1];
|
|
45
|
+
const v = dot(sub(a, ref), cross(sub(b, ref), sub(c, ref))) / 6;
|
|
46
|
+
sum += v;
|
|
47
|
+
x += v * ((a[0] - ref[0]) + (b[0] - ref[0]) + (c[0] - ref[0])) / 4;
|
|
48
|
+
y += v * ((a[1] - ref[1]) + (b[1] - ref[1]) + (c[1] - ref[1])) / 4;
|
|
49
|
+
z += v * ((a[2] - ref[2]) + (b[2] - ref[2]) + (c[2] - ref[2])) / 4;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (!Number.isFinite(sum) || sum === 0)
|
|
53
|
+
throw new Error("Fracture requires a solid with nonzero finite volume.");
|
|
54
|
+
return { volume: sum, centroid: [ref[0] + x / sum, ref[1] + y / sum, ref[2] + z / sum] };
|
|
55
|
+
}
|
|
56
|
+
function materialAssignments(groups, indexCount) {
|
|
57
|
+
if (!groups)
|
|
58
|
+
return Array(indexCount / 3).fill(0);
|
|
59
|
+
let cursor = 0;
|
|
60
|
+
const materials = [];
|
|
61
|
+
for (const group of groups) {
|
|
62
|
+
const material = group.materialIndex ?? 0;
|
|
63
|
+
if (!Number.isSafeInteger(group.start) || !Number.isSafeInteger(group.count) || group.start !== cursor || group.count <= 0 || group.count % 3 !== 0 || !Number.isSafeInteger(material) || material < 0) {
|
|
64
|
+
throw new Error("Fracture groups must be ordered, contiguous, triangle-aligned ranges with nonnegative material indices.");
|
|
65
|
+
}
|
|
66
|
+
cursor += group.count;
|
|
67
|
+
if (cursor > indexCount)
|
|
68
|
+
throw new Error("Fracture groups exceed the triangle index stream.");
|
|
69
|
+
for (let n = 0; n < group.count / 3; n++)
|
|
70
|
+
materials.push(material);
|
|
71
|
+
}
|
|
72
|
+
if (cursor !== indexCount)
|
|
73
|
+
throw new Error("Fracture groups must cover the entire triangle index stream.");
|
|
74
|
+
return materials;
|
|
75
|
+
}
|
|
76
|
+
function parseSolid(input) {
|
|
77
|
+
if (!input || !input.positions || typeof input.positions.length !== "number")
|
|
78
|
+
throw new TypeError("Fracture requires flat packed positions.");
|
|
79
|
+
if (input.topology !== undefined && input.topology !== "triangles")
|
|
80
|
+
throw new Error("Fracture only supports triangle topology.");
|
|
81
|
+
for (const key of ["uvs", "colors", "attributes", "morphTargets", "drawRange"]) {
|
|
82
|
+
if (input[key] !== undefined)
|
|
83
|
+
throw new Error(`Fracture does not support ${key}; remove it explicitly before fracturing.`);
|
|
84
|
+
}
|
|
85
|
+
const count = input.positions.length;
|
|
86
|
+
if (!Number.isSafeInteger(count) || count < 12 || count % 3 !== 0 || count / 3 > MAX_INPUT_VERTICES) {
|
|
87
|
+
throw new RangeError(`Fracture positions must contain 4..${MAX_INPUT_VERTICES} packed vertices.`);
|
|
88
|
+
}
|
|
89
|
+
if (input.normals !== undefined) {
|
|
90
|
+
if (input.normals === null || input.normals.length !== count)
|
|
91
|
+
throw new Error("Fracture normals must match the packed position length.");
|
|
92
|
+
for (let i = 0; i < count; i++)
|
|
93
|
+
if (!Number.isFinite(input.normals[i]))
|
|
94
|
+
throw new TypeError("Fracture normals must be finite numbers.");
|
|
95
|
+
}
|
|
96
|
+
const positions = [];
|
|
97
|
+
const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];
|
|
98
|
+
for (let i = 0; i < count; i += 3) {
|
|
99
|
+
const p = [input.positions[i], input.positions[i + 1], input.positions[i + 2]];
|
|
100
|
+
if (!p.every(Number.isFinite))
|
|
101
|
+
throw new TypeError("Fracture positions must be finite numbers.");
|
|
102
|
+
for (let k = 0; k < 3; k++) {
|
|
103
|
+
min[k] = Math.min(min[k], p[k]);
|
|
104
|
+
max[k] = Math.max(max[k], p[k]);
|
|
105
|
+
}
|
|
106
|
+
positions.push(p);
|
|
107
|
+
}
|
|
108
|
+
const extent = distance(min, max);
|
|
109
|
+
if (!Number.isFinite(extent) || extent <= 0)
|
|
110
|
+
throw new Error("Fracture requires non-degenerate bounds.");
|
|
111
|
+
// The public renderer consumes float32 positions. Refuse coordinates whose
|
|
112
|
+
// conversion would erase meaningful geometry instead of returning bad meshes.
|
|
113
|
+
const floatTolerance = Math.max(extent * 1e-6, Number.MIN_VALUE);
|
|
114
|
+
for (const p of positions)
|
|
115
|
+
for (const c of p) {
|
|
116
|
+
if (!Number.isFinite(Math.fround(c)) || Math.abs(Math.fround(c) - c) > floatTolerance) {
|
|
117
|
+
throw new RangeError("Fracture positions cannot be represented accurately as float32 at this scale.");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Output is float32, so use a scale-aware tolerance large enough to accept
|
|
121
|
+
// fragments as valid future inputs after float32 rounding.
|
|
122
|
+
const epsilon = Math.max(extent * 2e-6, Number.MIN_VALUE);
|
|
123
|
+
const indexed = input.indices?.length ? input.indices : undefined;
|
|
124
|
+
const indexCount = indexed?.length ?? positions.length;
|
|
125
|
+
if (!Number.isSafeInteger(indexCount) || indexCount < 12 || indexCount % 3 !== 0 || indexCount / 3 > MAX_INPUT_TRIANGLES) {
|
|
126
|
+
throw new RangeError(`Fracture requires 4..${MAX_INPUT_TRIANGLES} triangles.`);
|
|
127
|
+
}
|
|
128
|
+
const materials = materialAssignments(input.groups, indexCount);
|
|
129
|
+
const faces = [];
|
|
130
|
+
const vertexIds = new Map();
|
|
131
|
+
const edgeCounts = new Map();
|
|
132
|
+
const used = new Map();
|
|
133
|
+
const canonical = (p) => {
|
|
134
|
+
const key = p.map((v) => Object.is(v, -0) ? 0 : v).join(",");
|
|
135
|
+
let id = vertexIds.get(key);
|
|
136
|
+
if (id === undefined) {
|
|
137
|
+
id = vertexIds.size;
|
|
138
|
+
vertexIds.set(key, id);
|
|
139
|
+
used.set(id, p);
|
|
140
|
+
}
|
|
141
|
+
return id;
|
|
142
|
+
};
|
|
143
|
+
for (let i = 0; i < indexCount; i += 3) {
|
|
144
|
+
const tri = [];
|
|
145
|
+
const ids = [];
|
|
146
|
+
for (let j = 0; j < 3; j++) {
|
|
147
|
+
const index = indexed ? indexed[i + j] : i + j;
|
|
148
|
+
if (!Number.isSafeInteger(index) || index < 0 || index >= positions.length)
|
|
149
|
+
throw new RangeError("Fracture indices must reference existing vertices.");
|
|
150
|
+
const p = positions[index];
|
|
151
|
+
tri.push(p);
|
|
152
|
+
ids.push(canonical(p));
|
|
153
|
+
}
|
|
154
|
+
if (new Set(ids).size !== 3 || length(cross(sub(tri[1], tri[0]), sub(tri[2], tri[0]))) <= epsilon * epsilon) {
|
|
155
|
+
throw new Error("Fracture does not support degenerate triangles.");
|
|
156
|
+
}
|
|
157
|
+
for (let j = 0; j < 3; j++) {
|
|
158
|
+
const a = ids[j], b = ids[(j + 1) % 3];
|
|
159
|
+
const key = a < b ? `${a}:${b}` : `${b}:${a}`;
|
|
160
|
+
const entry = edgeCounts.get(key) ?? { count: 0, direction: 0 };
|
|
161
|
+
entry.count++;
|
|
162
|
+
entry.direction += a < b ? 1 : -1;
|
|
163
|
+
edgeCounts.set(key, entry);
|
|
164
|
+
}
|
|
165
|
+
const normal = cross(sub(tri[1], tri[0]), sub(tri[2], tri[0]));
|
|
166
|
+
faces.push({ points: tri, normal: scale(normal, 1 / length(normal)), material: materials[i / 3] });
|
|
167
|
+
}
|
|
168
|
+
for (const edge of edgeCounts.values()) {
|
|
169
|
+
if (edge.count !== 2 || edge.direction !== 0)
|
|
170
|
+
throw new Error("Fracture requires a closed, consistently wound two-manifold triangle mesh.");
|
|
171
|
+
}
|
|
172
|
+
const solid = { faces };
|
|
173
|
+
let mass = measure(solid);
|
|
174
|
+
if (Math.abs(mass.volume) <= extent ** 3 * 1e-12)
|
|
175
|
+
throw new Error("Fracture requires a non-degenerate solid volume.");
|
|
176
|
+
if (mass.volume < 0) {
|
|
177
|
+
for (const face of faces) {
|
|
178
|
+
face.points.reverse();
|
|
179
|
+
face.normal = scale(face.normal, -1);
|
|
180
|
+
}
|
|
181
|
+
mass = measure(solid);
|
|
182
|
+
}
|
|
183
|
+
// A closed oriented mesh is convex iff every vertex lies on or behind every
|
|
184
|
+
// outward face plane. This deliberately rejects concavities and cavities.
|
|
185
|
+
for (const face of faces) {
|
|
186
|
+
const n = face.normal, origin = face.points[0];
|
|
187
|
+
for (const p of used.values()) {
|
|
188
|
+
if (dot(n, sub(p, origin)) > epsilon * 4)
|
|
189
|
+
throw new Error("Fracture only supports convex solids without cavities.");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { solid, epsilon, extent };
|
|
193
|
+
}
|
|
194
|
+
function normalizePlane(plane) {
|
|
195
|
+
if (!plane || !plane.normal || plane.normal.length !== 3 || !plane.normal.every(Number.isFinite) || !Number.isFinite(plane.constant)) {
|
|
196
|
+
throw new TypeError("Fracture plane requires a finite normal and constant.");
|
|
197
|
+
}
|
|
198
|
+
const n = [plane.normal[0], plane.normal[1], plane.normal[2]];
|
|
199
|
+
const size = length(n);
|
|
200
|
+
if (!Number.isFinite(size) || size < 1e-15)
|
|
201
|
+
throw new RangeError("Fracture plane normal must be nonzero.");
|
|
202
|
+
const constant = plane.constant / size;
|
|
203
|
+
if (!Number.isFinite(constant))
|
|
204
|
+
throw new RangeError("Fracture plane is outside the finite coordinate range.");
|
|
205
|
+
return { normal: scale(n, 1 / size), constant };
|
|
206
|
+
}
|
|
207
|
+
function clipPolygon(points, plane, side, epsilon) {
|
|
208
|
+
const out = [];
|
|
209
|
+
for (let i = 0; i < points.length; i++) {
|
|
210
|
+
const a = points[i], b = points[(i + 1) % points.length];
|
|
211
|
+
const da = side * (dot(plane.normal, a) - plane.constant);
|
|
212
|
+
const db = side * (dot(plane.normal, b) - plane.constant);
|
|
213
|
+
const insideA = da <= epsilon, insideB = db <= epsilon;
|
|
214
|
+
if (insideA)
|
|
215
|
+
out.push(a);
|
|
216
|
+
if (insideA !== insideB) {
|
|
217
|
+
const t = Math.max(0, Math.min(1, da / (da - db)));
|
|
218
|
+
out.push([a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1]), a[2] + t * (b[2] - a[2])]);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const compact = [];
|
|
222
|
+
for (const p of out)
|
|
223
|
+
if (!compact.length || distance(p, compact[compact.length - 1]) > epsilon)
|
|
224
|
+
compact.push(p);
|
|
225
|
+
if (compact.length > 1 && distance(compact[0], compact[compact.length - 1]) <= epsilon)
|
|
226
|
+
compact.pop();
|
|
227
|
+
return compact;
|
|
228
|
+
}
|
|
229
|
+
function triangleCount(solid) {
|
|
230
|
+
return solid.faces.reduce((sum, f) => sum + (f.points.length === 3 ? 1 : f.points.length), 0);
|
|
231
|
+
}
|
|
232
|
+
function splitSolid(solid, plane, capMaterial, epsilon, triangleBudget) {
|
|
233
|
+
let low = Infinity, high = -Infinity;
|
|
234
|
+
for (const face of solid.faces)
|
|
235
|
+
for (const p of face.points) {
|
|
236
|
+
const d = dot(plane.normal, p) - plane.constant;
|
|
237
|
+
low = Math.min(low, d);
|
|
238
|
+
high = Math.max(high, d);
|
|
239
|
+
}
|
|
240
|
+
if (low >= -epsilon || high <= epsilon)
|
|
241
|
+
return null;
|
|
242
|
+
const negative = { faces: [] }, positive = { faces: [] };
|
|
243
|
+
const crossSection = [];
|
|
244
|
+
const crossSectionBins = new Map();
|
|
245
|
+
let crossSectionOrigin;
|
|
246
|
+
const cellSize = epsilon * 2;
|
|
247
|
+
let triangles = 0;
|
|
248
|
+
const remember = (p) => {
|
|
249
|
+
crossSectionOrigin ??= p;
|
|
250
|
+
const cell = [Math.floor((p[0] - crossSectionOrigin[0]) / cellSize), Math.floor((p[1] - crossSectionOrigin[1]) / cellSize), Math.floor((p[2] - crossSectionOrigin[2]) / cellSize)];
|
|
251
|
+
for (let x = -1; x <= 1; x++)
|
|
252
|
+
for (let y = -1; y <= 1; y++)
|
|
253
|
+
for (let z = -1; z <= 1; z++) {
|
|
254
|
+
const bucket = crossSectionBins.get(`${cell[0] + x},${cell[1] + y},${cell[2] + z}`);
|
|
255
|
+
if (bucket?.some((q) => distance(p, q) <= cellSize))
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const key = cell.join(",");
|
|
259
|
+
const bucket = crossSectionBins.get(key) ?? [];
|
|
260
|
+
bucket.push(p);
|
|
261
|
+
crossSectionBins.set(key, bucket);
|
|
262
|
+
crossSection.push(p);
|
|
263
|
+
};
|
|
264
|
+
for (const face of solid.faces) {
|
|
265
|
+
const a = clipPolygon(face.points, plane, 1, epsilon);
|
|
266
|
+
const b = clipPolygon(face.points, plane, -1, epsilon);
|
|
267
|
+
for (const p of a)
|
|
268
|
+
if (Math.abs(dot(plane.normal, p) - plane.constant) <= epsilon * 2)
|
|
269
|
+
remember(p);
|
|
270
|
+
if (a.length >= 3) {
|
|
271
|
+
negative.faces.push({ points: a, normal: face.normal, material: face.material });
|
|
272
|
+
triangles += a.length === 3 ? 1 : a.length;
|
|
273
|
+
}
|
|
274
|
+
if (b.length >= 3) {
|
|
275
|
+
positive.faces.push({ points: b, normal: face.normal, material: face.material });
|
|
276
|
+
triangles += b.length === 3 ? 1 : b.length;
|
|
277
|
+
}
|
|
278
|
+
if (triangles > triangleBudget)
|
|
279
|
+
throw new RangeError("Fracture triangle budget exceeded.");
|
|
280
|
+
}
|
|
281
|
+
if (crossSection.length < 3)
|
|
282
|
+
throw new Error("Fracture plane produced a degenerate cross-section.");
|
|
283
|
+
const center = average(crossSection);
|
|
284
|
+
const axis = Math.abs(plane.normal[0]) < 0.8 ? [1, 0, 0] : [0, 1, 0];
|
|
285
|
+
const tangent = cross(axis, plane.normal);
|
|
286
|
+
const tangentLength = length(tangent);
|
|
287
|
+
const u = scale(tangent, 1 / tangentLength), v = cross(plane.normal, u);
|
|
288
|
+
crossSection.sort((a, b) => Math.atan2(dot(sub(a, center), v), dot(sub(a, center), u)) - Math.atan2(dot(sub(b, center), v), dot(sub(b, center), u)));
|
|
289
|
+
// u x v points along +normal, outward for the negative half.
|
|
290
|
+
negative.faces.push({ points: crossSection, normal: plane.normal, material: capMaterial });
|
|
291
|
+
positive.faces.push({ points: crossSection.slice().reverse(), normal: scale(plane.normal, -1), material: capMaterial });
|
|
292
|
+
if (triangleCount(negative) + triangleCount(positive) > triangleBudget)
|
|
293
|
+
throw new RangeError("Fracture triangle budget exceeded.");
|
|
294
|
+
return [negative, positive];
|
|
295
|
+
}
|
|
296
|
+
function makeGeometry(solid) {
|
|
297
|
+
const positions = [], normals = [], indices = [];
|
|
298
|
+
const groups = [];
|
|
299
|
+
const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];
|
|
300
|
+
const addTriangle = (a, b, c, n, material) => {
|
|
301
|
+
const rounded = [a, b, c].map((p) => [Math.fround(p[0]), Math.fround(p[1]), Math.fround(p[2])]);
|
|
302
|
+
const facing = dot(cross(sub(rounded[1], rounded[0]), sub(rounded[2], rounded[0])), n);
|
|
303
|
+
if (!Number.isFinite(facing) || facing <= 0) {
|
|
304
|
+
throw new RangeError("Fracture triangle cannot be represented reliably as float32; use a better-scaled local-space mesh or a less degenerate cut.");
|
|
305
|
+
}
|
|
306
|
+
let group = groups[groups.length - 1];
|
|
307
|
+
if (!group || group.materialIndex !== material) {
|
|
308
|
+
group = { start: indices.length, count: 0, materialIndex: material };
|
|
309
|
+
groups.push(group);
|
|
310
|
+
}
|
|
311
|
+
for (const p of rounded) {
|
|
312
|
+
const index = positions.length / 3;
|
|
313
|
+
positions.push(p[0], p[1], p[2]);
|
|
314
|
+
normals.push(n[0], n[1], n[2]);
|
|
315
|
+
indices.push(index);
|
|
316
|
+
group.count++;
|
|
317
|
+
for (let k = 0; k < 3; k++) {
|
|
318
|
+
min[k] = Math.min(min[k], p[k]);
|
|
319
|
+
max[k] = Math.max(max[k], p[k]);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
for (const face of solid.faces) {
|
|
324
|
+
const n = face.normal;
|
|
325
|
+
if (face.points.length === 3)
|
|
326
|
+
addTriangle(face.points[0], face.points[1], face.points[2], n, face.material);
|
|
327
|
+
else {
|
|
328
|
+
const center = average(face.points);
|
|
329
|
+
for (let i = 0; i < face.points.length; i++)
|
|
330
|
+
addTriangle(center, face.points[i], face.points[(i + 1) % face.points.length], n, face.material);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { kind: "aura-custom-geometry", positions: new Float32Array(positions), normals: new Float32Array(normals), indices: new Uint32Array(indices), bounds: { min, max }, groups };
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Cut a closed convex solid into independently renderable pieces. With `planes`,
|
|
337
|
+
* every supplied plane is applied to every piece it actually intersects. With
|
|
338
|
+
* `pieces`, seeded planes go through the largest piece's centroid. A tangent or
|
|
339
|
+
* external explicit plane leaves the solid unchanged. Limits are checked while
|
|
340
|
+
* clipping, before final typed-array allocation. Unsupported geometry throws.
|
|
341
|
+
*/
|
|
342
|
+
export function fractureConvex(input, options = {}) {
|
|
343
|
+
const maxFragments = boundedInteger(options.maxFragments ?? 64, 1, MAX_FRAGMENTS, "maxFragments");
|
|
344
|
+
const maxTriangles = boundedInteger(options.maxTriangles ?? 100_000, 4, MAX_OUTPUT_TRIANGLES, "maxTriangles");
|
|
345
|
+
const capMaterial = boundedInteger(options.capMaterialIndex ?? 1, 0, 0x7fffffff, "capMaterialIndex");
|
|
346
|
+
if (options.planes !== undefined && options.pieces !== undefined)
|
|
347
|
+
throw new Error("Choose either explicit fracture planes or a seeded piece count.");
|
|
348
|
+
if (options.planes !== undefined && options.seed !== undefined)
|
|
349
|
+
throw new Error("seed only applies to seeded fracture; omit it when supplying planes.");
|
|
350
|
+
const seed = boundedInteger(options.seed ?? 0, 0, 0xffffffff, "seed");
|
|
351
|
+
const desired = options.planes === undefined ? boundedInteger(options.pieces ?? 2, 1, maxFragments, "pieces") : 0;
|
|
352
|
+
if (options.planes !== undefined && (!Array.isArray(options.planes) || options.planes.length > MAX_FRAGMENTS)) {
|
|
353
|
+
throw new RangeError(`planes must be an array of at most ${MAX_FRAGMENTS} planes.`);
|
|
354
|
+
}
|
|
355
|
+
const planes = options.planes?.map(normalizePlane);
|
|
356
|
+
const { solid, epsilon, extent } = parseSolid(input);
|
|
357
|
+
if (triangleCount(solid) > maxTriangles)
|
|
358
|
+
throw new RangeError("Fracture triangle budget exceeded.");
|
|
359
|
+
let solids = [solid];
|
|
360
|
+
if (planes) {
|
|
361
|
+
for (const plane of planes) {
|
|
362
|
+
const next = [];
|
|
363
|
+
let remainingTriangles = maxTriangles;
|
|
364
|
+
for (const current of solids) {
|
|
365
|
+
const pair = splitSolid(current, plane, capMaterial, epsilon, remainingTriangles);
|
|
366
|
+
for (const piece of pair ?? [current]) {
|
|
367
|
+
if (next.length >= maxFragments)
|
|
368
|
+
throw new RangeError("Fracture fragment budget exceeded.");
|
|
369
|
+
remainingTriangles -= triangleCount(piece);
|
|
370
|
+
if (remainingTriangles < 0)
|
|
371
|
+
throw new RangeError("Fracture triangle budget exceeded.");
|
|
372
|
+
next.push(piece);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
solids = next;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
let state = seed;
|
|
380
|
+
const random = () => { state = (Math.imul(state, 1664525) + 1013904223) >>> 0; return state / 0x100000000; };
|
|
381
|
+
while (solids.length < desired) {
|
|
382
|
+
let chosen = 0, largest = -Infinity;
|
|
383
|
+
for (let i = 0; i < solids.length; i++) {
|
|
384
|
+
const volume = measure(solids[i]).volume;
|
|
385
|
+
if (volume > largest) {
|
|
386
|
+
chosen = i;
|
|
387
|
+
largest = volume;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const source = solids[chosen], centroid = measure(source).centroid;
|
|
391
|
+
let n = [random() * 2 - 1, random() * 2 - 1, random() * 2 - 1];
|
|
392
|
+
if (length(n) < 1e-10)
|
|
393
|
+
n = [1, 0, 0];
|
|
394
|
+
n = scale(n, 1 / length(n));
|
|
395
|
+
const currentTotal = solids.reduce((sum, s) => sum + triangleCount(s), 0);
|
|
396
|
+
const pair = splitSolid(source, { normal: n, constant: dot(n, centroid) }, capMaterial, epsilon, maxTriangles - currentTotal + triangleCount(source));
|
|
397
|
+
if (!pair)
|
|
398
|
+
throw new Error("Fracture could not make a non-degenerate seeded cut at this scale.");
|
|
399
|
+
for (const piece of pair) {
|
|
400
|
+
if (measure(piece).volume <= extent ** 3 * 1e-14)
|
|
401
|
+
throw new Error("Fracture produced a degenerate fragment.");
|
|
402
|
+
}
|
|
403
|
+
solids.splice(chosen, 1, ...pair);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
let fragments = solids.map((piece) => {
|
|
407
|
+
const mass = measure(piece);
|
|
408
|
+
if (mass.volume <= extent ** 3 * 1e-14)
|
|
409
|
+
throw new Error("Fracture produced a degenerate fragment.");
|
|
410
|
+
return { geometry: makeGeometry(piece), volume: mass.volume, centroid: mass.centroid };
|
|
411
|
+
});
|
|
412
|
+
let disposed = false;
|
|
413
|
+
return {
|
|
414
|
+
get fragments() { return fragments; },
|
|
415
|
+
get disposed() { return disposed; },
|
|
416
|
+
dispose() { if (!disposed) {
|
|
417
|
+
disposed = true;
|
|
418
|
+
fragments = [];
|
|
419
|
+
} }
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=Fracture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fracture.js","sourceRoot":"","sources":["../../src/tools/Fracture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmFH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC,MAAM,GAAG,GAAG,CAAC,CAAM,EAAE,CAAM,EAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM,KAAK,GAAG,CAAC,CAAM,EAAE,CAAM,EAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzH,MAAM,GAAG,GAAG,CAAC,CAAM,EAAE,CAAM,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,MAAM,GAAG,CAAC,CAAM,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,CAAM,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,MAAM,KAAK,GAAG,CAAC,CAAM,EAAE,CAAS,EAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzE,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,IAAY;IAC3E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAC3D,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,4BAA4B,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,MAAsB;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAChG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACvG,CAAC;AAED,0FAA0F;AAC1F,SAAS,OAAO,CAAC,KAAY;IAC3B,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACnD,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChE,GAAG,IAAI,CAAC,CAAC;YACT,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACjH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAoD,EAAE,UAAkB;IACnG,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAS,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACvM,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;QAC7H,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;QACtB,IAAI,MAAM,GAAG,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC3G,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAA0B;IAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAC9I,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACjI,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,CAAU,EAAE,CAAC;QACxF,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,2CAA2C,CAAC,CAAC;IAC7H,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAAC;QACpG,MAAM,IAAI,UAAU,CAAC,sCAAsC,kBAAkB,mBAAmB,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAC1I,CAAC;IACD,MAAM,SAAS,GAAU,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,GAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;QACvF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACjG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAAC,CAAC;QACrG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACzG,2EAA2E;IAC3E,8EAA8E;IAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjE,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC;gBACtF,MAAM,IAAI,UAAU,CAAC,+EAA+E,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;IACD,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,UAAU,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,EAAE,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,GAAG,mBAAmB,EAAE,CAAC;QACzH,MAAM,IAAI,UAAU,CAAC,wBAAwB,mBAAmB,aAAa,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgD,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IACpC,MAAM,SAAS,GAAG,CAAC,CAAM,EAAU,EAAE;QACnC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;YAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QACvF,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,GAAU,EAAE,CAAC;QACtB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM;gBAAE,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;YACvJ,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;YAChH,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACzC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAC9I,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC1F,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,4EAA4E;IAC5E,0EAA0E;IAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACtH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,KAAoB;IAC1C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrI,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,CAAC,GAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;IAC/G,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,MAAsB,EAAE,KAAsB,EAAE,IAAY,EAAE,OAAe;IAChG,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;QAC3D,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,EAAE,IAAI,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,OAAO,CAAC;QACvD,IAAI,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACxG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,UAAU,CAAC,KAAY,EAAE,KAAsB,EAAE,WAAmB,EAAE,OAAe,EAAE,cAAsB;IACpH,IAAI,GAAG,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5D,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,QAAQ,GAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvE,MAAM,YAAY,GAAU,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;IAClD,IAAI,kBAAmC,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAQ,EAAE;QAChC,kBAAkB,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACxL,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACpF,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;wBAAE,OAAO;gBAC9D,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,CAAC;YAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,GAAG,CAAC;gBAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAAC,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAAC,CAAC;QACpJ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAAC,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAAC,CAAC;QACpJ,IAAI,SAAS,GAAG,cAAc;YAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,IAAI,GAAQ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrJ,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3F,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IACxH,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,cAAc;QAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IACnI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAChC,MAAM,SAAS,GAAa,EAAE,EAAE,OAAO,GAAa,EAAE,EAAE,OAAO,GAAa,EAAE,CAAC;IAC/E,MAAM,MAAM,GAAmE,EAAE,CAAC;IAClF,MAAM,GAAG,GAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9F,MAAM,WAAW,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,CAAM,EAAE,CAAM,EAAE,QAAgB,EAAQ,EAAE;QAC7E,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,UAAU,CAAC,6HAA6H,CAAC,CAAC;QACtJ,CAAC;QACD,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAAC,KAAK,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAC7I,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;gBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAAC,CAAC;QACvG,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC1G,CAAC;YACJ,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAE,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;AACvL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B,EAAE,UAAiC,EAAE;IAC5F,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAClG,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAC9G,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACrG,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrJ,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACxJ,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC;QAC9G,MAAM,IAAI,UAAU,CAAC,sCAAsC,aAAa,UAAU,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,YAAY;QAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IACpG,IAAI,MAAM,GAAY,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAY,EAAE,CAAC;YACzB,IAAI,kBAAkB,GAAG,YAAY,CAAC;YACtC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;gBAClF,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,MAAM,IAAI,YAAY;wBAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;oBAC5F,kBAAkB,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC3C,IAAI,kBAAkB,GAAG,CAAC;wBAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;oBACvF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,MAAM,MAAM,GAAG,GAAW,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACrH,OAAO,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAC;gBAC1C,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;oBAAC,MAAM,GAAG,CAAC,CAAC;oBAAC,OAAO,GAAG,MAAM,CAAC;gBAAC,CAAC;YACzD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YACpE,IAAI,CAAC,GAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK;gBAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YACtJ,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACjG,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,GAAG,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAChH,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,SAAS,GAA6B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,GAAG,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACpG,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzF,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,IAAI,SAAS,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;QACrC,IAAI,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC;QACnC,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,QAAQ,GAAG,IAAI,CAAC;YAAC,SAAS,GAAG,EAAE,CAAC;QAAC,CAAC,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Editable triangle geometry with bounded, reversible local-space brush strokes. */
|
|
2
|
+
export type SculptVec3 = readonly [number, number, number];
|
|
3
|
+
export interface SculptMeshInput {
|
|
4
|
+
readonly positions: Float32Array | readonly number[];
|
|
5
|
+
/** Empty or omitted indices mean a triangle list. */
|
|
6
|
+
readonly indices?: Uint16Array | Uint32Array | readonly number[];
|
|
7
|
+
/** Accepted for validation; normals are regenerated after every edit. */
|
|
8
|
+
readonly normals?: Float32Array | readonly number[];
|
|
9
|
+
readonly uvs?: Float32Array | readonly number[];
|
|
10
|
+
readonly groups?: readonly {
|
|
11
|
+
readonly start: number;
|
|
12
|
+
readonly count: number;
|
|
13
|
+
readonly materialIndex?: number;
|
|
14
|
+
}[];
|
|
15
|
+
readonly topology?: "triangles" | "lines" | "points";
|
|
16
|
+
/** Explicitly rejected until these streams can be preserved through an edit. */
|
|
17
|
+
readonly colors?: unknown;
|
|
18
|
+
readonly attributes?: unknown;
|
|
19
|
+
readonly morphTargets?: unknown;
|
|
20
|
+
readonly drawRange?: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface SculptorOptions {
|
|
23
|
+
/** Maximum distance a vertex can move from its initial position. */
|
|
24
|
+
readonly maxDisplacement?: number;
|
|
25
|
+
readonly maxVertices?: number;
|
|
26
|
+
readonly maxTriangles?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface SculptBrush {
|
|
29
|
+
readonly center: SculptVec3;
|
|
30
|
+
readonly radius: number;
|
|
31
|
+
/** Distance along the direction for a vertex at the brush center. Can be negative. */
|
|
32
|
+
readonly strength: number;
|
|
33
|
+
/** If omitted, each vertex moves along its current normal. */
|
|
34
|
+
readonly direction?: SculptVec3;
|
|
35
|
+
readonly falloff?: "linear" | "smooth";
|
|
36
|
+
}
|
|
37
|
+
/** Plain typed-array patch: save it in the caller's undo stack; `before`/`after` are local positions. */
|
|
38
|
+
export interface SculptEdit {
|
|
39
|
+
readonly vertexCount: number;
|
|
40
|
+
readonly indices: Uint32Array;
|
|
41
|
+
readonly before: Float32Array;
|
|
42
|
+
readonly after: Float32Array;
|
|
43
|
+
}
|
|
44
|
+
export interface SculptGeometry {
|
|
45
|
+
readonly kind: "aura-custom-geometry";
|
|
46
|
+
readonly positions: Float32Array;
|
|
47
|
+
readonly normals: Float32Array;
|
|
48
|
+
readonly indices: Uint32Array;
|
|
49
|
+
readonly uvs?: Float32Array;
|
|
50
|
+
readonly groups?: readonly {
|
|
51
|
+
readonly start: number;
|
|
52
|
+
readonly count: number;
|
|
53
|
+
readonly materialIndex?: number;
|
|
54
|
+
}[];
|
|
55
|
+
readonly bounds: {
|
|
56
|
+
readonly min: SculptVec3;
|
|
57
|
+
readonly max: SculptVec3;
|
|
58
|
+
};
|
|
59
|
+
readonly dynamic: true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Owns CPU copies, never the caller's buffers. `geometry()` returns a fresh
|
|
63
|
+
* custom-geometry snapshot for `geometry.custom(...)` or `handle.setGeometry(...)`.
|
|
64
|
+
* The caller owns any GPU resources compiled from a snapshot. Disposal releases
|
|
65
|
+
* this editor's buffers and does not invalidate previously returned snapshots.
|
|
66
|
+
*/
|
|
67
|
+
export declare class Sculptor {
|
|
68
|
+
private positions;
|
|
69
|
+
private original;
|
|
70
|
+
private normals;
|
|
71
|
+
private indices;
|
|
72
|
+
private uvs?;
|
|
73
|
+
private groups?;
|
|
74
|
+
private readonly maxDisplacement;
|
|
75
|
+
private disposed;
|
|
76
|
+
constructor(input: SculptMeshInput, options?: SculptorOptions);
|
|
77
|
+
geometry(): SculptGeometry;
|
|
78
|
+
applyBrush(brush: SculptBrush): SculptEdit;
|
|
79
|
+
/** Apply an earlier patch in either direction; malformed patches fail before any mutation. */
|
|
80
|
+
applyEdit(edit: SculptEdit, direction: "undo" | "redo"): void;
|
|
81
|
+
dispose(): void;
|
|
82
|
+
private assertAlive;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=Sculptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sculptor.d.ts","sourceRoot":"","sources":["../../src/tools/Sculptor.ts"],"names":[],"mappings":"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"}
|