@onerjs/core 8.42.7 → 8.42.8

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 (305) hide show
  1. package/Animations/animatable.core.js +1 -1
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animatorAvatar.js +2 -2
  4. package/Animations/animatorAvatar.js.map +1 -1
  5. package/Animations/runtimeAnimation.js +1 -1
  6. package/Animations/runtimeAnimation.js.map +1 -1
  7. package/Audio/audioSceneComponent.js +1 -2
  8. package/Audio/audioSceneComponent.js.map +1 -1
  9. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
  10. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
  11. package/AudioV2/webAudio/webAudioEngine.js +1 -1
  12. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  13. package/Behaviors/Meshes/followBehavior.js +1 -1
  14. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  15. package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
  16. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  17. package/Bones/boneLookController.js +1 -1
  18. package/Bones/boneLookController.js.map +1 -1
  19. package/Buffers/buffer.js +1 -1
  20. package/Buffers/buffer.js.map +1 -1
  21. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
  22. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  23. package/Cameras/camera.js +2 -2
  24. package/Cameras/camera.js.map +1 -1
  25. package/Engines/AbstractEngine/abstractEngine.renderPass.js +1 -0
  26. package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -1
  27. package/Engines/Extensions/engine.query.js +1 -1
  28. package/Engines/Extensions/engine.query.js.map +1 -1
  29. package/Engines/Processors/shaderProcessor.js +2 -3
  30. package/Engines/Processors/shaderProcessor.js.map +1 -1
  31. package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
  32. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  33. package/Engines/WebGPU/Extensions/engine.debugging.d.ts +87 -0
  34. package/Engines/WebGPU/Extensions/engine.debugging.js +123 -31
  35. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  36. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  37. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  38. package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
  39. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  40. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
  41. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  42. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
  43. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  44. package/Engines/WebGPU/webgpuTextureManager.js +10 -5
  45. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  46. package/Engines/abstractEngine.js +2 -2
  47. package/Engines/abstractEngine.js.map +1 -1
  48. package/Engines/engine.common.js +2 -2
  49. package/Engines/engine.common.js.map +1 -1
  50. package/Engines/engine.js +0 -1
  51. package/Engines/engine.js.map +1 -1
  52. package/Engines/thinEngine.functions.js +1 -1
  53. package/Engines/thinEngine.functions.js.map +1 -1
  54. package/Engines/thinEngine.js +4 -5
  55. package/Engines/thinEngine.js.map +1 -1
  56. package/Engines/thinNativeEngine.js +2 -5
  57. package/Engines/thinNativeEngine.js.map +1 -1
  58. package/Engines/thinWebGPUEngine.d.ts +6 -4
  59. package/Engines/thinWebGPUEngine.js +49 -25
  60. package/Engines/thinWebGPUEngine.js.map +1 -1
  61. package/Engines/webgpuEngine.d.ts +2 -1
  62. package/Engines/webgpuEngine.js +18 -16
  63. package/Engines/webgpuEngine.js.map +1 -1
  64. package/FlowGraph/flowGraph.d.ts +1 -0
  65. package/FlowGraph/flowGraph.js.map +1 -1
  66. package/FlowGraph/flowGraphBlock.d.ts +1 -0
  67. package/FlowGraph/flowGraphBlock.js.map +1 -1
  68. package/FlowGraph/flowGraphContext.d.ts +1 -0
  69. package/FlowGraph/flowGraphContext.js.map +1 -1
  70. package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
  71. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  72. package/FrameGraph/Node/nodeRenderGraph.d.ts +12 -1
  73. package/FrameGraph/Node/nodeRenderGraph.js +36 -2
  74. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  75. package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
  76. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  77. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
  78. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  79. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
  80. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  81. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
  82. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +14 -0
  83. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  84. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
  85. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +20 -14
  86. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  87. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +3 -2
  88. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +38 -14
  89. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  90. package/Layers/glowLayer.js +1 -1
  91. package/Layers/glowLayer.js.map +1 -1
  92. package/Layers/highlightLayer.js +1 -1
  93. package/Layers/highlightLayer.js.map +1 -1
  94. package/Lights/Shadows/cascadedShadowGenerator.js +0 -1
  95. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  96. package/Lights/Shadows/shadowGenerator.d.ts +28 -1
  97. package/Lights/Shadows/shadowGenerator.js +77 -11
  98. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  99. package/Lights/lightingVolume.d.ts +1 -0
  100. package/Lights/lightingVolume.js +10 -2
  101. package/Lights/lightingVolume.js.map +1 -1
  102. package/Loading/sceneLoader.js +1 -1
  103. package/Loading/sceneLoader.js.map +1 -1
  104. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -1
  105. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  106. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
  107. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  108. package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
  109. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  110. package/Materials/Node/Blocks/cloudBlock.js +1 -1
  111. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  112. package/Materials/Node/Blocks/curveBlock.js +2 -3
  113. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  114. package/Materials/Node/nodeMaterial.js +1 -2
  115. package/Materials/Node/nodeMaterial.js.map +1 -1
  116. package/Materials/PBR/openpbrMaterial.js +3 -5
  117. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  118. package/Materials/PBR/pbrBaseMaterial.js +2 -3
  119. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  120. package/Materials/Textures/Procedurals/proceduralTexture.js +0 -1
  121. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  122. package/Materials/Textures/cubeTexture.js +1 -1
  123. package/Materials/Textures/cubeTexture.js.map +1 -1
  124. package/Materials/Textures/htmlElementTexture.js +2 -2
  125. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  126. package/Materials/Textures/multiRenderTarget.js +1 -1
  127. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  128. package/Materials/Textures/renderTargetTexture.js +13 -2
  129. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  130. package/Materials/effect.js +2 -1
  131. package/Materials/effect.js.map +1 -1
  132. package/Materials/materialHelper.functions.js +1 -1
  133. package/Materials/materialHelper.functions.js.map +1 -1
  134. package/Materials/multiMaterial.js +1 -1
  135. package/Materials/multiMaterial.js.map +1 -1
  136. package/Materials/standardMaterial.js +1 -2
  137. package/Materials/standardMaterial.js.map +1 -1
  138. package/Maths/math.geospatial.d.ts +17 -2
  139. package/Maths/math.geospatial.functions.d.ts +16 -2
  140. package/Maths/math.geospatial.functions.js +37 -4
  141. package/Maths/math.geospatial.functions.js.map +1 -1
  142. package/Maths/math.geospatial.js.map +1 -1
  143. package/Maths/math.path.js +1 -1
  144. package/Maths/math.path.js.map +1 -1
  145. package/Maths/math.scalar.functions.js +3 -3
  146. package/Maths/math.scalar.functions.js.map +1 -1
  147. package/Maths/math.vector.js +1 -1
  148. package/Maths/math.vector.js.map +1 -1
  149. package/Meshes/Builders/boxBuilder.js +1 -2
  150. package/Meshes/Builders/boxBuilder.js.map +1 -1
  151. package/Meshes/Builders/cylinderBuilder.js +2 -2
  152. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  153. package/Meshes/Builders/decalBuilder.js +1 -2
  154. package/Meshes/Builders/decalBuilder.js.map +1 -1
  155. package/Meshes/Builders/latheBuilder.js +2 -2
  156. package/Meshes/Builders/latheBuilder.js.map +1 -1
  157. package/Meshes/Builders/linesBuilder.js +11 -15
  158. package/Meshes/Builders/linesBuilder.js.map +1 -1
  159. package/Meshes/Builders/polygonBuilder.js +6 -6
  160. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  161. package/Meshes/Builders/polyhedronBuilder.js +2 -2
  162. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  163. package/Meshes/Builders/ribbonBuilder.js +6 -6
  164. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  165. package/Meshes/Builders/shapeBuilder.js +2 -3
  166. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  167. package/Meshes/Builders/tiledBoxBuilder.js +1 -1
  168. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  169. package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
  170. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  171. package/Meshes/GreasedLine/greasedLineMesh.js +1 -2
  172. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  173. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
  174. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  175. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -1
  176. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  177. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -1
  178. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  179. package/Meshes/Node/Blocks/mappingBlock.js +1 -1
  180. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  181. package/Meshes/abstractMesh.d.ts +4 -0
  182. package/Meshes/abstractMesh.js +14 -10
  183. package/Meshes/abstractMesh.js.map +1 -1
  184. package/Meshes/csg.js +1 -1
  185. package/Meshes/csg.js.map +1 -1
  186. package/Meshes/csg2.js +1 -1
  187. package/Meshes/csg2.js.map +1 -1
  188. package/Meshes/geodesicMesh.js +11 -13
  189. package/Meshes/geodesicMesh.js.map +1 -1
  190. package/Meshes/geometry.js +2 -2
  191. package/Meshes/geometry.js.map +1 -1
  192. package/Meshes/groundMesh.js +7 -7
  193. package/Meshes/groundMesh.js.map +1 -1
  194. package/Meshes/mesh.d.ts +2 -0
  195. package/Meshes/mesh.js +21 -7
  196. package/Meshes/mesh.js.map +1 -1
  197. package/Meshes/mesh.vertexData.js +22 -22
  198. package/Meshes/mesh.vertexData.js.map +1 -1
  199. package/Meshes/meshSimplification.js +1 -1
  200. package/Meshes/meshSimplification.js.map +1 -1
  201. package/Meshes/polygonMesh.js +1 -1
  202. package/Meshes/polygonMesh.js.map +1 -1
  203. package/Meshes/trailMesh.js +1 -1
  204. package/Meshes/trailMesh.js.map +1 -1
  205. package/Misc/HighDynamicRange/hdr.js +4 -6
  206. package/Misc/HighDynamicRange/hdr.js.map +1 -1
  207. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  208. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  209. package/Misc/basisWorker.js +1 -1
  210. package/Misc/basisWorker.js.map +1 -1
  211. package/Misc/environmentTextureTools.js +1 -1
  212. package/Misc/environmentTextureTools.js.map +1 -1
  213. package/Misc/meshExploder.js +1 -2
  214. package/Misc/meshExploder.js.map +1 -1
  215. package/Misc/tga.js +2 -2
  216. package/Misc/tga.js.map +1 -1
  217. package/Misc/timer.js +4 -2
  218. package/Misc/timer.js.map +1 -1
  219. package/Misc/tools.d.ts +7 -0
  220. package/Misc/tools.js +20 -6
  221. package/Misc/tools.js.map +1 -1
  222. package/Morph/morphTargetManager.js +1 -1
  223. package/Morph/morphTargetManager.js.map +1 -1
  224. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +1 -1
  225. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  226. package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +11 -1
  227. package/Particles/Node/Blocks/particleSourceTextureBlock.js +25 -11
  228. package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
  229. package/Particles/Node/nodeParticleSystemSet.helper.js +3 -3
  230. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  231. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  232. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  233. package/Particles/computeShaderParticleSystem.js +2 -0
  234. package/Particles/computeShaderParticleSystem.js.map +1 -1
  235. package/Particles/gpuParticleSystem.d.ts +14 -0
  236. package/Particles/gpuParticleSystem.js +94 -12
  237. package/Particles/gpuParticleSystem.js.map +1 -1
  238. package/Particles/particleSystem.js +4 -1
  239. package/Particles/particleSystem.js.map +1 -1
  240. package/Particles/pointsCloudSystem.js +46 -47
  241. package/Particles/pointsCloudSystem.js.map +1 -1
  242. package/Particles/solidParticleSystem.js +5 -6
  243. package/Particles/solidParticleSystem.js.map +1 -1
  244. package/Particles/thinParticleSystem.js +3 -4
  245. package/Particles/thinParticleSystem.js.map +1 -1
  246. package/Particles/webgl2ParticleSystem.js +2 -1
  247. package/Particles/webgl2ParticleSystem.js.map +1 -1
  248. package/Physics/v1/Plugins/ammoJSPlugin.js +0 -8
  249. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  250. package/Physics/v2/characterController.js +4 -8
  251. package/Physics/v2/characterController.js.map +1 -1
  252. package/Physics/v2/ragdoll.js +1 -2
  253. package/Physics/v2/ragdoll.js.map +1 -1
  254. package/PostProcesses/postProcess.js +3 -3
  255. package/PostProcesses/postProcess.js.map +1 -1
  256. package/PostProcesses/thinDepthOfFieldEffect.js +2 -2
  257. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  258. package/Probes/reflectionProbe.js +0 -1
  259. package/Probes/reflectionProbe.js.map +1 -1
  260. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -5
  261. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  262. package/Rendering/depthRenderer.js +0 -11
  263. package/Rendering/depthRenderer.js.map +1 -1
  264. package/Rendering/depthRendererSceneComponent.js +1 -1
  265. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  266. package/Rendering/geometryBufferRenderer.js +0 -1
  267. package/Rendering/geometryBufferRenderer.js.map +1 -1
  268. package/Rendering/objectRenderer.js +7 -5
  269. package/Rendering/objectRenderer.js.map +1 -1
  270. package/Rendering/thinDepthPeelingRenderer.js +1 -1
  271. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  272. package/Rendering/utilityLayerRenderer.js +1 -1
  273. package/Rendering/utilityLayerRenderer.js.map +1 -1
  274. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +18 -8
  275. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  276. package/Shaders/gpuRenderParticles.vertex.js +4 -0
  277. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  278. package/Shaders/gpuUpdateParticles.vertex.js +15 -3
  279. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  280. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +18 -7
  281. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  282. package/ShadersWGSL/gpuUpdateParticles.compute.js +16 -1
  283. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  284. package/Sprites/spriteManager.js +4 -4
  285. package/Sprites/spriteManager.js.map +1 -1
  286. package/XR/features/WebXRAnchorSystem.js +2 -2
  287. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  288. package/XR/features/WebXRHandTracking.js +1 -1
  289. package/XR/features/WebXRHandTracking.js.map +1 -1
  290. package/XR/features/WebXRNearInteraction.js +1 -1
  291. package/XR/features/WebXRNearInteraction.js.map +1 -1
  292. package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
  293. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  294. package/XR/motionController/webXROculusTouchMotionController.js +1 -1
  295. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  296. package/XR/webXRFeaturesManager.js +1 -1
  297. package/XR/webXRFeaturesManager.js.map +1 -1
  298. package/assetContainer.js +1 -1
  299. package/assetContainer.js.map +1 -1
  300. package/package.json +1 -1
  301. package/scene.d.ts +16 -0
  302. package/scene.js +28 -0
  303. package/scene.js.map +1 -1
  304. package/sceneComponent.js +1 -1
  305. package/sceneComponent.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"decalBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/decalBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, IndicesArray, FloatArray } from \"../../types\";\r\nimport { Vector3, Matrix, Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Lerp } from \"../../Maths/math.scalar.functions\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst XpAxis = new Vector3(1, 0, 0);\r\nconst XnAxis = new Vector3(-1, 0, 0);\r\nconst YpAxis = new Vector3(0, 1, 0);\r\nconst YnAxis = new Vector3(0, -1, 0);\r\nconst ZpAxis = new Vector3(0, 0, 1);\r\nconst ZnAxis = new Vector3(0, 0, -1);\r\n\r\n/** @internal */\r\nclass DecalVertex {\r\n /** @internal */\r\n constructor(\r\n public position: Vector3 = Vector3.Zero(),\r\n public normal: Vector3 = Vector3.Up(),\r\n public uv: Vector2 = Vector2.Zero(),\r\n public vertexIdx: number = 0,\r\n public vertexIdxForBones: number = 0,\r\n public localPositionOverride: Nullable<number[]> = null,\r\n public localNormalOverride: Nullable<number[]> = null,\r\n public matrixIndicesOverride: Nullable<number[]> = null,\r\n public matrixWeightsOverride: Nullable<number[]> = null\r\n ) {}\r\n /** @internal */\r\n public clone(): DecalVertex {\r\n return new DecalVertex(\r\n this.position.clone(),\r\n this.normal.clone(),\r\n this.uv.clone(),\r\n this.vertexIdx,\r\n this.vertexIdxForBones,\r\n this.localPositionOverride?.slice(),\r\n this.localNormalOverride?.slice(),\r\n this.matrixIndicesOverride?.slice(),\r\n this.matrixWeightsOverride?.slice()\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates a decal mesh.\r\n * A decal is a mesh usually applied as a model onto the surface of another mesh. So don't forget the parameter `sourceMesh` depicting the decal\r\n * * The parameter `position` (Vector3, default `(0, 0, 0)`) sets the position of the decal in World coordinates\r\n * * The parameter `normal` (Vector3, default `Vector3.Up`) sets the normal of the mesh where the decal is applied onto in World coordinates\r\n * * The parameter `size` (Vector3, default `(1, 1, 1)`) sets the decal scaling\r\n * * The parameter `angle` (float in radian, default 0) sets the angle to rotate the decal\r\n * * The parameter `captureUVS` defines if we need to capture the uvs or compute them\r\n * * The parameter `cullBackFaces` defines if the back faces should be removed from the decal mesh\r\n * * The parameter `localMode` defines that the computations should be done with the local mesh coordinates instead of the world space coordinates.\r\n * * Use this mode if you want the decal to be parented to the sourceMesh and move/rotate with it.\r\n * Note: Meshes with morph targets are not supported!\r\n * @param name defines the name of the mesh\r\n * @param sourceMesh defines the mesh where the decal must be applied\r\n * @param options defines the options used to create the mesh\r\n * @returns the decal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals\r\n */\r\nexport function CreateDecal(\r\n name: string,\r\n sourceMesh: AbstractMesh,\r\n options: { position?: Vector3; normal?: Vector3; size?: Vector3; angle?: number; captureUVS?: boolean; cullBackFaces?: boolean; localMode?: boolean }\r\n): Mesh {\r\n const hasSkeleton = !!sourceMesh.skeleton;\r\n const hasMorphTargets = !!sourceMesh.morphTargetManager?.numTargets;\r\n const useLocalComputation = options.localMode || hasSkeleton;\r\n\r\n const indices = <IndicesArray>sourceMesh.getIndices();\r\n const positions = hasSkeleton || hasMorphTargets ? sourceMesh.getPositionData(true, true) : sourceMesh.getVerticesData(VertexBuffer.PositionKind);\r\n const normals = hasSkeleton || hasMorphTargets ? sourceMesh.getNormalsData(true, true) : sourceMesh.getVerticesData(VertexBuffer.NormalKind);\r\n const localPositions = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.PositionKind) : positions) : null;\r\n const localNormals = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.NormalKind) : normals) : null;\r\n const uvs = sourceMesh.getVerticesData(VertexBuffer.UVKind);\r\n const matIndices = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesKind) : null;\r\n const matWeights = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsKind) : null;\r\n const matIndicesExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind) : null;\r\n const matWeightsExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsExtraKind) : null;\r\n\r\n const position = options.position || Vector3.Zero();\r\n let normal = options.normal || Vector3.Up();\r\n const size = options.size || Vector3.One();\r\n const angle = options.angle || 0;\r\n\r\n // Getting correct rotation\r\n if (!normal) {\r\n const target = new Vector3(0, 0, 1);\r\n const camera = <Camera>sourceMesh.getScene().activeCamera;\r\n const cameraWorldTarget = Vector3.TransformCoordinates(target, camera.getWorldMatrix());\r\n\r\n normal = camera.globalPosition.subtract(cameraWorldTarget);\r\n }\r\n\r\n const yaw = -Math.atan2(normal.z, normal.x) - Math.PI / 2;\r\n const len = Math.sqrt(normal.x * normal.x + normal.z * normal.z);\r\n const pitch = Math.atan2(normal.y, len);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.indices = [];\r\n vertexData.positions = [];\r\n vertexData.normals = [];\r\n vertexData.uvs = [];\r\n vertexData.matricesIndices = hasSkeleton ? [] : null;\r\n vertexData.matricesWeights = hasSkeleton ? [] : null;\r\n vertexData.matricesIndicesExtra = matIndicesExtra ? [] : null;\r\n vertexData.matricesWeightsExtra = matWeightsExtra ? [] : null;\r\n\r\n let currentVertexDataIndex = 0;\r\n\r\n const extractDecalVector3 = (indexId: number, transformMatrix: Matrix): DecalVertex => {\r\n const result = new DecalVertex();\r\n if (!indices || !positions || !normals) {\r\n return result;\r\n }\r\n\r\n const vertexId = indices[indexId];\r\n\r\n result.vertexIdx = vertexId * 3;\r\n result.vertexIdxForBones = vertexId * 4;\r\n\r\n // Send vector to decal local world\r\n result.position = new Vector3(positions[vertexId * 3], positions[vertexId * 3 + 1], positions[vertexId * 3 + 2]);\r\n Vector3.TransformCoordinatesToRef(result.position, transformMatrix, result.position);\r\n\r\n // Get normal\r\n result.normal = new Vector3(normals[vertexId * 3], normals[vertexId * 3 + 1], normals[vertexId * 3 + 2]);\r\n Vector3.TransformNormalToRef(result.normal, transformMatrix, result.normal);\r\n\r\n if (options.captureUVS && uvs) {\r\n const v = uvs[vertexId * 2 + 1];\r\n result.uv = new Vector2(uvs[vertexId * 2], useOpenGLOrientationForUV ? 1 - v : v);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const emptyArray = [0, 0, 0, 0];\r\n\r\n // Inspired by https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/examples/js/geometries/DecalGeometry.js\r\n const clip = (vertices: DecalVertex[], axis: Vector3): Nullable<DecalVertex[]> => {\r\n if (vertices.length === 0) {\r\n return vertices;\r\n }\r\n\r\n const clipSize = 0.5 * Math.abs(Vector3.Dot(size, axis));\r\n\r\n const indexOf = (arr: FloatArray | number[], val: number, start: number, num: number) => {\r\n for (let i = 0; i < num; ++i) {\r\n if (arr[start + i] === val) {\r\n return start + i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const clipVertices = (v0: DecalVertex, v1: DecalVertex): DecalVertex => {\r\n const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);\r\n\r\n let indices = emptyArray;\r\n let weights = emptyArray;\r\n\r\n if (matIndices && matWeights) {\r\n const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;\r\n const v0Indices = v0.matrixIndicesOverride ?? matIndices;\r\n const v0Weights = v0.matrixWeightsOverride ?? matWeights;\r\n\r\n const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;\r\n const v1Indices = v1.matrixIndicesOverride ?? matIndices;\r\n const v1Weights = v1.matrixWeightsOverride ?? matWeights;\r\n\r\n indices = [0, 0, 0, 0];\r\n weights = [0, 0, 0, 0];\r\n\r\n let index = 0;\r\n for (let i = 0; i < 4; ++i) {\r\n if (v0Weights[mat0Index + i] > 0) {\r\n const idx = indexOf(v1Indices, v0Indices[mat0Index + i], mat1Index, 4);\r\n indices[index] = v0Indices[mat0Index + i];\r\n weights[index] = Lerp(v0Weights[mat0Index + i], idx >= 0 ? v1Weights[idx] : 0, clipFactor);\r\n index++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 4 && index < 4; ++i) {\r\n const ind = v1Indices[mat1Index + i];\r\n if (indexOf(v0Indices, ind, mat0Index, 4) !== -1) {\r\n continue;\r\n }\r\n\r\n indices[index] = ind;\r\n weights[index] = Lerp(0, v1Weights[mat1Index + i], clipFactor);\r\n index++;\r\n }\r\n\r\n const sumw = weights[0] + weights[1] + weights[2] + weights[3];\r\n\r\n weights[0] /= sumw;\r\n weights[1] /= sumw;\r\n weights[2] /= sumw;\r\n weights[3] /= sumw;\r\n }\r\n\r\n const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : (localPositions?.[v0.vertexIdx] ?? 0);\r\n const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : (localPositions?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : (localPositions?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : (localPositions?.[v1.vertexIdx] ?? 0);\r\n const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : (localPositions?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : (localPositions?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : (localNormals?.[v0.vertexIdx] ?? 0);\r\n const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : (localNormals?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : (localNormals?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : (localNormals?.[v1.vertexIdx] ?? 0);\r\n const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : (localNormals?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : (localNormals?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;\r\n const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;\r\n const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;\r\n\r\n const norm = Math.sqrt(interpNormalX * interpNormalX + interpNormalY * interpNormalY + interpNormalZ * interpNormalZ);\r\n\r\n return new DecalVertex(\r\n Vector3.Lerp(v0.position, v1.position, clipFactor),\r\n Vector3.Lerp(v0.normal, v1.normal, clipFactor).normalize(),\r\n Vector2.Lerp(v0.uv, v1.uv, clipFactor),\r\n -1,\r\n -1,\r\n localPositions\r\n ? [\r\n v0LocalPositionX + (v1LocalPositionX - v0LocalPositionX) * clipFactor,\r\n v0LocalPositionY + (v1LocalPositionY - v0LocalPositionY) * clipFactor,\r\n v0LocalPositionZ + (v1LocalPositionZ - v0LocalPositionZ) * clipFactor,\r\n ]\r\n : null,\r\n localNormals ? [interpNormalX / norm, interpNormalY / norm, interpNormalZ / norm] : null,\r\n indices,\r\n weights\r\n );\r\n };\r\n\r\n let clipResult: Nullable<DecalVertex[]> = null;\r\n\r\n if (vertices.length > 3) {\r\n clipResult = [] as DecalVertex[];\r\n }\r\n\r\n for (let index = 0; index < vertices.length; index += 3) {\r\n let total = 0;\r\n let nV1: Nullable<DecalVertex> = null;\r\n let nV2: Nullable<DecalVertex> = null;\r\n let nV3: Nullable<DecalVertex> = null;\r\n let nV4: Nullable<DecalVertex> = null;\r\n\r\n const d1 = Vector3.Dot(vertices[index].position, axis) - clipSize;\r\n const d2 = Vector3.Dot(vertices[index + 1].position, axis) - clipSize;\r\n const d3 = Vector3.Dot(vertices[index + 2].position, axis) - clipSize;\r\n\r\n const v1Out = d1 > 0;\r\n const v2Out = d2 > 0;\r\n const v3Out = d3 > 0;\r\n\r\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\r\n\r\n switch (total) {\r\n case 0:\r\n if (vertices.length > 3) {\r\n clipResult!.push(vertices[index]);\r\n clipResult!.push(vertices[index + 1]);\r\n clipResult!.push(vertices[index + 2]);\r\n } else {\r\n clipResult = vertices;\r\n }\r\n break;\r\n case 1:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (v1Out) {\r\n nV1 = vertices[index + 1];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index], nV1);\r\n nV4 = clipVertices(vertices[index], nV2);\r\n }\r\n\r\n if (v2Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index + 1], nV1);\r\n nV4 = clipVertices(vertices[index + 1], nV2);\r\n\r\n clipResult.push(nV3);\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV1.clone());\r\n\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV4);\r\n break;\r\n }\r\n if (v3Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 1];\r\n nV3 = clipVertices(vertices[index + 2], nV1);\r\n nV4 = clipVertices(vertices[index + 2], nV2);\r\n }\r\n\r\n if (nV1 && nV2 && nV3 && nV4) {\r\n clipResult.push(nV1.clone());\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3);\r\n\r\n clipResult.push(nV4);\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV2.clone());\r\n }\r\n break;\r\n case 2:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (!v1Out) {\r\n nV1 = vertices[index].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 1]);\r\n nV3 = clipVertices(nV1, vertices[index + 2]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v2Out) {\r\n nV1 = vertices[index + 1].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 2]);\r\n nV3 = clipVertices(nV1, vertices[index]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v3Out) {\r\n nV1 = vertices[index + 2].clone();\r\n nV2 = clipVertices(nV1, vertices[index]);\r\n nV3 = clipVertices(nV1, vertices[index + 1]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n break;\r\n case 3:\r\n break;\r\n }\r\n }\r\n\r\n return clipResult;\r\n };\r\n\r\n const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;\r\n const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;\r\n\r\n const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;\r\n const thinInstanceMatrix = TmpVectors.Matrix[0];\r\n\r\n thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);\r\n\r\n for (let m = 0; m < numMatrices; ++m) {\r\n if (sourceMeshAsMesh?.hasThinInstances && matrixData) {\r\n const ofst = m * 16;\r\n\r\n thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);\r\n thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);\r\n thinInstanceMatrix.setRowFromFloats(2, matrixData[ofst + 8], matrixData[ofst + 9], matrixData[ofst + 10], matrixData[ofst + 11]);\r\n thinInstanceMatrix.setRowFromFloats(3, matrixData[ofst + 12], matrixData[ofst + 13], matrixData[ofst + 14], matrixData[ofst + 15]);\r\n }\r\n\r\n // Matrix\r\n const decalWorldMatrix = Matrix.RotationYawPitchRoll(yaw, pitch, angle).multiply(Matrix.Translation(position.x, position.y, position.z));\r\n const inverseDecalWorldMatrix = Matrix.Invert(decalWorldMatrix);\r\n const meshWorldMatrix = sourceMesh.getWorldMatrix();\r\n const transformMatrix = thinInstanceMatrix.multiply(meshWorldMatrix).multiply(inverseDecalWorldMatrix);\r\n\r\n const oneFaceVertices = new Array<DecalVertex>(3);\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let faceVertices: Nullable<DecalVertex[]> = oneFaceVertices;\r\n\r\n faceVertices[0] = extractDecalVector3(index, transformMatrix);\r\n faceVertices[1] = extractDecalVector3(index + 1, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 2, transformMatrix);\r\n\r\n if (options.cullBackFaces) {\r\n // If all the normals of the vertices of the face are pointing away from the view direction we discard the face.\r\n // As computations are done in the decal coordinate space, the viewDirection is (0,0,1), so when dot(vertexNormal, -viewDirection) <= 0 the vertex is culled\r\n if (-faceVertices[0].normal.z <= 0 && -faceVertices[1].normal.z <= 0 && -faceVertices[2].normal.z <= 0) {\r\n continue;\r\n }\r\n }\r\n\r\n // Clip\r\n faceVertices = clip(faceVertices, XpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, XnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n\r\n // Add UVs and get back to world\r\n for (let vIndex = 0; vIndex < faceVertices.length; vIndex++) {\r\n const vertex = faceVertices[vIndex];\r\n\r\n //TODO check for Int32Array | Uint32Array | Uint16Array\r\n vertexData.indices.push(currentVertexDataIndex);\r\n if (useLocalComputation) {\r\n if (vertex.localPositionOverride) {\r\n vertexData.positions[currentVertexDataIndex * 3] = vertex.localPositionOverride[0];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = vertex.localPositionOverride[1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = vertex.localPositionOverride[2];\r\n } else if (localPositions) {\r\n vertexData.positions[currentVertexDataIndex * 3] = localPositions[vertex.vertexIdx];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = localPositions[vertex.vertexIdx + 1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = localPositions[vertex.vertexIdx + 2];\r\n }\r\n if (vertex.localNormalOverride) {\r\n vertexData.normals[currentVertexDataIndex * 3] = vertex.localNormalOverride[0];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = vertex.localNormalOverride[1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = vertex.localNormalOverride[2];\r\n } else if (localNormals) {\r\n vertexData.normals[currentVertexDataIndex * 3] = localNormals[vertex.vertexIdx];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = localNormals[vertex.vertexIdx + 1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = localNormals[vertex.vertexIdx + 2];\r\n }\r\n } else {\r\n vertex.position.toArray(vertexData.positions, currentVertexDataIndex * 3);\r\n vertex.normal.toArray(vertexData.normals, currentVertexDataIndex * 3);\r\n }\r\n if (vertexData.matricesIndices && vertexData.matricesWeights) {\r\n if (vertex.matrixIndicesOverride) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = vertex.matrixIndicesOverride[0];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = vertex.matrixIndicesOverride[1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = vertex.matrixIndicesOverride[2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = vertex.matrixIndicesOverride[3];\r\n } else {\r\n if (matIndices) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = matIndices[vertex.vertexIdxForBones];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = matIndices[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = matIndices[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = matIndices[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matIndicesExtra && vertexData.matricesIndicesExtra) {\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4] = matIndicesExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 1] = matIndicesExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 2] = matIndicesExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 3] = matIndicesExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n if (vertex.matrixWeightsOverride) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = vertex.matrixWeightsOverride[0];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = vertex.matrixWeightsOverride[1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = vertex.matrixWeightsOverride[2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = vertex.matrixWeightsOverride[3];\r\n } else {\r\n if (matWeights) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = matWeights[vertex.vertexIdxForBones];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = matWeights[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = matWeights[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = matWeights[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matWeightsExtra && vertexData.matricesWeightsExtra) {\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4] = matWeightsExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 1] = matWeightsExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 2] = matWeightsExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 3] = matWeightsExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n }\r\n\r\n if (!options.captureUVS) {\r\n vertexData.uvs.push(0.5 + vertex.position.x / size.x);\r\n const v = 0.5 + vertex.position.y / size.y;\r\n vertexData.uvs.push(useOpenGLOrientationForUV ? 1 - v : v);\r\n } else {\r\n vertex.uv.toArray(vertexData.uvs, currentVertexDataIndex * 2);\r\n }\r\n currentVertexDataIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Avoid the \"Setting vertex data kind 'XXX' with an empty array\" warning when calling vertexData.applyToMesh\r\n if (vertexData.indices.length === 0) {\r\n vertexData.indices = null;\r\n }\r\n if (vertexData.positions.length === 0) {\r\n vertexData.positions = null;\r\n }\r\n if (vertexData.normals.length === 0) {\r\n vertexData.normals = null;\r\n }\r\n if (vertexData.uvs.length === 0) {\r\n vertexData.uvs = null;\r\n }\r\n if (vertexData.matricesIndices?.length === 0) {\r\n vertexData.matricesIndices = null;\r\n }\r\n if (vertexData.matricesWeights?.length === 0) {\r\n vertexData.matricesWeights = null;\r\n }\r\n if (vertexData.matricesIndicesExtra?.length === 0) {\r\n vertexData.matricesIndicesExtra = null;\r\n }\r\n if (vertexData.matricesWeightsExtra?.length === 0) {\r\n vertexData.matricesWeightsExtra = null;\r\n }\r\n\r\n // Return mesh\r\n const decal = new Mesh(name, sourceMesh.getScene());\r\n vertexData.applyToMesh(decal);\r\n\r\n if (useLocalComputation) {\r\n decal.skeleton = sourceMesh.skeleton;\r\n decal.parent = sourceMesh;\r\n } else {\r\n decal.position = position.clone();\r\n decal.rotation = new Vector3(pitch, yaw, angle);\r\n }\r\n\r\n decal.computeWorldMatrix(true);\r\n decal.refreshBoundingInfo(true, true);\r\n\r\n return decal;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function directly from the module\r\n */\r\nexport const DecalBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDecal,\r\n};\r\n\r\nMesh.CreateDecal = (name: string, sourceMesh: AbstractMesh, position: Vector3, normal: Vector3, size: Vector3, angle: number): Mesh => {\r\n const options = {\r\n position,\r\n normal,\r\n size,\r\n angle,\r\n };\r\n\r\n return CreateDecal(name, sourceMesh, options);\r\n};\r\n"]}
1
+ {"version":3,"file":"decalBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/decalBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, IndicesArray, FloatArray } from \"../../types\";\r\nimport { Vector3, Matrix, Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Lerp } from \"../../Maths/math.scalar.functions\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst XpAxis = new Vector3(1, 0, 0);\r\nconst XnAxis = new Vector3(-1, 0, 0);\r\nconst YpAxis = new Vector3(0, 1, 0);\r\nconst YnAxis = new Vector3(0, -1, 0);\r\nconst ZpAxis = new Vector3(0, 0, 1);\r\nconst ZnAxis = new Vector3(0, 0, -1);\r\n\r\n/** @internal */\r\nclass DecalVertex {\r\n /** @internal */\r\n constructor(\r\n public position: Vector3 = Vector3.Zero(),\r\n public normal: Vector3 = Vector3.Up(),\r\n public uv: Vector2 = Vector2.Zero(),\r\n public vertexIdx: number = 0,\r\n public vertexIdxForBones: number = 0,\r\n public localPositionOverride: Nullable<number[]> = null,\r\n public localNormalOverride: Nullable<number[]> = null,\r\n public matrixIndicesOverride: Nullable<number[]> = null,\r\n public matrixWeightsOverride: Nullable<number[]> = null\r\n ) {}\r\n /** @internal */\r\n public clone(): DecalVertex {\r\n return new DecalVertex(\r\n this.position.clone(),\r\n this.normal.clone(),\r\n this.uv.clone(),\r\n this.vertexIdx,\r\n this.vertexIdxForBones,\r\n this.localPositionOverride?.slice(),\r\n this.localNormalOverride?.slice(),\r\n this.matrixIndicesOverride?.slice(),\r\n this.matrixWeightsOverride?.slice()\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates a decal mesh.\r\n * A decal is a mesh usually applied as a model onto the surface of another mesh. So don't forget the parameter `sourceMesh` depicting the decal\r\n * * The parameter `position` (Vector3, default `(0, 0, 0)`) sets the position of the decal in World coordinates\r\n * * The parameter `normal` (Vector3, default `Vector3.Up`) sets the normal of the mesh where the decal is applied onto in World coordinates\r\n * * The parameter `size` (Vector3, default `(1, 1, 1)`) sets the decal scaling\r\n * * The parameter `angle` (float in radian, default 0) sets the angle to rotate the decal\r\n * * The parameter `captureUVS` defines if we need to capture the uvs or compute them\r\n * * The parameter `cullBackFaces` defines if the back faces should be removed from the decal mesh\r\n * * The parameter `localMode` defines that the computations should be done with the local mesh coordinates instead of the world space coordinates.\r\n * * Use this mode if you want the decal to be parented to the sourceMesh and move/rotate with it.\r\n * Note: Meshes with morph targets are not supported!\r\n * @param name defines the name of the mesh\r\n * @param sourceMesh defines the mesh where the decal must be applied\r\n * @param options defines the options used to create the mesh\r\n * @returns the decal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals\r\n */\r\nexport function CreateDecal(\r\n name: string,\r\n sourceMesh: AbstractMesh,\r\n options: { position?: Vector3; normal?: Vector3; size?: Vector3; angle?: number; captureUVS?: boolean; cullBackFaces?: boolean; localMode?: boolean }\r\n): Mesh {\r\n const hasSkeleton = !!sourceMesh.skeleton;\r\n const hasMorphTargets = !!sourceMesh.morphTargetManager?.numTargets;\r\n const useLocalComputation = options.localMode || hasSkeleton;\r\n\r\n const indices = <IndicesArray>sourceMesh.getIndices();\r\n const positions = hasSkeleton || hasMorphTargets ? sourceMesh.getPositionData(true, true) : sourceMesh.getVerticesData(VertexBuffer.PositionKind);\r\n const normals = hasSkeleton || hasMorphTargets ? sourceMesh.getNormalsData(true, true) : sourceMesh.getVerticesData(VertexBuffer.NormalKind);\r\n const localPositions = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.PositionKind) : positions) : null;\r\n const localNormals = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.NormalKind) : normals) : null;\r\n const uvs = sourceMesh.getVerticesData(VertexBuffer.UVKind);\r\n const matIndices = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesKind) : null;\r\n const matWeights = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsKind) : null;\r\n const matIndicesExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind) : null;\r\n const matWeightsExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsExtraKind) : null;\r\n\r\n const position = options.position || Vector3.Zero();\r\n let normal = options.normal || Vector3.Up();\r\n const size = options.size || Vector3.One();\r\n const angle = options.angle || 0;\r\n\r\n // Getting correct rotation\r\n if (!normal) {\r\n const target = new Vector3(0, 0, 1);\r\n const camera = <Camera>sourceMesh.getScene().activeCamera;\r\n const cameraWorldTarget = Vector3.TransformCoordinates(target, camera.getWorldMatrix());\r\n\r\n normal = camera.globalPosition.subtract(cameraWorldTarget);\r\n }\r\n\r\n const yaw = -Math.atan2(normal.z, normal.x) - Math.PI / 2;\r\n const len = Math.sqrt(normal.x * normal.x + normal.z * normal.z);\r\n const pitch = Math.atan2(normal.y, len);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.indices = [];\r\n vertexData.positions = [];\r\n vertexData.normals = [];\r\n vertexData.uvs = [];\r\n vertexData.matricesIndices = hasSkeleton ? [] : null;\r\n vertexData.matricesWeights = hasSkeleton ? [] : null;\r\n vertexData.matricesIndicesExtra = matIndicesExtra ? [] : null;\r\n vertexData.matricesWeightsExtra = matWeightsExtra ? [] : null;\r\n\r\n let currentVertexDataIndex = 0;\r\n\r\n const extractDecalVector3 = (indexId: number, transformMatrix: Matrix): DecalVertex => {\r\n const result = new DecalVertex();\r\n if (!indices || !positions || !normals) {\r\n return result;\r\n }\r\n\r\n const vertexId = indices[indexId];\r\n\r\n result.vertexIdx = vertexId * 3;\r\n result.vertexIdxForBones = vertexId * 4;\r\n\r\n // Send vector to decal local world\r\n result.position = new Vector3(positions[vertexId * 3], positions[vertexId * 3 + 1], positions[vertexId * 3 + 2]);\r\n Vector3.TransformCoordinatesToRef(result.position, transformMatrix, result.position);\r\n\r\n // Get normal\r\n result.normal = new Vector3(normals[vertexId * 3], normals[vertexId * 3 + 1], normals[vertexId * 3 + 2]);\r\n Vector3.TransformNormalToRef(result.normal, transformMatrix, result.normal);\r\n\r\n if (options.captureUVS && uvs) {\r\n const v = uvs[vertexId * 2 + 1];\r\n result.uv = new Vector2(uvs[vertexId * 2], useOpenGLOrientationForUV ? 1 - v : v);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const emptyArray = [0, 0, 0, 0];\r\n\r\n // Inspired by https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/examples/js/geometries/DecalGeometry.js\r\n const clip = (vertices: DecalVertex[], axis: Vector3): Nullable<DecalVertex[]> => {\r\n if (vertices.length === 0) {\r\n return vertices;\r\n }\r\n\r\n const clipSize = 0.5 * Math.abs(Vector3.Dot(size, axis));\r\n\r\n const indexOf = (arr: FloatArray | number[], val: number, start: number, num: number) => {\r\n for (let i = 0; i < num; ++i) {\r\n if (arr[start + i] === val) {\r\n return start + i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const clipVertices = (v0: DecalVertex, v1: DecalVertex): DecalVertex => {\r\n const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);\r\n\r\n let indices = emptyArray;\r\n let weights = emptyArray;\r\n\r\n if (matIndices && matWeights) {\r\n const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;\r\n const v0Indices = v0.matrixIndicesOverride ?? matIndices;\r\n const v0Weights = v0.matrixWeightsOverride ?? matWeights;\r\n\r\n const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;\r\n const v1Indices = v1.matrixIndicesOverride ?? matIndices;\r\n const v1Weights = v1.matrixWeightsOverride ?? matWeights;\r\n\r\n indices = [0, 0, 0, 0];\r\n weights = [0, 0, 0, 0];\r\n\r\n let index = 0;\r\n for (let i = 0; i < 4; ++i) {\r\n if (v0Weights[mat0Index + i] > 0) {\r\n const idx = indexOf(v1Indices, v0Indices[mat0Index + i], mat1Index, 4);\r\n indices[index] = v0Indices[mat0Index + i];\r\n weights[index] = Lerp(v0Weights[mat0Index + i], idx >= 0 ? v1Weights[idx] : 0, clipFactor);\r\n index++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 4 && index < 4; ++i) {\r\n const ind = v1Indices[mat1Index + i];\r\n if (indexOf(v0Indices, ind, mat0Index, 4) !== -1) {\r\n continue;\r\n }\r\n\r\n indices[index] = ind;\r\n weights[index] = Lerp(0, v1Weights[mat1Index + i], clipFactor);\r\n index++;\r\n }\r\n\r\n const sumw = weights[0] + weights[1] + weights[2] + weights[3];\r\n\r\n weights[0] /= sumw;\r\n weights[1] /= sumw;\r\n weights[2] /= sumw;\r\n weights[3] /= sumw;\r\n }\r\n\r\n const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : (localPositions?.[v0.vertexIdx] ?? 0);\r\n const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : (localPositions?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : (localPositions?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : (localPositions?.[v1.vertexIdx] ?? 0);\r\n const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : (localPositions?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : (localPositions?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : (localNormals?.[v0.vertexIdx] ?? 0);\r\n const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : (localNormals?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : (localNormals?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : (localNormals?.[v1.vertexIdx] ?? 0);\r\n const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : (localNormals?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : (localNormals?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;\r\n const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;\r\n const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;\r\n\r\n const norm = Math.sqrt(interpNormalX * interpNormalX + interpNormalY * interpNormalY + interpNormalZ * interpNormalZ);\r\n\r\n return new DecalVertex(\r\n Vector3.Lerp(v0.position, v1.position, clipFactor),\r\n Vector3.Lerp(v0.normal, v1.normal, clipFactor).normalize(),\r\n Vector2.Lerp(v0.uv, v1.uv, clipFactor),\r\n -1,\r\n -1,\r\n localPositions\r\n ? [\r\n v0LocalPositionX + (v1LocalPositionX - v0LocalPositionX) * clipFactor,\r\n v0LocalPositionY + (v1LocalPositionY - v0LocalPositionY) * clipFactor,\r\n v0LocalPositionZ + (v1LocalPositionZ - v0LocalPositionZ) * clipFactor,\r\n ]\r\n : null,\r\n localNormals ? [interpNormalX / norm, interpNormalY / norm, interpNormalZ / norm] : null,\r\n indices,\r\n weights\r\n );\r\n };\r\n\r\n let clipResult: Nullable<DecalVertex[]> = null;\r\n\r\n if (vertices.length > 3) {\r\n clipResult = [] as DecalVertex[];\r\n }\r\n\r\n for (let index = 0; index < vertices.length; index += 3) {\r\n let nV1: Nullable<DecalVertex> = null;\r\n let nV2: Nullable<DecalVertex> = null;\r\n let nV3: Nullable<DecalVertex> = null;\r\n let nV4: Nullable<DecalVertex> = null;\r\n\r\n const d1 = Vector3.Dot(vertices[index].position, axis) - clipSize;\r\n const d2 = Vector3.Dot(vertices[index + 1].position, axis) - clipSize;\r\n const d3 = Vector3.Dot(vertices[index + 2].position, axis) - clipSize;\r\n\r\n const v1Out = d1 > 0;\r\n const v2Out = d2 > 0;\r\n const v3Out = d3 > 0;\r\n\r\n const total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\r\n\r\n switch (total) {\r\n case 0:\r\n if (vertices.length > 3) {\r\n clipResult!.push(vertices[index]);\r\n clipResult!.push(vertices[index + 1]);\r\n clipResult!.push(vertices[index + 2]);\r\n } else {\r\n clipResult = vertices;\r\n }\r\n break;\r\n case 1:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (v1Out) {\r\n nV1 = vertices[index + 1];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index], nV1);\r\n nV4 = clipVertices(vertices[index], nV2);\r\n }\r\n\r\n if (v2Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index + 1], nV1);\r\n nV4 = clipVertices(vertices[index + 1], nV2);\r\n\r\n clipResult.push(nV3);\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV1.clone());\r\n\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV4);\r\n break;\r\n }\r\n if (v3Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 1];\r\n nV3 = clipVertices(vertices[index + 2], nV1);\r\n nV4 = clipVertices(vertices[index + 2], nV2);\r\n }\r\n\r\n if (nV1 && nV2 && nV3 && nV4) {\r\n clipResult.push(nV1.clone());\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3);\r\n\r\n clipResult.push(nV4);\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV2.clone());\r\n }\r\n break;\r\n case 2:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (!v1Out) {\r\n nV1 = vertices[index].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 1]);\r\n nV3 = clipVertices(nV1, vertices[index + 2]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v2Out) {\r\n nV1 = vertices[index + 1].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 2]);\r\n nV3 = clipVertices(nV1, vertices[index]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v3Out) {\r\n nV1 = vertices[index + 2].clone();\r\n nV2 = clipVertices(nV1, vertices[index]);\r\n nV3 = clipVertices(nV1, vertices[index + 1]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n break;\r\n case 3:\r\n break;\r\n }\r\n }\r\n\r\n return clipResult;\r\n };\r\n\r\n const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;\r\n const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;\r\n\r\n const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;\r\n const thinInstanceMatrix = TmpVectors.Matrix[0];\r\n\r\n thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);\r\n\r\n for (let m = 0; m < numMatrices; ++m) {\r\n if (sourceMeshAsMesh?.hasThinInstances && matrixData) {\r\n const ofst = m * 16;\r\n\r\n thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);\r\n thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);\r\n thinInstanceMatrix.setRowFromFloats(2, matrixData[ofst + 8], matrixData[ofst + 9], matrixData[ofst + 10], matrixData[ofst + 11]);\r\n thinInstanceMatrix.setRowFromFloats(3, matrixData[ofst + 12], matrixData[ofst + 13], matrixData[ofst + 14], matrixData[ofst + 15]);\r\n }\r\n\r\n // Matrix\r\n const decalWorldMatrix = Matrix.RotationYawPitchRoll(yaw, pitch, angle).multiply(Matrix.Translation(position.x, position.y, position.z));\r\n const inverseDecalWorldMatrix = Matrix.Invert(decalWorldMatrix);\r\n const meshWorldMatrix = sourceMesh.getWorldMatrix();\r\n const transformMatrix = thinInstanceMatrix.multiply(meshWorldMatrix).multiply(inverseDecalWorldMatrix);\r\n\r\n const oneFaceVertices = new Array<DecalVertex>(3);\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let faceVertices: Nullable<DecalVertex[]> = oneFaceVertices;\r\n\r\n faceVertices[0] = extractDecalVector3(index, transformMatrix);\r\n faceVertices[1] = extractDecalVector3(index + 1, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 2, transformMatrix);\r\n\r\n if (options.cullBackFaces) {\r\n // If all the normals of the vertices of the face are pointing away from the view direction we discard the face.\r\n // As computations are done in the decal coordinate space, the viewDirection is (0,0,1), so when dot(vertexNormal, -viewDirection) <= 0 the vertex is culled\r\n if (-faceVertices[0].normal.z <= 0 && -faceVertices[1].normal.z <= 0 && -faceVertices[2].normal.z <= 0) {\r\n continue;\r\n }\r\n }\r\n\r\n // Clip\r\n faceVertices = clip(faceVertices, XpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, XnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n\r\n // Add UVs and get back to world\r\n for (let vIndex = 0; vIndex < faceVertices.length; vIndex++) {\r\n const vertex = faceVertices[vIndex];\r\n\r\n //TODO check for Int32Array | Uint32Array | Uint16Array\r\n vertexData.indices.push(currentVertexDataIndex);\r\n if (useLocalComputation) {\r\n if (vertex.localPositionOverride) {\r\n vertexData.positions[currentVertexDataIndex * 3] = vertex.localPositionOverride[0];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = vertex.localPositionOverride[1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = vertex.localPositionOverride[2];\r\n } else if (localPositions) {\r\n vertexData.positions[currentVertexDataIndex * 3] = localPositions[vertex.vertexIdx];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = localPositions[vertex.vertexIdx + 1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = localPositions[vertex.vertexIdx + 2];\r\n }\r\n if (vertex.localNormalOverride) {\r\n vertexData.normals[currentVertexDataIndex * 3] = vertex.localNormalOverride[0];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = vertex.localNormalOverride[1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = vertex.localNormalOverride[2];\r\n } else if (localNormals) {\r\n vertexData.normals[currentVertexDataIndex * 3] = localNormals[vertex.vertexIdx];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = localNormals[vertex.vertexIdx + 1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = localNormals[vertex.vertexIdx + 2];\r\n }\r\n } else {\r\n vertex.position.toArray(vertexData.positions, currentVertexDataIndex * 3);\r\n vertex.normal.toArray(vertexData.normals, currentVertexDataIndex * 3);\r\n }\r\n if (vertexData.matricesIndices && vertexData.matricesWeights) {\r\n if (vertex.matrixIndicesOverride) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = vertex.matrixIndicesOverride[0];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = vertex.matrixIndicesOverride[1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = vertex.matrixIndicesOverride[2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = vertex.matrixIndicesOverride[3];\r\n } else {\r\n if (matIndices) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = matIndices[vertex.vertexIdxForBones];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = matIndices[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = matIndices[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = matIndices[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matIndicesExtra && vertexData.matricesIndicesExtra) {\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4] = matIndicesExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 1] = matIndicesExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 2] = matIndicesExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 3] = matIndicesExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n if (vertex.matrixWeightsOverride) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = vertex.matrixWeightsOverride[0];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = vertex.matrixWeightsOverride[1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = vertex.matrixWeightsOverride[2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = vertex.matrixWeightsOverride[3];\r\n } else {\r\n if (matWeights) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = matWeights[vertex.vertexIdxForBones];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = matWeights[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = matWeights[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = matWeights[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matWeightsExtra && vertexData.matricesWeightsExtra) {\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4] = matWeightsExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 1] = matWeightsExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 2] = matWeightsExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 3] = matWeightsExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n }\r\n\r\n if (!options.captureUVS) {\r\n vertexData.uvs.push(0.5 + vertex.position.x / size.x);\r\n const v = 0.5 + vertex.position.y / size.y;\r\n vertexData.uvs.push(useOpenGLOrientationForUV ? 1 - v : v);\r\n } else {\r\n vertex.uv.toArray(vertexData.uvs, currentVertexDataIndex * 2);\r\n }\r\n currentVertexDataIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Avoid the \"Setting vertex data kind 'XXX' with an empty array\" warning when calling vertexData.applyToMesh\r\n if (vertexData.indices.length === 0) {\r\n vertexData.indices = null;\r\n }\r\n if (vertexData.positions.length === 0) {\r\n vertexData.positions = null;\r\n }\r\n if (vertexData.normals.length === 0) {\r\n vertexData.normals = null;\r\n }\r\n if (vertexData.uvs.length === 0) {\r\n vertexData.uvs = null;\r\n }\r\n if (vertexData.matricesIndices?.length === 0) {\r\n vertexData.matricesIndices = null;\r\n }\r\n if (vertexData.matricesWeights?.length === 0) {\r\n vertexData.matricesWeights = null;\r\n }\r\n if (vertexData.matricesIndicesExtra?.length === 0) {\r\n vertexData.matricesIndicesExtra = null;\r\n }\r\n if (vertexData.matricesWeightsExtra?.length === 0) {\r\n vertexData.matricesWeightsExtra = null;\r\n }\r\n\r\n // Return mesh\r\n const decal = new Mesh(name, sourceMesh.getScene());\r\n vertexData.applyToMesh(decal);\r\n\r\n if (useLocalComputation) {\r\n decal.skeleton = sourceMesh.skeleton;\r\n decal.parent = sourceMesh;\r\n } else {\r\n decal.position = position.clone();\r\n decal.rotation = new Vector3(pitch, yaw, angle);\r\n }\r\n\r\n decal.computeWorldMatrix(true);\r\n decal.refreshBoundingInfo(true, true);\r\n\r\n return decal;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function directly from the module\r\n */\r\nexport const DecalBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDecal,\r\n};\r\n\r\nMesh.CreateDecal = (name: string, sourceMesh: AbstractMesh, position: Vector3, normal: Vector3, size: Vector3, angle: number): Mesh => {\r\n const options = {\r\n position,\r\n normal,\r\n size,\r\n angle,\r\n };\r\n\r\n return CreateDecal(name, sourceMesh, options);\r\n};\r\n"]}
@@ -34,8 +34,8 @@ export function CreateLathe(name, options, scene = null) {
34
34
  const pi2 = Math.PI * 2;
35
35
  const paths = [];
36
36
  const invertUV = options.invertUV || false;
37
- let i = 0;
38
- let p = 0;
37
+ let i;
38
+ let p;
39
39
  const step = (pi2 / tessellation) * arc;
40
40
  let rotated;
41
41
  let path;
@@ -1 +1 @@
1
- {"version":3,"file":"latheBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/latheBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport type { Vector4 } from \"../../Maths/math.vector\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { CreateRibbon } from \"./ribbonBuilder\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\n/**\r\n * Creates lathe mesh.\r\n * The lathe is a shape with a symmetry axis : a 2D model shape is rotated around this axis to design the lathe\r\n * * The parameter `shape` is a required array of successive Vector3. This array depicts the shape to be rotated in its local space : the shape must be designed in the xOy plane and will be rotated around the Y axis. It's usually a 2D shape, so the Vector3 z coordinates are often set to zero\r\n * * The parameter `radius` (positive float, default 1) is the radius value of the lathe\r\n * * The parameter `tessellation` (positive integer, default 64) is the side number of the lathe\r\n * * The parameter `clip` (positive integer, default 0) is the number of sides to not create without effecting the general shape of the sides\r\n * * The parameter `arc` (positive float, default 1) is the ratio of the lathe. 0.5 builds for instance half a lathe, so an opened shape\r\n * * The parameter `closed` (boolean, default true) opens/closes the lathe circumference. This should be set to false when used with the parameter \"arc\"\r\n * * The parameter `cap` sets the way the extruded shape is capped. Possible values : BABYLON.Mesh.NO_CAP (default), BABYLON.Mesh.CAP_START, BABYLON.Mesh.CAP_END, BABYLON.Mesh.CAP_ALL\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#side-orientation\r\n * * The optional parameter `invertUV` (boolean, default false) swaps in the geometry the U and V coordinates to apply a texture\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the lathe mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#lathe\r\n */\r\nexport function CreateLathe(\r\n name: string,\r\n options: {\r\n shape: Vector3[];\r\n radius?: number;\r\n tessellation?: number;\r\n clip?: number;\r\n arc?: number;\r\n closed?: boolean;\r\n updatable?: boolean;\r\n sideOrientation?: number;\r\n frontUVs?: Vector4;\r\n backUVs?: Vector4;\r\n cap?: number;\r\n invertUV?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const arc: number = options.arc ? (options.arc <= 0 || options.arc > 1 ? 1.0 : options.arc) : 1.0;\r\n const closed: boolean = options.closed === undefined ? true : options.closed;\r\n const shape = options.shape;\r\n const radius = options.radius || 1;\r\n const tessellation = options.tessellation || 64;\r\n const clip = options.clip || 0;\r\n const updatable = options.updatable;\r\n const sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n const cap = options.cap || Mesh.NO_CAP;\r\n const pi2 = Math.PI * 2;\r\n const paths = [];\r\n const invertUV = options.invertUV || false;\r\n\r\n let i = 0;\r\n let p = 0;\r\n const step = (pi2 / tessellation) * arc;\r\n let rotated;\r\n let path: Array<Vector3>;\r\n for (i = 0; i <= tessellation - clip; i++) {\r\n path = [];\r\n if (cap == Mesh.CAP_START || cap == Mesh.CAP_ALL) {\r\n path.push(new Vector3(0, shape[0].y, 0));\r\n path.push(new Vector3(Math.cos(i * step) * shape[0].x * radius, shape[0].y, Math.sin(i * step) * shape[0].x * radius));\r\n }\r\n for (p = 0; p < shape.length; p++) {\r\n rotated = new Vector3(Math.cos(i * step) * shape[p].x * radius, shape[p].y, Math.sin(i * step) * shape[p].x * radius);\r\n path.push(rotated);\r\n }\r\n if (cap == Mesh.CAP_END || cap == Mesh.CAP_ALL) {\r\n path.push(new Vector3(Math.cos(i * step) * shape[shape.length - 1].x * radius, shape[shape.length - 1].y, Math.sin(i * step) * shape[shape.length - 1].x * radius));\r\n path.push(new Vector3(0, shape[shape.length - 1].y, 0));\r\n }\r\n paths.push(path);\r\n }\r\n\r\n // lathe ribbon\r\n const lathe = CreateRibbon(\r\n name,\r\n { pathArray: paths, closeArray: closed, sideOrientation: sideOrientation, updatable: updatable, invertUV: invertUV, frontUVs: options.frontUVs, backUVs: options.backUVs },\r\n scene\r\n );\r\n return lathe;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function direction from the module\r\n */\r\nexport const LatheBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateLathe,\r\n};\r\n\r\nMesh.CreateLathe = (name: string, shape: Vector3[], radius: number, tessellation: number, scene: Scene, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n shape: shape,\r\n radius: radius,\r\n tessellation: tessellation,\r\n sideOrientation: sideOrientation,\r\n updatable: updatable,\r\n };\r\n\r\n return CreateLathe(name, options, scene);\r\n};\r\n"]}
1
+ {"version":3,"file":"latheBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/latheBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport type { Vector4 } from \"../../Maths/math.vector\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { CreateRibbon } from \"./ribbonBuilder\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\n/**\r\n * Creates lathe mesh.\r\n * The lathe is a shape with a symmetry axis : a 2D model shape is rotated around this axis to design the lathe\r\n * * The parameter `shape` is a required array of successive Vector3. This array depicts the shape to be rotated in its local space : the shape must be designed in the xOy plane and will be rotated around the Y axis. It's usually a 2D shape, so the Vector3 z coordinates are often set to zero\r\n * * The parameter `radius` (positive float, default 1) is the radius value of the lathe\r\n * * The parameter `tessellation` (positive integer, default 64) is the side number of the lathe\r\n * * The parameter `clip` (positive integer, default 0) is the number of sides to not create without effecting the general shape of the sides\r\n * * The parameter `arc` (positive float, default 1) is the ratio of the lathe. 0.5 builds for instance half a lathe, so an opened shape\r\n * * The parameter `closed` (boolean, default true) opens/closes the lathe circumference. This should be set to false when used with the parameter \"arc\"\r\n * * The parameter `cap` sets the way the extruded shape is capped. Possible values : BABYLON.Mesh.NO_CAP (default), BABYLON.Mesh.CAP_START, BABYLON.Mesh.CAP_END, BABYLON.Mesh.CAP_ALL\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#side-orientation\r\n * * The optional parameter `invertUV` (boolean, default false) swaps in the geometry the U and V coordinates to apply a texture\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the lathe mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#lathe\r\n */\r\nexport function CreateLathe(\r\n name: string,\r\n options: {\r\n shape: Vector3[];\r\n radius?: number;\r\n tessellation?: number;\r\n clip?: number;\r\n arc?: number;\r\n closed?: boolean;\r\n updatable?: boolean;\r\n sideOrientation?: number;\r\n frontUVs?: Vector4;\r\n backUVs?: Vector4;\r\n cap?: number;\r\n invertUV?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const arc: number = options.arc ? (options.arc <= 0 || options.arc > 1 ? 1.0 : options.arc) : 1.0;\r\n const closed: boolean = options.closed === undefined ? true : options.closed;\r\n const shape = options.shape;\r\n const radius = options.radius || 1;\r\n const tessellation = options.tessellation || 64;\r\n const clip = options.clip || 0;\r\n const updatable = options.updatable;\r\n const sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n const cap = options.cap || Mesh.NO_CAP;\r\n const pi2 = Math.PI * 2;\r\n const paths = [];\r\n const invertUV = options.invertUV || false;\r\n\r\n let i: number;\r\n let p: number;\r\n const step = (pi2 / tessellation) * arc;\r\n let rotated;\r\n let path: Array<Vector3>;\r\n for (i = 0; i <= tessellation - clip; i++) {\r\n path = [];\r\n if (cap == Mesh.CAP_START || cap == Mesh.CAP_ALL) {\r\n path.push(new Vector3(0, shape[0].y, 0));\r\n path.push(new Vector3(Math.cos(i * step) * shape[0].x * radius, shape[0].y, Math.sin(i * step) * shape[0].x * radius));\r\n }\r\n for (p = 0; p < shape.length; p++) {\r\n rotated = new Vector3(Math.cos(i * step) * shape[p].x * radius, shape[p].y, Math.sin(i * step) * shape[p].x * radius);\r\n path.push(rotated);\r\n }\r\n if (cap == Mesh.CAP_END || cap == Mesh.CAP_ALL) {\r\n path.push(new Vector3(Math.cos(i * step) * shape[shape.length - 1].x * radius, shape[shape.length - 1].y, Math.sin(i * step) * shape[shape.length - 1].x * radius));\r\n path.push(new Vector3(0, shape[shape.length - 1].y, 0));\r\n }\r\n paths.push(path);\r\n }\r\n\r\n // lathe ribbon\r\n const lathe = CreateRibbon(\r\n name,\r\n { pathArray: paths, closeArray: closed, sideOrientation: sideOrientation, updatable: updatable, invertUV: invertUV, frontUVs: options.frontUVs, backUVs: options.backUVs },\r\n scene\r\n );\r\n return lathe;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function direction from the module\r\n */\r\nexport const LatheBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateLathe,\r\n};\r\n\r\nMesh.CreateLathe = (name: string, shape: Vector3[], radius: number, tessellation: number, scene: Scene, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n shape: shape,\r\n radius: radius,\r\n tessellation: tessellation,\r\n sideOrientation: sideOrientation,\r\n updatable: updatable,\r\n };\r\n\r\n return CreateLathe(name, options, scene);\r\n};\r\n"]}
@@ -62,18 +62,16 @@ export function CreateDashedLinesVertexData(options) {
62
62
  const indices = [];
63
63
  const curvect = Vector3.Zero();
64
64
  let lg = 0;
65
- let nb = 0;
66
- let shft = 0;
67
- let dashshft = 0;
68
- let curshft = 0;
65
+ let nb;
66
+ let curshft;
69
67
  let idx = 0;
70
- let i = 0;
68
+ let i;
71
69
  for (i = 0; i < points.length - 1; i++) {
72
70
  points[i + 1].subtractToRef(points[i], curvect);
73
71
  lg += curvect.length();
74
72
  }
75
- shft = lg / dashNb;
76
- dashshft = (dashSize * shft) / (dashSize + gapSize);
73
+ const shft = lg / dashNb;
74
+ const dashshft = (dashSize * shft) / (dashSize + gapSize);
77
75
  for (i = 0; i < points.length - 1; i++) {
78
76
  points[i + 1].subtractToRef(points[i], curvect);
79
77
  nb = Math.floor(curvect.length() / shft);
@@ -232,21 +230,19 @@ export function CreateDashedLines(name, options, scene = null) {
232
230
  const curvect = Vector3.Zero();
233
231
  const nbSeg = positions.length / 6;
234
232
  let lg = 0;
235
- let nb = 0;
236
- let shft = 0;
237
- let dashshft = 0;
238
- let curshft = 0;
233
+ let nb;
234
+ let curshft;
239
235
  let p = 0;
240
- let i = 0;
241
- let j = 0;
236
+ let i;
237
+ let j;
242
238
  for (i = 0; i < points.length - 1; i++) {
243
239
  points[i + 1].subtractToRef(points[i], curvect);
244
240
  lg += curvect.length();
245
241
  }
246
- shft = lg / nbSeg;
242
+ const shft = lg / nbSeg;
247
243
  const dashSize = instance._creationDataStorage.dashSize;
248
244
  const gapSize = instance._creationDataStorage.gapSize;
249
- dashshft = (dashSize * shft) / (dashSize + gapSize);
245
+ const dashshft = (dashSize * shft) / (dashSize + gapSize);
250
246
  for (i = 0; i < points.length - 1; i++) {
251
247
  points[i + 1].subtractToRef(points[i], curvect);
252
248
  nb = Math.floor(curvect.length() / shft);
@@ -1 +1 @@
1
- {"version":3,"file":"linesBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/linesBuilder.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA8D;IACrG,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACjD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,MAAM,EAAE,CAAC;gBACT,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;YACD,GAAG,EAAE,CAAC;QACV,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,IAAI,MAAM,EAAE,CAAC;QACT,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC;IACrC,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAoF;IAC5H,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAChD,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;IACnB,QAAQ,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;IACpD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAChD,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxH,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/J,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3B,GAAG,IAAI,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IAED,SAAS;IACT,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC5B,IAAY,EACZ,OAQC,EACD,QAAyB,IAAI;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;YACvD,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACpD,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,eAAe;QACf,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAE,CAAC;QACvE,IAAI,WAAW,CAAC;QAChB,IAAI,UAAU,CAAC;QACf,IAAI,MAAM,EAAE,CAAC;YACT,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAE,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,IAAI,WAAW,EAAE,CAAC;oBACxB,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACvB,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrC,CAAC,IAAI,CAAC,CAAC;gBACX,CAAC;gBACD,CAAC,IAAI,CAAC,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACR,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;gBACD,GAAG,EAAE,CAAC;YACV,CAAC;QACL,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5D,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;QACD,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,MAAM,IAAI,WAAW,EAAE,CAAC;YACxB,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACnF,CAAC;QACD,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,uBAAuB;IACvB,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpI,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACvD,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CACvB,IAAY,EACZ,OAQC,EACD,QAAyB,IAAI;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,gBAAgB,CAC1B,IAAI,EACJ;QACI,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC7C,EACD,KAAK,CACR,CAAC;IACF,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAC7B,IAAY,EACZ,OAA8K,EAC9K,QAAyB,IAAI;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IAEvC,IAAI,QAAQ,EAAE,CAAC;QACX,uBAAuB;QACvB,MAAM,gBAAgB,GAAG,CAAC,SAAqB,EAAQ,EAAE;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChD,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3B,CAAC;YACD,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC;YAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAqB,CAAC,QAAQ,CAAC;YACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAqB,CAAC,OAAO,CAAC;YACvD,QAAQ,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChD,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;gBACzC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,CAAC,GAAG,CAAC,CAAC;gBACN,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;oBACpC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;oBACnB,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;oBACjD,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;oBACrD,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;oBACrD,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oBAClE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oBAClE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oBAClE,CAAC,IAAI,CAAC,CAAC;oBACP,CAAC,EAAE,CAAC;gBACR,CAAC;YACL,CAAC;YACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC1B,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC,IAAI,CAAC,CAAC;YACX,CAAC;QACL,CAAC,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtG,MAAM,CAAC,IAAI,CAAC,+HAA+H,CAAC,CAAC;QACjJ,CAAC;QACD,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,wBAAwB;IACxB,MAAM,WAAW,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChI,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACxD,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvD,WAAW,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC9D,WAAW,CAAC,oBAAoB,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACrD,WAAW,CAAC,oBAAoB,CAAC,OAAO,GAAG,OAAO,CAAC;IACnD,OAAO,WAAW,CAAC;AACvB,CAAC;AACD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;CACd,CAAC;AAEF,UAAU,CAAC,gBAAgB,GAAG,0BAA0B,CAAC;AACzD,UAAU,CAAC,iBAAiB,GAAG,2BAA2B,CAAC;AAE3D,IAAI,CAAC,WAAW,GAAG,CAAC,IAAY,EAAE,MAAiB,EAAE,QAAyB,IAAI,EAAE,YAAqB,KAAK,EAAE,WAAgC,IAAI,EAAa,EAAE;IAC/J,MAAM,OAAO,GAAG;QACZ,MAAM;QACN,SAAS;QACT,QAAQ;KACX,CAAC;IACF,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,IAAI,CAAC,iBAAiB,GAAG,CACrB,IAAY,EACZ,MAAiB,EACjB,QAAgB,EAChB,OAAe,EACf,MAAc,EACd,QAAyB,IAAI,EAC7B,SAAmB,EACnB,QAAoB,EACX,EAAE;IACX,MAAM,OAAO,GAAG;QACZ,MAAM;QACN,QAAQ;QACR,OAAO;QACP,MAAM;QACN,SAAS;QACT,QAAQ;KACX,CAAC;IACF,OAAO,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { _CreationDataStorage, Mesh } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { FloatArray, Nullable } from \"../../types\";\r\nimport { LinesMesh } from \"../../Meshes/linesMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\n\r\nimport type { Material } from \"../../Materials/material\";\r\n\r\n/**\r\n * Creates the VertexData of the LineSystem\r\n * @param options an object used to set the following optional parameters for the LineSystem, required but can be empty\r\n * - lines an array of lines, each line being an array of successive Vector3\r\n * - colors an array of line colors, each of the line colors being an array of successive Color4, one per line point\r\n * @returns the VertexData of the LineSystem\r\n */\r\nexport function CreateLineSystemVertexData(options: { lines: Vector3[][]; colors?: Nullable<Color4[][]> }): VertexData {\r\n const indices = [];\r\n const positions = [];\r\n const lines = options.lines;\r\n const colors = options.colors;\r\n const vertexColors = [];\r\n let idx = 0;\r\n\r\n for (let l = 0; l < lines.length; l++) {\r\n const points = lines[l];\r\n for (let index = 0; index < points.length; index++) {\r\n const { x, y, z } = points[index];\r\n positions.push(x, y, z);\r\n if (colors) {\r\n const color = colors[l];\r\n const { r, g, b, a } = color[index];\r\n vertexColors.push(r, g, b, a);\r\n }\r\n if (index > 0) {\r\n indices.push(idx - 1);\r\n indices.push(idx);\r\n }\r\n idx++;\r\n }\r\n }\r\n const vertexData = new VertexData();\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n if (colors) {\r\n vertexData.colors = vertexColors;\r\n }\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Create the VertexData for a DashedLines\r\n * @param options an object used to set the following optional parameters for the DashedLines, required but can be empty\r\n * - points an array successive Vector3\r\n * - dashSize the size of the dashes relative to the dash number, optional, default 3\r\n * - gapSize the size of the gap between two successive dashes relative to the dash number, optional, default 1\r\n * - dashNb the intended total number of dashes, optional, default 200\r\n * @returns the VertexData for the DashedLines\r\n */\r\nexport function CreateDashedLinesVertexData(options: { points: Vector3[]; dashSize?: number; gapSize?: number; dashNb?: number }): VertexData {\r\n const dashSize = options.dashSize || 3;\r\n const gapSize = options.gapSize || 1;\r\n const dashNb = options.dashNb || 200;\r\n const points = options.points;\r\n\r\n const positions: number[] = [];\r\n const indices: number[] = [];\r\n\r\n const curvect = Vector3.Zero();\r\n let lg = 0;\r\n let nb = 0;\r\n let shft = 0;\r\n let dashshft = 0;\r\n let curshft = 0;\r\n let idx = 0;\r\n let i = 0;\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n lg += curvect.length();\r\n }\r\n shft = lg / dashNb;\r\n dashshft = (dashSize * shft) / (dashSize + gapSize);\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n nb = Math.floor(curvect.length() / shft);\r\n curvect.normalize();\r\n for (let j = 0; j < nb; j++) {\r\n curshft = shft * j;\r\n positions.push(points[i].x + curshft * curvect.x, points[i].y + curshft * curvect.y, points[i].z + curshft * curvect.z);\r\n positions.push(points[i].x + (curshft + dashshft) * curvect.x, points[i].y + (curshft + dashshft) * curvect.y, points[i].z + (curshft + dashshft) * curvect.z);\r\n indices.push(idx, idx + 1);\r\n idx += 2;\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n vertexData.positions = positions;\r\n vertexData.indices = indices;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a line system mesh. A line system is a pool of many lines gathered in a single mesh\r\n * * A line system mesh is considered as a parametric shape since it has no predefined original shape. Its shape is determined by the passed array of lines as an input parameter\r\n * * Like every other parametric shape, it is dynamically updatable by passing an existing instance of LineSystem to this static function\r\n * * The parameter `lines` is an array of lines, each line being an array of successive Vector3\r\n * * The optional parameter `instance` is an instance of an existing LineSystem object to be updated with the passed `lines` parameter\r\n * * The optional parameter `colors` is an array of line colors, each line colors being an array of successive Color4, one per line point\r\n * * The optional parameter `useVertexAlpha` is to be set to `false` (default `true`) when you don't need the alpha blending (faster)\r\n * * The optional parameter `material` is the material to use to draw the lines if provided. If not, a default material will be created\r\n * * Updating a simple Line mesh, you just need to update every line in the `lines` array : https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#lines-and-dashedlines\r\n * * When updating an instance, remember that only line point positions can change, not the number of points, neither the number of lines\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#line-system\r\n * @param name defines the name of the new line system\r\n * @param options defines the options used to create the line system\r\n * @param scene defines the hosting scene\r\n * @returns a new line system mesh\r\n */\r\nexport function CreateLineSystem(\r\n name: string,\r\n options: {\r\n lines: Vector3[][];\r\n updatable?: boolean;\r\n instance?: Nullable<LinesMesh>;\r\n colors?: Nullable<Color4[][]>;\r\n useVertexAlpha?: boolean;\r\n material?: Material;\r\n updateVertexData?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): LinesMesh {\r\n const instance = options.instance;\r\n const lines = options.lines;\r\n const colors = options.colors;\r\n\r\n if (instance) {\r\n if (options.updateVertexData) {\r\n const vertexData = CreateLineSystemVertexData(options);\r\n vertexData.applyToMesh(instance, options.updatable);\r\n instance.refreshBoundingInfo();\r\n return instance;\r\n }\r\n\r\n // lines update\r\n const indices: number[] = [];\r\n const positions = instance.getVerticesData(VertexBuffer.PositionKind)!;\r\n let vertexColor;\r\n let lineColors;\r\n if (colors) {\r\n vertexColor = instance.getVerticesData(VertexBuffer.ColorKind)!;\r\n }\r\n let i = 0;\r\n let c = 0;\r\n let idx = 0;\r\n for (let l = 0; l < lines.length; l++) {\r\n const points = lines[l];\r\n for (let p = 0; p < points.length; p++) {\r\n positions[i] = points[p].x;\r\n positions[i + 1] = points[p].y;\r\n positions[i + 2] = points[p].z;\r\n if (colors && vertexColor) {\r\n lineColors = colors[l];\r\n vertexColor[c] = lineColors[p].r;\r\n vertexColor[c + 1] = lineColors[p].g;\r\n vertexColor[c + 2] = lineColors[p].b;\r\n vertexColor[c + 3] = lineColors[p].a;\r\n c += 4;\r\n }\r\n i += 3;\r\n if (p > 0) {\r\n indices.push(idx - 1);\r\n indices.push(idx);\r\n }\r\n idx++;\r\n }\r\n }\r\n const originIndices = instance.getIndices();\r\n if (!originIndices || originIndices.length !== indices.length) {\r\n instance.setIndices(indices, null, options.updatable);\r\n }\r\n instance.updateVerticesData(VertexBuffer.PositionKind, positions, false, false);\r\n if (colors && vertexColor) {\r\n instance.updateVerticesData(VertexBuffer.ColorKind, vertexColor, false, false);\r\n }\r\n instance.refreshBoundingInfo();\r\n return instance;\r\n }\r\n\r\n // line system creation\r\n const useVertexColor = colors ? true : false;\r\n const lineSystem = new LinesMesh(name, scene, null, undefined, undefined, useVertexColor, options.useVertexAlpha, options.material);\r\n const vertexData = CreateLineSystemVertexData(options);\r\n vertexData.applyToMesh(lineSystem, options.updatable);\r\n return lineSystem;\r\n}\r\n\r\n/**\r\n * Creates a line mesh\r\n * A line mesh is considered as a parametric shape since it has no predefined original shape. Its shape is determined by the passed array of points as an input parameter\r\n * * Like every other parametric shape, it is dynamically updatable by passing an existing instance of LineMesh to this static function\r\n * * The parameter `points` is an array successive Vector3\r\n * * The optional parameter `instance` is an instance of an existing LineMesh object to be updated with the passed `points` parameter : https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#lines-and-dashedlines\r\n * * The optional parameter `colors` is an array of successive Color4, one per line point\r\n * * The optional parameter `useVertexAlpha` is to be set to `false` (default `true`) when you don't need alpha blending (faster)\r\n * * The optional parameter `material` is the material to use to draw the lines if provided. If not, a default material will be created\r\n * * When updating an instance, remember that only point positions can change, not the number of points\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#lines\r\n * @param name defines the name of the new line system\r\n * @param options defines the options used to create the line system\r\n * @param scene defines the hosting scene\r\n * @returns a new line mesh\r\n */\r\nexport function CreateLines(\r\n name: string,\r\n options: {\r\n points: Vector3[];\r\n updatable?: boolean;\r\n instance?: Nullable<LinesMesh>;\r\n colors?: Color4[];\r\n useVertexAlpha?: boolean;\r\n material?: Material;\r\n updateVertexData?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): LinesMesh {\r\n const colors = options.colors ? [options.colors] : null;\r\n const lines = CreateLineSystem(\r\n name,\r\n {\r\n lines: [options.points],\r\n updatable: options.updatable,\r\n instance: options.instance,\r\n colors: colors,\r\n useVertexAlpha: options.useVertexAlpha,\r\n material: options.material,\r\n updateVertexData: options.updateVertexData,\r\n },\r\n scene\r\n );\r\n return lines;\r\n}\r\n\r\n/**\r\n * Creates a dashed line mesh\r\n * * A dashed line mesh is considered as a parametric shape since it has no predefined original shape. Its shape is determined by the passed array of points as an input parameter\r\n * * Like every other parametric shape, it is dynamically updatable by passing an existing instance of LineMesh to this static function\r\n * * The parameter `points` is an array successive Vector3\r\n * * The parameter `dashNb` is the intended total number of dashes (positive integer, default 200)\r\n * * The parameter `dashSize` is the size of the dashes relatively the dash number (positive float, default 3)\r\n * * The parameter `gapSize` is the size of the gap between two successive dashes relatively the dash number (positive float, default 1)\r\n * * The optional parameter `instance` is an instance of an existing LineMesh object to be updated with the passed `points` parameter : https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#lines-and-dashedlines\r\n * * The optional parameter `useVertexAlpha` is to be set to `false` (default `true`) when you don't need the alpha blending (faster)\r\n * * The optional parameter `material` is the material to use to draw the lines if provided. If not, a default material will be created\r\n * * When updating an instance, remember that only point positions can change, not the number of points\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the dashed line mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#dashed-lines\r\n */\r\nexport function CreateDashedLines(\r\n name: string,\r\n options: { points: Vector3[]; dashSize?: number; gapSize?: number; dashNb?: number; updatable?: boolean; instance?: LinesMesh; useVertexAlpha?: boolean; material?: Material },\r\n scene: Nullable<Scene> = null\r\n): LinesMesh {\r\n const points = options.points;\r\n const instance = options.instance;\r\n const gapSize = options.gapSize || 1;\r\n const dashSize = options.dashSize || 3;\r\n\r\n if (instance) {\r\n // dashed lines update\r\n const positionFunction = (positions: FloatArray): void => {\r\n const curvect = Vector3.Zero();\r\n const nbSeg = positions.length / 6;\r\n let lg = 0;\r\n let nb = 0;\r\n let shft = 0;\r\n let dashshft = 0;\r\n let curshft = 0;\r\n let p = 0;\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n lg += curvect.length();\r\n }\r\n shft = lg / nbSeg;\r\n const dashSize = instance._creationDataStorage!.dashSize;\r\n const gapSize = instance._creationDataStorage!.gapSize;\r\n dashshft = (dashSize * shft) / (dashSize + gapSize);\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n nb = Math.floor(curvect.length() / shft);\r\n curvect.normalize();\r\n j = 0;\r\n while (j < nb && p < positions.length) {\r\n curshft = shft * j;\r\n positions[p] = points[i].x + curshft * curvect.x;\r\n positions[p + 1] = points[i].y + curshft * curvect.y;\r\n positions[p + 2] = points[i].z + curshft * curvect.z;\r\n positions[p + 3] = points[i].x + (curshft + dashshft) * curvect.x;\r\n positions[p + 4] = points[i].y + (curshft + dashshft) * curvect.y;\r\n positions[p + 5] = points[i].z + (curshft + dashshft) * curvect.z;\r\n p += 6;\r\n j++;\r\n }\r\n }\r\n while (p < positions.length) {\r\n positions[p] = points[i].x;\r\n positions[p + 1] = points[i].y;\r\n positions[p + 2] = points[i].z;\r\n p += 3;\r\n }\r\n };\r\n if (options.dashNb || options.dashSize || options.gapSize || options.useVertexAlpha || options.material) {\r\n Logger.Warn(\"You have used an option other than points with the instance option. Please be aware that these other options will be ignored.\");\r\n }\r\n instance.updateMeshPositions(positionFunction, false);\r\n return instance;\r\n }\r\n // dashed lines creation\r\n const dashedLines = new LinesMesh(name, scene, null, undefined, undefined, undefined, options.useVertexAlpha, options.material);\r\n const vertexData = CreateDashedLinesVertexData(options);\r\n vertexData.applyToMesh(dashedLines, options.updatable);\r\n\r\n dashedLines._creationDataStorage = new _CreationDataStorage();\r\n dashedLines._creationDataStorage.dashSize = dashSize;\r\n dashedLines._creationDataStorage.gapSize = gapSize;\r\n return dashedLines;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the functions directly from the module\r\n */\r\nexport const LinesBuilder = {\r\n CreateDashedLines,\r\n CreateLineSystem,\r\n CreateLines,\r\n};\r\n\r\nVertexData.CreateLineSystem = CreateLineSystemVertexData;\r\nVertexData.CreateDashedLines = CreateDashedLinesVertexData;\r\n\r\nMesh.CreateLines = (name: string, points: Vector3[], scene: Nullable<Scene> = null, updatable: boolean = false, instance: Nullable<LinesMesh> = null): LinesMesh => {\r\n const options = {\r\n points,\r\n updatable,\r\n instance,\r\n };\r\n return CreateLines(name, options, scene);\r\n};\r\n\r\nMesh.CreateDashedLines = (\r\n name: string,\r\n points: Vector3[],\r\n dashSize: number,\r\n gapSize: number,\r\n dashNb: number,\r\n scene: Nullable<Scene> = null,\r\n updatable?: boolean,\r\n instance?: LinesMesh\r\n): LinesMesh => {\r\n const options = {\r\n points,\r\n dashSize,\r\n gapSize,\r\n dashNb,\r\n updatable,\r\n instance,\r\n };\r\n return CreateDashedLines(name, options, scene);\r\n};\r\n"]}
1
+ {"version":3,"file":"linesBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/linesBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { _CreationDataStorage, Mesh } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { FloatArray, Nullable } from \"../../types\";\r\nimport { LinesMesh } from \"../../Meshes/linesMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\n\r\nimport type { Material } from \"../../Materials/material\";\r\n\r\n/**\r\n * Creates the VertexData of the LineSystem\r\n * @param options an object used to set the following optional parameters for the LineSystem, required but can be empty\r\n * - lines an array of lines, each line being an array of successive Vector3\r\n * - colors an array of line colors, each of the line colors being an array of successive Color4, one per line point\r\n * @returns the VertexData of the LineSystem\r\n */\r\nexport function CreateLineSystemVertexData(options: { lines: Vector3[][]; colors?: Nullable<Color4[][]> }): VertexData {\r\n const indices = [];\r\n const positions = [];\r\n const lines = options.lines;\r\n const colors = options.colors;\r\n const vertexColors = [];\r\n let idx = 0;\r\n\r\n for (let l = 0; l < lines.length; l++) {\r\n const points = lines[l];\r\n for (let index = 0; index < points.length; index++) {\r\n const { x, y, z } = points[index];\r\n positions.push(x, y, z);\r\n if (colors) {\r\n const color = colors[l];\r\n const { r, g, b, a } = color[index];\r\n vertexColors.push(r, g, b, a);\r\n }\r\n if (index > 0) {\r\n indices.push(idx - 1);\r\n indices.push(idx);\r\n }\r\n idx++;\r\n }\r\n }\r\n const vertexData = new VertexData();\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n if (colors) {\r\n vertexData.colors = vertexColors;\r\n }\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Create the VertexData for a DashedLines\r\n * @param options an object used to set the following optional parameters for the DashedLines, required but can be empty\r\n * - points an array successive Vector3\r\n * - dashSize the size of the dashes relative to the dash number, optional, default 3\r\n * - gapSize the size of the gap between two successive dashes relative to the dash number, optional, default 1\r\n * - dashNb the intended total number of dashes, optional, default 200\r\n * @returns the VertexData for the DashedLines\r\n */\r\nexport function CreateDashedLinesVertexData(options: { points: Vector3[]; dashSize?: number; gapSize?: number; dashNb?: number }): VertexData {\r\n const dashSize = options.dashSize || 3;\r\n const gapSize = options.gapSize || 1;\r\n const dashNb = options.dashNb || 200;\r\n const points = options.points;\r\n\r\n const positions: number[] = [];\r\n const indices: number[] = [];\r\n\r\n const curvect = Vector3.Zero();\r\n let lg = 0;\r\n let nb: number;\r\n let curshft: number;\r\n let idx = 0;\r\n let i: number;\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n lg += curvect.length();\r\n }\r\n const shft = lg / dashNb;\r\n const dashshft = (dashSize * shft) / (dashSize + gapSize);\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n nb = Math.floor(curvect.length() / shft);\r\n curvect.normalize();\r\n for (let j = 0; j < nb; j++) {\r\n curshft = shft * j;\r\n positions.push(points[i].x + curshft * curvect.x, points[i].y + curshft * curvect.y, points[i].z + curshft * curvect.z);\r\n positions.push(points[i].x + (curshft + dashshft) * curvect.x, points[i].y + (curshft + dashshft) * curvect.y, points[i].z + (curshft + dashshft) * curvect.z);\r\n indices.push(idx, idx + 1);\r\n idx += 2;\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n vertexData.positions = positions;\r\n vertexData.indices = indices;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a line system mesh. A line system is a pool of many lines gathered in a single mesh\r\n * * A line system mesh is considered as a parametric shape since it has no predefined original shape. Its shape is determined by the passed array of lines as an input parameter\r\n * * Like every other parametric shape, it is dynamically updatable by passing an existing instance of LineSystem to this static function\r\n * * The parameter `lines` is an array of lines, each line being an array of successive Vector3\r\n * * The optional parameter `instance` is an instance of an existing LineSystem object to be updated with the passed `lines` parameter\r\n * * The optional parameter `colors` is an array of line colors, each line colors being an array of successive Color4, one per line point\r\n * * The optional parameter `useVertexAlpha` is to be set to `false` (default `true`) when you don't need the alpha blending (faster)\r\n * * The optional parameter `material` is the material to use to draw the lines if provided. If not, a default material will be created\r\n * * Updating a simple Line mesh, you just need to update every line in the `lines` array : https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#lines-and-dashedlines\r\n * * When updating an instance, remember that only line point positions can change, not the number of points, neither the number of lines\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#line-system\r\n * @param name defines the name of the new line system\r\n * @param options defines the options used to create the line system\r\n * @param scene defines the hosting scene\r\n * @returns a new line system mesh\r\n */\r\nexport function CreateLineSystem(\r\n name: string,\r\n options: {\r\n lines: Vector3[][];\r\n updatable?: boolean;\r\n instance?: Nullable<LinesMesh>;\r\n colors?: Nullable<Color4[][]>;\r\n useVertexAlpha?: boolean;\r\n material?: Material;\r\n updateVertexData?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): LinesMesh {\r\n const instance = options.instance;\r\n const lines = options.lines;\r\n const colors = options.colors;\r\n\r\n if (instance) {\r\n if (options.updateVertexData) {\r\n const vertexData = CreateLineSystemVertexData(options);\r\n vertexData.applyToMesh(instance, options.updatable);\r\n instance.refreshBoundingInfo();\r\n return instance;\r\n }\r\n\r\n // lines update\r\n const indices: number[] = [];\r\n const positions = instance.getVerticesData(VertexBuffer.PositionKind)!;\r\n let vertexColor;\r\n let lineColors;\r\n if (colors) {\r\n vertexColor = instance.getVerticesData(VertexBuffer.ColorKind)!;\r\n }\r\n let i = 0;\r\n let c = 0;\r\n let idx = 0;\r\n for (let l = 0; l < lines.length; l++) {\r\n const points = lines[l];\r\n for (let p = 0; p < points.length; p++) {\r\n positions[i] = points[p].x;\r\n positions[i + 1] = points[p].y;\r\n positions[i + 2] = points[p].z;\r\n if (colors && vertexColor) {\r\n lineColors = colors[l];\r\n vertexColor[c] = lineColors[p].r;\r\n vertexColor[c + 1] = lineColors[p].g;\r\n vertexColor[c + 2] = lineColors[p].b;\r\n vertexColor[c + 3] = lineColors[p].a;\r\n c += 4;\r\n }\r\n i += 3;\r\n if (p > 0) {\r\n indices.push(idx - 1);\r\n indices.push(idx);\r\n }\r\n idx++;\r\n }\r\n }\r\n const originIndices = instance.getIndices();\r\n if (!originIndices || originIndices.length !== indices.length) {\r\n instance.setIndices(indices, null, options.updatable);\r\n }\r\n instance.updateVerticesData(VertexBuffer.PositionKind, positions, false, false);\r\n if (colors && vertexColor) {\r\n instance.updateVerticesData(VertexBuffer.ColorKind, vertexColor, false, false);\r\n }\r\n instance.refreshBoundingInfo();\r\n return instance;\r\n }\r\n\r\n // line system creation\r\n const useVertexColor = colors ? true : false;\r\n const lineSystem = new LinesMesh(name, scene, null, undefined, undefined, useVertexColor, options.useVertexAlpha, options.material);\r\n const vertexData = CreateLineSystemVertexData(options);\r\n vertexData.applyToMesh(lineSystem, options.updatable);\r\n return lineSystem;\r\n}\r\n\r\n/**\r\n * Creates a line mesh\r\n * A line mesh is considered as a parametric shape since it has no predefined original shape. Its shape is determined by the passed array of points as an input parameter\r\n * * Like every other parametric shape, it is dynamically updatable by passing an existing instance of LineMesh to this static function\r\n * * The parameter `points` is an array successive Vector3\r\n * * The optional parameter `instance` is an instance of an existing LineMesh object to be updated with the passed `points` parameter : https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#lines-and-dashedlines\r\n * * The optional parameter `colors` is an array of successive Color4, one per line point\r\n * * The optional parameter `useVertexAlpha` is to be set to `false` (default `true`) when you don't need alpha blending (faster)\r\n * * The optional parameter `material` is the material to use to draw the lines if provided. If not, a default material will be created\r\n * * When updating an instance, remember that only point positions can change, not the number of points\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#lines\r\n * @param name defines the name of the new line system\r\n * @param options defines the options used to create the line system\r\n * @param scene defines the hosting scene\r\n * @returns a new line mesh\r\n */\r\nexport function CreateLines(\r\n name: string,\r\n options: {\r\n points: Vector3[];\r\n updatable?: boolean;\r\n instance?: Nullable<LinesMesh>;\r\n colors?: Color4[];\r\n useVertexAlpha?: boolean;\r\n material?: Material;\r\n updateVertexData?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): LinesMesh {\r\n const colors = options.colors ? [options.colors] : null;\r\n const lines = CreateLineSystem(\r\n name,\r\n {\r\n lines: [options.points],\r\n updatable: options.updatable,\r\n instance: options.instance,\r\n colors: colors,\r\n useVertexAlpha: options.useVertexAlpha,\r\n material: options.material,\r\n updateVertexData: options.updateVertexData,\r\n },\r\n scene\r\n );\r\n return lines;\r\n}\r\n\r\n/**\r\n * Creates a dashed line mesh\r\n * * A dashed line mesh is considered as a parametric shape since it has no predefined original shape. Its shape is determined by the passed array of points as an input parameter\r\n * * Like every other parametric shape, it is dynamically updatable by passing an existing instance of LineMesh to this static function\r\n * * The parameter `points` is an array successive Vector3\r\n * * The parameter `dashNb` is the intended total number of dashes (positive integer, default 200)\r\n * * The parameter `dashSize` is the size of the dashes relatively the dash number (positive float, default 3)\r\n * * The parameter `gapSize` is the size of the gap between two successive dashes relatively the dash number (positive float, default 1)\r\n * * The optional parameter `instance` is an instance of an existing LineMesh object to be updated with the passed `points` parameter : https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#lines-and-dashedlines\r\n * * The optional parameter `useVertexAlpha` is to be set to `false` (default `true`) when you don't need the alpha blending (faster)\r\n * * The optional parameter `material` is the material to use to draw the lines if provided. If not, a default material will be created\r\n * * When updating an instance, remember that only point positions can change, not the number of points\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param scene defines the hosting scene\r\n * @returns the dashed line mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#dashed-lines\r\n */\r\nexport function CreateDashedLines(\r\n name: string,\r\n options: { points: Vector3[]; dashSize?: number; gapSize?: number; dashNb?: number; updatable?: boolean; instance?: LinesMesh; useVertexAlpha?: boolean; material?: Material },\r\n scene: Nullable<Scene> = null\r\n): LinesMesh {\r\n const points = options.points;\r\n const instance = options.instance;\r\n const gapSize = options.gapSize || 1;\r\n const dashSize = options.dashSize || 3;\r\n\r\n if (instance) {\r\n // dashed lines update\r\n const positionFunction = (positions: FloatArray): void => {\r\n const curvect = Vector3.Zero();\r\n const nbSeg = positions.length / 6;\r\n let lg = 0;\r\n let nb: number;\r\n let curshft: number;\r\n let p = 0;\r\n let i: number;\r\n let j: number;\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n lg += curvect.length();\r\n }\r\n const shft = lg / nbSeg;\r\n const dashSize = instance._creationDataStorage!.dashSize;\r\n const gapSize = instance._creationDataStorage!.gapSize;\r\n const dashshft = (dashSize * shft) / (dashSize + gapSize);\r\n for (i = 0; i < points.length - 1; i++) {\r\n points[i + 1].subtractToRef(points[i], curvect);\r\n nb = Math.floor(curvect.length() / shft);\r\n curvect.normalize();\r\n j = 0;\r\n while (j < nb && p < positions.length) {\r\n curshft = shft * j;\r\n positions[p] = points[i].x + curshft * curvect.x;\r\n positions[p + 1] = points[i].y + curshft * curvect.y;\r\n positions[p + 2] = points[i].z + curshft * curvect.z;\r\n positions[p + 3] = points[i].x + (curshft + dashshft) * curvect.x;\r\n positions[p + 4] = points[i].y + (curshft + dashshft) * curvect.y;\r\n positions[p + 5] = points[i].z + (curshft + dashshft) * curvect.z;\r\n p += 6;\r\n j++;\r\n }\r\n }\r\n while (p < positions.length) {\r\n positions[p] = points[i].x;\r\n positions[p + 1] = points[i].y;\r\n positions[p + 2] = points[i].z;\r\n p += 3;\r\n }\r\n };\r\n if (options.dashNb || options.dashSize || options.gapSize || options.useVertexAlpha || options.material) {\r\n Logger.Warn(\"You have used an option other than points with the instance option. Please be aware that these other options will be ignored.\");\r\n }\r\n instance.updateMeshPositions(positionFunction, false);\r\n return instance;\r\n }\r\n // dashed lines creation\r\n const dashedLines = new LinesMesh(name, scene, null, undefined, undefined, undefined, options.useVertexAlpha, options.material);\r\n const vertexData = CreateDashedLinesVertexData(options);\r\n vertexData.applyToMesh(dashedLines, options.updatable);\r\n\r\n dashedLines._creationDataStorage = new _CreationDataStorage();\r\n dashedLines._creationDataStorage.dashSize = dashSize;\r\n dashedLines._creationDataStorage.gapSize = gapSize;\r\n return dashedLines;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the functions directly from the module\r\n */\r\nexport const LinesBuilder = {\r\n CreateDashedLines,\r\n CreateLineSystem,\r\n CreateLines,\r\n};\r\n\r\nVertexData.CreateLineSystem = CreateLineSystemVertexData;\r\nVertexData.CreateDashedLines = CreateDashedLinesVertexData;\r\n\r\nMesh.CreateLines = (name: string, points: Vector3[], scene: Nullable<Scene> = null, updatable: boolean = false, instance: Nullable<LinesMesh> = null): LinesMesh => {\r\n const options = {\r\n points,\r\n updatable,\r\n instance,\r\n };\r\n return CreateLines(name, options, scene);\r\n};\r\n\r\nMesh.CreateDashedLines = (\r\n name: string,\r\n points: Vector3[],\r\n dashSize: number,\r\n gapSize: number,\r\n dashNb: number,\r\n scene: Nullable<Scene> = null,\r\n updatable?: boolean,\r\n instance?: LinesMesh\r\n): LinesMesh => {\r\n const options = {\r\n points,\r\n dashSize,\r\n gapSize,\r\n dashNb,\r\n updatable,\r\n instance,\r\n };\r\n return CreateDashedLines(name, options, scene);\r\n};\r\n"]}
@@ -37,10 +37,10 @@ export function CreatePolygonVertexData(polygon, sideOrientation, fUV, fColors,
37
37
  const uvs = polygon.getVerticesData(VertexBuffer.UVKind);
38
38
  const indices = polygon.getIndices();
39
39
  const startIndex = positions.length / 9;
40
- let disp = 0;
41
- let distX = 0;
42
- let distZ = 0;
43
- let dist = 0;
40
+ let disp;
41
+ let distX;
42
+ let distZ;
43
+ let dist;
44
44
  let totalLen = 0;
45
45
  const cumulate = [0];
46
46
  if (wrap) {
@@ -53,7 +53,7 @@ export function CreatePolygonVertexData(polygon, sideOrientation, fUV, fColors,
53
53
  }
54
54
  }
55
55
  // set face colours and textures
56
- let idx = 0;
56
+ let idx;
57
57
  let face = 0;
58
58
  for (let index = 0; index < normals.length; index += 3) {
59
59
  //Edge Face no. 1
@@ -140,7 +140,7 @@ export function CreatePolygon(name, options, scene = null, earcutInjection = ear
140
140
  const depth = options.depth || 0;
141
141
  const smoothingThreshold = options.smoothingThreshold || 2;
142
142
  const contours = [];
143
- let hole = [];
143
+ let hole;
144
144
  for (let i = 0; i < shape.length; i++) {
145
145
  contours[i] = new Vector2(shape[i].x, shape[i].z);
146
146
  }