dfg_3dviewer_js_library/viewer/manifesto/manifesto-api.js
2026-06-25 09:11:23 +02:00

77 lines
No EOL
1.6 KiB
JavaScript

import { AIM3DManifest } from "./manifesto";
export async function loadAIM3IFManifest(manifestUrlOrJson) {
const aim3dManifest = new AIM3DManifest(manifestUrlOrJson);
await aim3dManifest.loadManifest();
const modelUrls = [];
let modelTarget = null;
let filteredAnnos = [];
for (const scene of aim3dManifest.scenes) {
scene.background =
scene.backgroundColor ||
"#000000";
const annos = aim3dManifest.annotationsFromScene(scene);
filteredAnnos = annos.filter(
anno =>
anno.motivation?.includes("painting") &&
anno.body?.type === "Model"
);
for (const anno of filteredAnnos) {
const modelUrl = anno.body?.id;
if (modelUrl) {
modelUrls.push(modelUrl);
}
modelTarget = anno.target;
}
}
aim3dManifest.modelUrls = modelUrls;
aim3dManifest.modelTarget = modelTarget;
return {
manifest: aim3dManifest.manifest,
scenes: aim3dManifest.scenes,
annotations: filteredAnnos,
modelUrls,
modelTarget
};
}
export function applyManifestConfig(manifest, objectsConfig) {
const transform =
manifest.AIM3DViewer?.modelTransform;
if (!transform) return;
const model = objectsConfig.models[0];
model.position = {
x: transform.position?.[0] ?? 0,
y: transform.position?.[1] ?? 0,
z: transform.position?.[2] ?? 0
};
model.rotation = {
x: transform.rotation?.x ?? 0,
y: transform.rotation?.y ?? 0,
z: transform.rotation?.z ?? 0
};
model.scale = {
x: transform.scale?.[0] ?? 1,
y: transform.scale?.[1] ?? 1,
z: transform.scale?.[2] ?? 1
};
model.wireframe =
transform.wireframe ?? false;
}