@xeokit/xeokit-sdk 2.4.0-alpha-81 → 2.4.0-alpha-82

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 (384) hide show
  1. package/package.json +2 -1
  2. package/src/extras/ContextMenu/ContextMenu.js +907 -0
  3. package/src/extras/ContextMenu/index.js +1 -0
  4. package/src/extras/index.js +1 -0
  5. package/src/index.js +3 -0
  6. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +658 -0
  7. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsControl.js +418 -0
  8. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsPlugin.js +400 -0
  9. package/src/plugins/AngleMeasurementsPlugin/index.js +1 -0
  10. package/src/plugins/AnnotationsPlugin/Annotation.js +368 -0
  11. package/src/plugins/AnnotationsPlugin/AnnotationsPlugin.js +583 -0
  12. package/src/plugins/AnnotationsPlugin/index.js +1 -0
  13. package/src/plugins/AxisGizmoPlugin/AxisGizmoPlugin.js +333 -0
  14. package/src/plugins/AxisGizmoPlugin/index.js +1 -0
  15. package/src/plugins/BCFViewpointsPlugin/BCFViewpointsPlugin.js +955 -0
  16. package/src/plugins/BCFViewpointsPlugin/index.js +1 -0
  17. package/src/plugins/CityJSONLoaderPlugin/CityJSONDefaultDataSource.js +29 -0
  18. package/src/plugins/CityJSONLoaderPlugin/CityJSONLoaderPlugin.js +751 -0
  19. package/src/plugins/CityJSONLoaderPlugin/index.js +1 -0
  20. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +870 -0
  21. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsControl.js +376 -0
  22. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsPlugin.js +454 -0
  23. package/src/plugins/DistanceMeasurementsPlugin/index.js +1 -0
  24. package/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesControl.js +639 -0
  25. package/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesPlugin.js +436 -0
  26. package/src/plugins/FaceAlignedSectionPlanesPlugin/Overview.js +247 -0
  27. package/src/plugins/FaceAlignedSectionPlanesPlugin/Plane.js +167 -0
  28. package/src/plugins/FaceAlignedSectionPlanesPlugin/index.js +1 -0
  29. package/src/plugins/FastNavPlugin/FastNavPlugin.js +429 -0
  30. package/src/plugins/FastNavPlugin/index.js +1 -0
  31. package/src/plugins/GLTFLoaderPlugin/GLTFDefaultDataSource.js +139 -0
  32. package/src/plugins/GLTFLoaderPlugin/GLTFLoaderPlugin.js +421 -0
  33. package/src/plugins/GLTFLoaderPlugin/GLTFSceneModelLoader.js +669 -0
  34. package/src/plugins/GLTFLoaderPlugin/index.js +2 -0
  35. package/src/plugins/LASLoaderPlugin/LASDefaultDataSource.js +58 -0
  36. package/src/plugins/LASLoaderPlugin/LASLoaderPlugin.js +518 -0
  37. package/src/plugins/LASLoaderPlugin/index.js +1 -0
  38. package/src/plugins/LASLoaderPlugin/loadLASHeader.js +183 -0
  39. package/src/plugins/NavCubePlugin/CubeTextureCanvas.js +289 -0
  40. package/src/plugins/NavCubePlugin/NavCubePlugin.js +752 -0
  41. package/src/plugins/NavCubePlugin/index.js +1 -0
  42. package/src/plugins/OBJLoaderPlugin/OBJLoaderPlugin.js +145 -0
  43. package/src/plugins/OBJLoaderPlugin/OBJSceneGraphLoader.js +777 -0
  44. package/src/plugins/OBJLoaderPlugin/index.js +1 -0
  45. package/src/plugins/STLLoaderPlugin/STLDefaultDataSource.js +33 -0
  46. package/src/plugins/STLLoaderPlugin/STLLoaderPlugin.js +274 -0
  47. package/src/plugins/STLLoaderPlugin/STLSceneGraphLoader.js +313 -0
  48. package/src/plugins/STLLoaderPlugin/index.js +2 -0
  49. package/src/plugins/SectionPlanesPlugin/Control.js +1328 -0
  50. package/src/plugins/SectionPlanesPlugin/Overview.js +249 -0
  51. package/src/plugins/SectionPlanesPlugin/Plane.js +169 -0
  52. package/src/plugins/SectionPlanesPlugin/SectionPlanesPlugin.js +404 -0
  53. package/src/plugins/SectionPlanesPlugin/index.js +1 -0
  54. package/src/plugins/SkyboxesPlugin/SkyboxesPlugin.js +134 -0
  55. package/src/plugins/SkyboxesPlugin/index.js +1 -0
  56. package/src/plugins/StoreyViewsPlugin/IFCStoreyPlanObjectStates.js +77 -0
  57. package/src/plugins/StoreyViewsPlugin/Storey.js +61 -0
  58. package/src/plugins/StoreyViewsPlugin/StoreyMap.js +57 -0
  59. package/src/plugins/StoreyViewsPlugin/StoreyViewsPlugin.js +825 -0
  60. package/src/plugins/StoreyViewsPlugin/index.js +1 -0
  61. package/src/plugins/TreeViewPlugin/TreeViewNode.js +97 -0
  62. package/src/plugins/TreeViewPlugin/TreeViewPlugin.js +1424 -0
  63. package/src/plugins/TreeViewPlugin/index.js +1 -0
  64. package/src/plugins/ViewCullPlugin/ViewCullPlugin.js +295 -0
  65. package/src/plugins/ViewCullPlugin/index.js +1 -0
  66. package/src/plugins/WebIFCLoaderPlugin/WebIFCDefaultDataSource.js +58 -0
  67. package/src/plugins/WebIFCLoaderPlugin/WebIFCLoaderPlugin.js +942 -0
  68. package/src/plugins/WebIFCLoaderPlugin/index.js +1 -0
  69. package/src/plugins/XKTLoaderPlugin/XKTDefaultDataSource.js +95 -0
  70. package/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js +1107 -0
  71. package/src/plugins/XKTLoaderPlugin/index.js +2 -0
  72. package/src/plugins/XKTLoaderPlugin/parsers/ParserV1.js +169 -0
  73. package/src/plugins/XKTLoaderPlugin/parsers/ParserV10.js +656 -0
  74. package/src/plugins/XKTLoaderPlugin/parsers/ParserV2.js +230 -0
  75. package/src/plugins/XKTLoaderPlugin/parsers/ParserV3.js +223 -0
  76. package/src/plugins/XKTLoaderPlugin/parsers/ParserV4.js +283 -0
  77. package/src/plugins/XKTLoaderPlugin/parsers/ParserV5.js +246 -0
  78. package/src/plugins/XKTLoaderPlugin/parsers/ParserV6.js +301 -0
  79. package/src/plugins/XKTLoaderPlugin/parsers/ParserV7.js +439 -0
  80. package/src/plugins/XKTLoaderPlugin/parsers/ParserV8.js +563 -0
  81. package/src/plugins/XKTLoaderPlugin/parsers/ParserV9.js +514 -0
  82. package/src/plugins/XKTLoaderPlugin/parsers/lib/pako.js +2 -0
  83. package/src/plugins/XML3DLoaderPlugin/XML3DLoaderPlugin.js +238 -0
  84. package/src/plugins/XML3DLoaderPlugin/XML3DSceneGraphLoader.js +1279 -0
  85. package/src/plugins/XML3DLoaderPlugin/index.js +1 -0
  86. package/src/plugins/XML3DLoaderPlugin/zipjs/.jshintrc +11 -0
  87. package/src/plugins/XML3DLoaderPlugin/zipjs/deflate.js +2060 -0
  88. package/src/plugins/XML3DLoaderPlugin/zipjs/inflate.js +2155 -0
  89. package/src/plugins/XML3DLoaderPlugin/zipjs/mime-types.js +1002 -0
  90. package/src/plugins/XML3DLoaderPlugin/zipjs/pako/codecs.js +64 -0
  91. package/src/plugins/XML3DLoaderPlugin/zipjs/z-worker.js +153 -0
  92. package/src/plugins/XML3DLoaderPlugin/zipjs/zip-ext.js +267 -0
  93. package/src/plugins/XML3DLoaderPlugin/zipjs/zip-fs.js +553 -0
  94. package/src/plugins/XML3DLoaderPlugin/zipjs/zip.js +991 -0
  95. package/src/plugins/XML3DLoaderPlugin/zipjs/zlib-asm/codecs.js +49 -0
  96. package/src/plugins/index.js +21 -0
  97. package/src/plugins/lib/culling/ObjectCullStates.js +208 -0
  98. package/src/plugins/lib/earcut.js +677 -0
  99. package/src/plugins/lib/html/Dot.js +145 -0
  100. package/src/plugins/lib/html/Label.js +156 -0
  101. package/src/plugins/lib/html/Wire.js +191 -0
  102. package/src/viewer/Configs.js +79 -0
  103. package/src/viewer/Plugin.js +224 -0
  104. package/src/viewer/Viewer.js +535 -0
  105. package/src/viewer/index.js +5 -0
  106. package/src/viewer/localization/LocaleService.js +475 -0
  107. package/src/viewer/metadata/IFCObjectDefaultColors.js +162 -0
  108. package/src/viewer/metadata/IFCObjectDefaults.js +17 -0
  109. package/src/viewer/metadata/MetaModel.js +389 -0
  110. package/src/viewer/metadata/MetaObject.js +218 -0
  111. package/src/viewer/metadata/MetaScene.js +336 -0
  112. package/src/viewer/metadata/Property.js +55 -0
  113. package/src/viewer/metadata/PropertySet.js +77 -0
  114. package/src/viewer/scene/Bitmap/Bitmap.js +470 -0
  115. package/src/viewer/scene/Bitmap/index.js +1 -0
  116. package/src/viewer/scene/CameraControl/CameraControl.js +1737 -0
  117. package/src/viewer/scene/CameraControl/lib/CameraUpdater.js +312 -0
  118. package/src/viewer/scene/CameraControl/lib/controllers/PanController.js +112 -0
  119. package/src/viewer/scene/CameraControl/lib/controllers/PickController.js +264 -0
  120. package/src/viewer/scene/CameraControl/lib/controllers/PivotController.js +384 -0
  121. package/src/viewer/scene/CameraControl/lib/handlers/KeyboardAxisViewHandler.js +122 -0
  122. package/src/viewer/scene/CameraControl/lib/handlers/KeyboardPanRotateDollyHandler.js +183 -0
  123. package/src/viewer/scene/CameraControl/lib/handlers/MouseMiscHandler.js +68 -0
  124. package/src/viewer/scene/CameraControl/lib/handlers/MousePanRotateDollyHandler.js +345 -0
  125. package/src/viewer/scene/CameraControl/lib/handlers/MousePickHandler.js +372 -0
  126. package/src/viewer/scene/CameraControl/lib/handlers/TouchPanRotateAndDollyHandler.js +269 -0
  127. package/src/viewer/scene/CameraControl/lib/handlers/TouchPickHandler.js +235 -0
  128. package/src/viewer/scene/Component.js +907 -0
  129. package/src/viewer/scene/Entity.js +502 -0
  130. package/src/viewer/scene/ImagePlane/ImagePlane.js +570 -0
  131. package/src/viewer/scene/ImagePlane/index.js +1 -0
  132. package/src/viewer/scene/LineSet/LineSet.js +164 -0
  133. package/src/viewer/scene/LineSet/index.js +1 -0
  134. package/src/viewer/scene/camera/Camera.js +912 -0
  135. package/src/viewer/scene/camera/CameraFlightAnimation.js +669 -0
  136. package/src/viewer/scene/camera/CameraPath.js +194 -0
  137. package/src/viewer/scene/camera/CameraPathAnimation.js +326 -0
  138. package/src/viewer/scene/camera/CustomProjection.js +149 -0
  139. package/src/viewer/scene/camera/Frustum.js +316 -0
  140. package/src/viewer/scene/camera/Ortho.js +286 -0
  141. package/src/viewer/scene/camera/Perspective.js +304 -0
  142. package/src/viewer/scene/camera/index.js +2 -0
  143. package/src/viewer/scene/canvas/Canvas.js +492 -0
  144. package/src/viewer/scene/canvas/Spinner.js +323 -0
  145. package/src/viewer/scene/constants/constants.js +371 -0
  146. package/src/viewer/scene/core.js +233 -0
  147. package/src/viewer/scene/geometry/Geometry.js +33 -0
  148. package/src/viewer/scene/geometry/ReadableGeometry.js +682 -0
  149. package/src/viewer/scene/geometry/VBOGeometry.js +319 -0
  150. package/src/viewer/scene/geometry/builders/buildBoxGeometry.js +238 -0
  151. package/src/viewer/scene/geometry/builders/buildBoxLinesGeometry.js +106 -0
  152. package/src/viewer/scene/geometry/builders/buildCylinderGeometry.js +271 -0
  153. package/src/viewer/scene/geometry/builders/buildGridGeometry.js +102 -0
  154. package/src/viewer/scene/geometry/builders/buildPlaneGeometry.js +168 -0
  155. package/src/viewer/scene/geometry/builders/buildSphereGeometry.js +161 -0
  156. package/src/viewer/scene/geometry/builders/buildTorusGeometry.js +172 -0
  157. package/src/viewer/scene/geometry/builders/buildVectorTextGeometry.js +1721 -0
  158. package/src/viewer/scene/geometry/builders/index.js +8 -0
  159. package/src/viewer/scene/geometry/index.js +4 -0
  160. package/src/viewer/scene/geometry/loaders/index.js +2 -0
  161. package/src/viewer/scene/geometry/loaders/load3DSGeometry.js +103 -0
  162. package/src/viewer/scene/geometry/loaders/loadOBJGeometry.js +130 -0
  163. package/src/viewer/scene/index.js +23 -0
  164. package/src/viewer/scene/input/Input.js +1325 -0
  165. package/src/viewer/scene/libs/k3d.js +1032 -0
  166. package/src/viewer/scene/lights/AmbientLight.js +175 -0
  167. package/src/viewer/scene/lights/CubeTexture.js +156 -0
  168. package/src/viewer/scene/lights/DirLight.js +314 -0
  169. package/src/viewer/scene/lights/Light.js +29 -0
  170. package/src/viewer/scene/lights/LightMap.js +77 -0
  171. package/src/viewer/scene/lights/PointLight.js +395 -0
  172. package/src/viewer/scene/lights/ReflectionMap.js +79 -0
  173. package/src/viewer/scene/lights/Shadow.js +138 -0
  174. package/src/viewer/scene/lights/index.js +5 -0
  175. package/src/viewer/scene/lod/LOD.js +162 -0
  176. package/src/viewer/scene/lod/LODCullingManager.js +83 -0
  177. package/src/viewer/scene/lod/LODState.js +125 -0
  178. package/src/viewer/scene/lod/index.js +1 -0
  179. package/src/viewer/scene/marker/Marker.js +383 -0
  180. package/src/viewer/scene/marker/SpriteMarker.js +356 -0
  181. package/src/viewer/scene/marker/index.js +2 -0
  182. package/src/viewer/scene/materials/EdgeMaterial.js +359 -0
  183. package/src/viewer/scene/materials/EmphasisMaterial.js +613 -0
  184. package/src/viewer/scene/materials/Fresnel.js +222 -0
  185. package/src/viewer/scene/materials/LambertMaterial.js +378 -0
  186. package/src/viewer/scene/materials/LinesMaterial.js +169 -0
  187. package/src/viewer/scene/materials/Material.js +39 -0
  188. package/src/viewer/scene/materials/MetallicMaterial.js +820 -0
  189. package/src/viewer/scene/materials/PhongMaterial.js +860 -0
  190. package/src/viewer/scene/materials/PointsMaterial.js +409 -0
  191. package/src/viewer/scene/materials/SpecularMaterial.js +807 -0
  192. package/src/viewer/scene/materials/Texture.js +513 -0
  193. package/src/viewer/scene/materials/index.js +8 -0
  194. package/src/viewer/scene/math/Frustum.js +118 -0
  195. package/src/viewer/scene/math/buildEdgeIndices.js +162 -0
  196. package/src/viewer/scene/math/geometryCompressionUtils.js +365 -0
  197. package/src/viewer/scene/math/index.js +3 -0
  198. package/src/viewer/scene/math/math.js +5363 -0
  199. package/src/viewer/scene/math/rtcCoords.js +139 -0
  200. package/src/viewer/scene/mementos/CameraMemento.js +200 -0
  201. package/src/viewer/scene/mementos/ModelMemento.js +263 -0
  202. package/src/viewer/scene/mementos/ObjectsMemento.js +259 -0
  203. package/src/viewer/scene/mementos/index.js +3 -0
  204. package/src/viewer/scene/mesh/Mesh.js +2202 -0
  205. package/src/viewer/scene/mesh/draw/DrawRenderer.js +986 -0
  206. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1570 -0
  207. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +249 -0
  208. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +158 -0
  209. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +276 -0
  210. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +261 -0
  211. package/src/viewer/scene/mesh/index.js +1 -0
  212. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +207 -0
  213. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +156 -0
  214. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +210 -0
  215. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +142 -0
  216. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +186 -0
  217. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +116 -0
  218. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  219. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +98 -0
  220. package/src/viewer/scene/metriqs/Metriqs.js +259 -0
  221. package/src/viewer/scene/model/ENTITY_FLAGS.js +21 -0
  222. package/src/viewer/scene/model/PerformanceModel.js +26 -0
  223. package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
  224. package/src/viewer/scene/model/SceneModel.js +3817 -0
  225. package/src/viewer/scene/model/SceneModelEntity.js +478 -0
  226. package/src/viewer/scene/model/SceneModelMesh.js +160 -0
  227. package/src/viewer/scene/model/SceneModelTexture.js +17 -0
  228. package/src/viewer/scene/model/SceneModelTextureSet.js +17 -0
  229. package/src/viewer/scene/model/VBOSceneModel.js +26 -0
  230. package/src/viewer/scene/model/compression.js +227 -0
  231. package/src/viewer/scene/model/dtx/triangles/BindableDataTexture.js +31 -0
  232. package/src/viewer/scene/model/dtx/triangles/DataTextureGenerator.js +631 -0
  233. package/src/viewer/scene/model/dtx/triangles/DataTextureState.js +288 -0
  234. package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureBuffer.js +31 -0
  235. package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureLayer.js +1329 -0
  236. package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureRenderers.js +278 -0
  237. package/src/viewer/scene/model/dtx/triangles/calculateUniquePositions.js +126 -0
  238. package/src/viewer/scene/model/dtx/triangles/dataTextureRamStats.js +54 -0
  239. package/src/viewer/scene/model/dtx/triangles/rebucketPositions.js +347 -0
  240. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureColorRenderer.js +633 -0
  241. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureDepthRenderer.js +475 -0
  242. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesColorRenderer.js +426 -0
  243. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesRenderer.js +430 -0
  244. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureNormalsRenderer.js +341 -0
  245. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureOcclusionRenderer.js +442 -0
  246. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickDepthRenderer.js +451 -0
  247. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickMeshRenderer.js +436 -0
  248. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsFlatRenderer.js +502 -0
  249. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsRenderer.js +430 -0
  250. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSilhouetteRenderer.js +469 -0
  251. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthBufInitRenderer.js +451 -0
  252. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthRenderer.js +424 -0
  253. package/src/viewer/scene/model/index.js +3 -0
  254. package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
  255. package/src/viewer/scene/model/vbo/VBOSceneModelRenderers.js +805 -0
  256. package/src/viewer/scene/model/vbo/float16.js +760 -0
  257. package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingBuffer.js +21 -0
  258. package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingLayer.js +744 -0
  259. package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingRenderers.js +71 -0
  260. package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingColorRenderer.js +116 -0
  261. package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingSilhouetteRenderer.js +126 -0
  262. package/src/viewer/scene/model/vbo/linesInstancing/LinesInstancingLayer.js +653 -0
  263. package/src/viewer/scene/model/vbo/linesInstancing/LinesInstancingRenderers.js +71 -0
  264. package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingColorRenderer.js +150 -0
  265. package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingSilhouetteRenderer.js +128 -0
  266. package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingBuffer.js +22 -0
  267. package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingLayer.js +753 -0
  268. package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingRenderers.js +116 -0
  269. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingColorRenderer.js +167 -0
  270. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingOcclusionRenderer.js +135 -0
  271. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickDepthRenderer.js +154 -0
  272. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickMeshRenderer.js +146 -0
  273. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingShadowRenderer.js +108 -0
  274. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingSilhouetteRenderer.js +147 -0
  275. package/src/viewer/scene/model/vbo/pointsInstancing/PointsInstancingLayer.js +684 -0
  276. package/src/viewer/scene/model/vbo/pointsInstancing/PointsInstancingRenderers.js +146 -0
  277. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingColorRenderer.js +174 -0
  278. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingDepthRenderer.js +156 -0
  279. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingOcclusionRenderer.js +151 -0
  280. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickDepthRenderer.js +167 -0
  281. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickMeshRenderer.js +151 -0
  282. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingShadowRenderer.js +121 -0
  283. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingSilhouetteRenderer.js +156 -0
  284. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthBufInitRenderer.js +351 -0
  285. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthRenderer.js +365 -0
  286. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingRenderers.js +71 -0
  287. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthBufInitRenderer.js +381 -0
  288. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthRenderer.js +374 -0
  289. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingRenderers.js +71 -0
  290. package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingBuffer.js +26 -0
  291. package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingLayer.js +1322 -0
  292. package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingRenderers.js +322 -0
  293. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorRenderer.js +240 -0
  294. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorTextureRenderer.js +271 -0
  295. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingDepthRenderer.js +127 -0
  296. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesColorRenderer.js +129 -0
  297. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesRenderer.js +134 -0
  298. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingFlatColorRenderer.js +237 -0
  299. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingNormalsRenderer.js +139 -0
  300. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingOcclusionRenderer.js +127 -0
  301. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPBRRenderer.js +563 -0
  302. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickDepthRenderer.js +143 -0
  303. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickMeshRenderer.js +130 -0
  304. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsFlatRenderer.js +119 -0
  305. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsRenderer.js +129 -0
  306. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingShadowRenderer.js +108 -0
  307. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingSilhouetteRenderer.js +137 -0
  308. package/src/viewer/scene/model/vbo/trianglesInstancing/TrianglesInstancingLayer.js +1167 -0
  309. package/src/viewer/scene/model/vbo/trianglesInstancing/TrianglesInstancingRenderers.js +322 -0
  310. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorRenderer.js +253 -0
  311. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorTextureRenderer.js +278 -0
  312. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingDepthRenderer.js +125 -0
  313. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesColorRenderer.js +131 -0
  314. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesRenderer.js +134 -0
  315. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatColorRenderer.js +244 -0
  316. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatNormalsRenderer.js +130 -0
  317. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingNormalsRenderer.js +140 -0
  318. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingOcclusionRenderer.js +130 -0
  319. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPBRRenderer.js +563 -0
  320. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickDepthRenderer.js +148 -0
  321. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickMeshRenderer.js +135 -0
  322. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsFlatRenderer.js +130 -0
  323. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsRenderer.js +144 -0
  324. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingShadowRenderer.js +113 -0
  325. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingSilhouetteRenderer.js +141 -0
  326. package/src/viewer/scene/nodes/Node.js +1383 -0
  327. package/src/viewer/scene/nodes/index.js +1 -0
  328. package/src/viewer/scene/paths/CubicBezierCurve.js +194 -0
  329. package/src/viewer/scene/paths/Curve.js +183 -0
  330. package/src/viewer/scene/paths/Path.js +239 -0
  331. package/src/viewer/scene/paths/QuadraticBezierCurve.js +161 -0
  332. package/src/viewer/scene/paths/SplineCurve.js +133 -0
  333. package/src/viewer/scene/paths/index.js +5 -0
  334. package/src/viewer/scene/postfx/SAO.js +543 -0
  335. package/src/viewer/scene/scene/Scene.js +2627 -0
  336. package/src/viewer/scene/sectionPlane/SectionPlane.js +194 -0
  337. package/src/viewer/scene/sectionPlane/index.js +1 -0
  338. package/src/viewer/scene/skybox/Skybox.js +123 -0
  339. package/src/viewer/scene/skybox/index.js +1 -0
  340. package/src/viewer/scene/stats.js +44 -0
  341. package/src/viewer/scene/utils/Cache.js +29 -0
  342. package/src/viewer/scene/utils/FileLoader.js +160 -0
  343. package/src/viewer/scene/utils/Loader.js +55 -0
  344. package/src/viewer/scene/utils/LoadingManager.js +86 -0
  345. package/src/viewer/scene/utils/Map.js +45 -0
  346. package/src/viewer/scene/utils/Queue.js +56 -0
  347. package/src/viewer/scene/utils/WorkerPool.js +73 -0
  348. package/src/viewer/scene/utils/index.js +6 -0
  349. package/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/KTX2TextureTranscoder.js +650 -0
  350. package/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/index.js +1 -0
  351. package/src/viewer/scene/utils/textureTranscoders/TextureTranscoder.js +31 -0
  352. package/src/viewer/scene/utils/textureTranscoders/index.js +2 -0
  353. package/src/viewer/scene/utils.js +452 -0
  354. package/src/viewer/scene/vfc/VFC.js +82 -0
  355. package/src/viewer/scene/vfc/VFCManager.js +54 -0
  356. package/src/viewer/scene/vfc/VFCState.js +391 -0
  357. package/src/viewer/scene/vfc/cluster-helper.js +134 -0
  358. package/src/viewer/scene/vfc/index.js +1 -0
  359. package/src/viewer/scene/vfc/rbush3d.js +848 -0
  360. package/src/viewer/scene/vfc/xeokit-cluster.js +418 -0
  361. package/src/viewer/scene/viewport/Viewport.js +212 -0
  362. package/src/viewer/scene/webgl/ArrayBuf.js +121 -0
  363. package/src/viewer/scene/webgl/Attribute.js +23 -0
  364. package/src/viewer/scene/webgl/Drawable.js +270 -0
  365. package/src/viewer/scene/webgl/FrameContext.js +313 -0
  366. package/src/viewer/scene/webgl/PickResult.js +339 -0
  367. package/src/viewer/scene/webgl/Pickable.js +69 -0
  368. package/src/viewer/scene/webgl/Program.js +181 -0
  369. package/src/viewer/scene/webgl/RenderBuffer.js +350 -0
  370. package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
  371. package/src/viewer/scene/webgl/RenderFlags.js +203 -0
  372. package/src/viewer/scene/webgl/RenderState.js +40 -0
  373. package/src/viewer/scene/webgl/Renderer.js +1654 -0
  374. package/src/viewer/scene/webgl/Sampler.js +18 -0
  375. package/src/viewer/scene/webgl/Shader.js +49 -0
  376. package/src/viewer/scene/webgl/Texture2D.js +442 -0
  377. package/src/viewer/scene/webgl/convertConstant.js +244 -0
  378. package/src/viewer/scene/webgl/getExtension.js +32 -0
  379. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +214 -0
  380. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +426 -0
  381. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
  382. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +376 -0
  383. package/src/viewer/scene/webgl/webglEnums.js +61 -0
  384. package/src/viewer/scene/webglInfo.js +47 -0
@@ -0,0 +1,535 @@
1
+ import {Scene} from "./scene/scene/Scene.js";
2
+ import {CameraFlightAnimation} from "./scene/camera/CameraFlightAnimation.js";
3
+ import {CameraControl} from "./scene/CameraControl/CameraControl.js";
4
+ import {MetaScene} from "./metadata/MetaScene.js";
5
+ import {LocaleService} from "./localization/LocaleService.js";
6
+ import html2canvas from 'html2canvas/dist/html2canvas.esm.js';
7
+
8
+ /**
9
+ * The 3D Viewer at the heart of the xeokit SDK.
10
+ *
11
+ * * A Viewer wraps a single {@link Scene}
12
+ * * Add {@link Plugin}s to a Viewer to extend its functionality.
13
+ * * {@link Viewer#metaScene} holds metadata about models in the
14
+ * Viewer's {@link MetaScene}.
15
+ * * Use {@link Viewer#cameraFlight} to fly or jump the {@link Scene}'s
16
+ * {@link Camera} to target positions, boundaries or {@link Entity}s.
17
+ *
18
+ * @public
19
+ */
20
+ class Viewer {
21
+
22
+ /**
23
+ * @constructor
24
+ * @param {Object} cfg Viewer configuration.
25
+ * @param {String} [cfg.id] Optional ID for this Viewer, defaults to the ID of {@link Viewer#scene}, which xeokit automatically generates.
26
+ * @param {String} [cfg.canvasId] ID of an existing HTML canvas for the {@link Viewer#scene} - either this or canvasElement is mandatory. When both values are given, the element reference is always preferred to the ID.
27
+ * @param {HTMLCanvasElement} [cfg.canvasElement] Reference of an existing HTML canvas for the {@link Viewer#scene} - either this or canvasId is mandatory. When both values are given, the element reference is always preferred to the ID.
28
+ * @param {HTMLElement} [cfg.keyboardEventsElement] Optional reference to HTML element on which key events should be handled. Defaults to the HTML Document.
29
+ * @param {String} [cfg.spinnerElementId] ID of existing HTML element to show the {@link Spinner} - internally creates a default element automatically if this is omitted.
30
+ * @param {Number} [cfg.passes=1] The number of times the {@link Viewer#scene} renders per frame.
31
+ * @param {Boolean} [cfg.clearEachPass=false] When doing multiple passes per frame, specifies if to clear the canvas before each pass (true) or just before the first pass (false).
32
+ * @param {Boolean} [cfg.preserveDrawingBuffer=true] Whether or not to preserve the WebGL drawing buffer. This needs to be ````true```` for {@link Viewer#getSnapshot} to work.
33
+ * @param {Boolean} [cfg.transparent=true] Whether or not the canvas is transparent.
34
+ * @param {Boolean} [cfg.premultipliedAlpha=false] Whether or not you want alpha composition with premultiplied alpha. Highlighting and selection works best when this is ````false````.
35
+ * @param {Boolean} [cfg.gammaInput=true] When true, expects that all textures and colors are premultiplied gamma.
36
+ * @param {Boolean} [cfg.gammaOutput=false] Whether or not to render with pre-multiplied gama.
37
+ * @param {Number} [cfg.gammaFactor=2.2] The gamma factor to use when rendering with pre-multiplied gamma.
38
+ * @param {Number[]} [cfg.backgroundColor=[1,1,1]] Sets the canvas background color to use when ````transparent```` is false.
39
+ * @param {Boolean} [cfg.backgroundColorFromAmbientLight=true] When ````transparent```` is false, set this ````true````
40
+ * to derive the canvas background color from {@link AmbientLight#color}, or ````false```` to set the canvas background to ````backgroundColor````.
41
+ * @param {String} [cfg.units="meters"] The measurement unit type. Accepted values are ````"meters"````, ````"metres"````, , ````"centimeters"````, ````"centimetres"````, ````"millimeters"````, ````"millimetres"````, ````"yards"````, ````"feet"```` and ````"inches"````.
42
+ * @param {Number} [cfg.scale=1] The number of Real-space units in each World-space coordinate system unit.
43
+ * @param {Number[]} [cfg.origin=[0,0,0]] The Real-space 3D origin, in current measurement units, at which the World-space coordinate origin ````[0,0,0]```` sits.
44
+ * @param {Boolean} [cfg.saoEnabled=false] Whether to enable Scalable Ambient Obscurance (SAO) effect. See {@link SAO} for more info.
45
+ * @param {Boolean} [cfg.antialias=true] Whether to enable anti-aliasing.
46
+ * @throws {String} Throws an exception when both canvasId or canvasElement are missing or they aren't pointing to a valid HTMLCanvasElement.
47
+ * @param {Boolean} [cfg.alphaDepthMask=true] Whether writing into the depth buffer is enabled or disabled when rendering transparent objects.
48
+ * @param {Boolean} [cfg.entityOffsetsEnabled=false] Whether to enable {@link Entity#offset}. For best performance, only set this ````true```` when you need to use {@link Entity#offset}.
49
+ * @param {Boolean} [cfg.pickSurfacePrecisionEnabled=false] Whether to enable full-precision accuracy when surface picking with {@link Scene#pick}. Note that when ````true````, this configuration will increase the amount of browser memory used by the Viewer. The ````pickSurfacePrecision```` option for ````Scene#pick```` only works if this is set ````true````.
50
+ * @param {Boolean} [cfg.logarithmicDepthBufferEnabled=false] Whether to enable logarithmic depth buffer. When this is true,
51
+ * you can set huge values for {@link Perspective#far} and {@link Ortho#far}, to push the far clipping plane back so
52
+ * that it does not clip huge models.
53
+ * @param {Boolean} [cfg.colorTextureEnabled=true] Whether to enable base color texture rendering.
54
+ * @param {Boolean} [cfg.pbrEnabled=false] Whether to enable physically-based rendering.
55
+ * @param {LocaleService} [cfg.localeService=null] Optional locale-based translation service.
56
+ * @param {Boolean} [cfg.dtxEnabled=false] Whether to enable data texture-based (DTX) scene representation within the Viewer. When this is true, the Viewer will use data textures to
57
+ * store geometry on the GPU for triangle meshes that don't have textures. This gives a much lower memory footprint for these types of model element. This mode may not perform well on low-end GPUs that are optimized
58
+ * to use textures to hold geometry data. Works great on most medium/high-end GPUs found in desktop computers, including the nVIDIA and Intel HD chipsets. Set this false to use the default vertex buffer object (VBO)
59
+ * mode for storing geometry, which is the standard technique used in most graphics engines, and will work adequately on most low-end GPUs.
60
+ */
61
+ constructor(cfg) {
62
+
63
+ /**
64
+ * The Viewer's current language setting.
65
+ * @property language
66
+ * @deprecated
67
+ * @type {String}
68
+ */
69
+ this.language = "en";
70
+
71
+ /**
72
+ * The viewer's locale service.
73
+ *
74
+ * This is configured via the Viewer's constructor.
75
+ *
76
+ * By default, this service will be an instance of {@link LocaleService}, which will just return
77
+ * null translations for all given strings and phrases.
78
+ *
79
+ * @property localeService
80
+ * @type {LocaleService}
81
+ * @since 2.0
82
+ */
83
+ this.localeService = cfg.localeService || new LocaleService();
84
+
85
+ /**
86
+ * The Viewer's {@link Scene}.
87
+ * @property scene
88
+ * @type {Scene}
89
+ */
90
+ this.scene = new Scene(this, {
91
+ canvasId: cfg.canvasId,
92
+ canvasElement: cfg.canvasElement,
93
+ keyboardEventsElement: cfg.keyboardEventsElement,
94
+ contextAttr: {
95
+ preserveDrawingBuffer: cfg.preserveDrawingBuffer !== false,
96
+ premultipliedAlpha: (!!cfg.premultipliedAlpha),
97
+ antialias: (cfg.antialias !== false)
98
+ },
99
+ spinnerElementId: cfg.spinnerElementId,
100
+ transparent: (cfg.transparent !== false),
101
+ gammaInput: true,
102
+ gammaOutput: false,
103
+ backgroundColor: cfg.backgroundColor,
104
+ backgroundColorFromAmbientLight: cfg.backgroundColorFromAmbientLight,
105
+ ticksPerRender: 1,
106
+ ticksPerOcclusionTest: 20,
107
+ units: cfg.units,
108
+ scale: cfg.scale,
109
+ origin: cfg.origin,
110
+ saoEnabled: cfg.saoEnabled,
111
+ alphaDepthMask: (cfg.alphaDepthMask !== false),
112
+ entityOffsetsEnabled: (!!cfg.entityOffsetsEnabled),
113
+ pickSurfacePrecisionEnabled: (!!cfg.pickSurfacePrecisionEnabled),
114
+ logarithmicDepthBufferEnabled: (!!cfg.logarithmicDepthBufferEnabled),
115
+ pbrEnabled: (!!cfg.pbrEnabled),
116
+ lodEnabled: (!!cfg.lodEnabled),
117
+ vfcCulling: (!!cfg.vfcEnabled),
118
+ colorTextureEnabled: (cfg.colorTextureEnabled !== false),
119
+ dtxEnabled: (!!cfg.dtxEnabled)
120
+ });
121
+
122
+ /**
123
+ * Metadata about the {@link Scene} and the models and objects within it.
124
+ * @property metaScene
125
+ * @type {MetaScene}
126
+ * @readonly
127
+ */
128
+ this.metaScene = new MetaScene(this, this.scene);
129
+
130
+ /**
131
+ * The Viewer's ID.
132
+ * @property id
133
+ *
134
+ * @type {String|Number}
135
+ */
136
+ this.id = cfg.id || this.scene.id;
137
+
138
+ /**
139
+ * The Viewer's {@link Camera}. This is also found on {@link Scene#camera}.
140
+ * @property camera
141
+ * @type {Camera}
142
+ */
143
+ this.camera = this.scene.camera;
144
+
145
+ /**
146
+ * The Viewer's {@link CameraFlightAnimation}, which
147
+ * is used to fly the {@link Scene}'s {@link Camera} to given targets.
148
+ * @property cameraFlight
149
+ * @type {CameraFlightAnimation}
150
+ */
151
+ this.cameraFlight = new CameraFlightAnimation(this.scene, {
152
+ duration: 0.5
153
+ });
154
+
155
+ /**
156
+ * The Viewer's {@link CameraControl}, which
157
+ * controls the {@link Scene}'s {@link Camera} with mouse, touch and keyboard input.
158
+ * @property cameraControl
159
+ * @type {CameraControl}
160
+ */
161
+ this.cameraControl = new CameraControl(this.scene, {
162
+ // panToPointer: true,
163
+ doublePickFlyTo: true
164
+ });
165
+
166
+ this._plugins = [];
167
+
168
+ /**
169
+ * Subscriptions to events sent with {@link fire}.
170
+ * @private
171
+ */
172
+ this._eventSubs = {};
173
+ }
174
+
175
+ /**
176
+ * Returns the capabilities of this Viewer.
177
+ *
178
+ * @returns {{astcSupported: boolean, etc1Supported: boolean, pvrtcSupported: boolean, etc2Supported: boolean, dxtSupported: boolean, bptcSupported: boolean}}
179
+ */
180
+ get capabilities() {
181
+ return this.scene.capabilities;
182
+ }
183
+
184
+ /**
185
+ * Subscribes to an event fired at this Viewer.
186
+ *
187
+ * @param {String} event The event
188
+ * @param {Function} callback Callback fired on the event
189
+ */
190
+ on(event, callback) {
191
+ let subs = this._eventSubs[event];
192
+ if (!subs) {
193
+ subs = [];
194
+ this._eventSubs[event] = subs;
195
+ }
196
+ subs.push(callback);
197
+ }
198
+
199
+ /**
200
+ * Fires an event at this Viewer.
201
+ *
202
+ * @param {String} event Event name
203
+ * @param {Object} value Event parameters
204
+ */
205
+ fire(event, value) {
206
+ const subs = this._eventSubs[event];
207
+ if (subs) {
208
+ for (let i = 0, len = subs.length; i < len; i++) {
209
+ subs[i](value);
210
+ }
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Unsubscribes from an event fired at this Viewer.
216
+ * @param event
217
+ */
218
+ off(event) { // TODO
219
+
220
+ }
221
+
222
+ /**
223
+ * Logs a message to the JavaScript developer console, prefixed with the ID of this Viewer.
224
+ *
225
+ * @param {String} msg The message
226
+ */
227
+ log(msg) {
228
+ console.log(`[xeokit viewer ${this.id}]: ${msg}`);
229
+ }
230
+
231
+ /**
232
+ * Logs an error message to the JavaScript developer console, prefixed with the ID of this Viewer.
233
+ *
234
+ * @param {String} msg The error message
235
+ */
236
+ error(msg) {
237
+ console.error(`[xeokit viewer ${this.id}]: ${msg}`);
238
+ }
239
+
240
+ /**
241
+ * Installs a Plugin.
242
+ *
243
+ * @private
244
+ */
245
+ addPlugin(plugin) {
246
+ this._plugins.push(plugin);
247
+ }
248
+
249
+ /**
250
+ * Uninstalls a Plugin, clearing content from it first.
251
+ *
252
+ * @private
253
+ */
254
+ removePlugin(plugin) {
255
+ for (let i = 0, len = this._plugins.length; i < len; i++) {
256
+ const p = this._plugins[i];
257
+ if (p === plugin) {
258
+ if (p.clear) {
259
+ p.clear();
260
+ }
261
+ this._plugins.splice(i, 1);
262
+ return;
263
+ }
264
+ }
265
+ }
266
+
267
+ /**
268
+ * Sends a message to installed Plugins.
269
+ *
270
+ * The message can optionally be accompanied by a value.
271
+ * @private
272
+ */
273
+ sendToPlugins(name, value) {
274
+ for (let i = 0, len = this._plugins.length; i < len; i++) {
275
+ const p = this._plugins[i];
276
+ if (p.send) {
277
+ p.send(name, value);
278
+ }
279
+ }
280
+ }
281
+
282
+ /**
283
+ * @private
284
+ * @deprecated
285
+ */
286
+ clear() {
287
+ throw "Viewer#clear() no longer implemented - use '#sendToPlugins(\"clear\") instead";
288
+ }
289
+
290
+ /**
291
+ * @private
292
+ * @deprecated
293
+ */
294
+ resetView() {
295
+ throw "Viewer#resetView() no longer implemented - use CameraMemento & ObjectsMemento classes instead";
296
+ }
297
+
298
+ /**
299
+ * Enter snapshot mode.
300
+ *
301
+ * Switches rendering to a hidden snapshot canvas.
302
+ *
303
+ * Exit snapshot mode using {@link Viewer#endSnapshot}.
304
+ */
305
+ beginSnapshot() {
306
+ if (this._snapshotBegun) {
307
+ return;
308
+ }
309
+ this.scene._renderer.beginSnapshot();
310
+ this._snapshotBegun = true;
311
+ }
312
+
313
+ /**
314
+ * Gets a snapshot of this Viewer's {@link Scene} as a Base64-encoded image.
315
+ *
316
+ * #### Usage:
317
+ *
318
+ * ````javascript
319
+ * const imageData = viewer.getSnapshot({
320
+ * width: 500,
321
+ * height: 500,
322
+ * format: "png"
323
+ * });
324
+ * ````
325
+ * @param {*} [params] Capture options.
326
+ * @param {Number} [params.width] Desired width of result in pixels - defaults to width of canvas.
327
+ * @param {Number} [params.height] Desired height of result in pixels - defaults to height of canvas.
328
+ * @param {String} [params.format="jpeg"] Desired format; "jpeg", "png" or "bmp".
329
+ * @param {Boolean} [params.includeGizmos=false] When true, will include gizmos like {@link SectionPlane} in the snapshot.
330
+ * @returns {String} String-encoded image data URI.
331
+ */
332
+ getSnapshot(params = {}) {
333
+
334
+ const needFinishSnapshot = (!this._snapshotBegun);
335
+ const resize = (params.width !== undefined && params.height !== undefined);
336
+ const canvas = this.scene.canvas.canvas;
337
+ const saveWidth = canvas.clientWidth;
338
+ const saveHeight = canvas.clientHeight;
339
+ const width = params.width ? Math.floor(params.width) : canvas.width;
340
+ const height = params.height ? Math.floor(params.height) : canvas.height;
341
+
342
+ if (resize) {
343
+ canvas.width = width;
344
+ canvas.height = height;
345
+ }
346
+
347
+ if (!this._snapshotBegun) {
348
+ this.beginSnapshot();
349
+ }
350
+
351
+ if (!params.includeGizmos) {
352
+ this.sendToPlugins("snapshotStarting"); // Tells plugins to hide things that shouldn't be in snapshot
353
+ }
354
+
355
+ const captured = {};
356
+ for (let i = 0, len = this._plugins.length; i < len; i++) {
357
+ const plugin = this._plugins[i];
358
+ if (plugin.getContainerElement) {
359
+ const container = plugin.getContainerElement();
360
+ if (container !== document.body) {
361
+ if (!captured[container.id]) {
362
+ captured[container.id] = true;
363
+ html2canvas(container).then(function (canvas) {
364
+ document.body.appendChild(canvas);
365
+ });
366
+ }
367
+ }
368
+ }
369
+ }
370
+
371
+ this.scene._renderer.renderSnapshot();
372
+
373
+ const imageDataURI = this.scene._renderer.readSnapshot(params);
374
+
375
+ if (resize) {
376
+ canvas.width = saveWidth;
377
+ canvas.height = saveHeight;
378
+
379
+ this.scene.glRedraw();
380
+ }
381
+
382
+ if (!params.includeGizmos) {
383
+ this.sendToPlugins("snapshotFinished");
384
+ }
385
+
386
+ if (needFinishSnapshot) {
387
+ this.endSnapshot();
388
+ }
389
+
390
+ return imageDataURI;
391
+ }
392
+
393
+ /**
394
+ * Gets a snapshot of this Viewer's {@link Scene} as a Base64-encoded image which includes
395
+ * the HTML elements created by various plugins.
396
+ *
397
+ * The snapshot image is composed of an image of the viewer canvas, overlaid with an image
398
+ * of the HTML container element belonging to each installed Viewer plugin. Each container
399
+ * element is only rendered once, so it's OK for plugins to share the same container.
400
+ *
401
+ * #### Usage:
402
+ *
403
+ * ````javascript
404
+ * viewer.getSnapshotWithPlugins({
405
+ * width: 500,
406
+ * height: 500,
407
+ * format: "png"
408
+ * }).then((imageData)=>{
409
+ *
410
+ * });
411
+ * ````
412
+ * @param {*} [params] Capture options.
413
+ * @param {Number} [params.width] Desired width of result in pixels - defaults to width of canvas.
414
+ * @param {Number} [params.height] Desired height of result in pixels - defaults to height of canvas.
415
+ * @param {String} [params.format="jpeg"] Desired format; "jpeg", "png" or "bmp".
416
+ * @param {Boolean} [params.includeGizmos=false] When true, will include gizmos like {@link SectionPlane} in the snapshot.
417
+ * @returns {Promise} Promise which returns a string-encoded image data URI.
418
+ */
419
+ async getSnapshotWithPlugins(params = {}) {
420
+
421
+ // We use gl.readPixels to get the WebGL canvas snapshot in a new
422
+ // HTMLCanvas element, scaled to the target snapshot size, then
423
+ // use html2canvas to render each plugin's container element into
424
+ // that HTMLCanvas. Finally, we save the HTMLCanvas to a bitmap.
425
+
426
+ // We don't rely on html2canvas to up-scale our WebGL canvas
427
+ // when we want a higher-resolution snapshot, which would cause
428
+ // blurring. Instead, we manage the scale and redraw of the WebGL
429
+ // canvas ourselves, in order to allow the Viewer to render the
430
+ // right amount of pixels, for a sharper image.
431
+
432
+
433
+ const needFinishSnapshot = (!this._snapshotBegun);
434
+ const resize = (params.width !== undefined && params.height !== undefined);
435
+ const canvas = this.scene.canvas.canvas;
436
+ const saveWidth = canvas.clientWidth;
437
+ const saveHeight = canvas.clientHeight;
438
+ const snapshotWidth = params.width ? Math.floor(params.width) : canvas.width;
439
+ const snapshotHeight = params.height ? Math.floor(params.height) : canvas.height;
440
+
441
+ if (resize) {
442
+ canvas.width = snapshotWidth;
443
+ canvas.height = snapshotHeight;
444
+ }
445
+
446
+ if (!this._snapshotBegun) {
447
+ this.beginSnapshot();
448
+ }
449
+
450
+ if (!params.includeGizmos) {
451
+ this.sendToPlugins("snapshotStarting"); // Tells plugins to hide things that shouldn't be in snapshot
452
+ }
453
+
454
+ this.scene._renderer.renderSnapshot();
455
+
456
+ const snapshotCanvas = this.scene._renderer.readSnapshotAsCanvas();
457
+
458
+ if (resize) {
459
+ canvas.width = saveWidth;
460
+ canvas.height = saveHeight;
461
+ this.scene.glRedraw();
462
+ }
463
+
464
+ const pluginToCapture = {};
465
+ const pluginContainerElements = [];
466
+
467
+ for (let i = 0, len = this._plugins.length; i < len; i++) { // Find plugin container elements
468
+ const plugin = this._plugins[i];
469
+ if (plugin.getContainerElement) {
470
+ const containerElement = plugin.getContainerElement();
471
+ if (containerElement !== document.body) {
472
+ if (!pluginToCapture[containerElement.id]) {
473
+ pluginToCapture[containerElement.id] = true;
474
+ pluginContainerElements.push(containerElement);
475
+ }
476
+ }
477
+ }
478
+ }
479
+
480
+ for (let i = 0, len = pluginContainerElements.length; i < len; i++) {
481
+ const containerElement = pluginContainerElements[i];
482
+ await html2canvas(containerElement, {
483
+ canvas: snapshotCanvas,
484
+ backgroundColor: null,
485
+ scale: snapshotCanvas.width / containerElement.clientWidth
486
+ });
487
+ }
488
+ if (!params.includeGizmos) {
489
+ this.sendToPlugins("snapshotFinished");
490
+ }
491
+ if (needFinishSnapshot) {
492
+ this.endSnapshot();
493
+ }
494
+ let format = params.format || "png";
495
+ if (format !== "jpeg" && format !== "png" && format !== "bmp") {
496
+ console.error("Unsupported image format: '" + format + "' - supported types are 'jpeg', 'bmp' and 'png' - defaulting to 'png'");
497
+ format = "png";
498
+ }
499
+ if (!params.includeGizmos) {
500
+ this.sendToPlugins("snapshotFinished");
501
+ }
502
+ if (needFinishSnapshot) {
503
+ this.endSnapshot();
504
+ }
505
+ return snapshotCanvas.toDataURL(`image/${format}`);
506
+ }
507
+
508
+ /**
509
+ * Exits snapshot mode.
510
+ *
511
+ * Switches rendering back to the main canvas.
512
+ *
513
+ */
514
+ endSnapshot() {
515
+ if (!this._snapshotBegun) {
516
+ return;
517
+ }
518
+ this.scene._renderer.endSnapshot();
519
+ this.scene._renderer.render({force: true});
520
+ this._snapshotBegun = false;
521
+ }
522
+
523
+ /** Destroys this Viewer.
524
+ */
525
+ destroy() {
526
+ const plugins = this._plugins.slice(); // Array will modify as we delete plugins
527
+ for (let i = 0, len = plugins.length; i < len; i++) {
528
+ const plugin = plugins[i];
529
+ plugin.destroy();
530
+ }
531
+ this.scene.destroy();
532
+ }
533
+ }
534
+
535
+ export {Viewer}
@@ -0,0 +1,5 @@
1
+ export * from "./localization/LocaleService.js";
2
+ export * from "./scene/index.js";
3
+ export * from "./Plugin.js";
4
+ export * from "./Viewer.js";
5
+ export * from "./Configs.js";