UNPKG

@babylonjs/viewer

Version:

The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.

101 lines (97 loc) 3.8 kB
import { bo as unregisterGLTFExtension, bp as registerGLTFExtension } from './index-HyNDfLMI.esm.js'; import { A as AddObjectAccessorToKey } from './objectModelMapping-OlchA9xj.esm.js'; import './spotLight.pure-C65PiYTZ.esm.js'; const NAME = "KHR_node_visibility"; // object model extension for visibility /** * Loader extension for KHR_node_visibility */ // eslint-disable-next-line @typescript-eslint/naming-convention class KHR_node_visibility { /** * @internal */ constructor(loader) { /** * The name of this extension. */ this.name = NAME; this._loader = loader; this.enabled = loader.isExtensionUsed(NAME); } onReady() { if (!this._loader) { return; } const nodes = this._loader.gltf.nodes; if (nodes) { for (const node of nodes) { const babylonTransformNode = node._babylonTransformNode; if (babylonTransformNode) { babylonTransformNode.inheritVisibility = true; if (node.extensions && node.extensions.KHR_node_visibility && node.extensions.KHR_node_visibility.visible === false) { // Apply ``visible: false`` to the same set of meshes the // runtime ``pointer/set`` accessor writes to. The wrapping // ``babylonTransformNode`` is often a non-rendering // ``TransformNode``, so setting ``isVisible`` only there // leaves the primitive child meshes visible. Mirror the // accessor below so assets that author hidden defaults // (e.g. MagicBall.glb's FortuneWords) start hidden as intended. babylonTransformNode.isVisible = false; node._primitiveBabylonMeshes?.forEach((mesh) => { mesh.inheritVisibility = true; mesh.isVisible = false; }); } } } } } dispose() { delete this._loader; } } let _Registered = false; /** * Registers the KHR_node_visibility glTF loader extension. * Safe to call multiple times; only the first call has an effect. */ // eslint-disable-next-line @typescript-eslint/naming-convention function RegisterKHR_node_visibility() { if (_Registered) { return; } _Registered = true; AddObjectAccessorToKey("/nodes/{}/extensions/KHR_node_visibility/visible", { get: (node) => { const tn = node._babylonTransformNode; if (tn && tn.isVisible !== undefined) { return tn.isVisible; } return true; }, set: (value, node) => { node._primitiveBabylonMeshes?.forEach((mesh) => { mesh.inheritVisibility = true; }); if (node._babylonTransformNode) { node._babylonTransformNode.isVisible = value; } node._primitiveBabylonMeshes?.forEach((mesh) => { mesh.isVisible = value; }); }, getTarget: (node) => node._babylonTransformNode, getPropertyName: [() => "isVisible"], type: "boolean", }); unregisterGLTFExtension(NAME); registerGLTFExtension(NAME, true, (loader) => new KHR_node_visibility(loader)); } /** * Re-exports the pure implementation and applies the runtime registration side effect. * Import "./KHR_node_visibility.pure" for tree-shakeable, side-effect-free usage. */ RegisterKHR_node_visibility(); export { KHR_node_visibility, RegisterKHR_node_visibility }; //# sourceMappingURL=KHR_node_visibility-DI6CPjHN.esm.js.map