@babylonjs/loaders 5.21.0 → 5.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. package/OBJ/mtlFileLoader.js +25 -27
  2. package/OBJ/mtlFileLoader.js.map +1 -1
  3. package/OBJ/objFileLoader.js +112 -124
  4. package/OBJ/objFileLoader.js.map +1 -1
  5. package/OBJ/solidParser.js +118 -125
  6. package/OBJ/solidParser.js.map +1 -1
  7. package/STL/stlFileLoader.js +81 -69
  8. package/STL/stlFileLoader.js.map +1 -1
  9. package/glTF/1.0/glTFBinaryExtension.js +26 -30
  10. package/glTF/1.0/glTFBinaryExtension.js.map +1 -1
  11. package/glTF/1.0/glTFLoader.js +409 -432
  12. package/glTF/1.0/glTFLoader.js.map +1 -1
  13. package/glTF/1.0/glTFLoaderUtils.js +33 -37
  14. package/glTF/1.0/glTFLoaderUtils.js.map +1 -1
  15. package/glTF/1.0/glTFMaterialsCommonExtension.js +27 -31
  16. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +1 -1
  17. package/glTF/2.0/Extensions/EXT_lights_image_based.js +48 -59
  18. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +1 -1
  19. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +24 -29
  20. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
  21. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +13 -16
  22. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +1 -1
  23. package/glTF/2.0/Extensions/EXT_texture_webp.js +13 -16
  24. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
  25. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +22 -26
  26. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +1 -1
  27. package/glTF/2.0/Extensions/KHR_animation_pointer.js +63 -76
  28. package/glTF/2.0/Extensions/KHR_animation_pointer.js.map +1 -1
  29. package/glTF/2.0/Extensions/KHR_animation_pointer.map.js +90 -120
  30. package/glTF/2.0/Extensions/KHR_animation_pointer.map.js.map +1 -1
  31. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +25 -28
  32. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
  33. package/glTF/2.0/Extensions/KHR_lights_punctual.js +27 -30
  34. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
  35. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +25 -28
  36. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  37. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +15 -18
  38. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
  39. package/glTF/2.0/Extensions/KHR_materials_ior.js +21 -24
  40. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
  41. package/glTF/2.0/Extensions/KHR_materials_iridescence.js +27 -31
  42. package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
  43. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +24 -27
  44. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
  45. package/glTF/2.0/Extensions/KHR_materials_sheen.js +23 -26
  46. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
  47. package/glTF/2.0/Extensions/KHR_materials_specular.js +23 -26
  48. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
  49. package/glTF/2.0/Extensions/KHR_materials_translucency.js +20 -23
  50. package/glTF/2.0/Extensions/KHR_materials_translucency.js.map +1 -1
  51. package/glTF/2.0/Extensions/KHR_materials_transmission.js +82 -86
  52. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
  53. package/glTF/2.0/Extensions/KHR_materials_unlit.js +19 -22
  54. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
  55. package/glTF/2.0/Extensions/KHR_materials_variants.js +79 -97
  56. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +1 -1
  57. package/glTF/2.0/Extensions/KHR_materials_volume.js +20 -23
  58. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
  59. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +6 -8
  60. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +1 -1
  61. package/glTF/2.0/Extensions/KHR_texture_basisu.js +13 -16
  62. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
  63. package/glTF/2.0/Extensions/KHR_texture_transform.js +12 -15
  64. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
  65. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +12 -15
  66. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +1 -1
  67. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +77 -95
  68. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +1 -1
  69. package/glTF/2.0/Extensions/MSFT_lod.js +114 -139
  70. package/glTF/2.0/Extensions/MSFT_lod.js.map +1 -1
  71. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +12 -15
  72. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
  73. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +12 -15
  74. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
  75. package/glTF/2.0/glTFLoader.js +739 -823
  76. package/glTF/2.0/glTFLoader.js.map +1 -1
  77. package/glTF/glTFFileLoader.js +337 -404
  78. package/glTF/glTFFileLoader.js.map +1 -1
  79. package/glTF/glTFValidation.js +32 -39
  80. package/glTF/glTFValidation.js.map +1 -1
  81. package/legacy/legacy-glTF.js +3 -3
  82. package/legacy/legacy-glTF.js.map +1 -1
  83. package/legacy/legacy-glTF1.js +2 -2
  84. package/legacy/legacy-glTF1.js.map +1 -1
  85. package/legacy/legacy-glTF2.js +12 -12
  86. package/legacy/legacy-glTF2.js.map +1 -1
  87. package/legacy/legacy-objFileLoader.js +2 -2
  88. package/legacy/legacy-objFileLoader.js.map +1 -1
  89. package/legacy/legacy-stlFileLoader.js +2 -2
  90. package/legacy/legacy-stlFileLoader.js.map +1 -1
  91. package/package.json +5 -8
@@ -4,8 +4,8 @@ import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js"
4
4
  /**
5
5
  * Class reading and parsing the MTL file bundled with the obj file.
6
6
  */
7
- var MTLFileLoader = /** @class */ (function () {
8
- function MTLFileLoader() {
7
+ export class MTLFileLoader {
8
+ constructor() {
9
9
  /**
10
10
  * All material loaded from the mtl will be set here
11
11
  */
@@ -22,31 +22,31 @@ var MTLFileLoader = /** @class */ (function () {
22
22
  * @param rootUrl defines the rooturl to use in order to load relative dependencies
23
23
  * @param assetContainer defines the asset container to store the material in (can be null)
24
24
  */
25
- MTLFileLoader.prototype.parseMTL = function (scene, data, rootUrl, assetContainer) {
25
+ parseMTL(scene, data, rootUrl, assetContainer) {
26
26
  if (data instanceof ArrayBuffer) {
27
27
  return;
28
28
  }
29
29
  //Split the lines from the file
30
- var lines = data.split("\n");
30
+ const lines = data.split("\n");
31
31
  // whitespace char ie: [ \t\r\n\f]
32
- var delimiter_pattern = /\s+/;
32
+ const delimiter_pattern = /\s+/;
33
33
  //Array with RGB colors
34
- var color;
34
+ let color;
35
35
  //New material
36
- var material = null;
36
+ let material = null;
37
37
  //Look at each line
38
- for (var i = 0; i < lines.length; i++) {
39
- var line = lines[i].trim();
38
+ for (let i = 0; i < lines.length; i++) {
39
+ const line = lines[i].trim();
40
40
  // Blank line or comment
41
41
  if (line.length === 0 || line.charAt(0) === "#") {
42
42
  continue;
43
43
  }
44
44
  //Get the first parameter (keyword)
45
- var pos = line.indexOf(" ");
46
- var key = pos >= 0 ? line.substring(0, pos) : line;
45
+ const pos = line.indexOf(" ");
46
+ let key = pos >= 0 ? line.substring(0, pos) : line;
47
47
  key = key.toLowerCase();
48
48
  //Get the data following the key
49
- var value = pos >= 0 ? line.substring(pos + 1).trim() : "";
49
+ const value = pos >= 0 ? line.substring(pos + 1).trim() : "";
50
50
  //This mtl keyword will create the new material
51
51
  if (key === "newmtl") {
52
52
  //Check if it is the first material.
@@ -126,9 +126,9 @@ var MTLFileLoader = /** @class */ (function () {
126
126
  }
127
127
  else if (key === "map_bump" && material) {
128
128
  //The bump texture
129
- var values = value.split(delimiter_pattern);
130
- var bumpMultiplierIndex = values.indexOf("-bm");
131
- var bumpMultiplier = null;
129
+ const values = value.split(delimiter_pattern);
130
+ const bumpMultiplierIndex = values.indexOf("-bm");
131
+ let bumpMultiplier = null;
132
132
  if (bumpMultiplierIndex >= 0) {
133
133
  bumpMultiplier = values[bumpMultiplierIndex + 1];
134
134
  values.splice(bumpMultiplierIndex, 2); // remove
@@ -187,7 +187,7 @@ var MTLFileLoader = /** @class */ (function () {
187
187
  if (material) {
188
188
  this.materials.push(material);
189
189
  }
190
- };
190
+ }
191
191
  /**
192
192
  * Gets the texture for the material.
193
193
  *
@@ -199,14 +199,14 @@ var MTLFileLoader = /** @class */ (function () {
199
199
  * @param scene
200
200
  * @return The Texture
201
201
  */
202
- MTLFileLoader._GetTexture = function (rootUrl, value, scene) {
202
+ static _GetTexture(rootUrl, value, scene) {
203
203
  if (!value) {
204
204
  return null;
205
205
  }
206
- var url = rootUrl;
206
+ let url = rootUrl;
207
207
  // Load from input file.
208
208
  if (rootUrl === "file:") {
209
- var lastDelimiter = value.lastIndexOf("\\");
209
+ let lastDelimiter = value.lastIndexOf("\\");
210
210
  if (lastDelimiter === -1) {
211
211
  lastDelimiter = value.lastIndexOf("/");
212
212
  }
@@ -222,12 +222,10 @@ var MTLFileLoader = /** @class */ (function () {
222
222
  url += value;
223
223
  }
224
224
  return new Texture(url, scene, false, MTLFileLoader.INVERT_TEXTURE_Y);
225
- };
226
- /**
227
- * Invert Y-Axis of referenced textures on load
228
- */
229
- MTLFileLoader.INVERT_TEXTURE_Y = true;
230
- return MTLFileLoader;
231
- }());
232
- export { MTLFileLoader };
225
+ }
226
+ }
227
+ /**
228
+ * Invert Y-Axis of referenced textures on load
229
+ */
230
+ MTLFileLoader.INVERT_TEXTURE_Y = true;
233
231
  //# sourceMappingURL=mtlFileLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mtlFileLoader.js","sourceRoot":"","sources":["../../../../../lts/loaders/generated/OBJ/mtlFileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\n\r\nimport type { Scene } from \"core/scene\";\r\nimport type { AssetContainer } from \"core/assetContainer\";\r\n/**\r\n * Class reading and parsing the MTL file bundled with the obj file.\r\n */\r\nexport class MTLFileLoader {\r\n /**\r\n * Invert Y-Axis of referenced textures on load\r\n */\r\n public static INVERT_TEXTURE_Y = true;\r\n\r\n /**\r\n * All material loaded from the mtl will be set here\r\n */\r\n public materials: StandardMaterial[] = [];\r\n\r\n /**\r\n * This function will read the mtl file and create each material described inside\r\n * This function could be improve by adding :\r\n * -some component missing (Ni, Tf...)\r\n * -including the specific options available\r\n *\r\n * @param scene defines the scene the material will be created in\r\n * @param data defines the mtl data to parse\r\n * @param rootUrl defines the rooturl to use in order to load relative dependencies\r\n * @param assetContainer defines the asset container to store the material in (can be null)\r\n */\r\n public parseMTL(scene: Scene, data: string | ArrayBuffer, rootUrl: string, assetContainer: Nullable<AssetContainer>): void {\r\n if (data instanceof ArrayBuffer) {\r\n return;\r\n }\r\n\r\n //Split the lines from the file\r\n const lines = data.split(\"\\n\");\r\n // whitespace char ie: [ \\t\\r\\n\\f]\r\n const delimiter_pattern = /\\s+/;\r\n //Array with RGB colors\r\n let color: number[];\r\n //New material\r\n let material: Nullable<StandardMaterial> = null;\r\n\r\n //Look at each line\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n\r\n // Blank line or comment\r\n if (line.length === 0 || line.charAt(0) === \"#\") {\r\n continue;\r\n }\r\n\r\n //Get the first parameter (keyword)\r\n const pos = line.indexOf(\" \");\r\n let key = pos >= 0 ? line.substring(0, pos) : line;\r\n key = key.toLowerCase();\r\n\r\n //Get the data following the key\r\n const value: string = pos >= 0 ? line.substring(pos + 1).trim() : \"\";\r\n\r\n //This mtl keyword will create the new material\r\n if (key === \"newmtl\") {\r\n //Check if it is the first material.\r\n // Materials specifications are described after this keyword.\r\n if (material) {\r\n //Add the previous material in the material array.\r\n this.materials.push(material);\r\n }\r\n //Create a new material.\r\n // value is the name of the material read in the mtl file\r\n\r\n scene._blockEntityCollection = !!assetContainer;\r\n material = new StandardMaterial(value, scene);\r\n material._parentContainer = assetContainer;\r\n scene._blockEntityCollection = false;\r\n } else if (key === \"kd\" && material) {\r\n // Diffuse color (color under white light) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = <number[]>value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set tghe color into the material\r\n material.diffuseColor = Color3.FromArray(color);\r\n } else if (key === \"ka\" && material) {\r\n // Ambient color (color under shadow) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = <number[]>value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set tghe color into the material\r\n material.ambientColor = Color3.FromArray(color);\r\n } else if (key === \"ks\" && material) {\r\n // Specular color (color when light is reflected from shiny surface) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = <number[]>value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set the color into the material\r\n material.specularColor = Color3.FromArray(color);\r\n } else if (key === \"ke\" && material) {\r\n // Emissive color using RGB values\r\n color = value.split(delimiter_pattern, 3).map(parseFloat);\r\n material.emissiveColor = Color3.FromArray(color);\r\n } else if (key === \"ns\" && material) {\r\n //value = \"Integer\"\r\n material.specularPower = parseFloat(value);\r\n } else if (key === \"d\" && material) {\r\n //d is dissolve for current material. It mean alpha for BABYLON\r\n material.alpha = parseFloat(value);\r\n\r\n //Texture\r\n //This part can be improved by adding the possible options of texture\r\n } else if (key === \"map_ka\" && material) {\r\n // ambient texture map with a loaded image\r\n //We must first get the folder of the image\r\n material.ambientTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n } else if (key === \"map_kd\" && material) {\r\n // Diffuse texture map with a loaded image\r\n material.diffuseTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n } else if (key === \"map_ks\" && material) {\r\n // Specular texture map with a loaded image\r\n //We must first get the folder of the image\r\n material.specularTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n } else if (key === \"map_ns\") {\r\n //Specular\r\n //Specular highlight component\r\n //We must first get the folder of the image\r\n //\r\n //Not supported by BABYLON\r\n //\r\n // continue;\r\n } else if (key === \"map_bump\" && material) {\r\n //The bump texture\r\n const values = value.split(delimiter_pattern);\r\n const bumpMultiplierIndex = values.indexOf(\"-bm\");\r\n let bumpMultiplier: Nullable<string> = null;\r\n\r\n if (bumpMultiplierIndex >= 0) {\r\n bumpMultiplier = values[bumpMultiplierIndex + 1];\r\n values.splice(bumpMultiplierIndex, 2); // remove\r\n }\r\n\r\n material.bumpTexture = MTLFileLoader._GetTexture(rootUrl, values.join(\" \"), scene);\r\n if (material.bumpTexture && bumpMultiplier !== null) {\r\n material.bumpTexture.level = parseFloat(bumpMultiplier);\r\n }\r\n } else if (key === \"map_d\" && material) {\r\n // The dissolve of the material\r\n material.opacityTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n\r\n //Options for illumination\r\n } else if (key === \"illum\") {\r\n //Illumination\r\n if (value === \"0\") {\r\n //That mean Kd == Kd\r\n } else if (value === \"1\") {\r\n //Color on and Ambient on\r\n } else if (value === \"2\") {\r\n //Highlight on\r\n } else if (value === \"3\") {\r\n //Reflection on and Ray trace on\r\n } else if (value === \"4\") {\r\n //Transparency: Glass on, Reflection: Ray trace on\r\n } else if (value === \"5\") {\r\n //Reflection: Fresnel on and Ray trace on\r\n } else if (value === \"6\") {\r\n //Transparency: Refraction on, Reflection: Fresnel off and Ray trace on\r\n } else if (value === \"7\") {\r\n //Transparency: Refraction on, Reflection: Fresnel on and Ray trace on\r\n } else if (value === \"8\") {\r\n //Reflection on and Ray trace off\r\n } else if (value === \"9\") {\r\n //Transparency: Glass on, Reflection: Ray trace off\r\n } else if (value === \"10\") {\r\n //Casts shadows onto invisible surfaces\r\n }\r\n } else {\r\n // console.log(\"Unhandled expression at line : \" + i +'\\n' + \"with value : \" + line);\r\n }\r\n }\r\n //At the end of the file, add the last material\r\n if (material) {\r\n this.materials.push(material);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture for the material.\r\n *\r\n * If the material is imported from input file,\r\n * We sanitize the url to ensure it takes the texture from aside the material.\r\n *\r\n * @param rootUrl The root url to load from\r\n * @param value The value stored in the mtl\r\n * @param scene\r\n * @return The Texture\r\n */\r\n private static _GetTexture(rootUrl: string, value: string, scene: Scene): Nullable<Texture> {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let url = rootUrl;\r\n // Load from input file.\r\n if (rootUrl === \"file:\") {\r\n let lastDelimiter = value.lastIndexOf(\"\\\\\");\r\n if (lastDelimiter === -1) {\r\n lastDelimiter = value.lastIndexOf(\"/\");\r\n }\r\n\r\n if (lastDelimiter > -1) {\r\n url += value.substr(lastDelimiter + 1);\r\n } else {\r\n url += value;\r\n }\r\n }\r\n // Not from input file.\r\n else {\r\n url += value;\r\n }\r\n\r\n return new Texture(url, scene, false, MTLFileLoader.INVERT_TEXTURE_Y);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"mtlFileLoader.js","sourceRoot":"","sources":["../../../../../lts/loaders/generated/OBJ/mtlFileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\n\r\nimport type { Scene } from \"core/scene\";\r\nimport type { AssetContainer } from \"core/assetContainer\";\r\n/**\r\n * Class reading and parsing the MTL file bundled with the obj file.\r\n */\r\nexport class MTLFileLoader {\r\n /**\r\n * Invert Y-Axis of referenced textures on load\r\n */\r\n public static INVERT_TEXTURE_Y = true;\r\n\r\n /**\r\n * All material loaded from the mtl will be set here\r\n */\r\n public materials: StandardMaterial[] = [];\r\n\r\n /**\r\n * This function will read the mtl file and create each material described inside\r\n * This function could be improve by adding :\r\n * -some component missing (Ni, Tf...)\r\n * -including the specific options available\r\n *\r\n * @param scene defines the scene the material will be created in\r\n * @param data defines the mtl data to parse\r\n * @param rootUrl defines the rooturl to use in order to load relative dependencies\r\n * @param assetContainer defines the asset container to store the material in (can be null)\r\n */\r\n public parseMTL(scene: Scene, data: string | ArrayBuffer, rootUrl: string, assetContainer: Nullable<AssetContainer>): void {\r\n if (data instanceof ArrayBuffer) {\r\n return;\r\n }\r\n\r\n //Split the lines from the file\r\n const lines = data.split(\"\\n\");\r\n // whitespace char ie: [ \\t\\r\\n\\f]\r\n const delimiter_pattern = /\\s+/;\r\n //Array with RGB colors\r\n let color: number[];\r\n //New material\r\n let material: Nullable<StandardMaterial> = null;\r\n\r\n //Look at each line\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n\r\n // Blank line or comment\r\n if (line.length === 0 || line.charAt(0) === \"#\") {\r\n continue;\r\n }\r\n\r\n //Get the first parameter (keyword)\r\n const pos = line.indexOf(\" \");\r\n let key = pos >= 0 ? line.substring(0, pos) : line;\r\n key = key.toLowerCase();\r\n\r\n //Get the data following the key\r\n const value: string = pos >= 0 ? line.substring(pos + 1).trim() : \"\";\r\n\r\n //This mtl keyword will create the new material\r\n if (key === \"newmtl\") {\r\n //Check if it is the first material.\r\n // Materials specifications are described after this keyword.\r\n if (material) {\r\n //Add the previous material in the material array.\r\n this.materials.push(material);\r\n }\r\n //Create a new material.\r\n // value is the name of the material read in the mtl file\r\n\r\n scene._blockEntityCollection = !!assetContainer;\r\n material = new StandardMaterial(value, scene);\r\n material._parentContainer = assetContainer;\r\n scene._blockEntityCollection = false;\r\n } else if (key === \"kd\" && material) {\r\n // Diffuse color (color under white light) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = <number[]>value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set tghe color into the material\r\n material.diffuseColor = Color3.FromArray(color);\r\n } else if (key === \"ka\" && material) {\r\n // Ambient color (color under shadow) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = <number[]>value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set tghe color into the material\r\n material.ambientColor = Color3.FromArray(color);\r\n } else if (key === \"ks\" && material) {\r\n // Specular color (color when light is reflected from shiny surface) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = <number[]>value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set the color into the material\r\n material.specularColor = Color3.FromArray(color);\r\n } else if (key === \"ke\" && material) {\r\n // Emissive color using RGB values\r\n color = value.split(delimiter_pattern, 3).map(parseFloat);\r\n material.emissiveColor = Color3.FromArray(color);\r\n } else if (key === \"ns\" && material) {\r\n //value = \"Integer\"\r\n material.specularPower = parseFloat(value);\r\n } else if (key === \"d\" && material) {\r\n //d is dissolve for current material. It mean alpha for BABYLON\r\n material.alpha = parseFloat(value);\r\n\r\n //Texture\r\n //This part can be improved by adding the possible options of texture\r\n } else if (key === \"map_ka\" && material) {\r\n // ambient texture map with a loaded image\r\n //We must first get the folder of the image\r\n material.ambientTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n } else if (key === \"map_kd\" && material) {\r\n // Diffuse texture map with a loaded image\r\n material.diffuseTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n } else if (key === \"map_ks\" && material) {\r\n // Specular texture map with a loaded image\r\n //We must first get the folder of the image\r\n material.specularTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n } else if (key === \"map_ns\") {\r\n //Specular\r\n //Specular highlight component\r\n //We must first get the folder of the image\r\n //\r\n //Not supported by BABYLON\r\n //\r\n // continue;\r\n } else if (key === \"map_bump\" && material) {\r\n //The bump texture\r\n const values = value.split(delimiter_pattern);\r\n const bumpMultiplierIndex = values.indexOf(\"-bm\");\r\n let bumpMultiplier: Nullable<string> = null;\r\n\r\n if (bumpMultiplierIndex >= 0) {\r\n bumpMultiplier = values[bumpMultiplierIndex + 1];\r\n values.splice(bumpMultiplierIndex, 2); // remove\r\n }\r\n\r\n material.bumpTexture = MTLFileLoader._GetTexture(rootUrl, values.join(\" \"), scene);\r\n if (material.bumpTexture && bumpMultiplier !== null) {\r\n material.bumpTexture.level = parseFloat(bumpMultiplier);\r\n }\r\n } else if (key === \"map_d\" && material) {\r\n // The dissolve of the material\r\n material.opacityTexture = MTLFileLoader._GetTexture(rootUrl, value, scene);\r\n\r\n //Options for illumination\r\n } else if (key === \"illum\") {\r\n //Illumination\r\n if (value === \"0\") {\r\n //That mean Kd == Kd\r\n } else if (value === \"1\") {\r\n //Color on and Ambient on\r\n } else if (value === \"2\") {\r\n //Highlight on\r\n } else if (value === \"3\") {\r\n //Reflection on and Ray trace on\r\n } else if (value === \"4\") {\r\n //Transparency: Glass on, Reflection: Ray trace on\r\n } else if (value === \"5\") {\r\n //Reflection: Fresnel on and Ray trace on\r\n } else if (value === \"6\") {\r\n //Transparency: Refraction on, Reflection: Fresnel off and Ray trace on\r\n } else if (value === \"7\") {\r\n //Transparency: Refraction on, Reflection: Fresnel on and Ray trace on\r\n } else if (value === \"8\") {\r\n //Reflection on and Ray trace off\r\n } else if (value === \"9\") {\r\n //Transparency: Glass on, Reflection: Ray trace off\r\n } else if (value === \"10\") {\r\n //Casts shadows onto invisible surfaces\r\n }\r\n } else {\r\n // console.log(\"Unhandled expression at line : \" + i +'\\n' + \"with value : \" + line);\r\n }\r\n }\r\n //At the end of the file, add the last material\r\n if (material) {\r\n this.materials.push(material);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture for the material.\r\n *\r\n * If the material is imported from input file,\r\n * We sanitize the url to ensure it takes the texture from aside the material.\r\n *\r\n * @param rootUrl The root url to load from\r\n * @param value The value stored in the mtl\r\n * @param scene\r\n * @return The Texture\r\n */\r\n private static _GetTexture(rootUrl: string, value: string, scene: Scene): Nullable<Texture> {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let url = rootUrl;\r\n // Load from input file.\r\n if (rootUrl === \"file:\") {\r\n let lastDelimiter = value.lastIndexOf(\"\\\\\");\r\n if (lastDelimiter === -1) {\r\n lastDelimiter = value.lastIndexOf(\"/\");\r\n }\r\n\r\n if (lastDelimiter > -1) {\r\n url += value.substr(lastDelimiter + 1);\r\n } else {\r\n url += value;\r\n }\r\n }\r\n // Not from input file.\r\n else {\r\n url += value;\r\n }\r\n\r\n return new Texture(url, scene, false, MTLFileLoader.INVERT_TEXTURE_Y);\r\n }\r\n}\r\n"]}
@@ -8,13 +8,13 @@ import { SolidParser } from "./solidParser.js";
8
8
  * OBJ file type loader.
9
9
  * This is a babylon scene loader plugin.
10
10
  */
11
- var OBJFileLoader = /** @class */ (function () {
11
+ export class OBJFileLoader {
12
12
  /**
13
13
  * Creates loader for .OBJ files
14
14
  *
15
15
  * @param loadingOptions options for loading and parsing OBJ/MTL files.
16
16
  */
17
- function OBJFileLoader(loadingOptions) {
17
+ constructor(loadingOptions) {
18
18
  /**
19
19
  * Defines the name of the plugin.
20
20
  */
@@ -26,37 +26,29 @@ var OBJFileLoader = /** @class */ (function () {
26
26
  this._assetContainer = null;
27
27
  this._loadingOptions = loadingOptions || OBJFileLoader._DefaultLoadingOptions;
28
28
  }
29
- Object.defineProperty(OBJFileLoader, "INVERT_TEXTURE_Y", {
30
- /**
31
- * Invert Y-Axis of referenced textures on load
32
- */
33
- get: function () {
34
- return MTLFileLoader.INVERT_TEXTURE_Y;
35
- },
36
- set: function (value) {
37
- MTLFileLoader.INVERT_TEXTURE_Y = value;
38
- },
39
- enumerable: false,
40
- configurable: true
41
- });
42
- Object.defineProperty(OBJFileLoader, "_DefaultLoadingOptions", {
43
- get: function () {
44
- return {
45
- computeNormals: OBJFileLoader.COMPUTE_NORMALS,
46
- optimizeNormals: OBJFileLoader.OPTIMIZE_NORMALS,
47
- importVertexColors: OBJFileLoader.IMPORT_VERTEX_COLORS,
48
- invertY: OBJFileLoader.INVERT_Y,
49
- invertTextureY: OBJFileLoader.INVERT_TEXTURE_Y,
50
- // eslint-disable-next-line @typescript-eslint/naming-convention
51
- UVScaling: OBJFileLoader.UV_SCALING,
52
- materialLoadingFailsSilently: OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY,
53
- optimizeWithUV: OBJFileLoader.OPTIMIZE_WITH_UV,
54
- skipMaterials: OBJFileLoader.SKIP_MATERIALS,
55
- };
56
- },
57
- enumerable: false,
58
- configurable: true
59
- });
29
+ /**
30
+ * Invert Y-Axis of referenced textures on load
31
+ */
32
+ static get INVERT_TEXTURE_Y() {
33
+ return MTLFileLoader.INVERT_TEXTURE_Y;
34
+ }
35
+ static set INVERT_TEXTURE_Y(value) {
36
+ MTLFileLoader.INVERT_TEXTURE_Y = value;
37
+ }
38
+ static get _DefaultLoadingOptions() {
39
+ return {
40
+ computeNormals: OBJFileLoader.COMPUTE_NORMALS,
41
+ optimizeNormals: OBJFileLoader.OPTIMIZE_NORMALS,
42
+ importVertexColors: OBJFileLoader.IMPORT_VERTEX_COLORS,
43
+ invertY: OBJFileLoader.INVERT_Y,
44
+ invertTextureY: OBJFileLoader.INVERT_TEXTURE_Y,
45
+ // eslint-disable-next-line @typescript-eslint/naming-convention
46
+ UVScaling: OBJFileLoader.UV_SCALING,
47
+ materialLoadingFailsSilently: OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY,
48
+ optimizeWithUV: OBJFileLoader.OPTIMIZE_WITH_UV,
49
+ skipMaterials: OBJFileLoader.SKIP_MATERIALS,
50
+ };
51
+ }
60
52
  /**
61
53
  * Calls synchronously the MTL file attached to this obj.
62
54
  * Load function or importMesh function don't enable to load 2 files in the same time asynchronously.
@@ -68,28 +60,28 @@ var OBJFileLoader = /** @class */ (function () {
68
60
  * @param onSuccess Callback function to be called when the MTL file is loaded
69
61
  * @param onFailure
70
62
  */
71
- OBJFileLoader.prototype._loadMTL = function (url, rootUrl, onSuccess, onFailure) {
63
+ _loadMTL(url, rootUrl, onSuccess, onFailure) {
72
64
  //The complete path to the mtl file
73
- var pathOfFile = rootUrl + url;
65
+ const pathOfFile = rootUrl + url;
74
66
  // Loads through the babylon tools to allow fileInput search.
75
- Tools.LoadFile(pathOfFile, onSuccess, undefined, undefined, false, function (request, exception) {
67
+ Tools.LoadFile(pathOfFile, onSuccess, undefined, undefined, false, (request, exception) => {
76
68
  onFailure(pathOfFile, exception);
77
69
  });
78
- };
70
+ }
79
71
  /**
80
72
  * Instantiates a OBJ file loader plugin.
81
73
  * @returns the created plugin
82
74
  */
83
- OBJFileLoader.prototype.createPlugin = function () {
75
+ createPlugin() {
84
76
  return new OBJFileLoader(OBJFileLoader._DefaultLoadingOptions);
85
- };
77
+ }
86
78
  /**
87
79
  * If the data string can be loaded directly.
88
80
  * @returns if the data can be loaded directly
89
81
  */
90
- OBJFileLoader.prototype.canDirectLoad = function () {
82
+ canDirectLoad() {
91
83
  return false;
92
- };
84
+ }
93
85
  /**
94
86
  * Imports one or more meshes from the loaded OBJ data and adds them to the scene
95
87
  * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file
@@ -98,9 +90,9 @@ var OBJFileLoader = /** @class */ (function () {
98
90
  * @param rootUrl root url to load from
99
91
  * @returns a promise containing the loaded meshes, particles, skeletons and animations
100
92
  */
101
- OBJFileLoader.prototype.importMeshAsync = function (meshesNames, scene, data, rootUrl) {
93
+ importMeshAsync(meshesNames, scene, data, rootUrl) {
102
94
  //get the meshes from OBJ file
103
- return this._parseSolid(meshesNames, scene, data, rootUrl).then(function (meshes) {
95
+ return this._parseSolid(meshesNames, scene, data, rootUrl).then((meshes) => {
104
96
  return {
105
97
  meshes: meshes,
106
98
  particleSystems: [],
@@ -111,7 +103,7 @@ var OBJFileLoader = /** @class */ (function () {
111
103
  lights: [],
112
104
  };
113
105
  });
114
- };
106
+ }
115
107
  /**
116
108
  * Imports all objects from the loaded OBJ data and adds them to the scene
117
109
  * @param scene the scene the objects should be added to
@@ -119,12 +111,12 @@ var OBJFileLoader = /** @class */ (function () {
119
111
  * @param rootUrl root url to load from
120
112
  * @returns a promise which completes when objects have been loaded to the scene
121
113
  */
122
- OBJFileLoader.prototype.loadAsync = function (scene, data, rootUrl) {
114
+ loadAsync(scene, data, rootUrl) {
123
115
  //Get the 3D model
124
- return this.importMeshAsync(null, scene, data, rootUrl).then(function () {
116
+ return this.importMeshAsync(null, scene, data, rootUrl).then(() => {
125
117
  // return void
126
118
  });
127
- };
119
+ }
128
120
  /**
129
121
  * Load into an asset container.
130
122
  * @param scene The scene to load into
@@ -132,22 +124,21 @@ var OBJFileLoader = /** @class */ (function () {
132
124
  * @param rootUrl The root url for scene and resources
133
125
  * @returns The loaded asset container
134
126
  */
135
- OBJFileLoader.prototype.loadAssetContainerAsync = function (scene, data, rootUrl) {
136
- var _this = this;
137
- var container = new AssetContainer(scene);
127
+ loadAssetContainerAsync(scene, data, rootUrl) {
128
+ const container = new AssetContainer(scene);
138
129
  this._assetContainer = container;
139
130
  return this.importMeshAsync(null, scene, data, rootUrl)
140
- .then(function (result) {
141
- result.meshes.forEach(function (mesh) { return container.meshes.push(mesh); });
142
- result.meshes.forEach(function (mesh) {
143
- var material = mesh.material;
131
+ .then((result) => {
132
+ result.meshes.forEach((mesh) => container.meshes.push(mesh));
133
+ result.meshes.forEach((mesh) => {
134
+ const material = mesh.material;
144
135
  if (material) {
145
136
  // Materials
146
137
  if (container.materials.indexOf(material) == -1) {
147
138
  container.materials.push(material);
148
139
  // Textures
149
- var textures = material.getActiveTextures();
150
- textures.forEach(function (t) {
140
+ const textures = material.getActiveTextures();
141
+ textures.forEach((t) => {
151
142
  if (container.textures.indexOf(t) == -1) {
152
143
  container.textures.push(t);
153
144
  }
@@ -155,14 +146,14 @@ var OBJFileLoader = /** @class */ (function () {
155
146
  }
156
147
  }
157
148
  });
158
- _this._assetContainer = null;
149
+ this._assetContainer = null;
159
150
  return container;
160
151
  })
161
- .catch(function (ex) {
162
- _this._assetContainer = null;
152
+ .catch((ex) => {
153
+ this._assetContainer = null;
163
154
  throw ex;
164
155
  });
165
- };
156
+ }
166
157
  /**
167
158
  * Read the OBJ file and create an Array of meshes.
168
159
  * Each mesh contains all information given by the OBJ and the MTL file.
@@ -173,33 +164,32 @@ var OBJFileLoader = /** @class */ (function () {
173
164
  * @param rootUrl defines the path to the folder
174
165
  * @returns the list of loaded meshes
175
166
  */
176
- OBJFileLoader.prototype._parseSolid = function (meshesNames, scene, data, rootUrl) {
177
- var _this = this;
178
- var fileToLoad = ""; //The name of the mtlFile to load
179
- var materialsFromMTLFile = new MTLFileLoader();
180
- var materialToUse = new Array();
181
- var babylonMeshesArray = []; //The mesh for babylon
167
+ _parseSolid(meshesNames, scene, data, rootUrl) {
168
+ let fileToLoad = ""; //The name of the mtlFile to load
169
+ const materialsFromMTLFile = new MTLFileLoader();
170
+ const materialToUse = new Array();
171
+ const babylonMeshesArray = []; //The mesh for babylon
182
172
  // Main function
183
- var solidParser = new SolidParser(materialToUse, babylonMeshesArray, this._loadingOptions);
184
- solidParser.parse(meshesNames, data, scene, this._assetContainer, function (fileName) {
173
+ const solidParser = new SolidParser(materialToUse, babylonMeshesArray, this._loadingOptions);
174
+ solidParser.parse(meshesNames, data, scene, this._assetContainer, (fileName) => {
185
175
  fileToLoad = fileName;
186
176
  });
187
177
  // load the materials
188
- var mtlPromises = [];
178
+ const mtlPromises = [];
189
179
  // Check if we have a file to load
190
180
  if (fileToLoad !== "" && !this._loadingOptions.skipMaterials) {
191
181
  //Load the file synchronously
192
- mtlPromises.push(new Promise(function (resolve, reject) {
193
- _this._loadMTL(fileToLoad, rootUrl, function (dataLoaded) {
182
+ mtlPromises.push(new Promise((resolve, reject) => {
183
+ this._loadMTL(fileToLoad, rootUrl, (dataLoaded) => {
194
184
  try {
195
185
  //Create materials thanks MTLLoader function
196
- materialsFromMTLFile.parseMTL(scene, dataLoaded, rootUrl, _this._assetContainer);
186
+ materialsFromMTLFile.parseMTL(scene, dataLoaded, rootUrl, this._assetContainer);
197
187
  //Look at each material loaded in the mtl file
198
- for (var n = 0; n < materialsFromMTLFile.materials.length; n++) {
188
+ for (let n = 0; n < materialsFromMTLFile.materials.length; n++) {
199
189
  //Three variables to get all meshes with the same material
200
- var startIndex = 0;
201
- var _indices = [];
202
- var _index = void 0;
190
+ let startIndex = 0;
191
+ const _indices = [];
192
+ let _index;
203
193
  //The material from MTL file is used in the meshes loaded
204
194
  //Push the indice in an array
205
195
  //Check if the material is not used for another mesh
@@ -213,10 +203,10 @@ var OBJFileLoader = /** @class */ (function () {
213
203
  materialsFromMTLFile.materials[n].dispose();
214
204
  }
215
205
  else {
216
- for (var o = 0; o < _indices.length; o++) {
206
+ for (let o = 0; o < _indices.length; o++) {
217
207
  //Apply the material to the Mesh for each mesh with the material
218
- var mesh = babylonMeshesArray[_indices[o]];
219
- var material = materialsFromMTLFile.materials[n];
208
+ const mesh = babylonMeshesArray[_indices[o]];
209
+ const material = materialsFromMTLFile.materials[n];
220
210
  mesh.material = material;
221
211
  if (!mesh.getTotalIndices()) {
222
212
  // No indices, we need to turn on point cloud
@@ -228,17 +218,17 @@ var OBJFileLoader = /** @class */ (function () {
228
218
  resolve();
229
219
  }
230
220
  catch (e) {
231
- Tools.Warn("Error processing MTL file: '".concat(fileToLoad, "'"));
232
- if (_this._loadingOptions.materialLoadingFailsSilently) {
221
+ Tools.Warn(`Error processing MTL file: '${fileToLoad}'`);
222
+ if (this._loadingOptions.materialLoadingFailsSilently) {
233
223
  resolve();
234
224
  }
235
225
  else {
236
226
  reject(e);
237
227
  }
238
228
  }
239
- }, function (pathOfFile, exception) {
240
- Tools.Warn("Error downloading MTL file: '".concat(fileToLoad, "'"));
241
- if (_this._loadingOptions.materialLoadingFailsSilently) {
229
+ }, (pathOfFile, exception) => {
230
+ Tools.Warn(`Error downloading MTL file: '${fileToLoad}'`);
231
+ if (this._loadingOptions.materialLoadingFailsSilently) {
242
232
  resolve();
243
233
  }
244
234
  else {
@@ -248,48 +238,46 @@ var OBJFileLoader = /** @class */ (function () {
248
238
  }));
249
239
  }
250
240
  //Return an array with all Mesh
251
- return Promise.all(mtlPromises).then(function () {
241
+ return Promise.all(mtlPromises).then(() => {
252
242
  return babylonMeshesArray;
253
243
  });
254
- };
255
- /**
256
- * Defines if UVs are optimized by default during load.
257
- */
258
- OBJFileLoader.OPTIMIZE_WITH_UV = true;
259
- /**
260
- * Invert model on y-axis (does a model scaling inversion)
261
- */
262
- OBJFileLoader.INVERT_Y = false;
263
- /**
264
- * Include in meshes the vertex colors available in some OBJ files. This is not part of OBJ standard.
265
- */
266
- OBJFileLoader.IMPORT_VERTEX_COLORS = false;
267
- /**
268
- * Compute the normals for the model, even if normals are present in the file.
269
- */
270
- OBJFileLoader.COMPUTE_NORMALS = false;
271
- /**
272
- * Optimize the normals for the model. Lighting can be uneven if you use OptimizeWithUV = true because new vertices can be created for the same location if they pertain to different faces.
273
- * Using OptimizehNormals = true will help smoothing the lighting by averaging the normals of those vertices.
274
- */
275
- OBJFileLoader.OPTIMIZE_NORMALS = false;
276
- /**
277
- * Defines custom scaling of UV coordinates of loaded meshes.
278
- */
279
- OBJFileLoader.UV_SCALING = new Vector2(1, 1);
280
- /**
281
- * Skip loading the materials even if defined in the OBJ file (materials are ignored).
282
- */
283
- OBJFileLoader.SKIP_MATERIALS = false;
284
- /**
285
- * When a material fails to load OBJ loader will silently fail and onSuccess() callback will be triggered.
286
- *
287
- * Defaults to true for backwards compatibility.
288
- */
289
- OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY = true;
290
- return OBJFileLoader;
291
- }());
292
- export { OBJFileLoader };
244
+ }
245
+ }
246
+ /**
247
+ * Defines if UVs are optimized by default during load.
248
+ */
249
+ OBJFileLoader.OPTIMIZE_WITH_UV = true;
250
+ /**
251
+ * Invert model on y-axis (does a model scaling inversion)
252
+ */
253
+ OBJFileLoader.INVERT_Y = false;
254
+ /**
255
+ * Include in meshes the vertex colors available in some OBJ files. This is not part of OBJ standard.
256
+ */
257
+ OBJFileLoader.IMPORT_VERTEX_COLORS = false;
258
+ /**
259
+ * Compute the normals for the model, even if normals are present in the file.
260
+ */
261
+ OBJFileLoader.COMPUTE_NORMALS = false;
262
+ /**
263
+ * Optimize the normals for the model. Lighting can be uneven if you use OptimizeWithUV = true because new vertices can be created for the same location if they pertain to different faces.
264
+ * Using OptimizehNormals = true will help smoothing the lighting by averaging the normals of those vertices.
265
+ */
266
+ OBJFileLoader.OPTIMIZE_NORMALS = false;
267
+ /**
268
+ * Defines custom scaling of UV coordinates of loaded meshes.
269
+ */
270
+ OBJFileLoader.UV_SCALING = new Vector2(1, 1);
271
+ /**
272
+ * Skip loading the materials even if defined in the OBJ file (materials are ignored).
273
+ */
274
+ OBJFileLoader.SKIP_MATERIALS = false;
275
+ /**
276
+ * When a material fails to load OBJ loader will silently fail and onSuccess() callback will be triggered.
277
+ *
278
+ * Defaults to true for backwards compatibility.
279
+ */
280
+ OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY = true;
293
281
  if (SceneLoader) {
294
282
  //Add this loader into the register plugin
295
283
  SceneLoader.RegisterPlugin(new OBJFileLoader());