three-stdlib 2.35.5 → 2.35.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +20 -17
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +20 -17
  4. package/_polyfill/CapsuleGeometry.js.map +1 -1
  5. package/_polyfill/constants.cjs +1 -1
  6. package/_polyfill/constants.cjs.map +1 -1
  7. package/_polyfill/constants.js +1 -1
  8. package/_polyfill/constants.js.map +1 -1
  9. package/animation/AnimationClipCreator.cjs +13 -13
  10. package/animation/AnimationClipCreator.cjs.map +1 -1
  11. package/animation/AnimationClipCreator.js +13 -13
  12. package/animation/AnimationClipCreator.js.map +1 -1
  13. package/animation/CCDIKSolver.cjs +11 -11
  14. package/animation/CCDIKSolver.cjs.map +1 -1
  15. package/animation/CCDIKSolver.js +12 -12
  16. package/animation/CCDIKSolver.js.map +1 -1
  17. package/animation/MMDAnimationHelper.cjs +1 -1
  18. package/animation/MMDAnimationHelper.cjs.map +1 -1
  19. package/animation/MMDAnimationHelper.js +1 -1
  20. package/animation/MMDAnimationHelper.js.map +1 -1
  21. package/animation/MMDPhysics.cjs +4 -4
  22. package/animation/MMDPhysics.cjs.map +1 -1
  23. package/animation/MMDPhysics.js +4 -4
  24. package/animation/MMDPhysics.js.map +1 -1
  25. package/controls/ArcballControls.cjs +2 -2
  26. package/controls/ArcballControls.cjs.map +1 -1
  27. package/controls/ArcballControls.js +3 -3
  28. package/controls/ArcballControls.js.map +1 -1
  29. package/controls/FirstPersonControls.cjs +1 -1
  30. package/controls/FirstPersonControls.cjs.map +1 -1
  31. package/controls/FirstPersonControls.js +1 -1
  32. package/controls/FirstPersonControls.js.map +1 -1
  33. package/controls/OrbitControls.cjs +2 -2
  34. package/controls/OrbitControls.cjs.map +1 -1
  35. package/controls/OrbitControls.js +3 -3
  36. package/controls/OrbitControls.js.map +1 -1
  37. package/controls/PointerLockControls.cjs +2 -2
  38. package/controls/PointerLockControls.cjs.map +1 -1
  39. package/controls/PointerLockControls.js +3 -3
  40. package/controls/PointerLockControls.js.map +1 -1
  41. package/csm/CSM.cjs +4 -4
  42. package/csm/CSM.cjs.map +1 -1
  43. package/csm/CSM.js +5 -5
  44. package/csm/CSM.js.map +1 -1
  45. package/csm/CSMFrustum.cjs +1 -1
  46. package/csm/CSMFrustum.cjs.map +1 -1
  47. package/csm/CSMFrustum.js +2 -2
  48. package/csm/CSMFrustum.js.map +1 -1
  49. package/deprecated/Geometry.cjs +722 -715
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +723 -716
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +2 -1
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +3 -2
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +2 -1
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +3 -2
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +2 -1
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +3 -2
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +133 -122
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +34 -21
  68. package/exporters/DRACOExporter.js +133 -122
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +170 -167
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +170 -167
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +524 -515
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +524 -515
  77. package/geometries/LightningStrike.js.map +1 -1
  78. package/geometries/RoundedBoxGeometry.cjs +1 -1
  79. package/geometries/RoundedBoxGeometry.cjs.map +1 -1
  80. package/geometries/RoundedBoxGeometry.js +2 -2
  81. package/geometries/RoundedBoxGeometry.js.map +1 -1
  82. package/helpers/RaycasterHelper.cjs +2 -2
  83. package/helpers/RaycasterHelper.cjs.map +1 -1
  84. package/helpers/RaycasterHelper.js +3 -3
  85. package/helpers/RaycasterHelper.js.map +1 -1
  86. package/helpers/VertexNormalsHelper.cjs +3 -3
  87. package/helpers/VertexNormalsHelper.cjs.map +1 -1
  88. package/helpers/VertexNormalsHelper.js +4 -4
  89. package/helpers/VertexNormalsHelper.js.map +1 -1
  90. package/helpers/VertexTangentsHelper.cjs +2 -2
  91. package/helpers/VertexTangentsHelper.cjs.map +1 -1
  92. package/helpers/VertexTangentsHelper.js +3 -3
  93. package/helpers/VertexTangentsHelper.js.map +1 -1
  94. package/interactive/InteractiveGroup.cjs +1 -1
  95. package/interactive/InteractiveGroup.cjs.map +1 -1
  96. package/interactive/InteractiveGroup.js +2 -2
  97. package/interactive/InteractiveGroup.js.map +1 -1
  98. package/interactive/SelectionBox.cjs +15 -15
  99. package/interactive/SelectionBox.cjs.map +1 -1
  100. package/interactive/SelectionBox.js +16 -16
  101. package/interactive/SelectionBox.js.map +1 -1
  102. package/libs/chevrotain.cjs +1 -1
  103. package/libs/chevrotain.cjs.map +1 -1
  104. package/libs/chevrotain.js +1 -1
  105. package/libs/chevrotain.js.map +1 -1
  106. package/libs/lottie.cjs +1 -1
  107. package/libs/lottie.cjs.map +1 -1
  108. package/libs/lottie.js +1 -1
  109. package/libs/lottie.js.map +1 -1
  110. package/libs/opentype.cjs +1 -1
  111. package/libs/opentype.cjs.map +1 -1
  112. package/libs/opentype.js +1 -1
  113. package/libs/opentype.js.map +1 -1
  114. package/lights/LightProbeGenerator.cjs +5 -5
  115. package/lights/LightProbeGenerator.cjs.map +1 -1
  116. package/lights/LightProbeGenerator.js +5 -5
  117. package/lights/LightProbeGenerator.js.map +1 -1
  118. package/lights/RectAreaLightUniformsLib.cjs +3 -3
  119. package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
  120. package/lights/RectAreaLightUniformsLib.js +3 -3
  121. package/lights/RectAreaLightUniformsLib.js.map +1 -1
  122. package/lines/LineMaterial.cjs +2 -1
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +3 -2
  125. package/lines/LineMaterial.js.map +1 -1
  126. package/lines/LineSegments2.cjs +13 -13
  127. package/lines/LineSegments2.cjs.map +1 -1
  128. package/lines/LineSegments2.js +14 -14
  129. package/lines/LineSegments2.js.map +1 -1
  130. package/lines/LineSegmentsGeometry.cjs +2 -2
  131. package/lines/LineSegmentsGeometry.cjs.map +1 -1
  132. package/lines/LineSegmentsGeometry.js +3 -3
  133. package/lines/LineSegmentsGeometry.js.map +1 -1
  134. package/lines/Wireframe.cjs +3 -3
  135. package/lines/Wireframe.cjs.map +1 -1
  136. package/lines/Wireframe.js +4 -4
  137. package/lines/Wireframe.js.map +1 -1
  138. package/loaders/BasisTextureLoader.cjs +441 -435
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +441 -435
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +2 -1
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +3 -2
  145. package/loaders/EXRLoader.js.map +1 -1
  146. package/loaders/FBXLoader.cjs +2 -2
  147. package/loaders/FBXLoader.cjs.map +1 -1
  148. package/loaders/FBXLoader.js +2 -2
  149. package/loaders/FBXLoader.js.map +1 -1
  150. package/loaders/FontLoader.cjs +2 -2
  151. package/loaders/FontLoader.cjs.map +1 -1
  152. package/loaders/FontLoader.d.ts +2 -2
  153. package/loaders/FontLoader.js +2 -2
  154. package/loaders/FontLoader.js.map +1 -1
  155. package/loaders/GLTFLoader.cjs +2 -2
  156. package/loaders/GLTFLoader.cjs.map +1 -1
  157. package/loaders/GLTFLoader.js +2 -2
  158. package/loaders/GLTFLoader.js.map +1 -1
  159. package/loaders/KTX2Loader.cjs +377 -374
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +377 -374
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +5 -4
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +6 -5
  166. package/loaders/LDrawLoader.js.map +1 -1
  167. package/loaders/OBJLoader.cjs +5 -5
  168. package/loaders/OBJLoader.cjs.map +1 -1
  169. package/loaders/OBJLoader.js +6 -6
  170. package/loaders/OBJLoader.js.map +1 -1
  171. package/loaders/PRWMLoader.cjs +46 -43
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +46 -43
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1694 -1688
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1694 -1688
  178. package/loaders/SVGLoader.js.map +1 -1
  179. package/loaders/XLoader.cjs +1 -1
  180. package/loaders/XLoader.cjs.map +1 -1
  181. package/loaders/XLoader.js +1 -1
  182. package/loaders/XLoader.js.map +1 -1
  183. package/math/Capsule.cjs +3 -3
  184. package/math/Capsule.cjs.map +1 -1
  185. package/math/Capsule.js +3 -3
  186. package/math/Capsule.js.map +1 -1
  187. package/math/ColorConverter.cjs +9 -9
  188. package/math/ColorConverter.cjs.map +1 -1
  189. package/math/ColorConverter.js +9 -9
  190. package/math/ColorConverter.js.map +1 -1
  191. package/math/ConvexHull.cjs +53 -50
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +53 -50
  194. package/math/ConvexHull.js.map +1 -1
  195. package/math/ImprovedNoise.cjs +1 -1
  196. package/math/ImprovedNoise.cjs.map +1 -1
  197. package/math/ImprovedNoise.js +1 -1
  198. package/math/ImprovedNoise.js.map +1 -1
  199. package/math/MeshSurfaceSampler.cjs +2 -2
  200. package/math/MeshSurfaceSampler.cjs.map +1 -1
  201. package/math/MeshSurfaceSampler.js +2 -2
  202. package/math/MeshSurfaceSampler.js.map +1 -1
  203. package/math/OBB.cjs +14 -14
  204. package/math/OBB.cjs.map +1 -1
  205. package/math/OBB.js +15 -15
  206. package/math/OBB.js.map +1 -1
  207. package/math/Octree.cjs +7 -7
  208. package/math/Octree.cjs.map +1 -1
  209. package/math/Octree.js +8 -8
  210. package/math/Octree.js.map +1 -1
  211. package/misc/ConvexObjectBreaker.cjs +271 -268
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +272 -269
  214. package/misc/ConvexObjectBreaker.js.map +1 -1
  215. package/misc/Gyroscope.cjs +6 -6
  216. package/misc/Gyroscope.cjs.map +1 -1
  217. package/misc/Gyroscope.js +7 -7
  218. package/misc/Gyroscope.js.map +1 -1
  219. package/modifiers/CurveModifier.cjs +1 -1
  220. package/modifiers/CurveModifier.cjs.map +1 -1
  221. package/modifiers/CurveModifier.js +2 -2
  222. package/modifiers/CurveModifier.js.map +1 -1
  223. package/modifiers/SimplifyModifier.cjs +2 -2
  224. package/modifiers/SimplifyModifier.cjs.map +1 -1
  225. package/modifiers/SimplifyModifier.js +2 -2
  226. package/modifiers/SimplifyModifier.js.map +1 -1
  227. package/objects/BatchedMesh.cjs +2 -2
  228. package/objects/BatchedMesh.cjs.map +1 -1
  229. package/objects/BatchedMesh.js +3 -3
  230. package/objects/BatchedMesh.js.map +1 -1
  231. package/objects/GroundProjectedEnv.cjs +2 -1
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +3 -2
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +209 -206
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +209 -206
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +154 -146
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +154 -146
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +183 -180
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +183 -180
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +164 -161
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +164 -161
  250. package/objects/Refractor.js.map +1 -1
  251. package/objects/ShadowMesh.cjs +1 -1
  252. package/objects/ShadowMesh.cjs.map +1 -1
  253. package/objects/ShadowMesh.js +2 -2
  254. package/objects/ShadowMesh.js.map +1 -1
  255. package/objects/Sky.cjs +35 -32
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +17 -42
  258. package/objects/Sky.js +35 -32
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +2 -1
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +3 -2
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +143 -140
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +143 -140
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +267 -264
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +267 -264
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +253 -250
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +253 -250
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +379 -376
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +379 -376
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +205 -202
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +205 -202
  284. package/postprocessing/UnrealBloomPass.js.map +1 -1
  285. package/renderers/CSS2DRenderer.cjs +5 -5
  286. package/renderers/CSS2DRenderer.cjs.map +1 -1
  287. package/renderers/CSS2DRenderer.js +5 -5
  288. package/renderers/CSS2DRenderer.js.map +1 -1
  289. package/renderers/CSS3DRenderer.cjs +5 -5
  290. package/renderers/CSS3DRenderer.cjs.map +1 -1
  291. package/renderers/CSS3DRenderer.js +6 -6
  292. package/renderers/CSS3DRenderer.js.map +1 -1
  293. package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +71 -46
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +41 -22
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +41 -22
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +20 -6
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +20 -6
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +46 -26
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +46 -26
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +33 -19
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +33 -19
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +117 -90
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +117 -90
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +333 -232
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +333 -232
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +38 -22
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +38 -22
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +35 -21
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +35 -21
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +34 -19
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +34 -19
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +43 -24
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +43 -24
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +30 -16
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +30 -16
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +38 -21
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +38 -21
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +98 -69
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +98 -69
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +70 -59
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +70 -59
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +49 -28
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +49 -28
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1098 -1089
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1098 -1089
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +57 -29
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +57 -29
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +70 -43
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +70 -43
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +74 -53
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +74 -53
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +55 -35
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +55 -35
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +33 -19
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +33 -19
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +193 -116
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +193 -116
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +270 -192
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +270 -192
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +43 -27
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +43 -27
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +47 -31
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +47 -31
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +37 -24
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +37 -24
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +43 -24
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +43 -24
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +34 -17
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +34 -17
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +39 -26
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +39 -26
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +36 -21
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +36 -21
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +147 -97
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +147 -97
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +31 -18
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +31 -18
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +33 -20
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +33 -20
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +154 -117
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +154 -117
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +358 -270
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +358 -270
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +236 -142
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +236 -142
  440. package/shaders/SSAOShader.js.map +1 -1
  441. package/shaders/SSRShader.cjs +4 -4
  442. package/shaders/SSRShader.cjs.map +1 -1
  443. package/shaders/SSRShader.js +4 -4
  444. package/shaders/SSRShader.js.map +1 -1
  445. package/shaders/SepiaShader.cjs +36 -20
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +36 -20
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +64 -37
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +64 -37
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +29 -16
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +29 -16
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +55 -35
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +55 -35
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +275 -165
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +275 -165
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +50 -27
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +50 -27
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +32 -17
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +32 -17
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +43 -27
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +43 -27
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +43 -27
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +43 -27
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +264 -213
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +264 -213
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +63 -35
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +63 -35
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +2 -1
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +3 -2
  492. package/utils/GeometryCompressionUtils.js.map +1 -1
  493. package/utils/RoughnessMipmapper.cjs +3 -3
  494. package/utils/RoughnessMipmapper.cjs.map +1 -1
  495. package/utils/RoughnessMipmapper.js +4 -4
  496. package/utils/RoughnessMipmapper.js.map +1 -1
  497. package/webxr/ARButton.cjs +3 -3
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +3 -3
  500. package/webxr/ARButton.js +3 -3
  501. package/webxr/ARButton.js.map +1 -1
  502. package/webxr/OculusHandPointerModel.cjs +2 -2
  503. package/webxr/OculusHandPointerModel.cjs.map +1 -1
  504. package/webxr/OculusHandPointerModel.js +2 -2
  505. package/webxr/OculusHandPointerModel.js.map +1 -1
  506. package/webxr/VRButton.cjs +98 -95
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +9 -6
  509. package/webxr/VRButton.js +98 -95
  510. package/webxr/VRButton.js.map +1 -1
  511. package/webxr/XRHandPrimitiveModel.cjs +2 -2
  512. package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
  513. package/webxr/XRHandPrimitiveModel.js +3 -3
  514. package/webxr/XRHandPrimitiveModel.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"OBJLoader.cjs","sources":["../../src/loaders/OBJLoader.js"],"sourcesContent":["import {\n BufferGeometry,\n FileLoader,\n Float32BufferAttribute,\n Group,\n LineBasicMaterial,\n LineSegments,\n Loader,\n Material,\n Mesh,\n MeshPhongMaterial,\n Points,\n PointsMaterial,\n Vector3,\n} from 'three'\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /\n// usemap map_name\nconst _map_use_pattern = /^usemap /\n\nconst _vA = new Vector3()\nconst _vB = new Vector3()\nconst _vC = new Vector3()\n\nconst _ab = new Vector3()\nconst _cb = new Vector3()\n\nfunction ParserState() {\n const state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n\n materials: {},\n materialLibraries: [],\n\n startObject: function (name, fromDeclaration) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && this.object.fromDeclaration === false) {\n this.object.name = name\n this.object.fromDeclaration = fromDeclaration !== false\n return\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n\n this.object = {\n name: name || '',\n fromDeclaration: fromDeclaration !== false,\n\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n hasUVIndices: false,\n },\n materials: [],\n smooth: true,\n\n startMaterial: function (name, libraries) {\n const previous = this._finalize(false)\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1)\n }\n\n const material = {\n index: this.materials.length,\n name: name || '',\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n\n clone: function (index) {\n const cloned = {\n index: typeof index === 'number' ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n }\n cloned.clone = this.clone.bind(cloned)\n return cloned\n },\n }\n\n this.materials.push(material)\n\n return material\n },\n\n currentMaterial: function () {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1]\n }\n\n return undefined\n },\n\n _finalize: function (end) {\n const lastMultiMaterial = this.currentMaterial()\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart\n lastMultiMaterial.inherited = false\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1)\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth,\n })\n }\n\n return lastMultiMaterial\n },\n }\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0)\n declared.inherited = true\n this.object.materials.push(declared)\n }\n\n this.objects.push(this.object)\n },\n\n finalize: function () {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n },\n\n parseVertexIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseNormalIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseUVIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 2) * 2\n },\n\n addVertex: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addVertexPoint: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addVertexLine: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addNormal: function (a, b, c) {\n const src = this.normals\n const dst = this.object.geometry.normals\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addFaceNormal: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.normals\n\n _vA.fromArray(src, a)\n _vB.fromArray(src, b)\n _vC.fromArray(src, c)\n\n _cb.subVectors(_vC, _vB)\n _ab.subVectors(_vA, _vB)\n _cb.cross(_ab)\n\n _cb.normalize()\n\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n },\n\n addColor: function (a, b, c) {\n const src = this.colors\n const dst = this.object.geometry.colors\n\n if (src[a] !== undefined) dst.push(src[a + 0], src[a + 1], src[a + 2])\n if (src[b] !== undefined) dst.push(src[b + 0], src[b + 1], src[b + 2])\n if (src[c] !== undefined) dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addUV: function (a, b, c) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n dst.push(src[b + 0], src[b + 1])\n dst.push(src[c + 0], src[c + 1])\n },\n\n addDefaultUV: function () {\n const dst = this.object.geometry.uvs\n\n dst.push(0, 0)\n dst.push(0, 0)\n dst.push(0, 0)\n },\n\n addUVLine: function (a) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n },\n\n addFace: function (a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length\n\n let ia = this.parseVertexIndex(a, vLen)\n let ib = this.parseVertexIndex(b, vLen)\n let ic = this.parseVertexIndex(c, vLen)\n\n this.addVertex(ia, ib, ic)\n this.addColor(ia, ib, ic)\n\n // normals\n\n if (na !== undefined && na !== '') {\n const nLen = this.normals.length\n\n ia = this.parseNormalIndex(na, nLen)\n ib = this.parseNormalIndex(nb, nLen)\n ic = this.parseNormalIndex(nc, nLen)\n\n this.addNormal(ia, ib, ic)\n } else {\n this.addFaceNormal(ia, ib, ic)\n }\n\n // uvs\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length\n\n ia = this.parseUVIndex(ua, uvLen)\n ib = this.parseUVIndex(ub, uvLen)\n ic = this.parseUVIndex(uc, uvLen)\n\n this.addUV(ia, ib, ic)\n\n this.object.geometry.hasUVIndices = true\n } else {\n // add placeholder values (for inconsistent face definitions)\n\n this.addDefaultUV()\n }\n },\n\n addPointGeometry: function (vertices) {\n this.object.geometry.type = 'Points'\n\n const vLen = this.vertices.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n const index = this.parseVertexIndex(vertices[vi], vLen)\n\n this.addVertexPoint(index)\n this.addColor(index)\n }\n },\n\n addLineGeometry: function (vertices, uvs) {\n this.object.geometry.type = 'Line'\n\n const vLen = this.vertices.length\n const uvLen = this.uvs.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen))\n }\n\n for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen))\n }\n },\n }\n\n state.startObject('', false)\n\n return state\n}\n\n//\n\nclass OBJLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.materials = null\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(\n url,\n function (text) {\n try {\n onLoad(scope.parse(text))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n setMaterials(materials) {\n this.materials = materials\n\n return this\n }\n\n parse(text) {\n const state = new ParserState()\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n')\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '')\n }\n\n const lines = text.split('\\n')\n let line = '',\n lineFirstChar = ''\n let lineLength = 0\n let result = []\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function'\n\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i]\n\n line = trimLeft ? line.trimLeft() : line.trim()\n\n lineLength = line.length\n\n if (lineLength === 0) continue\n\n lineFirstChar = line.charAt(0)\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/)\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n if (data.length >= 7) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]))\n } else {\n // if no colors are defined, add placeholders so color and vertex indices match\n\n state.colors.push(undefined, undefined, undefined)\n }\n\n break\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n break\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]))\n break\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim()\n const vertexData = lineData.split(/\\s+/)\n const faceVertices = []\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j]\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/')\n faceVertices.push(vertexParts)\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0]\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j]\n const v3 = faceVertices[j + 1]\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2])\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ')\n let lineVertices = []\n const lineUVs = []\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts\n } else {\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/')\n\n if (parts[0] !== '') lineVertices.push(parts[0])\n if (parts[1] !== '') lineUVs.push(parts[1])\n }\n }\n\n state.addLineGeometry(lineVertices, lineUVs)\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim()\n const pointData = lineData.split(' ')\n\n state.addPointGeometry(pointData)\n } else if ((result = _object_pattern.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // let name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1)\n\n state.startObject(name)\n } else if (_material_use_pattern.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries)\n } else if (_material_library_pattern.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim())\n } else if (_map_use_pattern.test(line)) {\n // the line is parsed but ignored since the loader assumes textures are defined MTL files\n // (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n console.warn(\n 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.',\n )\n } else if (lineFirstChar === 's') {\n result = line.split(' ')\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase()\n state.object.smooth = value !== '0' && value !== 'off'\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true\n }\n\n const material = state.object.currentMaterial()\n if (material) material.smooth = state.object.smooth\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue\n\n console.warn('THREE.OBJLoader: Unexpected line: \"' + line + '\"')\n }\n }\n\n state.finalize()\n\n const container = new Group()\n container.materialLibraries = [].concat(state.materialLibraries)\n\n const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0)\n\n if (hasPrimitives === true) {\n for (let i = 0, l = state.objects.length; i < l; i++) {\n const object = state.objects[i]\n const geometry = object.geometry\n const materials = object.materials\n const isLine = geometry.type === 'Line'\n const isPoints = geometry.type === 'Points'\n let hasVertexColors = false\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(geometry.vertices, 3))\n\n if (geometry.normals.length > 0) {\n buffergeometry.setAttribute('normal', new Float32BufferAttribute(geometry.normals, 3))\n }\n\n if (geometry.colors.length > 0) {\n hasVertexColors = true\n buffergeometry.setAttribute('color', new Float32BufferAttribute(geometry.colors, 3))\n }\n\n if (geometry.hasUVIndices === true) {\n buffergeometry.setAttribute('uv', new Float32BufferAttribute(geometry.uvs, 2))\n }\n\n // Create materials\n\n const createdMaterials = []\n\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors\n let material = state.materials[materialHash]\n\n if (this.materials !== null) {\n material = this.materials.create(sourceMaterial.name)\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if (isLine && material && !(material instanceof LineBasicMaterial)) {\n const materialLine = new LineBasicMaterial()\n Material.prototype.copy.call(materialLine, material)\n materialLine.color.copy(material.color)\n material = materialLine\n } else if (isPoints && material && !(material instanceof PointsMaterial)) {\n const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false })\n Material.prototype.copy.call(materialPoints, material)\n materialPoints.color.copy(material.color)\n materialPoints.map = material.map\n material = materialPoints\n }\n }\n\n if (material === undefined) {\n if (isLine) {\n material = new LineBasicMaterial()\n } else if (isPoints) {\n material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n } else {\n material = new MeshPhongMaterial()\n }\n\n material.name = sourceMaterial.name\n material.flatShading = sourceMaterial.smooth ? false : true\n material.vertexColors = hasVertexColors\n\n state.materials[materialHash] = material\n }\n\n createdMaterials.push(material)\n }\n\n // Create mesh\n\n let mesh\n\n if (createdMaterials.length > 1) {\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi)\n }\n\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials)\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials)\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials)\n }\n } else {\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials[0])\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials[0])\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials[0])\n }\n }\n\n mesh.name = object.name\n\n container.add(mesh)\n }\n } else {\n // if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n if (state.vertices.length > 0) {\n const material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(state.vertices, 3))\n\n if (state.colors.length > 0 && state.colors[0] !== undefined) {\n buffergeometry.setAttribute('color', new Float32BufferAttribute(state.colors, 3))\n material.vertexColors = true\n }\n\n const points = new Points(buffergeometry, material)\n container.add(points)\n }\n }\n\n return container\n }\n}\n\nexport { OBJLoader }\n"],"names":["Vector3","name","Loader","FileLoader","Group","BufferGeometry","Float32BufferAttribute","LineBasicMaterial","Material","PointsMaterial","MeshPhongMaterial","LineSegments","Points","Mesh"],"mappings":";;;AAiBA,MAAM,kBAAkB;AAExB,MAAM,4BAA4B;AAElC,MAAM,wBAAwB;AAE9B,MAAM,mBAAmB;AAEzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AACzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AACzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AAEzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AACzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AAEzB,SAAS,cAAc;AACrB,QAAM,QAAQ;AAAA,IACZ,SAAS,CAAE;AAAA,IACX,QAAQ,CAAE;AAAA,IAEV,UAAU,CAAE;AAAA,IACZ,SAAS,CAAE;AAAA,IACX,QAAQ,CAAE;AAAA,IACV,KAAK,CAAE;AAAA,IAEP,WAAW,CAAE;AAAA,IACb,mBAAmB,CAAE;AAAA,IAErB,aAAa,SAAU,MAAM,iBAAiB;AAG5C,UAAI,KAAK,UAAU,KAAK,OAAO,oBAAoB,OAAO;AACxD,aAAK,OAAO,OAAO;AACnB,aAAK,OAAO,kBAAkB,oBAAoB;AAClD;AAAA,MACD;AAED,YAAM,mBACJ,KAAK,UAAU,OAAO,KAAK,OAAO,oBAAoB,aAAa,KAAK,OAAO,gBAAe,IAAK;AAErG,UAAI,KAAK,UAAU,OAAO,KAAK,OAAO,cAAc,YAAY;AAC9D,aAAK,OAAO,UAAU,IAAI;AAAA,MAC3B;AAED,WAAK,SAAS;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,iBAAiB,oBAAoB;AAAA,QAErC,UAAU;AAAA,UACR,UAAU,CAAE;AAAA,UACZ,SAAS,CAAE;AAAA,UACX,QAAQ,CAAE;AAAA,UACV,KAAK,CAAE;AAAA,UACP,cAAc;AAAA,QACf;AAAA,QACD,WAAW,CAAE;AAAA,QACb,QAAQ;AAAA,QAER,eAAe,SAAUC,OAAM,WAAW;AACxC,gBAAM,WAAW,KAAK,UAAU,KAAK;AAIrC,cAAI,aAAa,SAAS,aAAa,SAAS,cAAc,IAAI;AAChE,iBAAK,UAAU,OAAO,SAAS,OAAO,CAAC;AAAA,UACxC;AAED,gBAAM,WAAW;AAAA,YACf,OAAO,KAAK,UAAU;AAAA,YACtB,MAAMA,SAAQ;AAAA,YACd,QAAQ,MAAM,QAAQ,SAAS,KAAK,UAAU,SAAS,IAAI,UAAU,UAAU,SAAS,CAAC,IAAI;AAAA,YAC7F,QAAQ,aAAa,SAAY,SAAS,SAAS,KAAK;AAAA,YACxD,YAAY,aAAa,SAAY,SAAS,WAAW;AAAA,YACzD,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,WAAW;AAAA,YAEX,OAAO,SAAU,OAAO;AACtB,oBAAM,SAAS;AAAA,gBACb,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK;AAAA,gBAChD,MAAM,KAAK;AAAA,gBACX,QAAQ,KAAK;AAAA,gBACb,QAAQ,KAAK;AAAA,gBACb,YAAY;AAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,WAAW;AAAA,cACZ;AACD,qBAAO,QAAQ,KAAK,MAAM,KAAK,MAAM;AACrC,qBAAO;AAAA,YACR;AAAA,UACF;AAED,eAAK,UAAU,KAAK,QAAQ;AAE5B,iBAAO;AAAA,QACR;AAAA,QAED,iBAAiB,WAAY;AAC3B,cAAI,KAAK,UAAU,SAAS,GAAG;AAC7B,mBAAO,KAAK,UAAU,KAAK,UAAU,SAAS,CAAC;AAAA,UAChD;AAED,iBAAO;AAAA,QACR;AAAA,QAED,WAAW,SAAU,KAAK;AACxB,gBAAM,oBAAoB,KAAK,gBAAiB;AAChD,cAAI,qBAAqB,kBAAkB,aAAa,IAAI;AAC1D,8BAAkB,WAAW,KAAK,SAAS,SAAS,SAAS;AAC7D,8BAAkB,aAAa,kBAAkB,WAAW,kBAAkB;AAC9E,8BAAkB,YAAY;AAAA,UAC/B;AAGD,cAAI,OAAO,KAAK,UAAU,SAAS,GAAG;AACpC,qBAAS,KAAK,KAAK,UAAU,SAAS,GAAG,MAAM,GAAG,MAAM;AACtD,kBAAI,KAAK,UAAU,EAAE,EAAE,cAAc,GAAG;AACtC,qBAAK,UAAU,OAAO,IAAI,CAAC;AAAA,cAC5B;AAAA,YACF;AAAA,UACF;AAGD,cAAI,OAAO,KAAK,UAAU,WAAW,GAAG;AACtC,iBAAK,UAAU,KAAK;AAAA,cAClB,MAAM;AAAA,cACN,QAAQ,KAAK;AAAA,YAC3B,CAAa;AAAA,UACF;AAED,iBAAO;AAAA,QACR;AAAA,MACF;AAQD,UAAI,oBAAoB,iBAAiB,QAAQ,OAAO,iBAAiB,UAAU,YAAY;AAC7F,cAAM,WAAW,iBAAiB,MAAM,CAAC;AACzC,iBAAS,YAAY;AACrB,aAAK,OAAO,UAAU,KAAK,QAAQ;AAAA,MACpC;AAED,WAAK,QAAQ,KAAK,KAAK,MAAM;AAAA,IAC9B;AAAA,IAED,UAAU,WAAY;AACpB,UAAI,KAAK,UAAU,OAAO,KAAK,OAAO,cAAc,YAAY;AAC9D,aAAK,OAAO,UAAU,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IAED,kBAAkB,SAAU,OAAO,KAAK;AACtC,YAAM,QAAQ,SAAS,OAAO,EAAE;AAChC,cAAQ,SAAS,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;AAAA,IACrD;AAAA,IAED,kBAAkB,SAAU,OAAO,KAAK;AACtC,YAAM,QAAQ,SAAS,OAAO,EAAE;AAChC,cAAQ,SAAS,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;AAAA,IACrD;AAAA,IAED,cAAc,SAAU,OAAO,KAAK;AAClC,YAAM,QAAQ,SAAS,OAAO,EAAE;AAChC,cAAQ,SAAS,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;AAAA,IACrD;AAAA,IAED,WAAW,SAAU,GAAG,GAAG,GAAG;AAC5B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3C,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3C,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IAC5C;AAAA,IAED,gBAAgB,SAAU,GAAG;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IAC5C;AAAA,IAED,eAAe,SAAU,GAAG;AAC1B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IAC5C;AAAA,IAED,WAAW,SAAU,GAAG,GAAG,GAAG;AAC5B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3C,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3C,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IAC5C;AAAA,IAED,eAAe,SAAU,GAAG,GAAG,GAAG;AAChC,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,UAAU,KAAK,CAAC;AACpB,UAAI,UAAU,KAAK,CAAC;AACpB,UAAI,UAAU,KAAK,CAAC;AAEpB,UAAI,WAAW,KAAK,GAAG;AACvB,UAAI,WAAW,KAAK,GAAG;AACvB,UAAI,MAAM,GAAG;AAEb,UAAI,UAAW;AAEf,UAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5B,UAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5B,UAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,IAC7B;AAAA,IAED,UAAU,SAAU,GAAG,GAAG,GAAG;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,IAAI,CAAC,MAAM;AAAW,YAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACrE,UAAI,IAAI,CAAC,MAAM;AAAW,YAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACrE,UAAI,IAAI,CAAC,MAAM;AAAW,YAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IACtE;AAAA,IAED,OAAO,SAAU,GAAG,GAAG,GAAG;AACxB,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC/B,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC/B,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IAChC;AAAA,IAED,cAAc,WAAY;AACxB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,GAAG,CAAC;AACb,UAAI,KAAK,GAAG,CAAC;AACb,UAAI,KAAK,GAAG,CAAC;AAAA,IACd;AAAA,IAED,WAAW,SAAU,GAAG;AACtB,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,OAAO,SAAS;AAEjC,UAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,IAChC;AAAA,IAED,SAAS,SAAU,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAClD,YAAM,OAAO,KAAK,SAAS;AAE3B,UAAI,KAAK,KAAK,iBAAiB,GAAG,IAAI;AACtC,UAAI,KAAK,KAAK,iBAAiB,GAAG,IAAI;AACtC,UAAI,KAAK,KAAK,iBAAiB,GAAG,IAAI;AAEtC,WAAK,UAAU,IAAI,IAAI,EAAE;AACzB,WAAK,SAAS,IAAI,IAAI,EAAE;AAIxB,UAAI,OAAO,UAAa,OAAO,IAAI;AACjC,cAAM,OAAO,KAAK,QAAQ;AAE1B,aAAK,KAAK,iBAAiB,IAAI,IAAI;AACnC,aAAK,KAAK,iBAAiB,IAAI,IAAI;AACnC,aAAK,KAAK,iBAAiB,IAAI,IAAI;AAEnC,aAAK,UAAU,IAAI,IAAI,EAAE;AAAA,MACjC,OAAa;AACL,aAAK,cAAc,IAAI,IAAI,EAAE;AAAA,MAC9B;AAID,UAAI,OAAO,UAAa,OAAO,IAAI;AACjC,cAAM,QAAQ,KAAK,IAAI;AAEvB,aAAK,KAAK,aAAa,IAAI,KAAK;AAChC,aAAK,KAAK,aAAa,IAAI,KAAK;AAChC,aAAK,KAAK,aAAa,IAAI,KAAK;AAEhC,aAAK,MAAM,IAAI,IAAI,EAAE;AAErB,aAAK,OAAO,SAAS,eAAe;AAAA,MAC5C,OAAa;AAGL,aAAK,aAAc;AAAA,MACpB;AAAA,IACF;AAAA,IAED,kBAAkB,SAAU,UAAU;AACpC,WAAK,OAAO,SAAS,OAAO;AAE5B,YAAM,OAAO,KAAK,SAAS;AAE3B,eAAS,KAAK,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG,MAAM;AAClD,cAAM,QAAQ,KAAK,iBAAiB,SAAS,EAAE,GAAG,IAAI;AAEtD,aAAK,eAAe,KAAK;AACzB,aAAK,SAAS,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IAED,iBAAiB,SAAU,UAAU,KAAK;AACxC,WAAK,OAAO,SAAS,OAAO;AAE5B,YAAM,OAAO,KAAK,SAAS;AAC3B,YAAM,QAAQ,KAAK,IAAI;AAEvB,eAAS,KAAK,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG,MAAM;AAClD,aAAK,cAAc,KAAK,iBAAiB,SAAS,EAAE,GAAG,IAAI,CAAC;AAAA,MAC7D;AAED,eAAS,MAAM,GAAG,IAAI,IAAI,QAAQ,MAAM,GAAG,OAAO;AAChD,aAAK,UAAU,KAAK,aAAa,IAAI,GAAG,GAAG,KAAK,CAAC;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAED,QAAM,YAAY,IAAI,KAAK;AAE3B,SAAO;AACT;AAIA,MAAM,kBAAkBC,MAAAA,OAAO;AAAA,EAC7B,YAAY,SAAS;AACnB,UAAM,OAAO;AAEb,SAAK,YAAY;AAAA,EAClB;AAAA,EAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAIC,iBAAW,KAAK,OAAO;AAC1C,WAAO,QAAQ,KAAK,IAAI;AACxB,WAAO,iBAAiB,KAAK,aAAa;AAC1C,WAAO,mBAAmB,KAAK,eAAe;AAC9C,WAAO;AAAA,MACL;AAAA,MACA,SAAU,MAAM;AACd,YAAI;AACF,iBAAO,MAAM,MAAM,IAAI,CAAC;AAAA,QACzB,SAAQ,GAAP;AACA,cAAI,SAAS;AACX,oBAAQ,CAAC;AAAA,UACrB,OAAiB;AACL,oBAAQ,MAAM,CAAC;AAAA,UAChB;AAED,gBAAM,QAAQ,UAAU,GAAG;AAAA,QAC5B;AAAA,MACF;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,aAAa,WAAW;AACtB,SAAK,YAAY;AAEjB,WAAO;AAAA,EACR;AAAA,EAED,MAAM,MAAM;AACV,UAAM,QAAQ,IAAI,YAAa;AAE/B,QAAI,KAAK,QAAQ,MAAM,MAAM,IAAI;AAE/B,aAAO,KAAK,QAAQ,SAAS,IAAI;AAAA,IAClC;AAED,QAAI,KAAK,QAAQ,MAAM,MAAM,IAAI;AAE/B,aAAO,KAAK,QAAQ,SAAS,EAAE;AAAA,IAChC;AAED,UAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAI,OAAO,IACT,gBAAgB;AAClB,QAAI,aAAa;AACjB,QAAI,SAAS,CAAE;AAGf,UAAM,WAAW,OAAO,GAAG,aAAa;AAExC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC5C,aAAO,MAAM,CAAC;AAEd,aAAO,WAAW,KAAK,SAAQ,IAAK,KAAK,KAAM;AAE/C,mBAAa,KAAK;AAElB,UAAI,eAAe;AAAG;AAEtB,sBAAgB,KAAK,OAAO,CAAC;AAG7B,UAAI,kBAAkB;AAAK;AAE3B,UAAI,kBAAkB,KAAK;AACzB,cAAM,OAAO,KAAK,MAAM,KAAK;AAE7B,gBAAQ,KAAK,CAAC,GAAC;AAAA,UACb,KAAK;AACH,kBAAM,SAAS,KAAK,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC;AACjF,gBAAI,KAAK,UAAU,GAAG;AACpB,oBAAM,OAAO,KAAK,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC;AAAA,YAC7F,OAAmB;AAGL,oBAAM,OAAO,KAAK,QAAW,QAAW,MAAS;AAAA,YAClD;AAED;AAAA,UACF,KAAK;AACH,kBAAM,QAAQ,KAAK,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC;AAChF;AAAA,UACF,KAAK;AACH,kBAAM,IAAI,KAAK,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC;AACvD;AAAA,QACH;AAAA,MACT,WAAiB,kBAAkB,KAAK;AAChC,cAAM,WAAW,KAAK,OAAO,CAAC,EAAE,KAAM;AACtC,cAAM,aAAa,SAAS,MAAM,KAAK;AACvC,cAAM,eAAe,CAAE;AAIvB,iBAAS,IAAI,GAAG,KAAK,WAAW,QAAQ,IAAI,IAAI,KAAK;AACnD,gBAAM,SAAS,WAAW,CAAC;AAE3B,cAAI,OAAO,SAAS,GAAG;AACrB,kBAAM,cAAc,OAAO,MAAM,GAAG;AACpC,yBAAa,KAAK,WAAW;AAAA,UAC9B;AAAA,QACF;AAID,cAAM,KAAK,aAAa,CAAC;AAEzB,iBAAS,IAAI,GAAG,KAAK,aAAa,SAAS,GAAG,IAAI,IAAI,KAAK;AACzD,gBAAM,KAAK,aAAa,CAAC;AACzB,gBAAM,KAAK,aAAa,IAAI,CAAC;AAE7B,gBAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QAC5E;AAAA,MACT,WAAiB,kBAAkB,KAAK;AAChC,cAAM,YAAY,KAAK,UAAU,CAAC,EAAE,KAAM,EAAC,MAAM,GAAG;AACpD,YAAI,eAAe,CAAE;AACrB,cAAM,UAAU,CAAE;AAElB,YAAI,KAAK,QAAQ,GAAG,MAAM,IAAI;AAC5B,yBAAe;AAAA,QACzB,OAAe;AACL,mBAAS,KAAK,GAAG,OAAO,UAAU,QAAQ,KAAK,MAAM,MAAM;AACzD,kBAAM,QAAQ,UAAU,EAAE,EAAE,MAAM,GAAG;AAErC,gBAAI,MAAM,CAAC,MAAM;AAAI,2BAAa,KAAK,MAAM,CAAC,CAAC;AAC/C,gBAAI,MAAM,CAAC,MAAM;AAAI,sBAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,UAC3C;AAAA,QACF;AAED,cAAM,gBAAgB,cAAc,OAAO;AAAA,MACnD,WAAiB,kBAAkB,KAAK;AAChC,cAAM,WAAW,KAAK,OAAO,CAAC,EAAE,KAAM;AACtC,cAAM,YAAY,SAAS,MAAM,GAAG;AAEpC,cAAM,iBAAiB,SAAS;AAAA,MACxC,YAAkB,SAAS,gBAAgB,KAAK,IAAI,OAAO,MAAM;AAOzD,cAAM,QAAQ,MAAM,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,CAAC;AAExD,cAAM,YAAY,IAAI;AAAA,MACvB,WAAU,sBAAsB,KAAK,IAAI,GAAG;AAG3C,cAAM,OAAO,cAAc,KAAK,UAAU,CAAC,EAAE,KAAI,GAAI,MAAM,iBAAiB;AAAA,MAC7E,WAAU,0BAA0B,KAAK,IAAI,GAAG;AAG/C,cAAM,kBAAkB,KAAK,KAAK,UAAU,CAAC,EAAE,MAAM;AAAA,MACtD,WAAU,iBAAiB,KAAK,IAAI,GAAG;AAItC,gBAAQ;AAAA,UACN;AAAA,QACD;AAAA,MACT,WAAiB,kBAAkB,KAAK;AAChC,iBAAS,KAAK,MAAM,GAAG;AAsBvB,YAAI,OAAO,SAAS,GAAG;AACrB,gBAAM,QAAQ,OAAO,CAAC,EAAE,KAAI,EAAG,YAAa;AAC5C,gBAAM,OAAO,SAAS,UAAU,OAAO,UAAU;AAAA,QAC3D,OAAe;AAEL,gBAAM,OAAO,SAAS;AAAA,QACvB;AAED,cAAM,WAAW,MAAM,OAAO,gBAAiB;AAC/C,YAAI;AAAU,mBAAS,SAAS,MAAM,OAAO;AAAA,MACrD,OAAa;AAEL,YAAI,SAAS;AAAM;AAEnB,gBAAQ,KAAK,wCAAwC,OAAO,GAAG;AAAA,MAChE;AAAA,IACF;AAED,UAAM,SAAU;AAEhB,UAAM,YAAY,IAAIC,YAAO;AAC7B,cAAU,oBAAoB,CAAA,EAAG,OAAO,MAAM,iBAAiB;AAE/D,UAAM,gBAAgB,EAAE,MAAM,QAAQ,WAAW,KAAK,MAAM,QAAQ,CAAC,EAAE,SAAS,SAAS,WAAW;AAEpG,QAAI,kBAAkB,MAAM;AAC1B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,QAAQ,IAAI,GAAG,KAAK;AACpD,cAAM,SAAS,MAAM,QAAQ,CAAC;AAC9B,cAAM,WAAW,OAAO;AACxB,cAAM,YAAY,OAAO;AACzB,cAAM,SAAS,SAAS,SAAS;AACjC,cAAM,WAAW,SAAS,SAAS;AACnC,YAAI,kBAAkB;AAGtB,YAAI,SAAS,SAAS,WAAW;AAAG;AAEpC,cAAM,iBAAiB,IAAIC,qBAAgB;AAE3C,uBAAe,aAAa,YAAY,IAAIC,MAAsB,uBAAC,SAAS,UAAU,CAAC,CAAC;AAExF,YAAI,SAAS,QAAQ,SAAS,GAAG;AAC/B,yBAAe,aAAa,UAAU,IAAIA,MAAsB,uBAAC,SAAS,SAAS,CAAC,CAAC;AAAA,QACtF;AAED,YAAI,SAAS,OAAO,SAAS,GAAG;AAC9B,4BAAkB;AAClB,yBAAe,aAAa,SAAS,IAAIA,MAAsB,uBAAC,SAAS,QAAQ,CAAC,CAAC;AAAA,QACpF;AAED,YAAI,SAAS,iBAAiB,MAAM;AAClC,yBAAe,aAAa,MAAM,IAAIA,MAAsB,uBAAC,SAAS,KAAK,CAAC,CAAC;AAAA,QAC9E;AAID,cAAM,mBAAmB,CAAE;AAE3B,iBAAS,KAAK,GAAG,QAAQ,UAAU,QAAQ,KAAK,OAAO,MAAM;AAC3D,gBAAM,iBAAiB,UAAU,EAAE;AACnC,gBAAM,eAAe,eAAe,OAAO,MAAM,eAAe,SAAS,MAAM;AAC/E,cAAI,WAAW,MAAM,UAAU,YAAY;AAE3C,cAAI,KAAK,cAAc,MAAM;AAC3B,uBAAW,KAAK,UAAU,OAAO,eAAe,IAAI;AAGpD,gBAAI,UAAU,YAAY,EAAE,oBAAoBC,MAAiB,oBAAG;AAClE,oBAAM,eAAe,IAAIA,wBAAmB;AAC5CC,oBAAAA,SAAS,UAAU,KAAK,KAAK,cAAc,QAAQ;AACnD,2BAAa,MAAM,KAAK,SAAS,KAAK;AACtC,yBAAW;AAAA,YACZ,WAAU,YAAY,YAAY,EAAE,oBAAoBC,MAAc,iBAAG;AACxE,oBAAM,iBAAiB,IAAIA,qBAAe,EAAE,MAAM,IAAI,iBAAiB,OAAO;AAC9ED,oBAAAA,SAAS,UAAU,KAAK,KAAK,gBAAgB,QAAQ;AACrD,6BAAe,MAAM,KAAK,SAAS,KAAK;AACxC,6BAAe,MAAM,SAAS;AAC9B,yBAAW;AAAA,YACZ;AAAA,UACF;AAED,cAAI,aAAa,QAAW;AAC1B,gBAAI,QAAQ;AACV,yBAAW,IAAID,MAAAA,kBAAmB;AAAA,YACnC,WAAU,UAAU;AACnB,yBAAW,IAAIE,MAAAA,eAAe,EAAE,MAAM,GAAG,iBAAiB,OAAO;AAAA,YAC/E,OAAmB;AACL,yBAAW,IAAIC,MAAAA,kBAAmB;AAAA,YACnC;AAED,qBAAS,OAAO,eAAe;AAC/B,qBAAS,cAAc,eAAe,SAAS,QAAQ;AACvD,qBAAS,eAAe;AAExB,kBAAM,UAAU,YAAY,IAAI;AAAA,UACjC;AAED,2BAAiB,KAAK,QAAQ;AAAA,QAC/B;AAID,YAAI;AAEJ,YAAI,iBAAiB,SAAS,GAAG;AAC/B,mBAAS,KAAK,GAAG,QAAQ,UAAU,QAAQ,KAAK,OAAO,MAAM;AAC3D,kBAAM,iBAAiB,UAAU,EAAE;AACnC,2BAAe,SAAS,eAAe,YAAY,eAAe,YAAY,EAAE;AAAA,UACjF;AAED,cAAI,QAAQ;AACV,mBAAO,IAAIC,MAAAA,aAAa,gBAAgB,gBAAgB;AAAA,UACzD,WAAU,UAAU;AACnB,mBAAO,IAAIC,MAAAA,OAAO,gBAAgB,gBAAgB;AAAA,UAC9D,OAAiB;AACL,mBAAO,IAAIC,MAAAA,KAAK,gBAAgB,gBAAgB;AAAA,UACjD;AAAA,QACX,OAAe;AACL,cAAI,QAAQ;AACV,mBAAO,IAAIF,MAAY,aAAC,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,UAC5D,WAAU,UAAU;AACnB,mBAAO,IAAIC,MAAM,OAAC,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,UACjE,OAAiB;AACL,mBAAO,IAAIC,MAAI,KAAC,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,UACpD;AAAA,QACF;AAED,aAAK,OAAO,OAAO;AAEnB,kBAAU,IAAI,IAAI;AAAA,MACnB;AAAA,IACP,OAAW;AAGL,UAAI,MAAM,SAAS,SAAS,GAAG;AAC7B,cAAM,WAAW,IAAIJ,qBAAe,EAAE,MAAM,GAAG,iBAAiB,OAAO;AAEvE,cAAM,iBAAiB,IAAIJ,qBAAgB;AAE3C,uBAAe,aAAa,YAAY,IAAIC,MAAsB,uBAAC,MAAM,UAAU,CAAC,CAAC;AAErF,YAAI,MAAM,OAAO,SAAS,KAAK,MAAM,OAAO,CAAC,MAAM,QAAW;AAC5D,yBAAe,aAAa,SAAS,IAAIA,MAAsB,uBAAC,MAAM,QAAQ,CAAC,CAAC;AAChF,mBAAS,eAAe;AAAA,QACzB;AAED,cAAM,SAAS,IAAIM,aAAO,gBAAgB,QAAQ;AAClD,kBAAU,IAAI,MAAM;AAAA,MACrB;AAAA,IACF;AAED,WAAO;AAAA,EACR;AACH;;"}
1
+ {"version":3,"file":"OBJLoader.cjs","sources":["../../src/loaders/OBJLoader.js"],"sourcesContent":["import {\n BufferGeometry,\n FileLoader,\n Float32BufferAttribute,\n Group,\n LineBasicMaterial,\n LineSegments,\n Loader,\n Material,\n Mesh,\n MeshPhongMaterial,\n Points,\n PointsMaterial,\n Vector3,\n} from 'three'\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /\n// usemap map_name\nconst _map_use_pattern = /^usemap /\n\nconst _vA = /* @__PURE__ */ new Vector3()\nconst _vB = /* @__PURE__ */ new Vector3()\nconst _vC = /* @__PURE__ */ new Vector3()\n\nconst _ab = /* @__PURE__ */ new Vector3()\nconst _cb = /* @__PURE__ */ new Vector3()\n\nfunction ParserState() {\n const state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n\n materials: {},\n materialLibraries: [],\n\n startObject: function (name, fromDeclaration) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && this.object.fromDeclaration === false) {\n this.object.name = name\n this.object.fromDeclaration = fromDeclaration !== false\n return\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n\n this.object = {\n name: name || '',\n fromDeclaration: fromDeclaration !== false,\n\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n hasUVIndices: false,\n },\n materials: [],\n smooth: true,\n\n startMaterial: function (name, libraries) {\n const previous = this._finalize(false)\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1)\n }\n\n const material = {\n index: this.materials.length,\n name: name || '',\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n\n clone: function (index) {\n const cloned = {\n index: typeof index === 'number' ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n }\n cloned.clone = this.clone.bind(cloned)\n return cloned\n },\n }\n\n this.materials.push(material)\n\n return material\n },\n\n currentMaterial: function () {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1]\n }\n\n return undefined\n },\n\n _finalize: function (end) {\n const lastMultiMaterial = this.currentMaterial()\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart\n lastMultiMaterial.inherited = false\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1)\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth,\n })\n }\n\n return lastMultiMaterial\n },\n }\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0)\n declared.inherited = true\n this.object.materials.push(declared)\n }\n\n this.objects.push(this.object)\n },\n\n finalize: function () {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n },\n\n parseVertexIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseNormalIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseUVIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 2) * 2\n },\n\n addVertex: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addVertexPoint: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addVertexLine: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addNormal: function (a, b, c) {\n const src = this.normals\n const dst = this.object.geometry.normals\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addFaceNormal: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.normals\n\n _vA.fromArray(src, a)\n _vB.fromArray(src, b)\n _vC.fromArray(src, c)\n\n _cb.subVectors(_vC, _vB)\n _ab.subVectors(_vA, _vB)\n _cb.cross(_ab)\n\n _cb.normalize()\n\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n },\n\n addColor: function (a, b, c) {\n const src = this.colors\n const dst = this.object.geometry.colors\n\n if (src[a] !== undefined) dst.push(src[a + 0], src[a + 1], src[a + 2])\n if (src[b] !== undefined) dst.push(src[b + 0], src[b + 1], src[b + 2])\n if (src[c] !== undefined) dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addUV: function (a, b, c) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n dst.push(src[b + 0], src[b + 1])\n dst.push(src[c + 0], src[c + 1])\n },\n\n addDefaultUV: function () {\n const dst = this.object.geometry.uvs\n\n dst.push(0, 0)\n dst.push(0, 0)\n dst.push(0, 0)\n },\n\n addUVLine: function (a) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n },\n\n addFace: function (a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length\n\n let ia = this.parseVertexIndex(a, vLen)\n let ib = this.parseVertexIndex(b, vLen)\n let ic = this.parseVertexIndex(c, vLen)\n\n this.addVertex(ia, ib, ic)\n this.addColor(ia, ib, ic)\n\n // normals\n\n if (na !== undefined && na !== '') {\n const nLen = this.normals.length\n\n ia = this.parseNormalIndex(na, nLen)\n ib = this.parseNormalIndex(nb, nLen)\n ic = this.parseNormalIndex(nc, nLen)\n\n this.addNormal(ia, ib, ic)\n } else {\n this.addFaceNormal(ia, ib, ic)\n }\n\n // uvs\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length\n\n ia = this.parseUVIndex(ua, uvLen)\n ib = this.parseUVIndex(ub, uvLen)\n ic = this.parseUVIndex(uc, uvLen)\n\n this.addUV(ia, ib, ic)\n\n this.object.geometry.hasUVIndices = true\n } else {\n // add placeholder values (for inconsistent face definitions)\n\n this.addDefaultUV()\n }\n },\n\n addPointGeometry: function (vertices) {\n this.object.geometry.type = 'Points'\n\n const vLen = this.vertices.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n const index = this.parseVertexIndex(vertices[vi], vLen)\n\n this.addVertexPoint(index)\n this.addColor(index)\n }\n },\n\n addLineGeometry: function (vertices, uvs) {\n this.object.geometry.type = 'Line'\n\n const vLen = this.vertices.length\n const uvLen = this.uvs.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen))\n }\n\n for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen))\n }\n },\n }\n\n state.startObject('', false)\n\n return state\n}\n\n//\n\nclass OBJLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.materials = null\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(\n url,\n function (text) {\n try {\n onLoad(scope.parse(text))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n setMaterials(materials) {\n this.materials = materials\n\n return this\n }\n\n parse(text) {\n const state = new ParserState()\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n')\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '')\n }\n\n const lines = text.split('\\n')\n let line = '',\n lineFirstChar = ''\n let lineLength = 0\n let result = []\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function'\n\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i]\n\n line = trimLeft ? line.trimLeft() : line.trim()\n\n lineLength = line.length\n\n if (lineLength === 0) continue\n\n lineFirstChar = line.charAt(0)\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/)\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n if (data.length >= 7) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]))\n } else {\n // if no colors are defined, add placeholders so color and vertex indices match\n\n state.colors.push(undefined, undefined, undefined)\n }\n\n break\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n break\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]))\n break\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim()\n const vertexData = lineData.split(/\\s+/)\n const faceVertices = []\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j]\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/')\n faceVertices.push(vertexParts)\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0]\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j]\n const v3 = faceVertices[j + 1]\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2])\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ')\n let lineVertices = []\n const lineUVs = []\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts\n } else {\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/')\n\n if (parts[0] !== '') lineVertices.push(parts[0])\n if (parts[1] !== '') lineUVs.push(parts[1])\n }\n }\n\n state.addLineGeometry(lineVertices, lineUVs)\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim()\n const pointData = lineData.split(' ')\n\n state.addPointGeometry(pointData)\n } else if ((result = _object_pattern.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // let name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1)\n\n state.startObject(name)\n } else if (_material_use_pattern.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries)\n } else if (_material_library_pattern.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim())\n } else if (_map_use_pattern.test(line)) {\n // the line is parsed but ignored since the loader assumes textures are defined MTL files\n // (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n console.warn(\n 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.',\n )\n } else if (lineFirstChar === 's') {\n result = line.split(' ')\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase()\n state.object.smooth = value !== '0' && value !== 'off'\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true\n }\n\n const material = state.object.currentMaterial()\n if (material) material.smooth = state.object.smooth\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue\n\n console.warn('THREE.OBJLoader: Unexpected line: \"' + line + '\"')\n }\n }\n\n state.finalize()\n\n const container = new Group()\n container.materialLibraries = [].concat(state.materialLibraries)\n\n const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0)\n\n if (hasPrimitives === true) {\n for (let i = 0, l = state.objects.length; i < l; i++) {\n const object = state.objects[i]\n const geometry = object.geometry\n const materials = object.materials\n const isLine = geometry.type === 'Line'\n const isPoints = geometry.type === 'Points'\n let hasVertexColors = false\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(geometry.vertices, 3))\n\n if (geometry.normals.length > 0) {\n buffergeometry.setAttribute('normal', new Float32BufferAttribute(geometry.normals, 3))\n }\n\n if (geometry.colors.length > 0) {\n hasVertexColors = true\n buffergeometry.setAttribute('color', new Float32BufferAttribute(geometry.colors, 3))\n }\n\n if (geometry.hasUVIndices === true) {\n buffergeometry.setAttribute('uv', new Float32BufferAttribute(geometry.uvs, 2))\n }\n\n // Create materials\n\n const createdMaterials = []\n\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors\n let material = state.materials[materialHash]\n\n if (this.materials !== null) {\n material = this.materials.create(sourceMaterial.name)\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if (isLine && material && !(material instanceof LineBasicMaterial)) {\n const materialLine = new LineBasicMaterial()\n Material.prototype.copy.call(materialLine, material)\n materialLine.color.copy(material.color)\n material = materialLine\n } else if (isPoints && material && !(material instanceof PointsMaterial)) {\n const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false })\n Material.prototype.copy.call(materialPoints, material)\n materialPoints.color.copy(material.color)\n materialPoints.map = material.map\n material = materialPoints\n }\n }\n\n if (material === undefined) {\n if (isLine) {\n material = new LineBasicMaterial()\n } else if (isPoints) {\n material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n } else {\n material = new MeshPhongMaterial()\n }\n\n material.name = sourceMaterial.name\n material.flatShading = sourceMaterial.smooth ? false : true\n material.vertexColors = hasVertexColors\n\n state.materials[materialHash] = material\n }\n\n createdMaterials.push(material)\n }\n\n // Create mesh\n\n let mesh\n\n if (createdMaterials.length > 1) {\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi)\n }\n\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials)\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials)\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials)\n }\n } else {\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials[0])\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials[0])\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials[0])\n }\n }\n\n mesh.name = object.name\n\n container.add(mesh)\n }\n } else {\n // if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n if (state.vertices.length > 0) {\n const material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(state.vertices, 3))\n\n if (state.colors.length > 0 && state.colors[0] !== undefined) {\n buffergeometry.setAttribute('color', new Float32BufferAttribute(state.colors, 3))\n material.vertexColors = true\n }\n\n const points = new Points(buffergeometry, material)\n container.add(points)\n }\n }\n\n return container\n }\n}\n\nexport { OBJLoader }\n"],"names":["Vector3","name","Loader","FileLoader","Group","BufferGeometry","Float32BufferAttribute","LineBasicMaterial","Material","PointsMaterial","MeshPhongMaterial","LineSegments","Points","Mesh"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import { Vector3, Loader, FileLoader, Group, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Material, PointsMaterial, MeshPhongMaterial, LineSegments, Points, Mesh } from "three";
1
+ import { Loader, FileLoader, Group, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Material, PointsMaterial, MeshPhongMaterial, LineSegments, Points, Mesh, Vector3 } from "three";
2
2
  const _object_pattern = /^[og]\s*(.+)?/;
3
3
  const _material_library_pattern = /^mtllib /;
4
4
  const _material_use_pattern = /^usemtl /;
5
5
  const _map_use_pattern = /^usemap /;
6
- const _vA = new Vector3();
7
- const _vB = new Vector3();
8
- const _vC = new Vector3();
9
- const _ab = new Vector3();
10
- const _cb = new Vector3();
6
+ const _vA = /* @__PURE__ */ new Vector3();
7
+ const _vB = /* @__PURE__ */ new Vector3();
8
+ const _vC = /* @__PURE__ */ new Vector3();
9
+ const _ab = /* @__PURE__ */ new Vector3();
10
+ const _cb = /* @__PURE__ */ new Vector3();
11
11
  function ParserState() {
12
12
  const state = {
13
13
  objects: [],
@@ -1 +1 @@
1
- {"version":3,"file":"OBJLoader.js","sources":["../../src/loaders/OBJLoader.js"],"sourcesContent":["import {\n BufferGeometry,\n FileLoader,\n Float32BufferAttribute,\n Group,\n LineBasicMaterial,\n LineSegments,\n Loader,\n Material,\n Mesh,\n MeshPhongMaterial,\n Points,\n PointsMaterial,\n Vector3,\n} from 'three'\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /\n// usemap map_name\nconst _map_use_pattern = /^usemap /\n\nconst _vA = new Vector3()\nconst _vB = new Vector3()\nconst _vC = new Vector3()\n\nconst _ab = new Vector3()\nconst _cb = new Vector3()\n\nfunction ParserState() {\n const state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n\n materials: {},\n materialLibraries: [],\n\n startObject: function (name, fromDeclaration) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && this.object.fromDeclaration === false) {\n this.object.name = name\n this.object.fromDeclaration = fromDeclaration !== false\n return\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n\n this.object = {\n name: name || '',\n fromDeclaration: fromDeclaration !== false,\n\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n hasUVIndices: false,\n },\n materials: [],\n smooth: true,\n\n startMaterial: function (name, libraries) {\n const previous = this._finalize(false)\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1)\n }\n\n const material = {\n index: this.materials.length,\n name: name || '',\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n\n clone: function (index) {\n const cloned = {\n index: typeof index === 'number' ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n }\n cloned.clone = this.clone.bind(cloned)\n return cloned\n },\n }\n\n this.materials.push(material)\n\n return material\n },\n\n currentMaterial: function () {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1]\n }\n\n return undefined\n },\n\n _finalize: function (end) {\n const lastMultiMaterial = this.currentMaterial()\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart\n lastMultiMaterial.inherited = false\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1)\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth,\n })\n }\n\n return lastMultiMaterial\n },\n }\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0)\n declared.inherited = true\n this.object.materials.push(declared)\n }\n\n this.objects.push(this.object)\n },\n\n finalize: function () {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n },\n\n parseVertexIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseNormalIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseUVIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 2) * 2\n },\n\n addVertex: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addVertexPoint: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addVertexLine: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addNormal: function (a, b, c) {\n const src = this.normals\n const dst = this.object.geometry.normals\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addFaceNormal: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.normals\n\n _vA.fromArray(src, a)\n _vB.fromArray(src, b)\n _vC.fromArray(src, c)\n\n _cb.subVectors(_vC, _vB)\n _ab.subVectors(_vA, _vB)\n _cb.cross(_ab)\n\n _cb.normalize()\n\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n },\n\n addColor: function (a, b, c) {\n const src = this.colors\n const dst = this.object.geometry.colors\n\n if (src[a] !== undefined) dst.push(src[a + 0], src[a + 1], src[a + 2])\n if (src[b] !== undefined) dst.push(src[b + 0], src[b + 1], src[b + 2])\n if (src[c] !== undefined) dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addUV: function (a, b, c) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n dst.push(src[b + 0], src[b + 1])\n dst.push(src[c + 0], src[c + 1])\n },\n\n addDefaultUV: function () {\n const dst = this.object.geometry.uvs\n\n dst.push(0, 0)\n dst.push(0, 0)\n dst.push(0, 0)\n },\n\n addUVLine: function (a) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n },\n\n addFace: function (a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length\n\n let ia = this.parseVertexIndex(a, vLen)\n let ib = this.parseVertexIndex(b, vLen)\n let ic = this.parseVertexIndex(c, vLen)\n\n this.addVertex(ia, ib, ic)\n this.addColor(ia, ib, ic)\n\n // normals\n\n if (na !== undefined && na !== '') {\n const nLen = this.normals.length\n\n ia = this.parseNormalIndex(na, nLen)\n ib = this.parseNormalIndex(nb, nLen)\n ic = this.parseNormalIndex(nc, nLen)\n\n this.addNormal(ia, ib, ic)\n } else {\n this.addFaceNormal(ia, ib, ic)\n }\n\n // uvs\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length\n\n ia = this.parseUVIndex(ua, uvLen)\n ib = this.parseUVIndex(ub, uvLen)\n ic = this.parseUVIndex(uc, uvLen)\n\n this.addUV(ia, ib, ic)\n\n this.object.geometry.hasUVIndices = true\n } else {\n // add placeholder values (for inconsistent face definitions)\n\n this.addDefaultUV()\n }\n },\n\n addPointGeometry: function (vertices) {\n this.object.geometry.type = 'Points'\n\n const vLen = this.vertices.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n const index = this.parseVertexIndex(vertices[vi], vLen)\n\n this.addVertexPoint(index)\n this.addColor(index)\n }\n },\n\n addLineGeometry: function (vertices, uvs) {\n this.object.geometry.type = 'Line'\n\n const vLen = this.vertices.length\n const uvLen = this.uvs.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen))\n }\n\n for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen))\n }\n },\n }\n\n state.startObject('', false)\n\n return state\n}\n\n//\n\nclass OBJLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.materials = null\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(\n url,\n function (text) {\n try {\n onLoad(scope.parse(text))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n setMaterials(materials) {\n this.materials = materials\n\n return this\n }\n\n parse(text) {\n const state = new ParserState()\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n')\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '')\n }\n\n const lines = text.split('\\n')\n let line = '',\n lineFirstChar = ''\n let lineLength = 0\n let result = []\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function'\n\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i]\n\n line = trimLeft ? line.trimLeft() : line.trim()\n\n lineLength = line.length\n\n if (lineLength === 0) continue\n\n lineFirstChar = line.charAt(0)\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/)\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n if (data.length >= 7) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]))\n } else {\n // if no colors are defined, add placeholders so color and vertex indices match\n\n state.colors.push(undefined, undefined, undefined)\n }\n\n break\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n break\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]))\n break\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim()\n const vertexData = lineData.split(/\\s+/)\n const faceVertices = []\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j]\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/')\n faceVertices.push(vertexParts)\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0]\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j]\n const v3 = faceVertices[j + 1]\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2])\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ')\n let lineVertices = []\n const lineUVs = []\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts\n } else {\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/')\n\n if (parts[0] !== '') lineVertices.push(parts[0])\n if (parts[1] !== '') lineUVs.push(parts[1])\n }\n }\n\n state.addLineGeometry(lineVertices, lineUVs)\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim()\n const pointData = lineData.split(' ')\n\n state.addPointGeometry(pointData)\n } else if ((result = _object_pattern.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // let name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1)\n\n state.startObject(name)\n } else if (_material_use_pattern.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries)\n } else if (_material_library_pattern.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim())\n } else if (_map_use_pattern.test(line)) {\n // the line is parsed but ignored since the loader assumes textures are defined MTL files\n // (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n console.warn(\n 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.',\n )\n } else if (lineFirstChar === 's') {\n result = line.split(' ')\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase()\n state.object.smooth = value !== '0' && value !== 'off'\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true\n }\n\n const material = state.object.currentMaterial()\n if (material) material.smooth = state.object.smooth\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue\n\n console.warn('THREE.OBJLoader: Unexpected line: \"' + line + '\"')\n }\n }\n\n state.finalize()\n\n const container = new Group()\n container.materialLibraries = [].concat(state.materialLibraries)\n\n const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0)\n\n if (hasPrimitives === true) {\n for (let i = 0, l = state.objects.length; i < l; i++) {\n const object = state.objects[i]\n const geometry = object.geometry\n const materials = object.materials\n const isLine = geometry.type === 'Line'\n const isPoints = geometry.type === 'Points'\n let hasVertexColors = false\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(geometry.vertices, 3))\n\n if (geometry.normals.length > 0) {\n buffergeometry.setAttribute('normal', new Float32BufferAttribute(geometry.normals, 3))\n }\n\n if (geometry.colors.length > 0) {\n hasVertexColors = true\n buffergeometry.setAttribute('color', new Float32BufferAttribute(geometry.colors, 3))\n }\n\n if (geometry.hasUVIndices === true) {\n buffergeometry.setAttribute('uv', new Float32BufferAttribute(geometry.uvs, 2))\n }\n\n // Create materials\n\n const createdMaterials = []\n\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors\n let material = state.materials[materialHash]\n\n if (this.materials !== null) {\n material = this.materials.create(sourceMaterial.name)\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if (isLine && material && !(material instanceof LineBasicMaterial)) {\n const materialLine = new LineBasicMaterial()\n Material.prototype.copy.call(materialLine, material)\n materialLine.color.copy(material.color)\n material = materialLine\n } else if (isPoints && material && !(material instanceof PointsMaterial)) {\n const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false })\n Material.prototype.copy.call(materialPoints, material)\n materialPoints.color.copy(material.color)\n materialPoints.map = material.map\n material = materialPoints\n }\n }\n\n if (material === undefined) {\n if (isLine) {\n material = new LineBasicMaterial()\n } else if (isPoints) {\n material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n } else {\n material = new MeshPhongMaterial()\n }\n\n material.name = sourceMaterial.name\n material.flatShading = sourceMaterial.smooth ? false : true\n material.vertexColors = hasVertexColors\n\n state.materials[materialHash] = material\n }\n\n createdMaterials.push(material)\n }\n\n // Create mesh\n\n let mesh\n\n if (createdMaterials.length > 1) {\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi)\n }\n\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials)\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials)\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials)\n }\n } else {\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials[0])\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials[0])\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials[0])\n }\n }\n\n mesh.name = object.name\n\n container.add(mesh)\n }\n } else {\n // if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n if (state.vertices.length > 0) {\n const material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(state.vertices, 3))\n\n if (state.colors.length > 0 && state.colors[0] !== undefined) {\n buffergeometry.setAttribute('color', new Float32BufferAttribute(state.colors, 3))\n material.vertexColors = true\n }\n\n const points = new Points(buffergeometry, material)\n container.add(points)\n }\n }\n\n return container\n }\n}\n\nexport { OBJLoader }\n"],"names":["name"],"mappings":"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"}
1
+ {"version":3,"file":"OBJLoader.js","sources":["../../src/loaders/OBJLoader.js"],"sourcesContent":["import {\n BufferGeometry,\n FileLoader,\n Float32BufferAttribute,\n Group,\n LineBasicMaterial,\n LineSegments,\n Loader,\n Material,\n Mesh,\n MeshPhongMaterial,\n Points,\n PointsMaterial,\n Vector3,\n} from 'three'\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /\n// usemap map_name\nconst _map_use_pattern = /^usemap /\n\nconst _vA = /* @__PURE__ */ new Vector3()\nconst _vB = /* @__PURE__ */ new Vector3()\nconst _vC = /* @__PURE__ */ new Vector3()\n\nconst _ab = /* @__PURE__ */ new Vector3()\nconst _cb = /* @__PURE__ */ new Vector3()\n\nfunction ParserState() {\n const state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n\n materials: {},\n materialLibraries: [],\n\n startObject: function (name, fromDeclaration) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && this.object.fromDeclaration === false) {\n this.object.name = name\n this.object.fromDeclaration = fromDeclaration !== false\n return\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n\n this.object = {\n name: name || '',\n fromDeclaration: fromDeclaration !== false,\n\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n hasUVIndices: false,\n },\n materials: [],\n smooth: true,\n\n startMaterial: function (name, libraries) {\n const previous = this._finalize(false)\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1)\n }\n\n const material = {\n index: this.materials.length,\n name: name || '',\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n\n clone: function (index) {\n const cloned = {\n index: typeof index === 'number' ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n }\n cloned.clone = this.clone.bind(cloned)\n return cloned\n },\n }\n\n this.materials.push(material)\n\n return material\n },\n\n currentMaterial: function () {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1]\n }\n\n return undefined\n },\n\n _finalize: function (end) {\n const lastMultiMaterial = this.currentMaterial()\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart\n lastMultiMaterial.inherited = false\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1)\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth,\n })\n }\n\n return lastMultiMaterial\n },\n }\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0)\n declared.inherited = true\n this.object.materials.push(declared)\n }\n\n this.objects.push(this.object)\n },\n\n finalize: function () {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true)\n }\n },\n\n parseVertexIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseNormalIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 3) * 3\n },\n\n parseUVIndex: function (value, len) {\n const index = parseInt(value, 10)\n return (index >= 0 ? index - 1 : index + len / 2) * 2\n },\n\n addVertex: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addVertexPoint: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addVertexLine: function (a) {\n const src = this.vertices\n const dst = this.object.geometry.vertices\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n },\n\n addNormal: function (a, b, c) {\n const src = this.normals\n const dst = this.object.geometry.normals\n\n dst.push(src[a + 0], src[a + 1], src[a + 2])\n dst.push(src[b + 0], src[b + 1], src[b + 2])\n dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addFaceNormal: function (a, b, c) {\n const src = this.vertices\n const dst = this.object.geometry.normals\n\n _vA.fromArray(src, a)\n _vB.fromArray(src, b)\n _vC.fromArray(src, c)\n\n _cb.subVectors(_vC, _vB)\n _ab.subVectors(_vA, _vB)\n _cb.cross(_ab)\n\n _cb.normalize()\n\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n dst.push(_cb.x, _cb.y, _cb.z)\n },\n\n addColor: function (a, b, c) {\n const src = this.colors\n const dst = this.object.geometry.colors\n\n if (src[a] !== undefined) dst.push(src[a + 0], src[a + 1], src[a + 2])\n if (src[b] !== undefined) dst.push(src[b + 0], src[b + 1], src[b + 2])\n if (src[c] !== undefined) dst.push(src[c + 0], src[c + 1], src[c + 2])\n },\n\n addUV: function (a, b, c) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n dst.push(src[b + 0], src[b + 1])\n dst.push(src[c + 0], src[c + 1])\n },\n\n addDefaultUV: function () {\n const dst = this.object.geometry.uvs\n\n dst.push(0, 0)\n dst.push(0, 0)\n dst.push(0, 0)\n },\n\n addUVLine: function (a) {\n const src = this.uvs\n const dst = this.object.geometry.uvs\n\n dst.push(src[a + 0], src[a + 1])\n },\n\n addFace: function (a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length\n\n let ia = this.parseVertexIndex(a, vLen)\n let ib = this.parseVertexIndex(b, vLen)\n let ic = this.parseVertexIndex(c, vLen)\n\n this.addVertex(ia, ib, ic)\n this.addColor(ia, ib, ic)\n\n // normals\n\n if (na !== undefined && na !== '') {\n const nLen = this.normals.length\n\n ia = this.parseNormalIndex(na, nLen)\n ib = this.parseNormalIndex(nb, nLen)\n ic = this.parseNormalIndex(nc, nLen)\n\n this.addNormal(ia, ib, ic)\n } else {\n this.addFaceNormal(ia, ib, ic)\n }\n\n // uvs\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length\n\n ia = this.parseUVIndex(ua, uvLen)\n ib = this.parseUVIndex(ub, uvLen)\n ic = this.parseUVIndex(uc, uvLen)\n\n this.addUV(ia, ib, ic)\n\n this.object.geometry.hasUVIndices = true\n } else {\n // add placeholder values (for inconsistent face definitions)\n\n this.addDefaultUV()\n }\n },\n\n addPointGeometry: function (vertices) {\n this.object.geometry.type = 'Points'\n\n const vLen = this.vertices.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n const index = this.parseVertexIndex(vertices[vi], vLen)\n\n this.addVertexPoint(index)\n this.addColor(index)\n }\n },\n\n addLineGeometry: function (vertices, uvs) {\n this.object.geometry.type = 'Line'\n\n const vLen = this.vertices.length\n const uvLen = this.uvs.length\n\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen))\n }\n\n for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen))\n }\n },\n }\n\n state.startObject('', false)\n\n return state\n}\n\n//\n\nclass OBJLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.materials = null\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(\n url,\n function (text) {\n try {\n onLoad(scope.parse(text))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n setMaterials(materials) {\n this.materials = materials\n\n return this\n }\n\n parse(text) {\n const state = new ParserState()\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n')\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '')\n }\n\n const lines = text.split('\\n')\n let line = '',\n lineFirstChar = ''\n let lineLength = 0\n let result = []\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function'\n\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i]\n\n line = trimLeft ? line.trimLeft() : line.trim()\n\n lineLength = line.length\n\n if (lineLength === 0) continue\n\n lineFirstChar = line.charAt(0)\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/)\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n if (data.length >= 7) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]))\n } else {\n // if no colors are defined, add placeholders so color and vertex indices match\n\n state.colors.push(undefined, undefined, undefined)\n }\n\n break\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]))\n break\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]))\n break\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim()\n const vertexData = lineData.split(/\\s+/)\n const faceVertices = []\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j]\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/')\n faceVertices.push(vertexParts)\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0]\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j]\n const v3 = faceVertices[j + 1]\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2])\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ')\n let lineVertices = []\n const lineUVs = []\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts\n } else {\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/')\n\n if (parts[0] !== '') lineVertices.push(parts[0])\n if (parts[1] !== '') lineUVs.push(parts[1])\n }\n }\n\n state.addLineGeometry(lineVertices, lineUVs)\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim()\n const pointData = lineData.split(' ')\n\n state.addPointGeometry(pointData)\n } else if ((result = _object_pattern.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // let name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1)\n\n state.startObject(name)\n } else if (_material_use_pattern.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries)\n } else if (_material_library_pattern.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim())\n } else if (_map_use_pattern.test(line)) {\n // the line is parsed but ignored since the loader assumes textures are defined MTL files\n // (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n console.warn(\n 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.',\n )\n } else if (lineFirstChar === 's') {\n result = line.split(' ')\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase()\n state.object.smooth = value !== '0' && value !== 'off'\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true\n }\n\n const material = state.object.currentMaterial()\n if (material) material.smooth = state.object.smooth\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue\n\n console.warn('THREE.OBJLoader: Unexpected line: \"' + line + '\"')\n }\n }\n\n state.finalize()\n\n const container = new Group()\n container.materialLibraries = [].concat(state.materialLibraries)\n\n const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0)\n\n if (hasPrimitives === true) {\n for (let i = 0, l = state.objects.length; i < l; i++) {\n const object = state.objects[i]\n const geometry = object.geometry\n const materials = object.materials\n const isLine = geometry.type === 'Line'\n const isPoints = geometry.type === 'Points'\n let hasVertexColors = false\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(geometry.vertices, 3))\n\n if (geometry.normals.length > 0) {\n buffergeometry.setAttribute('normal', new Float32BufferAttribute(geometry.normals, 3))\n }\n\n if (geometry.colors.length > 0) {\n hasVertexColors = true\n buffergeometry.setAttribute('color', new Float32BufferAttribute(geometry.colors, 3))\n }\n\n if (geometry.hasUVIndices === true) {\n buffergeometry.setAttribute('uv', new Float32BufferAttribute(geometry.uvs, 2))\n }\n\n // Create materials\n\n const createdMaterials = []\n\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors\n let material = state.materials[materialHash]\n\n if (this.materials !== null) {\n material = this.materials.create(sourceMaterial.name)\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if (isLine && material && !(material instanceof LineBasicMaterial)) {\n const materialLine = new LineBasicMaterial()\n Material.prototype.copy.call(materialLine, material)\n materialLine.color.copy(material.color)\n material = materialLine\n } else if (isPoints && material && !(material instanceof PointsMaterial)) {\n const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false })\n Material.prototype.copy.call(materialPoints, material)\n materialPoints.color.copy(material.color)\n materialPoints.map = material.map\n material = materialPoints\n }\n }\n\n if (material === undefined) {\n if (isLine) {\n material = new LineBasicMaterial()\n } else if (isPoints) {\n material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n } else {\n material = new MeshPhongMaterial()\n }\n\n material.name = sourceMaterial.name\n material.flatShading = sourceMaterial.smooth ? false : true\n material.vertexColors = hasVertexColors\n\n state.materials[materialHash] = material\n }\n\n createdMaterials.push(material)\n }\n\n // Create mesh\n\n let mesh\n\n if (createdMaterials.length > 1) {\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi]\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi)\n }\n\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials)\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials)\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials)\n }\n } else {\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials[0])\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials[0])\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials[0])\n }\n }\n\n mesh.name = object.name\n\n container.add(mesh)\n }\n } else {\n // if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n if (state.vertices.length > 0) {\n const material = new PointsMaterial({ size: 1, sizeAttenuation: false })\n\n const buffergeometry = new BufferGeometry()\n\n buffergeometry.setAttribute('position', new Float32BufferAttribute(state.vertices, 3))\n\n if (state.colors.length > 0 && state.colors[0] !== undefined) {\n buffergeometry.setAttribute('color', new Float32BufferAttribute(state.colors, 3))\n material.vertexColors = true\n }\n\n const points = new Points(buffergeometry, material)\n container.add(points)\n }\n }\n\n return container\n }\n}\n\nexport { OBJLoader }\n"],"names":["name"],"mappings":"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"}
@@ -109,53 +109,56 @@ function decodePrwm(buffer) {
109
109
  indices
110
110
  };
111
111
  }
112
- class PRWMLoader extends THREE.Loader {
113
- constructor(manager) {
114
- super(manager);
115
- }
116
- load(url, onLoad, onProgress, onError) {
117
- const scope = this;
118
- const loader = new THREE.FileLoader(scope.manager);
119
- loader.setPath(scope.path);
120
- loader.setResponseType("arraybuffer");
121
- loader.setRequestHeader(scope.requestHeader);
122
- loader.setWithCredentials(scope.withCredentials);
123
- url = url.replace(/\*/g, isBigEndianPlatform() ? "be" : "le");
124
- loader.load(
125
- url,
126
- function(arrayBuffer) {
127
- try {
128
- onLoad(scope.parse(arrayBuffer));
129
- } catch (e) {
130
- if (onError) {
131
- onError(e);
132
- } else {
133
- console.error(e);
112
+ const PRWMLoader = /* @__PURE__ */ (() => {
113
+ class PRWMLoader2 extends THREE.Loader {
114
+ constructor(manager) {
115
+ super(manager);
116
+ }
117
+ load(url, onLoad, onProgress, onError) {
118
+ const scope = this;
119
+ const loader = new THREE.FileLoader(scope.manager);
120
+ loader.setPath(scope.path);
121
+ loader.setResponseType("arraybuffer");
122
+ loader.setRequestHeader(scope.requestHeader);
123
+ loader.setWithCredentials(scope.withCredentials);
124
+ url = url.replace(/\*/g, isBigEndianPlatform() ? "be" : "le");
125
+ loader.load(
126
+ url,
127
+ function(arrayBuffer) {
128
+ try {
129
+ onLoad(scope.parse(arrayBuffer));
130
+ } catch (e) {
131
+ if (onError) {
132
+ onError(e);
133
+ } else {
134
+ console.error(e);
135
+ }
136
+ scope.manager.itemError(url);
134
137
  }
135
- scope.manager.itemError(url);
136
- }
137
- },
138
- onProgress,
139
- onError
140
- );
141
- }
142
- parse(arrayBuffer) {
143
- const data = decodePrwm(arrayBuffer), attributesKey = Object.keys(data.attributes), bufferGeometry = new THREE.BufferGeometry();
144
- for (let i = 0; i < attributesKey.length; i++) {
145
- const attribute = data.attributes[attributesKey[i]];
146
- bufferGeometry.setAttribute(
147
- attributesKey[i],
148
- new THREE.BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized)
138
+ },
139
+ onProgress,
140
+ onError
149
141
  );
150
142
  }
151
- if (data.indices !== null) {
152
- bufferGeometry.setIndex(new THREE.BufferAttribute(data.indices, 1));
143
+ parse(arrayBuffer) {
144
+ const data = decodePrwm(arrayBuffer), attributesKey = Object.keys(data.attributes), bufferGeometry = new THREE.BufferGeometry();
145
+ for (let i = 0; i < attributesKey.length; i++) {
146
+ const attribute = data.attributes[attributesKey[i]];
147
+ bufferGeometry.setAttribute(
148
+ attributesKey[i],
149
+ new THREE.BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized)
150
+ );
151
+ }
152
+ if (data.indices !== null) {
153
+ bufferGeometry.setIndex(new THREE.BufferAttribute(data.indices, 1));
154
+ }
155
+ return bufferGeometry;
156
+ }
157
+ static isBigEndianPlatform() {
158
+ return isBigEndianPlatform();
153
159
  }
154
- return bufferGeometry;
155
160
  }
156
- static isBigEndianPlatform() {
157
- return isBigEndianPlatform();
158
- }
159
- }
161
+ return PRWMLoader2;
162
+ })();
160
163
  exports.PRWMLoader = PRWMLoader;
161
164
  //# sourceMappingURL=PRWMLoader.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"PRWMLoader.cjs","sources":["../../src/loaders/PRWMLoader.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, FileLoader, Loader } from 'three'\n\n/**\n * See https://github.com/kchapelier/PRWM for more informations about this file format\n */\n\nlet bigEndianPlatform = null\n\n/**\n * Check if the endianness of the platform is big-endian (most significant bit first)\n * @returns {boolean} True if big-endian, false if little-endian\n */\nfunction isBigEndianPlatform() {\n if (bigEndianPlatform === null) {\n const buffer = new ArrayBuffer(2),\n uint8Array = new Uint8Array(buffer),\n uint16Array = new Uint16Array(buffer)\n\n uint8Array[0] = 0xaa // set first byte\n uint8Array[1] = 0xbb // set second byte\n bigEndianPlatform = uint16Array[0] === 0xaabb\n }\n\n return bigEndianPlatform\n}\n\n// match the values defined in the spec to the TypedArray types\nconst InvertedEncodingTypes = [\n null,\n Float32Array,\n null,\n Int8Array,\n Int16Array,\n null,\n Int32Array,\n Uint8Array,\n Uint16Array,\n null,\n Uint32Array,\n]\n\n// define the method to use on a DataView, corresponding the TypedArray type\nconst getMethods = {\n Uint16Array: 'getUint16',\n Uint32Array: 'getUint32',\n Int16Array: 'getInt16',\n Int32Array: 'getInt32',\n Float32Array: 'getFloat32',\n Float64Array: 'getFloat64',\n}\n\nfunction copyFromBuffer(sourceArrayBuffer, viewType, position, length, fromBigEndian) {\n const bytesPerElement = viewType.BYTES_PER_ELEMENT\n let result\n\n if (fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1) {\n result = new viewType(sourceArrayBuffer, position, length)\n } else {\n const readView = new DataView(sourceArrayBuffer, position, length * bytesPerElement),\n getMethod = getMethods[viewType.name],\n littleEndian = !fromBigEndian\n\n result = new viewType(length)\n\n for (let i = 0; i < length; i++) {\n result[i] = readView[getMethod](i * bytesPerElement, littleEndian)\n }\n }\n\n return result\n}\n\nfunction decodePrwm(buffer) {\n const array = new Uint8Array(buffer),\n version = array[0]\n\n let flags = array[1]\n\n const indexedGeometry = !!((flags >> 7) & 0x01),\n indicesType = (flags >> 6) & 0x01,\n bigEndian = ((flags >> 5) & 0x01) === 1,\n attributesNumber = flags & 0x1f\n\n let valuesNumber = 0,\n indicesNumber = 0\n\n if (bigEndian) {\n valuesNumber = (array[2] << 16) + (array[3] << 8) + array[4]\n indicesNumber = (array[5] << 16) + (array[6] << 8) + array[7]\n } else {\n valuesNumber = array[2] + (array[3] << 8) + (array[4] << 16)\n indicesNumber = array[5] + (array[6] << 8) + (array[7] << 16)\n }\n\n /** PRELIMINARY CHECKS **/\n\n if (version === 0) {\n throw new Error('PRWM decoder: Invalid format version: 0')\n } else if (version !== 1) {\n throw new Error('PRWM decoder: Unsupported format version: ' + version)\n }\n\n if (!indexedGeometry) {\n if (indicesType !== 0) {\n throw new Error('PRWM decoder: Indices type must be set to 0 for non-indexed geometries')\n } else if (indicesNumber !== 0) {\n throw new Error('PRWM decoder: Number of indices must be set to 0 for non-indexed geometries')\n }\n }\n\n /** PARSING **/\n\n let pos = 8\n\n const attributes = {}\n\n for (let i = 0; i < attributesNumber; i++) {\n let attributeName = ''\n\n while (pos < array.length) {\n const char = array[pos]\n pos++\n\n if (char === 0) {\n break\n } else {\n attributeName += String.fromCharCode(char)\n }\n }\n\n flags = array[pos]\n\n const attributeType = (flags >> 7) & 0x01\n const cardinality = ((flags >> 4) & 0x03) + 1\n const encodingType = flags & 0x0f\n const arrayType = InvertedEncodingTypes[encodingType]\n\n pos++\n\n // padding to next multiple of 4\n pos = Math.ceil(pos / 4) * 4\n\n const values = copyFromBuffer(buffer, arrayType, pos, cardinality * valuesNumber, bigEndian)\n\n pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber\n\n attributes[attributeName] = {\n type: attributeType,\n cardinality: cardinality,\n values: values,\n }\n }\n\n pos = Math.ceil(pos / 4) * 4\n\n let indices = null\n\n if (indexedGeometry) {\n indices = copyFromBuffer(buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian)\n }\n\n return {\n version: version,\n attributes: attributes,\n indices: indices,\n }\n}\n\n// Define the public interface\n\nclass PRWMLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n\n url = url.replace(/\\*/g, isBigEndianPlatform() ? 'be' : 'le')\n\n loader.load(\n url,\n function (arrayBuffer) {\n try {\n onLoad(scope.parse(arrayBuffer))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(arrayBuffer) {\n const data = decodePrwm(arrayBuffer),\n attributesKey = Object.keys(data.attributes),\n bufferGeometry = new BufferGeometry()\n\n for (let i = 0; i < attributesKey.length; i++) {\n const attribute = data.attributes[attributesKey[i]]\n bufferGeometry.setAttribute(\n attributesKey[i],\n new BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized),\n )\n }\n\n if (data.indices !== null) {\n bufferGeometry.setIndex(new BufferAttribute(data.indices, 1))\n }\n\n return bufferGeometry\n }\n\n static isBigEndianPlatform() {\n return isBigEndianPlatform()\n }\n}\n\nexport { PRWMLoader }\n"],"names":["Loader","FileLoader","BufferGeometry","BufferAttribute"],"mappings":"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"}
1
+ {"version":3,"file":"PRWMLoader.cjs","sources":["../../src/loaders/PRWMLoader.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, FileLoader, Loader } from 'three'\n\n/**\n * See https://github.com/kchapelier/PRWM for more informations about this file format\n */\n\nlet bigEndianPlatform = null\n\n/**\n * Check if the endianness of the platform is big-endian (most significant bit first)\n * @returns {boolean} True if big-endian, false if little-endian\n */\nfunction isBigEndianPlatform() {\n if (bigEndianPlatform === null) {\n const buffer = new ArrayBuffer(2),\n uint8Array = new Uint8Array(buffer),\n uint16Array = new Uint16Array(buffer)\n\n uint8Array[0] = 0xaa // set first byte\n uint8Array[1] = 0xbb // set second byte\n bigEndianPlatform = uint16Array[0] === 0xaabb\n }\n\n return bigEndianPlatform\n}\n\n// match the values defined in the spec to the TypedArray types\nconst InvertedEncodingTypes = [\n null,\n Float32Array,\n null,\n Int8Array,\n Int16Array,\n null,\n Int32Array,\n Uint8Array,\n Uint16Array,\n null,\n Uint32Array,\n]\n\n// define the method to use on a DataView, corresponding the TypedArray type\nconst getMethods = {\n Uint16Array: 'getUint16',\n Uint32Array: 'getUint32',\n Int16Array: 'getInt16',\n Int32Array: 'getInt32',\n Float32Array: 'getFloat32',\n Float64Array: 'getFloat64',\n}\n\nfunction copyFromBuffer(sourceArrayBuffer, viewType, position, length, fromBigEndian) {\n const bytesPerElement = viewType.BYTES_PER_ELEMENT\n let result\n\n if (fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1) {\n result = new viewType(sourceArrayBuffer, position, length)\n } else {\n const readView = new DataView(sourceArrayBuffer, position, length * bytesPerElement),\n getMethod = getMethods[viewType.name],\n littleEndian = !fromBigEndian\n\n result = new viewType(length)\n\n for (let i = 0; i < length; i++) {\n result[i] = readView[getMethod](i * bytesPerElement, littleEndian)\n }\n }\n\n return result\n}\n\nfunction decodePrwm(buffer) {\n const array = new Uint8Array(buffer),\n version = array[0]\n\n let flags = array[1]\n\n const indexedGeometry = !!((flags >> 7) & 0x01),\n indicesType = (flags >> 6) & 0x01,\n bigEndian = ((flags >> 5) & 0x01) === 1,\n attributesNumber = flags & 0x1f\n\n let valuesNumber = 0,\n indicesNumber = 0\n\n if (bigEndian) {\n valuesNumber = (array[2] << 16) + (array[3] << 8) + array[4]\n indicesNumber = (array[5] << 16) + (array[6] << 8) + array[7]\n } else {\n valuesNumber = array[2] + (array[3] << 8) + (array[4] << 16)\n indicesNumber = array[5] + (array[6] << 8) + (array[7] << 16)\n }\n\n /** PRELIMINARY CHECKS **/\n\n if (version === 0) {\n throw new Error('PRWM decoder: Invalid format version: 0')\n } else if (version !== 1) {\n throw new Error('PRWM decoder: Unsupported format version: ' + version)\n }\n\n if (!indexedGeometry) {\n if (indicesType !== 0) {\n throw new Error('PRWM decoder: Indices type must be set to 0 for non-indexed geometries')\n } else if (indicesNumber !== 0) {\n throw new Error('PRWM decoder: Number of indices must be set to 0 for non-indexed geometries')\n }\n }\n\n /** PARSING **/\n\n let pos = 8\n\n const attributes = {}\n\n for (let i = 0; i < attributesNumber; i++) {\n let attributeName = ''\n\n while (pos < array.length) {\n const char = array[pos]\n pos++\n\n if (char === 0) {\n break\n } else {\n attributeName += String.fromCharCode(char)\n }\n }\n\n flags = array[pos]\n\n const attributeType = (flags >> 7) & 0x01\n const cardinality = ((flags >> 4) & 0x03) + 1\n const encodingType = flags & 0x0f\n const arrayType = InvertedEncodingTypes[encodingType]\n\n pos++\n\n // padding to next multiple of 4\n pos = Math.ceil(pos / 4) * 4\n\n const values = copyFromBuffer(buffer, arrayType, pos, cardinality * valuesNumber, bigEndian)\n\n pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber\n\n attributes[attributeName] = {\n type: attributeType,\n cardinality: cardinality,\n values: values,\n }\n }\n\n pos = Math.ceil(pos / 4) * 4\n\n let indices = null\n\n if (indexedGeometry) {\n indices = copyFromBuffer(buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian)\n }\n\n return {\n version: version,\n attributes: attributes,\n indices: indices,\n }\n}\n\n// Define the public interface\n\nconst PRWMLoader = /* @__PURE__ */ (() => {\n class PRWMLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n\n url = url.replace(/\\*/g, isBigEndianPlatform() ? 'be' : 'le')\n\n loader.load(\n url,\n function (arrayBuffer) {\n try {\n onLoad(scope.parse(arrayBuffer))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(arrayBuffer) {\n const data = decodePrwm(arrayBuffer),\n attributesKey = Object.keys(data.attributes),\n bufferGeometry = new BufferGeometry()\n\n for (let i = 0; i < attributesKey.length; i++) {\n const attribute = data.attributes[attributesKey[i]]\n bufferGeometry.setAttribute(\n attributesKey[i],\n new BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized),\n )\n }\n\n if (data.indices !== null) {\n bufferGeometry.setIndex(new BufferAttribute(data.indices, 1))\n }\n\n return bufferGeometry\n }\n\n static isBigEndianPlatform() {\n return isBigEndianPlatform()\n }\n }\n\n return PRWMLoader\n})()\n\nexport { PRWMLoader }\n"],"names":["PRWMLoader","Loader","FileLoader","BufferGeometry","BufferAttribute"],"mappings":";;;AAMA,IAAI,oBAAoB;AAMxB,SAAS,sBAAsB;AAC7B,MAAI,sBAAsB,MAAM;AAC9B,UAAM,SAAS,IAAI,YAAY,CAAC,GAC9B,aAAa,IAAI,WAAW,MAAM,GAClC,cAAc,IAAI,YAAY,MAAM;AAEtC,eAAW,CAAC,IAAI;AAChB,eAAW,CAAC,IAAI;AAChB,wBAAoB,YAAY,CAAC,MAAM;AAAA,EACxC;AAED,SAAO;AACT;AAGA,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,MAAM,aAAa;AAAA,EACjB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAChB;AAEA,SAAS,eAAe,mBAAmB,UAAU,UAAU,QAAQ,eAAe;AACpF,QAAM,kBAAkB,SAAS;AACjC,MAAI;AAEJ,MAAI,kBAAkB,yBAAyB,oBAAoB,GAAG;AACpE,aAAS,IAAI,SAAS,mBAAmB,UAAU,MAAM;AAAA,EAC7D,OAAS;AACL,UAAM,WAAW,IAAI,SAAS,mBAAmB,UAAU,SAAS,eAAe,GACjF,YAAY,WAAW,SAAS,IAAI,GACpC,eAAe,CAAC;AAElB,aAAS,IAAI,SAAS,MAAM;AAE5B,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,aAAO,CAAC,IAAI,SAAS,SAAS,EAAE,IAAI,iBAAiB,YAAY;AAAA,IAClE;AAAA,EACF;AAED,SAAO;AACT;AAEA,SAAS,WAAW,QAAQ;AAC1B,QAAM,QAAQ,IAAI,WAAW,MAAM,GACjC,UAAU,MAAM,CAAC;AAEnB,MAAI,QAAQ,MAAM,CAAC;AAEnB,QAAM,kBAAkB,CAAC,EAAG,SAAS,IAAK,IACxC,cAAe,SAAS,IAAK,GAC7B,aAAc,SAAS,IAAK,OAAU,GACtC,mBAAmB,QAAQ;AAE7B,MAAI,eAAe,GACjB,gBAAgB;AAElB,MAAI,WAAW;AACb,oBAAgB,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC;AAC3D,qBAAiB,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC;AAAA,EAChE,OAAS;AACL,mBAAe,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK;AACzD,oBAAgB,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK;AAAA,EAC3D;AAID,MAAI,YAAY,GAAG;AACjB,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC7D,WAAa,YAAY,GAAG;AACxB,UAAM,IAAI,MAAM,+CAA+C,OAAO;AAAA,EACvE;AAED,MAAI,CAAC,iBAAiB;AACpB,QAAI,gBAAgB,GAAG;AACrB,YAAM,IAAI,MAAM,wEAAwE;AAAA,IAC9F,WAAe,kBAAkB,GAAG;AAC9B,YAAM,IAAI,MAAM,6EAA6E;AAAA,IAC9F;AAAA,EACF;AAID,MAAI,MAAM;AAEV,QAAM,aAAa,CAAE;AAErB,WAAS,IAAI,GAAG,IAAI,kBAAkB,KAAK;AACzC,QAAI,gBAAgB;AAEpB,WAAO,MAAM,MAAM,QAAQ;AACzB,YAAM,OAAO,MAAM,GAAG;AACtB;AAEA,UAAI,SAAS,GAAG;AACd;AAAA,MACR,OAAa;AACL,yBAAiB,OAAO,aAAa,IAAI;AAAA,MAC1C;AAAA,IACF;AAED,YAAQ,MAAM,GAAG;AAEjB,UAAM,gBAAiB,SAAS,IAAK;AACrC,UAAM,eAAgB,SAAS,IAAK,KAAQ;AAC5C,UAAM,eAAe,QAAQ;AAC7B,UAAM,YAAY,sBAAsB,YAAY;AAEpD;AAGA,UAAM,KAAK,KAAK,MAAM,CAAC,IAAI;AAE3B,UAAM,SAAS,eAAe,QAAQ,WAAW,KAAK,cAAc,cAAc,SAAS;AAE3F,WAAO,UAAU,oBAAoB,cAAc;AAEnD,eAAW,aAAa,IAAI;AAAA,MAC1B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAED,QAAM,KAAK,KAAK,MAAM,CAAC,IAAI;AAE3B,MAAI,UAAU;AAEd,MAAI,iBAAiB;AACnB,cAAU,eAAe,QAAQ,gBAAgB,IAAI,cAAc,aAAa,KAAK,eAAe,SAAS;AAAA,EAC9G;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACH;AAIK,MAAC,aAA8B,uBAAM;AACxC,QAAMA,oBAAmBC,MAAAA,OAAO;AAAA,IAC9B,YAAY,SAAS;AACnB,YAAM,OAAO;AAAA,IACd;AAAA,IAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,YAAM,QAAQ;AAEd,YAAM,SAAS,IAAIC,iBAAW,MAAM,OAAO;AAC3C,aAAO,QAAQ,MAAM,IAAI;AACzB,aAAO,gBAAgB,aAAa;AACpC,aAAO,iBAAiB,MAAM,aAAa;AAC3C,aAAO,mBAAmB,MAAM,eAAe;AAE/C,YAAM,IAAI,QAAQ,OAAO,oBAAqB,IAAG,OAAO,IAAI;AAE5D,aAAO;AAAA,QACL;AAAA,QACA,SAAU,aAAa;AACrB,cAAI;AACF,mBAAO,MAAM,MAAM,WAAW,CAAC;AAAA,UAChC,SAAQ,GAAP;AACA,gBAAI,SAAS;AACX,sBAAQ,CAAC;AAAA,YACvB,OAAmB;AACL,sBAAQ,MAAM,CAAC;AAAA,YAChB;AAED,kBAAM,QAAQ,UAAU,GAAG;AAAA,UAC5B;AAAA,QACF;AAAA,QACD;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,MAAM,aAAa;AACjB,YAAM,OAAO,WAAW,WAAW,GACjC,gBAAgB,OAAO,KAAK,KAAK,UAAU,GAC3C,iBAAiB,IAAIC,MAAAA,eAAgB;AAEvC,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,cAAM,YAAY,KAAK,WAAW,cAAc,CAAC,CAAC;AAClD,uBAAe;AAAA,UACb,cAAc,CAAC;AAAA,UACf,IAAIC,MAAAA,gBAAgB,UAAU,QAAQ,UAAU,aAAa,UAAU,UAAU;AAAA,QAClF;AAAA,MACF;AAED,UAAI,KAAK,YAAY,MAAM;AACzB,uBAAe,SAAS,IAAIA,MAAAA,gBAAgB,KAAK,SAAS,CAAC,CAAC;AAAA,MAC7D;AAED,aAAO;AAAA,IACR;AAAA,IAED,OAAO,sBAAsB;AAC3B,aAAO,oBAAqB;AAAA,IAC7B;AAAA,EACF;AAED,SAAOJ;AACT,GAAC;;"}