@itwin/core-frontend 3.2.0-dev.29 → 3.2.0-dev.33

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 (134) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/ViewManager.d.ts.map +1 -1
  3. package/lib/cjs/ViewManager.js +1 -0
  4. package/lib/cjs/ViewManager.js.map +1 -1
  5. package/lib/cjs/render/primitives/VertexTable.d.ts +1 -1
  6. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  7. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  8. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +0 -1
  9. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  10. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +1 -1
  11. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  12. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
  13. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  14. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  15. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  16. package/lib/cjs/render/webgl/DrawCommand.js +2 -1
  17. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  18. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +5 -4
  19. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/ShaderBuilder.js +7 -6
  21. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  22. package/lib/cjs/render/webgl/Technique.d.ts +4 -2
  23. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/Technique.js +148 -120
  25. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  26. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -3
  27. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  28. package/lib/cjs/render/webgl/TechniqueFlags.js +17 -4
  29. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  30. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/glsl/Animation.js +2 -0
  32. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  33. package/lib/cjs/render/webgl/glsl/Color.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/glsl/Color.js +8 -7
  35. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  36. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -2
  37. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/glsl/Edge.js +6 -10
  39. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  40. package/lib/cjs/render/webgl/glsl/PointString.d.ts +3 -3
  41. package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/glsl/PointString.js +6 -6
  43. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  44. package/lib/cjs/render/webgl/glsl/Polyline.d.ts +3 -3
  45. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/glsl/Polyline.js +6 -10
  47. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  48. package/lib/cjs/render/webgl/glsl/Surface.d.ts +2 -2
  49. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  50. package/lib/cjs/render/webgl/glsl/Surface.js +33 -16
  51. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  52. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +3 -1
  53. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  54. package/lib/cjs/render/webgl/glsl/Vertex.js +139 -37
  55. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  56. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -1
  57. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  58. package/lib/cjs/tile/RealityTileLoader.js +29 -6
  59. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  60. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  61. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  62. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  63. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  64. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  65. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  66. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  67. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  68. package/lib/esm/ViewManager.d.ts.map +1 -1
  69. package/lib/esm/ViewManager.js +1 -0
  70. package/lib/esm/ViewManager.js.map +1 -1
  71. package/lib/esm/render/primitives/VertexTable.d.ts +1 -1
  72. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  73. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  74. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +0 -1
  75. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  76. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +1 -1
  77. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  78. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
  79. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  80. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  81. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  82. package/lib/esm/render/webgl/DrawCommand.js +2 -1
  83. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  84. package/lib/esm/render/webgl/ShaderBuilder.d.ts +5 -4
  85. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  86. package/lib/esm/render/webgl/ShaderBuilder.js +7 -6
  87. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  88. package/lib/esm/render/webgl/Technique.d.ts +4 -2
  89. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  90. package/lib/esm/render/webgl/Technique.js +148 -120
  91. package/lib/esm/render/webgl/Technique.js.map +1 -1
  92. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -3
  93. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  94. package/lib/esm/render/webgl/TechniqueFlags.js +17 -4
  95. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  96. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  97. package/lib/esm/render/webgl/glsl/Animation.js +2 -0
  98. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  99. package/lib/esm/render/webgl/glsl/Color.d.ts.map +1 -1
  100. package/lib/esm/render/webgl/glsl/Color.js +8 -7
  101. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  102. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -2
  103. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  104. package/lib/esm/render/webgl/glsl/Edge.js +7 -11
  105. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  106. package/lib/esm/render/webgl/glsl/PointString.d.ts +3 -3
  107. package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
  108. package/lib/esm/render/webgl/glsl/PointString.js +6 -6
  109. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  110. package/lib/esm/render/webgl/glsl/Polyline.d.ts +3 -3
  111. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  112. package/lib/esm/render/webgl/glsl/Polyline.js +7 -11
  113. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  114. package/lib/esm/render/webgl/glsl/Surface.d.ts +2 -2
  115. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  116. package/lib/esm/render/webgl/glsl/Surface.js +33 -16
  117. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  118. package/lib/esm/render/webgl/glsl/Vertex.d.ts +3 -1
  119. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  120. package/lib/esm/render/webgl/glsl/Vertex.js +138 -37
  121. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  122. package/lib/esm/tile/RealityTileLoader.d.ts +1 -1
  123. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  124. package/lib/esm/tile/RealityTileLoader.js +30 -7
  125. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  126. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  127. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  128. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  129. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  130. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  131. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  132. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  133. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  134. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"WmsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;AAGH,mDAAyF;AACzF,wEAAmC;AACnC,0CAA8D;AAE9D;;;;GAIG;AACH,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,WAAqC;IACtE,MAAM,OAAO,GAAmB;QAC9B,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC5B,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,WAAW;KAClB,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAO,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AACD,SAAS,kBAAkB,CAAC,IAAS;IACnC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1I,CAAC;AAED,SAAS,aAAa,CAAC,IAAS;IAC9B,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;QACtC,OAAO,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE;QACrD,OAAO,kBAAkB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAC1D;SAAM;QACL,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YACjC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC1C,IAAI,WAAW,CAAC,GAAG,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,KAAK,WAAW,EAAE;oBACnE,OAAO,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBAC/C;aACF;QACH,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,SAAS,SAAS,CAAI,KAAU;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,IAAiB,aAAa,CA6I7B;AA7ID,WAAiB,aAAa;IAE5B,MAAa,OAAO;QAQlB,YAAY,IAAS;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAClD,CAAC;KACF;IAhBY,qBAAO,UAgBnB,CAAA;IAED,MAAa,KAAK;QAQhB,YAAY,KAAU;YAHN,cAAS,GAAG,IAAI,KAAK,EAAY,CAAC;YAIhD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE3C,CAAC;QACM,YAAY,CAAC,OAAO,GAAG,IAAI;;YAChC,MAAM,SAAS,GAAG,IAAI,KAAK,EAAoB,CAAC;YAChD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,MAAM,YAAY,GAAG,CAAC,CAAC,QAAkB,EAAE,MAAe,EAAE,EAAE;gBAC5D,IAAI,QAAQ,CAAC;gBACb,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;gBACnB,IAAI,QAAQ,CAAC,QAAQ,EAAE;oBACrB,aAAa,GAAG,KAAK,CAAC;oBACtB,QAAQ,GAAG,IAAI,KAAK,EAAU,CAAC;oBAC/B,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACrB,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC1B,CAAC,CAAC,CAAC;iBACJ;gBACD,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAChG,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE7D,IAAI,CAAC,aAAa,EAAE;gBAClB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;gBACvD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC7B,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;wBACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;wBACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACnC,IAAI,KAAK;4BACP,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;4BAErB,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;qBACpC;gBACH,CAAC,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;oBACrB,iCAAiC;oBACjC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,0CAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBACrN,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;wBACpC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;4BACzB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;4BACrB,+CAA+C;4BAC/C,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;gCAC3E,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;wBACnF,CAAC,CAAC,CAAC;wBACH,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC7I,CAAC,CAAC,CAAC;iBACJ;aACF;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAEM,eAAe,CAAC,eAAyB;YAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;YAEhD,MAAM,eAAe,GAAG,CAAC,CAAC,QAAkB,EAAE,EAAE;gBAC9C,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC3C,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;iBAC9C;gBACD,IAAI,QAAQ,CAAC,QAAQ,EAAE;oBACrB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBAClC,eAAe,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,OAAO,WAAW,CAAC;QACrB,CAAC;;IA3EuB,sBAAgB,GAAG,GAAG,CAAC;IANpC,mBAAK,QAkFjB,CAAA;IAED,gBAAgB;IAChB,MAAa,QAAQ;QAQnB,YAAmB,KAAU,EAAkB,MAAiB;YAAjB,WAAM,GAAN,MAAM,CAAW;YAE9D,MAAM,YAAY,GAAG,CAAC,WAAqB,EAAE,MAAmB,EAAE,EAAE;gBAClE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC9D,IAAI,WAAW,CAAC,MAAM,EAAE;oBACtB,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;iBAC1C;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAChD,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE;gBACV,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;aAC3B;YACD,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YAEpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAY,CAAC;gBACtC,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE;oBACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;iBACpD;aACF;QACH,CAAC;KACF;IAnCY,sBAAQ,WAmCpB,CAAA;AACH,CAAC,EA7IgB,aAAa,GAAb,qBAAa,KAAb,qBAAa,QA6I7B;AAED,gBAAgB;AAChB,MAAa,eAAe;IAU1B,YAAoB,KAAU;QAAV,UAAK,GAAL,KAAK,CAAK;QAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,UAAU;YAClB,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAVD,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;IACxF,IAAW,UAAU,aAAoC,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,UAAU,CAAC,CAAC,CAAC;IACzF,IAAW,oBAAoB,iBAAK,OAAO,SAAS,MAAK,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,UAAU,0CAAE,OAAO,0CAAE,cAAc,CAAA,CAAC,CAAC,CAAC;IAC1G,IAAW,kBAAkB,iCAA2B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,UAAU,0CAAE,OAAO,0CAAE,cAAc,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,UAAU,0CAAE,OAAO,0CAAE,cAAc,0CAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAQrM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,WAAqC,EAAE,WAAqB;QAClG,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,MAAM,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,MAAM,KAAK,SAAS;gBACtB,OAAO,MAAM,CAAC;SACjB;QAED,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,GAAG,uBAAY,CAAC,UAAU,CAAC,GAAG,CAAC,sCAAsC,EAAE,WAAW,CAAC,CAAC;QAEzH,IAAI,CAAC,eAAe;YAClB,OAAO,SAAS,CAAC;QAEnB,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,0BAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3E,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAE1D,OAAO,YAAY,CAAC;IACtB,CAAC;IACM,YAAY,CAAC,OAAO,GAAG,IAAI;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAEM,eAAe,CAAC,aAAuB;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,CAAC;;AAxCH,0CAyCC;AAxCgB,kCAAkB,GAAG,IAAI,GAAG,EAAuC,CAAC","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 Views\r\n */\r\n\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport WMS from \"wms-capabilities\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\";\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\nfunction rangeFromJSONArray(json: any): MapCartoRectangle | undefined {\r\n return (Array.isArray(json) && json.length === 4) ? MapCartoRectangle.createFromDegrees(json[0], json[1], json[2], json[3]) : undefined;\r\n}\r\n\r\nfunction rangeFromJSON(json: any): MapCartoRectangle | undefined {\r\n if (undefined !== json.LatLonBoundingBox)\r\n return rangeFromJSONArray(json.LatLonBoundingBox);\r\n else if (Array.isArray(json.EX_GeographicBoundingBox)) {\r\n return rangeFromJSONArray(json.EX_GeographicBoundingBox);\r\n } else {\r\n if (Array.isArray(json.BoundingBox))\r\n for (const boundingBox of json.BoundingBox) {\r\n if (boundingBox.crs === \"CRS:84\" || boundingBox.crs === \"EPSG:4326\") {\r\n return rangeFromJSONArray(boundingBox.extent);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction initArray<T>(input: any): undefined | T[] {\r\n return Array.isArray(input) ? input.slice() : undefined;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMS server\r\n * @internal\r\n */\r\nexport namespace WmsCapability {\r\n\r\n export class Service {\r\n public readonly name: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly onlineResource?: string;\r\n public readonly contactInformation?: string;\r\n public readonly accessConstraints?: string;\r\n\r\n constructor(json: any) {\r\n this.name = json.Name ? json.Name : \"\";\r\n this.title = json.Title;\r\n this.abstract = json.Abstract;\r\n this.onlineResource = json.OnlineResource;\r\n this.contactInformation = json.ContactInformation;\r\n this.accessConstraints = json.AccessConstraints;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly queryable: boolean;\r\n public readonly title?: string;\r\n public readonly srs?: string[];\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly subLayers = new Array<SubLayer>();\r\n private static readonly PREFIX_SEPARATOR = \":\";\r\n\r\n constructor(_json: any) {\r\n this.queryable = _json.queryable;\r\n this.title = _json.title;\r\n this.srs = initArray<string>(_json.SRS);\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.subLayers.push(new SubLayer(_json));\r\n\r\n }\r\n public getSubLayers(visible = true): MapSubLayerProps[] {\r\n const subLayers = new Array<MapSubLayerProps>();\r\n let index = 1;\r\n let childrenFound = false;\r\n const pushSubLayer = ((subLayer: SubLayer, parent?: number) => {\r\n let children;\r\n const id = index++;\r\n if (subLayer.children) {\r\n childrenFound = false;\r\n children = new Array<number>();\r\n subLayer.children.forEach((child) => {\r\n children.push(index);\r\n pushSubLayer(child, id);\r\n });\r\n }\r\n subLayers.push({ name: subLayer.name, title: subLayer.title, visible, parent, children, id });\r\n });\r\n this.subLayers.forEach((subLayer) => pushSubLayer(subLayer));\r\n\r\n if (!childrenFound) {\r\n const prefixed = new Map<string, MapSubLayerProps[]>();\r\n subLayers.forEach((subLayer) => {\r\n if (subLayer.name && subLayer.name.indexOf(Layer.PREFIX_SEPARATOR) > 0) {\r\n const prefix = subLayer.name.slice(0, subLayer.name.indexOf(Layer.PREFIX_SEPARATOR));\r\n const found = prefixed.get(prefix);\r\n if (found)\r\n found.push(subLayer);\r\n else\r\n prefixed.set(prefix, [subLayer]);\r\n }\r\n });\r\n if (prefixed.size > 1) {\r\n // Preserve the root node if any.\r\n const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;\r\n prefixed.forEach((children, parent) => {\r\n children.forEach((child) => {\r\n child.parent = index;\r\n // Remove the prefix from the title if present.\r\n if (child.title && child.title.indexOf(parent + Layer.PREFIX_SEPARATOR) === 0)\r\n child.title = child.title.slice(parent.length + Layer.PREFIX_SEPARATOR.length);\r\n });\r\n subLayers.push({ name: \"\", title: parent, parent: rootNode, id: index++, children: children.map((child) => child.id as number), visible });\r\n });\r\n }\r\n }\r\n\r\n return subLayers;\r\n }\r\n\r\n public getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]> {\r\n const subLayerCrs = new Map<string, string[]>();\r\n\r\n const processSubLayer = ((subLayer: SubLayer) => {\r\n if (layerNameFilter.includes(subLayer.name)) {\r\n subLayerCrs.set(subLayer.name, subLayer.crs);\r\n }\r\n if (subLayer.children) {\r\n subLayer.children.forEach((child) => {\r\n processSubLayer(child);\r\n });\r\n }\r\n });\r\n\r\n this.subLayers.forEach((subLayer) => processSubLayer(subLayer));\r\n return subLayerCrs;\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class SubLayer {\r\n public readonly name: string;\r\n public readonly title: string;\r\n public readonly crs: string[];\r\n public readonly ownCrs: string[]; // CRS specific to this layer (ie. not including inherited CRS)\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly children?: SubLayer[];\r\n public readonly queryable: boolean;\r\n public constructor(_json: any, public readonly parent?: SubLayer) {\r\n\r\n const getParentCrs = (parentLayer: SubLayer, crsSet: Set<string>) => {\r\n parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));\r\n if (parentLayer.parent) {\r\n getParentCrs(parentLayer.parent, crsSet);\r\n }\r\n };\r\n\r\n this.name = _json.Name ? _json.Name : \"\";\r\n this.title = _json.Title;\r\n this.queryable = _json.queryable ? true : false;\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.ownCrs = _json.CRS;\r\n const crs = new Set<string>(this.ownCrs);\r\n if (parent) {\r\n getParentCrs(parent, crs);\r\n }\r\n this.crs = [...crs];\r\n\r\n if (Array.isArray(_json.Layer)) {\r\n this.children = new Array<SubLayer>();\r\n for (const childLayer of _json.Layer) {\r\n this.children.push(new SubLayer(childLayer, this));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmsCapabilities | undefined>();\r\n public readonly service: WmsCapability.Service;\r\n public readonly version?: string;\r\n public readonly layer?: WmsCapability.Layer;\r\n public get json() { return this._json; }\r\n public get maxLevel(): number { return this.layer ? this.layer.subLayers.length : - 1; }\r\n public get cartoRange(): MapCartoRectangle | undefined { return this.layer?.cartoRange; }\r\n public get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }\r\n public get featureInfoFormats(): string[] | undefined { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }\r\n constructor(private _json: any) {\r\n this.version = _json.version;\r\n this.service = new WmsCapability.Service(_json.Service);\r\n if (_json.Capability)\r\n this.layer = new WmsCapability.Layer(_json.Capability.Layer);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = new WmsCapabilities(new WMS().parse(xmlCapabilities));\r\n WmsCapabilities._capabilitiesCache.set(url, capabilities);\r\n\r\n return capabilities;\r\n }\r\n public getSubLayers(visible = true): undefined | MapSubLayerProps[] {\r\n return this.layer ? this.layer.getSubLayers(visible) : undefined;\r\n }\r\n\r\n public getSubLayersCrs(subLayerNames: string[]): Map<string, string[]>|undefined {\r\n return this.layer ? this.layer.getSubLayersCrs(subLayerNames) : undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"WmsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.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 Views\r\n */\r\n\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport WMS from \"wms-capabilities\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\";\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\nfunction rangeFromJSONArray(json: any): MapCartoRectangle | undefined {\r\n return (Array.isArray(json) && json.length === 4) ? MapCartoRectangle.createFromDegrees(json[0], json[1], json[2], json[3]) : undefined;\r\n}\r\n\r\nfunction rangeFromJSON(json: any): MapCartoRectangle | undefined {\r\n if (undefined !== json.LatLonBoundingBox)\r\n return rangeFromJSONArray(json.LatLonBoundingBox);\r\n else if (Array.isArray(json.EX_GeographicBoundingBox)) {\r\n return rangeFromJSONArray(json.EX_GeographicBoundingBox);\r\n } else {\r\n if (Array.isArray(json.BoundingBox))\r\n for (const boundingBox of json.BoundingBox) {\r\n if (boundingBox.crs === \"CRS:84\" || boundingBox.crs === \"EPSG:4326\") {\r\n return rangeFromJSONArray(boundingBox.extent);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction initArray<T>(input: any): undefined | T[] {\r\n return Array.isArray(input) ? input.slice() : undefined;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMS server\r\n * @internal\r\n */\r\nexport namespace WmsCapability {\r\n\r\n export class Service {\r\n public readonly name: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly onlineResource?: string;\r\n public readonly contactInformation?: string;\r\n public readonly accessConstraints?: string;\r\n\r\n constructor(json: any) {\r\n this.name = json.Name ? json.Name : \"\";\r\n this.title = json.Title;\r\n this.abstract = json.Abstract;\r\n this.onlineResource = json.OnlineResource;\r\n this.contactInformation = json.ContactInformation;\r\n this.accessConstraints = json.AccessConstraints;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly queryable: boolean;\r\n public readonly title?: string;\r\n public readonly srs?: string[];\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly subLayers = new Array<SubLayer>();\r\n private static readonly PREFIX_SEPARATOR = \":\";\r\n\r\n constructor(json: any, capabilities: WmsCapabilities) {\r\n this.queryable = json.queryable;\r\n this.title = json.title;\r\n this.srs = initArray<string>(capabilities.isVersion13 ? json.CRS : json.SRS);\r\n this.cartoRange = rangeFromJSON(json);\r\n this.subLayers.push(new SubLayer(json, capabilities));\r\n }\r\n public getSubLayers(visible = true): MapSubLayerProps[] {\r\n const subLayers = new Array<MapSubLayerProps>();\r\n let index = 1;\r\n let childrenFound = false;\r\n const pushSubLayer = ((subLayer: SubLayer, parent?: number) => {\r\n let children;\r\n const id = index++;\r\n if (subLayer.children) {\r\n childrenFound = false;\r\n children = new Array<number>();\r\n subLayer.children.forEach((child) => {\r\n children.push(index);\r\n pushSubLayer(child, id);\r\n });\r\n }\r\n subLayers.push({ name: subLayer.name, title: subLayer.title, visible, parent, children, id });\r\n });\r\n this.subLayers.forEach((subLayer) => pushSubLayer(subLayer));\r\n\r\n if (!childrenFound) {\r\n const prefixed = new Map<string, MapSubLayerProps[]>();\r\n subLayers.forEach((subLayer) => {\r\n if (subLayer.name && subLayer.name.indexOf(Layer.PREFIX_SEPARATOR) > 0) {\r\n const prefix = subLayer.name.slice(0, subLayer.name.indexOf(Layer.PREFIX_SEPARATOR));\r\n const found = prefixed.get(prefix);\r\n if (found)\r\n found.push(subLayer);\r\n else\r\n prefixed.set(prefix, [subLayer]);\r\n }\r\n });\r\n if (prefixed.size > 1) {\r\n // Preserve the root node if any.\r\n const rootNode = (this.subLayers.length === 1 && this.subLayers[0].children && this.subLayers[0].children.length > 1) ? subLayers.find((curSubLayer) => this.subLayers[0].name === curSubLayer.name)?.id : undefined;\r\n prefixed.forEach((children, parent) => {\r\n children.forEach((child) => {\r\n child.parent = index;\r\n // Remove the prefix from the title if present.\r\n if (child.title && child.title.indexOf(parent + Layer.PREFIX_SEPARATOR) === 0)\r\n child.title = child.title.slice(parent.length + Layer.PREFIX_SEPARATOR.length);\r\n });\r\n subLayers.push({ name: \"\", title: parent, parent: rootNode, id: index++, children: children.map((child) => child.id as number), visible });\r\n });\r\n }\r\n }\r\n\r\n return subLayers;\r\n }\r\n\r\n public getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]> {\r\n const subLayerCrs = new Map<string, string[]>();\r\n\r\n const processSubLayer = ((subLayer: SubLayer) => {\r\n if (layerNameFilter.includes(subLayer.name)) {\r\n subLayerCrs.set(subLayer.name, subLayer.crs);\r\n }\r\n if (subLayer.children) {\r\n subLayer.children.forEach((child) => {\r\n processSubLayer(child);\r\n });\r\n }\r\n });\r\n\r\n this.subLayers.forEach((subLayer) => processSubLayer(subLayer));\r\n return subLayerCrs;\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class SubLayer {\r\n public readonly name: string;\r\n public readonly title: string;\r\n public readonly crs: string[];\r\n public readonly ownCrs: string[]; // CRS specific to this layer (ie. not including inherited CRS)\r\n public readonly cartoRange?: MapCartoRectangle;\r\n public readonly children?: SubLayer[];\r\n public readonly queryable: boolean;\r\n public constructor(_json: any, capabilities: WmsCapabilities, public readonly parent?: SubLayer) {\r\n\r\n const getParentCrs = (parentLayer: SubLayer, crsSet: Set<string>) => {\r\n parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));\r\n if (parentLayer.parent) {\r\n getParentCrs(parentLayer.parent, crsSet);\r\n }\r\n };\r\n\r\n this.name = _json.Name ? _json.Name : \"\";\r\n this.title = _json.Title;\r\n this.queryable = _json.queryable ? true : false;\r\n this.cartoRange = rangeFromJSON(_json);\r\n this.ownCrs = capabilities.isVersion13 ? _json.CRS : _json.SRS;\r\n const crs = new Set<string>(this.ownCrs);\r\n if (parent) {\r\n getParentCrs(parent, crs);\r\n }\r\n this.crs = [...crs];\r\n\r\n if (Array.isArray(_json.Layer)) {\r\n this.children = new Array<SubLayer>();\r\n for (const childLayer of _json.Layer) {\r\n this.children.push(new SubLayer(childLayer, capabilities, this));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmsCapabilities | undefined>();\r\n public readonly service: WmsCapability.Service;\r\n public readonly version?: string;\r\n public readonly isVersion13: boolean;\r\n public readonly layer?: WmsCapability.Layer;\r\n public get json() { return this._json; }\r\n public get maxLevel(): number { return this.layer ? this.layer.subLayers.length : - 1; }\r\n public get cartoRange(): MapCartoRectangle | undefined { return this.layer?.cartoRange; }\r\n public get featureInfoSupported() { return undefined !== this._json.Capability?.Request?.GetFeatureInfo; }\r\n public get featureInfoFormats(): string[] | undefined { return Array.isArray(this._json.Capability?.Request?.GetFeatureInfo?.Format) ? this._json.Capability?.Request?.GetFeatureInfo?.Format : undefined; }\r\n constructor(private _json: any) {\r\n this.version = _json.version;\r\n this.isVersion13 = _json.version !== undefined && 0 === _json.version.indexOf(\"1.3\");\r\n this.service = new WmsCapability.Service(_json.Service);\r\n if (_json.Capability)\r\n this.layer = new WmsCapability.Layer(_json.Capability.Layer, this);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = new WmsCapabilities(new WMS().parse(xmlCapabilities));\r\n WmsCapabilities._capabilitiesCache.set(url, capabilities);\r\n\r\n return capabilities;\r\n }\r\n public getSubLayers(visible = true): undefined | MapSubLayerProps[] {\r\n return this.layer ? this.layer.getSubLayers(visible) : undefined;\r\n }\r\n\r\n public getSubLayersCrs(subLayerNames: string[]): Map<string, string[]>|undefined {\r\n return this.layer ? this.layer.getSubLayersCrs(subLayerNames) : undefined;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewManager.d.ts","sourceRoot":"","sources":["../../src/ViewManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ViewManager.d.ts","sourceRoot":"","sources":["../../src/ViewManager.ts"],"names":[],"mappings":"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"}
@@ -233,6 +233,7 @@ export class ViewManager {
233
233
  onSelectionSetChanged(_iModel) {
234
234
  for (const vp of this)
235
235
  vp.markSelectionSetDirty();
236
+ IModelApp.requestNextAnimation();
236
237
  }
237
238
  /** @internal */
238
239
  invalidateViewportScenes() {
@@ -1 +1 @@
1
- {"version":3,"file":"ViewManager.js","sourceRoot":"","sources":["../../src/ViewManager.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 Views\r\n */\r\nimport { BeEvent, BentleyStatus, BeTimePoint, BeUiEvent, Id64Arg } from \"@itwin/core-bentley\";\r\nimport { GeometryStreamProps } from \"@itwin/core-common\";\r\nimport { HitDetail } from \"./HitDetail\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { DisclosedTileTreeSet, TileTree } from \"./tile/internal\";\r\nimport { EventController } from \"./tools/EventController\";\r\nimport { BeButtonEvent, EventHandled } from \"./tools/Tool\";\r\nimport { ScreenViewport, ViewportDecorator } from \"./Viewport\";\r\nimport { System } from \"./render/webgl/System\";\r\n\r\n/** Interface for drawing [decoration graphics]($docs/learning/frontend/ViewDecorations.md) into, or on top of, the active [[ScreenViewport]]s managed by [[ViewManager]].\r\n * Decorators generate [[Decorations]].\r\n * @public\r\n */\r\nexport interface Decorator extends ViewportDecorator {\r\n /** If the [[decorate]] method created pickable graphics, return true if the supplied Id is from this Decorator.\r\n * @param id The Id of the currently selected pickable graphics.\r\n * @returns true if 'id' belongs to this Decorator\r\n */\r\n testDecorationHit?(id: string): boolean;\r\n\r\n /** If the [[decorate]] method created pickable graphics using a persistent element id instead of a transient id,\r\n * return true if the Decorator wants the opportunity to override the default persistent element behavior for\r\n * the supplied [[HitDetail]].\r\n * - Replace or augment the element's tooltip by implementing [[getDecorationToolTip]].\r\n * - Override the element's snap geometry by implementing [[getDecorationGeometry]].\r\n * - Handle button events as decorator events by implementing [[onDecorationButtonEvent]].\r\n * @param hit The HitDetail of the currently selected persistent element or pickable graphics using a persistent element id.\r\n * @returns true if this Decorator wants to override the default persistent element behavior.\r\n */\r\n overrideElementHit?(hit: HitDetail): boolean;\r\n\r\n /** If [[testDecorationHit]] or [[overrideElementHit]] returned true, implement this method to return the tooltip message for this Decorator.\r\n * @param hit The HitDetail about the decoration that was picked.\r\n * @returns A promise with the HTMLElement or string (that may contain HTML) with the tooltip message.\r\n */\r\n getDecorationToolTip?(hit: HitDetail): Promise<HTMLElement | string>;\r\n\r\n /** If [[testDecorationHit]] or [[overrideElementHit]] returned true, implement this method to handle a button event for this Decorator.\r\n * @param hit The HitDetail about the decoration that was picked.\r\n * @param ev The BeButtonEvent that identified this decoration.\r\n * @returns A Promise that resolves to Yes if event completely handled by decoration and event should not be processed by the calling tool.\r\n */\r\n onDecorationButtonEvent?(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled>;\r\n\r\n /** If [[testDecorationHit]] or [[overrideElementHit]] returned true, implement this method to return the snappable geometry for this Decorator. Geometry that changes with every cursor motion isn't valid for snapping.\r\n * An example would be an InteractiveTool for placing a linestring. It might wish to allow snapping to accepted segments, the segment from the last accepted point to the current cursor position would not be included\r\n * as snappable geometry and would just be displayed in dynamics.\r\n * @param hit The HitDetail about the decoration that was picked.\r\n * @returns GeometryStreamProps containing world coordinate snappable geometry for this decoration.\r\n */\r\n getDecorationGeometry?(hit: HitDetail): GeometryStreamProps | undefined;\r\n}\r\n\r\n/** Argument for [[ViewManager.onSelectedViewportChanged]]\r\n * @public\r\n */\r\nexport interface SelectedViewportChangedArgs {\r\n current?: ScreenViewport;\r\n previous?: ScreenViewport;\r\n}\r\n\r\n/** An object which customizes the locate tooltip.\r\n * @internal\r\n */\r\nexport interface ToolTipProvider {\r\n /** Augment or replace tooltip for the specified HitDetail.\r\n * To cooperate with other tooltip providers, replacing the input tooltip instead of appending information is discouraged.\r\n */\r\n augmentToolTip(hit: HitDetail, tooltip: Promise<HTMLElement | string>): Promise<HTMLElement | string>;\r\n}\r\n\r\n/** The ViewManager holds the list of opened views, plus the *selected view*. It also provides notifications of view open/close and suspend/resume.\r\n * Applications must call [[addViewport]] when new Viewports that should be associated with user events are created.\r\n *\r\n * A single ViewManager is created when [[IModelApp.startup]] is called. It can be accessed via the static member [[IModelApp.viewManager]].\r\n *\r\n * The ViewManager controls the render loop, which causes the contents of each registered [[Viewport]] to update on the screen.\r\n * @public\r\n */\r\nexport class ViewManager implements Iterable<ScreenViewport> {\r\n public inDynamicsMode = false;\r\n public cursor = \"default\";\r\n private readonly _viewports: ScreenViewport[] = [];\r\n public readonly decorators: Decorator[] = [];\r\n private _selectedView?: ScreenViewport;\r\n private _invalidateScenes = false;\r\n private _skipSceneCreation = false;\r\n private _doIdleWork = false;\r\n private _idleWorkTimer?: any;\r\n\r\n /** @internal */\r\n public readonly toolTipProviders: ToolTipProvider[] = [];\r\n\r\n private _beginIdleWork() {\r\n const idleWork = () => {\r\n if (undefined === this._idleWorkTimer)\r\n return;\r\n if (this._viewports.length > 0) {\r\n this._idleWorkTimer = undefined;\r\n return;\r\n }\r\n if (IModelApp.renderSystem.doIdleWork())\r\n this._idleWorkTimer = setTimeout(idleWork, 1);\r\n else\r\n this._idleWorkTimer = undefined;\r\n };\r\n\r\n if (undefined === this._idleWorkTimer)\r\n this._idleWorkTimer = setTimeout(idleWork, 1);\r\n }\r\n\r\n /** @internal */\r\n public onInitialized() {\r\n this.addDecorator(IModelApp.accuSnap);\r\n this.addDecorator(IModelApp.tentativePoint);\r\n this.addDecorator(IModelApp.accuDraw);\r\n this.addDecorator(IModelApp.toolAdmin);\r\n this.cursor = \"default\";\r\n\r\n const options = IModelApp.renderSystem.options;\r\n this._doIdleWork = true === options.doIdleWork;\r\n if (this._doIdleWork)\r\n this._beginIdleWork();\r\n }\r\n\r\n /** @internal */\r\n public onShutDown() {\r\n if (undefined !== this._idleWorkTimer) {\r\n clearTimeout(this._idleWorkTimer);\r\n this._idleWorkTimer = undefined;\r\n }\r\n this._viewports.length = 0;\r\n this.decorators.length = 0;\r\n this.toolTipProviders.length = 0;\r\n this._selectedView = undefined;\r\n }\r\n\r\n /** Called after the selected view changes.\r\n * @param old Previously selected viewport.\r\n * @param current Currently selected viewport.\r\n */\r\n public readonly onSelectedViewportChanged = new BeUiEvent<SelectedViewportChangedArgs>();\r\n\r\n /** Called after a view is opened. This can happen when the iModel is first opened or when a user opens a new view. */\r\n public readonly onViewOpen = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called after a view is closed. This can happen when the iModel is closed or when a user closes an open view. */\r\n public readonly onViewClose = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called after a view is suspended. This happens when the application is minimized or, on a tablet, when the application\r\n * is moved to the background.\r\n */\r\n public readonly onViewSuspend = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called after a suspended view is resumed. This can happen when a minimized application is restored\r\n * or, on a tablet, when the application is moved to the foreground.\r\n */\r\n public readonly onViewResume = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called at the beginning of each tick of the render loop, before any viewports have been updated.\r\n * The render loop is typically invoked by a requestAnimationFrame() callback. It will not be invoked if the ViewManager is tracking no viewports.\r\n * @note Due to the frequency of this event, avoid performing expensive work inside event listeners.\r\n * @see [[ViewManager.onFinishRender]]\r\n */\r\n public readonly onBeginRender = new BeEvent<() => void>();\r\n\r\n /** Called at the end of each tick of the render loop, after all viewports have been updated.\r\n * The render loop is typically invoked by a requestAnimationFrame() callback. It will not be invoked if the ViewManager is tracking no viewports.\r\n * @note Due to the frequency of this event, avoid performing expensive work inside event listeners.\r\n * @see [[ViewManager.onBeginRender]]\r\n */\r\n public readonly onFinishRender = new BeEvent<() => void>();\r\n\r\n /** @internal */\r\n public endDynamicsMode(): void {\r\n if (!this.inDynamicsMode)\r\n return;\r\n\r\n this.inDynamicsMode = false;\r\n\r\n const cursorVp = IModelApp.toolAdmin.cursorView;\r\n if (cursorVp)\r\n cursorVp.changeDynamics(undefined);\r\n\r\n for (const vp of this._viewports) {\r\n if (vp !== cursorVp)\r\n vp.changeDynamics(undefined);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public beginDynamicsMode() { this.inDynamicsMode = true; }\r\n\r\n /** @internal */\r\n public get doesHostHaveFocus(): boolean { return document.hasFocus(); }\r\n\r\n /** Set the selected [[Viewport]] to undefined. */\r\n public clearSelectedView(): void {\r\n const previousVp = this.selectedView;\r\n this._selectedView = undefined;\r\n this.notifySelectedViewportChanged(previousVp, undefined);\r\n }\r\n\r\n /** Sets the selected [[Viewport]]. */\r\n public async setSelectedView(vp: ScreenViewport | undefined): Promise<BentleyStatus> {\r\n if (undefined === vp)\r\n vp = this.getFirstOpenView();\r\n\r\n if (vp === this.selectedView) // already the selected view\r\n return BentleyStatus.SUCCESS;\r\n\r\n if (undefined === vp) {\r\n this.clearSelectedView();\r\n return BentleyStatus.ERROR;\r\n }\r\n\r\n const previousVp = this.selectedView;\r\n this._selectedView = vp;\r\n\r\n this.notifySelectedViewportChanged(previousVp, vp);\r\n\r\n if (undefined === previousVp)\r\n await IModelApp.toolAdmin.startDefaultTool();\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n /** @internal */\r\n public notifySelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined) {\r\n IModelApp.toolAdmin.onSelectedViewportChanged(previous, current);// eslint-disable-line @typescript-eslint/no-floating-promises\r\n this.onSelectedViewportChanged.emit({ previous, current });\r\n }\r\n\r\n /** The \"selected view\" is the default for certain operations. */\r\n public get selectedView(): ScreenViewport | undefined { return this._selectedView; }\r\n\r\n /** Get the first opened view. */\r\n public getFirstOpenView(): ScreenViewport | undefined { return this._viewports.length > 0 ? this._viewports[0] : undefined; }\r\n\r\n /** Check if only a single viewport is being used. If so, render directly on-screen using its WebGL canvas. Otherwise, render each view offscreen. */\r\n private updateRenderToScreen() {\r\n const renderToScreen = 1 === this._viewports.length;\r\n for (const vp of this)\r\n vp.rendersToScreen = renderToScreen;\r\n }\r\n\r\n /** Add a new Viewport to the list of opened views and create an EventController for it.\r\n * @param newVp the Viewport to add\r\n * @returns SUCCESS if vp was successfully added, ERROR if it was already present.\r\n * @note raises onViewOpen event with newVp.\r\n */\r\n public addViewport(newVp: ScreenViewport): BentleyStatus {\r\n if (this._viewports.includes(newVp)) // make sure its not already added\r\n return BentleyStatus.ERROR;\r\n\r\n newVp.setEventController(new EventController(newVp)); // this will direct events to the viewport\r\n this._viewports.push(newVp);\r\n this.updateRenderToScreen();\r\n this.setSelectedView(newVp);// eslint-disable-line @typescript-eslint/no-floating-promises\r\n\r\n // Start up the render loop if necessary.\r\n if (1 === this._viewports.length)\r\n IModelApp.startEventLoop();\r\n\r\n this.onViewOpen.emit(newVp);\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n /** Remove a Viewport from the list of opened views, and optionally dispose of it.\r\n * Typically a Viewport is dropped when it is no longer of any use to the application, in which case it should also be\r\n * disposed of as it may hold significant GPU resources.\r\n * However in some cases a Viewport may be temporarily dropped to suspend rendering; and subsequently re-added to\r\n * resume rendering - for example, when the Viewport is temporarily hidden by other UI elements.\r\n * In the latter case it is up to the caller to ensure the Viewport is properly disposed of when it is no longer needed.\r\n * Attempting to invoke any function on a Viewport after it has been disposed is an error.\r\n * @param vp the Viewport to remove.\r\n * @param disposeOfViewport Whether or not to dispose of the Viewport. Defaults to true.\r\n * @return SUCCESS if vp was successfully removed, ERROR if it was not present.\r\n * @note raises onViewClose event with vp.\r\n */\r\n public dropViewport(vp: ScreenViewport, disposeOfViewport: boolean = true): BentleyStatus {\r\n const index = this._viewports.indexOf(vp);\r\n if (index === -1)\r\n return BentleyStatus.ERROR;\r\n\r\n this.onViewClose.emit(vp);\r\n\r\n // make sure tools don't think the cursor is still in this viewport\r\n IModelApp.toolAdmin.forgetViewport(vp);\r\n\r\n vp.setEventController(undefined);\r\n this._viewports.splice(index, 1);\r\n\r\n if (this.selectedView === vp) // if removed viewport was selectedView, set it to undefined.\r\n this.setSelectedView(undefined);// eslint-disable-line @typescript-eslint/no-floating-promises\r\n\r\n vp.rendersToScreen = false;\r\n this.updateRenderToScreen();\r\n\r\n if (disposeOfViewport)\r\n vp.dispose();\r\n\r\n if (this._doIdleWork && this._viewports.length === 0)\r\n this._beginIdleWork();\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n /** Iterate over the viewports registered with the view manager. */\r\n public [Symbol.iterator](): Iterator<ScreenViewport> {\r\n return this._viewports[Symbol.iterator]();\r\n }\r\n\r\n /** Force each registered [[Viewport]] to regenerate all of its cached [[Decorations]] on the next frame. If the decorator parameter is specified, only\r\n * the specified decorator will have its cached decorations invalidated for all viewports.\r\n * @see [[Viewport.invalidateCachedDecorations]] to manually remove a decorator's cached decorations from a viewport, forcing them to be regenerated.\r\n * @beta\r\n */\r\n public invalidateCachedDecorationsAllViews(decorator: ViewportDecorator): void {\r\n if (decorator.useCachedDecorations)\r\n for (const vp of this)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n\r\n /** Force each registered [[Viewport]] to regenerate its [[Decorations]] on the next frame. */\r\n public invalidateDecorationsAllViews(): void {\r\n for (const vp of this)\r\n vp.invalidateDecorations();\r\n }\r\n\r\n /** Force each registered [[Viewport]] to regenerate its [[FeatureSymbology.Overrides]] on the next frame.\r\n * @alpha\r\n */\r\n public invalidateSymbologyOverridesAllViews(): void {\r\n for (const vp of this)\r\n vp.setFeatureOverrideProviderChanged();\r\n }\r\n\r\n /** @internal */\r\n public onSelectionSetChanged(_iModel: IModelConnection) {\r\n for (const vp of this)\r\n vp.markSelectionSetDirty();\r\n }\r\n\r\n /** @internal */\r\n public invalidateViewportScenes(): void {\r\n for (const vp of this)\r\n vp.invalidateScene();\r\n }\r\n\r\n /** @internal */\r\n public validateViewportScenes(): void {\r\n for (const vp of this)\r\n vp.setValidScene();\r\n }\r\n\r\n /** @internal */\r\n public invalidateScenes(): void {\r\n this._invalidateScenes = true;\r\n IModelApp.requestNextAnimation();\r\n }\r\n /** @internal */\r\n public get sceneInvalidated(): boolean { return this._invalidateScenes; }\r\n\r\n /** Invoked by ToolAdmin event loop.\r\n * @internal\r\n */\r\n public renderLoop(): void {\r\n if (0 === this._viewports.length)\r\n return;\r\n if (this._skipSceneCreation)\r\n this.validateViewportScenes();\r\n else if (this._invalidateScenes)\r\n this.invalidateViewportScenes();\r\n\r\n this._invalidateScenes = false;\r\n\r\n this.onBeginRender.raiseEvent();\r\n\r\n for (const vp of this._viewports)\r\n vp.renderFrame();\r\n\r\n this.onFinishRender.raiseEvent();\r\n }\r\n\r\n /** Purge TileTrees that haven't been drawn since the specified time point and are not currently in use by any ScreenViewport.\r\n * Intended strictly for debugging purposes - TileAdmin takes care of properly purging.\r\n * @internal\r\n */\r\n public purgeTileTrees(olderThan: BeTimePoint): void {\r\n // A single viewport can display tiles from more than one IModelConnection.\r\n // NOTE: A viewport may be displaying no trees - but we need to record its IModel so we can purge those which are NOT being displayed\r\n // NOTE: That won't catch external tile trees previously used by that viewport.\r\n const trees = new DisclosedTileTreeSet();\r\n const treesByIModel = new Map<IModelConnection, Set<TileTree>>();\r\n for (const vp of this._viewports) {\r\n vp.discloseTileTrees(trees);\r\n if (undefined === treesByIModel.get(vp.iModel))\r\n treesByIModel.set(vp.iModel, new Set<TileTree>());\r\n }\r\n\r\n for (const tree of trees) {\r\n let set = treesByIModel.get(tree.iModel);\r\n if (undefined === set) {\r\n set = new Set<TileTree>();\r\n treesByIModel.set(tree.iModel, set);\r\n }\r\n\r\n set.add(tree);\r\n }\r\n\r\n for (const entry of treesByIModel) {\r\n const iModel = entry[0];\r\n iModel.tiles.purge(olderThan, entry[1]);\r\n }\r\n }\r\n\r\n /** Get the tooltip for a persistent element.\r\n * Calls the backend method [Element.getToolTipMessage]($backend), and replaces all instances of `${localizeTag}` with localized string from IModelApp.i18n.\r\n * @beta\r\n */\r\n public async getElementToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n const msg: string[] = await hit.iModel.getToolTipMessage(hit.sourceId); // wait for the locate message(s) from the backend\r\n return IModelApp.formatElementToolTip(msg);\r\n }\r\n\r\n /** Add a new [[ToolTipProvider]] to customize the locate tooltip.\r\n * @internal\r\n * @param provider The new tooltip provider to add.\r\n * @throws Error if provider is already active.\r\n * @returns a function that may be called to remove this provider (in lieu of calling [[dropToolTipProvider]].)\r\n * @see [[dropToolTipProvider]]\r\n */\r\n public addToolTipProvider(provider: ToolTipProvider): () => void {\r\n if (this.toolTipProviders.includes(provider))\r\n throw new Error(\"tooltip provider already registered\");\r\n this.toolTipProviders.push(provider);\r\n return () => { this.dropToolTipProvider(provider); };\r\n }\r\n\r\n /** Drop (remove) a [[ToolTipProvider]] so it is no longer active.\r\n * @internal\r\n * @param provider The tooltip to drop.\r\n * @note Does nothing if provider is not currently active.\r\n */\r\n public dropToolTipProvider(provider: ToolTipProvider) {\r\n const index = this.toolTipProviders.indexOf(provider);\r\n if (index >= 0)\r\n this.toolTipProviders.splice(index, 1);\r\n }\r\n\r\n /** Add a new [[Decorator]] to display decorations into the active views.\r\n * @param decorator The new decorator to add.\r\n * @throws Error if decorator is already active.\r\n * @returns a function that may be called to remove this decorator (in lieu of calling [[dropDecorator]].)\r\n * @see [[dropDecorator]]\r\n */\r\n public addDecorator(decorator: Decorator): () => void {\r\n if (this.decorators.includes(decorator))\r\n throw new Error(\"decorator already registered\");\r\n\r\n this.decorators.push(decorator);\r\n this.invalidateDecorationsAllViews();\r\n return () => { this.dropDecorator(decorator); };\r\n }\r\n\r\n /** Drop (remove) a [[Decorator]] so it is no longer active.\r\n * @param decorator The Decorator to drop.\r\n * @returns true if the decorator was found and removed; false if the decorator was not found.\r\n */\r\n public dropDecorator(decorator: Decorator): boolean {\r\n const index = this.decorators.indexOf(decorator);\r\n if (index < 0)\r\n return false;\r\n\r\n this.invalidateCachedDecorationsAllViews(decorator);\r\n this.decorators.splice(index, 1);\r\n this.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n /** Get the tooltip for a pickable decoration.\r\n * @internal\r\n */\r\n public async getDecorationToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n for (const decorator of this.decorators) {\r\n if (undefined !== decorator.testDecorationHit && undefined !== decorator.getDecorationToolTip && decorator.testDecorationHit(hit.sourceId))\r\n return decorator.getDecorationToolTip(hit);\r\n }\r\n return hit.viewport ? hit.viewport.getToolTip(hit) : \"\";\r\n }\r\n\r\n /** Allow a pickable decoration to handle a button event that identified it for the SelectTool.\r\n * @internal\r\n */\r\n public async onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.testDecorationHit && undefined !== decorator.onDecorationButtonEvent && decorator.testDecorationHit(hit.sourceId))\r\n return decorator.onDecorationButtonEvent(hit, ev);\r\n }\r\n return EventHandled.No;\r\n }\r\n\r\n /** Allow a pickable decoration to be snapped to by AccuSnap or TentativePoint.\r\n * @internal\r\n */\r\n public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.testDecorationHit && undefined !== decorator.getDecorationGeometry && decorator.testDecorationHit(hit.sourceId))\r\n return decorator.getDecorationGeometry(hit);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Allow a pickable decoration created using a persistent element id to augment or replace the the persistent element's tooltip.\r\n * @internal\r\n */\r\n public async overrideElementToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n for (const decorator of this.decorators) {\r\n if (undefined !== decorator.overrideElementHit && undefined !== decorator.getDecorationToolTip && decorator.overrideElementHit(hit))\r\n return decorator.getDecorationToolTip(hit);\r\n }\r\n return this.getElementToolTip(hit);\r\n }\r\n\r\n /** Allow a pickable decoration created using a persistent element id to handle a button event that identified it for the SelectTool.\r\n * @internal\r\n */\r\n public async overrideElementButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.overrideElementHit && undefined !== decorator.onDecorationButtonEvent && decorator.overrideElementHit(hit))\r\n return decorator.onDecorationButtonEvent(hit, ev);\r\n }\r\n return EventHandled.No;\r\n }\r\n\r\n /** Allow a pickable decoration created using a persistent element id to control whether snapping uses the persistent element's geometry.\r\n * @internal\r\n */\r\n public overrideElementGeometry(hit: HitDetail): GeometryStreamProps | undefined {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.overrideElementHit && undefined !== decorator.getDecorationGeometry && decorator.overrideElementHit(hit))\r\n return decorator.getDecorationGeometry(hit);\r\n }\r\n return undefined;\r\n }\r\n\r\n public get crossHairCursor(): string { return `url(${IModelApp.publicPath}cursors/crosshair.cur), crosshair`; }\r\n public get dynamicsCursor(): string { return `url(${IModelApp.publicPath}cursors/dynamics.cur), move`; }\r\n public get grabCursor(): string { return `url(${IModelApp.publicPath}cursors/openHand.cur), auto`; }\r\n public get grabbingCursor(): string { return `url(${IModelApp.publicPath}cursors/closedHand.cur), auto`; }\r\n public get walkCursor(): string { return `url(${IModelApp.publicPath}cursors/walk.cur), auto`; }\r\n public get rotateCursor(): string { return `url(${IModelApp.publicPath}cursors/rotate.cur), auto`; }\r\n public get lookCursor(): string { return `url(${IModelApp.publicPath}cursors/look.cur), auto`; }\r\n public get zoomCursor(): string { return `url(${IModelApp.publicPath}cursors/zoom.cur), auto`; }\r\n\r\n /** Change the cursor shown in all Viewports.\r\n * @param cursor The new cursor to display. If undefined, the default cursor is used.\r\n */\r\n public setViewCursor(cursor: string = \"default\") {\r\n if (cursor === this.cursor)\r\n return;\r\n this.cursor = cursor;\r\n for (const vp of this._viewports)\r\n vp.setCursor(cursor);\r\n }\r\n\r\n /** Intended strictly as a temporary solution for interactive editing applications, until official support for such apps is implemented.\r\n * Call this after editing one or more models, passing in the Ids of those models, to cause new tiles to be generated reflecting the changes.\r\n * Pass undefined if you are unsure which models changed (this is less efficient as it discards all tiles for all viewed models in all viewports).\r\n * @internal\r\n */\r\n public refreshForModifiedModels(modelIds: Id64Arg | undefined): void {\r\n for (const vp of this._viewports)\r\n vp.refreshForModifiedModels(modelIds);\r\n }\r\n\r\n /** Sets the number of [MSAA]($docs/learning/display/MSAA.md) samples for all currently- and subsequently-opened [[ScreenViewport]]s.\r\n * @param numSamples The number of samples as a power of two. Values of 1 or less indicates anti-aliasing should be disabled. Non-power-of-two values are rounded\r\n * down to the nearest power of two. The maximum number of samples supported depends upon the client's graphics hardware capabilities. Higher values produce\r\n * a higher-quality image but also may also reduce framerate.\r\n * @see [[Viewport.antialiasSamples]] to adjust the number of samples for a specific viewport.\r\n */\r\n public setAntialiasingAllViews(numSamples: number): void {\r\n for (const vp of this)\r\n vp.antialiasSamples = numSamples;\r\n\r\n System.instance.antialiasSamples = numSamples;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewManager.js","sourceRoot":"","sources":["../../src/ViewManager.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 Views\r\n */\r\nimport { BeEvent, BentleyStatus, BeTimePoint, BeUiEvent, Id64Arg } from \"@itwin/core-bentley\";\r\nimport { GeometryStreamProps } from \"@itwin/core-common\";\r\nimport { HitDetail } from \"./HitDetail\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { DisclosedTileTreeSet, TileTree } from \"./tile/internal\";\r\nimport { EventController } from \"./tools/EventController\";\r\nimport { BeButtonEvent, EventHandled } from \"./tools/Tool\";\r\nimport { ScreenViewport, ViewportDecorator } from \"./Viewport\";\r\nimport { System } from \"./render/webgl/System\";\r\n\r\n/** Interface for drawing [decoration graphics]($docs/learning/frontend/ViewDecorations.md) into, or on top of, the active [[ScreenViewport]]s managed by [[ViewManager]].\r\n * Decorators generate [[Decorations]].\r\n * @public\r\n */\r\nexport interface Decorator extends ViewportDecorator {\r\n /** If the [[decorate]] method created pickable graphics, return true if the supplied Id is from this Decorator.\r\n * @param id The Id of the currently selected pickable graphics.\r\n * @returns true if 'id' belongs to this Decorator\r\n */\r\n testDecorationHit?(id: string): boolean;\r\n\r\n /** If the [[decorate]] method created pickable graphics using a persistent element id instead of a transient id,\r\n * return true if the Decorator wants the opportunity to override the default persistent element behavior for\r\n * the supplied [[HitDetail]].\r\n * - Replace or augment the element's tooltip by implementing [[getDecorationToolTip]].\r\n * - Override the element's snap geometry by implementing [[getDecorationGeometry]].\r\n * - Handle button events as decorator events by implementing [[onDecorationButtonEvent]].\r\n * @param hit The HitDetail of the currently selected persistent element or pickable graphics using a persistent element id.\r\n * @returns true if this Decorator wants to override the default persistent element behavior.\r\n */\r\n overrideElementHit?(hit: HitDetail): boolean;\r\n\r\n /** If [[testDecorationHit]] or [[overrideElementHit]] returned true, implement this method to return the tooltip message for this Decorator.\r\n * @param hit The HitDetail about the decoration that was picked.\r\n * @returns A promise with the HTMLElement or string (that may contain HTML) with the tooltip message.\r\n */\r\n getDecorationToolTip?(hit: HitDetail): Promise<HTMLElement | string>;\r\n\r\n /** If [[testDecorationHit]] or [[overrideElementHit]] returned true, implement this method to handle a button event for this Decorator.\r\n * @param hit The HitDetail about the decoration that was picked.\r\n * @param ev The BeButtonEvent that identified this decoration.\r\n * @returns A Promise that resolves to Yes if event completely handled by decoration and event should not be processed by the calling tool.\r\n */\r\n onDecorationButtonEvent?(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled>;\r\n\r\n /** If [[testDecorationHit]] or [[overrideElementHit]] returned true, implement this method to return the snappable geometry for this Decorator. Geometry that changes with every cursor motion isn't valid for snapping.\r\n * An example would be an InteractiveTool for placing a linestring. It might wish to allow snapping to accepted segments, the segment from the last accepted point to the current cursor position would not be included\r\n * as snappable geometry and would just be displayed in dynamics.\r\n * @param hit The HitDetail about the decoration that was picked.\r\n * @returns GeometryStreamProps containing world coordinate snappable geometry for this decoration.\r\n */\r\n getDecorationGeometry?(hit: HitDetail): GeometryStreamProps | undefined;\r\n}\r\n\r\n/** Argument for [[ViewManager.onSelectedViewportChanged]]\r\n * @public\r\n */\r\nexport interface SelectedViewportChangedArgs {\r\n current?: ScreenViewport;\r\n previous?: ScreenViewport;\r\n}\r\n\r\n/** An object which customizes the locate tooltip.\r\n * @internal\r\n */\r\nexport interface ToolTipProvider {\r\n /** Augment or replace tooltip for the specified HitDetail.\r\n * To cooperate with other tooltip providers, replacing the input tooltip instead of appending information is discouraged.\r\n */\r\n augmentToolTip(hit: HitDetail, tooltip: Promise<HTMLElement | string>): Promise<HTMLElement | string>;\r\n}\r\n\r\n/** The ViewManager holds the list of opened views, plus the *selected view*. It also provides notifications of view open/close and suspend/resume.\r\n * Applications must call [[addViewport]] when new Viewports that should be associated with user events are created.\r\n *\r\n * A single ViewManager is created when [[IModelApp.startup]] is called. It can be accessed via the static member [[IModelApp.viewManager]].\r\n *\r\n * The ViewManager controls the render loop, which causes the contents of each registered [[Viewport]] to update on the screen.\r\n * @public\r\n */\r\nexport class ViewManager implements Iterable<ScreenViewport> {\r\n public inDynamicsMode = false;\r\n public cursor = \"default\";\r\n private readonly _viewports: ScreenViewport[] = [];\r\n public readonly decorators: Decorator[] = [];\r\n private _selectedView?: ScreenViewport;\r\n private _invalidateScenes = false;\r\n private _skipSceneCreation = false;\r\n private _doIdleWork = false;\r\n private _idleWorkTimer?: any;\r\n\r\n /** @internal */\r\n public readonly toolTipProviders: ToolTipProvider[] = [];\r\n\r\n private _beginIdleWork() {\r\n const idleWork = () => {\r\n if (undefined === this._idleWorkTimer)\r\n return;\r\n if (this._viewports.length > 0) {\r\n this._idleWorkTimer = undefined;\r\n return;\r\n }\r\n if (IModelApp.renderSystem.doIdleWork())\r\n this._idleWorkTimer = setTimeout(idleWork, 1);\r\n else\r\n this._idleWorkTimer = undefined;\r\n };\r\n\r\n if (undefined === this._idleWorkTimer)\r\n this._idleWorkTimer = setTimeout(idleWork, 1);\r\n }\r\n\r\n /** @internal */\r\n public onInitialized() {\r\n this.addDecorator(IModelApp.accuSnap);\r\n this.addDecorator(IModelApp.tentativePoint);\r\n this.addDecorator(IModelApp.accuDraw);\r\n this.addDecorator(IModelApp.toolAdmin);\r\n this.cursor = \"default\";\r\n\r\n const options = IModelApp.renderSystem.options;\r\n this._doIdleWork = true === options.doIdleWork;\r\n if (this._doIdleWork)\r\n this._beginIdleWork();\r\n }\r\n\r\n /** @internal */\r\n public onShutDown() {\r\n if (undefined !== this._idleWorkTimer) {\r\n clearTimeout(this._idleWorkTimer);\r\n this._idleWorkTimer = undefined;\r\n }\r\n this._viewports.length = 0;\r\n this.decorators.length = 0;\r\n this.toolTipProviders.length = 0;\r\n this._selectedView = undefined;\r\n }\r\n\r\n /** Called after the selected view changes.\r\n * @param old Previously selected viewport.\r\n * @param current Currently selected viewport.\r\n */\r\n public readonly onSelectedViewportChanged = new BeUiEvent<SelectedViewportChangedArgs>();\r\n\r\n /** Called after a view is opened. This can happen when the iModel is first opened or when a user opens a new view. */\r\n public readonly onViewOpen = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called after a view is closed. This can happen when the iModel is closed or when a user closes an open view. */\r\n public readonly onViewClose = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called after a view is suspended. This happens when the application is minimized or, on a tablet, when the application\r\n * is moved to the background.\r\n */\r\n public readonly onViewSuspend = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called after a suspended view is resumed. This can happen when a minimized application is restored\r\n * or, on a tablet, when the application is moved to the foreground.\r\n */\r\n public readonly onViewResume = new BeUiEvent<ScreenViewport>();\r\n\r\n /** Called at the beginning of each tick of the render loop, before any viewports have been updated.\r\n * The render loop is typically invoked by a requestAnimationFrame() callback. It will not be invoked if the ViewManager is tracking no viewports.\r\n * @note Due to the frequency of this event, avoid performing expensive work inside event listeners.\r\n * @see [[ViewManager.onFinishRender]]\r\n */\r\n public readonly onBeginRender = new BeEvent<() => void>();\r\n\r\n /** Called at the end of each tick of the render loop, after all viewports have been updated.\r\n * The render loop is typically invoked by a requestAnimationFrame() callback. It will not be invoked if the ViewManager is tracking no viewports.\r\n * @note Due to the frequency of this event, avoid performing expensive work inside event listeners.\r\n * @see [[ViewManager.onBeginRender]]\r\n */\r\n public readonly onFinishRender = new BeEvent<() => void>();\r\n\r\n /** @internal */\r\n public endDynamicsMode(): void {\r\n if (!this.inDynamicsMode)\r\n return;\r\n\r\n this.inDynamicsMode = false;\r\n\r\n const cursorVp = IModelApp.toolAdmin.cursorView;\r\n if (cursorVp)\r\n cursorVp.changeDynamics(undefined);\r\n\r\n for (const vp of this._viewports) {\r\n if (vp !== cursorVp)\r\n vp.changeDynamics(undefined);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public beginDynamicsMode() { this.inDynamicsMode = true; }\r\n\r\n /** @internal */\r\n public get doesHostHaveFocus(): boolean { return document.hasFocus(); }\r\n\r\n /** Set the selected [[Viewport]] to undefined. */\r\n public clearSelectedView(): void {\r\n const previousVp = this.selectedView;\r\n this._selectedView = undefined;\r\n this.notifySelectedViewportChanged(previousVp, undefined);\r\n }\r\n\r\n /** Sets the selected [[Viewport]]. */\r\n public async setSelectedView(vp: ScreenViewport | undefined): Promise<BentleyStatus> {\r\n if (undefined === vp)\r\n vp = this.getFirstOpenView();\r\n\r\n if (vp === this.selectedView) // already the selected view\r\n return BentleyStatus.SUCCESS;\r\n\r\n if (undefined === vp) {\r\n this.clearSelectedView();\r\n return BentleyStatus.ERROR;\r\n }\r\n\r\n const previousVp = this.selectedView;\r\n this._selectedView = vp;\r\n\r\n this.notifySelectedViewportChanged(previousVp, vp);\r\n\r\n if (undefined === previousVp)\r\n await IModelApp.toolAdmin.startDefaultTool();\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n /** @internal */\r\n public notifySelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined) {\r\n IModelApp.toolAdmin.onSelectedViewportChanged(previous, current);// eslint-disable-line @typescript-eslint/no-floating-promises\r\n this.onSelectedViewportChanged.emit({ previous, current });\r\n }\r\n\r\n /** The \"selected view\" is the default for certain operations. */\r\n public get selectedView(): ScreenViewport | undefined { return this._selectedView; }\r\n\r\n /** Get the first opened view. */\r\n public getFirstOpenView(): ScreenViewport | undefined { return this._viewports.length > 0 ? this._viewports[0] : undefined; }\r\n\r\n /** Check if only a single viewport is being used. If so, render directly on-screen using its WebGL canvas. Otherwise, render each view offscreen. */\r\n private updateRenderToScreen() {\r\n const renderToScreen = 1 === this._viewports.length;\r\n for (const vp of this)\r\n vp.rendersToScreen = renderToScreen;\r\n }\r\n\r\n /** Add a new Viewport to the list of opened views and create an EventController for it.\r\n * @param newVp the Viewport to add\r\n * @returns SUCCESS if vp was successfully added, ERROR if it was already present.\r\n * @note raises onViewOpen event with newVp.\r\n */\r\n public addViewport(newVp: ScreenViewport): BentleyStatus {\r\n if (this._viewports.includes(newVp)) // make sure its not already added\r\n return BentleyStatus.ERROR;\r\n\r\n newVp.setEventController(new EventController(newVp)); // this will direct events to the viewport\r\n this._viewports.push(newVp);\r\n this.updateRenderToScreen();\r\n this.setSelectedView(newVp);// eslint-disable-line @typescript-eslint/no-floating-promises\r\n\r\n // Start up the render loop if necessary.\r\n if (1 === this._viewports.length)\r\n IModelApp.startEventLoop();\r\n\r\n this.onViewOpen.emit(newVp);\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n /** Remove a Viewport from the list of opened views, and optionally dispose of it.\r\n * Typically a Viewport is dropped when it is no longer of any use to the application, in which case it should also be\r\n * disposed of as it may hold significant GPU resources.\r\n * However in some cases a Viewport may be temporarily dropped to suspend rendering; and subsequently re-added to\r\n * resume rendering - for example, when the Viewport is temporarily hidden by other UI elements.\r\n * In the latter case it is up to the caller to ensure the Viewport is properly disposed of when it is no longer needed.\r\n * Attempting to invoke any function on a Viewport after it has been disposed is an error.\r\n * @param vp the Viewport to remove.\r\n * @param disposeOfViewport Whether or not to dispose of the Viewport. Defaults to true.\r\n * @return SUCCESS if vp was successfully removed, ERROR if it was not present.\r\n * @note raises onViewClose event with vp.\r\n */\r\n public dropViewport(vp: ScreenViewport, disposeOfViewport: boolean = true): BentleyStatus {\r\n const index = this._viewports.indexOf(vp);\r\n if (index === -1)\r\n return BentleyStatus.ERROR;\r\n\r\n this.onViewClose.emit(vp);\r\n\r\n // make sure tools don't think the cursor is still in this viewport\r\n IModelApp.toolAdmin.forgetViewport(vp);\r\n\r\n vp.setEventController(undefined);\r\n this._viewports.splice(index, 1);\r\n\r\n if (this.selectedView === vp) // if removed viewport was selectedView, set it to undefined.\r\n this.setSelectedView(undefined);// eslint-disable-line @typescript-eslint/no-floating-promises\r\n\r\n vp.rendersToScreen = false;\r\n this.updateRenderToScreen();\r\n\r\n if (disposeOfViewport)\r\n vp.dispose();\r\n\r\n if (this._doIdleWork && this._viewports.length === 0)\r\n this._beginIdleWork();\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n /** Iterate over the viewports registered with the view manager. */\r\n public [Symbol.iterator](): Iterator<ScreenViewport> {\r\n return this._viewports[Symbol.iterator]();\r\n }\r\n\r\n /** Force each registered [[Viewport]] to regenerate all of its cached [[Decorations]] on the next frame. If the decorator parameter is specified, only\r\n * the specified decorator will have its cached decorations invalidated for all viewports.\r\n * @see [[Viewport.invalidateCachedDecorations]] to manually remove a decorator's cached decorations from a viewport, forcing them to be regenerated.\r\n * @beta\r\n */\r\n public invalidateCachedDecorationsAllViews(decorator: ViewportDecorator): void {\r\n if (decorator.useCachedDecorations)\r\n for (const vp of this)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n\r\n /** Force each registered [[Viewport]] to regenerate its [[Decorations]] on the next frame. */\r\n public invalidateDecorationsAllViews(): void {\r\n for (const vp of this)\r\n vp.invalidateDecorations();\r\n }\r\n\r\n /** Force each registered [[Viewport]] to regenerate its [[FeatureSymbology.Overrides]] on the next frame.\r\n * @alpha\r\n */\r\n public invalidateSymbologyOverridesAllViews(): void {\r\n for (const vp of this)\r\n vp.setFeatureOverrideProviderChanged();\r\n }\r\n\r\n /** @internal */\r\n public onSelectionSetChanged(_iModel: IModelConnection) {\r\n for (const vp of this)\r\n vp.markSelectionSetDirty();\r\n\r\n IModelApp.requestNextAnimation();\r\n }\r\n\r\n /** @internal */\r\n public invalidateViewportScenes(): void {\r\n for (const vp of this)\r\n vp.invalidateScene();\r\n }\r\n\r\n /** @internal */\r\n public validateViewportScenes(): void {\r\n for (const vp of this)\r\n vp.setValidScene();\r\n }\r\n\r\n /** @internal */\r\n public invalidateScenes(): void {\r\n this._invalidateScenes = true;\r\n IModelApp.requestNextAnimation();\r\n }\r\n /** @internal */\r\n public get sceneInvalidated(): boolean { return this._invalidateScenes; }\r\n\r\n /** Invoked by ToolAdmin event loop.\r\n * @internal\r\n */\r\n public renderLoop(): void {\r\n if (0 === this._viewports.length)\r\n return;\r\n if (this._skipSceneCreation)\r\n this.validateViewportScenes();\r\n else if (this._invalidateScenes)\r\n this.invalidateViewportScenes();\r\n\r\n this._invalidateScenes = false;\r\n\r\n this.onBeginRender.raiseEvent();\r\n\r\n for (const vp of this._viewports)\r\n vp.renderFrame();\r\n\r\n this.onFinishRender.raiseEvent();\r\n }\r\n\r\n /** Purge TileTrees that haven't been drawn since the specified time point and are not currently in use by any ScreenViewport.\r\n * Intended strictly for debugging purposes - TileAdmin takes care of properly purging.\r\n * @internal\r\n */\r\n public purgeTileTrees(olderThan: BeTimePoint): void {\r\n // A single viewport can display tiles from more than one IModelConnection.\r\n // NOTE: A viewport may be displaying no trees - but we need to record its IModel so we can purge those which are NOT being displayed\r\n // NOTE: That won't catch external tile trees previously used by that viewport.\r\n const trees = new DisclosedTileTreeSet();\r\n const treesByIModel = new Map<IModelConnection, Set<TileTree>>();\r\n for (const vp of this._viewports) {\r\n vp.discloseTileTrees(trees);\r\n if (undefined === treesByIModel.get(vp.iModel))\r\n treesByIModel.set(vp.iModel, new Set<TileTree>());\r\n }\r\n\r\n for (const tree of trees) {\r\n let set = treesByIModel.get(tree.iModel);\r\n if (undefined === set) {\r\n set = new Set<TileTree>();\r\n treesByIModel.set(tree.iModel, set);\r\n }\r\n\r\n set.add(tree);\r\n }\r\n\r\n for (const entry of treesByIModel) {\r\n const iModel = entry[0];\r\n iModel.tiles.purge(olderThan, entry[1]);\r\n }\r\n }\r\n\r\n /** Get the tooltip for a persistent element.\r\n * Calls the backend method [Element.getToolTipMessage]($backend), and replaces all instances of `${localizeTag}` with localized string from IModelApp.i18n.\r\n * @beta\r\n */\r\n public async getElementToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n const msg: string[] = await hit.iModel.getToolTipMessage(hit.sourceId); // wait for the locate message(s) from the backend\r\n return IModelApp.formatElementToolTip(msg);\r\n }\r\n\r\n /** Add a new [[ToolTipProvider]] to customize the locate tooltip.\r\n * @internal\r\n * @param provider The new tooltip provider to add.\r\n * @throws Error if provider is already active.\r\n * @returns a function that may be called to remove this provider (in lieu of calling [[dropToolTipProvider]].)\r\n * @see [[dropToolTipProvider]]\r\n */\r\n public addToolTipProvider(provider: ToolTipProvider): () => void {\r\n if (this.toolTipProviders.includes(provider))\r\n throw new Error(\"tooltip provider already registered\");\r\n this.toolTipProviders.push(provider);\r\n return () => { this.dropToolTipProvider(provider); };\r\n }\r\n\r\n /** Drop (remove) a [[ToolTipProvider]] so it is no longer active.\r\n * @internal\r\n * @param provider The tooltip to drop.\r\n * @note Does nothing if provider is not currently active.\r\n */\r\n public dropToolTipProvider(provider: ToolTipProvider) {\r\n const index = this.toolTipProviders.indexOf(provider);\r\n if (index >= 0)\r\n this.toolTipProviders.splice(index, 1);\r\n }\r\n\r\n /** Add a new [[Decorator]] to display decorations into the active views.\r\n * @param decorator The new decorator to add.\r\n * @throws Error if decorator is already active.\r\n * @returns a function that may be called to remove this decorator (in lieu of calling [[dropDecorator]].)\r\n * @see [[dropDecorator]]\r\n */\r\n public addDecorator(decorator: Decorator): () => void {\r\n if (this.decorators.includes(decorator))\r\n throw new Error(\"decorator already registered\");\r\n\r\n this.decorators.push(decorator);\r\n this.invalidateDecorationsAllViews();\r\n return () => { this.dropDecorator(decorator); };\r\n }\r\n\r\n /** Drop (remove) a [[Decorator]] so it is no longer active.\r\n * @param decorator The Decorator to drop.\r\n * @returns true if the decorator was found and removed; false if the decorator was not found.\r\n */\r\n public dropDecorator(decorator: Decorator): boolean {\r\n const index = this.decorators.indexOf(decorator);\r\n if (index < 0)\r\n return false;\r\n\r\n this.invalidateCachedDecorationsAllViews(decorator);\r\n this.decorators.splice(index, 1);\r\n this.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n /** Get the tooltip for a pickable decoration.\r\n * @internal\r\n */\r\n public async getDecorationToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n for (const decorator of this.decorators) {\r\n if (undefined !== decorator.testDecorationHit && undefined !== decorator.getDecorationToolTip && decorator.testDecorationHit(hit.sourceId))\r\n return decorator.getDecorationToolTip(hit);\r\n }\r\n return hit.viewport ? hit.viewport.getToolTip(hit) : \"\";\r\n }\r\n\r\n /** Allow a pickable decoration to handle a button event that identified it for the SelectTool.\r\n * @internal\r\n */\r\n public async onDecorationButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.testDecorationHit && undefined !== decorator.onDecorationButtonEvent && decorator.testDecorationHit(hit.sourceId))\r\n return decorator.onDecorationButtonEvent(hit, ev);\r\n }\r\n return EventHandled.No;\r\n }\r\n\r\n /** Allow a pickable decoration to be snapped to by AccuSnap or TentativePoint.\r\n * @internal\r\n */\r\n public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.testDecorationHit && undefined !== decorator.getDecorationGeometry && decorator.testDecorationHit(hit.sourceId))\r\n return decorator.getDecorationGeometry(hit);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Allow a pickable decoration created using a persistent element id to augment or replace the the persistent element's tooltip.\r\n * @internal\r\n */\r\n public async overrideElementToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n for (const decorator of this.decorators) {\r\n if (undefined !== decorator.overrideElementHit && undefined !== decorator.getDecorationToolTip && decorator.overrideElementHit(hit))\r\n return decorator.getDecorationToolTip(hit);\r\n }\r\n return this.getElementToolTip(hit);\r\n }\r\n\r\n /** Allow a pickable decoration created using a persistent element id to handle a button event that identified it for the SelectTool.\r\n * @internal\r\n */\r\n public async overrideElementButtonEvent(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.overrideElementHit && undefined !== decorator.onDecorationButtonEvent && decorator.overrideElementHit(hit))\r\n return decorator.onDecorationButtonEvent(hit, ev);\r\n }\r\n return EventHandled.No;\r\n }\r\n\r\n /** Allow a pickable decoration created using a persistent element id to control whether snapping uses the persistent element's geometry.\r\n * @internal\r\n */\r\n public overrideElementGeometry(hit: HitDetail): GeometryStreamProps | undefined {\r\n for (const decorator of IModelApp.viewManager.decorators) {\r\n if (undefined !== decorator.overrideElementHit && undefined !== decorator.getDecorationGeometry && decorator.overrideElementHit(hit))\r\n return decorator.getDecorationGeometry(hit);\r\n }\r\n return undefined;\r\n }\r\n\r\n public get crossHairCursor(): string { return `url(${IModelApp.publicPath}cursors/crosshair.cur), crosshair`; }\r\n public get dynamicsCursor(): string { return `url(${IModelApp.publicPath}cursors/dynamics.cur), move`; }\r\n public get grabCursor(): string { return `url(${IModelApp.publicPath}cursors/openHand.cur), auto`; }\r\n public get grabbingCursor(): string { return `url(${IModelApp.publicPath}cursors/closedHand.cur), auto`; }\r\n public get walkCursor(): string { return `url(${IModelApp.publicPath}cursors/walk.cur), auto`; }\r\n public get rotateCursor(): string { return `url(${IModelApp.publicPath}cursors/rotate.cur), auto`; }\r\n public get lookCursor(): string { return `url(${IModelApp.publicPath}cursors/look.cur), auto`; }\r\n public get zoomCursor(): string { return `url(${IModelApp.publicPath}cursors/zoom.cur), auto`; }\r\n\r\n /** Change the cursor shown in all Viewports.\r\n * @param cursor The new cursor to display. If undefined, the default cursor is used.\r\n */\r\n public setViewCursor(cursor: string = \"default\") {\r\n if (cursor === this.cursor)\r\n return;\r\n this.cursor = cursor;\r\n for (const vp of this._viewports)\r\n vp.setCursor(cursor);\r\n }\r\n\r\n /** Intended strictly as a temporary solution for interactive editing applications, until official support for such apps is implemented.\r\n * Call this after editing one or more models, passing in the Ids of those models, to cause new tiles to be generated reflecting the changes.\r\n * Pass undefined if you are unsure which models changed (this is less efficient as it discards all tiles for all viewed models in all viewports).\r\n * @internal\r\n */\r\n public refreshForModifiedModels(modelIds: Id64Arg | undefined): void {\r\n for (const vp of this._viewports)\r\n vp.refreshForModifiedModels(modelIds);\r\n }\r\n\r\n /** Sets the number of [MSAA]($docs/learning/display/MSAA.md) samples for all currently- and subsequently-opened [[ScreenViewport]]s.\r\n * @param numSamples The number of samples as a power of two. Values of 1 or less indicates anti-aliasing should be disabled. Non-power-of-two values are rounded\r\n * down to the nearest power of two. The maximum number of samples supported depends upon the client's graphics hardware capabilities. Higher values produce\r\n * a higher-quality image but also may also reduce framerate.\r\n * @see [[Viewport.antialiasSamples]] to adjust the number of samples for a specific viewport.\r\n */\r\n public setAntialiasingAllViews(numSamples: number): void {\r\n for (const vp of this)\r\n vp.antialiasSamples = numSamples;\r\n\r\n System.instance.antialiasSamples = numSamples;\r\n }\r\n}\r\n"]}
@@ -44,7 +44,7 @@ export interface VertexTableProps {
44
44
  * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.
45
45
  */
46
46
  readonly usesUnquantizedPositions?: boolean;
47
- /** Quantization parameters for the vertex positions encoded into the array, the positions are quantized;
47
+ /** Quantization parameters for the vertex positions encoded into the array, if the positions are quantized;
48
48
  * and for deriving the range of positions in the table, whether quantized or not.
49
49
  */
50
50
  readonly qparams: QParams3d;
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTable.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTable.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 Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range2d } from \"@itwin/core-geometry\";\r\nimport { ColorDef, ColorIndex, FeatureIndex, FeatureIndexType, QParams2d, QParams3d, QPoint2d, QPoint3dList } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { AuxChannelTable } from \"./AuxChannelTable\";\r\nimport { MeshArgs, Point3dList, PolylineArgs } from \"./mesh/MeshPrimitives\";\r\nimport { createSurfaceMaterial, SurfaceParams, SurfaceType } from \"./SurfaceParams\";\r\nimport { EdgeParams } from \"./EdgeParams\";\r\n\r\n/**\r\n * Holds an array of indices into a VertexTable. Each index is a 24-bit unsigned integer.\r\n * The order of the indices specifies the order in which vertices are drawn.\r\n * @internal\r\n */\r\nexport class VertexIndices {\r\n public readonly data: Uint8Array;\r\n\r\n /**\r\n * Directly construct from an array of bytes in which each index occupies 3 contiguous bytes.\r\n * The length of the array must be a multiple of 3. This object takes ownership of the array.\r\n */\r\n public constructor(data: Uint8Array) {\r\n this.data = data;\r\n assert(0 === this.data.length % 3);\r\n }\r\n\r\n /** Get the number of 24-bit indices. */\r\n public get length(): number { return this.data.length / 3; }\r\n\r\n /** Convert an array of 24-bit unsigned integer values into a VertexIndices object. */\r\n public static fromArray(indices: number[]): VertexIndices {\r\n const bytes = new Uint8Array(indices.length * 3);\r\n for (let i = 0; i < indices.length; i++)\r\n this.encodeIndex(indices[i], bytes, i * 3);\r\n\r\n return new VertexIndices(bytes);\r\n }\r\n\r\n public static encodeIndex(index: number, bytes: Uint8Array, byteIndex: number): void {\r\n assert(byteIndex + 2 < bytes.length);\r\n bytes[byteIndex + 0] = index & 0x000000ff;\r\n bytes[byteIndex + 1] = (index & 0x0000ff00) >> 8;\r\n bytes[byteIndex + 2] = (index & 0x00ff0000) >> 16;\r\n }\r\n\r\n public setNthIndex(n: number, value: number): void {\r\n VertexIndices.encodeIndex(value, this.data, n * 3);\r\n }\r\n\r\n public decodeIndex(index: number): number {\r\n assert(index < this.length);\r\n const byteIndex = index * 3;\r\n return this.data[byteIndex] | (this.data[byteIndex + 1] << 8) | (this.data[byteIndex + 2] << 16);\r\n }\r\n\r\n public decodeIndices(): number[] {\r\n const indices = [];\r\n for (let i = 0; i < this.length; i++)\r\n indices.push(this.decodeIndex(i));\r\n\r\n return indices;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface Dimensions {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/** @internal */\r\nexport function computeDimensions(nEntries: number, nRgbaPerEntry: number, nExtraRgba: number): Dimensions {\r\n const maxSize = IModelApp.renderSystem.maxTextureSize;\r\n const nRgba = nEntries * nRgbaPerEntry + nExtraRgba;\r\n\r\n if (nRgba < maxSize)\r\n return { width: nRgba, height: 1 };\r\n\r\n // Make roughly square to reduce unused space in last row\r\n let width = Math.ceil(Math.sqrt(nRgba));\r\n\r\n // Ensure a given entry's RGBA values all fit on the same row.\r\n const remainder = width % nRgbaPerEntry;\r\n if (0 !== remainder) {\r\n width += nRgbaPerEntry - remainder;\r\n }\r\n\r\n // Compute height\r\n let height = Math.ceil(nRgba / width);\r\n if (width * height < nRgba)\r\n ++height;\r\n\r\n assert(height <= maxSize);\r\n assert(width <= maxSize);\r\n assert(width * height >= nRgba);\r\n assert(Math.floor(height) === height);\r\n assert(Math.floor(width) === width);\r\n\r\n // Row padding should never be necessary...\r\n assert(0 === width % nRgbaPerEntry);\r\n\r\n return { width, height };\r\n}\r\n\r\n/** Describes a VertexTable.\r\n * @internal\r\n */\r\nexport interface VertexTableProps {\r\n /** The rectangular array of vertex data, of size width*height*numRgbaPerVertex bytes. */\r\n readonly data: Uint8Array;\r\n /** If true, positions are not quantized but instead stored as 32-bit floats.\r\n * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.\r\n */\r\n readonly usesUnquantizedPositions?: boolean;\r\n /** Quantization parameters for the vertex positions encoded into the array, the positions are quantized;\r\n * and for deriving the range of positions in the table, whether quantized or not.\r\n */\r\n readonly qparams: QParams3d;\r\n /** The number of 4-byte 'RGBA' values in each row of the array. Must be divisible by numRgbaPerVertex. */\r\n readonly width: number;\r\n /** The number of rows in the array. */\r\n readonly height: number;\r\n /** Whether or not the vertex colors contain translucent colors. */\r\n readonly hasTranslucency: boolean;\r\n /** If no color table exists, the color to use for all vertices. */\r\n readonly uniformColor?: ColorDef;\r\n /** Describes the number of features (none, one, or multiple) contained. */\r\n readonly featureIndexType: FeatureIndexType;\r\n /** If featureIndexType is 'Uniform', the feature ID associated with all vertices. */\r\n readonly uniformFeatureID?: number;\r\n /** The number of vertices in the table. Must be less than (width*height)/numRgbaPerVertex. */\r\n readonly numVertices: number;\r\n /** The number of 4-byte 'RGBA' values associated with each vertex. */\r\n readonly numRgbaPerVertex: number;\r\n /** If vertex data include texture UV coordinates, the quantization params for those coordinates. */\r\n readonly uvParams?: QParams2d;\r\n}\r\n\r\n/**\r\n * Represents vertex data (position, color, normal, UV params, etc) in a rectangular array.\r\n * Each vertex is described by one or more contiguous 4-byte ('RGBA') values.\r\n * This allows vertex data to be uploaded to the GPU as a texture and vertex data to be sampled\r\n * from that texture using a single vertex ID representing an index into the array.\r\n * Vertex color is identified by a 16-bit index into a color table appended to the vertex data.\r\n * @internal\r\n */\r\nexport class VertexTable implements VertexTableProps {\r\n /** The rectangular array of vertex data, of size width*height*numRgbaPerVertex bytes. */\r\n public readonly data: Uint8Array;\r\n /** If true, positions are not quantized but instead stored as 32-bit floats.\r\n * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.\r\n */\r\n public readonly usesUnquantizedPositions?: boolean;\r\n /** Quantization parameters for the vertex positions encoded into the array, the positions are quantized;\r\n * and for deriving the range of positions in the table, whether quantized or not.\r\n */\r\n public readonly qparams: QParams3d;\r\n /** The number of 4-byte 'RGBA' values in each row of the array. Must be divisible by numRgbaPerVertex. */\r\n public readonly width: number;\r\n /** The number of rows in the array. */\r\n public readonly height: number;\r\n /** Whether or not the vertex colors contain translucent colors. */\r\n public readonly hasTranslucency: boolean;\r\n /** If no color table exists, the color to use for all vertices. */\r\n public readonly uniformColor?: ColorDef;\r\n /** Describes the number of features (none, one, or multiple) contained. */\r\n public readonly featureIndexType: FeatureIndexType;\r\n /** If featureIndexType is 'Uniform', the feature ID associated with all vertices. */\r\n public readonly uniformFeatureID?: number;\r\n /** The number of vertices in the table. Must be less than (width*height)/numRgbaPerVertex. */\r\n public readonly numVertices: number;\r\n /** The number of 4-byte 'RGBA' values associated with each vertex. */\r\n public readonly numRgbaPerVertex: number;\r\n /** If vertex data include texture UV coordinates, the quantization params for those coordinates. */\r\n public readonly uvParams?: QParams2d;\r\n\r\n /** Construct a VertexTable. The VertexTable takes ownership of all input data - it must not be later modified by the caller. */\r\n public constructor(props: VertexTableProps) {\r\n this.data = props.data;\r\n this.qparams = props.qparams;\r\n this.usesUnquantizedPositions = !!props.usesUnquantizedPositions;\r\n this.width = props.width;\r\n this.height = props.height;\r\n this.hasTranslucency = true === props.hasTranslucency;\r\n this.uniformColor = props.uniformColor;\r\n this.featureIndexType = props.featureIndexType;\r\n this.uniformFeatureID = props.uniformFeatureID;\r\n this.numVertices = props.numVertices;\r\n this.numRgbaPerVertex = props.numRgbaPerVertex;\r\n this.uvParams = props.uvParams;\r\n }\r\n\r\n public static buildFrom(builder: VertexTableBuilder, colorIndex: ColorIndex, featureIndex: FeatureIndex): VertexTable {\r\n const { numVertices, numRgbaPerVertex } = builder;\r\n const numColors = colorIndex.isUniform ? 0 : colorIndex.numColors;\r\n const dimensions = computeDimensions(numVertices, numRgbaPerVertex, numColors);\r\n assert(0 === dimensions.width % numRgbaPerVertex || (0 < numColors && 1 === dimensions.height));\r\n\r\n const data = new Uint8Array(dimensions.width * dimensions.height * 4);\r\n\r\n builder.data = data;\r\n for (let i = 0; i < numVertices; i++)\r\n builder.appendVertex(i);\r\n\r\n builder.appendColorTable(colorIndex);\r\n\r\n builder.data = undefined;\r\n\r\n return new VertexTable({\r\n data,\r\n qparams: builder.qparams,\r\n usesUnquantizedPositions: builder.usesUnquantizedPositions,\r\n width: dimensions.width,\r\n height: dimensions.height,\r\n hasTranslucency: colorIndex.hasAlpha,\r\n uniformColor: colorIndex.uniform,\r\n numVertices,\r\n numRgbaPerVertex,\r\n uvParams: builder.uvParams,\r\n featureIndexType: featureIndex.type,\r\n uniformFeatureID: featureIndex.type === FeatureIndexType.Uniform ? featureIndex.featureID : undefined,\r\n });\r\n }\r\n\r\n public static createForPolylines(args: PolylineArgs): VertexTable | undefined {\r\n const polylines = args.polylines;\r\n if (0 < polylines.length)\r\n return this.buildFrom(createPolylineBuilder(args), args.colors, args.features);\r\n else\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Describes mesh geometry to be submitted to the rendering system.\r\n * A mesh consists of a surface and its edges, which may include any combination of silhouettes, polylines, and single segments.\r\n * The surface and edges all refer to the same vertex table.\r\n */\r\nexport class MeshParams {\r\n public readonly vertices: VertexTable;\r\n public readonly surface: SurfaceParams;\r\n public readonly edges?: EdgeParams;\r\n public readonly isPlanar: boolean;\r\n public readonly auxChannels?: AuxChannelTable;\r\n\r\n /** Directly construct a MeshParams. The MeshParams takes ownership of all input data. */\r\n public constructor(vertices: VertexTable, surface: SurfaceParams, edges?: EdgeParams, isPlanar?: boolean, auxChannels?: AuxChannelTable) {\r\n this.vertices = vertices;\r\n this.surface = surface;\r\n this.edges = edges;\r\n this.isPlanar = !!isPlanar;\r\n this.auxChannels = auxChannels;\r\n }\r\n\r\n /** Construct from a MeshArgs. */\r\n public static create(args: MeshArgs): MeshParams {\r\n const builder = createMeshBuilder(args);\r\n const vertices = VertexTable.buildFrom(builder, args.colors, args.features);\r\n\r\n const surfaceIndices = VertexIndices.fromArray(args.vertIndices);\r\n\r\n const surface: SurfaceParams = {\r\n type: builder.type,\r\n indices: surfaceIndices,\r\n fillFlags: args.fillFlags,\r\n hasBakedLighting: true === args.hasBakedLighting,\r\n hasFixedNormals: true === args.hasFixedNormals,\r\n textureMapping: undefined !== args.textureMapping ? { texture: args.textureMapping.texture, alwaysDisplayed: false } : undefined,\r\n material: createSurfaceMaterial(args.material),\r\n };\r\n\r\n const channels = undefined !== args.auxChannels ? AuxChannelTable.fromChannels(args.auxChannels, vertices.numVertices) : undefined;\r\n const edges = EdgeParams.fromMeshArgs(args);\r\n return new MeshParams(vertices, surface, edges, args.isPlanar, channels);\r\n }\r\n}\r\n\r\n/** Builds a VertexTable from some data type supplying the vertex data. */\r\nexport abstract class VertexTableBuilder {\r\n public data?: Uint8Array;\r\n private _curIndex: number = 0;\r\n\r\n public abstract get numVertices(): number;\r\n public abstract get numRgbaPerVertex(): number;\r\n public abstract get qparams(): QParams3d;\r\n public abstract get usesUnquantizedPositions(): boolean;\r\n public get uvParams(): QParams2d | undefined { return undefined; }\r\n public abstract appendVertex(vertIndex: number): void;\r\n\r\n public appendColorTable(colorIndex: ColorIndex) {\r\n if (undefined !== colorIndex.nonUniform) {\r\n for (const color of colorIndex.nonUniform.colors) {\r\n this.appendColor(color);\r\n }\r\n }\r\n }\r\n\r\n protected advance(nBytes: number) {\r\n this._curIndex += nBytes;\r\n assert(this._curIndex <= this.data!.length);\r\n }\r\n\r\n protected append8(val: number) {\r\n assert(0 <= val);\r\n assert(val <= 0xff);\r\n assert(val === Math.floor(val));\r\n\r\n this.data![this._curIndex] = val;\r\n this.advance(1);\r\n }\r\n protected append16(val: number) {\r\n this.append8(val & 0x00ff);\r\n this.append8(val >>> 8);\r\n }\r\n protected append32(val: number) {\r\n this.append16(val & 0x0000ffff);\r\n this.append16(val >>> 16);\r\n }\r\n\r\n private appendColor(tbgr: number) {\r\n const colors = ColorDef.getColors(tbgr);\r\n\r\n // invert transparency => alpha\r\n colors.t = 255 - colors.t;\r\n\r\n // premultiply alpha...\r\n switch (colors.t) {\r\n case 0:\r\n colors.r = colors.g = colors.b = 0;\r\n break;\r\n case 255:\r\n break;\r\n default: {\r\n const f = colors.t / 255.0;\r\n colors.r = Math.floor(colors.r * f + 0.5);\r\n colors.g = Math.floor(colors.g * f + 0.5);\r\n colors.b = Math.floor(colors.b * f + 0.5);\r\n break;\r\n }\r\n }\r\n\r\n // Store 32-bit value in little-endian order (red first)\r\n this.append8(colors.r);\r\n this.append8(colors.g);\r\n this.append8(colors.b);\r\n this.append8(colors.t);\r\n }\r\n}\r\n\r\ntype VertexData = PolylineArgs | MeshArgs;\r\ntype Quantized<T extends VertexData> = Omit<T, \"points\"> & { points: QPoint3dList };\r\ntype Unquantized<T extends VertexData> = Omit<T, \"points\"> & { points: Omit<Point3dList, \"add\"> };\r\n\r\nnamespace Quantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n /**\r\n * Supplies vertex data from a PolylineArgs or MeshArgs. Each vertex consists of 12 bytes:\r\n * pos.x 00\r\n * pos.y 02\r\n * pos.z 04\r\n * colorIndex 06\r\n * featureIndex 08 (24 bits)\r\n * materialIndex 0B (for meshes that use a material atlas; otherwise unused). NOTE: Currently front-end code does not produce material atlases.\r\n */\r\n export class SimpleBuilder<T extends Quantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _qpoints: QPoint3dList;\r\n\r\n public constructor(args: T) {\r\n super();\r\n this._qpoints = args.points;\r\n this.args = args;\r\n assert(undefined !== this.args.points);\r\n }\r\n\r\n public get numVertices() { return this.args.points.length; }\r\n public get numRgbaPerVertex() { return 3; }\r\n public get usesUnquantizedPositions() { return false; }\r\n public get qparams() {\r\n return this._qpoints.params;\r\n }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendPosition(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n this.append16(this._qpoints.list[vertIndex].x);\r\n this.append16(this._qpoints.list[vertIndex].y);\r\n this.append16(this._qpoints.list[vertIndex].z);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform) {\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n } else {\r\n this.advance(2);\r\n }\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (undefined !== this.args.features.featureIDs) {\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n } else {\r\n this.advance(4);\r\n }\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs. */\r\n export class MeshBuilder extends SimpleBuilder<Quantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Quantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Quantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs where each vertex consists of 16 bytes.\r\n * In addition to the SimpleBuilder data, the final 4 bytes hold the quantized UV params\r\n * The color index is left uninitialized as it is unused.\r\n */\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d, type: SurfaceType = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n this.appendPosition(vertIndex);\r\n this.appendNormal(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n this.appendUVParams(vertIndex);\r\n }\r\n\r\n protected appendNormal(_vertIndex: number): void { this.advance(2); } // no normal for unlit meshes\r\n\r\n protected appendUVParams(vertIndex: number) {\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n }\r\n\r\n /** As with TexturedMeshBuilder, but the color index is replaced with the oct-encoded normal value. */\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendNormal(vertIndex: number) { this.append16(this.args.normals![vertIndex].value); }\r\n }\r\n\r\n /** 16 bytes. The last 2 bytes are unused; the 2 immediately preceding it hold the oct-encoded normal value. */\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2); // 2 unused bytes\r\n }\r\n }\r\n}\r\n\r\n/** Builders in this namespace store vertex positions as 32-bit floats instead of quantizing to 16-bit unsigned integers.\r\n * This is preferred for decoration graphics, which might contain ranges of positions that exceed the limits for quantization; if quantized,\r\n * they could produce visual artifacts.\r\n * Each builder produces a VertexTable that starts with the following layout:\r\n * pos.x: 00\r\n * pos.y: 04\r\n * pos.z: 08\r\n * featureIndex: 0C\r\n * materialIndex:0F (NOTE: frontend code currently doesn't produce material atlases, so this is always zero).\r\n * Followed (by default) by:\r\n * colorIndex: 10\r\n * unused: 12\r\n * Subclasses may add 4 more bytes and/or overwrite the final 4 bytes above.\r\n */\r\nnamespace Unquantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n const u32Array = new Uint32Array(1);\r\n const f32Array = new Float32Array(u32Array.buffer);\r\n\r\n // colorIndex: 10\r\n // unused: 12\r\n export class SimpleBuilder<T extends Unquantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _points: Point3d[];\r\n private _qparams3d: QParams3d;\r\n\r\n public constructor(args: T) {\r\n super();\r\n assert(!(args.points instanceof QPoint3dList));\r\n this._qparams3d = QParams3d.fromRange(args.points.range);\r\n this.args = args;\r\n this._points = args.points;\r\n }\r\n\r\n public get numVertices() { return this._points.length; }\r\n public get numRgbaPerVertex() { return 5; }\r\n public get usesUnquantizedPositions() { return true; }\r\n public get qparams() { return this._qparams3d; }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendTransposePosAndFeatureNdx(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n }\r\n\r\n private appendFloat32(val: number) {\r\n f32Array[0] = val;\r\n this.append32(u32Array[0]);\r\n }\r\n\r\n private convertFloat32(val: number): number {\r\n f32Array[0] = val;\r\n return u32Array[0];\r\n }\r\n\r\n protected appendTransposePosAndFeatureNdx(vertIndex: number) {\r\n // transpose position xyz vals into [0].xyz - [3].xyz, and add feature index at .w\r\n // this is to order things to let shader code access much more efficiently\r\n const pt = this._points[vertIndex];\r\n const x = this.convertFloat32 (pt.x);\r\n const y = this.convertFloat32 (pt.y);\r\n const z = this.convertFloat32 (pt.z);\r\n const featID = (this.args.features.featureIDs) ? this.args.features.featureIDs[vertIndex] : 0;\r\n this.append8(x & 0x000000ff);\r\n this.append8(y & 0x000000ff);\r\n this.append8(z & 0x000000ff);\r\n this.append8(featID & 0x000000ff);\r\n this.append8((x >>> 8) & 0x000000ff);\r\n this.append8((y >>> 8) & 0x000000ff);\r\n this.append8((z >>> 8) & 0x000000ff);\r\n this.append8((featID >>> 8) & 0x000000ff);\r\n this.append8((x >>> 16) & 0x000000ff);\r\n this.append8((y >>> 16) & 0x000000ff);\r\n this.append8((z >>> 16) & 0x000000ff);\r\n this.append8((featID >>> 16) & 0x000000ff);\r\n this.append8(x >>> 24);\r\n this.append8(y >>> 24);\r\n this.append8(z >>> 24);\r\n this.append8(featID >>> 24);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n const pt = this._points[vertIndex];\r\n this.appendFloat32(pt.x);\r\n this.appendFloat32(pt.y);\r\n this.appendFloat32(pt.z);\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (this.args.features.featureIDs)\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n else\r\n this.advance(4);\r\n }\r\n\r\n protected _appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform)\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n else\r\n this.advance(2);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n this._appendColorIndex(vertIndex);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n export class MeshBuilder extends SimpleBuilder<Unquantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Unquantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Unquantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d, type = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n\r\n protected override appendColorIndex() { }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n // normal: 14\r\n // unused: 16\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 6; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n // color: 10\r\n // normal: 12\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendColorIndex(vertIndex: number) {\r\n super._appendColorIndex(vertIndex);\r\n }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n }\r\n }\r\n}\r\n\r\nfunction createMeshBuilder(args: MeshArgs): VertexTableBuilder & { type: SurfaceType } {\r\n if (args.points instanceof QPoint3dList)\r\n return Quantized.MeshBuilder.create(args as Quantized<MeshArgs>); // wtf compiler?\r\n else\r\n return Unquantized.MeshBuilder.create(args as Unquantized<MeshArgs>); // seriously wtf?\r\n}\r\n\r\nfunction createPolylineBuilder(args: PolylineArgs): VertexTableBuilder {\r\n if (args.points instanceof QPoint3dList)\r\n return new Quantized.SimpleBuilder(args as Quantized<PolylineArgs>); // wtf compiler?\r\n else\r\n return new Unquantized.SimpleBuilder(args as Unquantized<PolylineArgs>); // seriously wtf?\r\n}\r\n"]}
1
+ {"version":3,"file":"VertexTable.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTable.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 Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range2d } from \"@itwin/core-geometry\";\r\nimport { ColorDef, ColorIndex, FeatureIndex, FeatureIndexType, QParams2d, QParams3d, QPoint2d, QPoint3dList } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { AuxChannelTable } from \"./AuxChannelTable\";\r\nimport { MeshArgs, Point3dList, PolylineArgs } from \"./mesh/MeshPrimitives\";\r\nimport { createSurfaceMaterial, SurfaceParams, SurfaceType } from \"./SurfaceParams\";\r\nimport { EdgeParams } from \"./EdgeParams\";\r\n\r\n/**\r\n * Holds an array of indices into a VertexTable. Each index is a 24-bit unsigned integer.\r\n * The order of the indices specifies the order in which vertices are drawn.\r\n * @internal\r\n */\r\nexport class VertexIndices {\r\n public readonly data: Uint8Array;\r\n\r\n /**\r\n * Directly construct from an array of bytes in which each index occupies 3 contiguous bytes.\r\n * The length of the array must be a multiple of 3. This object takes ownership of the array.\r\n */\r\n public constructor(data: Uint8Array) {\r\n this.data = data;\r\n assert(0 === this.data.length % 3);\r\n }\r\n\r\n /** Get the number of 24-bit indices. */\r\n public get length(): number { return this.data.length / 3; }\r\n\r\n /** Convert an array of 24-bit unsigned integer values into a VertexIndices object. */\r\n public static fromArray(indices: number[]): VertexIndices {\r\n const bytes = new Uint8Array(indices.length * 3);\r\n for (let i = 0; i < indices.length; i++)\r\n this.encodeIndex(indices[i], bytes, i * 3);\r\n\r\n return new VertexIndices(bytes);\r\n }\r\n\r\n public static encodeIndex(index: number, bytes: Uint8Array, byteIndex: number): void {\r\n assert(byteIndex + 2 < bytes.length);\r\n bytes[byteIndex + 0] = index & 0x000000ff;\r\n bytes[byteIndex + 1] = (index & 0x0000ff00) >> 8;\r\n bytes[byteIndex + 2] = (index & 0x00ff0000) >> 16;\r\n }\r\n\r\n public setNthIndex(n: number, value: number): void {\r\n VertexIndices.encodeIndex(value, this.data, n * 3);\r\n }\r\n\r\n public decodeIndex(index: number): number {\r\n assert(index < this.length);\r\n const byteIndex = index * 3;\r\n return this.data[byteIndex] | (this.data[byteIndex + 1] << 8) | (this.data[byteIndex + 2] << 16);\r\n }\r\n\r\n public decodeIndices(): number[] {\r\n const indices = [];\r\n for (let i = 0; i < this.length; i++)\r\n indices.push(this.decodeIndex(i));\r\n\r\n return indices;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface Dimensions {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/** @internal */\r\nexport function computeDimensions(nEntries: number, nRgbaPerEntry: number, nExtraRgba: number): Dimensions {\r\n const maxSize = IModelApp.renderSystem.maxTextureSize;\r\n const nRgba = nEntries * nRgbaPerEntry + nExtraRgba;\r\n\r\n if (nRgba < maxSize)\r\n return { width: nRgba, height: 1 };\r\n\r\n // Make roughly square to reduce unused space in last row\r\n let width = Math.ceil(Math.sqrt(nRgba));\r\n\r\n // Ensure a given entry's RGBA values all fit on the same row.\r\n const remainder = width % nRgbaPerEntry;\r\n if (0 !== remainder) {\r\n width += nRgbaPerEntry - remainder;\r\n }\r\n\r\n // Compute height\r\n let height = Math.ceil(nRgba / width);\r\n if (width * height < nRgba)\r\n ++height;\r\n\r\n assert(height <= maxSize);\r\n assert(width <= maxSize);\r\n assert(width * height >= nRgba);\r\n assert(Math.floor(height) === height);\r\n assert(Math.floor(width) === width);\r\n\r\n // Row padding should never be necessary...\r\n assert(0 === width % nRgbaPerEntry);\r\n\r\n return { width, height };\r\n}\r\n\r\n/** Describes a VertexTable.\r\n * @internal\r\n */\r\nexport interface VertexTableProps {\r\n /** The rectangular array of vertex data, of size width*height*numRgbaPerVertex bytes. */\r\n readonly data: Uint8Array;\r\n /** If true, positions are not quantized but instead stored as 32-bit floats.\r\n * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.\r\n */\r\n readonly usesUnquantizedPositions?: boolean;\r\n /** Quantization parameters for the vertex positions encoded into the array, if the positions are quantized;\r\n * and for deriving the range of positions in the table, whether quantized or not.\r\n */\r\n readonly qparams: QParams3d;\r\n /** The number of 4-byte 'RGBA' values in each row of the array. Must be divisible by numRgbaPerVertex. */\r\n readonly width: number;\r\n /** The number of rows in the array. */\r\n readonly height: number;\r\n /** Whether or not the vertex colors contain translucent colors. */\r\n readonly hasTranslucency: boolean;\r\n /** If no color table exists, the color to use for all vertices. */\r\n readonly uniformColor?: ColorDef;\r\n /** Describes the number of features (none, one, or multiple) contained. */\r\n readonly featureIndexType: FeatureIndexType;\r\n /** If featureIndexType is 'Uniform', the feature ID associated with all vertices. */\r\n readonly uniformFeatureID?: number;\r\n /** The number of vertices in the table. Must be less than (width*height)/numRgbaPerVertex. */\r\n readonly numVertices: number;\r\n /** The number of 4-byte 'RGBA' values associated with each vertex. */\r\n readonly numRgbaPerVertex: number;\r\n /** If vertex data include texture UV coordinates, the quantization params for those coordinates. */\r\n readonly uvParams?: QParams2d;\r\n}\r\n\r\n/**\r\n * Represents vertex data (position, color, normal, UV params, etc) in a rectangular array.\r\n * Each vertex is described by one or more contiguous 4-byte ('RGBA') values.\r\n * This allows vertex data to be uploaded to the GPU as a texture and vertex data to be sampled\r\n * from that texture using a single vertex ID representing an index into the array.\r\n * Vertex color is identified by a 16-bit index into a color table appended to the vertex data.\r\n * @internal\r\n */\r\nexport class VertexTable implements VertexTableProps {\r\n /** The rectangular array of vertex data, of size width*height*numRgbaPerVertex bytes. */\r\n public readonly data: Uint8Array;\r\n /** If true, positions are not quantized but instead stored as 32-bit floats.\r\n * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.\r\n */\r\n public readonly usesUnquantizedPositions?: boolean;\r\n /** Quantization parameters for the vertex positions encoded into the array, the positions are quantized;\r\n * and for deriving the range of positions in the table, whether quantized or not.\r\n */\r\n public readonly qparams: QParams3d;\r\n /** The number of 4-byte 'RGBA' values in each row of the array. Must be divisible by numRgbaPerVertex. */\r\n public readonly width: number;\r\n /** The number of rows in the array. */\r\n public readonly height: number;\r\n /** Whether or not the vertex colors contain translucent colors. */\r\n public readonly hasTranslucency: boolean;\r\n /** If no color table exists, the color to use for all vertices. */\r\n public readonly uniformColor?: ColorDef;\r\n /** Describes the number of features (none, one, or multiple) contained. */\r\n public readonly featureIndexType: FeatureIndexType;\r\n /** If featureIndexType is 'Uniform', the feature ID associated with all vertices. */\r\n public readonly uniformFeatureID?: number;\r\n /** The number of vertices in the table. Must be less than (width*height)/numRgbaPerVertex. */\r\n public readonly numVertices: number;\r\n /** The number of 4-byte 'RGBA' values associated with each vertex. */\r\n public readonly numRgbaPerVertex: number;\r\n /** If vertex data include texture UV coordinates, the quantization params for those coordinates. */\r\n public readonly uvParams?: QParams2d;\r\n\r\n /** Construct a VertexTable. The VertexTable takes ownership of all input data - it must not be later modified by the caller. */\r\n public constructor(props: VertexTableProps) {\r\n this.data = props.data;\r\n this.qparams = props.qparams;\r\n this.usesUnquantizedPositions = !!props.usesUnquantizedPositions;\r\n this.width = props.width;\r\n this.height = props.height;\r\n this.hasTranslucency = true === props.hasTranslucency;\r\n this.uniformColor = props.uniformColor;\r\n this.featureIndexType = props.featureIndexType;\r\n this.uniformFeatureID = props.uniformFeatureID;\r\n this.numVertices = props.numVertices;\r\n this.numRgbaPerVertex = props.numRgbaPerVertex;\r\n this.uvParams = props.uvParams;\r\n }\r\n\r\n public static buildFrom(builder: VertexTableBuilder, colorIndex: ColorIndex, featureIndex: FeatureIndex): VertexTable {\r\n const { numVertices, numRgbaPerVertex } = builder;\r\n const numColors = colorIndex.isUniform ? 0 : colorIndex.numColors;\r\n const dimensions = computeDimensions(numVertices, numRgbaPerVertex, numColors);\r\n assert(0 === dimensions.width % numRgbaPerVertex || (0 < numColors && 1 === dimensions.height));\r\n\r\n const data = new Uint8Array(dimensions.width * dimensions.height * 4);\r\n\r\n builder.data = data;\r\n for (let i = 0; i < numVertices; i++)\r\n builder.appendVertex(i);\r\n\r\n builder.appendColorTable(colorIndex);\r\n\r\n builder.data = undefined;\r\n\r\n return new VertexTable({\r\n data,\r\n qparams: builder.qparams,\r\n usesUnquantizedPositions: builder.usesUnquantizedPositions,\r\n width: dimensions.width,\r\n height: dimensions.height,\r\n hasTranslucency: colorIndex.hasAlpha,\r\n uniformColor: colorIndex.uniform,\r\n numVertices,\r\n numRgbaPerVertex,\r\n uvParams: builder.uvParams,\r\n featureIndexType: featureIndex.type,\r\n uniformFeatureID: featureIndex.type === FeatureIndexType.Uniform ? featureIndex.featureID : undefined,\r\n });\r\n }\r\n\r\n public static createForPolylines(args: PolylineArgs): VertexTable | undefined {\r\n const polylines = args.polylines;\r\n if (0 < polylines.length)\r\n return this.buildFrom(createPolylineBuilder(args), args.colors, args.features);\r\n else\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Describes mesh geometry to be submitted to the rendering system.\r\n * A mesh consists of a surface and its edges, which may include any combination of silhouettes, polylines, and single segments.\r\n * The surface and edges all refer to the same vertex table.\r\n */\r\nexport class MeshParams {\r\n public readonly vertices: VertexTable;\r\n public readonly surface: SurfaceParams;\r\n public readonly edges?: EdgeParams;\r\n public readonly isPlanar: boolean;\r\n public readonly auxChannels?: AuxChannelTable;\r\n\r\n /** Directly construct a MeshParams. The MeshParams takes ownership of all input data. */\r\n public constructor(vertices: VertexTable, surface: SurfaceParams, edges?: EdgeParams, isPlanar?: boolean, auxChannels?: AuxChannelTable) {\r\n this.vertices = vertices;\r\n this.surface = surface;\r\n this.edges = edges;\r\n this.isPlanar = !!isPlanar;\r\n this.auxChannels = auxChannels;\r\n }\r\n\r\n /** Construct from a MeshArgs. */\r\n public static create(args: MeshArgs): MeshParams {\r\n const builder = createMeshBuilder(args);\r\n const vertices = VertexTable.buildFrom(builder, args.colors, args.features);\r\n\r\n const surfaceIndices = VertexIndices.fromArray(args.vertIndices);\r\n\r\n const surface: SurfaceParams = {\r\n type: builder.type,\r\n indices: surfaceIndices,\r\n fillFlags: args.fillFlags,\r\n hasBakedLighting: true === args.hasBakedLighting,\r\n hasFixedNormals: true === args.hasFixedNormals,\r\n textureMapping: undefined !== args.textureMapping ? { texture: args.textureMapping.texture, alwaysDisplayed: false } : undefined,\r\n material: createSurfaceMaterial(args.material),\r\n };\r\n\r\n const channels = undefined !== args.auxChannels ? AuxChannelTable.fromChannels(args.auxChannels, vertices.numVertices) : undefined;\r\n const edges = EdgeParams.fromMeshArgs(args);\r\n return new MeshParams(vertices, surface, edges, args.isPlanar, channels);\r\n }\r\n}\r\n\r\n/** Builds a VertexTable from some data type supplying the vertex data. */\r\nexport abstract class VertexTableBuilder {\r\n public data?: Uint8Array;\r\n private _curIndex: number = 0;\r\n\r\n public abstract get numVertices(): number;\r\n public abstract get numRgbaPerVertex(): number;\r\n public abstract get qparams(): QParams3d;\r\n public abstract get usesUnquantizedPositions(): boolean;\r\n public get uvParams(): QParams2d | undefined { return undefined; }\r\n public abstract appendVertex(vertIndex: number): void;\r\n\r\n public appendColorTable(colorIndex: ColorIndex) {\r\n if (undefined !== colorIndex.nonUniform) {\r\n for (const color of colorIndex.nonUniform.colors) {\r\n this.appendColor(color);\r\n }\r\n }\r\n }\r\n\r\n protected advance(nBytes: number) {\r\n this._curIndex += nBytes;\r\n assert(this._curIndex <= this.data!.length);\r\n }\r\n\r\n protected append8(val: number) {\r\n assert(0 <= val);\r\n assert(val <= 0xff);\r\n assert(val === Math.floor(val));\r\n\r\n this.data![this._curIndex] = val;\r\n this.advance(1);\r\n }\r\n protected append16(val: number) {\r\n this.append8(val & 0x00ff);\r\n this.append8(val >>> 8);\r\n }\r\n protected append32(val: number) {\r\n this.append16(val & 0x0000ffff);\r\n this.append16(val >>> 16);\r\n }\r\n\r\n private appendColor(tbgr: number) {\r\n const colors = ColorDef.getColors(tbgr);\r\n\r\n // invert transparency => alpha\r\n colors.t = 255 - colors.t;\r\n\r\n // premultiply alpha...\r\n switch (colors.t) {\r\n case 0:\r\n colors.r = colors.g = colors.b = 0;\r\n break;\r\n case 255:\r\n break;\r\n default: {\r\n const f = colors.t / 255.0;\r\n colors.r = Math.floor(colors.r * f + 0.5);\r\n colors.g = Math.floor(colors.g * f + 0.5);\r\n colors.b = Math.floor(colors.b * f + 0.5);\r\n break;\r\n }\r\n }\r\n\r\n // Store 32-bit value in little-endian order (red first)\r\n this.append8(colors.r);\r\n this.append8(colors.g);\r\n this.append8(colors.b);\r\n this.append8(colors.t);\r\n }\r\n}\r\n\r\ntype VertexData = PolylineArgs | MeshArgs;\r\ntype Quantized<T extends VertexData> = Omit<T, \"points\"> & { points: QPoint3dList };\r\ntype Unquantized<T extends VertexData> = Omit<T, \"points\"> & { points: Omit<Point3dList, \"add\"> };\r\n\r\nnamespace Quantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n /**\r\n * Supplies vertex data from a PolylineArgs or MeshArgs. Each vertex consists of 12 bytes:\r\n * pos.x 00\r\n * pos.y 02\r\n * pos.z 04\r\n * colorIndex 06\r\n * featureIndex 08 (24 bits)\r\n * materialIndex 0B (for meshes that use a material atlas; otherwise unused). NOTE: Currently front-end code does not produce material atlases.\r\n */\r\n export class SimpleBuilder<T extends Quantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _qpoints: QPoint3dList;\r\n\r\n public constructor(args: T) {\r\n super();\r\n this._qpoints = args.points;\r\n this.args = args;\r\n assert(undefined !== this.args.points);\r\n }\r\n\r\n public get numVertices() { return this.args.points.length; }\r\n public get numRgbaPerVertex() { return 3; }\r\n public get usesUnquantizedPositions() { return false; }\r\n public get qparams() {\r\n return this._qpoints.params;\r\n }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendPosition(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n this.append16(this._qpoints.list[vertIndex].x);\r\n this.append16(this._qpoints.list[vertIndex].y);\r\n this.append16(this._qpoints.list[vertIndex].z);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform) {\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n } else {\r\n this.advance(2);\r\n }\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (undefined !== this.args.features.featureIDs) {\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n } else {\r\n this.advance(4);\r\n }\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs. */\r\n export class MeshBuilder extends SimpleBuilder<Quantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Quantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Quantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs where each vertex consists of 16 bytes.\r\n * In addition to the SimpleBuilder data, the final 4 bytes hold the quantized UV params\r\n * The color index is left uninitialized as it is unused.\r\n */\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d, type: SurfaceType = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n this.appendPosition(vertIndex);\r\n this.appendNormal(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n this.appendUVParams(vertIndex);\r\n }\r\n\r\n protected appendNormal(_vertIndex: number): void { this.advance(2); } // no normal for unlit meshes\r\n\r\n protected appendUVParams(vertIndex: number) {\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n }\r\n\r\n /** As with TexturedMeshBuilder, but the color index is replaced with the oct-encoded normal value. */\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendNormal(vertIndex: number) { this.append16(this.args.normals![vertIndex].value); }\r\n }\r\n\r\n /** 16 bytes. The last 2 bytes are unused; the 2 immediately preceding it hold the oct-encoded normal value. */\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2); // 2 unused bytes\r\n }\r\n }\r\n}\r\n\r\n/** Builders in this namespace store vertex positions as 32-bit floats instead of quantizing to 16-bit unsigned integers.\r\n * This is preferred for decoration graphics, which might contain ranges of positions that exceed the limits for quantization; if quantized,\r\n * they could produce visual artifacts.\r\n * Each builder produces a VertexTable that starts with the following layout:\r\n * pos.x: 00\r\n * pos.y: 04\r\n * pos.z: 08\r\n * featureIndex: 0C\r\n * materialIndex:0F (NOTE: frontend code currently doesn't produce material atlases, so this is always zero).\r\n * Followed (by default) by:\r\n * colorIndex: 10\r\n * unused: 12\r\n * Subclasses may add 4 more bytes and/or overwrite the final 4 bytes above.\r\n */\r\nnamespace Unquantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n const u32Array = new Uint32Array(1);\r\n const f32Array = new Float32Array(u32Array.buffer);\r\n\r\n // colorIndex: 10\r\n // unused: 12\r\n export class SimpleBuilder<T extends Unquantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _points: Point3d[];\r\n private _qparams3d: QParams3d;\r\n\r\n public constructor(args: T) {\r\n super();\r\n assert(!(args.points instanceof QPoint3dList));\r\n this._qparams3d = QParams3d.fromRange(args.points.range);\r\n this.args = args;\r\n this._points = args.points;\r\n }\r\n\r\n public get numVertices() { return this._points.length; }\r\n public get numRgbaPerVertex() { return 5; }\r\n public get usesUnquantizedPositions() { return true; }\r\n public get qparams() { return this._qparams3d; }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendTransposePosAndFeatureNdx(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n }\r\n\r\n private appendFloat32(val: number) {\r\n f32Array[0] = val;\r\n this.append32(u32Array[0]);\r\n }\r\n\r\n private convertFloat32(val: number): number {\r\n f32Array[0] = val;\r\n return u32Array[0];\r\n }\r\n\r\n protected appendTransposePosAndFeatureNdx(vertIndex: number) {\r\n // transpose position xyz vals into [0].xyz - [3].xyz, and add feature index at .w\r\n // this is to order things to let shader code access much more efficiently\r\n const pt = this._points[vertIndex];\r\n const x = this.convertFloat32 (pt.x);\r\n const y = this.convertFloat32 (pt.y);\r\n const z = this.convertFloat32 (pt.z);\r\n const featID = (this.args.features.featureIDs) ? this.args.features.featureIDs[vertIndex] : 0;\r\n this.append8(x & 0x000000ff);\r\n this.append8(y & 0x000000ff);\r\n this.append8(z & 0x000000ff);\r\n this.append8(featID & 0x000000ff);\r\n this.append8((x >>> 8) & 0x000000ff);\r\n this.append8((y >>> 8) & 0x000000ff);\r\n this.append8((z >>> 8) & 0x000000ff);\r\n this.append8((featID >>> 8) & 0x000000ff);\r\n this.append8((x >>> 16) & 0x000000ff);\r\n this.append8((y >>> 16) & 0x000000ff);\r\n this.append8((z >>> 16) & 0x000000ff);\r\n this.append8((featID >>> 16) & 0x000000ff);\r\n this.append8(x >>> 24);\r\n this.append8(y >>> 24);\r\n this.append8(z >>> 24);\r\n this.append8(featID >>> 24);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n const pt = this._points[vertIndex];\r\n this.appendFloat32(pt.x);\r\n this.appendFloat32(pt.y);\r\n this.appendFloat32(pt.z);\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (this.args.features.featureIDs)\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n else\r\n this.advance(4);\r\n }\r\n\r\n protected _appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform)\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n else\r\n this.advance(2);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n this._appendColorIndex(vertIndex);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n export class MeshBuilder extends SimpleBuilder<Unquantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Unquantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Unquantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d, type = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n\r\n protected override appendColorIndex() { }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n // normal: 14\r\n // unused: 16\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 6; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n // color: 10\r\n // normal: 12\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendColorIndex(vertIndex: number) {\r\n super._appendColorIndex(vertIndex);\r\n }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n }\r\n }\r\n}\r\n\r\nfunction createMeshBuilder(args: MeshArgs): VertexTableBuilder & { type: SurfaceType } {\r\n if (args.points instanceof QPoint3dList)\r\n return Quantized.MeshBuilder.create(args as Quantized<MeshArgs>); // wtf compiler?\r\n else\r\n return Unquantized.MeshBuilder.create(args as Unquantized<MeshArgs>); // seriously wtf?\r\n}\r\n\r\nfunction createPolylineBuilder(args: PolylineArgs): VertexTableBuilder {\r\n if (args.points instanceof QPoint3dList)\r\n return new Quantized.SimpleBuilder(args as Quantized<PolylineArgs>); // wtf compiler?\r\n else\r\n return new Unquantized.SimpleBuilder(args as Unquantized<PolylineArgs>); // seriously wtf?\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryAccumulator.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GeometryAccumulator.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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"}
@@ -141,7 +141,6 @@ export class GeometryAccumulator {
141
141
  for (const mesh of meshes) {
142
142
  const verts = mesh.points;
143
143
  if (branch.isEmpty) {
144
- assert(transformOrigin === undefined);
145
144
  if (verts instanceof QPoint3dList) {
146
145
  transformOrigin = verts.params.origin.clone();
147
146
  verts.params.origin.setZero();