@babylonjs/loaders
Version:
For usage documentation please visit https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes/.
69 lines • 2.5 kB
JavaScript
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
import { AddObjectAccessorToKey } from "./objectModelMapping.js";
const NAME = "KHR_node_visibility";
// object model extension for visibility
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",
});
/**
* Loader extension for KHR_node_visibility
*/
// eslint-disable-next-line @typescript-eslint/naming-convention
export class KHR_node_visibility {
/**
* @internal
*/
constructor(loader) {
/**
* The name of this extension.
*/
this.name = NAME;
this._loader = loader;
this.enabled = loader.isExtensionUsed(NAME);
}
// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises
async onReady() {
this._loader.gltf.nodes?.forEach((node) => {
node._primitiveBabylonMeshes?.forEach((mesh) => {
mesh.inheritVisibility = true;
});
// When the JSON Pointer is used we need to change both the transform node and the primitive meshes to the new value.
if (node.extensions?.KHR_node_visibility) {
if (node.extensions?.KHR_node_visibility.visible === false) {
if (node._babylonTransformNode) {
node._babylonTransformNode.isVisible = false;
}
node._primitiveBabylonMeshes?.forEach((mesh) => {
mesh.isVisible = false;
});
}
}
});
}
dispose() {
this._loader = null;
}
}
unregisterGLTFExtension(NAME);
registerGLTFExtension(NAME, true, (loader) => new KHR_node_visibility(loader));
//# sourceMappingURL=KHR_node_visibility.js.map