@ifc-lite/ifcx 4.4.0 → 4.5.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 +10 -0
- package/dist/detect-format.d.ts +5 -0
- package/dist/detect-format.d.ts.map +1 -0
- package/dist/detect-format.js +33 -0
- package/dist/detect-format.js.map +1 -0
- package/dist/generated/imported-geometry-static.js +17116 -0
- package/dist/generated/imported-geometry.d.ts +2 -0
- package/dist/generated/imported-geometry.d.ts.map +1 -0
- package/dist/generated/imported-geometry.js +13 -0
- package/dist/generated/imported-geometry.js.map +1 -0
- package/dist/geometry-extractor.d.ts +2 -16
- package/dist/geometry-extractor.d.ts.map +1 -1
- package/dist/geometry-extractor.js +3 -299
- package/dist/geometry-extractor.js.map +1 -1
- package/dist/imported-graph-source.d.ts +13 -0
- package/dist/imported-graph-source.d.ts.map +1 -0
- package/dist/imported-graph-source.js +53 -0
- package/dist/imported-graph-source.js.map +1 -0
- package/dist/imported-graph.d.ts +13 -0
- package/dist/imported-graph.d.ts.map +1 -0
- package/dist/imported-graph.js +154 -0
- package/dist/imported-graph.js.map +1 -0
- package/dist/imported-kernel.d.ts +33 -0
- package/dist/imported-kernel.d.ts.map +1 -0
- package/dist/imported-kernel.js +172 -0
- package/dist/imported-kernel.js.map +1 -0
- package/dist/imported-scene.d.ts +7 -0
- package/dist/imported-scene.d.ts.map +1 -0
- package/dist/imported-scene.js +6 -0
- package/dist/imported-scene.js.map +1 -0
- package/dist/imported-snapshot.d.ts +3 -0
- package/dist/imported-snapshot.d.ts.map +1 -0
- package/dist/imported-snapshot.js +53 -0
- package/dist/imported-snapshot.js.map +1 -0
- package/dist/imported-source.d.ts +59 -0
- package/dist/imported-source.d.ts.map +1 -0
- package/dist/imported-source.js +96 -0
- package/dist/imported-source.js.map +1 -0
- package/dist/imported-wire.d.ts +35 -0
- package/dist/imported-wire.d.ts.map +1 -0
- package/dist/imported-wire.js +108 -0
- package/dist/imported-wire.js.map +1 -0
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -32
- package/dist/index.js.map +1 -1
- package/dist/pointcloud-extractor.d.ts +14 -0
- package/dist/pointcloud-extractor.d.ts.map +1 -1
- package/dist/pointcloud-extractor.js +3 -176
- package/dist/pointcloud-extractor.js.map +1 -1
- package/package.json +5 -4
- package/dist/geometry-normals.d.ts +0 -29
- package/dist/geometry-normals.d.ts.map +0 -1
- package/dist/geometry-normals.js +0 -91
- package/dist/geometry-normals.js.map +0 -1
|
@@ -1,305 +1,9 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { getNodeLineage, walkComposedFrames } from './traversal.js';
|
|
7
|
-
import { computeNormalMatrix, computeNormals } from './geometry-normals.js';
|
|
8
|
-
/**
|
|
9
|
-
* Extract geometry from composed IFCX nodes.
|
|
10
|
-
*
|
|
11
|
-
* IFC5 geometry is pre-tessellated (unlike IFC4 parametric geometry),
|
|
12
|
-
* so this is straightforward mesh extraction.
|
|
13
|
-
*
|
|
14
|
-
* Note: Meshes are often on child nodes (like "Body", "Axis") that don't
|
|
15
|
-
* have their own bsi::ifc::class. We associate these with the closest
|
|
16
|
-
* ancestor entity that has an expressId.
|
|
17
|
-
*
|
|
18
|
-
* Output geometry is converted to Y-up for the viewer.
|
|
19
|
-
*/
|
|
4
|
+
import { executeImportedGraph } from './imported-graph.js';
|
|
5
|
+
/** Synchronous no-setup adapter; Rust owns geometry planning and execution. */
|
|
20
6
|
export function extractGeometry(composed, pathToId) {
|
|
21
|
-
|
|
22
|
-
const decodeImage = createIfcxImageDecoder();
|
|
23
|
-
const contextByFrame = new WeakMap();
|
|
24
|
-
const transformByFrame = new WeakMap();
|
|
25
|
-
// A node reachable through multiple parents (e.g. storey→wall AND
|
|
26
|
-
// space→wall containment edges, as our own exporter emits) is visited
|
|
27
|
-
// once per traversal path, which used to duplicate its mesh — the
|
|
28
|
-
// export round-trip multiplied triangle counts by the number of
|
|
29
|
-
// incoming edges. Emit once per (node path, entity context, accumulated
|
|
30
|
-
// transform, resolved presentation): two frames collapse only when
|
|
31
|
-
// every lineage-derived output is identical, i.e. a true alias. A
|
|
32
|
-
// shared type body reached from two instances (different expressIds),
|
|
33
|
-
// genuine instancing (different transforms), or differently styled
|
|
34
|
-
// ancestors (different resolved color) all still emit.
|
|
35
|
-
const emitted = new Set();
|
|
36
|
-
walkComposedFrames(composed, (frame) => {
|
|
37
|
-
const inheritedContext = frame.parent ? contextByFrame.get(frame.parent) ?? null : null;
|
|
38
|
-
const parentTransform = frame.parent ? transformByFrame.get(frame.parent) ?? null : null;
|
|
39
|
-
const context = resolveContext(frame.node, inheritedContext, pathToId);
|
|
40
|
-
// Canonicalize: an explicit identity usd::xformop and "no transform"
|
|
41
|
-
// produce identical geometry and must dedupe against each other.
|
|
42
|
-
const transform = canonicalizeTransform(combineTransforms(getNodeTransform(frame.node), parentTransform));
|
|
43
|
-
const lineage = getNodeLineage(frame);
|
|
44
|
-
contextByFrame.set(frame, context);
|
|
45
|
-
transformByFrame.set(frame, transform);
|
|
46
|
-
const mesh = frame.node.attributes.get(ATTR.MESH);
|
|
47
|
-
if (mesh && context && !context.isTypeDefinition && !isInvisible(lineage)) {
|
|
48
|
-
const color = resolvePresentation(lineage);
|
|
49
|
-
const emitKey = [
|
|
50
|
-
frame.node.path,
|
|
51
|
-
context.expressId,
|
|
52
|
-
transform ? transform.join(',') : 'identity',
|
|
53
|
-
color ? color.join(',') : 'default',
|
|
54
|
-
].join('|');
|
|
55
|
-
if (!emitted.has(emitKey)) {
|
|
56
|
-
emitted.add(emitKey);
|
|
57
|
-
const meshData = convertUsdMesh(mesh, context.expressId, context.ifcType, transform);
|
|
58
|
-
const wire = frame.node.attributes.get(IFCX_APPEARANCE);
|
|
59
|
-
if (wire !== undefined) {
|
|
60
|
-
const appearance = decodeIfcxAppearance(wire, mesh.points.length);
|
|
61
|
-
const pixels = decodeImage(appearance.image.ref, composed.get(appearance.image.ref)?.attributes.get(IFCX_IMAGE));
|
|
62
|
-
meshData.uvs = new Float32Array(appearance.uvs);
|
|
63
|
-
meshData.texture = { ...pixels, repeatS: appearance.repeatS, repeatT: appearance.repeatT };
|
|
64
|
-
}
|
|
65
|
-
if (color) {
|
|
66
|
-
meshData.color = color;
|
|
67
|
-
}
|
|
68
|
-
meshes.push(meshData);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
return meshes;
|
|
73
|
-
}
|
|
74
|
-
const IDENTITY_MATRIX = Object.freeze([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
|
|
75
|
-
/** Map an explicit identity matrix to null so it keys/behaves like "no transform". */
|
|
76
|
-
function canonicalizeTransform(transform) {
|
|
77
|
-
if (!transform)
|
|
78
|
-
return null;
|
|
79
|
-
for (let i = 0; i < 16; i++) {
|
|
80
|
-
if (transform[i] !== IDENTITY_MATRIX[i])
|
|
81
|
-
return transform;
|
|
82
|
-
}
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
function resolveContext(node, context, pathToId) {
|
|
86
|
-
const ifcClass = node.attributes.get(ATTR.CLASS);
|
|
87
|
-
const expressId = pathToId.get(node.path);
|
|
88
|
-
if (expressId === undefined) {
|
|
89
|
-
return context;
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
expressId,
|
|
93
|
-
ifcType: ifcClass?.code,
|
|
94
|
-
isTypeDefinition: (context?.isTypeDefinition ?? false) || isIfcTypeDefinition(node),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Convert USD mesh format to MeshData format.
|
|
99
|
-
* Applies transform in Z-up space, then converts to Y-up for the viewer.
|
|
100
|
-
*/
|
|
101
|
-
function convertUsdMesh(usd, expressId, ifcType, transform) {
|
|
102
|
-
// The homogeneous denominator is validated per-vertex inside applyTransform
|
|
103
|
-
// (a projective matrix can produce a bad w on points other than the first).
|
|
104
|
-
// Process points: apply transform in Z-up space, then convert to Y-up
|
|
105
|
-
const positions = new Float32Array(usd.points.length * 3);
|
|
106
|
-
for (let i = 0; i < usd.points.length; i++) {
|
|
107
|
-
const [x, y, z] = usd.points[i];
|
|
108
|
-
// World position in Z-up space
|
|
109
|
-
let wx, wy, wz;
|
|
110
|
-
if (transform) {
|
|
111
|
-
[wx, wy, wz] = applyTransform(x, y, z, transform);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
wx = x;
|
|
115
|
-
wy = y;
|
|
116
|
-
wz = z;
|
|
117
|
-
}
|
|
118
|
-
// Convert from Z-up to Y-up: swap Y and Z
|
|
119
|
-
// Z-up: X=right, Y=forward, Z=up
|
|
120
|
-
// Y-up: X=right, Y=up, Z=back (negated for right-hand rule)
|
|
121
|
-
positions[i * 3] = wx;
|
|
122
|
-
positions[i * 3 + 1] = wz; // Y-up = Z from Z-up
|
|
123
|
-
positions[i * 3 + 2] = -wy; // Z-back = -Y from Z-up
|
|
124
|
-
}
|
|
125
|
-
// Handle face vertex counts if present (for non-triangle faces)
|
|
126
|
-
let indices;
|
|
127
|
-
if (usd.faceVertexCounts && usd.faceVertexCounts.length > 0) {
|
|
128
|
-
indices = triangulatePolygons(usd.faceVertexIndices, usd.faceVertexCounts);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
// Already triangle indices
|
|
132
|
-
indices = new Uint32Array(usd.faceVertexIndices);
|
|
133
|
-
}
|
|
134
|
-
// Compute or use provided normals
|
|
135
|
-
const normals = usd.normals
|
|
136
|
-
? flattenNormals(usd.normals, transform)
|
|
137
|
-
: computeNormals(positions, indices);
|
|
138
|
-
return {
|
|
139
|
-
expressId,
|
|
140
|
-
ifcType,
|
|
141
|
-
positions,
|
|
142
|
-
indices,
|
|
143
|
-
normals,
|
|
144
|
-
color: [0.8, 0.8, 0.8, 1.0], // Default gray, will be overridden by presentation
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Triangulate polygon faces into triangles.
|
|
149
|
-
*/
|
|
150
|
-
function triangulatePolygons(faceVertexIndices, faceVertexCounts) {
|
|
151
|
-
const triangles = [];
|
|
152
|
-
let indexOffset = 0;
|
|
153
|
-
for (const count of faceVertexCounts) {
|
|
154
|
-
// Fan triangulation
|
|
155
|
-
const v0 = faceVertexIndices[indexOffset];
|
|
156
|
-
for (let i = 1; i < count - 1; i++) {
|
|
157
|
-
triangles.push(v0);
|
|
158
|
-
triangles.push(faceVertexIndices[indexOffset + i]);
|
|
159
|
-
triangles.push(faceVertexIndices[indexOffset + i + 1]);
|
|
160
|
-
}
|
|
161
|
-
indexOffset += count;
|
|
162
|
-
}
|
|
163
|
-
return new Uint32Array(triangles);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Get node-local transform matrix in Z-up space.
|
|
167
|
-
*/
|
|
168
|
-
function getNodeTransform(node) {
|
|
169
|
-
const xform = node.attributes.get(ATTR.TRANSFORM);
|
|
170
|
-
return xform?.transform ? flattenMatrix(xform.transform) : null;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Combine transforms using row-major, right-multiply order.
|
|
174
|
-
* For point * matrix math: childWorld = point * child * parent * root.
|
|
175
|
-
*/
|
|
176
|
-
function combineTransforms(nodeTransform, parentTransform) {
|
|
177
|
-
if (!nodeTransform)
|
|
178
|
-
return parentTransform;
|
|
179
|
-
if (!parentTransform)
|
|
180
|
-
return nodeTransform;
|
|
181
|
-
return multiplyMatrices(nodeTransform, parentTransform);
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Flatten 2D matrix array to 1D Float32Array.
|
|
185
|
-
*/
|
|
186
|
-
function flattenMatrix(m) {
|
|
187
|
-
// USD uses row-major 4x4 matrices
|
|
188
|
-
const result = new Float32Array(16);
|
|
189
|
-
for (let row = 0; row < 4; row++) {
|
|
190
|
-
for (let col = 0; col < 4; col++) {
|
|
191
|
-
result[row * 4 + col] = m[row]?.[col] ?? (row === col ? 1 : 0);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return result;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Apply 4x4 transform matrix to a point.
|
|
198
|
-
*/
|
|
199
|
-
function applyTransform(x, y, z, m) {
|
|
200
|
-
// Row-major matrix multiplication with perspective divide. `w` is computed
|
|
201
|
-
// per-vertex, so a projective/malformed usd::xformop can yield a zero or
|
|
202
|
-
// non-finite denominator on *any* point — validate each, not just the first,
|
|
203
|
-
// or the divide silently produces ±Infinity / NaN positions that poison the mesh.
|
|
204
|
-
const w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
|
205
|
-
if (!Number.isFinite(w) || Math.abs(w) < 1e-12) {
|
|
206
|
-
throw new Error('IFCx geometry: usd::xformop produces non-finite homogeneous w; matrix is malformed or singular');
|
|
207
|
-
}
|
|
208
|
-
return [
|
|
209
|
-
(m[0] * x + m[4] * y + m[8] * z + m[12]) / w,
|
|
210
|
-
(m[1] * x + m[5] * y + m[9] * z + m[13]) / w,
|
|
211
|
-
(m[2] * x + m[6] * y + m[10] * z + m[14]) / w,
|
|
212
|
-
];
|
|
213
|
-
}
|
|
214
|
-
function isIfcTypeDefinition(node) {
|
|
215
|
-
const customData = node.attributes.get('customdata');
|
|
216
|
-
const originalStepInstance = customData?.originalStepInstance;
|
|
217
|
-
if (typeof originalStepInstance !== 'string')
|
|
218
|
-
return false;
|
|
219
|
-
return /=[A-Za-z0-9_]*Type\(/i.test(originalStepInstance);
|
|
220
|
-
}
|
|
221
|
-
function isInvisible(lineage) {
|
|
222
|
-
for (let i = lineage.length - 1; i >= 0; i--) {
|
|
223
|
-
const current = lineage[i];
|
|
224
|
-
const visibility = current.attributes.get(ATTR.VISIBILITY);
|
|
225
|
-
if (typeof visibility?.visibility === 'string') {
|
|
226
|
-
return visibility.visibility.toLowerCase() === 'invisible';
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Resolve presentation attributes (color, opacity) from the lineage.
|
|
233
|
-
* Returns null when no ancestor carries a diffuse color (caller keeps
|
|
234
|
-
* the default). Resolved BEFORE mesh conversion so the dedupe key can
|
|
235
|
-
* distinguish differently-styled traversal paths.
|
|
236
|
-
*/
|
|
237
|
-
function resolvePresentation(lineage) {
|
|
238
|
-
// Check this node and its ancestors for presentation attributes
|
|
239
|
-
for (let i = lineage.length - 1; i >= 0; i--) {
|
|
240
|
-
const current = lineage[i];
|
|
241
|
-
const diffuse = current.attributes.get(ATTR.DIFFUSE_COLOR);
|
|
242
|
-
const opacity = current.attributes.get(ATTR.OPACITY);
|
|
243
|
-
if (diffuse) {
|
|
244
|
-
const [r, g, b] = diffuse;
|
|
245
|
-
const a = opacity ?? 1.0;
|
|
246
|
-
return [r, g, b, a];
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
return null;
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Flatten 2D normals array to 1D, transform, and convert to Y-up.
|
|
253
|
-
*/
|
|
254
|
-
function flattenNormals(normals, transform) {
|
|
255
|
-
const result = new Float32Array(normals.length * 3);
|
|
256
|
-
const normalMatrix = transform ? computeNormalMatrix(transform) : null;
|
|
257
|
-
for (let i = 0; i < normals.length; i++) {
|
|
258
|
-
// Normal in Z-up space
|
|
259
|
-
let [nx, ny, nz] = normals[i];
|
|
260
|
-
if (normalMatrix) {
|
|
261
|
-
// Transform by the inverse-transpose of the local-to-world linear
|
|
262
|
-
// map (see computeNormalMatrix): using the map itself, as positions
|
|
263
|
-
// do, only preserves perpendicularity to the surface when the map
|
|
264
|
-
// is orthogonal (rotation/translation only) — a non-uniform-scale
|
|
265
|
-
// or shearing usd::xformop rotates the normal off the surface.
|
|
266
|
-
const tnx = nx * normalMatrix[0] + ny * normalMatrix[3] + nz * normalMatrix[6];
|
|
267
|
-
const tny = nx * normalMatrix[1] + ny * normalMatrix[4] + nz * normalMatrix[7];
|
|
268
|
-
const tnz = nx * normalMatrix[2] + ny * normalMatrix[5] + nz * normalMatrix[8];
|
|
269
|
-
// Renormalize
|
|
270
|
-
const len = Math.sqrt(tnx ** 2 + tny ** 2 + tnz ** 2);
|
|
271
|
-
if (len > 0) {
|
|
272
|
-
nx = tnx / len;
|
|
273
|
-
ny = tny / len;
|
|
274
|
-
nz = tnz / len;
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
nx = tnx;
|
|
278
|
-
ny = tny;
|
|
279
|
-
nz = tnz;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// Convert from Z-up to Y-up (same as positions)
|
|
283
|
-
result[i * 3] = nx;
|
|
284
|
-
result[i * 3 + 1] = nz; // Y = Z
|
|
285
|
-
result[i * 3 + 2] = -ny; // Z = -Y
|
|
286
|
-
}
|
|
287
|
-
return result;
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Multiply two 4x4 matrices (row-major).
|
|
291
|
-
*/
|
|
292
|
-
function multiplyMatrices(a, b) {
|
|
293
|
-
const result = new Float32Array(16);
|
|
294
|
-
for (let row = 0; row < 4; row++) {
|
|
295
|
-
for (let col = 0; col < 4; col++) {
|
|
296
|
-
let sum = 0;
|
|
297
|
-
for (let k = 0; k < 4; k++) {
|
|
298
|
-
sum += a[row * 4 + k] * b[k * 4 + col];
|
|
299
|
-
}
|
|
300
|
-
result[row * 4 + col] = sum;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return result;
|
|
7
|
+
return executeImportedGraph(composed, pathToId, 1).meshes;
|
|
304
8
|
}
|
|
305
9
|
//# sourceMappingURL=geometry-extractor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry-extractor.js","sourceRoot":"","sources":["../src/geometry-extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"geometry-extractor.js","sourceRoot":"","sources":["../src/geometry-extractor.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAa3D,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,QAAmC,EAAE,QAA6B;IAChG,OAAO,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ComposedNode } from './types.js';
|
|
2
|
+
import { type TraversalFrame } from './traversal.js';
|
|
3
|
+
import { ImportWriter } from './imported-wire.js';
|
|
4
|
+
/** Snapshot ordered source edges. This enumerates source, never geometry work. */
|
|
5
|
+
export declare function sourceGraph(composed: Map<string, ComposedNode>): {
|
|
6
|
+
nodes: ComposedNode[];
|
|
7
|
+
indices: Map<ComposedNode, number>;
|
|
8
|
+
};
|
|
9
|
+
/** Only called when Rust requests this reached node's original attributes. */
|
|
10
|
+
export declare function writeNodeSource(writer: ImportWriter, node: ComposedNode, pathToId: Map<string, number>): void;
|
|
11
|
+
/** Existing format presentation authority; Rust chooses when it is reached. */
|
|
12
|
+
export declare function resolveImportedColor(frame: TraversalFrame): [number, number, number, number] | null;
|
|
13
|
+
//# sourceMappingURL=imported-graph-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imported-graph-source.d.ts","sourceRoot":"","sources":["../src/imported-graph-source.ts"],"names":[],"mappings":"AAGA,OAAO,EAAQ,KAAK,YAAY,EAAqB,MAAM,YAAY,CAAC;AAExE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;;;EAS9D;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAe7G;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQnG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { ATTR } from './types.js';
|
|
5
|
+
import { POINTCLOUD_ATTR_KEYS } from '@ifc-lite/pointcloud';
|
|
6
|
+
import { getNodeLineage } from './traversal.js';
|
|
7
|
+
/** Snapshot ordered source edges. This enumerates source, never geometry work. */
|
|
8
|
+
export function sourceGraph(composed) {
|
|
9
|
+
const nodes = [...composed.values()];
|
|
10
|
+
const indices = new Map(nodes.map((node, index) => [node, index]));
|
|
11
|
+
for (let index = 0; index < nodes.length; index++) {
|
|
12
|
+
for (const child of nodes[index].children.values()) {
|
|
13
|
+
if (!indices.has(child)) {
|
|
14
|
+
indices.set(child, nodes.length);
|
|
15
|
+
nodes.push(child);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return { nodes, indices };
|
|
20
|
+
}
|
|
21
|
+
/** Only called when Rust requests this reached node's original attributes. */
|
|
22
|
+
export function writeNodeSource(writer, node, pathToId) {
|
|
23
|
+
const customData = node.attributes.get('customdata');
|
|
24
|
+
const original = customData?.originalStepInstance;
|
|
25
|
+
const visibility = node.attributes.get(ATTR.VISIBILITY)?.visibility;
|
|
26
|
+
const diffuse = node.attributes.get(ATTR.DIFFUSE_COLOR);
|
|
27
|
+
const opacity = node.attributes.get(ATTR.OPACITY);
|
|
28
|
+
const matrix = node.attributes.get(ATTR.TRANSFORM)?.transform;
|
|
29
|
+
writer.u32(pathToId.get(node.path) === undefined ? 0 : 1)
|
|
30
|
+
.optionalString(typeof original === 'string' ? original : undefined)
|
|
31
|
+
.optionalString(typeof visibility === 'string' ? visibility : undefined).u32(diffuse ? 1 : 0);
|
|
32
|
+
if (diffuse)
|
|
33
|
+
writer.values([diffuse[0], diffuse[1], diffuse[2]]);
|
|
34
|
+
writer.f64(opacity ?? 1).u32(matrix ? 1 : 0);
|
|
35
|
+
if (matrix)
|
|
36
|
+
writer.matrix(matrix);
|
|
37
|
+
writer.u32(node.attributes.get(ATTR.MESH) ? 1 : 0);
|
|
38
|
+
writer.u32([...POINTCLOUD_ATTR_KEYS].some(key => node.attributes.has(key)) ? 1 : 0);
|
|
39
|
+
}
|
|
40
|
+
/** Existing format presentation authority; Rust chooses when it is reached. */
|
|
41
|
+
export function resolveImportedColor(frame) {
|
|
42
|
+
const lineage = getNodeLineage(frame);
|
|
43
|
+
for (let i = lineage.length - 1; i >= 0; i--) {
|
|
44
|
+
const diffuse = lineage[i].attributes.get(ATTR.DIFFUSE_COLOR);
|
|
45
|
+
const opacity = lineage[i].attributes.get(ATTR.OPACITY);
|
|
46
|
+
if (diffuse) {
|
|
47
|
+
const [r, g, b] = diffuse;
|
|
48
|
+
return [r, g, b, opacity ?? 1];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=imported-graph-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imported-graph-source.js","sourceRoot":"","sources":["../src/imported-graph-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ComposedNode } from './types.js';
|
|
2
|
+
import type { MeshData } from './geometry-extractor.js';
|
|
3
|
+
import type { PointCloudExtraction } from './pointcloud-extractor.js';
|
|
4
|
+
/**
|
|
5
|
+
* The host supplies reached source/asset replies. Rust owns traversal, pass
|
|
6
|
+
* ordering, eligibility, occurrence identity, deduplication, numerical operations
|
|
7
|
+
* and completion. No host geometry walker or precomputed operation list exists.
|
|
8
|
+
*/
|
|
9
|
+
export declare function executeImportedGraph(composed: Map<string, ComposedNode>, pathToId: Map<string, number>, mode: 1 | 2 | 3): {
|
|
10
|
+
meshes: MeshData[];
|
|
11
|
+
pointClouds: PointCloudExtraction[];
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=imported-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imported-graph.d.ts","sourceRoot":"","sources":["../src/imported-graph.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAStE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;;;EAqGvH"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { decodeIfcxPointSource } from '@ifc-lite/pointcloud';
|
|
5
|
+
import { ATTR } from './types.js';
|
|
6
|
+
import { appendSourceTransform, ImportedSourceDocument, retainImportedSource } from './imported-source.js';
|
|
7
|
+
import { stageUvs } from './imported-kernel.js';
|
|
8
|
+
import { ImportWriter } from './imported-wire.js';
|
|
9
|
+
import { sourceGraph, writeNodeSource, resolveImportedColor } from './imported-graph-source.js';
|
|
10
|
+
import { IFCX_APPEARANCE, IFCX_IMAGE, createIfcxImageDecoder, decodeIfcxAppearance } from './appearance-wire.js';
|
|
11
|
+
/**
|
|
12
|
+
* The host supplies reached source/asset replies. Rust owns traversal, pass
|
|
13
|
+
* ordering, eligibility, occurrence identity, deduplication, numerical operations
|
|
14
|
+
* and completion. No host geometry walker or precomputed operation list exists.
|
|
15
|
+
*/
|
|
16
|
+
export function executeImportedGraph(composed, pathToId, mode) {
|
|
17
|
+
const { nodes, indices } = sourceGraph(composed);
|
|
18
|
+
const source = new ImportedSourceDocument();
|
|
19
|
+
const open = new ImportWriter(100).u64(source.store).u64(source.revision).u32(mode).u32(composed.size).u32(nodes.length);
|
|
20
|
+
for (const node of nodes) {
|
|
21
|
+
open.identityString(node.path).u32(node.children.size);
|
|
22
|
+
for (const [edge, child] of node.children) {
|
|
23
|
+
const index = indices.get(child);
|
|
24
|
+
if (index === undefined)
|
|
25
|
+
throw new Error('Imported geometry: source graph changed during admission');
|
|
26
|
+
open.identityString(edge).u32(index);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const handle = open.run().u32();
|
|
30
|
+
const meshes = [];
|
|
31
|
+
const pointClouds = [];
|
|
32
|
+
const decodeImage = createIfcxImageDecoder();
|
|
33
|
+
let frame = null;
|
|
34
|
+
let transforms = [];
|
|
35
|
+
try {
|
|
36
|
+
for (;;) {
|
|
37
|
+
const event = new ImportWriter(101).u32(handle).run();
|
|
38
|
+
const kind = event.u32();
|
|
39
|
+
if (kind === 0)
|
|
40
|
+
break;
|
|
41
|
+
const sequence = event.u32();
|
|
42
|
+
const occurrence = event.u64();
|
|
43
|
+
const nodeIndex = event.u32();
|
|
44
|
+
const node = nodes[nodeIndex];
|
|
45
|
+
if (!node)
|
|
46
|
+
throw new Error('Imported geometry: invalid reached source identity');
|
|
47
|
+
if (kind === 1) {
|
|
48
|
+
({ frame, transforms } = readFrame(event, nodes));
|
|
49
|
+
const reply = new ImportWriter(102).u32(handle).u32(sequence);
|
|
50
|
+
writeNodeSource(reply, node, pathToId);
|
|
51
|
+
reply.run();
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const contextIndex = event.u32();
|
|
55
|
+
const contextNode = nodes[contextIndex];
|
|
56
|
+
if (!contextNode || !frame || frame.node !== node)
|
|
57
|
+
throw new Error('Imported geometry: stale reached occurrence');
|
|
58
|
+
const expressId = pathToId.get(contextNode.path);
|
|
59
|
+
if (expressId === undefined)
|
|
60
|
+
throw new Error('Imported geometry: context changed during admission');
|
|
61
|
+
const ifcType = contextNode.attributes.get(ATTR.CLASS)?.code;
|
|
62
|
+
const identity = { store: source.store, revision: source.revision, definition: nodeIndex + 1, occurrence };
|
|
63
|
+
if (kind === 2) {
|
|
64
|
+
const transform = event.floats();
|
|
65
|
+
readColor(event); // Rust's resolved numeric opinion; wire identity is JS-authoritative.
|
|
66
|
+
const color = resolveImportedColor(frame);
|
|
67
|
+
const key = [node.path, expressId, transform.length ? transform.join(',') : 'identity', color ? color.join(',') : 'default'].join('|');
|
|
68
|
+
new ImportWriter(103).u32(handle).u32(sequence).identityString(key).run();
|
|
69
|
+
}
|
|
70
|
+
else if (kind === 3) {
|
|
71
|
+
const raw = node.attributes.get(ATTR.MESH);
|
|
72
|
+
const admitted = source.admitMesh(frame, transforms, raw, identity);
|
|
73
|
+
const reply = new ImportWriter(104).u32(handle).u32(sequence);
|
|
74
|
+
// A mesh authored without `faceVertexIndices` has always presented empty
|
|
75
|
+
// indices (the old `new Uint32Array(undefined)`); it must not abort the import.
|
|
76
|
+
reply.rows(admitted.definition.points).values(admitted.definition.faceVertexIndices ?? [])
|
|
77
|
+
.u32(admitted.definition.faceVertexCounts ? 1 : 0);
|
|
78
|
+
if (admitted.definition.faceVertexCounts)
|
|
79
|
+
reply.values(admitted.definition.faceVertexCounts);
|
|
80
|
+
reply.u32(admitted.definition.normals ? 1 : 0);
|
|
81
|
+
if (admitted.definition.normals)
|
|
82
|
+
reply.rows(admitted.definition.normals);
|
|
83
|
+
reply.run();
|
|
84
|
+
}
|
|
85
|
+
else if (kind === 4) {
|
|
86
|
+
const points = source.pointDefinitions.get(node.path) ?? decodeIfcxPointSource(node.attributes);
|
|
87
|
+
const reply = new ImportWriter(105).u32(handle).u32(sequence).u32(points ? 1 : 0);
|
|
88
|
+
if (points) {
|
|
89
|
+
source.admitPoints(frame, transforms, points, identity);
|
|
90
|
+
reply.values(points.positions).u32(points.colors ? 1 : 0);
|
|
91
|
+
if (points.colors)
|
|
92
|
+
reply.values(points.colors);
|
|
93
|
+
reply.f64(points.pointCount).string(points.sourcePrecision).string(points.sourceEncoding);
|
|
94
|
+
}
|
|
95
|
+
reply.run();
|
|
96
|
+
}
|
|
97
|
+
else if (kind === 5) {
|
|
98
|
+
readColor(event);
|
|
99
|
+
const mesh = { expressId, ifcType, positions: event.floats(), normals: event.floats(),
|
|
100
|
+
indices: event.indices(), color: resolveImportedColor(frame) ?? [0.8, 0.8, 0.8, 1] };
|
|
101
|
+
const wire = node.attributes.get(IFCX_APPEARANCE);
|
|
102
|
+
if (wire !== undefined) {
|
|
103
|
+
const appearance = decodeIfcxAppearance(wire, mesh.positions.length / 3);
|
|
104
|
+
const pixels = decodeImage(appearance.image.ref, composed.get(appearance.image.ref)?.attributes.get(IFCX_IMAGE));
|
|
105
|
+
mesh.uvs = stageUvs(appearance.uvs);
|
|
106
|
+
mesh.texture = { ...pixels, repeatS: appearance.repeatS, repeatT: appearance.repeatT };
|
|
107
|
+
}
|
|
108
|
+
retainImportedSource(mesh, source);
|
|
109
|
+
retainImportedSource(mesh.positions, source);
|
|
110
|
+
meshes.push(mesh);
|
|
111
|
+
new ImportWriter(106).u32(handle).u32(sequence).run();
|
|
112
|
+
}
|
|
113
|
+
else if (kind === 6) {
|
|
114
|
+
const positions = event.floats();
|
|
115
|
+
const colors = event.u32() ? event.floats() : undefined;
|
|
116
|
+
const cloud = { expressId, ifcType, positions, colors, pointCount: event.f64(),
|
|
117
|
+
bbox: { min: event.triple(), max: event.triple() } };
|
|
118
|
+
retainImportedSource(cloud, source);
|
|
119
|
+
retainImportedSource(positions, source);
|
|
120
|
+
pointClouds.push(cloud);
|
|
121
|
+
new ImportWriter(106).u32(handle).u32(sequence).run();
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
throw new Error(`Imported geometry: invalid operation ${kind}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
retainImportedSource(meshes, source);
|
|
128
|
+
retainImportedSource(pointClouds, source);
|
|
129
|
+
return { meshes, pointClouds };
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
new ImportWriter(107).u32(handle).run();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function readColor(event) {
|
|
136
|
+
return event.u32() ? [event.f64(), event.f64(), event.f64(), event.f64()] : null;
|
|
137
|
+
}
|
|
138
|
+
function readFrame(event, nodes) {
|
|
139
|
+
let frame = null;
|
|
140
|
+
let transforms = [];
|
|
141
|
+
const count = event.u32();
|
|
142
|
+
for (let index = 0; index < count; index++) {
|
|
143
|
+
const node = nodes[event.u32()];
|
|
144
|
+
const edgeName = event.optionalIdentityString() ?? null;
|
|
145
|
+
if (!node)
|
|
146
|
+
throw new Error('Imported geometry: invalid source lineage');
|
|
147
|
+
frame = { node, parent: frame, edgeName, depth: index };
|
|
148
|
+
transforms = appendSourceTransform(node, transforms);
|
|
149
|
+
}
|
|
150
|
+
if (!frame)
|
|
151
|
+
throw new Error('Imported geometry: empty source lineage');
|
|
152
|
+
return { frame, transforms };
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=imported-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imported-graph.js","sourceRoot":"","sources":["../src/imported-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface ImportedOperationIdentity {
|
|
2
|
+
store: number;
|
|
3
|
+
revision: number;
|
|
4
|
+
definition: number;
|
|
5
|
+
occurrence: number;
|
|
6
|
+
}
|
|
7
|
+
export type TransformStack = readonly (readonly (readonly number[])[])[];
|
|
8
|
+
export interface ImportedMeshSource {
|
|
9
|
+
points: readonly (readonly number[])[];
|
|
10
|
+
faceVertexIndices: readonly number[];
|
|
11
|
+
faceVertexCounts?: readonly number[];
|
|
12
|
+
normals?: readonly (readonly number[])[];
|
|
13
|
+
}
|
|
14
|
+
/** Execute any versioned numeric or graph-control packet. Returns the complete
|
|
15
|
+
* length/status/payload packet, throwing its UTF-8 error when status is nonzero. */
|
|
16
|
+
export declare function runImportedPacket(input: Uint8Array): Uint8Array;
|
|
17
|
+
export declare function stageTransform(stack: TransformStack): Float32Array | null;
|
|
18
|
+
export declare function executeMesh(source: ImportedMeshSource, stack: TransformStack, identity?: ImportedOperationIdentity): {
|
|
19
|
+
positions: Float32Array;
|
|
20
|
+
normals: Float32Array;
|
|
21
|
+
indices: Uint32Array;
|
|
22
|
+
};
|
|
23
|
+
export declare function executePoints(source: Float32Array | Float64Array | readonly (readonly number[])[], stack: TransformStack, identity?: ImportedOperationIdentity): {
|
|
24
|
+
positions: Float32Array;
|
|
25
|
+
bbox: {
|
|
26
|
+
min: [number, number, number];
|
|
27
|
+
max: [number, number, number];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export declare function stageUvs(values: ArrayLike<number>): Float32Array;
|
|
31
|
+
export declare function computeNormalMatrix(matrix: Float32Array): Float32Array | null;
|
|
32
|
+
export declare function computeNormals(positions: Float32Array, indices: Uint32Array): Float32Array;
|
|
33
|
+
//# sourceMappingURL=imported-kernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imported-kernel.d.ts","sourceRoot":"","sources":["../src/imported-kernel.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CAC1C;AAgDD;oFACoF;AACpF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAgB/D;AA0BD,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,IAAI,CAEzE;AACD,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,yBAAyB,GAAG;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAK7L;AACD,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,yBAAyB,GAAG;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CAAE,CAIpQ;AACD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,YAAY,CAEhE;AACD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,CAE7E;AACD,wBAAgB,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,YAAY,CAG1F"}
|