@xeokit/xeokit-sdk 2.5.2-beta-10 → 2.5.2-beta-11

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 (450) hide show
  1. package/package.json +1 -1
  2. package/src/src/extras/ContextMenu/ContextMenu.js +907 -0
  3. package/src/src/extras/ContextMenu/index.js +1 -0
  4. package/src/src/extras/MarqueePicker/MarqueePicker.js +352 -0
  5. package/src/src/extras/MarqueePicker/MarqueePickerMouseControl.js +174 -0
  6. package/src/src/extras/MarqueePicker/index.js +2 -0
  7. package/src/src/extras/PointerLens/PointerLens.js +312 -0
  8. package/src/src/extras/PointerLens/index.js +1 -0
  9. package/src/src/extras/collision/ObjectsKdTree3.js +149 -0
  10. package/src/src/extras/collision/index.js +1 -0
  11. package/src/src/extras/index.js +4 -0
  12. package/src/src/index.js +3 -0
  13. package/src/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +731 -0
  14. package/src/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsControl.js +84 -0
  15. package/src/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsMouseControl.js +435 -0
  16. package/src/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsPlugin.js +406 -0
  17. package/src/src/plugins/AngleMeasurementsPlugin/index.js +3 -0
  18. package/src/src/plugins/AnnotationsPlugin/Annotation.js +368 -0
  19. package/src/src/plugins/AnnotationsPlugin/AnnotationsPlugin.js +583 -0
  20. package/src/src/plugins/AnnotationsPlugin/index.js +1 -0
  21. package/src/src/plugins/AxisGizmoPlugin/AxisGizmoPlugin.js +333 -0
  22. package/src/src/plugins/AxisGizmoPlugin/index.js +1 -0
  23. package/src/src/plugins/BCFViewpointsPlugin/BCFViewpointsPlugin.js +977 -0
  24. package/src/src/plugins/BCFViewpointsPlugin/index.js +1 -0
  25. package/src/src/plugins/CityJSONLoaderPlugin/CityJSONDefaultDataSource.js +29 -0
  26. package/src/src/plugins/CityJSONLoaderPlugin/CityJSONLoaderPlugin.js +751 -0
  27. package/src/src/plugins/CityJSONLoaderPlugin/index.js +1 -0
  28. package/src/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +963 -0
  29. package/src/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsControl.js +84 -0
  30. package/src/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsMouseControl.js +399 -0
  31. package/src/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsPlugin.js +505 -0
  32. package/src/src/plugins/DistanceMeasurementsPlugin/index.js +3 -0
  33. package/src/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesControl.js +639 -0
  34. package/src/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesPlugin.js +436 -0
  35. package/src/src/plugins/FaceAlignedSectionPlanesPlugin/Overview.js +247 -0
  36. package/src/src/plugins/FaceAlignedSectionPlanesPlugin/Plane.js +167 -0
  37. package/src/src/plugins/FaceAlignedSectionPlanesPlugin/index.js +1 -0
  38. package/src/src/plugins/FastNavPlugin/FastNavPlugin.js +429 -0
  39. package/src/src/plugins/FastNavPlugin/index.js +1 -0
  40. package/src/src/plugins/GLTFLoaderPlugin/GLTFDefaultDataSource.js +140 -0
  41. package/src/src/plugins/GLTFLoaderPlugin/GLTFLoaderPlugin.js +421 -0
  42. package/src/src/plugins/GLTFLoaderPlugin/GLTFSceneModelLoader.js +669 -0
  43. package/src/src/plugins/GLTFLoaderPlugin/index.js +2 -0
  44. package/src/src/plugins/LASLoaderPlugin/LASDefaultDataSource.js +58 -0
  45. package/src/src/plugins/LASLoaderPlugin/LASLoaderPlugin.js +563 -0
  46. package/src/src/plugins/LASLoaderPlugin/index.js +1 -0
  47. package/src/src/plugins/LASLoaderPlugin/loadLASHeader.js +183 -0
  48. package/src/src/plugins/NavCubePlugin/CubeTextureCanvas.js +290 -0
  49. package/src/src/plugins/NavCubePlugin/NavCubePlugin.js +753 -0
  50. package/src/src/plugins/NavCubePlugin/index.js +1 -0
  51. package/src/src/plugins/OBJLoaderPlugin/OBJLoaderPlugin.js +145 -0
  52. package/src/src/plugins/OBJLoaderPlugin/OBJSceneGraphLoader.js +777 -0
  53. package/src/src/plugins/OBJLoaderPlugin/index.js +1 -0
  54. package/src/src/plugins/STLLoaderPlugin/STLDefaultDataSource.js +33 -0
  55. package/src/src/plugins/STLLoaderPlugin/STLLoaderPlugin.js +274 -0
  56. package/src/src/plugins/STLLoaderPlugin/STLSceneGraphLoader.js +313 -0
  57. package/src/src/plugins/STLLoaderPlugin/index.js +2 -0
  58. package/src/src/plugins/SectionPlanesPlugin/Control.js +1328 -0
  59. package/src/src/plugins/SectionPlanesPlugin/Overview.js +249 -0
  60. package/src/src/plugins/SectionPlanesPlugin/Plane.js +169 -0
  61. package/src/src/plugins/SectionPlanesPlugin/SectionPlanesPlugin.js +404 -0
  62. package/src/src/plugins/SectionPlanesPlugin/index.js +1 -0
  63. package/src/src/plugins/SkyboxesPlugin/SkyboxesPlugin.js +134 -0
  64. package/src/src/plugins/SkyboxesPlugin/index.js +1 -0
  65. package/src/src/plugins/StoreyViewsPlugin/Storey.js +84 -0
  66. package/src/src/plugins/StoreyViewsPlugin/StoreyMap.js +57 -0
  67. package/src/src/plugins/StoreyViewsPlugin/StoreyViewsPlugin.js +773 -0
  68. package/src/src/plugins/StoreyViewsPlugin/index.js +1 -0
  69. package/src/src/plugins/TreeViewPlugin/RenderService.js +169 -0
  70. package/src/src/plugins/TreeViewPlugin/TreeViewNode.js +101 -0
  71. package/src/src/plugins/TreeViewPlugin/TreeViewPlugin.js +1370 -0
  72. package/src/src/plugins/TreeViewPlugin/index.js +1 -0
  73. package/src/src/plugins/ViewCullPlugin/ViewCullPlugin.js +295 -0
  74. package/src/src/plugins/ViewCullPlugin/index.js +1 -0
  75. package/src/src/plugins/WebIFCLoaderPlugin/WebIFCDefaultDataSource.js +58 -0
  76. package/src/src/plugins/WebIFCLoaderPlugin/WebIFCLoaderPlugin.js +942 -0
  77. package/src/src/plugins/WebIFCLoaderPlugin/index.js +1 -0
  78. package/src/src/plugins/XKTLoaderPlugin/XKTDefaultDataSource.js +95 -0
  79. package/src/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js +1194 -0
  80. package/src/src/plugins/XKTLoaderPlugin/index.js +2 -0
  81. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV1.js +169 -0
  82. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV10.js +660 -0
  83. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV11.js +663 -0
  84. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV2.js +230 -0
  85. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV3.js +223 -0
  86. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV4.js +283 -0
  87. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV5.js +246 -0
  88. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV6.js +301 -0
  89. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV7.js +439 -0
  90. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV8.js +563 -0
  91. package/src/src/plugins/XKTLoaderPlugin/parsers/ParserV9.js +518 -0
  92. package/src/src/plugins/XKTLoaderPlugin/parsers/lib/pako.js +2 -0
  93. package/src/src/plugins/XML3DLoaderPlugin/XML3DLoaderPlugin.js +238 -0
  94. package/src/src/plugins/XML3DLoaderPlugin/XML3DSceneGraphLoader.js +1279 -0
  95. package/src/src/plugins/XML3DLoaderPlugin/index.js +1 -0
  96. package/src/src/plugins/XML3DLoaderPlugin/zipjs/.jshintrc +11 -0
  97. package/src/src/plugins/XML3DLoaderPlugin/zipjs/deflate.js +2060 -0
  98. package/src/src/plugins/XML3DLoaderPlugin/zipjs/inflate.js +2155 -0
  99. package/src/src/plugins/XML3DLoaderPlugin/zipjs/mime-types.js +1002 -0
  100. package/src/src/plugins/XML3DLoaderPlugin/zipjs/pako/codecs.js +64 -0
  101. package/src/src/plugins/XML3DLoaderPlugin/zipjs/z-worker.js +153 -0
  102. package/src/src/plugins/XML3DLoaderPlugin/zipjs/zip-ext.js +267 -0
  103. package/src/src/plugins/XML3DLoaderPlugin/zipjs/zip-fs.js +553 -0
  104. package/src/src/plugins/XML3DLoaderPlugin/zipjs/zip.js +991 -0
  105. package/src/src/plugins/XML3DLoaderPlugin/zipjs/zlib-asm/codecs.js +49 -0
  106. package/src/src/plugins/index.js +21 -0
  107. package/src/src/plugins/lib/culling/ObjectCullStates.js +208 -0
  108. package/src/src/plugins/lib/earcut.js +677 -0
  109. package/src/src/plugins/lib/html/Dot.js +179 -0
  110. package/src/src/plugins/lib/html/Label.js +174 -0
  111. package/src/src/plugins/lib/html/Wire.js +220 -0
  112. package/src/src/viewer/Configs.js +127 -0
  113. package/src/src/viewer/Plugin.js +233 -0
  114. package/src/src/viewer/Viewer.js +542 -0
  115. package/src/src/viewer/index.js +5 -0
  116. package/src/src/viewer/localization/LocaleService.js +475 -0
  117. package/src/src/viewer/metadata/IFCObjectDefaultColors.js +163 -0
  118. package/src/src/viewer/metadata/IFCObjectDefaults.js +17 -0
  119. package/src/src/viewer/metadata/MetaModel.js +414 -0
  120. package/src/src/viewer/metadata/MetaObject.js +223 -0
  121. package/src/src/viewer/metadata/MetaScene.js +336 -0
  122. package/src/src/viewer/metadata/Property.js +55 -0
  123. package/src/src/viewer/metadata/PropertySet.js +77 -0
  124. package/src/src/viewer/scene/Bitmap/Bitmap.js +473 -0
  125. package/src/src/viewer/scene/Bitmap/index.js +1 -0
  126. package/src/src/viewer/scene/CameraControl/CameraControl.js +1750 -0
  127. package/src/src/viewer/scene/CameraControl/lib/CameraUpdater.js +312 -0
  128. package/src/src/viewer/scene/CameraControl/lib/controllers/PanController.js +112 -0
  129. package/src/src/viewer/scene/CameraControl/lib/controllers/PickController.js +265 -0
  130. package/src/src/viewer/scene/CameraControl/lib/controllers/PivotController.js +384 -0
  131. package/src/src/viewer/scene/CameraControl/lib/handlers/KeyboardAxisViewHandler.js +122 -0
  132. package/src/src/viewer/scene/CameraControl/lib/handlers/KeyboardPanRotateDollyHandler.js +183 -0
  133. package/src/src/viewer/scene/CameraControl/lib/handlers/MouseMiscHandler.js +68 -0
  134. package/src/src/viewer/scene/CameraControl/lib/handlers/MousePanRotateDollyHandler.js +345 -0
  135. package/src/src/viewer/scene/CameraControl/lib/handlers/MousePickHandler.js +376 -0
  136. package/src/src/viewer/scene/CameraControl/lib/handlers/TouchPanRotateAndDollyHandler.js +288 -0
  137. package/src/src/viewer/scene/CameraControl/lib/handlers/TouchPickHandler.js +235 -0
  138. package/src/src/viewer/scene/Component.js +915 -0
  139. package/src/src/viewer/scene/Entity.js +502 -0
  140. package/src/src/viewer/scene/ImagePlane/ImagePlane.js +570 -0
  141. package/src/src/viewer/scene/ImagePlane/index.js +1 -0
  142. package/src/src/viewer/scene/LineSet/LineSet.js +163 -0
  143. package/src/src/viewer/scene/LineSet/index.js +1 -0
  144. package/src/src/viewer/scene/camera/Camera.js +912 -0
  145. package/src/src/viewer/scene/camera/CameraFlightAnimation.js +669 -0
  146. package/src/src/viewer/scene/camera/CameraPath.js +194 -0
  147. package/src/src/viewer/scene/camera/CameraPathAnimation.js +326 -0
  148. package/src/src/viewer/scene/camera/CustomProjection.js +149 -0
  149. package/src/src/viewer/scene/camera/Frustum.js +316 -0
  150. package/src/src/viewer/scene/camera/Ortho.js +286 -0
  151. package/src/src/viewer/scene/camera/Perspective.js +304 -0
  152. package/src/src/viewer/scene/camera/index.js +2 -0
  153. package/src/src/viewer/scene/canvas/Canvas.js +490 -0
  154. package/src/src/viewer/scene/canvas/Spinner.js +323 -0
  155. package/src/src/viewer/scene/constants/constants.js +371 -0
  156. package/src/src/viewer/scene/core.js +268 -0
  157. package/src/src/viewer/scene/geometry/Geometry.js +33 -0
  158. package/src/src/viewer/scene/geometry/ReadableGeometry.js +682 -0
  159. package/src/src/viewer/scene/geometry/VBOGeometry.js +319 -0
  160. package/src/src/viewer/scene/geometry/builders/buildBoxGeometry.js +238 -0
  161. package/src/src/viewer/scene/geometry/builders/buildBoxLinesGeometry.js +106 -0
  162. package/src/src/viewer/scene/geometry/builders/buildCylinderGeometry.js +271 -0
  163. package/src/src/viewer/scene/geometry/builders/buildGridGeometry.js +102 -0
  164. package/src/src/viewer/scene/geometry/builders/buildPlaneGeometry.js +168 -0
  165. package/src/src/viewer/scene/geometry/builders/buildSphereGeometry.js +161 -0
  166. package/src/src/viewer/scene/geometry/builders/buildTorusGeometry.js +172 -0
  167. package/src/src/viewer/scene/geometry/builders/buildVectorTextGeometry.js +1721 -0
  168. package/src/src/viewer/scene/geometry/builders/index.js +8 -0
  169. package/src/src/viewer/scene/geometry/index.js +4 -0
  170. package/src/src/viewer/scene/geometry/loaders/index.js +2 -0
  171. package/src/src/viewer/scene/geometry/loaders/load3DSGeometry.js +103 -0
  172. package/src/src/viewer/scene/geometry/loaders/loadOBJGeometry.js +130 -0
  173. package/src/src/viewer/scene/index.js +21 -0
  174. package/src/src/viewer/scene/input/Input.js +1333 -0
  175. package/src/src/viewer/scene/libs/k3d.js +1032 -0
  176. package/src/src/viewer/scene/lights/AmbientLight.js +175 -0
  177. package/src/src/viewer/scene/lights/CubeTexture.js +156 -0
  178. package/src/src/viewer/scene/lights/DirLight.js +314 -0
  179. package/src/src/viewer/scene/lights/Light.js +29 -0
  180. package/src/src/viewer/scene/lights/LightMap.js +77 -0
  181. package/src/src/viewer/scene/lights/PointLight.js +395 -0
  182. package/src/src/viewer/scene/lights/ReflectionMap.js +79 -0
  183. package/src/src/viewer/scene/lights/Shadow.js +138 -0
  184. package/src/src/viewer/scene/lights/index.js +5 -0
  185. package/src/src/viewer/scene/marker/Marker.js +383 -0
  186. package/src/src/viewer/scene/marker/SpriteMarker.js +356 -0
  187. package/src/src/viewer/scene/marker/index.js +2 -0
  188. package/src/src/viewer/scene/materials/EdgeMaterial.js +359 -0
  189. package/src/src/viewer/scene/materials/EmphasisMaterial.js +613 -0
  190. package/src/src/viewer/scene/materials/Fresnel.js +222 -0
  191. package/src/src/viewer/scene/materials/LambertMaterial.js +378 -0
  192. package/src/src/viewer/scene/materials/LinesMaterial.js +169 -0
  193. package/src/src/viewer/scene/materials/Material.js +39 -0
  194. package/src/src/viewer/scene/materials/MetallicMaterial.js +820 -0
  195. package/src/src/viewer/scene/materials/PhongMaterial.js +860 -0
  196. package/src/src/viewer/scene/materials/PointsMaterial.js +409 -0
  197. package/src/src/viewer/scene/materials/SpecularMaterial.js +807 -0
  198. package/src/src/viewer/scene/materials/Texture.js +513 -0
  199. package/src/src/viewer/scene/materials/index.js +8 -0
  200. package/src/src/viewer/scene/math/Frustum.js +118 -0
  201. package/src/src/viewer/scene/math/buildEdgeIndices.js +162 -0
  202. package/src/src/viewer/scene/math/geometryCompressionUtils.js +365 -0
  203. package/src/src/viewer/scene/math/index.js +3 -0
  204. package/src/src/viewer/scene/math/math.js +5386 -0
  205. package/src/src/viewer/scene/math/rtcCoords.js +139 -0
  206. package/src/src/viewer/scene/mementos/CameraMemento.js +200 -0
  207. package/src/src/viewer/scene/mementos/ModelMemento.js +263 -0
  208. package/src/src/viewer/scene/mementos/ObjectsMemento.js +259 -0
  209. package/src/src/viewer/scene/mementos/index.js +3 -0
  210. package/src/src/viewer/scene/mesh/Mesh.js +2202 -0
  211. package/src/src/viewer/scene/mesh/draw/DrawRenderer.js +996 -0
  212. package/src/src/viewer/scene/mesh/draw/DrawShaderSource.js +1570 -0
  213. package/src/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +259 -0
  214. package/src/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +159 -0
  215. package/src/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +286 -0
  216. package/src/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +262 -0
  217. package/src/src/viewer/scene/mesh/index.js +1 -0
  218. package/src/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +217 -0
  219. package/src/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +157 -0
  220. package/src/src/viewer/scene/mesh/pick/PickMeshRenderer.js +223 -0
  221. package/src/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +151 -0
  222. package/src/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +200 -0
  223. package/src/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +124 -0
  224. package/src/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  225. package/src/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +98 -0
  226. package/src/src/viewer/scene/metriqs/Metriqs.js +259 -0
  227. package/src/src/viewer/scene/model/ENTITY_FLAGS.js +21 -0
  228. package/src/src/viewer/scene/model/PerformanceModel.js +26 -0
  229. package/src/src/viewer/scene/model/RENDER_PASSES.js +34 -0
  230. package/src/src/viewer/scene/model/SceneModel.js +4018 -0
  231. package/src/src/viewer/scene/model/SceneModelEntity.js +715 -0
  232. package/src/src/viewer/scene/model/SceneModelMesh.js +341 -0
  233. package/src/src/viewer/scene/model/SceneModelTexture.js +38 -0
  234. package/src/src/viewer/scene/model/SceneModelTextureSet.js +59 -0
  235. package/src/src/viewer/scene/model/SceneModelTransform.js +404 -0
  236. package/src/src/viewer/scene/model/VBOSceneModel.js +26 -0
  237. package/src/src/viewer/scene/model/calculateUniquePositions.js +126 -0
  238. package/src/src/viewer/scene/model/compression.js +227 -0
  239. package/src/src/viewer/scene/model/dtx/BindableDataTexture.js +31 -0
  240. package/src/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +27 -0
  241. package/src/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +891 -0
  242. package/src/src/viewer/scene/model/dtx/lines/DTXLinesState.js +46 -0
  243. package/src/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +411 -0
  244. package/src/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +49 -0
  245. package/src/src/viewer/scene/model/dtx/lines/rebucketPositions.js +208 -0
  246. package/src/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +389 -0
  247. package/src/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +65 -0
  248. package/src/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +1322 -0
  249. package/src/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +46 -0
  250. package/src/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +250 -0
  251. package/src/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +518 -0
  252. package/src/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +54 -0
  253. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +619 -0
  254. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +464 -0
  255. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +414 -0
  256. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +422 -0
  257. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +345 -0
  258. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +436 -0
  259. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +462 -0
  260. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +436 -0
  261. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +455 -0
  262. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +440 -0
  263. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +307 -0
  264. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +465 -0
  265. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +466 -0
  266. package/src/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +427 -0
  267. package/src/src/viewer/scene/model/index.js +5 -0
  268. package/src/src/viewer/scene/model/rebucketPositions.js +354 -0
  269. package/src/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
  270. package/src/src/viewer/scene/model/vbo/VBORenderer.js +646 -0
  271. package/src/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +699 -0
  272. package/src/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +19 -0
  273. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +316 -0
  274. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +114 -0
  275. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +99 -0
  276. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +124 -0
  277. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +311 -0
  278. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +309 -0
  279. package/src/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +24 -0
  280. package/src/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsBuffer.js +20 -0
  281. package/src/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +718 -0
  282. package/src/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +24 -0
  283. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +168 -0
  284. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +136 -0
  285. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +156 -0
  286. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +148 -0
  287. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +144 -0
  288. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +107 -0
  289. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +146 -0
  290. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +309 -0
  291. package/src/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +303 -0
  292. package/src/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +24 -0
  293. package/src/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +1257 -0
  294. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +131 -0
  295. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +135 -0
  296. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +12 -0
  297. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +375 -0
  298. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +34 -0
  299. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +238 -0
  300. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +270 -0
  301. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  302. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +235 -0
  303. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +139 -0
  304. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +125 -0
  305. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  306. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +144 -0
  307. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +130 -0
  308. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +121 -0
  309. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +131 -0
  310. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +107 -0
  311. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +136 -0
  312. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +311 -0
  313. package/src/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +308 -0
  314. package/src/src/viewer/scene/model/vbo/float16.js +760 -0
  315. package/src/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +704 -0
  316. package/src/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +148 -0
  317. package/src/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +26 -0
  318. package/src/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +139 -0
  319. package/src/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +127 -0
  320. package/src/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +331 -0
  321. package/src/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +316 -0
  322. package/src/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +728 -0
  323. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +174 -0
  324. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +156 -0
  325. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +149 -0
  326. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +170 -0
  327. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +152 -0
  328. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +26 -0
  329. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +174 -0
  330. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +119 -0
  331. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +154 -0
  332. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +330 -0
  333. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +311 -0
  334. package/src/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +150 -0
  335. package/src/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +1190 -0
  336. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +136 -0
  337. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +137 -0
  338. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +12 -0
  339. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +376 -0
  340. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +253 -0
  341. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +278 -0
  342. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  343. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +244 -0
  344. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +130 -0
  345. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +29 -0
  346. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +138 -0
  347. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +128 -0
  348. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  349. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +149 -0
  350. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +136 -0
  351. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +130 -0
  352. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +145 -0
  353. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +113 -0
  354. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +139 -0
  355. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +342 -0
  356. package/src/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +325 -0
  357. package/src/src/viewer/scene/nodes/Node.js +1383 -0
  358. package/src/src/viewer/scene/nodes/index.js +1 -0
  359. package/src/src/viewer/scene/paths/CubicBezierCurve.js +194 -0
  360. package/src/src/viewer/scene/paths/Curve.js +183 -0
  361. package/src/src/viewer/scene/paths/Path.js +239 -0
  362. package/src/src/viewer/scene/paths/QuadraticBezierCurve.js +161 -0
  363. package/src/src/viewer/scene/paths/SplineCurve.js +133 -0
  364. package/src/src/viewer/scene/paths/index.js +5 -0
  365. package/src/src/viewer/scene/postfx/SAO.js +543 -0
  366. package/src/src/viewer/scene/scene/Scene.js +2802 -0
  367. package/src/src/viewer/scene/sectionPlane/SectionPlane.js +198 -0
  368. package/src/src/viewer/scene/sectionPlane/SectionPlaneCache.js +101 -0
  369. package/src/src/viewer/scene/sectionPlane/index.js +1 -0
  370. package/src/src/viewer/scene/skybox/Skybox.js +123 -0
  371. package/src/src/viewer/scene/skybox/index.js +1 -0
  372. package/src/src/viewer/scene/stats.js +44 -0
  373. package/src/src/viewer/scene/utils/Cache.js +29 -0
  374. package/src/src/viewer/scene/utils/FileLoader.js +161 -0
  375. package/src/src/viewer/scene/utils/Loader.js +55 -0
  376. package/src/src/viewer/scene/utils/LoadingManager.js +86 -0
  377. package/src/src/viewer/scene/utils/Map.js +45 -0
  378. package/src/src/viewer/scene/utils/Queue.js +56 -0
  379. package/src/src/viewer/scene/utils/WorkerPool.js +73 -0
  380. package/src/src/viewer/scene/utils/index.js +6 -0
  381. package/src/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/KTX2TextureTranscoder.js +650 -0
  382. package/src/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/index.js +1 -0
  383. package/src/src/viewer/scene/utils/textureTranscoders/TextureTranscoder.js +31 -0
  384. package/src/src/viewer/scene/utils/textureTranscoders/index.js +2 -0
  385. package/src/src/viewer/scene/utils.js +453 -0
  386. package/src/src/viewer/scene/viewport/Viewport.js +212 -0
  387. package/src/src/viewer/scene/webgl/ArrayBuf.js +121 -0
  388. package/src/src/viewer/scene/webgl/Attribute.js +23 -0
  389. package/src/src/viewer/scene/webgl/Drawable.js +270 -0
  390. package/src/src/viewer/scene/webgl/FrameContext.js +313 -0
  391. package/src/src/viewer/scene/webgl/PickResult.js +364 -0
  392. package/src/src/viewer/scene/webgl/Pickable.js +69 -0
  393. package/src/src/viewer/scene/webgl/Program.js +181 -0
  394. package/src/src/viewer/scene/webgl/RenderBuffer.js +378 -0
  395. package/src/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
  396. package/src/src/viewer/scene/webgl/RenderFlags.js +203 -0
  397. package/src/src/viewer/scene/webgl/RenderState.js +40 -0
  398. package/src/src/viewer/scene/webgl/Renderer.js +1781 -0
  399. package/src/src/viewer/scene/webgl/Sampler.js +18 -0
  400. package/src/src/viewer/scene/webgl/Shader.js +49 -0
  401. package/src/src/viewer/scene/webgl/Texture2D.js +442 -0
  402. package/src/src/viewer/scene/webgl/convertConstant.js +244 -0
  403. package/src/src/viewer/scene/webgl/getExtension.js +32 -0
  404. package/src/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +214 -0
  405. package/src/src/viewer/scene/webgl/occlusion/OcclusionTester.js +426 -0
  406. package/src/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
  407. package/src/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +376 -0
  408. package/src/src/viewer/scene/webgl/webglEnums.js +61 -0
  409. package/src/src/viewer/scene/webglInfo.js +47 -0
  410. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +131 -0
  411. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +135 -0
  412. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +12 -0
  413. package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +375 -0
  414. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +34 -0
  415. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +238 -0
  416. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +270 -0
  417. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  418. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +235 -0
  419. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +139 -0
  420. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +125 -0
  421. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  422. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +144 -0
  423. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +130 -0
  424. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +121 -0
  425. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +131 -0
  426. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +107 -0
  427. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +136 -0
  428. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +311 -0
  429. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +308 -0
  430. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +136 -0
  431. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +137 -0
  432. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +12 -0
  433. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +376 -0
  434. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +253 -0
  435. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +278 -0
  436. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  437. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +244 -0
  438. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +130 -0
  439. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +29 -0
  440. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +138 -0
  441. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +128 -0
  442. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  443. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +149 -0
  444. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +136 -0
  445. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +130 -0
  446. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +145 -0
  447. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +113 -0
  448. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +139 -0
  449. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +342 -0
  450. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +325 -0
@@ -0,0 +1,751 @@
1
+ import {math, Plugin, SceneModel, utils} from "../../viewer/index.js";
2
+ import {CityJSONDefaultDataSource} from "./CityJSONDefaultDataSource.js";
3
+
4
+ import {earcut} from '../lib/earcut.js';
5
+
6
+ const tempVec2a = math.vec2();
7
+ const tempVec3a = math.vec3();
8
+ const tempVec3b = math.vec3();
9
+ const tempVec3c = math.vec3();
10
+
11
+ /**
12
+ * {@link Viewer} plugin that loads models from CityJSON files.
13
+ *
14
+ * <a href="https://xeokit.github.io/xeokit-sdk/examples/#loading_CityJSONLoaderPlugin_Railway"><img src="https://xeokit.io/img/docs/CityJSONLoaderPlugin/CityJSONLoaderPlugin.png"></a>
15
+ *
16
+ * [[Run this example](https://xeokit.github.io/xeokit-sdk/examples/#loading_CityJSONLoaderPlugin_Railway)]
17
+ *
18
+ * ## Overview
19
+ *
20
+ * * Loads small-to-medium sized models directly from [CityJSON 1.0.0](https://www.cityjson.org/specs/1.0.0/) files.
21
+ * * Loads double-precision coordinates, enabling models to be viewed at global coordinates without accuracy loss.
22
+ * * Allows to set the position, scale and rotation of each model as you load it.
23
+ * * Not recommended for large models. For best performance with large CityJSON datasets, we recommend
24
+ * converting them to ````.xkt```` format (eg. using [convert2xkt](https://github.com/xeokit/xeokit-convert)), then loading
25
+ * the ````.xkt```` using {@link XKTLoaderPlugin}.
26
+ *
27
+ * ## Limitations
28
+ *
29
+ * Loading and parsing huge CityJSON files can be slow, and can overwhelm the browser, however. To view your
30
+ * largest CityJSON models, we recommend instead pre-converting those to xeokit's compressed native .XKT format, then
31
+ * loading them with {@link XKTLoaderPlugin} instead.</p>
32
+ *
33
+ * ## Scene representation
34
+ *
35
+ * When loading a model, CityJSONLoaderPlugin creates an {@link Entity} that represents the model, which
36
+ * will have {@link Entity#isModel} set ````true```` and will be registered by {@link Entity#id}
37
+ * in {@link Scene#models}. The CityJSONLoaderPlugin also creates an {@link Entity} for each object within the
38
+ * model. Those Entities will have {@link Entity#isObject} set ````true```` and will be registered
39
+ * by {@link Entity#id} in {@link Scene#objects}.
40
+ *
41
+ * ## Metadata
42
+ *
43
+ * When loading a model, CityJSONLoaderPlugin also creates a {@link MetaModel} that represents the model, which contains
44
+ * a tree of {@link MetaObject}s that represent the CityJSON objects. .
45
+ *
46
+ * ## Usage
47
+ *
48
+ * In the example below we'll load the LOD 3 Railway model from
49
+ * a [CityJSON file](https://github.com/xeokit/xeokit-sdk/tree/master/assets/models/cityjson/LoD3_Railway.json). Within
50
+ * our {@link Viewer}, this will create a bunch of {@link Entity}s that represents the model and its objects, along with
51
+ * a {@link MetaModel} and {@link MetaObject}s that hold their metadata.
52
+ *
53
+ * We'll also scale our model to half its size, rotate it 90 degrees about its local X-axis, then
54
+ * translate it 100 units along its X axis.
55
+ *
56
+ * * [[Run example](https://xeokit.github.io/xeokit-sdk/examples/#loading_CityJSONLoaderPlugin_Railway)]
57
+ *
58
+ * ````javascript
59
+ * import {Viewer, CityJSONLoaderPlugin} from "xeokit-sdk.es.js";
60
+ *
61
+ * const viewer = new Viewer({
62
+ * canvasId: "myCanvas",
63
+ * transparent: true
64
+ * });
65
+ *
66
+ * viewer.scene.camera.eye = [14.915582703146043, 14.396781491179095, 5.431098754133695];
67
+ * viewer.scene.camera.look = [6.599999999999998, 8.34099990051474, -4.159999575600315];
68
+ * viewer.scene.camera.up = [-0.2820584034861215, 0.9025563895259413, -0.3253229483893775];
69
+ *
70
+ * const cityJSONLoader = new CityJSONLoaderPlugin(viewer);
71
+ *
72
+ * const model = cityJSONLoader.load({ // Returns an Entity that represents the model
73
+ * id: "myModel1",
74
+ * src: "../assets/models/cityjson/LoD3_Railway.json",
75
+ * saoEnabled: true,
76
+ * edges: false,
77
+ * rotation: [-90,0,0],
78
+ * scale: [0.5, 0.5, 0.5],
79
+ * origin: [100, 0, 0]
80
+ * });
81
+ * ````
82
+ *
83
+ * ## Configuring a custom data source
84
+ *
85
+ * By default, CityJSONLoaderPlugin will load CityJSON files over HTTP.
86
+ *
87
+ * In the example below, we'll customize the way CityJSONLoaderPlugin loads the files by configuring it with our own data source
88
+ * object. For simplicity, our custom data source example also uses HTTP, using a couple of xeokit utility functions.
89
+ *
90
+ * ````javascript
91
+ * import {utils} from "xeokit-sdk.es.js";
92
+ *
93
+ * class MyDataSource {
94
+ *
95
+ * constructor() {
96
+ * }
97
+ *
98
+ * getCityJSON(src, ok, error) {
99
+ * console.log("MyDataSource#getCityJSON(" + CityJSONSrc + ", ... )");
100
+ * utils.loadJSON(src,
101
+ * (cityJSON) => {
102
+ * ok(cityJSON);
103
+ * },
104
+ * function (errMsg) {
105
+ * error(errMsg);
106
+ * });
107
+ * }
108
+ * }
109
+ * ````
110
+ *
111
+ * @class CityJSONLoaderPlugin
112
+ * @since 2.0.13
113
+ */
114
+ class CityJSONLoaderPlugin extends Plugin {
115
+
116
+ /**
117
+ * @constructor
118
+ *
119
+ * @param {Viewer} viewer The Viewer.
120
+ * @param {Object} cfg Plugin configuration.
121
+ * @param {String} [cfg.id="cityJSONLoader"] Optional ID for this plugin, so that we can find it within {@link Viewer#plugins}.
122
+ * @param {Object} [cfg.dataSource] A custom data source through which the CityJSONLoaderPlugin can load model and
123
+ * metadata files. Defaults to an instance of {@link CityJSONDefaultDataSource}, which loads over HTTP.
124
+ */
125
+ constructor(viewer, cfg = {}) {
126
+
127
+ super("cityJSONLoader", viewer, cfg);
128
+
129
+ this.dataSource = cfg.dataSource;
130
+ }
131
+
132
+ /**
133
+ * Gets the custom data source through which the CityJSONLoaderPlugin can load CityJSON files.
134
+ *
135
+ * Default value is {@link CityJSONDefaultDataSource}, which loads via HTTP.
136
+ *
137
+ * @type {Object}
138
+ */
139
+ get dataSource() {
140
+ return this._dataSource;
141
+ }
142
+
143
+ /**
144
+ * Sets a custom data source through which the CityJSONLoaderPlugin can load CityJSON files.
145
+ *
146
+ * Default value is {@link CityJSONDefaultDataSource}, which loads via HTTP.
147
+ *
148
+ * @type {Object}
149
+ */
150
+ set dataSource(value) {
151
+ this._dataSource = value || new CityJSONDefaultDataSource();
152
+ }
153
+
154
+ /**
155
+ * Loads an ````CityJSON```` model into this CityJSONLoaderPlugin's {@link Viewer}.
156
+ *
157
+ * @param {*} params Loading parameters.
158
+ * @param {String} [params.id] ID to assign to the root {@link Entity#id}, unique among all components in the Viewer's {@link Scene}, generated automatically by default.
159
+ * @param {String} [params.src] Path to a CityJSON file, as an alternative to the ````cityJSON```` parameter.
160
+ * @param {ArrayBuffer} [params.cityJSON] The CityJSON file data, as an alternative to the ````src```` parameter.
161
+ * @param {Boolean} [params.loadMetadata=true] Whether to load metadata on CityJSON objects.
162
+ * @param {Number[]} [params.origin=[0,0,0]] The model's World-space double-precision 3D origin. Use this to position the model within xeokit's World coordinate system, using double-precision coordinates.
163
+ * @param {Number[]} [params.position=[0,0,0]] The model single-precision 3D position, relative to the ````origin```` parameter.
164
+ * @param {Number[]} [params.scale=[1,1,1]] The model's scale.
165
+ * @param {Number[]} [params.rotation=[0,0,0]] The model's orientation, given as Euler angles in degrees, for each of the X, Y and Z axis.
166
+ * @param {Number[]} [params.matrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]] The model's world transform matrix. Overrides the position, scale and rotation parameters. Relative to ````origin````.
167
+ * @param {Object} [params.stats] Collects model statistics.
168
+ * @param {Boolean} [params.dtxEnabled=true] When ````true```` (default) use data textures (DTX), where appropriate, to
169
+ * represent the returned model. Set false to always use vertex buffer objects (VBOs). Note that DTX is only applicable
170
+ * to non-textured triangle meshes, and that VBOs are always used for meshes that have textures, line segments, or point
171
+ * primitives. Only works while {@link DTX#enabled} is also ````true````.
172
+ * @returns {Entity} Entity representing the model, which will have {@link Entity#isModel} set ````true```` and will be registered by {@link Entity#id} in {@link Scene#models}.
173
+ */
174
+ load(params = {}) {
175
+
176
+ if (params.id && this.viewer.scene.components[params.id]) {
177
+ this.error("Component with this ID already exists in viewer: " + params.id + " - will autogenerate this ID");
178
+ delete params.id;
179
+ }
180
+
181
+ const sceneModel = new SceneModel(this.viewer.scene, utils.apply(params, {
182
+ isModel: true,
183
+ edges: true
184
+ }));
185
+
186
+ if (!params.src && !params.cityJSON) {
187
+ this.error("load() param expected: src or cityJSON");
188
+ return sceneModel; // Return new empty model
189
+ }
190
+
191
+ const options = {};
192
+
193
+ if (params.src) {
194
+ this._loadModel(params.src, params, options, sceneModel);
195
+ } else {
196
+ const spinner = this.viewer.scene.canvas.spinner;
197
+ spinner.processes++;
198
+ this._parseModel(params.cityJSON, params, options, sceneModel);
199
+ spinner.processes--;
200
+ }
201
+
202
+ return sceneModel;
203
+ }
204
+
205
+ _loadModel(src, params, options, sceneModel) {
206
+ const spinner = this.viewer.scene.canvas.spinner;
207
+ spinner.processes++;
208
+ this._dataSource.getCityJSON(params.src, (data) => {
209
+ this._parseModel(data, params, options, sceneModel);
210
+ spinner.processes--;
211
+ },
212
+ (errMsg) => {
213
+ spinner.processes--;
214
+ this.error(errMsg);
215
+ sceneModel.fire("error", errMsg);
216
+ });
217
+ }
218
+
219
+ _parseModel(data, params, options, sceneModel) {
220
+
221
+ if (sceneModel.destroyed) {
222
+ return;
223
+ }
224
+
225
+ const vertices = data.transform ? this._transformVertices(data.vertices, data.transform, options.rotateX) : data.vertices;
226
+
227
+ const stats = params.stats || {};
228
+ stats.sourceFormat = data.type || "CityJSON";
229
+ stats.schemaVersion = data.version || "";
230
+ stats.title = "";
231
+ stats.author = "";
232
+ stats.created = "";
233
+ stats.numMetaObjects = 0;
234
+ stats.numPropertySets = 0;
235
+ stats.numObjects = 0;
236
+ stats.numGeometries = 0;
237
+ stats.numTriangles = 0;
238
+ stats.numVertices = 0;
239
+
240
+ const loadMetadata = (params.loadMetadata !== false);
241
+
242
+ const rootMetaObject = loadMetadata ? {
243
+ id: math.createUUID(),
244
+ name: "Model",
245
+ type: "Model"
246
+ } : null;
247
+
248
+ const metadata = loadMetadata ? {
249
+ id: "",
250
+ projectId: "",
251
+ author: "",
252
+ createdAt: "",
253
+ schema: data.version || "",
254
+ creatingApplication: "",
255
+ metaObjects: [rootMetaObject],
256
+ propertySets: []
257
+ } : null;
258
+
259
+ const ctx = {
260
+ data,
261
+ vertices,
262
+ sceneModel,
263
+ loadMetadata,
264
+ metadata,
265
+ rootMetaObject,
266
+ nextId: 0,
267
+ stats
268
+ };
269
+
270
+ this._parseCityJSON(ctx)
271
+
272
+ sceneModel.finalize();
273
+
274
+ if (loadMetadata) {
275
+ const metaModelId = sceneModel.id;
276
+ this.viewer.metaScene.createMetaModel(metaModelId, ctx.metadata, options);
277
+ }
278
+
279
+ sceneModel.scene.once("tick", () => {
280
+ if (sceneModel.destroyed) {
281
+ return;
282
+ }
283
+ sceneModel.scene.fire("modelLoaded", sceneModel.id); // FIXME: Assumes listeners know order of these two events
284
+ sceneModel.fire("loaded", true, false); // Don't forget the event, for late subscribers
285
+ });
286
+ }
287
+
288
+ _transformVertices(vertices, transform, rotateX) {
289
+ const transformedVertices = [];
290
+ const scale = transform.scale || math.vec3([1, 1, 1]);
291
+ const translate = transform.translate || math.vec3([0, 0, 0]);
292
+ for (let i = 0, j = 0; i < vertices.length; i++, j += 3) {
293
+ const x = (vertices[i][0] * scale[0]) + translate[0];
294
+ const y = (vertices[i][1] * scale[1]) + translate[1];
295
+ const z = (vertices[i][2] * scale[2]) + translate[2];
296
+ if (rotateX) {
297
+ transformedVertices.push([x, z, y]);
298
+ } else {
299
+ transformedVertices.push([x, y, z]);
300
+ }
301
+ }
302
+ return transformedVertices;
303
+ }
304
+
305
+ _parseCityJSON(ctx) {
306
+ const data = ctx.data;
307
+ const cityObjects = data.CityObjects;
308
+ for (const objectId in cityObjects) {
309
+ if (cityObjects.hasOwnProperty(objectId)) {
310
+ const cityObject = cityObjects[objectId];
311
+ this._parseCityObject(ctx, cityObject, objectId);
312
+ }
313
+ }
314
+ }
315
+
316
+ _parseCityObject(ctx, cityObject, objectId) {
317
+
318
+ const sceneModel = ctx.sceneModel;
319
+ const data = ctx.data;
320
+
321
+ if (ctx.loadMetadata) {
322
+
323
+ const metaObjectId = objectId;
324
+ const metaObjectType = cityObject.type;
325
+ const metaObjectName = metaObjectType + " : " + objectId;
326
+ const parentMetaObjectId = cityObject.parents ? cityObject.parents[0] : ctx.rootMetaObject.id;
327
+
328
+ ctx.metadata.metaObjects.push({
329
+ id: metaObjectId,
330
+ name: metaObjectName,
331
+ type: metaObjectType,
332
+ parent: parentMetaObjectId
333
+ });
334
+ }
335
+
336
+ ctx.stats.numMetaObjects++;
337
+
338
+ if (!(cityObject.geometry && cityObject.geometry.length > 0)) {
339
+ return;
340
+ }
341
+
342
+ const meshIds = [];
343
+
344
+ for (let i = 0, len = cityObject.geometry.length; i < len; i++) {
345
+
346
+ const geometry = cityObject.geometry[i];
347
+
348
+ let objectMaterial;
349
+ let surfaceMaterials;
350
+
351
+ const appearance = data.appearance;
352
+ if (appearance) {
353
+ const materials = appearance.materials;
354
+ if (materials) {
355
+ const geometryMaterial = geometry.material;
356
+ if (geometryMaterial) {
357
+ const themeIds = Object.keys(geometryMaterial);
358
+ if (themeIds.length > 0) {
359
+ const themeId = themeIds[0];
360
+ const theme = geometryMaterial[themeId];
361
+ if (theme.value !== undefined) {
362
+ objectMaterial = materials[theme.value];
363
+ } else {
364
+ const values = theme.values;
365
+ if (values) {
366
+ surfaceMaterials = [];
367
+ for (let j = 0, lenj = values.length; j < lenj; j++) {
368
+ const value = values[i];
369
+ const surfaceMaterial = materials[value];
370
+ surfaceMaterials.push(surfaceMaterial);
371
+ }
372
+ }
373
+ }
374
+ }
375
+ }
376
+ }
377
+ }
378
+
379
+ if (surfaceMaterials) {
380
+ this._parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds);
381
+
382
+ } else {
383
+ this._parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds);
384
+ }
385
+ }
386
+
387
+ if (meshIds.length > 0) {
388
+ sceneModel.createEntity({
389
+ id: objectId,
390
+ meshIds: meshIds,
391
+ isObject: true
392
+ });
393
+
394
+ ctx.stats.numObjects++;
395
+ }
396
+ }
397
+
398
+ _parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds) {
399
+
400
+ const geomType = geometry.type;
401
+
402
+ switch (geomType) {
403
+
404
+ case "MultiPoint":
405
+ break;
406
+
407
+ case "MultiLineString":
408
+ break;
409
+
410
+ case "MultiSurface":
411
+
412
+ case "CompositeSurface":
413
+ const surfaces = geometry.boundaries;
414
+ this._parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);
415
+ break;
416
+
417
+ case "Solid":
418
+ const shells = geometry.boundaries;
419
+ for (let j = 0; j < shells.length; j++) {
420
+ const surfaces = shells[j];
421
+ this._parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);
422
+ }
423
+ break;
424
+
425
+ case "MultiSolid":
426
+
427
+ case "CompositeSolid":
428
+ const solids = geometry.boundaries;
429
+ for (let j = 0; j < solids.length; j++) {
430
+ for (let k = 0; k < solids[j].length; k++) {
431
+ const surfaces = solids[j][k];
432
+ this._parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);
433
+ }
434
+ }
435
+ break;
436
+
437
+ case "GeometryInstance":
438
+ break;
439
+ }
440
+ }
441
+
442
+ _parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds) {
443
+
444
+ const vertices = ctx.vertices;
445
+ const sceneModel = ctx.sceneModel;
446
+
447
+ for (let i = 0; i < surfaces.length; i++) {
448
+
449
+ const surface = surfaces[i];
450
+ const surfaceMaterial = surfaceMaterials[i] || {diffuseColor: [0.8, 0.8, 0.8], transparency: 1.0};
451
+
452
+ const face = [];
453
+ const holes = [];
454
+
455
+ const sharedIndices = [];
456
+
457
+ const geometryCfg = {
458
+ positions: [],
459
+ indices: []
460
+ };
461
+
462
+ for (let j = 0; j < surface.length; j++) {
463
+
464
+ if (face.length > 0) {
465
+ holes.push(face.length);
466
+ }
467
+
468
+ const newFace = this._extractLocalIndices(ctx, surface[j], sharedIndices, geometryCfg);
469
+
470
+ face.push(...newFace);
471
+ }
472
+
473
+ if (face.length === 3) { // Triangle
474
+
475
+ geometryCfg.indices.push(face[0]);
476
+ geometryCfg.indices.push(face[1]);
477
+ geometryCfg.indices.push(face[2]);
478
+
479
+ } else if (face.length > 3) { // Polygon
480
+
481
+ // Prepare to triangulate
482
+
483
+ const pList = [];
484
+
485
+ for (let k = 0; k < face.length; k++) {
486
+ pList.push({
487
+ x: vertices[sharedIndices[face[k]]][0],
488
+ y: vertices[sharedIndices[face[k]]][1],
489
+ z: vertices[sharedIndices[face[k]]][2]
490
+ });
491
+ }
492
+
493
+ const normal = this._getNormalOfPositions(pList, math.vec3());
494
+
495
+ // Convert to 2D
496
+
497
+ let pv = [];
498
+
499
+ for (let k = 0; k < pList.length; k++) {
500
+
501
+ this._to2D(pList[k], normal, tempVec2a);
502
+
503
+ pv.unshift(tempVec2a[0]);
504
+ pv.unshift(tempVec2a[1]);
505
+ }
506
+
507
+ // Triangulate
508
+
509
+ const tr = earcut(pv, holes, 2);
510
+
511
+ // Create triangles
512
+
513
+ for (let k = 0; k < tr.length; k += 3) {
514
+ geometryCfg.indices.unshift(face[tr[k]]);
515
+ geometryCfg.indices.unshift(face[tr[k + 1]]);
516
+ geometryCfg.indices.unshift(face[tr[k + 2]]);
517
+ }
518
+ }
519
+
520
+ const meshId = "" + ctx.nextId++;
521
+
522
+ sceneModel.createMesh({
523
+ id: meshId,
524
+ primitive: "triangles",
525
+ positions: geometryCfg.positions,
526
+ indices: geometryCfg.indices,
527
+ color: (surfaceMaterial && surfaceMaterial.diffuseColor) ? surfaceMaterial.diffuseColor : [0.8, 0.8, 0.8],
528
+ opacity: (surfaceMaterial && surfaceMaterial.transparency !== undefined) ? (1.0 - surfaceMaterial.transparency) : 1.0
529
+ });
530
+
531
+ meshIds.push(meshId);
532
+
533
+ ctx.stats.numGeometries++;
534
+ ctx.stats.numVertices += geometryCfg.positions.length / 3;
535
+ ctx.stats.numTriangles += geometryCfg.indices.length / 3;
536
+ }
537
+ }
538
+
539
+ _parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds) {
540
+
541
+ const sceneModel = ctx.sceneModel;
542
+ const sharedIndices = [];
543
+ const geometryCfg = {
544
+ positions: [],
545
+ indices: []
546
+ };
547
+
548
+ const geomType = geometry.type;
549
+
550
+ switch (geomType) {
551
+ case "MultiPoint":
552
+ break;
553
+
554
+ case "MultiLineString":
555
+ break;
556
+
557
+ case "MultiSurface":
558
+ case "CompositeSurface":
559
+ const surfaces = geometry.boundaries;
560
+ this._parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);
561
+ break;
562
+
563
+ case "Solid":
564
+ const shells = geometry.boundaries;
565
+ for (let j = 0; j < shells.length; j++) {
566
+ const surfaces = shells[j];
567
+ this._parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);
568
+ }
569
+ break;
570
+
571
+ case "MultiSolid":
572
+ case "CompositeSolid":
573
+ const solids = geometry.boundaries;
574
+ for (let j = 0; j < solids.length; j++) {
575
+ for (let k = 0; k < solids[j].length; k++) {
576
+ const surfaces = solids[j][k];
577
+ this._parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);
578
+ }
579
+ }
580
+ break;
581
+
582
+ case "GeometryInstance":
583
+ break;
584
+ }
585
+
586
+ if (geometryCfg.positions.length > 0 && geometryCfg.indices.length > 0) {
587
+
588
+ const meshId = "" + ctx.nextId++;
589
+
590
+ sceneModel.createMesh({
591
+ id: meshId,
592
+ primitive: "triangles",
593
+ positions: geometryCfg.positions,
594
+ indices: geometryCfg.indices,
595
+ color: (objectMaterial && objectMaterial.diffuseColor) ? objectMaterial.diffuseColor : [0.8, 0.8, 0.8],
596
+ opacity: 1.0
597
+ //opacity: (objectMaterial && objectMaterial.transparency !== undefined) ? (1.0 - objectMaterial.transparency) : 1.0
598
+ });
599
+
600
+ meshIds.push(meshId);
601
+
602
+ ctx.stats.numGeometries++;
603
+ ctx.stats.numVertices += geometryCfg.positions.length / 3;
604
+ ctx.stats.numTriangles += geometryCfg.indices.length / 3;
605
+ }
606
+ }
607
+
608
+ _parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, primitiveCfg) {
609
+
610
+ const vertices = ctx.vertices;
611
+
612
+ for (let i = 0; i < surfaces.length; i++) {
613
+
614
+ let boundary = [];
615
+ let holes = [];
616
+
617
+ for (let j = 0; j < surfaces[i].length; j++) {
618
+ if (boundary.length > 0) {
619
+ holes.push(boundary.length);
620
+ }
621
+ const newBoundary = this._extractLocalIndices(ctx, surfaces[i][j], sharedIndices, primitiveCfg);
622
+ boundary.push(...newBoundary);
623
+ }
624
+
625
+ if (boundary.length === 3) { // Triangle
626
+
627
+ primitiveCfg.indices.push(boundary[0]);
628
+ primitiveCfg.indices.push(boundary[1]);
629
+ primitiveCfg.indices.push(boundary[2]);
630
+
631
+ } else if (boundary.length > 3) { // Polygon
632
+
633
+ let pList = [];
634
+
635
+ for (let k = 0; k < boundary.length; k++) {
636
+ pList.push({
637
+ x: vertices[sharedIndices[boundary[k]]][0],
638
+ y: vertices[sharedIndices[boundary[k]]][1],
639
+ z: vertices[sharedIndices[boundary[k]]][2]
640
+ });
641
+ }
642
+
643
+ const normal = this._getNormalOfPositions(pList, math.vec3());
644
+ let pv = [];
645
+
646
+ for (let k = 0; k < pList.length; k++) {
647
+ this._to2D(pList[k], normal, tempVec2a);
648
+ pv.unshift(tempVec2a[0]);
649
+ pv.unshift(tempVec2a[1]);
650
+ }
651
+
652
+ const tr = earcut(pv, holes, 2);
653
+
654
+ for (let k = 0; k < tr.length; k += 3) {
655
+ primitiveCfg.indices.unshift(boundary[tr[k]]);
656
+ primitiveCfg.indices.unshift(boundary[tr[k + 1]]);
657
+ primitiveCfg.indices.unshift(boundary[tr[k + 2]]);
658
+ }
659
+ }
660
+ }
661
+ }
662
+
663
+ _extractLocalIndices(ctx, boundary, sharedIndices, geometryCfg) {
664
+
665
+ const vertices = ctx.vertices;
666
+ const newBoundary = []
667
+
668
+ for (let i = 0, len = boundary.length; i < len; i++) {
669
+
670
+ const index = boundary[i];
671
+
672
+ if (sharedIndices.includes(index)) {
673
+ const vertexIndex = sharedIndices.indexOf(index);
674
+ newBoundary.push(vertexIndex);
675
+
676
+ } else {
677
+ geometryCfg.positions.push(vertices[index][0]);
678
+ geometryCfg.positions.push(vertices[index][1]);
679
+ geometryCfg.positions.push(vertices[index][2]);
680
+
681
+ newBoundary.push(sharedIndices.length);
682
+
683
+ sharedIndices.push(index);
684
+ }
685
+ }
686
+
687
+ return newBoundary
688
+ }
689
+
690
+ _getNormalOfPositions(positions, normal) {
691
+
692
+ for (let i = 0; i < positions.length; i++) {
693
+
694
+ let nexti = i + 1;
695
+ if (nexti === positions.length) {
696
+ nexti = 0;
697
+ }
698
+
699
+ normal[0] += ((positions[i].y - positions[nexti].y) * (positions[i].z + positions[nexti].z));
700
+ normal[1] += ((positions[i].z - positions[nexti].z) * (positions[i].x + positions[nexti].x));
701
+ normal[2] += ((positions[i].x - positions[nexti].x) * (positions[i].y + positions[nexti].y));
702
+ }
703
+
704
+ return math.normalizeVec3(normal);
705
+ }
706
+
707
+ _to2D(_p, _n, re) {
708
+
709
+ const p = tempVec3a;
710
+ const n = tempVec3b;
711
+ const x3 = tempVec3c;
712
+
713
+ p[0] = _p.x;
714
+ p[1] = _p.y;
715
+ p[2] = _p.z;
716
+
717
+ n[0] = _n.x;
718
+ n[1] = _n.y;
719
+ n[2] = _n.z;
720
+
721
+ x3[0] = 1.1;
722
+ x3[1] = 1.1;
723
+ x3[2] = 1.1;
724
+
725
+ const dist = math.lenVec3(math.subVec3(x3, n));
726
+
727
+ if (dist < 0.01) {
728
+ x3[0] += 1.0;
729
+ x3[1] += 2.0;
730
+ x3[2] += 3.0;
731
+ }
732
+
733
+ const dot = math.dotVec3(x3, n);
734
+ const tmp2 = math.mulVec3Scalar(n, dot, math.vec3());
735
+
736
+ x3[0] -= tmp2[0];
737
+ x3[1] -= tmp2[1];
738
+ x3[2] -= tmp2[2];
739
+
740
+ math.normalizeVec3(x3);
741
+
742
+ const y3 = math.cross3Vec3(n, x3, math.vec3());
743
+ const x = math.dotVec3(p, x3);
744
+ const y = math.dotVec3(p, y3);
745
+
746
+ re[0] = x;
747
+ re[1] = y;
748
+ }
749
+ }
750
+
751
+ export {CityJSONLoaderPlugin};