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;
|
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) {
|
function buildRebuildSnapshot(api) {
|
||||||
const builtFeatures = api.features.listBuilt();
|
const builtFeatures = api.features.listBuilt();
|
||||||
const sketchPlanes = {};
|
const sketchPlanes = {};
|
||||||
|
|
@ -82,7 +94,7 @@ function createSolidsApi(getApi) {
|
||||||
for (const profileTarget of profiles) {
|
for (const profileTarget of profiles) {
|
||||||
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
||||||
if (!sketchId || !profileId) continue;
|
if (!sketchId || !profileId) continue;
|
||||||
const loops = profileLoopsFromRuntime(api, profileTarget);
|
const loops = profileLoopsFromTarget(profileTarget) || profileLoopsFromRuntime(api, profileTarget);
|
||||||
if (!loops?.length) continue;
|
if (!loops?.length) continue;
|
||||||
profileLoops[key] = loops;
|
profileLoops[key] = loops;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,15 +31,25 @@ function profileLoopsFromRuntime(api, profileTarget) {
|
||||||
return null;
|
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) {
|
function profileLoopsFromSnapshot(snapshot, profileTarget) {
|
||||||
|
const direct = profileLoopsFromTarget(profileTarget);
|
||||||
|
if (direct?.length) return direct;
|
||||||
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
||||||
if (!key || !sketchId || !profileId) return null;
|
if (!key || !sketchId || !profileId) return null;
|
||||||
const map = snapshot?.profileLoops || {};
|
const map = snapshot?.profileLoops || {};
|
||||||
const loops = map[key];
|
return normalizeProfileLoops(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) })));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeBodyId(featureId, index) {
|
function makeBodyId(featureId, index) {
|
||||||
|
|
@ -556,7 +566,7 @@ async function rebuildGeneratedSolids(api, options = {}) {
|
||||||
for (const profileTarget of profiles) {
|
for (const profileTarget of profiles) {
|
||||||
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
const { sketchId, profileId, key } = resolveProfileTargetRef(profileTarget);
|
||||||
if (!sketchId || !profileId) continue;
|
if (!sketchId || !profileId) continue;
|
||||||
const loops = profileLoopsFromRuntime(api, profileTarget);
|
const loops = profileLoopsFromTarget(profileTarget) || profileLoopsFromRuntime(api, profileTarget);
|
||||||
if (!loops?.length) continue;
|
if (!loops?.length) continue;
|
||||||
profileLoops[key] = loops;
|
profileLoops[key] = loops;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -373,9 +373,24 @@ const toolbar = {
|
||||||
if (!sketchId || !profileId) continue;
|
if (!sketchId || !profileId) continue;
|
||||||
const sketch = api.features.findById(sketchId);
|
const sketch = api.features.findById(sketchId);
|
||||||
if (!sketch || sketch.type !== 'sketch') continue;
|
if (!sketch || sketch.type !== 'sketch') continue;
|
||||||
out.push({
|
const target = {
|
||||||
region_id: `profile:${sketchId}:${profileId}`
|
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;
|
return out;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue