Skip to content

Commit e2e36ac

Browse files
committed
void update boundary provenance
1 parent 5e071d9 commit e2e36ac

3 files changed

Lines changed: 46 additions & 9 deletions

File tree

src/void/api/solids.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,18 @@ function createSolidsApi(getApi) {
6767
return null;
6868
}
6969

70+
function normalizeProfileLoops(loops) {
71+
if (!Array.isArray(loops) || !loops.length) return null;
72+
const out = loops
73+
.filter(loop => Array.isArray(loop) && loop.length >= 3)
74+
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })));
75+
return out.length ? out : null;
76+
}
77+
78+
function profileLoopsFromTarget(profileTarget = {}) {
79+
return normalizeProfileLoops(profileTarget?.loops);
80+
}
81+
7082
function buildRebuildSnapshot(api) {
7183
const builtFeatures = api.features.listBuilt();
7284
const sketchPlanes = {};
@@ -82,7 +94,7 @@ function createSolidsApi(getApi) {
8294
for (const profileTarget of profiles) {
8395
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
8496
if (!sketchId || !profileId) continue;
85-
const loops = profileLoopsFromRuntime(api, profileTarget);
97+
const loops = profileLoopsFromTarget(profileTarget) || profileLoopsFromRuntime(api, profileTarget);
8698
if (!loops?.length) continue;
8799
profileLoops[key] = loops;
88100
}

src/void/solid/rebuild.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,25 @@ function profileLoopsFromRuntime(api, profileTarget) {
3131
return null;
3232
}
3333

34+
function normalizeProfileLoops(loops) {
35+
if (!Array.isArray(loops) || !loops.length) return null;
36+
const out = loops
37+
.filter(loop => Array.isArray(loop) && loop.length >= 3)
38+
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })));
39+
return out.length ? out : null;
40+
}
41+
42+
function profileLoopsFromTarget(profileTarget = {}) {
43+
return normalizeProfileLoops(profileTarget?.loops);
44+
}
45+
3446
function profileLoopsFromSnapshot(snapshot, profileTarget) {
47+
const direct = profileLoopsFromTarget(profileTarget);
48+
if (direct?.length) return direct;
3549
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
3650
if (!key || !sketchId || !profileId) return null;
3751
const map = snapshot?.profileLoops || {};
38-
const loops = map[key];
39-
if (!Array.isArray(loops) || !loops.length) return null;
40-
return loops
41-
.filter(loop => Array.isArray(loop) && loop.length >= 3)
42-
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })));
52+
return normalizeProfileLoops(map[key]);
4353
}
4454

4555
function makeBodyId(featureId, index) {
@@ -556,7 +566,7 @@ async function rebuildGeneratedSolids(api, options = {}) {
556566
for (const profileTarget of profiles) {
557567
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
558568
if (!sketchId || !profileId) continue;
559-
const loops = profileLoopsFromRuntime(api, profileTarget);
569+
const loops = profileLoopsFromTarget(profileTarget) || profileLoopsFromRuntime(api, profileTarget);
560570
if (!loops?.length) continue;
561571
profileLoops[key] = loops;
562572
}

src/void/toolbar.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,9 +373,24 @@ const toolbar = {
373373
if (!sketchId || !profileId) continue;
374374
const sketch = api.features.findById(sketchId);
375375
if (!sketch || sketch.type !== 'sketch') continue;
376-
out.push({
376+
const target = {
377377
region_id: `profile:${sketchId}:${profileId}`
378-
});
378+
};
379+
const rec = api.sketchRuntime?.getRecord?.(sketchId);
380+
const view = rec?.entityViews?.get?.(profileId);
381+
const rawLoops = view?.object?.userData?.sketchProfileLoops
382+
|| (view?.object?.userData?.sketchProfileLoop ? [view.object.userData.sketchProfileLoop] : null)
383+
|| view?.entity?.loops
384+
|| (view?.entity?.loop ? [view.entity.loop] : null);
385+
const loops = Array.isArray(rawLoops)
386+
? rawLoops
387+
.filter(loop => Array.isArray(loop) && loop.length >= 3)
388+
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })))
389+
: [];
390+
if (loops.length) {
391+
target.loops = loops;
392+
}
393+
out.push(target);
379394
}
380395
return out;
381396
},

0 commit comments

Comments
 (0)