@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.
90 lines (86 loc) • 3.01 kB
JavaScript
import { bo as unregisterGLTFExtension, bp as registerGLTFExtension } from './index-MZPybX0H.esm.js';
import { A as AddObjectAccessorToKey } from './objectModelMapping-De5EKNEZ.esm.js';
import './spotLight.pure-CRdZC6Ci.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) {
babylonTransformNode.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-B1kCWATG.esm.js.map