diff --git a/src/lib/modelTransforms.ts b/src/lib/modelTransforms.ts index 58d8807..c3ef211 100644 --- a/src/lib/modelTransforms.ts +++ b/src/lib/modelTransforms.ts @@ -33,3 +33,25 @@ export function worldToModelLocal( g.worldToLocal(v); return { x: v.x, y: v.y, z: v.z }; } + +export function modelLocalToWorld( + modelId: string | null | undefined, + p: { x: number; y: number; z: number }, +): { x: number; y: number; z: number } | null { + const g = getModelLocalGroup(modelId); + if (!g) return null; + g.updateWorldMatrix(true, false); + const v = new THREE.Vector3(p.x, p.y, p.z); + g.localToWorld(v); + return { x: v.x, y: v.y, z: v.z }; +} + +export function getModelWorldScaleFactor(modelId: string | null | undefined): number { + const g = getModelLocalGroup(modelId); + if (!g) return 1; + g.updateWorldMatrix(true, false); + const s = new THREE.Vector3(); + g.getWorldScale(s); + const factor = (Math.abs(s.x) + Math.abs(s.y) + Math.abs(s.z)) / 3; + return Number.isFinite(factor) && factor > 1e-6 ? factor : 1; +}