UNPKG

@gltf-transform/functions

Version:

Functions for common glTF modifications, written using the core API

35 lines (30 loc) 952 B
import { Node, Scene } from '@gltf-transform/core'; /** * Finds the parent {@link Scene Scenes} associated with the given {@link Node}. * In most cases a Node is associated with only one Scene, but it is possible * for a Node to be located in two or more Scenes, or none at all. * * Example: * * ```typescript * import { listNodeScenes } from '@gltf-transform/functions'; * * const node = document.getRoot().listNodes() * .find((node) => node.getName() === 'MyNode'); * * const scenes = listNodeScenes(node); * ``` */ export function listNodeScenes(node: Node): Scene[] { const visited = new Set<Node>(); let child = node; let parent: Node | null; while ((parent = child.getParentNode() as Node | null)) { if (visited.has(parent)) { throw new Error('Circular dependency in scene graph.'); } visited.add(parent); child = parent; } return child.listParents().filter((parent) => parent instanceof Scene) as Scene[]; }