three-stdlib 2.35.4 → 2.35.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +17 -20
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +17 -20
  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 +715 -722
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +716 -723
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +1 -2
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +2 -3
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +1 -2
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +2 -3
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +1 -2
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +2 -3
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +122 -133
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +21 -23
  68. package/exporters/DRACOExporter.js +122 -133
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +167 -170
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +167 -170
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +515 -524
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +515 -524
  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 +1 -2
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +2 -3
  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 +435 -441
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +435 -441
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +1 -2
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +2 -3
  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 +374 -377
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +374 -377
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +4 -5
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +5 -6
  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 +43 -46
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +43 -46
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1688 -1694
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1688 -1694
  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 +50 -53
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +50 -53
  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 +268 -271
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +269 -272
  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 +1 -2
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +2 -3
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +206 -209
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +206 -209
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +146 -154
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +146 -154
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +180 -183
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +180 -183
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +161 -164
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +161 -164
  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 +32 -35
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +6 -100
  258. package/objects/Sky.js +32 -35
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +1 -2
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +2 -3
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +140 -143
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +140 -143
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +264 -267
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +264 -267
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +250 -253
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +250 -253
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +376 -379
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +376 -379
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +202 -205
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +202 -205
  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 +46 -71
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +46 -71
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +22 -41
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +22 -41
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +6 -20
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +6 -20
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +26 -46
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +26 -46
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +19 -33
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +19 -33
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +90 -117
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +90 -117
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +232 -333
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +232 -333
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +22 -38
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +22 -38
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +21 -35
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +21 -35
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +19 -34
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +19 -34
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +24 -43
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +24 -43
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +16 -30
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +16 -30
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +21 -38
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +21 -38
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +69 -98
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +69 -98
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +59 -70
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +59 -70
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +28 -49
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +28 -49
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1089 -1098
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1089 -1098
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +29 -57
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +29 -57
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +43 -70
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +43 -70
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +53 -74
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +53 -74
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +35 -55
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +35 -55
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +19 -33
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +19 -33
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +116 -193
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +116 -193
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +192 -270
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +192 -270
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +27 -43
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +27 -43
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +31 -47
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +31 -47
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +24 -37
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +24 -37
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +24 -43
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +24 -43
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +17 -34
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +17 -34
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +26 -39
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +26 -39
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +21 -36
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +21 -36
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +97 -147
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +97 -147
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +18 -31
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +18 -31
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +20 -33
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +20 -33
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +117 -154
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +117 -154
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +270 -358
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +270 -358
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +142 -236
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +142 -236
  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 +20 -36
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +20 -36
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +37 -64
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +37 -64
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +16 -29
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +16 -29
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +35 -55
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +35 -55
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +165 -275
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +165 -275
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +27 -50
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +27 -50
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +17 -32
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +17 -32
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +27 -43
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +27 -43
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +27 -43
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +27 -43
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +213 -264
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +213 -264
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +35 -63
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +35 -63
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +1 -2
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +2 -3
  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 +106 -109
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +3 -4
  500. package/webxr/ARButton.js +106 -109
  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 +95 -98
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +5 -6
  509. package/webxr/VRButton.js +95 -98
  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 = /* @__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
+ {"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":"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"}
@@ -1,13 +1,13 @@
1
- import { Loader, FileLoader, Group, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Material, PointsMaterial, MeshPhongMaterial, LineSegments, Points, Mesh, Vector3 } from "three";
1
+ import { Vector3, Loader, FileLoader, Group, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Material, PointsMaterial, MeshPhongMaterial, LineSegments, Points, Mesh } 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 = /* @__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();
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();
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 = /* @__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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"}
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":";AAiBA,MAAM,kBAAkB;AAExB,MAAM,4BAA4B;AAElC,MAAM,wBAAwB;AAE9B,MAAM,mBAAmB;AAEzB,MAAM,MAAM,IAAI,QAAS;AACzB,MAAM,MAAM,IAAI,QAAS;AACzB,MAAM,MAAM,IAAI,QAAS;AAEzB,MAAM,MAAM,IAAI,QAAS;AACzB,MAAM,MAAM,IAAI,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,SAAUA,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,kBAAkB,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,IAAI,WAAW,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,IAAI,MAAO;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,IAAI,eAAgB;AAE3C,uBAAe,aAAa,YAAY,IAAI,uBAAuB,SAAS,UAAU,CAAC,CAAC;AAExF,YAAI,SAAS,QAAQ,SAAS,GAAG;AAC/B,yBAAe,aAAa,UAAU,IAAI,uBAAuB,SAAS,SAAS,CAAC,CAAC;AAAA,QACtF;AAED,YAAI,SAAS,OAAO,SAAS,GAAG;AAC9B,4BAAkB;AAClB,yBAAe,aAAa,SAAS,IAAI,uBAAuB,SAAS,QAAQ,CAAC,CAAC;AAAA,QACpF;AAED,YAAI,SAAS,iBAAiB,MAAM;AAClC,yBAAe,aAAa,MAAM,IAAI,uBAAuB,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,oBAAoB,oBAAoB;AAClE,oBAAM,eAAe,IAAI,kBAAmB;AAC5C,uBAAS,UAAU,KAAK,KAAK,cAAc,QAAQ;AACnD,2BAAa,MAAM,KAAK,SAAS,KAAK;AACtC,yBAAW;AAAA,YACZ,WAAU,YAAY,YAAY,EAAE,oBAAoB,iBAAiB;AACxE,oBAAM,iBAAiB,IAAI,eAAe,EAAE,MAAM,IAAI,iBAAiB,OAAO;AAC9E,uBAAS,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,IAAI,kBAAmB;AAAA,YACnC,WAAU,UAAU;AACnB,yBAAW,IAAI,eAAe,EAAE,MAAM,GAAG,iBAAiB,OAAO;AAAA,YAC/E,OAAmB;AACL,yBAAW,IAAI,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,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,UACzD,WAAU,UAAU;AACnB,mBAAO,IAAI,OAAO,gBAAgB,gBAAgB;AAAA,UAC9D,OAAiB;AACL,mBAAO,IAAI,KAAK,gBAAgB,gBAAgB;AAAA,UACjD;AAAA,QACX,OAAe;AACL,cAAI,QAAQ;AACV,mBAAO,IAAI,aAAa,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,UAC5D,WAAU,UAAU;AACnB,mBAAO,IAAI,OAAO,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,UACjE,OAAiB;AACL,mBAAO,IAAI,KAAK,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,IAAI,eAAe,EAAE,MAAM,GAAG,iBAAiB,OAAO;AAEvE,cAAM,iBAAiB,IAAI,eAAgB;AAE3C,uBAAe,aAAa,YAAY,IAAI,uBAAuB,MAAM,UAAU,CAAC,CAAC;AAErF,YAAI,MAAM,OAAO,SAAS,KAAK,MAAM,OAAO,CAAC,MAAM,QAAW;AAC5D,yBAAe,aAAa,SAAS,IAAI,uBAAuB,MAAM,QAAQ,CAAC,CAAC;AAChF,mBAAS,eAAe;AAAA,QACzB;AAED,cAAM,SAAS,IAAI,OAAO,gBAAgB,QAAQ;AAClD,kBAAU,IAAI,MAAM;AAAA,MACrB;AAAA,IACF;AAED,WAAO;AAAA,EACR;AACH;"}
@@ -109,56 +109,53 @@ function decodePrwm(buffer) {
109
109
  indices
110
110
  };
111
111
  }
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);
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);
137
134
  }
138
- },
139
- onProgress,
140
- onError
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)
141
149
  );
142
150
  }
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();
151
+ if (data.indices !== null) {
152
+ bufferGeometry.setIndex(new THREE.BufferAttribute(data.indices, 1));
159
153
  }
154
+ return bufferGeometry;
160
155
  }
161
- return PRWMLoader2;
162
- })();
156
+ static isBigEndianPlatform() {
157
+ return isBigEndianPlatform();
158
+ }
159
+ }
163
160
  exports.PRWMLoader = PRWMLoader;
164
161
  //# 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\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":"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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\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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"}