ExtrasAsMetadata.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { GLTFLoader } from "../glTFLoader.js";
  2. const NAME = "ExtrasAsMetadata";
  3. /**
  4. * Store glTF extras (if present) in BJS objects' metadata
  5. */
  6. export class ExtrasAsMetadata {
  7. _assignExtras(babylonObject, gltfProp) {
  8. if (gltfProp.extras && Object.keys(gltfProp.extras).length > 0) {
  9. const metadata = (babylonObject.metadata = babylonObject.metadata || {});
  10. const gltf = (metadata.gltf = metadata.gltf || {});
  11. gltf.extras = gltfProp.extras;
  12. }
  13. }
  14. /**
  15. * @internal
  16. */
  17. constructor(loader) {
  18. /**
  19. * The name of this extension.
  20. */
  21. this.name = NAME;
  22. /**
  23. * Defines whether this extension is enabled.
  24. */
  25. this.enabled = true;
  26. this._loader = loader;
  27. }
  28. /** @internal */
  29. dispose() {
  30. this._loader = null;
  31. }
  32. /**
  33. * @internal
  34. */
  35. loadNodeAsync(context, node, assign) {
  36. return this._loader.loadNodeAsync(context, node, (babylonTransformNode) => {
  37. this._assignExtras(babylonTransformNode, node);
  38. assign(babylonTransformNode);
  39. });
  40. }
  41. /**
  42. * @internal
  43. */
  44. loadCameraAsync(context, camera, assign) {
  45. return this._loader.loadCameraAsync(context, camera, (babylonCamera) => {
  46. this._assignExtras(babylonCamera, camera);
  47. assign(babylonCamera);
  48. });
  49. }
  50. /**
  51. * @internal
  52. */
  53. createMaterial(context, material, babylonDrawMode) {
  54. const babylonMaterial = this._loader.createMaterial(context, material, babylonDrawMode);
  55. this._assignExtras(babylonMaterial, material);
  56. return babylonMaterial;
  57. }
  58. }
  59. GLTFLoader.RegisterExtension(NAME, (loader) => new ExtrasAsMetadata(loader));
  60. //# sourceMappingURL=ExtrasAsMetadata.js.map