@itwin/core-frontend 3.0.0-dev.133 → 3.0.0-dev.138

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 (249) hide show
  1. package/lib/cjs/IModelApp.d.ts +4 -4
  2. package/lib/cjs/IModelApp.js +6 -6
  3. package/lib/cjs/IModelApp.js.map +1 -1
  4. package/lib/cjs/IModelConnection.d.ts +1 -1
  5. package/lib/cjs/IModelConnection.js +1 -1
  6. package/lib/cjs/IModelConnection.js.map +1 -1
  7. package/lib/cjs/IModeljs-css.js +1 -1
  8. package/lib/cjs/IModeljs-css.js.map +1 -1
  9. package/lib/cjs/LocalhostIpcApp.d.ts +2 -1
  10. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  11. package/lib/cjs/LocalhostIpcApp.js +21 -7
  12. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  13. package/lib/cjs/SheetViewState.js +2 -0
  14. package/lib/cjs/SheetViewState.js.map +1 -1
  15. package/lib/cjs/Viewport.d.ts +1 -1
  16. package/lib/cjs/Viewport.js +1 -1
  17. package/lib/cjs/Viewport.js.map +1 -1
  18. package/lib/cjs/core-frontend.d.ts +1 -1
  19. package/lib/cjs/core-frontend.js +1 -1
  20. package/lib/cjs/core-frontend.js.map +1 -1
  21. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
  22. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  23. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
  24. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  25. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
  26. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  27. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +20 -5
  28. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  29. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +26 -3
  30. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  31. package/lib/cjs/quantity-formatting/QuantityFormatter.js +46 -7
  32. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  33. package/lib/cjs/render/RenderSystem.d.ts +0 -2
  34. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  35. package/lib/cjs/render/RenderSystem.js.map +1 -1
  36. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  37. package/lib/cjs/render/webgl/DrawCommand.js +3 -1
  38. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  39. package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
  40. package/lib/cjs/render/webgl/Mesh.js +1 -2
  41. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  42. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  43. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -0
  44. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  45. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -0
  47. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  48. package/lib/cjs/render/webgl/SceneCompositor.js +1 -0
  49. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  50. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
  51. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  52. package/lib/cjs/render/webgl/ShaderBuilder.js +20 -18
  53. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  54. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  55. package/lib/cjs/render/webgl/SolarShadowMap.js +1 -0
  56. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  57. package/lib/cjs/render/webgl/System.d.ts +0 -3
  58. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  59. package/lib/cjs/render/webgl/System.js +0 -3
  60. package/lib/cjs/render/webgl/System.js.map +1 -1
  61. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  62. package/lib/cjs/render/webgl/Target.js +5 -0
  63. package/lib/cjs/render/webgl/Target.js.map +1 -1
  64. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/Technique.js +74 -29
  66. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  67. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -1
  68. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  69. package/lib/cjs/render/webgl/TechniqueFlags.js +10 -1
  70. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  71. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  72. package/lib/cjs/render/webgl/glsl/Blur.js +1 -1
  73. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -2
  74. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -2
  75. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -1
  76. package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -1
  77. package/lib/cjs/render/webgl/glsl/Composite.js +1 -1
  78. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  79. package/lib/cjs/render/webgl/glsl/CopyColor.js +17 -2
  80. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  81. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +2 -2
  82. package/lib/cjs/render/webgl/glsl/CopyStencil.js +6 -6
  83. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
  84. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +2 -2
  85. package/lib/cjs/render/webgl/glsl/Fragment.js +10 -10
  86. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
  87. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +3 -3
  88. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  89. package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -2
  90. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  91. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
  92. package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
  93. package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
  94. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  95. package/lib/cjs/render/webgl/glsl/Surface.js +5 -2
  96. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  97. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
  98. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts +9 -0
  99. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
  100. package/lib/cjs/render/webgl/glsl/Wiremesh.js +40 -0
  101. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -0
  102. package/lib/cjs/tile/B3dmReader.d.ts +1 -1
  103. package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
  104. package/lib/cjs/tile/B3dmReader.js +4 -4
  105. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  106. package/lib/cjs/tile/ContextShareProvider.d.ts.map +1 -1
  107. package/lib/cjs/tile/ContextShareProvider.js +19 -0
  108. package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
  109. package/lib/cjs/tile/GltfReader.d.ts +3 -1
  110. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  111. package/lib/cjs/tile/GltfReader.js +33 -1
  112. package/lib/cjs/tile/GltfReader.js.map +1 -1
  113. package/lib/cjs/tile/I3dmReader.d.ts +1 -1
  114. package/lib/cjs/tile/I3dmReader.d.ts.map +1 -1
  115. package/lib/cjs/tile/I3dmReader.js +4 -4
  116. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  117. package/lib/cjs/tile/RealityModelTileTree.d.ts +2 -1
  118. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  119. package/lib/cjs/tile/RealityModelTileTree.js +29 -10
  120. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  121. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
  122. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  123. package/lib/cjs/tile/RealityTileLoader.js +3 -2
  124. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  125. package/lib/esm/IModelApp.d.ts +4 -4
  126. package/lib/esm/IModelApp.js +6 -6
  127. package/lib/esm/IModelApp.js.map +1 -1
  128. package/lib/esm/IModelConnection.d.ts +1 -1
  129. package/lib/esm/IModelConnection.js +1 -1
  130. package/lib/esm/IModelConnection.js.map +1 -1
  131. package/lib/esm/IModeljs-css.js +1 -1
  132. package/lib/esm/IModeljs-css.js.map +1 -1
  133. package/lib/esm/LocalhostIpcApp.d.ts +2 -1
  134. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  135. package/lib/esm/LocalhostIpcApp.js +22 -8
  136. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  137. package/lib/esm/SheetViewState.js +2 -0
  138. package/lib/esm/SheetViewState.js.map +1 -1
  139. package/lib/esm/Viewport.d.ts +1 -1
  140. package/lib/esm/Viewport.js +1 -1
  141. package/lib/esm/Viewport.js.map +1 -1
  142. package/lib/esm/core-frontend.d.ts +1 -1
  143. package/lib/esm/core-frontend.js +1 -1
  144. package/lib/esm/core-frontend.js.map +1 -1
  145. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
  146. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  147. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
  148. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  149. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
  150. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  151. package/lib/esm/quantity-formatting/BasicUnitsProvider.js +18 -4
  152. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  153. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +26 -3
  154. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  155. package/lib/esm/quantity-formatting/QuantityFormatter.js +45 -7
  156. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  157. package/lib/esm/render/RenderSystem.d.ts +0 -2
  158. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  159. package/lib/esm/render/RenderSystem.js.map +1 -1
  160. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  161. package/lib/esm/render/webgl/DrawCommand.js +3 -1
  162. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  163. package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
  164. package/lib/esm/render/webgl/Mesh.js +1 -2
  165. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  166. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  167. package/lib/esm/render/webgl/PlanarClassifier.js +1 -0
  168. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  169. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  170. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -0
  171. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  172. package/lib/esm/render/webgl/SceneCompositor.js +1 -0
  173. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  174. package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
  175. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  176. package/lib/esm/render/webgl/ShaderBuilder.js +20 -18
  177. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  178. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  179. package/lib/esm/render/webgl/SolarShadowMap.js +1 -0
  180. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  181. package/lib/esm/render/webgl/System.d.ts +0 -3
  182. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  183. package/lib/esm/render/webgl/System.js +0 -3
  184. package/lib/esm/render/webgl/System.js.map +1 -1
  185. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  186. package/lib/esm/render/webgl/Target.js +5 -0
  187. package/lib/esm/render/webgl/Target.js.map +1 -1
  188. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  189. package/lib/esm/render/webgl/Technique.js +74 -29
  190. package/lib/esm/render/webgl/Technique.js.map +1 -1
  191. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -1
  192. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  193. package/lib/esm/render/webgl/TechniqueFlags.js +10 -1
  194. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  195. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  196. package/lib/esm/render/webgl/glsl/Blur.js +1 -1
  197. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -2
  198. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -2
  199. package/lib/esm/render/webgl/glsl/Combine3Textures.js +1 -1
  200. package/lib/esm/render/webgl/glsl/CombineTextures.js +1 -1
  201. package/lib/esm/render/webgl/glsl/Composite.js +1 -1
  202. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  203. package/lib/esm/render/webgl/glsl/CopyColor.js +17 -2
  204. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  205. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +2 -2
  206. package/lib/esm/render/webgl/glsl/CopyStencil.js +6 -6
  207. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
  208. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +2 -2
  209. package/lib/esm/render/webgl/glsl/Fragment.js +10 -10
  210. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
  211. package/lib/esm/render/webgl/glsl/PlanarClassification.js +3 -3
  212. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  213. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -2
  214. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  215. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
  216. package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
  217. package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
  218. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  219. package/lib/esm/render/webgl/glsl/Surface.js +5 -2
  220. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  221. package/lib/esm/render/webgl/glsl/Translucency.js +2 -2
  222. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts +9 -0
  223. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
  224. package/lib/esm/render/webgl/glsl/Wiremesh.js +36 -0
  225. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -0
  226. package/lib/esm/tile/B3dmReader.d.ts +1 -1
  227. package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
  228. package/lib/esm/tile/B3dmReader.js +4 -4
  229. package/lib/esm/tile/B3dmReader.js.map +1 -1
  230. package/lib/esm/tile/ContextShareProvider.d.ts.map +1 -1
  231. package/lib/esm/tile/ContextShareProvider.js +19 -0
  232. package/lib/esm/tile/ContextShareProvider.js.map +1 -1
  233. package/lib/esm/tile/GltfReader.d.ts +3 -1
  234. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  235. package/lib/esm/tile/GltfReader.js +33 -1
  236. package/lib/esm/tile/GltfReader.js.map +1 -1
  237. package/lib/esm/tile/I3dmReader.d.ts +1 -1
  238. package/lib/esm/tile/I3dmReader.d.ts.map +1 -1
  239. package/lib/esm/tile/I3dmReader.js +4 -4
  240. package/lib/esm/tile/I3dmReader.js.map +1 -1
  241. package/lib/esm/tile/RealityModelTileTree.d.ts +2 -1
  242. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  243. package/lib/esm/tile/RealityModelTileTree.js +30 -11
  244. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  245. package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
  246. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  247. package/lib/esm/tile/RealityTileLoader.js +3 -2
  248. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  249. package/package.json +22 -22
@@ -1 +1 @@
1
- {"version":3,"file":"B3dmReader.js","sourceRoot":"","sources":["../../../src/tile/B3dmReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { B3dmHeader, BatchType, ColorDef, ElementAlignedBox3d, Feature, FeatureTable, GltfBufferData, GltfDataType, TileReadStatus } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { BatchedTileIdMap, GltfReader, GltfReaderProps, GltfReaderResult, ShouldAbortReadGltf } from \"./internal\";\r\n\r\n/**\r\n * Deserializes a tile in [b3dm](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Batched3DModel) format.\r\n * @internal\r\n */\r\nexport class B3dmReader extends GltfReader {\r\n private _batchIdRemap = new Map<number, number>();\r\n private _colors?: Array<number>;\r\n\r\n public static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d,\r\n system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, tileCenter: Point3d, transformToRoot?: Transform,\r\n isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap): B3dmReader | undefined {\r\n const header = new B3dmHeader(stream);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n let returnToCenterTransform, pseudoRtcBias;\r\n if (header.featureTableJson && Array.isArray(header.featureTableJson.RTC_CENTER)) {\r\n returnToCenterTransform = Transform.createTranslationXYZ(header.featureTableJson.RTC_CENTER[0], header.featureTableJson.RTC_CENTER[1], header.featureTableJson.RTC_CENTER[2]);\r\n } else {\r\n /**\r\n * This is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\n * capacity of 32 bit integers. It is essentially an ad hoc RTC applied at read time only if the tile is far from the\r\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\r\n * as the vertices are supplied in a quantized format, applying the RTC bias to\r\n * quantization origin will make these tiles work correctly.\r\n */\r\n pseudoRtcBias = Vector3d.create(tileCenter.x, tileCenter.y, tileCenter.z);\r\n }\r\n\r\n if (undefined !== returnToCenterTransform)\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(returnToCenterTransform) : returnToCenterTransform;\r\n\r\n const props = GltfReaderProps.create(stream, yAxisUp);\r\n const batchTableLength = header.featureTableJson ? JsonUtils.asInt(header.featureTableJson.BATCH_LENGTH, 0) : 0;\r\n\r\n return undefined !== props ? new B3dmReader(props, iModel, modelId, is3d, system, range, isLeaf, batchTableLength,\r\n transformToRoot, header.batchTableJson, isCanceled, idMap, pseudoRtcBias) : undefined;\r\n }\r\n\r\n private constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem,\r\n private _range: ElementAlignedBox3d, private _isLeaf: boolean, private _batchTableLength: number, private _transformToRoot?: Transform, private _batchTableJson?: any\r\n , isCanceled?: ShouldAbortReadGltf, private _idMap?: BatchedTileIdMap, private _pseudoRtcBias?: Vector3d) {\r\n super(props, iModel, modelId, is3d, system, BatchType.Primary, isCanceled);\r\n }\r\n\r\n public async read(): Promise<GltfReaderResult> {\r\n // NB: For reality models with no batch table, we want the model ID in the feature table\r\n const featureTable: FeatureTable = new FeatureTable(this._batchTableLength ? this._batchTableLength : 1, this._modelId, this._type);\r\n if (this._batchTableLength > 0 && this._idMap !== undefined && this._batchTableJson !== undefined) {\r\n if (this._batchTableJson.extensions && this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"]) {\r\n const hierarchy = this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"];\r\n const { classIds, classes, parentIds, parentCounts, instancesLength } = hierarchy;\r\n if (classes !== undefined && classIds !== undefined && instancesLength !== 0) {\r\n const classCounts = new Array<number>(classes.length);\r\n classCounts.fill(0);\r\n const classIndexes = new Uint16Array(instancesLength);\r\n for (let i = 0; i < instancesLength; ++i) {\r\n const classId = classIds[i];\r\n classIndexes[i] = classCounts[classId]++;\r\n }\r\n\r\n let parentMap: [][] | undefined;\r\n if (parentIds) {\r\n parentMap = new Array<[]>();\r\n for (let i = 0, parentIndex = 0; i < instancesLength; i++) {\r\n const parentCount = parentCounts === undefined ? 1 : parentCounts[i];\r\n parentMap[i] = parentIds.slice(parentIndex, parentIndex += parentCount);\r\n }\r\n }\r\n\r\n const getProperties = (instance: any, instanceIndex: number) => {\r\n const classId = classIds[instanceIndex];\r\n const instanceClass = classes[classId];\r\n const instances = instanceClass.instances;\r\n const indexInClass = classIndexes[instanceIndex];\r\n for (const key in instances) { // eslint-disable-line guard-for-in\r\n const value = instances[key][indexInClass];\r\n if (value !== undefined && value !== null)\r\n instance[key] = value;\r\n }\r\n if (parentIds !== undefined) {\r\n const thisParents = parentMap![instanceIndex];\r\n for (const parentId of thisParents) {\r\n if (parentId !== instanceIndex)\r\n getProperties(instance, parentId);\r\n }\r\n }\r\n };\r\n for (let batchId = 0; batchId < instancesLength; batchId++) {\r\n const instance: any = {};\r\n getProperties(instance, batchId);\r\n this._batchIdRemap.set(batchId, featureTable.insert(new Feature(this._idMap.getBatchId(instance))));\r\n const cesiumColor = instance[\"cesium#color\"];\r\n if (undefined !== cesiumColor) {\r\n if (!this._colors) {\r\n this._colors = new Array<number>(instancesLength);\r\n this._colors.fill(ColorDef.white.tbgr);\r\n }\r\n this._colors[batchId] = ColorDef.create(cesiumColor).tbgr;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < this._batchTableLength; i++) {\r\n const feature: any = {};\r\n for (const key in this._batchTableJson) // eslint-disable-line guard-for-in\r\n feature[key] = this._batchTableJson[key][i];\r\n\r\n this._batchIdRemap.set(i, featureTable.insert(new Feature(this._idMap.getBatchId(feature))));\r\n }\r\n }\r\n }\r\n\r\n if (featureTable.isEmpty) {\r\n this._batchIdRemap.set(0, 0);\r\n const feature = new Feature(this._modelId);\r\n featureTable.insert(feature);\r\n }\r\n\r\n await this.loadTextures();\r\n if (this._isCanceled)\r\n return { readStatus: TileReadStatus.Canceled, isLeaf: this._isLeaf };\r\n\r\n return this.readGltfAndCreateGraphics(this._isLeaf, featureTable, this._range, this._transformToRoot, this._pseudoRtcBias);\r\n }\r\n\r\n protected override readBatchTable(mesh: Mesh, json: any) {\r\n if (mesh.features !== undefined) {\r\n if (this._batchTableLength > 0 && undefined !== this._batchTableJson && undefined !== json.attributes) {\r\n const view = this.getBufferView(json.attributes, \"_BATCHID\");\r\n let batchIds: undefined | GltfBufferData;\r\n if (undefined !== view && (undefined !== (batchIds = view.toBufferData(GltfDataType.UInt32)) || undefined !== (batchIds = view.toBufferData(GltfDataType.Float)))) {\r\n const indices = [];\r\n const { colors, colorMap } = mesh;\r\n let colorRemap: Uint32Array | undefined;\r\n if (this._colors && this._colors.length === this._batchTableLength) {\r\n colorRemap = new Uint32Array(this._batchTableLength);\r\n\r\n for (let i = 0; i < this._batchTableLength; i++)\r\n colorRemap[i] = colorMap.insert(this._colors[i]);\r\n }\r\n\r\n for (let i = 0; i < batchIds.count; i++) {\r\n const batchId = batchIds.buffer[i * view.stride];\r\n const remapId = this._batchIdRemap.get(batchId);\r\n indices.push(remapId === undefined ? 0 : remapId);\r\n if (colorRemap)\r\n colors.push(colorRemap[batchId]);\r\n }\r\n mesh.features.setIndices(indices);\r\n\r\n }\r\n } else {\r\n mesh.features.add(new Feature(this._modelId), 1);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"B3dmReader.js","sourceRoot":"","sources":["../../../src/tile/B3dmReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { B3dmHeader, BatchType, ColorDef, ElementAlignedBox3d, Feature, FeatureTable, GltfBufferData, GltfDataType, TileReadStatus } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { BatchedTileIdMap, GltfReader, GltfReaderProps, GltfReaderResult, ShouldAbortReadGltf } from \"./internal\";\r\n\r\n/**\r\n * Deserializes a tile in [b3dm](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Batched3DModel) format.\r\n * @internal\r\n */\r\nexport class B3dmReader extends GltfReader {\r\n private _batchIdRemap = new Map<number, number>();\r\n private _colors?: Array<number>;\r\n\r\n public static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d,\r\n system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, tileCenter: Point3d, transformToRoot?: Transform,\r\n isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap, deduplicateVertices=false): B3dmReader | undefined {\r\n const header = new B3dmHeader(stream);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n let returnToCenterTransform, pseudoRtcBias;\r\n if (header.featureTableJson && Array.isArray(header.featureTableJson.RTC_CENTER)) {\r\n returnToCenterTransform = Transform.createTranslationXYZ(header.featureTableJson.RTC_CENTER[0], header.featureTableJson.RTC_CENTER[1], header.featureTableJson.RTC_CENTER[2]);\r\n } else {\r\n /**\r\n * This is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\n * capacity of 32 bit integers. It is essentially an ad hoc RTC applied at read time only if the tile is far from the\r\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\r\n * as the vertices are supplied in a quantized format, applying the RTC bias to\r\n * quantization origin will make these tiles work correctly.\r\n */\r\n pseudoRtcBias = Vector3d.create(tileCenter.x, tileCenter.y, tileCenter.z);\r\n }\r\n\r\n if (undefined !== returnToCenterTransform)\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(returnToCenterTransform) : returnToCenterTransform;\r\n\r\n const props = GltfReaderProps.create(stream, yAxisUp);\r\n const batchTableLength = header.featureTableJson ? JsonUtils.asInt(header.featureTableJson.BATCH_LENGTH, 0) : 0;\r\n\r\n return undefined !== props ? new B3dmReader(props, iModel, modelId, is3d, system, range, isLeaf, batchTableLength,\r\n transformToRoot, header.batchTableJson, isCanceled, idMap, pseudoRtcBias, deduplicateVertices) : undefined;\r\n }\r\n\r\n private constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem,\r\n private _range: ElementAlignedBox3d, private _isLeaf: boolean, private _batchTableLength: number, private _transformToRoot?: Transform, private _batchTableJson?: any\r\n , isCanceled?: ShouldAbortReadGltf, private _idMap?: BatchedTileIdMap, private _pseudoRtcBias?: Vector3d, deduplicateVertices=false) {\r\n super(props, iModel, modelId, is3d, system, BatchType.Primary, isCanceled, deduplicateVertices);\r\n }\r\n\r\n public async read(): Promise<GltfReaderResult> {\r\n // NB: For reality models with no batch table, we want the model ID in the feature table\r\n const featureTable: FeatureTable = new FeatureTable(this._batchTableLength ? this._batchTableLength : 1, this._modelId, this._type);\r\n if (this._batchTableLength > 0 && this._idMap !== undefined && this._batchTableJson !== undefined) {\r\n if (this._batchTableJson.extensions && this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"]) {\r\n const hierarchy = this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"];\r\n const { classIds, classes, parentIds, parentCounts, instancesLength } = hierarchy;\r\n if (classes !== undefined && classIds !== undefined && instancesLength !== 0) {\r\n const classCounts = new Array<number>(classes.length);\r\n classCounts.fill(0);\r\n const classIndexes = new Uint16Array(instancesLength);\r\n for (let i = 0; i < instancesLength; ++i) {\r\n const classId = classIds[i];\r\n classIndexes[i] = classCounts[classId]++;\r\n }\r\n\r\n let parentMap: [][] | undefined;\r\n if (parentIds) {\r\n parentMap = new Array<[]>();\r\n for (let i = 0, parentIndex = 0; i < instancesLength; i++) {\r\n const parentCount = parentCounts === undefined ? 1 : parentCounts[i];\r\n parentMap[i] = parentIds.slice(parentIndex, parentIndex += parentCount);\r\n }\r\n }\r\n\r\n const getProperties = (instance: any, instanceIndex: number) => {\r\n const classId = classIds[instanceIndex];\r\n const instanceClass = classes[classId];\r\n const instances = instanceClass.instances;\r\n const indexInClass = classIndexes[instanceIndex];\r\n for (const key in instances) { // eslint-disable-line guard-for-in\r\n const value = instances[key][indexInClass];\r\n if (value !== undefined && value !== null)\r\n instance[key] = value;\r\n }\r\n if (parentIds !== undefined) {\r\n const thisParents = parentMap![instanceIndex];\r\n for (const parentId of thisParents) {\r\n if (parentId !== instanceIndex)\r\n getProperties(instance, parentId);\r\n }\r\n }\r\n };\r\n for (let batchId = 0; batchId < instancesLength; batchId++) {\r\n const instance: any = {};\r\n getProperties(instance, batchId);\r\n this._batchIdRemap.set(batchId, featureTable.insert(new Feature(this._idMap.getBatchId(instance))));\r\n const cesiumColor = instance[\"cesium#color\"];\r\n if (undefined !== cesiumColor) {\r\n if (!this._colors) {\r\n this._colors = new Array<number>(instancesLength);\r\n this._colors.fill(ColorDef.white.tbgr);\r\n }\r\n this._colors[batchId] = ColorDef.create(cesiumColor).tbgr;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < this._batchTableLength; i++) {\r\n const feature: any = {};\r\n for (const key in this._batchTableJson) // eslint-disable-line guard-for-in\r\n feature[key] = this._batchTableJson[key][i];\r\n\r\n this._batchIdRemap.set(i, featureTable.insert(new Feature(this._idMap.getBatchId(feature))));\r\n }\r\n }\r\n }\r\n\r\n if (featureTable.isEmpty) {\r\n this._batchIdRemap.set(0, 0);\r\n const feature = new Feature(this._modelId);\r\n featureTable.insert(feature);\r\n }\r\n\r\n await this.loadTextures();\r\n if (this._isCanceled)\r\n return { readStatus: TileReadStatus.Canceled, isLeaf: this._isLeaf };\r\n\r\n return this.readGltfAndCreateGraphics(this._isLeaf, featureTable, this._range, this._transformToRoot, this._pseudoRtcBias);\r\n }\r\n\r\n protected override readBatchTable(mesh: Mesh, json: any) {\r\n if (mesh.features !== undefined) {\r\n if (this._batchTableLength > 0 && undefined !== this._batchTableJson && undefined !== json.attributes) {\r\n const view = this.getBufferView(json.attributes, \"_BATCHID\");\r\n let batchIds: undefined | GltfBufferData;\r\n if (undefined !== view && (undefined !== (batchIds = view.toBufferData(GltfDataType.UInt32)) || undefined !== (batchIds = view.toBufferData(GltfDataType.Float)))) {\r\n const indices = [];\r\n const { colors, colorMap } = mesh;\r\n let colorRemap: Uint32Array | undefined;\r\n if (this._colors && this._colors.length === this._batchTableLength) {\r\n colorRemap = new Uint32Array(this._batchTableLength);\r\n\r\n for (let i = 0; i < this._batchTableLength; i++)\r\n colorRemap[i] = colorMap.insert(this._colors[i]);\r\n }\r\n\r\n for (let i = 0; i < batchIds.count; i++) {\r\n const batchId = batchIds.buffer[i * view.stride];\r\n const remapId = this._batchIdRemap.get(batchId);\r\n indices.push(remapId === undefined ? 0 : remapId);\r\n if (colorRemap)\r\n colors.push(colorRemap[batchId]);\r\n }\r\n mesh.features.setIndices(indices);\r\n\r\n }\r\n } else {\r\n mesh.features.add(new Feature(this._modelId), 1);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ContextShareProvider.d.ts","sourceRoot":"","sources":["../../../src/tile/ContextShareProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,sEAAsE;WACxD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IA0BxD,sEAAsE;WACxD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;QAAC,QAAQ,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC;WA0CvI,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAC,QAAQ,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;CAwB3H"}
1
+ {"version":3,"file":"ContextShareProvider.d.ts","sourceRoot":"","sources":["../../../src/tile/ContextShareProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,sEAAsE;WACxD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IA6BxD,sEAAsE;WACxD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;QAAC,QAAQ,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC;WA0DvI,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAC,QAAQ,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;CAwB3H"}
@@ -20,6 +20,9 @@ export class ContextShareProvider {
20
20
  // Not a valid URL for Context share
21
21
  return false;
22
22
  }
23
+ // If api.bentley.com/realitydata is used, it is context share
24
+ if (tilesetUrl.toLowerCase().includes("api.bentley.com/realitydata"))
25
+ return true;
23
26
  // detect if it is a RDS url
24
27
  const formattedUrl1 = attUrl.pathname.replace(/~2F/g, "/").replace(/\\/g, "/");
25
28
  if (formattedUrl1) {
@@ -48,6 +51,22 @@ export class ContextShareProvider {
48
51
  // Not a valid URL and not equal, probably $cesiumAsset
49
52
  return invalidUrlInfo;
50
53
  }
54
+ // If api.bentley.com/realitydata is used, it is context share
55
+ if (tilesetUrl.toLowerCase().includes("api.bentley.com/realitydata")) {
56
+ const lcTilesetUrl = tilesetUrl.toLowerCase();
57
+ // NOTICE: We assume it is a ThreeDTile BUT this could technically be a point cloud (OPC).
58
+ // This method was used in typical workflow where format was always ThreeDTile and is here for legacy support.
59
+ // We don't want to make a call to RDS to resolve format since this method must not be async (it is used in workflow that are not async)
60
+ const format = RealityDataFormat.ThreeDTile;
61
+ const indexId = lcTilesetUrl.indexOf("realitydata/") + 12; // lenght of "realitydata/" = 12;
62
+ const id = lcTilesetUrl.substr(indexId, Guid.empty.length);
63
+ const indexProjectId = lcTilesetUrl.indexOf("projectid=") + 10; // lenght of "projectid=" = 10;
64
+ let projectId;
65
+ if (indexProjectId && indexProjectId > 0)
66
+ projectId = lcTilesetUrl.substr(indexProjectId, Guid.empty.length);
67
+ const apimContextShareKey = { provider: RealityDataProvider.ContextShare, format, id, iTwinId: projectId };
68
+ return apimContextShareKey;
69
+ }
51
70
  // detect if it is a RDS url
52
71
  const formattedUrl1 = attUrl.pathname.replace(/~2F/g, "/").replace(/\\/g, "/");
53
72
  if (formattedUrl1) {
@@ -1 +1 @@
1
- {"version":3,"file":"ContextShareProvider.js","sourceRoot":"","sources":["../../../src/tile/ContextShareProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { RealityDataFormat, RealityDataProvider } from \"@itwin/core-common\";\r\n\r\n/**\r\n * This class provide methods used to interpret url to Project Wise Context Share (RealityDataProvider.ContextShare)\r\n * @internal\r\n */\r\nexport class ContextShareProvider {\r\n /** Return true if this is a supported url to this service provider */\r\n public static isProviderUrl(tilesetUrl: string): boolean {\r\n // Try to extract realityDataId from URL and if not possible, use the url as the key\r\n let attUrl: URL;\r\n try {\r\n attUrl = new URL(tilesetUrl);\r\n } catch (e) {\r\n // Not a valid URL for Context share\r\n return false;\r\n }\r\n // detect if it is a RDS url\r\n const formattedUrl1 = attUrl.pathname.replace(/~2F/g, \"/\").replace(/\\\\/g, \"/\");\r\n if (formattedUrl1) {\r\n const urlParts1 = formattedUrl1.split(\"/\").map((entry: string) => entry.replace(/%2D/g, \"-\"));\r\n let partOffset1: number = 0;\r\n urlParts1.find((value, index) => {\r\n if (value === \"Repositories\") {\r\n partOffset1 = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n const isRDSUrl = (urlParts1[partOffset1] === \"Repositories\") && (urlParts1[partOffset1 + 1].match(\"S3MXECPlugin--*\") !== null) && (urlParts1[partOffset1 + 2] === \"S3MX\");\r\n return isRDSUrl;\r\n }\r\n return false;\r\n }\r\n /** Return true if this is a supported url to this service provider */\r\n public static getInfoFromUrl(tilesetUrl: string): {provider: RealityDataProvider, format: RealityDataFormat, id: string, iTwinId: string | undefined} {\r\n const invalidUrlInfo = { provider: RealityDataProvider.TilesetUrl, format: RealityDataFormat.ThreeDTile, id: tilesetUrl, iTwinId: undefined };\r\n let attUrl: URL;\r\n try {\r\n attUrl = new URL(tilesetUrl);\r\n } catch (e) {\r\n // Not a valid URL and not equal, probably $cesiumAsset\r\n return invalidUrlInfo;\r\n }\r\n // detect if it is a RDS url\r\n const formattedUrl1 = attUrl.pathname.replace(/~2F/g, \"/\").replace(/\\\\/g, \"/\");\r\n if (formattedUrl1) {\r\n const urlParts1 = formattedUrl1.split(\"/\").map((entry: string) => entry.replace(/%2D/g, \"-\"));\r\n let partOffset1: number = 0;\r\n urlParts1.find((value, index) => {\r\n if (value === \"Repositories\") {\r\n partOffset1 = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n const isOPC = attUrl.pathname.match(\".opc*\") !== null;\r\n const isRDSUrl = (urlParts1[partOffset1] === \"Repositories\") && (urlParts1[partOffset1 + 1].match(\"S3MXECPlugin--*\") !== null) && (urlParts1[partOffset1 + 2] === \"S3MX\");\r\n let projectId: string | undefined;\r\n const projectIdSection = urlParts1.find((val: string) => val.includes(\"--\"));\r\n if (projectIdSection)\r\n projectId = projectIdSection.split(\"--\")[1];\r\n // Make sure the url to compare are REALITYMESH3DTILES url, otherwise, compare the url directly\r\n if (isRDSUrl || isOPC) {\r\n // Make sure the reality data id are the same\r\n const guid1 = urlParts1.find(Guid.isGuid);\r\n if (guid1 !== undefined) {\r\n const provider = RealityDataProvider.ContextShare;\r\n const format = isOPC ? RealityDataFormat.OPC : RealityDataFormat.ThreeDTile;\r\n const contextShareKey = { provider, format, id: guid1, iTwinId: projectId };\r\n return contextShareKey;\r\n }\r\n }\r\n }\r\n // Not a valid URL and not equal, probably $cesiumAsset\r\n return invalidUrlInfo;\r\n }\r\n public static getInfoFromBlobUrl(blobUrl: string): {provider: RealityDataProvider, format: RealityDataFormat, id: string } {\r\n let format = RealityDataFormat.ThreeDTile;\r\n let provider = RealityDataProvider.TilesetUrl;\r\n const url = new URL(blobUrl);\r\n\r\n // If we cannot interpret that url pass in parameter we just fallback to old implementation\r\n if(!url.pathname)\r\n return { provider, format, id: blobUrl };\r\n\r\n // const accountName = url.hostname.split(\".\")[0];\r\n let containerName= \"\";\r\n if (url.pathname) {\r\n const pathSplit = url.pathname.split(\"/\");\r\n containerName = pathSplit[1];\r\n }\r\n\r\n // const blobFileName = `/${pathSplit[2]}`;\r\n // const sasToken = url.search.substr(1);\r\n const isOPC = url.pathname.match(\".opc*\") !== null;\r\n provider = RealityDataProvider.ContextShare;\r\n format = isOPC ? RealityDataFormat.OPC : RealityDataFormat.ThreeDTile;\r\n const contextShareKey = { provider, format, id: containerName };\r\n return contextShareKey;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ContextShareProvider.js","sourceRoot":"","sources":["../../../src/tile/ContextShareProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { RealityDataFormat, RealityDataProvider } from \"@itwin/core-common\";\r\n\r\n/**\r\n * This class provide methods used to interpret url to Project Wise Context Share (RealityDataProvider.ContextShare)\r\n * @internal\r\n */\r\nexport class ContextShareProvider {\r\n /** Return true if this is a supported url to this service provider */\r\n public static isProviderUrl(tilesetUrl: string): boolean {\r\n // Try to extract realityDataId from URL and if not possible, use the url as the key\r\n let attUrl: URL;\r\n try {\r\n attUrl = new URL(tilesetUrl);\r\n } catch (e) {\r\n // Not a valid URL for Context share\r\n return false;\r\n }\r\n // If api.bentley.com/realitydata is used, it is context share\r\n if (tilesetUrl.toLowerCase().includes(\"api.bentley.com/realitydata\"))\r\n return true;\r\n // detect if it is a RDS url\r\n const formattedUrl1 = attUrl.pathname.replace(/~2F/g, \"/\").replace(/\\\\/g, \"/\");\r\n if (formattedUrl1) {\r\n const urlParts1 = formattedUrl1.split(\"/\").map((entry: string) => entry.replace(/%2D/g, \"-\"));\r\n let partOffset1: number = 0;\r\n urlParts1.find((value, index) => {\r\n if (value === \"Repositories\") {\r\n partOffset1 = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n const isRDSUrl = (urlParts1[partOffset1] === \"Repositories\") && (urlParts1[partOffset1 + 1].match(\"S3MXECPlugin--*\") !== null) && (urlParts1[partOffset1 + 2] === \"S3MX\");\r\n return isRDSUrl;\r\n }\r\n return false;\r\n }\r\n /** Return true if this is a supported url to this service provider */\r\n public static getInfoFromUrl(tilesetUrl: string): {provider: RealityDataProvider, format: RealityDataFormat, id: string, iTwinId: string | undefined} {\r\n const invalidUrlInfo = { provider: RealityDataProvider.TilesetUrl, format: RealityDataFormat.ThreeDTile, id: tilesetUrl, iTwinId: undefined };\r\n let attUrl: URL;\r\n try {\r\n attUrl = new URL(tilesetUrl);\r\n } catch (e) {\r\n // Not a valid URL and not equal, probably $cesiumAsset\r\n return invalidUrlInfo;\r\n }\r\n // If api.bentley.com/realitydata is used, it is context share\r\n if (tilesetUrl.toLowerCase().includes(\"api.bentley.com/realitydata\")) {\r\n const lcTilesetUrl = tilesetUrl.toLowerCase();\r\n // NOTICE: We assume it is a ThreeDTile BUT this could technically be a point cloud (OPC).\r\n // This method was used in typical workflow where format was always ThreeDTile and is here for legacy support.\r\n // We don't want to make a call to RDS to resolve format since this method must not be async (it is used in workflow that are not async)\r\n const format = RealityDataFormat.ThreeDTile;\r\n const indexId = lcTilesetUrl.indexOf(\"realitydata/\") + 12; // lenght of \"realitydata/\" = 12;\r\n const id = lcTilesetUrl.substr(indexId, Guid.empty.length);\r\n const indexProjectId = lcTilesetUrl.indexOf(\"projectid=\") + 10; // lenght of \"projectid=\" = 10;\r\n let projectId: string | undefined;\r\n if (indexProjectId && indexProjectId > 0)\r\n projectId = lcTilesetUrl.substr(indexProjectId, Guid.empty.length);\r\n const apimContextShareKey = { provider: RealityDataProvider.ContextShare, format, id, iTwinId: projectId };\r\n return apimContextShareKey;\r\n }\r\n // detect if it is a RDS url\r\n const formattedUrl1 = attUrl.pathname.replace(/~2F/g, \"/\").replace(/\\\\/g, \"/\");\r\n if (formattedUrl1) {\r\n const urlParts1 = formattedUrl1.split(\"/\").map((entry: string) => entry.replace(/%2D/g, \"-\"));\r\n let partOffset1: number = 0;\r\n urlParts1.find((value, index) => {\r\n if (value === \"Repositories\") {\r\n partOffset1 = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n const isOPC = attUrl.pathname.match(\".opc*\") !== null;\r\n const isRDSUrl = (urlParts1[partOffset1] === \"Repositories\") && (urlParts1[partOffset1 + 1].match(\"S3MXECPlugin--*\") !== null) && (urlParts1[partOffset1 + 2] === \"S3MX\");\r\n let projectId: string | undefined;\r\n const projectIdSection = urlParts1.find((val: string) => val.includes(\"--\"));\r\n if (projectIdSection)\r\n projectId = projectIdSection.split(\"--\")[1];\r\n // Make sure the url to compare are REALITYMESH3DTILES url, otherwise, compare the url directly\r\n if (isRDSUrl || isOPC) {\r\n // Make sure the reality data id are the same\r\n const guid1 = urlParts1.find(Guid.isGuid);\r\n if (guid1 !== undefined) {\r\n const provider = RealityDataProvider.ContextShare;\r\n const format = isOPC ? RealityDataFormat.OPC : RealityDataFormat.ThreeDTile;\r\n const contextShareKey = { provider, format, id: guid1, iTwinId: projectId };\r\n return contextShareKey;\r\n }\r\n }\r\n }\r\n // Not a valid URL and not equal, probably $cesiumAsset\r\n return invalidUrlInfo;\r\n }\r\n public static getInfoFromBlobUrl(blobUrl: string): {provider: RealityDataProvider, format: RealityDataFormat, id: string } {\r\n let format = RealityDataFormat.ThreeDTile;\r\n let provider = RealityDataProvider.TilesetUrl;\r\n const url = new URL(blobUrl);\r\n\r\n // If we cannot interpret that url pass in parameter we just fallback to old implementation\r\n if(!url.pathname)\r\n return { provider, format, id: blobUrl };\r\n\r\n // const accountName = url.hostname.split(\".\")[0];\r\n let containerName= \"\";\r\n if (url.pathname) {\r\n const pathSplit = url.pathname.split(\"/\");\r\n containerName = pathSplit[1];\r\n }\r\n\r\n // const blobFileName = `/${pathSplit[2]}`;\r\n // const sasToken = url.search.substr(1);\r\n const isOPC = url.pathname.match(\".opc*\") !== null;\r\n provider = RealityDataProvider.ContextShare;\r\n format = isOPC ? RealityDataFormat.OPC : RealityDataFormat.ThreeDTile;\r\n const contextShareKey = { provider, format, id: containerName };\r\n return contextShareKey;\r\n }\r\n}\r\n"]}
@@ -85,6 +85,7 @@ export declare abstract class GltfReader {
85
85
  protected readonly _returnToCenter: number[] | undefined;
86
86
  protected readonly _yAxisUp: boolean;
87
87
  protected readonly _type: BatchType;
88
+ protected readonly _deduplicateVertices: boolean;
88
89
  private readonly _canceled?;
89
90
  /** Asynchronously deserialize the tile data and return the result. */
90
91
  abstract read(): Promise<GltfReaderResult>;
@@ -98,7 +99,7 @@ export declare abstract class GltfReader {
98
99
  readBufferData16(json: any, accessorName: string): GltfBufferData | undefined;
99
100
  readBufferData8(json: any, accessorName: string): GltfBufferData | undefined;
100
101
  readBufferDataFloat(json: any, accessorName: string): GltfBufferData | undefined;
101
- protected constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type?: BatchType, isCanceled?: ShouldAbortReadGltf);
102
+ protected constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type?: BatchType, isCanceled?: ShouldAbortReadGltf, deduplicateVertices?: boolean);
102
103
  protected readBufferData(json: any, accessorName: string, type: GltfDataType): GltfBufferData | undefined;
103
104
  protected readFeatureIndices(_json: any): number[] | undefined;
104
105
  private colorFromJson;
@@ -107,6 +108,7 @@ export declare abstract class GltfReader {
107
108
  protected createDisplayParams(materialJson: any, hasBakedLighting: boolean): DisplayParams | undefined;
108
109
  protected extractReturnToCenter(extensions: any): number[] | undefined;
109
110
  protected readMeshPrimitive(primitive: any, featureTable?: FeatureTable, pseudoRtcBias?: Vector3d): GltfMeshData | undefined;
111
+ private deduplicateVertices;
110
112
  /**
111
113
  *
112
114
  * @param positions quantized points
@@ -1 +1 @@
1
- {"version":3,"file":"GltfReader.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GltfReader.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"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"}
@@ -89,7 +89,7 @@ export class GltfMeshData {
89
89
  * @internal
90
90
  */
91
91
  export class GltfReader {
92
- constructor(props, iModel, modelId, is3d, system, type = BatchType.Primary, isCanceled) {
92
+ constructor(props, iModel, modelId, is3d, system, type = BatchType.Primary, isCanceled, deduplicateVertices = false) {
93
93
  this._buffer = props.buffer;
94
94
  this._scene = props.scene;
95
95
  this._binaryData = props.binaryData;
@@ -113,6 +113,7 @@ export class GltfReader {
113
113
  this._system = system;
114
114
  this._type = type;
115
115
  this._canceled = isCanceled;
116
+ this._deduplicateVertices = deduplicateVertices;
116
117
  }
117
118
  get _isCanceled() { return undefined !== this._canceled && this._canceled(this); }
118
119
  get _isVolumeClassifier() { return BatchType.VolumeClassifier === this._type; }
@@ -455,6 +456,8 @@ export class GltfReader {
455
456
  return undefined;
456
457
  if (!mesh.uvs)
457
458
  this.readUVParams(mesh, primitive.attributes, "TEXCOORD_0");
459
+ if (this._deduplicateVertices && !this.deduplicateVertices(mesh))
460
+ return undefined;
458
461
  break;
459
462
  }
460
463
  case Mesh.PrimitiveType.Polyline:
@@ -481,6 +484,35 @@ export class GltfReader {
481
484
  }
482
485
  return mesh;
483
486
  }
487
+ deduplicateVertices(mesh) {
488
+ if (!mesh.points || !mesh.indices)
489
+ return false;
490
+ const numPoints = mesh.indices.length;
491
+ assert(0 === numPoints % 3);
492
+ const indices = mesh.indices;
493
+ if (indices instanceof Uint16Array && numPoints > 0xffff)
494
+ mesh.indices = new Uint32Array(numPoints);
495
+ const points = new Uint16Array(3 * numPoints);
496
+ const normals = mesh.normals ? new Uint16Array(numPoints) : undefined;
497
+ const uvs = mesh.uvs ? new Uint16Array(2 * numPoints) : undefined;
498
+ for (let i = 0; i < numPoints; i++) {
499
+ const index = indices[i];
500
+ mesh.indices[i] = i;
501
+ points[i * 3 + 0] = mesh.points[index * 3 + 0];
502
+ points[i * 3 + 1] = mesh.points[index * 3 + 1];
503
+ points[i * 3 + 2] = mesh.points[index * 3 + 2];
504
+ if (normals)
505
+ normals[i] = mesh.normals[index];
506
+ if (uvs) {
507
+ uvs[i * 2 + 0] = mesh.uvs[index * 2 + 0];
508
+ uvs[i * 2 + 1] = mesh.uvs[index * 2 + 1];
509
+ }
510
+ }
511
+ mesh.points = points;
512
+ mesh.normals = normals;
513
+ mesh.uvs = uvs;
514
+ return true;
515
+ }
484
516
  /**
485
517
  *
486
518
  * @param positions quantized points