void update boundary provenance
This commit is contained in:
parent
5e071d9ff3
commit
e2e36aca03
3 changed files with 46 additions and 9 deletions
|
|
@ -67,6 +67,18 @@ function createSolidsApi(getApi) {
|
|||
return null;
|
||||
}
|
||||
|
||||
function normalizeProfileLoops(loops) {
|
||||
if (!Array.isArray(loops) || !loops.length) return null;
|
||||
const out = loops
|
||||
.filter(loop => Array.isArray(loop) && loop.length >= 3)
|
||||
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })));
|
||||
return out.length ? out : null;
|
||||
}
|
||||
|
||||
function profileLoopsFromTarget(profileTarget = {}) {
|
||||
return normalizeProfileLoops(profileTarget?.loops);
|
||||
}
|
||||
|
||||
function buildRebuildSnapshot(api) {
|
||||
const builtFeatures = api.features.listBuilt();
|
||||
const sketchPlanes = {};
|
||||
|
|
@ -82,7 +94,7 @@ function createSolidsApi(getApi) {
|
|||
for (const profileTarget of profiles) {
|
||||
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
||||
if (!sketchId || !profileId) continue;
|
||||
const loops = profileLoopsFromRuntime(api, profileTarget);
|
||||
const loops = profileLoopsFromTarget(profileTarget) || profileLoopsFromRuntime(api, profileTarget);
|
||||
if (!loops?.length) continue;
|
||||
profileLoops[key] = loops;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,15 +31,25 @@ function profileLoopsFromRuntime(api, profileTarget) {
|
|||
return null;
|
||||
}
|
||||
|
||||
function normalizeProfileLoops(loops) {
|
||||
if (!Array.isArray(loops) || !loops.length) return null;
|
||||
const out = loops
|
||||
.filter(loop => Array.isArray(loop) && loop.length >= 3)
|
||||
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })));
|
||||
return out.length ? out : null;
|
||||
}
|
||||
|
||||
function profileLoopsFromTarget(profileTarget = {}) {
|
||||
return normalizeProfileLoops(profileTarget?.loops);
|
||||
}
|
||||
|
||||
function profileLoopsFromSnapshot(snapshot, profileTarget) {
|
||||
const direct = profileLoopsFromTarget(profileTarget);
|
||||
if (direct?.length) return direct;
|
||||
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
||||
if (!key || !sketchId || !profileId) return null;
|
||||
const map = snapshot?.profileLoops || {};
|
||||
const loops = map[key];
|
||||
if (!Array.isArray(loops) || !loops.length) return null;
|
||||
return loops
|
||||
.filter(loop => Array.isArray(loop) && loop.length >= 3)
|
||||
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })));
|
||||
return normalizeProfileLoops(map[key]);
|
||||
}
|
||||
|
||||
function makeBodyId(featureId, index) {
|
||||
|
|
@ -556,7 +566,7 @@ async function rebuildGeneratedSolids(api, options = {}) {
|
|||
for (const profileTarget of profiles) {
|
||||
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
||||
if (!sketchId || !profileId) continue;
|
||||
const loops = profileLoopsFromRuntime(api, profileTarget);
|
||||
const loops = profileLoopsFromTarget(profileTarget) || profileLoopsFromRuntime(api, profileTarget);
|
||||
if (!loops?.length) continue;
|
||||
profileLoops[key] = loops;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -373,9 +373,24 @@ const toolbar = {
|
|||
if (!sketchId || !profileId) continue;
|
||||
const sketch = api.features.findById(sketchId);
|
||||
if (!sketch || sketch.type !== 'sketch') continue;
|
||||
out.push({
|
||||
const target = {
|
||||
region_id: `profile:${sketchId}:${profileId}`
|
||||
});
|
||||
};
|
||||
const rec = api.sketchRuntime?.getRecord?.(sketchId);
|
||||
const view = rec?.entityViews?.get?.(profileId);
|
||||
const rawLoops = view?.object?.userData?.sketchProfileLoops
|
||||
|| (view?.object?.userData?.sketchProfileLoop ? [view.object.userData.sketchProfileLoop] : null)
|
||||
|| view?.entity?.loops
|
||||
|| (view?.entity?.loop ? [view.entity.loop] : null);
|
||||
const loops = Array.isArray(rawLoops)
|
||||
? rawLoops
|
||||
.filter(loop => Array.isArray(loop) && loop.length >= 3)
|
||||
.map(loop => loop.map(p => ({ x: Number(p?.x || 0), y: Number(p?.y || 0) })))
|
||||
: [];
|
||||
if (loops.length) {
|
||||
target.loops = loops;
|
||||
}
|
||||
out.push(target);
|
||||
}
|
||||
return out;
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue