123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import { Nullable } from "babylonjs/types";
- import { TransformNode } from "babylonjs/Meshes/transformNode";
- import { Camera } from "babylonjs/Cameras/camera";
- import { IProperty } from "babylonjs-gltf2interface";
- import { INode, ICamera, IMaterial } from "../glTFLoaderInterfaces";
- import { IGLTFLoaderExtension } from "../glTFLoaderExtension";
- import { GLTFLoader } from "../glTFLoader";
- import { Material } from "babylonjs/Materials/material";
- const NAME = "ExtrasAsMetadata";
- interface ObjectWithMetadata {
- metadata: any;
- }
- /**
- * Store glTF extras (if present) in BJS objects' metadata
- */
- export class ExtrasAsMetadata implements IGLTFLoaderExtension {
- /**
- * The name of this extension.
- */
- public readonly name = NAME;
- /**
- * Defines whether this extension is enabled.
- */
- public enabled = true;
- private _loader: GLTFLoader;
- private _assignExtras(
- babylonObject: ObjectWithMetadata,
- gltfProp: IProperty
- ): void {
- if (gltfProp.extras && Object.keys(gltfProp.extras).length > 0) {
- const metadata = (babylonObject.metadata = babylonObject.metadata || {});
- const gltf = (metadata.gltf = metadata.gltf || {});
- gltf.extras = gltfProp.extras;
- }
- }
- /** @hidden */
- public constructor(loader: GLTFLoader) {
- this._loader = loader;
- }
- /** @hidden */
- public dispose(): void {
- delete this._loader;
- }
- /** @hidden */
- public loadNodeAsync(
- context: string,
- node: INode,
- assign: (babylonTransformNode: TransformNode) => void
- ): Nullable<Promise<TransformNode>> {
- return this._loader.loadNodeAsync(
- context,
- node,
- (babylonTransformNode): void => {
- this._assignExtras(babylonTransformNode, node);
- assign(babylonTransformNode);
- }
- );
- }
- /** @hidden */
- public loadCameraAsync(
- context: string,
- camera: ICamera,
- assign: (babylonCamera: Camera) => void
- ): Nullable<Promise<Camera>> {
- return this._loader.loadCameraAsync(
- context,
- camera,
- (babylonCamera): void => {
- this._assignExtras(babylonCamera, camera);
- assign(babylonCamera);
- }
- );
- }
- /** @hidden */
- public createMaterial(
- context: string,
- material: IMaterial,
- babylonDrawMode: number
- ): Nullable<Material> {
- const babylonMaterial = this._loader.createMaterial(
- context,
- material,
- babylonDrawMode
- );
- this._assignExtras(babylonMaterial, material);
- return babylonMaterial;
- }
- }
- GLTFLoader.RegisterExtension(
- NAME,
- (loader): IGLTFLoaderExtension => new ExtrasAsMetadata(loader)
- );
|