@babylonjs/loaders 5.0.0-beta.8 → 5.0.0-beta.8-snapshot

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/package.json +20 -198
  2. package/OBJ/index.d.ts +0 -4
  3. package/OBJ/index.js +0 -5
  4. package/OBJ/index.js.map +0 -1
  5. package/OBJ/mtlFileLoader.d.ts +0 -40
  6. package/OBJ/mtlFileLoader.js +0 -222
  7. package/OBJ/mtlFileLoader.js.map +0 -1
  8. package/OBJ/objFileLoader.d.ts +0 -133
  9. package/OBJ/objFileLoader.js +0 -301
  10. package/OBJ/objFileLoader.js.map +0 -1
  11. package/OBJ/objLoadingOptions.d.ts +0 -43
  12. package/OBJ/objLoadingOptions.js +0 -2
  13. package/OBJ/objLoadingOptions.js.map +0 -1
  14. package/OBJ/solidParser.d.ts +0 -153
  15. package/OBJ/solidParser.js +0 -700
  16. package/OBJ/solidParser.js.map +0 -1
  17. package/STL/index.d.ts +0 -1
  18. package/STL/index.js +0 -2
  19. package/STL/index.js.map +0 -1
  20. package/STL/stlFileLoader.d.ts +0 -71
  21. package/STL/stlFileLoader.js +0 -240
  22. package/STL/stlFileLoader.js.map +0 -1
  23. package/glTF/1.0/glTFBinaryExtension.d.ts +0 -13
  24. package/glTF/1.0/glTFBinaryExtension.js +0 -62
  25. package/glTF/1.0/glTFBinaryExtension.js.map +0 -1
  26. package/glTF/1.0/glTFLoader.d.ts +0 -106
  27. package/glTF/1.0/glTFLoader.js +0 -1697
  28. package/glTF/1.0/glTFLoader.js.map +0 -1
  29. package/glTF/1.0/glTFLoaderInterfaces.d.ts +0 -412
  30. package/glTF/1.0/glTFLoaderInterfaces.js +0 -96
  31. package/glTF/1.0/glTFLoaderInterfaces.js.map +0 -1
  32. package/glTF/1.0/glTFLoaderUtils.d.ts +0 -62
  33. package/glTF/1.0/glTFLoaderUtils.js +0 -233
  34. package/glTF/1.0/glTFLoaderUtils.js.map +0 -1
  35. package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +0 -10
  36. package/glTF/1.0/glTFMaterialsCommonExtension.js +0 -128
  37. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +0 -1
  38. package/glTF/1.0/index.d.ts +0 -5
  39. package/glTF/1.0/index.js +0 -6
  40. package/glTF/1.0/index.js.map +0 -1
  41. package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +0 -36
  42. package/glTF/2.0/Extensions/EXT_lights_image_based.js +0 -111
  43. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +0 -1
  44. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +0 -27
  45. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +0 -80
  46. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +0 -1
  47. package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +0 -27
  48. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +0 -43
  49. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +0 -1
  50. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +0 -21
  51. package/glTF/2.0/Extensions/EXT_texture_webp.js +0 -33
  52. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +0 -1
  53. package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +0 -32
  54. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +0 -56
  55. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +0 -1
  56. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +0 -31
  57. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +0 -102
  58. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +0 -1
  59. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +0 -28
  60. package/glTF/2.0/Extensions/KHR_lights_punctual.js +0 -82
  61. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +0 -1
  62. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +0 -31
  63. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +0 -87
  64. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +0 -1
  65. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +0 -30
  66. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +0 -46
  67. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +0 -1
  68. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +0 -34
  69. package/glTF/2.0/Extensions/KHR_materials_ior.js +0 -55
  70. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +0 -1
  71. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +0 -30
  72. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +0 -73
  73. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +0 -1
  74. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +0 -31
  75. package/glTF/2.0/Extensions/KHR_materials_sheen.js +0 -77
  76. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +0 -1
  77. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +0 -30
  78. package/glTF/2.0/Extensions/KHR_materials_specular.js +0 -67
  79. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +0 -1
  80. package/glTF/2.0/Extensions/KHR_materials_translucency.d.ts +0 -31
  81. package/glTF/2.0/Extensions/KHR_materials_translucency.js +0 -77
  82. package/glTF/2.0/Extensions/KHR_materials_translucency.js.map +0 -1
  83. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +0 -30
  84. package/glTF/2.0/Extensions/KHR_materials_transmission.js +0 -278
  85. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +0 -1
  86. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +0 -30
  87. package/glTF/2.0/Extensions/KHR_materials_unlit.js +0 -66
  88. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +0 -1
  89. package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +0 -76
  90. package/glTF/2.0/Extensions/KHR_materials_variants.js +0 -244
  91. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +0 -1
  92. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +0 -31
  93. package/glTF/2.0/Extensions/KHR_materials_volume.js +0 -79
  94. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +0 -1
  95. package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +0 -19
  96. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +0 -22
  97. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +0 -1
  98. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +0 -21
  99. package/glTF/2.0/Extensions/KHR_texture_basisu.js +0 -33
  100. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +0 -1
  101. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +0 -25
  102. package/glTF/2.0/Extensions/KHR_texture_transform.js +0 -54
  103. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +0 -1
  104. package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +0 -29
  105. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +0 -47
  106. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +0 -1
  107. package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +0 -38
  108. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +0 -217
  109. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +0 -1
  110. package/glTF/2.0/Extensions/MSFT_lod.d.ts +0 -75
  111. package/glTF/2.0/Extensions/MSFT_lod.js +0 -334
  112. package/glTF/2.0/Extensions/MSFT_lod.js.map +0 -1
  113. package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +0 -14
  114. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +0 -37
  115. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +0 -1
  116. package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +0 -14
  117. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +0 -37
  118. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +0 -1
  119. package/glTF/2.0/Extensions/index.d.ts +0 -26
  120. package/glTF/2.0/Extensions/index.js +0 -27
  121. package/glTF/2.0/Extensions/index.js.map +0 -1
  122. package/glTF/2.0/glTFLoader.d.ts +0 -357
  123. package/glTF/2.0/glTFLoader.js +0 -2249
  124. package/glTF/2.0/glTFLoader.js.map +0 -1
  125. package/glTF/2.0/glTFLoaderExtension.d.ts +0 -152
  126. package/glTF/2.0/glTFLoaderExtension.js +0 -2
  127. package/glTF/2.0/glTFLoaderExtension.js.map +0 -1
  128. package/glTF/2.0/glTFLoaderInterfaces.d.ts +0 -209
  129. package/glTF/2.0/glTFLoaderInterfaces.js +0 -2
  130. package/glTF/2.0/glTFLoaderInterfaces.js.map +0 -1
  131. package/glTF/2.0/index.d.ts +0 -4
  132. package/glTF/2.0/index.js +0 -5
  133. package/glTF/2.0/index.js.map +0 -1
  134. package/glTF/glTFFileLoader.d.ts +0 -368
  135. package/glTF/glTFFileLoader.js +0 -869
  136. package/glTF/glTFFileLoader.js.map +0 -1
  137. package/glTF/glTFValidation.d.ts +0 -29
  138. package/glTF/glTFValidation.js +0 -122
  139. package/glTF/glTFValidation.js.map +0 -1
  140. package/glTF/index.d.ts +0 -5
  141. package/glTF/index.js +0 -6
  142. package/glTF/index.js.map +0 -1
  143. package/index.d.ts +0 -3
  144. package/index.js.map +0 -1
  145. package/legacy/legacy-glTF.d.ts +0 -2
  146. package/legacy/legacy-glTF.js +0 -19
  147. package/legacy/legacy-glTF.js.map +0 -1
  148. package/legacy/legacy-glTF1.d.ts +0 -2
  149. package/legacy/legacy-glTF1.js +0 -15
  150. package/legacy/legacy-glTF1.js.map +0 -1
  151. package/legacy/legacy-glTF1FileLoader.d.ts +0 -2
  152. package/legacy/legacy-glTF1FileLoader.js +0 -3
  153. package/legacy/legacy-glTF1FileLoader.js.map +0 -1
  154. package/legacy/legacy-glTF2.d.ts +0 -2
  155. package/legacy/legacy-glTF2.js +0 -33
  156. package/legacy/legacy-glTF2.js.map +0 -1
  157. package/legacy/legacy-glTF2FileLoader.d.ts +0 -2
  158. package/legacy/legacy-glTF2FileLoader.js +0 -3
  159. package/legacy/legacy-glTF2FileLoader.js.map +0 -1
  160. package/legacy/legacy-glTFFileLoader.d.ts +0 -3
  161. package/legacy/legacy-glTFFileLoader.js +0 -4
  162. package/legacy/legacy-glTFFileLoader.js.map +0 -1
  163. package/legacy/legacy-objFileLoader.d.ts +0 -1
  164. package/legacy/legacy-objFileLoader.js +0 -13
  165. package/legacy/legacy-objFileLoader.js.map +0 -1
  166. package/legacy/legacy-stlFileLoader.d.ts +0 -1
  167. package/legacy/legacy-stlFileLoader.js +0 -13
  168. package/legacy/legacy-stlFileLoader.js.map +0 -1
  169. package/legacy/legacy.d.ts +0 -6
  170. package/legacy/legacy.js +0 -7
  171. package/legacy/legacy.js.map +0 -1
  172. package/readme.md +0 -24
@@ -1,700 +0,0 @@
1
- import { VertexBuffer } from "@babylonjs/core/Buffers/buffer.js";
2
- import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js";
3
- import { Color3, Color4 } from "@babylonjs/core/Maths/math.color.js";
4
- import { Vector2, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
5
- import { Geometry } from "@babylonjs/core/Meshes/geometry.js";
6
- import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
7
- import { VertexData } from "@babylonjs/core/Meshes/mesh.vertexData.js";
8
- /**
9
- * Class used to load mesh data from OBJ content
10
- */
11
- var SolidParser = /** @class */ (function () {
12
- /**
13
- * Creates a new SolidParser
14
- * @param materialToUse defines the array to fill with the list of materials to use (it will be filled by the parse function)
15
- * @param babylonMeshesArray defines the array to fill with the list of loaded meshes (it will be filled by the parse function)
16
- * @param loadingOptions defines the loading options to use
17
- */
18
- function SolidParser(materialToUse, babylonMeshesArray, loadingOptions) {
19
- this._positions = []; //values for the positions of vertices
20
- this._normals = []; //Values for the normals
21
- this._uvs = []; //Values for the textures
22
- this._colors = [];
23
- this._meshesFromObj = []; //[mesh] Contains all the obj meshes
24
- this._indicesForBabylon = []; //The list of indices for VertexData
25
- this._wrappedPositionForBabylon = []; //The list of position in vectors
26
- this._wrappedUvsForBabylon = []; //Array with all value of uvs to match with the indices
27
- this._wrappedColorsForBabylon = []; // Array with all color values to match with the indices
28
- this._wrappedNormalsForBabylon = []; //Array with all value of normals to match with the indices
29
- this._tuplePosNorm = []; //Create a tuple with indice of Position, Normal, UV [pos, norm, uvs]
30
- this._curPositionInIndices = 0;
31
- this._hasMeshes = false; //Meshes are defined in the file
32
- this._unwrappedPositionsForBabylon = []; //Value of positionForBabylon w/o Vector3() [x,y,z]
33
- this._unwrappedColorsForBabylon = []; // Value of colorForBabylon w/o Color4() [r,g,b,a]
34
- this._unwrappedNormalsForBabylon = []; //Value of normalsForBabylon w/o Vector3() [x,y,z]
35
- this._unwrappedUVForBabylon = []; //Value of uvsForBabylon w/o Vector3() [x,y,z]
36
- this._triangles = []; //Indices from new triangles coming from polygons
37
- this._materialNameFromObj = ""; //The name of the current material
38
- this._objMeshName = ""; //The name of the current obj mesh
39
- this._increment = 1; //Id for meshes created by the multimaterial
40
- this._isFirstMaterial = true;
41
- this._grayColor = new Color4(0.5, 0.5, 0.5, 1);
42
- this._materialToUse = materialToUse;
43
- this._babylonMeshesArray = babylonMeshesArray;
44
- this._loadingOptions = loadingOptions;
45
- }
46
- /**
47
- * Search for obj in the given array.
48
- * This function is called to check if a couple of data already exists in an array.
49
- *
50
- * If found, returns the index of the founded tuple index. Returns -1 if not found
51
- * @param arr Array<{ normals: Array<number>, idx: Array<number> }>
52
- * @param obj Array<number>
53
- * @returns {boolean}
54
- */
55
- SolidParser.prototype._isInArray = function (arr, obj) {
56
- if (!arr[obj[0]]) {
57
- arr[obj[0]] = { normals: [], idx: [] };
58
- }
59
- var idx = arr[obj[0]].normals.indexOf(obj[1]);
60
- return idx === -1 ? -1 : arr[obj[0]].idx[idx];
61
- };
62
- SolidParser.prototype._isInArrayUV = function (arr, obj) {
63
- if (!arr[obj[0]]) {
64
- arr[obj[0]] = { normals: [], idx: [], uv: [] };
65
- }
66
- var idx = arr[obj[0]].normals.indexOf(obj[1]);
67
- if (idx != 1 && (obj[2] === arr[obj[0]].uv[idx])) {
68
- return arr[obj[0]].idx[idx];
69
- }
70
- return -1;
71
- };
72
- /**
73
- * This function set the data for each triangle.
74
- * Data are position, normals and uvs
75
- * If a tuple of (position, normal) is not set, add the data into the corresponding array
76
- * If the tuple already exist, add only their indice
77
- *
78
- * @param indicePositionFromObj Integer The index in positions array
79
- * @param indiceUvsFromObj Integer The index in uvs array
80
- * @param indiceNormalFromObj Integer The index in normals array
81
- * @param positionVectorFromOBJ Vector3 The value of position at index objIndice
82
- * @param textureVectorFromOBJ Vector3 The value of uvs
83
- * @param normalsVectorFromOBJ Vector3 The value of normals at index objNormale
84
- */
85
- SolidParser.prototype._setData = function (indicePositionFromObj, indiceUvsFromObj, indiceNormalFromObj, positionVectorFromOBJ, textureVectorFromOBJ, normalsVectorFromOBJ, positionColorsFromOBJ) {
86
- //Check if this tuple already exists in the list of tuples
87
- var _index;
88
- if (this._loadingOptions.optimizeWithUV) {
89
- _index = this._isInArrayUV(this._tuplePosNorm, [
90
- indicePositionFromObj,
91
- indiceNormalFromObj,
92
- indiceUvsFromObj
93
- ]);
94
- }
95
- else {
96
- _index = this._isInArray(this._tuplePosNorm, [
97
- indicePositionFromObj,
98
- indiceNormalFromObj
99
- ]);
100
- }
101
- //If it not exists
102
- if (_index === -1) {
103
- //Add an new indice.
104
- //The array of indices is only an array with his length equal to the number of triangles - 1.
105
- //We add vertices data in this order
106
- this._indicesForBabylon.push(this._wrappedPositionForBabylon.length);
107
- //Push the position of vertice for Babylon
108
- //Each element is a Vector3(x,y,z)
109
- this._wrappedPositionForBabylon.push(positionVectorFromOBJ);
110
- //Push the uvs for Babylon
111
- //Each element is a Vector3(u,v)
112
- this._wrappedUvsForBabylon.push(textureVectorFromOBJ);
113
- //Push the normals for Babylon
114
- //Each element is a Vector3(x,y,z)
115
- this._wrappedNormalsForBabylon.push(normalsVectorFromOBJ);
116
- if (positionColorsFromOBJ !== undefined) {
117
- //Push the colors for Babylon
118
- //Each element is a BABYLON.Color4(r,g,b,a)
119
- this._wrappedColorsForBabylon.push(positionColorsFromOBJ);
120
- }
121
- //Add the tuple in the comparison list
122
- this._tuplePosNorm[indicePositionFromObj].normals.push(indiceNormalFromObj);
123
- this._tuplePosNorm[indicePositionFromObj].idx.push(this._curPositionInIndices++);
124
- if (this._loadingOptions.optimizeWithUV) {
125
- this._tuplePosNorm[indicePositionFromObj].uv.push(indiceUvsFromObj);
126
- }
127
- }
128
- else {
129
- //The tuple already exists
130
- //Add the index of the already existing tuple
131
- //At this index we can get the value of position, normal, color and uvs of vertex
132
- this._indicesForBabylon.push(_index);
133
- }
134
- };
135
- /**
136
- * Transform Vector() and BABYLON.Color() objects into numbers in an array
137
- */
138
- SolidParser.prototype._unwrapData = function () {
139
- //Every array has the same length
140
- for (var l = 0; l < this._wrappedPositionForBabylon.length; l++) {
141
- //Push the x, y, z values of each element in the unwrapped array
142
- this._unwrappedPositionsForBabylon.push(this._wrappedPositionForBabylon[l].x, this._wrappedPositionForBabylon[l].y, this._wrappedPositionForBabylon[l].z);
143
- this._unwrappedNormalsForBabylon.push(this._wrappedNormalsForBabylon[l].x, this._wrappedNormalsForBabylon[l].y, this._wrappedNormalsForBabylon[l].z);
144
- this._unwrappedUVForBabylon.push(this._wrappedUvsForBabylon[l].x, this._wrappedUvsForBabylon[l].y); //z is an optional value not supported by BABYLON
145
- if (this._loadingOptions.importVertexColors) {
146
- //Push the r, g, b, a values of each element in the unwrapped array
147
- this._unwrappedColorsForBabylon.push(this._wrappedColorsForBabylon[l].r, this._wrappedColorsForBabylon[l].g, this._wrappedColorsForBabylon[l].b, this._wrappedColorsForBabylon[l].a);
148
- }
149
- }
150
- // Reset arrays for the next new meshes
151
- this._wrappedPositionForBabylon = [];
152
- this._wrappedNormalsForBabylon = [];
153
- this._wrappedUvsForBabylon = [];
154
- this._wrappedColorsForBabylon = [];
155
- this._tuplePosNorm = [];
156
- this._curPositionInIndices = 0;
157
- };
158
- /**
159
- * Create triangles from polygons
160
- * It is important to notice that a triangle is a polygon
161
- * We get 5 patterns of face defined in OBJ File :
162
- * facePattern1 = ["1","2","3","4","5","6"]
163
- * facePattern2 = ["1/1","2/2","3/3","4/4","5/5","6/6"]
164
- * facePattern3 = ["1/1/1","2/2/2","3/3/3","4/4/4","5/5/5","6/6/6"]
165
- * facePattern4 = ["1//1","2//2","3//3","4//4","5//5","6//6"]
166
- * facePattern5 = ["-1/-1/-1","-2/-2/-2","-3/-3/-3","-4/-4/-4","-5/-5/-5","-6/-6/-6"]
167
- * Each pattern is divided by the same method
168
- * @param face Array[String] The indices of elements
169
- * @param v Integer The variable to increment
170
- */
171
- SolidParser.prototype._getTriangles = function (faces, v) {
172
- //Work for each element of the array
173
- for (var faceIndex = v; faceIndex < faces.length - 1; faceIndex++) {
174
- //Add on the triangle variable the indexes to obtain triangles
175
- this._triangles.push(faces[0], faces[faceIndex], faces[faceIndex + 1]);
176
- }
177
- //Result obtained after 2 iterations:
178
- //Pattern1 => triangle = ["1","2","3","1","3","4"];
179
- //Pattern2 => triangle = ["1/1","2/2","3/3","1/1","3/3","4/4"];
180
- //Pattern3 => triangle = ["1/1/1","2/2/2","3/3/3","1/1/1","3/3/3","4/4/4"];
181
- //Pattern4 => triangle = ["1//1","2//2","3//3","1//1","3//3","4//4"];
182
- //Pattern5 => triangle = ["-1/-1/-1","-2/-2/-2","-3/-3/-3","-1/-1/-1","-3/-3/-3","-4/-4/-4"];
183
- };
184
- /**
185
- * Create triangles and push the data for each polygon for the pattern 1
186
- * In this pattern we get vertice positions
187
- * @param face
188
- * @param v
189
- */
190
- SolidParser.prototype._setDataForCurrentFaceWithPattern1 = function (face, v) {
191
- //Get the indices of triangles for each polygon
192
- this._getTriangles(face, v);
193
- //For each element in the triangles array.
194
- //This var could contains 1 to an infinity of triangles
195
- for (var k = 0; k < this._triangles.length; k++) {
196
- // Set position indice
197
- var indicePositionFromObj = parseInt(this._triangles[k]) - 1;
198
- this._setData(indicePositionFromObj, 0, 0, // In the pattern 1, normals and uvs are not defined
199
- this._positions[indicePositionFromObj], // Get the vectors data
200
- Vector2.Zero(), Vector3.Up(), // Create default vectors
201
- this._loadingOptions.importVertexColors ? this._colors[indicePositionFromObj] : undefined);
202
- }
203
- //Reset variable for the next line
204
- this._triangles = [];
205
- };
206
- /**
207
- * Create triangles and push the data for each polygon for the pattern 2
208
- * In this pattern we get vertice positions and uvsu
209
- * @param face
210
- * @param v
211
- */
212
- SolidParser.prototype._setDataForCurrentFaceWithPattern2 = function (face, v) {
213
- //Get the indices of triangles for each polygon
214
- this._getTriangles(face, v);
215
- for (var k = 0; k < this._triangles.length; k++) {
216
- //triangle[k] = "1/1"
217
- //Split the data for getting position and uv
218
- var point = this._triangles[k].split("/"); // ["1", "1"]
219
- //Set position indice
220
- var indicePositionFromObj = parseInt(point[0]) - 1;
221
- //Set uv indice
222
- var indiceUvsFromObj = parseInt(point[1]) - 1;
223
- this._setData(indicePositionFromObj, indiceUvsFromObj, 0, //Default value for normals
224
- this._positions[indicePositionFromObj], //Get the values for each element
225
- this._uvs[indiceUvsFromObj], Vector3.Up(), //Default value for normals
226
- this._loadingOptions.importVertexColors ? this._colors[indicePositionFromObj] : undefined);
227
- }
228
- //Reset variable for the next line
229
- this._triangles = [];
230
- };
231
- /**
232
- * Create triangles and push the data for each polygon for the pattern 3
233
- * In this pattern we get vertice positions, uvs and normals
234
- * @param face
235
- * @param v
236
- */
237
- SolidParser.prototype._setDataForCurrentFaceWithPattern3 = function (face, v) {
238
- //Get the indices of triangles for each polygon
239
- this._getTriangles(face, v);
240
- for (var k = 0; k < this._triangles.length; k++) {
241
- //triangle[k] = "1/1/1"
242
- //Split the data for getting position, uv, and normals
243
- var point = this._triangles[k].split("/"); // ["1", "1", "1"]
244
- // Set position indice
245
- var indicePositionFromObj = parseInt(point[0]) - 1;
246
- // Set uv indice
247
- var indiceUvsFromObj = parseInt(point[1]) - 1;
248
- // Set normal indice
249
- var indiceNormalFromObj = parseInt(point[2]) - 1;
250
- this._setData(indicePositionFromObj, indiceUvsFromObj, indiceNormalFromObj, this._positions[indicePositionFromObj], this._uvs[indiceUvsFromObj], this._normals[indiceNormalFromObj] //Set the vector for each component
251
- );
252
- }
253
- //Reset variable for the next line
254
- this._triangles = [];
255
- };
256
- /**
257
- * Create triangles and push the data for each polygon for the pattern 4
258
- * In this pattern we get vertice positions and normals
259
- * @param face
260
- * @param v
261
- */
262
- SolidParser.prototype._setDataForCurrentFaceWithPattern4 = function (face, v) {
263
- this._getTriangles(face, v);
264
- for (var k = 0; k < this._triangles.length; k++) {
265
- //triangle[k] = "1//1"
266
- //Split the data for getting position and normals
267
- var point = this._triangles[k].split("//"); // ["1", "1"]
268
- // We check indices, and normals
269
- var indicePositionFromObj = parseInt(point[0]) - 1;
270
- var indiceNormalFromObj = parseInt(point[1]) - 1;
271
- this._setData(indicePositionFromObj, 1, //Default value for uv
272
- indiceNormalFromObj, this._positions[indicePositionFromObj], //Get each vector of data
273
- Vector2.Zero(), this._normals[indiceNormalFromObj], this._loadingOptions.importVertexColors ? this._colors[indicePositionFromObj] : undefined);
274
- }
275
- //Reset variable for the next line
276
- this._triangles = [];
277
- };
278
- /*
279
- * Create triangles and push the data for each polygon for the pattern 3
280
- * In this pattern we get vertice positions, uvs and normals
281
- * @param face
282
- * @param v
283
- */
284
- SolidParser.prototype._setDataForCurrentFaceWithPattern5 = function (face, v) {
285
- //Get the indices of triangles for each polygon
286
- this._getTriangles(face, v);
287
- for (var k = 0; k < this._triangles.length; k++) {
288
- //triangle[k] = "-1/-1/-1"
289
- //Split the data for getting position, uv, and normals
290
- var point = this._triangles[k].split("/"); // ["-1", "-1", "-1"]
291
- // Set position indice
292
- var indicePositionFromObj = this._positions.length + parseInt(point[0]);
293
- // Set uv indice
294
- var indiceUvsFromObj = this._uvs.length + parseInt(point[1]);
295
- // Set normal indice
296
- var indiceNormalFromObj = this._normals.length + parseInt(point[2]);
297
- this._setData(indicePositionFromObj, indiceUvsFromObj, indiceNormalFromObj, this._positions[indicePositionFromObj], this._uvs[indiceUvsFromObj], this._normals[indiceNormalFromObj], //Set the vector for each component
298
- this._loadingOptions.importVertexColors ? this._colors[indicePositionFromObj] : undefined);
299
- }
300
- //Reset variable for the next line
301
- this._triangles = [];
302
- };
303
- SolidParser.prototype._addPreviousObjMesh = function () {
304
- //Check if it is not the first mesh. Otherwise we don't have data.
305
- if (this._meshesFromObj.length > 0) {
306
- //Get the previous mesh for applying the data about the faces
307
- //=> in obj file, faces definition append after the name of the mesh
308
- this._handledMesh = this._meshesFromObj[this._meshesFromObj.length - 1];
309
- //Set the data into Array for the mesh
310
- this._unwrapData();
311
- // Reverse tab. Otherwise face are displayed in the wrong sens
312
- this._indicesForBabylon.reverse();
313
- //Set the information for the mesh
314
- //Slice the array to avoid rewriting because of the fact this is the same var which be rewrited
315
- this._handledMesh.indices = this._indicesForBabylon.slice();
316
- this._handledMesh.positions = this._unwrappedPositionsForBabylon.slice();
317
- this._handledMesh.normals = this._unwrappedNormalsForBabylon.slice();
318
- this._handledMesh.uvs = this._unwrappedUVForBabylon.slice();
319
- if (this._loadingOptions.importVertexColors) {
320
- this._handledMesh.colors = this._unwrappedColorsForBabylon.slice();
321
- }
322
- //Reset the array for the next mesh
323
- this._indicesForBabylon = [];
324
- this._unwrappedPositionsForBabylon = [];
325
- this._unwrappedColorsForBabylon = [];
326
- this._unwrappedNormalsForBabylon = [];
327
- this._unwrappedUVForBabylon = [];
328
- }
329
- };
330
- SolidParser.prototype._optimizeNormals = function (mesh) {
331
- var positions = mesh.getVerticesData(VertexBuffer.PositionKind);
332
- var normals = mesh.getVerticesData(VertexBuffer.NormalKind);
333
- var mapVertices = {};
334
- if (!positions || !normals) {
335
- return;
336
- }
337
- for (var i = 0; i < positions.length / 3; i++) {
338
- var x = positions[i * 3 + 0];
339
- var y = positions[i * 3 + 1];
340
- var z = positions[i * 3 + 2];
341
- var key = x + "_" + y + "_" + z;
342
- var lst = mapVertices[key];
343
- if (!lst) {
344
- lst = [];
345
- mapVertices[key] = lst;
346
- }
347
- lst.push(i);
348
- }
349
- var normal = new Vector3();
350
- for (var key in mapVertices) {
351
- var lst = mapVertices[key];
352
- if (lst.length < 2) {
353
- continue;
354
- }
355
- var v0Idx = lst[0];
356
- for (var i = 1; i < lst.length; ++i) {
357
- var vIdx = lst[i];
358
- normals[v0Idx * 3 + 0] += normals[vIdx * 3 + 0];
359
- normals[v0Idx * 3 + 1] += normals[vIdx * 3 + 1];
360
- normals[v0Idx * 3 + 2] += normals[vIdx * 3 + 2];
361
- }
362
- normal.copyFromFloats(normals[v0Idx * 3 + 0], normals[v0Idx * 3 + 1], normals[v0Idx * 3 + 2]);
363
- normal.normalize();
364
- for (var i = 0; i < lst.length; ++i) {
365
- var vIdx = lst[i];
366
- normals[vIdx * 3 + 0] = normal.x;
367
- normals[vIdx * 3 + 1] = normal.y;
368
- normals[vIdx * 3 + 2] = normal.z;
369
- }
370
- }
371
- mesh.setVerticesData(VertexBuffer.NormalKind, normals);
372
- };
373
- /**
374
- * Function used to parse an OBJ string
375
- * @param meshesNames defines the list of meshes to load (all if not defined)
376
- * @param data defines the OBJ string
377
- * @param scene defines the hosting scene
378
- * @param assetContainer defines the asset container to load data in
379
- * @param onFileToLoadFound defines a callback that will be called if a MTL file is found
380
- */
381
- SolidParser.prototype.parse = function (meshesNames, data, scene, assetContainer, onFileToLoadFound) {
382
- var _a;
383
- // Split the file into lines
384
- var lines = data.split('\n');
385
- // Look at each line
386
- for (var i = 0; i < lines.length; i++) {
387
- var line = lines[i].trim().replace(/\s\s/g, " ");
388
- var result;
389
- // Comment or newLine
390
- if (line.length === 0 || line.charAt(0) === '#') {
391
- continue;
392
- //Get information about one position possible for the vertices
393
- }
394
- else if (SolidParser.VertexPattern.test(line)) {
395
- result = line.match(/[^ ]+/g); // match will return non-null due to passing regex pattern
396
- // Value of result with line: "v 1.0 2.0 3.0"
397
- // ["v", "1.0", "2.0", "3.0"]
398
- // Create a Vector3 with the position x, y, z
399
- this._positions.push(new Vector3(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])));
400
- if (this._loadingOptions.importVertexColors) {
401
- if (result.length >= 7) {
402
- var r = parseFloat(result[4]);
403
- var g = parseFloat(result[5]);
404
- var b = parseFloat(result[6]);
405
- this._colors.push(new Color4(r > 1 ? r / 255 : r, g > 1 ? g / 255 : g, b > 1 ? b / 255 : b, (result.length === 7 || result[7] === undefined) ? 1 : parseFloat(result[7])));
406
- }
407
- else {
408
- // TODO: maybe push NULL and if all are NULL to skip (and remove grayColor var).
409
- this._colors.push(this._grayColor);
410
- }
411
- }
412
- }
413
- else if ((result = SolidParser.NormalPattern.exec(line)) !== null) {
414
- //Create a Vector3 with the normals x, y, z
415
- //Value of result
416
- // ["vn 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
417
- //Add the Vector in the list of normals
418
- this._normals.push(new Vector3(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])));
419
- }
420
- else if ((result = SolidParser.UVPattern.exec(line)) !== null) {
421
- //Create a Vector2 with the normals u, v
422
- //Value of result
423
- // ["vt 0.1 0.2 0.3", "0.1", "0.2"]
424
- //Add the Vector in the list of uvs
425
- this._uvs.push(new Vector2(parseFloat(result[1]) * this._loadingOptions.UVScaling.x, parseFloat(result[2]) * this._loadingOptions.UVScaling.y));
426
- //Identify patterns of faces
427
- //Face could be defined in different type of pattern
428
- }
429
- else if ((result = SolidParser.FacePattern3.exec(line)) !== null) {
430
- //Value of result:
431
- //["f 1/1/1 2/2/2 3/3/3", "1/1/1 2/2/2 3/3/3"...]
432
- //Set the data for this face
433
- this._setDataForCurrentFaceWithPattern3(result[1].trim().split(" "), // ["1/1/1", "2/2/2", "3/3/3"]
434
- 1);
435
- }
436
- else if ((result = SolidParser.FacePattern4.exec(line)) !== null) {
437
- //Value of result:
438
- //["f 1//1 2//2 3//3", "1//1 2//2 3//3"...]
439
- //Set the data for this face
440
- this._setDataForCurrentFaceWithPattern4(result[1].trim().split(" "), // ["1//1", "2//2", "3//3"]
441
- 1);
442
- }
443
- else if ((result = SolidParser.FacePattern5.exec(line)) !== null) {
444
- //Value of result:
445
- //["f -1/-1/-1 -2/-2/-2 -3/-3/-3", "-1/-1/-1 -2/-2/-2 -3/-3/-3"...]
446
- //Set the data for this face
447
- this._setDataForCurrentFaceWithPattern5(result[1].trim().split(" "), // ["-1/-1/-1", "-2/-2/-2", "-3/-3/-3"]
448
- 1);
449
- }
450
- else if ((result = SolidParser.FacePattern2.exec(line)) !== null) {
451
- //Value of result:
452
- //["f 1/1 2/2 3/3", "1/1 2/2 3/3"...]
453
- //Set the data for this face
454
- this._setDataForCurrentFaceWithPattern2(result[1].trim().split(" "), // ["1/1", "2/2", "3/3"]
455
- 1);
456
- }
457
- else if ((result = SolidParser.FacePattern1.exec(line)) !== null) {
458
- //Value of result
459
- //["f 1 2 3", "1 2 3"...]
460
- //Set the data for this face
461
- this._setDataForCurrentFaceWithPattern1(result[1].trim().split(" "), // ["1", "2", "3"]
462
- 1);
463
- // Define a mesh or an object
464
- // Each time this keyword is analysed, create a new Object with all data for creating a babylonMesh
465
- }
466
- else if (SolidParser.GroupDescriptor.test(line) || SolidParser.ObjectDescriptor.test(line)) {
467
- // Create a new mesh corresponding to the name of the group.
468
- // Definition of the mesh
469
- var objMesh = {
470
- name: line.substring(2).trim(),
471
- indices: undefined,
472
- positions: undefined,
473
- normals: undefined,
474
- uvs: undefined,
475
- colors: undefined,
476
- materialName: ""
477
- };
478
- this._addPreviousObjMesh();
479
- //Push the last mesh created with only the name
480
- this._meshesFromObj.push(objMesh);
481
- //Set this variable to indicate that now meshesFromObj has objects defined inside
482
- this._hasMeshes = true;
483
- this._isFirstMaterial = true;
484
- this._increment = 1;
485
- //Keyword for applying a material
486
- }
487
- else if (SolidParser.UseMtlDescriptor.test(line)) {
488
- //Get the name of the material
489
- this._materialNameFromObj = line.substring(7).trim();
490
- //If this new material is in the same mesh
491
- if (!this._isFirstMaterial || !this._hasMeshes) {
492
- //Set the data for the previous mesh
493
- this._addPreviousObjMesh();
494
- //Create a new mesh
495
- var objMesh =
496
- //Set the name of the current obj mesh
497
- {
498
- name: (this._objMeshName || "mesh") + "_mm" + this._increment.toString(),
499
- indices: undefined,
500
- positions: undefined,
501
- normals: undefined,
502
- uvs: undefined,
503
- colors: undefined,
504
- materialName: this._materialNameFromObj
505
- };
506
- this._increment++;
507
- //If meshes are already defined
508
- this._meshesFromObj.push(objMesh);
509
- this._hasMeshes = true;
510
- }
511
- //Set the material name if the previous line define a mesh
512
- if (this._hasMeshes && this._isFirstMaterial) {
513
- //Set the material name to the previous mesh (1 material per mesh)
514
- this._meshesFromObj[this._meshesFromObj.length - 1].materialName = this._materialNameFromObj;
515
- this._isFirstMaterial = false;
516
- }
517
- // Keyword for loading the mtl file
518
- }
519
- else if (SolidParser.MtlLibGroupDescriptor.test(line)) {
520
- // Get the name of mtl file
521
- onFileToLoadFound(line.substring(7).trim());
522
- // Apply smoothing
523
- }
524
- else if (SolidParser.SmoothDescriptor.test(line)) {
525
- // smooth shading => apply smoothing
526
- // Today I don't know it work with babylon and with obj.
527
- // With the obj file an integer is set
528
- }
529
- else {
530
- //If there is another possibility
531
- console.log("Unhandled expression at line : " + line);
532
- }
533
- }
534
- // At the end of the file, add the last mesh into the meshesFromObj array
535
- if (this._hasMeshes) {
536
- // Set the data for the last mesh
537
- this._handledMesh = this._meshesFromObj[this._meshesFromObj.length - 1];
538
- //Reverse indices for displaying faces in the good sense
539
- this._indicesForBabylon.reverse();
540
- //Get the good array
541
- this._unwrapData();
542
- //Set array
543
- this._handledMesh.indices = this._indicesForBabylon;
544
- this._handledMesh.positions = this._unwrappedPositionsForBabylon;
545
- this._handledMesh.normals = this._unwrappedNormalsForBabylon;
546
- this._handledMesh.uvs = this._unwrappedUVForBabylon;
547
- if (this._loadingOptions.importVertexColors) {
548
- this._handledMesh.colors = this._unwrappedColorsForBabylon;
549
- }
550
- }
551
- // If any o or g keyword not found, create a mesh with a random id
552
- if (!this._hasMeshes) {
553
- var newMaterial = null;
554
- if (this._indicesForBabylon.length) {
555
- // reverse tab of indices
556
- this._indicesForBabylon.reverse();
557
- //Get positions normals uvs
558
- this._unwrapData();
559
- }
560
- else {
561
- // There is no indices in the file. We will have to switch to point cloud rendering
562
- for (var _i = 0, _b = this._positions; _i < _b.length; _i++) {
563
- var pos = _b[_i];
564
- this._unwrappedPositionsForBabylon.push(pos.x, pos.y, pos.z);
565
- }
566
- if (this._normals.length) {
567
- for (var _c = 0, _d = this._normals; _c < _d.length; _c++) {
568
- var normal = _d[_c];
569
- this._unwrappedNormalsForBabylon.push(normal.x, normal.y, normal.z);
570
- }
571
- }
572
- if (this._uvs.length) {
573
- for (var _e = 0, _f = this._uvs; _e < _f.length; _e++) {
574
- var uv = _f[_e];
575
- this._unwrappedUVForBabylon.push(uv.x, uv.y);
576
- }
577
- }
578
- if (this._colors.length) {
579
- for (var _g = 0, _h = this._colors; _g < _h.length; _g++) {
580
- var color = _h[_g];
581
- this._unwrappedColorsForBabylon.push(color.r, color.g, color.b, color.a);
582
- }
583
- }
584
- if (!this._materialNameFromObj) {
585
- // Create a material with point cloud on
586
- newMaterial = new StandardMaterial(Geometry.RandomId(), scene);
587
- newMaterial.pointsCloud = true;
588
- this._materialNameFromObj = newMaterial.name;
589
- if (!this._normals.length) {
590
- newMaterial.disableLighting = true;
591
- newMaterial.emissiveColor = Color3.White();
592
- }
593
- }
594
- }
595
- //Set data for one mesh
596
- this._meshesFromObj.push({
597
- name: Geometry.RandomId(),
598
- indices: this._indicesForBabylon,
599
- positions: this._unwrappedPositionsForBabylon,
600
- colors: this._unwrappedColorsForBabylon,
601
- normals: this._unwrappedNormalsForBabylon,
602
- uvs: this._unwrappedUVForBabylon,
603
- materialName: this._materialNameFromObj,
604
- directMaterial: newMaterial
605
- });
606
- }
607
- //Set data for each mesh
608
- for (var j = 0; j < this._meshesFromObj.length; j++) {
609
- //check meshesNames (stlFileLoader)
610
- if (meshesNames && this._meshesFromObj[j].name) {
611
- if (meshesNames instanceof Array) {
612
- if (meshesNames.indexOf(this._meshesFromObj[j].name) === -1) {
613
- continue;
614
- }
615
- }
616
- else {
617
- if (this._meshesFromObj[j].name !== meshesNames) {
618
- continue;
619
- }
620
- }
621
- }
622
- //Get the current mesh
623
- //Set the data with VertexBuffer for each mesh
624
- this._handledMesh = this._meshesFromObj[j];
625
- //Create a Mesh with the name of the obj mesh
626
- scene._blockEntityCollection = !!assetContainer;
627
- var babylonMesh = new Mesh(this._meshesFromObj[j].name, scene);
628
- babylonMesh._parentContainer = assetContainer;
629
- scene._blockEntityCollection = false;
630
- //Push the name of the material to an array
631
- //This is indispensable for the importMesh function
632
- this._materialToUse.push(this._meshesFromObj[j].materialName);
633
- if (((_a = this._handledMesh.positions) === null || _a === void 0 ? void 0 : _a.length) === 0) {
634
- //Push the mesh into an array
635
- this._babylonMeshesArray.push(babylonMesh);
636
- continue;
637
- }
638
- var vertexData = new VertexData(); //The container for the values
639
- //Set the data for the babylonMesh
640
- vertexData.uvs = this._handledMesh.uvs;
641
- vertexData.indices = this._handledMesh.indices;
642
- vertexData.positions = this._handledMesh.positions;
643
- if (this._loadingOptions.computeNormals) {
644
- var normals = new Array();
645
- VertexData.ComputeNormals(this._handledMesh.positions, this._handledMesh.indices, normals);
646
- vertexData.normals = normals;
647
- }
648
- else {
649
- vertexData.normals = this._handledMesh.normals;
650
- }
651
- if (this._loadingOptions.importVertexColors) {
652
- vertexData.colors = this._handledMesh.colors;
653
- }
654
- //Set the data from the VertexBuffer to the current Mesh
655
- vertexData.applyToMesh(babylonMesh);
656
- if (this._loadingOptions.invertY) {
657
- babylonMesh.scaling.y *= -1;
658
- }
659
- if (this._loadingOptions.optimizeNormals) {
660
- this._optimizeNormals(babylonMesh);
661
- }
662
- //Push the mesh into an array
663
- this._babylonMeshesArray.push(babylonMesh);
664
- if (this._handledMesh.directMaterial) {
665
- babylonMesh.material = this._handledMesh.directMaterial;
666
- }
667
- }
668
- };
669
- // Descriptor
670
- /** Object descriptor */
671
- SolidParser.ObjectDescriptor = /^o/;
672
- /** Group descriptor */
673
- SolidParser.GroupDescriptor = /^g/;
674
- /** Material lib descriptor */
675
- SolidParser.MtlLibGroupDescriptor = /^mtllib /;
676
- /** Use a material descriptor */
677
- SolidParser.UseMtlDescriptor = /^usemtl /;
678
- /** Smooth descriptor */
679
- SolidParser.SmoothDescriptor = /^s /;
680
- // Patterns
681
- /** Pattern used to detect a vertex */
682
- SolidParser.VertexPattern = /v(\s+[\d|\.|\+|\-|e|E]+){3,7}/;
683
- /** Pattern used to detect a normal */
684
- SolidParser.NormalPattern = /vn(\s+[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/;
685
- /** Pattern used to detect a UV set */
686
- SolidParser.UVPattern = /vt(\s+[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/;
687
- /** Pattern used to detect a first kind of face (f vertex vertex vertex) */
688
- SolidParser.FacePattern1 = /f\s+(([\d]{1,}[\s]?){3,})+/;
689
- /** Pattern used to detect a second kind of face (f vertex/uvs vertex/uvs vertex/uvs) */
690
- SolidParser.FacePattern2 = /f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;
691
- /** Pattern used to detect a third kind of face (f vertex/uvs/normal vertex/uvs/normal vertex/uvs/normal) */
692
- SolidParser.FacePattern3 = /f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;
693
- /** Pattern used to detect a fourth kind of face (f vertex//normal vertex//normal vertex//normal)*/
694
- SolidParser.FacePattern4 = /f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;
695
- /** Pattern used to detect a fifth kind of face (f -vertex/-uvs/-normal -vertex/-uvs/-normal -vertex/-uvs/-normal) */
696
- SolidParser.FacePattern5 = /f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;
697
- return SolidParser;
698
- }());
699
- export { SolidParser };
700
- //# sourceMappingURL=solidParser.js.map