@itwin/core-frontend 5.1.0-dev.1 → 5.1.0-dev.4

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 (74) hide show
  1. package/lib/cjs/IModelConnection.d.ts +12 -0
  2. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  3. package/lib/cjs/IModelConnection.js +21 -0
  4. package/lib/cjs/IModelConnection.js.map +1 -1
  5. package/lib/cjs/extension/providers/ExtensionLoadScript.d.ts.map +1 -1
  6. package/lib/cjs/extension/providers/ExtensionLoadScript.js +24 -6
  7. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  8. package/lib/cjs/internal/cross-package.d.ts +1 -1
  9. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  10. package/lib/cjs/internal/cross-package.js.map +1 -1
  11. package/lib/cjs/internal/render/webgl/Mesh.js +1 -1
  12. package/lib/cjs/internal/render/webgl/Mesh.js.map +1 -1
  13. package/lib/cjs/internal/tile/GraphicsCollector.d.ts +1 -0
  14. package/lib/cjs/internal/tile/GraphicsCollector.d.ts.map +1 -1
  15. package/lib/cjs/internal/tile/GraphicsCollector.js +1 -0
  16. package/lib/cjs/internal/tile/GraphicsCollector.js.map +1 -1
  17. package/lib/cjs/internal/tile/IModelTile.d.ts.map +1 -1
  18. package/lib/cjs/internal/tile/IModelTile.js +2 -1
  19. package/lib/cjs/internal/tile/IModelTile.js.map +1 -1
  20. package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
  21. package/lib/cjs/internal/tile/IModelTileTree.js +2 -1
  22. package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
  23. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  24. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +0 -2
  25. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  26. package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
  27. package/lib/cjs/internal/tile/RealityTileLoader.js +2 -1
  28. package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
  29. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  30. package/lib/cjs/tile/RealityTileTree.js +1 -1
  31. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  32. package/lib/cjs/tile/TileDrawArgs.d.ts +1 -0
  33. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  34. package/lib/cjs/tile/TileDrawArgs.js +2 -0
  35. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  36. package/lib/esm/IModelConnection.d.ts +12 -0
  37. package/lib/esm/IModelConnection.d.ts.map +1 -1
  38. package/lib/esm/IModelConnection.js +21 -0
  39. package/lib/esm/IModelConnection.js.map +1 -1
  40. package/lib/esm/extension/providers/ExtensionLoadScript.d.ts.map +1 -1
  41. package/lib/esm/extension/providers/ExtensionLoadScript.js +1 -6
  42. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  43. package/lib/esm/internal/cross-package.d.ts +1 -1
  44. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  45. package/lib/esm/internal/cross-package.js +1 -1
  46. package/lib/esm/internal/cross-package.js.map +1 -1
  47. package/lib/esm/internal/render/webgl/Mesh.js +1 -1
  48. package/lib/esm/internal/render/webgl/Mesh.js.map +1 -1
  49. package/lib/esm/internal/tile/GraphicsCollector.d.ts +1 -0
  50. package/lib/esm/internal/tile/GraphicsCollector.d.ts.map +1 -1
  51. package/lib/esm/internal/tile/GraphicsCollector.js +1 -0
  52. package/lib/esm/internal/tile/GraphicsCollector.js.map +1 -1
  53. package/lib/esm/internal/tile/IModelTile.d.ts.map +1 -1
  54. package/lib/esm/internal/tile/IModelTile.js +2 -1
  55. package/lib/esm/internal/tile/IModelTile.js.map +1 -1
  56. package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
  57. package/lib/esm/internal/tile/IModelTileTree.js +2 -1
  58. package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
  59. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  60. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +0 -2
  61. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  62. package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
  63. package/lib/esm/internal/tile/RealityTileLoader.js +2 -1
  64. package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
  65. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  66. package/lib/esm/tile/RealityTileTree.js +2 -2
  67. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  68. package/lib/esm/tile/TileDrawArgs.d.ts +1 -0
  69. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  70. package/lib/esm/tile/TileDrawArgs.js +2 -0
  71. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  72. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  73. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  74. package/package.json +20 -16
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileLoader.js","sourceRoot":"","sources":["../../../../src/internal/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAY,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EACL,UAAU,EAAoB,8BAA8B,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,yBAAyB,GAEjK,MAAM,qBAAqB,CAAC;AAG7B,MAAM,wBAAwB,GAAG,8BAA8B,CAAC,EAAE,CAAC,CAAC;AAEpE,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7C,MAAM,qBAAqB,GAAG,IAAI,OAAO,EAAE,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAgB,iBAAiB;IAKV;IAJnB,oBAAoB,GAAG,KAAK,CAAC;IACrB,yBAAyB,CAAS;IAClC,wBAAwB,CAAS;IAEjD,YAA2B,gBAA0B;QAA1B,qBAAgB,GAAhB,gBAAgB,CAAU;QACnD,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;QAC/E,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAC/E,CAAC;IAEM,mBAAmB,CAAC,IAAU,EAAE,SAA6B,EAAE,MAA0B;QAC9F,8HAA8H;QAC9H,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnG,CAAC;IAKD,IAAW,wBAAwB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAIhE,IAAc,UAAU,KAAgB,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,IAAc,UAAU,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7C,aAAa,KAAmC,OAAO,SAAS,CAAC,CAAC,CAAC;IAC1E,IAAW,kBAAkB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC1D,IAAW,mBAAmB,KAAc,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC/E,IAAW,2BAA2B,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC3D,aAAa,CAAC,KAAW,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;IAC5D,IAAW,uBAAuB,KAAyB,OAAO,SAAS,CAAC,CAAC,CAAC;IAEvE,oBAAoB,CAAC,QAAgB,EAAE,KAAmB,IAAY,OAAO,QAAQ,CAAC,CAAC,CAAC;IAE/F,iIAAiI;IAC1H,KAAK,CAAC,eAAe,CAAC,IAAU,EAAE,IAA8B,EAAE,MAAoB,EAAE,UAA0B;QACvH,MAAM,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAmB,CAAC;QACxC,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7K,CAAC;IAEO,UAAU,CAAC,YAAwB;QACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;QACzC,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC/B,OAAO,MAAM,CAAC;IAEhB,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,IAAiB,EAAE,YAAwB,EAAE,MAAoB;QACnG,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,UAAU,CAAC,IAAI;YAC5B,OAAO,EAAE,CAAC;QAEZ,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3L,IAAI,MAAM;YACR,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC;QAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,IAAiB,EAAE,YAAwB,EAAE,MAAoB,EAAE,UAA0B;QAChI,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,UAAU;YAC1B,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAErC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5D,IAAI,MAA2C,CAAC;QAEhD,MAAM,QAAQ,GAAkB;YAC9B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,SAAS,CAAC,cAAc,EAAE;YAC1F,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB;SAC3D,CAAC;QAEF,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU,CAAC,MAAM;gBACpB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;oBACzB,MAAM,EAAE,YAAY;oBACpB,MAAM;oBACN,OAAO;oBACP,IAAI;oBACJ,MAAM;oBACN,UAAU;iBACX,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,UAAU,CAAC,IAAI;gBAClB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC/F,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;gBAChC,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvF,MAAM,eAAe,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;oBAChD,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC7B,IAAI,KAAgB,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,SAAS;wBACpC,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;yBAC5C,CAAC;wBACJ,IAAI,SAAS;4BACX,KAAK,GAAG,SAAS,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC,CAAC;;4BAEpH,KAAK,GAAG,IAAI,CAAC,eAAgB,CAAC;oBAClC,CAAC;oBACD,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;gBAED,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,KAAK,UAAU,CAAC,IAAI;gBAClB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;gBAC/N,IAAI,MAAM,EAAE,CAAC;oBACX,4GAA4G;oBAC5G,wIAAwI;oBACxI,MAAM,CAAC,MAAM,YAAY,UAAU,CAAC,CAAC;oBACrC,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC;gBACpD,CAAC;gBAED,MAAM;YACR,KAAK,UAAU,CAAC,IAAI;gBAClB,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;gBACjL,MAAM;YACR,KAAK,UAAU,CAAC,IAAI;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAuB,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7B,MAAM,KAAK,GAAG,4BAA4B,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC3E,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE;wBACrC,MAAM;wBACN,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,SAAS,EAAE,IAAI,CAAC,eAAe;wBAC/B,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM;wBACzB,eAAe,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;wBAChC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;wBAC3B,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,KAAK,UAAU,CAAC,IAAI;gBAClB,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,OAAO;oBACjB,OAAO,EAAE,CAAC;gBAEZ,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;oBACzC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAI,0BAA0B;oBACtD,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;oBAC5C,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC;oBACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;oBACzF,IAAI,MAAM,CAAC,OAAO;wBAChB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC7B,YAAY,CAAC,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;gBACjD,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAEhI;gBACE,MAAM,CAAC,KAAK,EAAE,uBAAuB,MAAM,EAAE,CAAC,CAAC;gBAC/C,MAAM;QACV,CAAC;QAED,IAAI,OAAO,GAAgB,EAAE,CAAC;QAC9B,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,kBAAkB;oBAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;gBACjE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAW,iBAAiB,KAAwB,OAAO,wBAAwB,CAAC,CAAC,CAAC;IAE/E,MAAM,CAAC,2BAA2B,CAAC,IAAU,EAAE,SAA6B,EAAE,QAAmB;QACtG,+CAA+C;QAC/C,uBAAuB;QACvB,6EAA6E;QAC7E,gFAAgF;QAChF,IAAI,MAA2B,CAAC;QAChC,IAAI,WAAW,GAAG,GAAG,CAAC;QAEtB,MAAM,iBAAiB,GAAG,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,0BAA0B,GAAG,IAAI,CAAC,CAAC,4DAA4D;QAErG,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;YACjF,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;YAE/D,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEvC,IAAI,iBAAiB,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,YAAY,cAAc,EAAE,CAAC;gBAClF,6DAA6D;gBAC7D,MAAM,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC;gBAE7C,IAAI,cAAc,KAAK,SAAS,IAAI,GAAG,GAAG,cAAc,CAAC,IAAI,GAAG,0BAA0B,EAAE,CAAC;oBAC3F,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;oBAExF,IAAI,mBAAmB,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,CAAC,GAAG,CAAC;wBAClH,UAAU,GAAG,mBAAmB,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;YAErG,iFAAiF;YACjF,gIAAgI;YAChI,MAAM,sBAAsB,GAAG,GAAG,CAAC;YACnC,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,GAAG,GAAG,sBAAsB,CAAC,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;YAE5G,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED;;EAEE;AACF,MAAM,UAAU,4BAA4B,CAAC,YAAwB,EAAE,OAAgB,EAAE,OAAgB;IACvG,IAAI,GAAoB,CAAC;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,GAAG,SAAS,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3G,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, ByteStream } from \"@itwin/core-bentley\";\nimport { Point2d, Point3d, Transform } from \"@itwin/core-geometry\";\nimport { BatchType, CompositeTileHeader, TileFormat, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport { ScreenViewport, Viewport } from \"../../Viewport\";\nimport { GltfWrapMode } from \"../../common/gltf/GltfSchema\";\nimport {\n B3dmReader, BatchedTileIdMap, createDefaultViewFlagOverrides, GltfGraphicsReader, GltfReader, GltfReaderProps, I3dmReader, ImdlReader, readPointCloudTileContent,\n RealityTile, RealityTileContent, RealityTileTree, Tile, TileContent, TileDrawArgs, TileLoadPriority, TileRequest, TileRequestChannel, TileUser,\n} from \"../../tile/internal\";\nimport { LayerTileData } from \"../render/webgl/MapLayerParams\";\n\nconst defaultViewFlagOverrides = createDefaultViewFlagOverrides({});\n\nconst scratchTileCenterWorld = new Point3d();\nconst scratchTileCenterView = new Point3d();\n\n/** Serves as a \"handler\" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content.\n * @internal\n */\nexport abstract class RealityTileLoader {\n private _containsPointClouds = false;\n public readonly preloadRealityParentDepth: number;\n public readonly preloadRealityParentSkip: number;\n\n public constructor(private _produceGeometry?: boolean) {\n this.preloadRealityParentDepth = IModelApp.tileAdmin.contextPreloadParentDepth;\n this.preloadRealityParentSkip = IModelApp.tileAdmin.contextPreloadParentSkip;\n }\n\n public computeTilePriority(tile: Tile, viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\n // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).\n return RealityTileLoader.computeTileLocationPriority(tile, viewports, tile.tree.iModelTransform);\n }\n\n public abstract loadChildren(tile: RealityTile): Promise<Tile[] | undefined>;\n public abstract getRequestChannel(tile: Tile): TileRequestChannel;\n public abstract requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response>;\n public get wantDeduplicatedVertices(): boolean { return false; }\n public abstract get maxDepth(): number;\n public abstract get minDepth(): number;\n public abstract get priority(): TileLoadPriority;\n protected get _batchType(): BatchType { return BatchType.Primary; }\n protected get _loadEdges(): boolean { return true; }\n public getBatchIdMap(): BatchedTileIdMap | undefined { return undefined; }\n public get isContentUnbounded(): boolean { return false; }\n public get containsPointClouds(): boolean { return this._containsPointClouds; }\n public get parentsAndChildrenExclusive(): boolean { return true; }\n public forceTileLoad(_tile: Tile): boolean { return false; }\n public get maximumScreenSpaceError(): number | undefined { return undefined; }\n\n public processSelectedTiles(selected: Tile[], _args: TileDrawArgs): Tile[] { return selected; }\n\n // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state.\n public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<RealityTileContent> {\n assert(data instanceof Uint8Array);\n const blob = data;\n const streamBuffer = ByteStream.fromUint8Array(blob);\n const realityTile = tile as RealityTile;\n return this._produceGeometry ? this.loadGeometryFromStream(realityTile, streamBuffer, system) : this.loadGraphicsFromStream(realityTile, streamBuffer, system, isCanceled);\n }\n\n private _getFormat(streamBuffer: ByteStream) {\n const position = streamBuffer.curPos;\n const format = streamBuffer.readUint32();\n streamBuffer.curPos = position;\n return format;\n\n }\n\n public async loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent> {\n const format = this._getFormat(streamBuffer);\n if (format !== TileFormat.B3dm)\n return {};\n\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\n const reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, undefined, this.getBatchIdMap());\n if (reader)\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\n\n return { geometry: reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform) };\n }\n\n private async loadGraphicsFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\n const format = this._getFormat(streamBuffer);\n if (undefined === isCanceled)\n isCanceled = () => !tile.isLoading;\n\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\n let reader: GltfReader | ImdlReader | undefined;\n\n const tileData: LayerTileData = {\n ecefTransform: tile.tree.iModel.ecefLocation?.getTransform() ?? Transform.createIdentity(),\n range: tile.range,\n layerClassifiers: tile.tree.layerHandler?.layerClassifiers,\n };\n\n switch (format) {\n case TileFormat.IModel:\n reader = ImdlReader.create({\n stream: streamBuffer,\n iModel,\n modelId,\n is3d,\n system,\n isCanceled,\n });\n break;\n case TileFormat.Pnts:\n this._containsPointClouds = true;\n const res = await readPointCloudTileContent(streamBuffer, iModel, modelId, is3d, tile, system);\n let graphic = res.graphic;\n const rtcCenter = res.rtcCenter;\n if (graphic && (rtcCenter || tile.transformToRoot && !tile.transformToRoot.isIdentity)) {\n const transformBranch = new GraphicBranch(true);\n transformBranch.add(graphic);\n let xform: Transform;\n if (!tile.transformToRoot && rtcCenter)\n xform = Transform.createTranslation(rtcCenter);\n else {\n if (rtcCenter)\n xform = Transform.createOriginAndMatrix(rtcCenter.plus(tile.transformToRoot!.origin), tile.transformToRoot!.matrix);\n else\n xform = tile.transformToRoot!;\n }\n graphic = system.createBranch(transformBranch, xform);\n }\n\n return { graphic };\n case TileFormat.B3dm:\n reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices, tileData);\n if (reader) {\n // glTF spec defaults wrap mode to \"repeat\" but many reality tiles omit the wrap mode and should not repeat.\n // The render system also currently only produces mip-maps for repeating textures, and we don't want mip-maps for reality tile textures.\n assert(reader instanceof GltfReader);\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\n }\n\n break;\n case TileFormat.I3dm:\n reader = I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices, tileData);\n break;\n case TileFormat.Gltf:\n const tree = tile.tree as RealityTileTree;\n const baseUrl = tree.baseUrl;\n const props = createReaderPropsWithBaseUrl(streamBuffer, yAxisUp, baseUrl);\n if (props) {\n reader = new GltfGraphicsReader(props, {\n iModel,\n gltf: props.glTF,\n contentRange: tile.contentRange,\n transform: tile.transformToRoot,\n hasChildren: !tile.isLeaf,\n pickableOptions: { id: modelId },\n idMap: this.getBatchIdMap(),\n tileData\n });\n }\n break;\n case TileFormat.Cmpt:\n const header = new CompositeTileHeader(streamBuffer);\n if (!header.isValid)\n return {};\n\n const branch = new GraphicBranch(true);\n for (let i = 0; i < header.tileCount; i++) {\n const tilePosition = streamBuffer.curPos;\n streamBuffer.advance(8); // Skip magic and version.\n const tileBytes = streamBuffer.readUint32();\n streamBuffer.curPos = tilePosition;\n const result = await this.loadGraphicsFromStream(tile, streamBuffer, system, isCanceled);\n if (result.graphic)\n branch.add(result.graphic);\n streamBuffer.curPos = tilePosition + tileBytes;\n }\n return { graphic: branch.isEmpty ? undefined : system.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf };\n\n default:\n assert(false, `unknown tile format ${format}`);\n break;\n }\n\n let content: TileContent = {};\n if (undefined !== reader) {\n try {\n content = await reader.read();\n if (content.containsPointCloud)\n this._containsPointClouds = true;\n } catch {\n // Failure to load should prevent us from trying to load children\n content.isLeaf = true;\n }\n }\n\n return content;\n }\n\n public get viewFlagOverrides(): ViewFlagOverrides { return defaultViewFlagOverrides; }\n\n public static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number {\n // Compute a priority value for tiles that are:\n // * Closer to the eye;\n // * Closer to the center of attention (center of the screen or zoom target).\n // This way, we can load in priority tiles that are more likely to be important.\n let center: Point3d | undefined;\n let minDistance = 1.0;\n\n const currentInputState = IModelApp.toolAdmin.currentInputState;\n const now = Date.now();\n const wheelEventRelevanceTimeout = 1000; // Wheel events older than this value will not be considered\n\n for (const viewport of viewports) {\n center = center ?? location.multiplyPoint3d(tile.center, scratchTileCenterWorld);\n const npc = viewport.worldToNpc(center, scratchTileCenterView);\n\n let focusPoint = new Point2d(0.5, 0.5);\n\n if (currentInputState.viewport === viewport && viewport instanceof ScreenViewport) {\n // Try to get a better target point from the last zoom target\n const { lastWheelEvent } = currentInputState;\n\n if (lastWheelEvent !== undefined && now - lastWheelEvent.time < wheelEventRelevanceTimeout) {\n const focusPointCandidate = Point2d.fromJSON(viewport.worldToNpc(lastWheelEvent.point));\n\n if (focusPointCandidate.x > 0 && focusPointCandidate.x < 1 && focusPointCandidate.y > 0 && focusPointCandidate.y < 1)\n focusPoint = focusPointCandidate;\n }\n }\n\n // NB: In NPC coords, 0 = far plane, 1 = near plane.\n const distanceToEye = 1.0 - npc.z;\n const distanceToCenter = Math.min(npc.distanceXY(focusPoint) / 0.707, 1.0); // Math.sqrt(0.5) = 0.707\n\n // Distance is a mix of the two previously computed values, still in range [0; 1]\n // We use this factor to determine how much the distance to the center of attention is important compared to distance to the eye\n const distanceToCenterWeight = 0.3;\n const distance = distanceToEye * (1.0 - distanceToCenterWeight) + distanceToCenter * distanceToCenterWeight;\n\n minDistance = Math.min(distance, minDistance);\n }\n\n return minDistance;\n }\n}\n\n/** Exposed strictly for testing purposes.\n* @internal\n*/\nexport function createReaderPropsWithBaseUrl(streamBuffer: ByteStream, yAxisUp: boolean, baseUrl?: string): GltfReaderProps | undefined {\n let url: URL | undefined;\n if (baseUrl) {\n try {\n url = new URL(baseUrl);\n } catch {\n url = undefined;\n }\n }\n return GltfReaderProps.create(streamBuffer.nextBytes(streamBuffer.arrayBuffer.byteLength), yAxisUp, url);\n}"]}
1
+ {"version":3,"file":"RealityTileLoader.js","sourceRoot":"","sources":["../../../../src/internal/tile/RealityTileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, ByteStream } from \"@itwin/core-bentley\";\nimport { Point2d, Point3d, Transform } from \"@itwin/core-geometry\";\nimport { BatchType, CompositeTileHeader, TileFormat, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport { ScreenViewport, Viewport } from \"../../Viewport\";\nimport { GltfWrapMode } from \"../../common/gltf/GltfSchema\";\nimport {\n B3dmReader, BatchedTileIdMap, createDefaultViewFlagOverrides, GltfGraphicsReader, GltfReader, GltfReaderProps, I3dmReader, ImdlReader, readPointCloudTileContent,\n RealityTile, RealityTileContent, RealityTileTree, Tile, TileContent, TileDrawArgs, TileLoadPriority, TileRequest, TileRequestChannel, TileUser,\n} from \"../../tile/internal\";\nimport { LayerTileData } from \"../render/webgl/MapLayerParams\";\n\nconst defaultViewFlagOverrides = createDefaultViewFlagOverrides({});\n\nconst scratchTileCenterWorld = new Point3d();\nconst scratchTileCenterView = new Point3d();\n\n/** Serves as a \"handler\" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content.\n * @internal\n */\nexport abstract class RealityTileLoader {\n private _containsPointClouds = false;\n public readonly preloadRealityParentDepth: number;\n public readonly preloadRealityParentSkip: number;\n\n public constructor(private _produceGeometry?: boolean) {\n this.preloadRealityParentDepth = IModelApp.tileAdmin.contextPreloadParentDepth;\n this.preloadRealityParentSkip = IModelApp.tileAdmin.contextPreloadParentSkip;\n }\n\n public computeTilePriority(tile: Tile, viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\n // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).\n return RealityTileLoader.computeTileLocationPriority(tile, viewports, tile.tree.iModelTransform);\n }\n\n public abstract loadChildren(tile: RealityTile): Promise<Tile[] | undefined>;\n public abstract getRequestChannel(tile: Tile): TileRequestChannel;\n public abstract requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response>;\n public get wantDeduplicatedVertices(): boolean { return false; }\n public abstract get maxDepth(): number;\n public abstract get minDepth(): number;\n public abstract get priority(): TileLoadPriority;\n protected get _batchType(): BatchType { return BatchType.Primary; }\n protected get _loadEdges(): boolean { return true; }\n public getBatchIdMap(): BatchedTileIdMap | undefined { return undefined; }\n public get isContentUnbounded(): boolean { return false; }\n public get containsPointClouds(): boolean { return this._containsPointClouds; }\n public get parentsAndChildrenExclusive(): boolean { return true; }\n public forceTileLoad(_tile: Tile): boolean { return false; }\n public get maximumScreenSpaceError(): number | undefined { return undefined; }\n\n public processSelectedTiles(selected: Tile[], _args: TileDrawArgs): Tile[] { return selected; }\n\n // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state.\n public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<RealityTileContent> {\n assert(data instanceof Uint8Array);\n const blob = data;\n const streamBuffer = ByteStream.fromUint8Array(blob);\n const realityTile = tile as RealityTile;\n return this._produceGeometry ? this.loadGeometryFromStream(realityTile, streamBuffer, system) : this.loadGraphicsFromStream(realityTile, streamBuffer, system, isCanceled);\n }\n\n private _getFormat(streamBuffer: ByteStream) {\n const position = streamBuffer.curPos;\n const format = streamBuffer.readUint32();\n streamBuffer.curPos = position;\n return format;\n\n }\n\n public async loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent> {\n const format = this._getFormat(streamBuffer);\n if (format !== TileFormat.B3dm)\n return {};\n\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\n const reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, undefined, this.getBatchIdMap());\n if (reader)\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\n\n return { geometry: reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform) };\n }\n\n private async loadGraphicsFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\n const format = this._getFormat(streamBuffer);\n if (undefined === isCanceled)\n isCanceled = () => !tile.isLoading;\n\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\n let reader: GltfReader | ImdlReader | undefined;\n\n const ecefTransform = tile.tree.iModel.isGeoLocated ? tile.tree.iModel.getEcefTransform() : Transform.createIdentity();\n const tileData: LayerTileData = {\n ecefTransform,\n range: tile.range,\n layerClassifiers: tile.tree.layerHandler?.layerClassifiers,\n };\n\n switch (format) {\n case TileFormat.IModel:\n reader = ImdlReader.create({\n stream: streamBuffer,\n iModel,\n modelId,\n is3d,\n system,\n isCanceled,\n });\n break;\n case TileFormat.Pnts:\n this._containsPointClouds = true;\n const res = await readPointCloudTileContent(streamBuffer, iModel, modelId, is3d, tile, system);\n let graphic = res.graphic;\n const rtcCenter = res.rtcCenter;\n if (graphic && (rtcCenter || tile.transformToRoot && !tile.transformToRoot.isIdentity)) {\n const transformBranch = new GraphicBranch(true);\n transformBranch.add(graphic);\n let xform: Transform;\n if (!tile.transformToRoot && rtcCenter)\n xform = Transform.createTranslation(rtcCenter);\n else {\n if (rtcCenter)\n xform = Transform.createOriginAndMatrix(rtcCenter.plus(tile.transformToRoot!.origin), tile.transformToRoot!.matrix);\n else\n xform = tile.transformToRoot!;\n }\n graphic = system.createBranch(transformBranch, xform);\n }\n\n return { graphic };\n case TileFormat.B3dm:\n reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices, tileData);\n if (reader) {\n // glTF spec defaults wrap mode to \"repeat\" but many reality tiles omit the wrap mode and should not repeat.\n // The render system also currently only produces mip-maps for repeating textures, and we don't want mip-maps for reality tile textures.\n assert(reader instanceof GltfReader);\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\n }\n\n break;\n case TileFormat.I3dm:\n reader = I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices, tileData);\n break;\n case TileFormat.Gltf:\n const tree = tile.tree as RealityTileTree;\n const baseUrl = tree.baseUrl;\n const props = createReaderPropsWithBaseUrl(streamBuffer, yAxisUp, baseUrl);\n if (props) {\n reader = new GltfGraphicsReader(props, {\n iModel,\n gltf: props.glTF,\n contentRange: tile.contentRange,\n transform: tile.transformToRoot,\n hasChildren: !tile.isLeaf,\n pickableOptions: { id: modelId },\n idMap: this.getBatchIdMap(),\n tileData\n });\n }\n break;\n case TileFormat.Cmpt:\n const header = new CompositeTileHeader(streamBuffer);\n if (!header.isValid)\n return {};\n\n const branch = new GraphicBranch(true);\n for (let i = 0; i < header.tileCount; i++) {\n const tilePosition = streamBuffer.curPos;\n streamBuffer.advance(8); // Skip magic and version.\n const tileBytes = streamBuffer.readUint32();\n streamBuffer.curPos = tilePosition;\n const result = await this.loadGraphicsFromStream(tile, streamBuffer, system, isCanceled);\n if (result.graphic)\n branch.add(result.graphic);\n streamBuffer.curPos = tilePosition + tileBytes;\n }\n return { graphic: branch.isEmpty ? undefined : system.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf };\n\n default:\n assert(false, `unknown tile format ${format}`);\n break;\n }\n\n let content: TileContent = {};\n if (undefined !== reader) {\n try {\n content = await reader.read();\n if (content.containsPointCloud)\n this._containsPointClouds = true;\n } catch {\n // Failure to load should prevent us from trying to load children\n content.isLeaf = true;\n }\n }\n\n return content;\n }\n\n public get viewFlagOverrides(): ViewFlagOverrides { return defaultViewFlagOverrides; }\n\n public static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number {\n // Compute a priority value for tiles that are:\n // * Closer to the eye;\n // * Closer to the center of attention (center of the screen or zoom target).\n // This way, we can load in priority tiles that are more likely to be important.\n let center: Point3d | undefined;\n let minDistance = 1.0;\n\n const currentInputState = IModelApp.toolAdmin.currentInputState;\n const now = Date.now();\n const wheelEventRelevanceTimeout = 1000; // Wheel events older than this value will not be considered\n\n for (const viewport of viewports) {\n center = center ?? location.multiplyPoint3d(tile.center, scratchTileCenterWorld);\n const npc = viewport.worldToNpc(center, scratchTileCenterView);\n\n let focusPoint = new Point2d(0.5, 0.5);\n\n if (currentInputState.viewport === viewport && viewport instanceof ScreenViewport) {\n // Try to get a better target point from the last zoom target\n const { lastWheelEvent } = currentInputState;\n\n if (lastWheelEvent !== undefined && now - lastWheelEvent.time < wheelEventRelevanceTimeout) {\n const focusPointCandidate = Point2d.fromJSON(viewport.worldToNpc(lastWheelEvent.point));\n\n if (focusPointCandidate.x > 0 && focusPointCandidate.x < 1 && focusPointCandidate.y > 0 && focusPointCandidate.y < 1)\n focusPoint = focusPointCandidate;\n }\n }\n\n // NB: In NPC coords, 0 = far plane, 1 = near plane.\n const distanceToEye = 1.0 - npc.z;\n const distanceToCenter = Math.min(npc.distanceXY(focusPoint) / 0.707, 1.0); // Math.sqrt(0.5) = 0.707\n\n // Distance is a mix of the two previously computed values, still in range [0; 1]\n // We use this factor to determine how much the distance to the center of attention is important compared to distance to the eye\n const distanceToCenterWeight = 0.3;\n const distance = distanceToEye * (1.0 - distanceToCenterWeight) + distanceToCenter * distanceToCenterWeight;\n\n minDistance = Math.min(distance, minDistance);\n }\n\n return minDistance;\n }\n}\n\n/** Exposed strictly for testing purposes.\n* @internal\n*/\nexport function createReaderPropsWithBaseUrl(streamBuffer: ByteStream, yAxisUp: boolean, baseUrl?: string): GltfReaderProps | undefined {\n let url: URL | undefined;\n if (baseUrl) {\n try {\n url = new URL(baseUrl);\n } catch {\n url = undefined;\n }\n }\n return GltfReaderProps.create(streamBuffer.nextBytes(streamBuffer.arrayBuffer.byteLength), yAxisUp, url);\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealityTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import { Cartographic, ColorDef, GeoCoordStatus } from "@itwin/core-common";
11
11
  import { BackgroundMapGeometry } from "../BackgroundMapGeometry";
12
12
  import { IModelApp } from "../IModelApp";
13
13
  import { GraphicBranch } from "../render/GraphicBranch";
14
- import { GraphicsCollectorDrawArgs, MapTile, RealityTile, TileTree, } from "./internal";
14
+ import { MapTile, RealityTile, TileTree, } from "./internal";
15
15
  /** @internal */
16
16
  export class TraversalDetails {
17
17
  queuedChildren = new Array();
@@ -200,7 +200,7 @@ export class RealityTileTree extends TileTree {
200
200
  sortIndices = selectedTiles.map((_x, i) => i);
201
201
  sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);
202
202
  }
203
- if (!(args instanceof GraphicsCollectorDrawArgs))
203
+ if (args.shouldCollectClassifierGraphics)
204
204
  this.collectClassifierGraphics(args, selectedTiles);
205
205
  assert(selectedTiles.length === displayedTileDescendants.length);
206
206
  for (let i = 0; i < selectedTiles.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BeTimePoint, Id64String, ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point3d, Range3d, Transform, Vector3d, XYZProps,\n} from \"@itwin/core-geometry\";\nimport { Cartographic, ColorDef, GeoCoordStatus, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { BackgroundMapGeometry } from \"../BackgroundMapGeometry\";\nimport { GeoConverter } from \"../GeoServices\";\nimport { IModelApp } from \"../IModelApp\";\nimport { GraphicBranch } from \"../render/GraphicBranch\";\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\nimport { SceneContext } from \"../ViewContext\";\nimport {\n GraphicsCollectorDrawArgs, MapTile, RealityTile, RealityTileLoader, RealityTileParams, Tile, TileDrawArgs, TileGeometryCollector,\n TileGraphicType, TileParams, TileTree, TileTreeParams,\n} from \"./internal\";\n\n/** @internal */\nexport class TraversalDetails {\n public queuedChildren = new Array<Tile>();\n public childrenSelected = false;\n public shouldSelectParent = false;\n\n public initialize() {\n this.queuedChildren.length = 0;\n this.childrenSelected = false;\n this.shouldSelectParent = false;\n }\n}\n\n/** @internal */\nexport class TraversalChildrenDetails {\n private _childDetails: TraversalDetails[] = [];\n\n public initialize() {\n for (const child of this._childDetails)\n child.initialize();\n }\n\n public getChildDetail(index: number) {\n while (this._childDetails.length <= index)\n this._childDetails.push(new TraversalDetails());\n\n return this._childDetails[index];\n }\n\n public combine(parentDetails: TraversalDetails) {\n parentDetails.queuedChildren.length = 0;\n parentDetails.childrenSelected = false;\n parentDetails.shouldSelectParent = false;\n\n for (const child of this._childDetails) {\n parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;\n parentDetails.shouldSelectParent = parentDetails.shouldSelectParent || child.shouldSelectParent;\n\n for (const queuedChild of child.queuedChildren)\n parentDetails.queuedChildren.push(queuedChild);\n }\n }\n}\n\n/** @internal */\nexport class TraversalSelectionContext {\n public preloaded = new Set<RealityTile>();\n public missing = new Array<RealityTile>();\n public get selectionCountExceeded() { return this._maxSelectionCount === undefined ? false : (this.missing.length + this.selected.length) > this._maxSelectionCount; } // Avoid selecting excessive number of tiles.\n constructor(public selected: Tile[], public displayedDescendants: Tile[][], public preloadDebugBuilder?: GraphicBuilder, private _maxSelectionCount?: number) { }\n\n public selectOrQueue(tile: RealityTile, args: TileDrawArgs, traversalDetails: TraversalDetails) {\n tile.selectSecondaryTiles(args, this);\n tile.markUsed(args);\n traversalDetails.shouldSelectParent = true;\n\n if (tile.isReady) {\n args.markReady(tile);\n this.selected.push(tile);\n tile.markDisplayed();\n this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);\n traversalDetails.queuedChildren.length = 0;\n traversalDetails.childrenSelected = true;\n traversalDetails.shouldSelectParent = false;\n } else if (!tile.isNotFound) {\n traversalDetails.queuedChildren.push(tile);\n if (!tile.isLoaded)\n this.missing.push(tile);\n }\n }\n\n public preload(tile: RealityTile, args: TileDrawArgs): void {\n if (!this.preloaded.has(tile)) {\n if (this.preloadDebugBuilder)\n tile.addBoundingGraphic(this.preloadDebugBuilder, ColorDef.red);\n\n tile.markUsed(args);\n tile.selectSecondaryTiles(args, this);\n this.preloaded.add(tile);\n if (!tile.isNotFound && !tile.isLoaded)\n this.missing.push(tile);\n }\n }\n\n public select(tiles: RealityTile[], args: TileDrawArgs): void {\n for (const tile of tiles) {\n tile.markUsed(args);\n this.selected.push(tile);\n this.displayedDescendants.push([]);\n }\n }\n}\n\nconst scratchCarto = Cartographic.createZero();\nconst scratchPoint = Point3d.createZero(), scratchOrigin = Point3d.createZero();\nconst scratchRange = Range3d.createNull();\nconst scratchX = Vector3d.createZero(), scratchY = Vector3d.createZero(), scratchZ = Vector3d.createZero();\nconst scratchMatrix = Matrix3d.createZero(), scratchTransform = Transform.createZero();\n\ninterface ChildReprojection {\n child: RealityTile;\n ecefCenter: Point3d;\n dbPoints: Point3d[]; // Center, xEnd, yEnd, zEnd\n}\n\n/** Provides access to per-feature properties within a [[RealityTileTree]].\n * A [[RealityTileTree]] may refer to a tileset in one of the [3D Tiles 1.0](https://docs.ogc.org/cs/18-053r2/18-053r2.html).\n * Tiles within such tilesets may include a [batch table](https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/BatchTable) describing subcomponents (\"features\") within the tile.\n * For example, a tileset representing a building may encode each door, window, and wall as separate features.\n * The batch table may additionally contain metadata in JSON format describing each feature.\n *\n * During tile decoding, iTwin.js assigns unique, transient [Id64String]($bentley)s to each unique feature within the tileset.\n * When interacting with tileset features (e.g., via a [[SelectionSet]] or [[HitDetail]]), the features are identified by these transient Ids.\n * The tile tree's BatchTableProperties maintains the mapping between the transient Ids and the per-feature properties.\n *\n * The following example illustrates one way to obtain the properties of a specific feature within a reality model's batch table:\n * ```ts\n * [[include:GetBatchTableFeatureProperties]]\n * ```\n *\n * @see [[RealityTileTree.batchTableProperties]] to obtain the batch table properties for a TileTree.\n * @beta\n */\nexport interface BatchTableProperties {\n /** Obtain the JSON properties associated with the specified transient Id.\n * @param id The transient Id mapped to the feature of interest.\n * @returns A corresponding JSON object representing the feature's properties, or `undefined` if no such properties exist.\n * @note Treat the JSON properties as read-only - do not modify them.\n */\n getFeatureProperties(id: Id64String): Record<string, any> | undefined;\n\n /** Obtain an iterator over all of the features in the batch table and their properties. */\n entries(): Iterable<{ id: Id64String, properties: Record<string, any> }>;\n}\n\n/** @internal */\nexport interface RealityTileTreeParams extends TileTreeParams {\n readonly loader: RealityTileLoader;\n readonly yAxisUp?: boolean;\n readonly rootTile: RealityTileParams;\n readonly rootToEcef?: Transform;\n readonly gcsConverterAvailable: boolean;\n readonly baseUrl?: string;\n}\n\n/** Base class for a [[TileTree]] representing a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.\n * The tiles within the tree are instances of [[RealityTile]]s.\n * @public\n */\nexport class RealityTileTree extends TileTree {\n /** @internal */\n public traversalChildrenByDepth: TraversalChildrenDetails[] = [];\n /** @internal */\n public readonly loader: RealityTileLoader;\n /** @internal */\n public readonly yAxisUp: boolean;\n /** @internal */\n public cartesianRange: Range3d;\n /** @internal */\n public cartesianTransitionDistance: number;\n /** @internal */\n protected _gcsConverter: GeoConverter | undefined;\n /** @internal */\n protected _rootTile: RealityTile;\n /** @internal */\n protected _rootToEcef?: Transform;\n /** @internal */\n protected _ecefToDb?: Transform;\n /** @internal */\n public readonly baseUrl?: string;\n\n /** @internal */\n public constructor(params: RealityTileTreeParams) {\n super(params);\n this.loader = params.loader;\n this.yAxisUp = true === params.yAxisUp;\n this._rootTile = this.createTile(params.rootTile);\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(this.iModel);\n this.cartesianTransitionDistance = this.cartesianRange.diagonal().magnitudeXY() * .25; // Transition distance from elliptical to cartesian.\n this._gcsConverter = params.gcsConverterAvailable ? params.iModel.geoServices.getConverter(\"WGS84\") : undefined;\n if (params.rootToEcef) {\n this._rootToEcef = params.rootToEcef;\n const dbToRoot = this.iModelTransform.inverse();\n if (dbToRoot) {\n const dbToEcef = this._rootToEcef.multiplyTransformTransform(dbToRoot);\n this._ecefToDb = dbToEcef.inverse();\n }\n }\n this.baseUrl = params.baseUrl;\n }\n\n /** The mapping of per-feature JSON properties from this tile tree's batch table, if one is defined.\n * @beta\n */\n public get batchTableProperties(): BatchTableProperties | undefined {\n return this.loader.getBatchIdMap();\n }\n\n /** @internal */\n public get rootTile(): RealityTile { return this._rootTile; }\n /** @internal */\n public get is3d() { return true; }\n /** @internal */\n public get maxDepth() { return this.loader.maxDepth; }\n /** @internal */\n public get minDepth() { return this.loader.minDepth; }\n /** @internal */\n public override get isContentUnbounded() { return this.loader.isContentUnbounded; }\n /** @internal */\n public get isTransparent() { return false; }\n\n /** @internal */\n protected _selectTiles(args: TileDrawArgs): Tile[] { return this.selectRealityTiles(args, []); }\n /** @internal */\n public get viewFlagOverrides(): ViewFlagOverrides { return this.loader.viewFlagOverrides; }\n /** @internal */\n public override get parentsAndChildrenExclusive() { return this.loader.parentsAndChildrenExclusive; }\n\n /** @internal */\n public createTile(props: TileParams): RealityTile { return new RealityTile(props, this); }\n\n /** Collect tiles from this tile tree based on the criteria implemented by `collector`.\n * @internal\n */\n public override collectTileGeometry(collector: TileGeometryCollector): void {\n this.rootTile.collectTileGeometry(collector);\n }\n\n /** @internal */\n public prune(): void {\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\n this.rootTile.purgeContents(olderThan, !ProcessDetector.isMobileBrowser);\n }\n\n /** @internal */\n public draw(args: TileDrawArgs): void {\n const displayedTileDescendants = new Array<RealityTile[]>();\n const debugControl = args.context.target.debugControl;\n const selectBuilder = (debugControl && debugControl.displayRealityTileRanges) ? args.context.createSceneGraphicBuilder() : undefined;\n const preloadDebugBuilder = (debugControl && debugControl.displayRealityTilePreload) ? args.context.createSceneGraphicBuilder() : undefined;\n const graphicTypeBranches = new Map<TileGraphicType, GraphicBranch>();\n\n const selectedTiles = this.selectRealityTiles(args, displayedTileDescendants, preloadDebugBuilder);\n args.processSelectedTiles(selectedTiles);\n let sortIndices;\n\n if (!this.parentsAndChildrenExclusive) {\n sortIndices = selectedTiles.map((_x, i) => i);\n sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);\n }\n\n if (!(args instanceof GraphicsCollectorDrawArgs))\n this.collectClassifierGraphics(args, selectedTiles);\n\n assert(selectedTiles.length === displayedTileDescendants.length);\n for (let i = 0; i < selectedTiles.length; i++) {\n const index = sortIndices ? sortIndices[i] : i;\n const selectedTile = selectedTiles[index];\n const graphics = args.getTileGraphics(selectedTile);\n const tileGraphicType = selectedTile.graphicType;\n let targetBranch;\n if (undefined !== tileGraphicType && tileGraphicType !== args.context.graphicType) {\n if (!(targetBranch = graphicTypeBranches.get(tileGraphicType))) {\n graphicTypeBranches.set(tileGraphicType, targetBranch = new GraphicBranch(false));\n targetBranch.setViewFlagOverrides(args.graphics.viewFlagOverrides);\n targetBranch.symbologyOverrides = args.graphics.symbologyOverrides;\n }\n }\n\n if (!targetBranch)\n targetBranch = args.graphics;\n\n if (undefined !== graphics) {\n const displayedDescendants = displayedTileDescendants[index];\n if (0 === displayedDescendants.length || !this.loader.parentsAndChildrenExclusive || selectedTile.allChildrenIncluded(displayedDescendants)) {\n targetBranch.add(graphics);\n if (selectBuilder)\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.green);\n } else {\n if (selectBuilder)\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.red);\n\n for (const displayedDescendant of displayedDescendants) {\n const clipVector = displayedDescendant.getContentClip();\n if (selectBuilder)\n displayedDescendant.addBoundingGraphic(selectBuilder, ColorDef.blue);\n\n if (undefined === clipVector) {\n targetBranch.add(graphics);\n } else {\n clipVector.transformInPlace(args.location);\n if (!this.isTransparent)\n for (const primitive of clipVector.clips)\n for (const clipPlanes of primitive.fetchClipPlanesRef()!.convexSets)\n for (const plane of clipPlanes.planes)\n plane.offsetDistance(-displayedDescendant.radius * .05); // Overlap with existing (high resolution) tile slightly to avoid cracks.\n\n const branch = new GraphicBranch(false);\n branch.add(graphics);\n const clipVolume = args.context.target.renderSystem.createClipVolume(clipVector);\n targetBranch.add(args.context.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume }));\n }\n }\n }\n if (preloadDebugBuilder)\n targetBranch.add(preloadDebugBuilder.finish());\n\n if (selectBuilder)\n targetBranch.add(selectBuilder.finish());\n\n const rangeGraphic = selectedTile.getRangeGraphic(args.context);\n if (undefined !== rangeGraphic)\n targetBranch.add(rangeGraphic);\n }\n }\n\n args.drawGraphics();\n for (const graphicTypeBranch of graphicTypeBranches) {\n args.drawGraphicsWithType(graphicTypeBranch[0], graphicTypeBranch[1]);\n }\n }\n\n /** @internal */\n protected collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\n const classifier = args.context.planarClassifiers.get(this.modelId);\n if (classifier)\n classifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\n }\n\n /** @internal */\n public getTraversalChildren(depth: number) {\n while (this.traversalChildrenByDepth.length <= depth)\n this.traversalChildrenByDepth.push(new TraversalChildrenDetails());\n\n return this.traversalChildrenByDepth[depth];\n }\n\n /** @internal */\n public doReprojectChildren(tile: Tile): boolean {\n if (!(tile instanceof RealityTile) || this._gcsConverter === undefined || this._rootToEcef === undefined || undefined === this._ecefToDb)\n return false;\n\n const tileRange = this.iModelTransform.isIdentity ? tile.range : this.iModelTransform.multiplyRange(tile.range, scratchRange);\n\n return this.cartesianRange.intersectsRange(tileRange);\n }\n\n /** @internal */\n public reprojectAndResolveChildren(parent: Tile, children: Tile[], resolve: (children: Tile[] | undefined) => void): void {\n if (!this.doReprojectChildren(parent)) {\n resolve(children);\n return;\n }\n\n const ecefToDb = this._ecefToDb!; // Tested for undefined in doReprojectChildren\n const rootToDb = this.iModelTransform;\n const dbToEcef = ecefToDb.inverse()!;\n const reprojectChildren = new Array<ChildReprojection>();\n for (const child of children) {\n const realityChild = child as RealityTile;\n const childRange = rootToDb.multiplyRange(realityChild.contentRange, scratchRange);\n const dbCenter = childRange.center;\n const ecefCenter = dbToEcef.multiplyPoint3d(dbCenter);\n const dbPoints = [dbCenter, dbCenter.plusXYZ(1), dbCenter.plusXYZ(0, 1), dbCenter.plusXYZ(0, 0, 1)];\n reprojectChildren.push({ child: realityChild, ecefCenter, dbPoints });\n }\n if (reprojectChildren.length === 0)\n resolve(children);\n else {\n const requestProps = new Array<XYZProps>();\n\n for (const reprojection of reprojectChildren) {\n for (const dbPoint of reprojection.dbPoints) {\n const ecefPoint = dbToEcef.multiplyPoint3d(dbPoint);\n const carto = Cartographic.fromEcef(ecefPoint, scratchCarto);\n if (carto)\n requestProps.push({ x: carto.longitudeDegrees, y: carto.latitudeDegrees, z: carto.height });\n\n }\n }\n\n if (requestProps.length !== 4 * reprojectChildren.length)\n resolve(children);\n else {\n this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps).then((response) => {\n\n const reprojectedCoords = response.iModelCoords;\n const dbToRoot = rootToDb.inverse()!;\n const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {\n scratchPoint.setFromJSON(reprojectedXYZ);\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);\n if (cartesianDistance < this.cartesianTransitionDistance)\n return scratchPoint.interpolate(cartesianDistance / this.cartesianTransitionDistance, original, scratchPoint);\n else\n return original;\n };\n\n let responseIndex = 0;\n for (const reprojection of reprojectChildren) {\n if (reprojectedCoords.every((coord) => coord.s === GeoCoordStatus.Success)) {\n const reprojectedOrigin = getReprojectedPoint(reprojection.dbPoints[0], reprojectedCoords[responseIndex++].p).clone(scratchOrigin);\n const xVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[1], reprojectedCoords[responseIndex++].p), scratchX);\n const yVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[2], reprojectedCoords[responseIndex++].p), scratchY);\n const zVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[3], reprojectedCoords[responseIndex++].p), scratchZ);\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector, scratchMatrix);\n if (matrix !== undefined) {\n const dbReprojection = Transform.createMatrixPickupPutdown(matrix, reprojection.dbPoints[0], reprojectedOrigin, scratchTransform);\n if (dbReprojection) {\n const rootReprojection = dbToRoot.multiplyTransformTransform(dbReprojection).multiplyTransformTransform(rootToDb);\n reprojection.child.reproject(rootReprojection);\n }\n }\n }\n }\n\n resolve(children);\n }).catch(() => {\n resolve(children); // Error occured in reprojection - just resolve with unprojected corners.\n });\n }\n }\n }\n\n /** @internal */\n public getBaseRealityDepth(_sceneContext: SceneContext) { return -1; }\n\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\n * if any scale range visibility change is detected for one more map-layer definition.\n * @internal\n */\n public reportTileVisibility(_args: TileDrawArgs, _selected: RealityTile[]) { }\n\n /** @internal */\n public selectRealityTiles(args: TileDrawArgs, displayedDescendants: RealityTile[][], preloadDebugBuilder?: GraphicBuilder): RealityTile[] {\n this._lastSelected = BeTimePoint.now();\n const selected: RealityTile[] = [];\n const context = new TraversalSelectionContext(selected, displayedDescendants, preloadDebugBuilder, args.maxRealityTreeSelectionCount);\n const rootTile = this.rootTile;\n const debugControl = args.context.target.debugControl;\n const freezeTiles = debugControl && debugControl.freezeRealityTiles;\n\n rootTile.selectRealityTiles(context, args, new TraversalDetails());\n\n const baseDepth = this.getBaseRealityDepth(args.context);\n\n if (IModelApp.tileAdmin.isPreloadingAllowed && 0 === context.missing.length) {\n if (baseDepth > 0) // Maps may force loading of low level globe tiles.\n rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);\n\n if (!freezeTiles)\n rootTile.preloadProtectedTiles(args, context);\n }\n\n if (!freezeTiles)\n for (const tile of context.missing) {\n const loadableTile = tile.loadableTile;\n\n loadableTile.markUsed(args);\n args.insertMissing(loadableTile);\n }\n\n if (debugControl && debugControl.logRealityTiles) {\n this.logTiles(\"Selected: \", selected.values());\n const preloaded = [];\n for (const tile of context.preloaded)\n preloaded.push(tile);\n\n this.logTiles(\"Preloaded: \", preloaded.values());\n this.logTiles(\"Missing: \", context.missing.values());\n\n const imageryTiles: RealityTile[] = [];\n for (const selectedTile of selected) {\n if (selectedTile instanceof MapTile) {\n const selectedImageryTiles = (selectedTile).imageryTiles;\n if (selectedImageryTiles)\n selectedImageryTiles.forEach((tile) => imageryTiles.push(tile));\n }\n }\n if (imageryTiles.length)\n this.logTiles(\"Imagery:\", imageryTiles.values());\n }\n\n this.reportTileVisibility(args, selected);\n\n IModelApp.tileAdmin.addTilesForUser(args.context.viewport, selected, args.readyTiles, args.touchedTiles);\n return selected;\n }\n\n /** @internal */\n protected logTiles(label: string, tiles: IterableIterator<Tile>) {\n let depthString = \"\";\n let min = 10000, max = -10000;\n let count = 0;\n const depthMap = new Map<number, number>();\n for (const tile of tiles) {\n count++;\n const depth = tile.depth;\n min = Math.min(min, tile.depth);\n max = Math.max(max, tile.depth);\n const found = depthMap.get(depth);\n depthMap.set(depth, found === undefined ? 1 : found + 1);\n }\n\n depthMap.forEach((value, key) => depthString += `${key}(x${value}), `);\n // eslint-disable-next-line no-console\n console.log(`${label}: ${count} Min: ${min} Max: ${max} Depths: ${depthString}`);\n }\n}\n"]}
1
+ {"version":3,"file":"RealityTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BeTimePoint, Id64String, ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point3d, Range3d, Transform, Vector3d, XYZProps,\n} from \"@itwin/core-geometry\";\nimport { Cartographic, ColorDef, GeoCoordStatus, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { BackgroundMapGeometry } from \"../BackgroundMapGeometry\";\nimport { GeoConverter } from \"../GeoServices\";\nimport { IModelApp } from \"../IModelApp\";\nimport { GraphicBranch } from \"../render/GraphicBranch\";\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\nimport { SceneContext } from \"../ViewContext\";\nimport {\n MapTile, RealityTile, RealityTileLoader, RealityTileParams, Tile, TileDrawArgs, TileGeometryCollector,\n TileGraphicType, TileParams, TileTree, TileTreeParams,\n} from \"./internal\";\n\n/** @internal */\nexport class TraversalDetails {\n public queuedChildren = new Array<Tile>();\n public childrenSelected = false;\n public shouldSelectParent = false;\n\n public initialize() {\n this.queuedChildren.length = 0;\n this.childrenSelected = false;\n this.shouldSelectParent = false;\n }\n}\n\n/** @internal */\nexport class TraversalChildrenDetails {\n private _childDetails: TraversalDetails[] = [];\n\n public initialize() {\n for (const child of this._childDetails)\n child.initialize();\n }\n\n public getChildDetail(index: number) {\n while (this._childDetails.length <= index)\n this._childDetails.push(new TraversalDetails());\n\n return this._childDetails[index];\n }\n\n public combine(parentDetails: TraversalDetails) {\n parentDetails.queuedChildren.length = 0;\n parentDetails.childrenSelected = false;\n parentDetails.shouldSelectParent = false;\n\n for (const child of this._childDetails) {\n parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;\n parentDetails.shouldSelectParent = parentDetails.shouldSelectParent || child.shouldSelectParent;\n\n for (const queuedChild of child.queuedChildren)\n parentDetails.queuedChildren.push(queuedChild);\n }\n }\n}\n\n/** @internal */\nexport class TraversalSelectionContext {\n public preloaded = new Set<RealityTile>();\n public missing = new Array<RealityTile>();\n public get selectionCountExceeded() { return this._maxSelectionCount === undefined ? false : (this.missing.length + this.selected.length) > this._maxSelectionCount; } // Avoid selecting excessive number of tiles.\n constructor(public selected: Tile[], public displayedDescendants: Tile[][], public preloadDebugBuilder?: GraphicBuilder, private _maxSelectionCount?: number) { }\n\n public selectOrQueue(tile: RealityTile, args: TileDrawArgs, traversalDetails: TraversalDetails) {\n tile.selectSecondaryTiles(args, this);\n tile.markUsed(args);\n traversalDetails.shouldSelectParent = true;\n\n if (tile.isReady) {\n args.markReady(tile);\n this.selected.push(tile);\n tile.markDisplayed();\n this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);\n traversalDetails.queuedChildren.length = 0;\n traversalDetails.childrenSelected = true;\n traversalDetails.shouldSelectParent = false;\n } else if (!tile.isNotFound) {\n traversalDetails.queuedChildren.push(tile);\n if (!tile.isLoaded)\n this.missing.push(tile);\n }\n }\n\n public preload(tile: RealityTile, args: TileDrawArgs): void {\n if (!this.preloaded.has(tile)) {\n if (this.preloadDebugBuilder)\n tile.addBoundingGraphic(this.preloadDebugBuilder, ColorDef.red);\n\n tile.markUsed(args);\n tile.selectSecondaryTiles(args, this);\n this.preloaded.add(tile);\n if (!tile.isNotFound && !tile.isLoaded)\n this.missing.push(tile);\n }\n }\n\n public select(tiles: RealityTile[], args: TileDrawArgs): void {\n for (const tile of tiles) {\n tile.markUsed(args);\n this.selected.push(tile);\n this.displayedDescendants.push([]);\n }\n }\n}\n\nconst scratchCarto = Cartographic.createZero();\nconst scratchPoint = Point3d.createZero(), scratchOrigin = Point3d.createZero();\nconst scratchRange = Range3d.createNull();\nconst scratchX = Vector3d.createZero(), scratchY = Vector3d.createZero(), scratchZ = Vector3d.createZero();\nconst scratchMatrix = Matrix3d.createZero(), scratchTransform = Transform.createZero();\n\ninterface ChildReprojection {\n child: RealityTile;\n ecefCenter: Point3d;\n dbPoints: Point3d[]; // Center, xEnd, yEnd, zEnd\n}\n\n/** Provides access to per-feature properties within a [[RealityTileTree]].\n * A [[RealityTileTree]] may refer to a tileset in one of the [3D Tiles 1.0](https://docs.ogc.org/cs/18-053r2/18-053r2.html).\n * Tiles within such tilesets may include a [batch table](https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/BatchTable) describing subcomponents (\"features\") within the tile.\n * For example, a tileset representing a building may encode each door, window, and wall as separate features.\n * The batch table may additionally contain metadata in JSON format describing each feature.\n *\n * During tile decoding, iTwin.js assigns unique, transient [Id64String]($bentley)s to each unique feature within the tileset.\n * When interacting with tileset features (e.g., via a [[SelectionSet]] or [[HitDetail]]), the features are identified by these transient Ids.\n * The tile tree's BatchTableProperties maintains the mapping between the transient Ids and the per-feature properties.\n *\n * The following example illustrates one way to obtain the properties of a specific feature within a reality model's batch table:\n * ```ts\n * [[include:GetBatchTableFeatureProperties]]\n * ```\n *\n * @see [[RealityTileTree.batchTableProperties]] to obtain the batch table properties for a TileTree.\n * @beta\n */\nexport interface BatchTableProperties {\n /** Obtain the JSON properties associated with the specified transient Id.\n * @param id The transient Id mapped to the feature of interest.\n * @returns A corresponding JSON object representing the feature's properties, or `undefined` if no such properties exist.\n * @note Treat the JSON properties as read-only - do not modify them.\n */\n getFeatureProperties(id: Id64String): Record<string, any> | undefined;\n\n /** Obtain an iterator over all of the features in the batch table and their properties. */\n entries(): Iterable<{ id: Id64String, properties: Record<string, any> }>;\n}\n\n/** @internal */\nexport interface RealityTileTreeParams extends TileTreeParams {\n readonly loader: RealityTileLoader;\n readonly yAxisUp?: boolean;\n readonly rootTile: RealityTileParams;\n readonly rootToEcef?: Transform;\n readonly gcsConverterAvailable: boolean;\n readonly baseUrl?: string;\n}\n\n/** Base class for a [[TileTree]] representing a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.\n * The tiles within the tree are instances of [[RealityTile]]s.\n * @public\n */\nexport class RealityTileTree extends TileTree {\n /** @internal */\n public traversalChildrenByDepth: TraversalChildrenDetails[] = [];\n /** @internal */\n public readonly loader: RealityTileLoader;\n /** @internal */\n public readonly yAxisUp: boolean;\n /** @internal */\n public cartesianRange: Range3d;\n /** @internal */\n public cartesianTransitionDistance: number;\n /** @internal */\n protected _gcsConverter: GeoConverter | undefined;\n /** @internal */\n protected _rootTile: RealityTile;\n /** @internal */\n protected _rootToEcef?: Transform;\n /** @internal */\n protected _ecefToDb?: Transform;\n /** @internal */\n public readonly baseUrl?: string;\n\n /** @internal */\n public constructor(params: RealityTileTreeParams) {\n super(params);\n this.loader = params.loader;\n this.yAxisUp = true === params.yAxisUp;\n this._rootTile = this.createTile(params.rootTile);\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(this.iModel);\n this.cartesianTransitionDistance = this.cartesianRange.diagonal().magnitudeXY() * .25; // Transition distance from elliptical to cartesian.\n this._gcsConverter = params.gcsConverterAvailable ? params.iModel.geoServices.getConverter(\"WGS84\") : undefined;\n if (params.rootToEcef) {\n this._rootToEcef = params.rootToEcef;\n const dbToRoot = this.iModelTransform.inverse();\n if (dbToRoot) {\n const dbToEcef = this._rootToEcef.multiplyTransformTransform(dbToRoot);\n this._ecefToDb = dbToEcef.inverse();\n }\n }\n this.baseUrl = params.baseUrl;\n }\n\n /** The mapping of per-feature JSON properties from this tile tree's batch table, if one is defined.\n * @beta\n */\n public get batchTableProperties(): BatchTableProperties | undefined {\n return this.loader.getBatchIdMap();\n }\n\n /** @internal */\n public get rootTile(): RealityTile { return this._rootTile; }\n /** @internal */\n public get is3d() { return true; }\n /** @internal */\n public get maxDepth() { return this.loader.maxDepth; }\n /** @internal */\n public get minDepth() { return this.loader.minDepth; }\n /** @internal */\n public override get isContentUnbounded() { return this.loader.isContentUnbounded; }\n /** @internal */\n public get isTransparent() { return false; }\n\n /** @internal */\n protected _selectTiles(args: TileDrawArgs): Tile[] { return this.selectRealityTiles(args, []); }\n /** @internal */\n public get viewFlagOverrides(): ViewFlagOverrides { return this.loader.viewFlagOverrides; }\n /** @internal */\n public override get parentsAndChildrenExclusive() { return this.loader.parentsAndChildrenExclusive; }\n\n /** @internal */\n public createTile(props: TileParams): RealityTile { return new RealityTile(props, this); }\n\n /** Collect tiles from this tile tree based on the criteria implemented by `collector`.\n * @internal\n */\n public override collectTileGeometry(collector: TileGeometryCollector): void {\n this.rootTile.collectTileGeometry(collector);\n }\n\n /** @internal */\n public prune(): void {\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\n this.rootTile.purgeContents(olderThan, !ProcessDetector.isMobileBrowser);\n }\n\n /** @internal */\n public draw(args: TileDrawArgs): void {\n const displayedTileDescendants = new Array<RealityTile[]>();\n const debugControl = args.context.target.debugControl;\n const selectBuilder = (debugControl && debugControl.displayRealityTileRanges) ? args.context.createSceneGraphicBuilder() : undefined;\n const preloadDebugBuilder = (debugControl && debugControl.displayRealityTilePreload) ? args.context.createSceneGraphicBuilder() : undefined;\n const graphicTypeBranches = new Map<TileGraphicType, GraphicBranch>();\n\n const selectedTiles = this.selectRealityTiles(args, displayedTileDescendants, preloadDebugBuilder);\n args.processSelectedTiles(selectedTiles);\n let sortIndices;\n\n if (!this.parentsAndChildrenExclusive) {\n sortIndices = selectedTiles.map((_x, i) => i);\n sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);\n }\n\n if (args.shouldCollectClassifierGraphics)\n this.collectClassifierGraphics(args, selectedTiles);\n\n assert(selectedTiles.length === displayedTileDescendants.length);\n for (let i = 0; i < selectedTiles.length; i++) {\n const index = sortIndices ? sortIndices[i] : i;\n const selectedTile = selectedTiles[index];\n const graphics = args.getTileGraphics(selectedTile);\n const tileGraphicType = selectedTile.graphicType;\n let targetBranch;\n if (undefined !== tileGraphicType && tileGraphicType !== args.context.graphicType) {\n if (!(targetBranch = graphicTypeBranches.get(tileGraphicType))) {\n graphicTypeBranches.set(tileGraphicType, targetBranch = new GraphicBranch(false));\n targetBranch.setViewFlagOverrides(args.graphics.viewFlagOverrides);\n targetBranch.symbologyOverrides = args.graphics.symbologyOverrides;\n }\n }\n\n if (!targetBranch)\n targetBranch = args.graphics;\n\n if (undefined !== graphics) {\n const displayedDescendants = displayedTileDescendants[index];\n if (0 === displayedDescendants.length || !this.loader.parentsAndChildrenExclusive || selectedTile.allChildrenIncluded(displayedDescendants)) {\n targetBranch.add(graphics);\n if (selectBuilder)\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.green);\n } else {\n if (selectBuilder)\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.red);\n\n for (const displayedDescendant of displayedDescendants) {\n const clipVector = displayedDescendant.getContentClip();\n if (selectBuilder)\n displayedDescendant.addBoundingGraphic(selectBuilder, ColorDef.blue);\n\n if (undefined === clipVector) {\n targetBranch.add(graphics);\n } else {\n clipVector.transformInPlace(args.location);\n if (!this.isTransparent)\n for (const primitive of clipVector.clips)\n for (const clipPlanes of primitive.fetchClipPlanesRef()!.convexSets)\n for (const plane of clipPlanes.planes)\n plane.offsetDistance(-displayedDescendant.radius * .05); // Overlap with existing (high resolution) tile slightly to avoid cracks.\n\n const branch = new GraphicBranch(false);\n branch.add(graphics);\n const clipVolume = args.context.target.renderSystem.createClipVolume(clipVector);\n targetBranch.add(args.context.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume }));\n }\n }\n }\n if (preloadDebugBuilder)\n targetBranch.add(preloadDebugBuilder.finish());\n\n if (selectBuilder)\n targetBranch.add(selectBuilder.finish());\n\n const rangeGraphic = selectedTile.getRangeGraphic(args.context);\n if (undefined !== rangeGraphic)\n targetBranch.add(rangeGraphic);\n }\n }\n\n args.drawGraphics();\n for (const graphicTypeBranch of graphicTypeBranches) {\n args.drawGraphicsWithType(graphicTypeBranch[0], graphicTypeBranch[1]);\n }\n }\n\n /** @internal */\n protected collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\n const classifier = args.context.planarClassifiers.get(this.modelId);\n if (classifier)\n classifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\n }\n\n /** @internal */\n public getTraversalChildren(depth: number) {\n while (this.traversalChildrenByDepth.length <= depth)\n this.traversalChildrenByDepth.push(new TraversalChildrenDetails());\n\n return this.traversalChildrenByDepth[depth];\n }\n\n /** @internal */\n public doReprojectChildren(tile: Tile): boolean {\n if (!(tile instanceof RealityTile) || this._gcsConverter === undefined || this._rootToEcef === undefined || undefined === this._ecefToDb)\n return false;\n\n const tileRange = this.iModelTransform.isIdentity ? tile.range : this.iModelTransform.multiplyRange(tile.range, scratchRange);\n\n return this.cartesianRange.intersectsRange(tileRange);\n }\n\n /** @internal */\n public reprojectAndResolveChildren(parent: Tile, children: Tile[], resolve: (children: Tile[] | undefined) => void): void {\n if (!this.doReprojectChildren(parent)) {\n resolve(children);\n return;\n }\n\n const ecefToDb = this._ecefToDb!; // Tested for undefined in doReprojectChildren\n const rootToDb = this.iModelTransform;\n const dbToEcef = ecefToDb.inverse()!;\n const reprojectChildren = new Array<ChildReprojection>();\n for (const child of children) {\n const realityChild = child as RealityTile;\n const childRange = rootToDb.multiplyRange(realityChild.contentRange, scratchRange);\n const dbCenter = childRange.center;\n const ecefCenter = dbToEcef.multiplyPoint3d(dbCenter);\n const dbPoints = [dbCenter, dbCenter.plusXYZ(1), dbCenter.plusXYZ(0, 1), dbCenter.plusXYZ(0, 0, 1)];\n reprojectChildren.push({ child: realityChild, ecefCenter, dbPoints });\n }\n if (reprojectChildren.length === 0)\n resolve(children);\n else {\n const requestProps = new Array<XYZProps>();\n\n for (const reprojection of reprojectChildren) {\n for (const dbPoint of reprojection.dbPoints) {\n const ecefPoint = dbToEcef.multiplyPoint3d(dbPoint);\n const carto = Cartographic.fromEcef(ecefPoint, scratchCarto);\n if (carto)\n requestProps.push({ x: carto.longitudeDegrees, y: carto.latitudeDegrees, z: carto.height });\n\n }\n }\n\n if (requestProps.length !== 4 * reprojectChildren.length)\n resolve(children);\n else {\n this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps).then((response) => {\n\n const reprojectedCoords = response.iModelCoords;\n const dbToRoot = rootToDb.inverse()!;\n const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {\n scratchPoint.setFromJSON(reprojectedXYZ);\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);\n if (cartesianDistance < this.cartesianTransitionDistance)\n return scratchPoint.interpolate(cartesianDistance / this.cartesianTransitionDistance, original, scratchPoint);\n else\n return original;\n };\n\n let responseIndex = 0;\n for (const reprojection of reprojectChildren) {\n if (reprojectedCoords.every((coord) => coord.s === GeoCoordStatus.Success)) {\n const reprojectedOrigin = getReprojectedPoint(reprojection.dbPoints[0], reprojectedCoords[responseIndex++].p).clone(scratchOrigin);\n const xVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[1], reprojectedCoords[responseIndex++].p), scratchX);\n const yVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[2], reprojectedCoords[responseIndex++].p), scratchY);\n const zVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[3], reprojectedCoords[responseIndex++].p), scratchZ);\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector, scratchMatrix);\n if (matrix !== undefined) {\n const dbReprojection = Transform.createMatrixPickupPutdown(matrix, reprojection.dbPoints[0], reprojectedOrigin, scratchTransform);\n if (dbReprojection) {\n const rootReprojection = dbToRoot.multiplyTransformTransform(dbReprojection).multiplyTransformTransform(rootToDb);\n reprojection.child.reproject(rootReprojection);\n }\n }\n }\n }\n\n resolve(children);\n }).catch(() => {\n resolve(children); // Error occured in reprojection - just resolve with unprojected corners.\n });\n }\n }\n }\n\n /** @internal */\n public getBaseRealityDepth(_sceneContext: SceneContext) { return -1; }\n\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\n * if any scale range visibility change is detected for one more map-layer definition.\n * @internal\n */\n public reportTileVisibility(_args: TileDrawArgs, _selected: RealityTile[]) { }\n\n /** @internal */\n public selectRealityTiles(args: TileDrawArgs, displayedDescendants: RealityTile[][], preloadDebugBuilder?: GraphicBuilder): RealityTile[] {\n this._lastSelected = BeTimePoint.now();\n const selected: RealityTile[] = [];\n const context = new TraversalSelectionContext(selected, displayedDescendants, preloadDebugBuilder, args.maxRealityTreeSelectionCount);\n const rootTile = this.rootTile;\n const debugControl = args.context.target.debugControl;\n const freezeTiles = debugControl && debugControl.freezeRealityTiles;\n\n rootTile.selectRealityTiles(context, args, new TraversalDetails());\n\n const baseDepth = this.getBaseRealityDepth(args.context);\n\n if (IModelApp.tileAdmin.isPreloadingAllowed && 0 === context.missing.length) {\n if (baseDepth > 0) // Maps may force loading of low level globe tiles.\n rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);\n\n if (!freezeTiles)\n rootTile.preloadProtectedTiles(args, context);\n }\n\n if (!freezeTiles)\n for (const tile of context.missing) {\n const loadableTile = tile.loadableTile;\n\n loadableTile.markUsed(args);\n args.insertMissing(loadableTile);\n }\n\n if (debugControl && debugControl.logRealityTiles) {\n this.logTiles(\"Selected: \", selected.values());\n const preloaded = [];\n for (const tile of context.preloaded)\n preloaded.push(tile);\n\n this.logTiles(\"Preloaded: \", preloaded.values());\n this.logTiles(\"Missing: \", context.missing.values());\n\n const imageryTiles: RealityTile[] = [];\n for (const selectedTile of selected) {\n if (selectedTile instanceof MapTile) {\n const selectedImageryTiles = (selectedTile).imageryTiles;\n if (selectedImageryTiles)\n selectedImageryTiles.forEach((tile) => imageryTiles.push(tile));\n }\n }\n if (imageryTiles.length)\n this.logTiles(\"Imagery:\", imageryTiles.values());\n }\n\n this.reportTileVisibility(args, selected);\n\n IModelApp.tileAdmin.addTilesForUser(args.context.viewport, selected, args.readyTiles, args.touchedTiles);\n return selected;\n }\n\n /** @internal */\n protected logTiles(label: string, tiles: IterableIterator<Tile>) {\n let depthString = \"\";\n let min = 10000, max = -10000;\n let count = 0;\n const depthMap = new Map<number, number>();\n for (const tile of tiles) {\n count++;\n const depth = tile.depth;\n min = Math.min(min, tile.depth);\n max = Math.max(max, tile.depth);\n const found = depthMap.get(depth);\n depthMap.set(depth, found === undefined ? 1 : found + 1);\n }\n\n depthMap.forEach((value, key) => depthString += `${key}(x${value}), `);\n // eslint-disable-next-line no-console\n console.log(`${label}: ${count} Min: ${min} Max: ${max} Depths: ${depthString}`);\n }\n}\n"]}
@@ -183,5 +183,6 @@ export declare class TileDrawArgs {
183
183
  */
184
184
  processSelectedTiles(_tiles: Tile[]): void;
185
185
  get maxRealityTreeSelectionCount(): number | undefined;
186
+ get shouldCollectClassifierGraphics(): boolean;
186
187
  }
187
188
  //# sourceMappingURL=TileDrawArgs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TileDrawArgs.d.ts","sourceRoot":"","sources":["../../../src/tile/TileDrawArgs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TileDrawArgs.d.ts","sourceRoot":"","sources":["../../../src/tile/TileDrawArgs.ts"],"names":[],"mappings":"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"}
@@ -320,5 +320,7 @@ export class TileDrawArgs {
320
320
  processSelectedTiles(_tiles) { }
321
321
  /* @internal */
322
322
  get maxRealityTreeSelectionCount() { return undefined; }
323
+ /* @internal */
324
+ get shouldCollectClassifierGraphics() { return true; }
323
325
  }
324
326
  //# sourceMappingURL=TileDrawArgs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TileDrawArgs.js","sourceRoot":"","sources":["../../../src/tile/TileDrawArgs.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { BeTimePoint } from \"@itwin/core-bentley\";\nimport { ClipVector, Geometry, Map4d, Matrix4d, Point3d, Point4d, Range1d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { FeatureAppearanceProvider, FrustumPlanes, HiddenLine, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { FeatureSymbology } from \"../render/FeatureSymbology\";\nimport { GraphicBranch, GraphicBranchOptions } from \"../render/GraphicBranch\";\nimport { RenderClipVolume } from \"../render/RenderClipVolume\";\nimport { RenderGraphic } from \"../render/RenderGraphic\";\nimport { RenderPlanarClassifier } from \"../internal/render/RenderPlanarClassifier\";\nimport { SceneContext } from \"../ViewContext\";\nimport { ViewingSpace } from \"../ViewingSpace\";\nimport { CoordSystem } from \"../CoordSystem\";\nimport { Tile, TileGraphicType, TileTree } from \"./internal\";\nimport { RenderTextureDrape } from \"../internal/render/RenderTextureDrape\";\n\nconst scratchRange = new Range3d();\nconst scratchPoint = Point3d.create();\nconst scratchPoint4d = Point4d.create();\nconst scratchXRange = Range1d.createNull();\nconst scratchYRange = Range1d.createNull();\nconst scratchMatrix4d = Matrix4d.createIdentity();\n\n/** Parameters used to construct [[TileDrawArgs]].\n * @public\n * @extensions\n */\nexport interface TileDrawArgParams {\n /** Context for the scene into which the tiles are to be rendered. */\n context: SceneContext;\n /** Transform to be applied when drawing the tiles. */\n location: Transform;\n /** The tile tree from which to obtain tiles. */\n tree: TileTree;\n /** The time at which these args were created. */\n now: BeTimePoint;\n /** Overrides to apply to the view's [ViewFlags]($common) when drawing the tiles. */\n viewFlagOverrides: ViewFlagOverrides;\n /** Clip volume used to clip the tiles. */\n clipVolume?: RenderClipVolume;\n /** True if a tile and its child tiles should not be drawn simultaneously. */\n parentsAndChildrenExclusive: boolean;\n /** Symbology overrides to apply to the tiles. */\n symbologyOverrides: FeatureSymbology.Overrides | undefined;\n /** Optionally customizes the view's symbology overrides for the tiles. */\n appearanceProvider?: FeatureAppearanceProvider;\n /** Optionally overrides the view's hidden line settings. */\n hiddenLineSettings?: HiddenLine.Settings;\n /** If defined, tiles should be culled if they do not intersect this clip. */\n intersectionClip?: ClipVector;\n /** If defined, the Id of a node in the scene's [RenderSchedule.Script]($common) that applies a transform to the graphics;\n * or \"0xffffffff\" for any node that does *not* apply a transform.\n * @internal\n */\n animationTransformNodeId?: number;\n /** See [[GraphicBranch.groupNodeId]].\n * @internal\n */\n groupNodeId?: number;\n /** If defined, a bounding range in tile tree coordinates outside of which tiles should not be selected. */\n boundingRange?: Range3d;\n /** @alpha */\n maximumScreenSpaceError?: number;\n /** @alpha */\n transformFromIModel?: Transform;\n}\n\n/**\n * Provides context used when selecting and drawing [[Tile]]s.\n * @see [[TileTree.selectTiles]]\n * @see [[TileTree.draw]]\n * @public\n * @extensions\n */\nexport class TileDrawArgs {\n /** Transform to the location in iModel coordinates at which the tiles are to be drawn. */\n public readonly location: Transform;\n /** The tile tree being drawn. */\n public readonly tree: TileTree;\n /** Optional clip volume applied to the tiles. */\n public clipVolume: RenderClipVolume | undefined;\n /** The context in which the tiles will be drawn, exposing, e.g., the [[Viewport]] and accepting [[RenderGraphic]]s to be drawn. */\n public readonly context: SceneContext;\n /** Describes the viewed volume. */\n public viewingSpace: ViewingSpace;\n /** Holds the tile graphics to be drawn. */\n public readonly graphics: GraphicBranch = new GraphicBranch();\n /** @internal */\n public readonly now: BeTimePoint;\n /** The planes of the viewing frustum, used for frustum culling. */\n protected _frustumPlanes?: FrustumPlanes;\n /** @internal */\n public planarClassifier?: RenderPlanarClassifier;\n /** @internal */\n public drape?: RenderTextureDrape;\n /** Optional clip volume applied to all tiles in the view. */\n public readonly viewClip?: ClipVector;\n /** True if a tile and its child tiles should not be drawn simultaneously. */\n public parentsAndChildrenExclusive: boolean;\n /** @internal */\n private _appearanceProvider?: FeatureAppearanceProvider;\n /** Optional overrides for the view's hidden line settings. */\n public hiddenLineSettings?: HiddenLine.Settings;\n /** Tiles that we want to draw and that are ready to draw. May not actually be selected, e.g. if sibling tiles are not yet ready. */\n public readonly readyTiles = new Set<Tile>();\n /** Tiles whose contents should be kept in memory regardless of whether or not they are selected for display.\n * @internal\n */\n public readonly touchedTiles = new Set<Tile>();\n /** For perspective views, the view-Z of the near plane. */\n private readonly _nearFrontCenter?: Point3d;\n /** Overrides applied to the view's [ViewFlags]($common) when drawing the tiles. */\n public get viewFlagOverrides(): ViewFlagOverrides { return this.graphics.viewFlagOverrides; }\n /** If defined, replaces the view's own symbology overrides when drawing the tiles. */\n public get symbologyOverrides(): FeatureSymbology.Overrides | undefined { return this.graphics.symbologyOverrides; }\n /** If defined, tiles will be culled if they do not intersect this clip. */\n public intersectionClip?: ClipVector;\n /** If defined, a bounding range in tile tree coordinates outside of which tiles should not be selected. */\n public boundingRange?: Range3d;\n /** @internal */\n public readonly pixelSizeScaleFactor;\n /** @internal */\n public readonly animationTransformNodeId?: number;\n /** @internal */\n public readonly groupNodeId?: number;\n /** @alpha */\n public maximumScreenSpaceError;\n /** @alpha */\n public transformFromIModel?: Transform;\n\n /** Compute the size in pixels of the specified tile at the point on its bounding sphere closest to the camera. */\n public getPixelSize(tile: Tile): number {\n const sizeFromProjection = this.getPixelSizeFromProjection(tile);\n if (undefined !== sizeFromProjection)\n return sizeFromProjection;\n\n const radius = this.getTileRadius(tile); // use a sphere to test pixel size. We don't know the orientation of the image within the bounding box.\n const center = this.getTileCenter(tile);\n\n const pixelSizeAtPt = this.computePixelSizeInMetersAtClosestPoint(center, radius);\n return 0 !== pixelSizeAtPt ? this.context.adjustPixelSizeForLOD(radius / pixelSizeAtPt) : 1.0e-3;\n }\n\n /** If the tile provides corners (from an OBB) then this produces most accurate representation of the tile size */\n private getPixelSizeFromProjection(tile: Tile): number | undefined {\n const sizeProjectionCorners = tile.getSizeProjectionCorners();\n if (!sizeProjectionCorners)\n return undefined;\n\n /* For maps or global reality models we use the projected screen rectangle rather than sphere to calculate pixel size to avoid excessive tiles at horizon. */\n const tileToView = this.worldToViewMap.transform0.multiplyMatrixMatrix(Matrix4d.createTransform(this.location, scratchMatrix4d), scratchMatrix4d);\n scratchXRange.setNull();\n scratchYRange.setNull();\n\n let behindEye = false;\n for (const corner of sizeProjectionCorners) {\n const viewCorner = tileToView.multiplyPoint3d(corner, 1, scratchPoint4d);\n if (viewCorner.w < 0.0) {\n behindEye = true;\n break;\n }\n\n scratchXRange.extendX(viewCorner.x / viewCorner.w);\n scratchYRange.extendX(viewCorner.y / viewCorner.w);\n }\n if (behindEye)\n return undefined;\n\n return scratchXRange.isNull ? 1.0E-3 : this.context.adjustPixelSizeForLOD(Math.sqrt(scratchXRange.length() * scratchYRange.length()));\n }\n\n /** Compute the size in meters of one pixel at the point on the tile's bounding sphere closest to the camera. */\n public getPixelSizeInMetersAtClosestPoint(tile: Tile): number {\n const radius = this.getTileRadius(tile); // use a sphere to test pixel size. We don't know the orientation of the image within the bounding box.\n const center = this.getTileCenter(tile);\n\n const pixelSizeAtPt = this.computePixelSizeInMetersAtClosestPoint(center, radius);\n return 0 !== pixelSizeAtPt ? this.context.adjustPixelSizeForLOD(pixelSizeAtPt) : 1.0e-3;\n }\n\n /** Compute the size in meters of one pixel at the point on a sphere closest to the camera.\n * Device scaling is not applied.\n */\n public computePixelSizeInMetersAtClosestPoint(center: Point3d, radius: number): number {\n if (this.context.viewport.view.is3d() && this.context.viewport.isCameraOn && this._nearFrontCenter) {\n const toFront = Vector3d.createStartEnd(center, this._nearFrontCenter);\n const viewZ = this.context.viewport.rotation.rowZ();\n // If the sphere overlaps the near front plane just use near front point. This also handles behind eye conditions.\n if (viewZ.dotProduct(toFront) < radius) {\n center = this._nearFrontCenter;\n } else {\n // Find point on sphere closest to eye.\n const toEye = center.unitVectorTo(this.context.viewport.view.camera.eye);\n\n if (toEye) { // Only if tile is not already behind the eye.\n toEye.scaleInPlace(radius);\n center.addInPlace(toEye);\n }\n }\n }\n\n const viewPt = this.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\n return this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\n }\n\n /** Compute this size of a sphere on screen in pixels */\n public getRangePixelSize(range: Range3d): number {\n const transformedRange = this.location.multiplyRange(range, scratchRange);\n const center = transformedRange.localXYZToWorld(.5, .5, .5, scratchPoint)!;\n const radius = transformedRange.diagonal().magnitude();\n\n const viewPt = this.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\n const pixelSizeAtPt = this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\n return 0 !== pixelSizeAtPt ? radius / pixelSizeAtPt : 1.0e-3;\n }\n\n /** @internal */\n public getTileGraphics(tile: Tile) {\n return tile.produceGraphics();\n }\n\n /** The planes of the viewing frustum, used for frustum culling. */\n public get frustumPlanes(): FrustumPlanes {\n return this._frustumPlanes !== undefined ? this._frustumPlanes : this.context.frustumPlanes;\n }\n\n /** Provides conversions between [[CoordSystem.World]] and [[CoordSystem.View]]. */\n public get worldToViewMap(): Map4d {\n return this.viewingSpace.worldToViewMap;\n }\n\n private computePixelSizeScaleFactor(): number {\n // Check to see if a model display transform with non-uniform scaling is being used.\n const mat = this.context.viewport.view.modelDisplayTransformProvider?.getModelDisplayTransform(this.tree.modelId)?.transform.matrix;\n if (!mat)\n return 1;\n\n const scale = [0, 1, 2].map((x) => mat.getColumn(x).magnitude());\n if (Math.abs(scale[0] - scale[1]) <= Geometry.smallMetricDistance && Math.abs(scale[0] - scale[2]) <= Geometry.smallMetricDistance)\n return 1;\n\n // If the component with the largest scale is not the same as the component with the largest tile range use it to adjust the pixel size.\n const rangeDiag = this.tree.range.diagonal();\n let maxS = 0;\n let maxR = 0;\n if (scale[0] > scale[1])\n maxS = (scale[0] > scale[2] ? 0 : 2);\n else\n maxS = (scale[1] > scale[2] ? 1 : 2);\n\n if (rangeDiag.x > rangeDiag.y)\n maxR = (rangeDiag.x > rangeDiag.z ? 0 : 2);\n else\n maxR = (rangeDiag.y > rangeDiag.z ? 1 : 2);\n\n return maxS !== maxR ? scale[maxS] : 1;\n }\n\n /** Constructor */\n public constructor(params: TileDrawArgParams) {\n const { location, tree, context, now, viewFlagOverrides, clipVolume, parentsAndChildrenExclusive, symbologyOverrides } = params;\n this.location = location;\n this.tree = tree;\n this.context = context;\n this.now = now;\n this._appearanceProvider = params.appearanceProvider;\n this.hiddenLineSettings = params.hiddenLineSettings;\n this.animationTransformNodeId = params.animationTransformNodeId;\n this.groupNodeId = params.groupNodeId;\n this.boundingRange = params.boundingRange;\n this.maximumScreenSpaceError = params.maximumScreenSpaceError ?? 16; // 16 is Cesium's default.\n this.transformFromIModel = params.transformFromIModel;\n\n // Do not cull tiles based on clip volume if tiles outside clip are supposed to be drawn but in a different color.\n if (undefined !== clipVolume && !context.viewport.view.displayStyle.settings.clipStyle.outsideColor)\n this.clipVolume = clipVolume;\n\n this.graphics.setViewFlagOverrides(viewFlagOverrides);\n this.graphics.symbologyOverrides = symbologyOverrides;\n this.graphics.animationId = tree.modelId;\n\n this.viewingSpace = context.viewingSpace;\n this._frustumPlanes = FrustumPlanes.fromFrustum(this.viewingSpace.getFrustum());\n\n this.planarClassifier = context.getPlanarClassifierForModel(tree.modelId);\n this.drape = context.getTextureDrapeForModel(tree.modelId);\n\n // NB: If the tile tree has its own clip, do not also apply the view's clip.\n if (context.viewFlags.clipVolume && false !== viewFlagOverrides.clipVolume && undefined === clipVolume) {\n const outsideClipColor = context.viewport.displayStyle.settings.clipStyle.outsideColor;\n this.viewClip = undefined === outsideClipColor ? context.viewport.view.getViewClip() : undefined;\n }\n\n this.parentsAndChildrenExclusive = parentsAndChildrenExclusive;\n if (context.viewport.isCameraOn)\n this._nearFrontCenter = context.viewport.getFrustum(CoordSystem.World).frontCenter;\n\n this.pixelSizeScaleFactor = this.computePixelSizeScaleFactor();\n }\n\n /** A multiplier applied to a [[Tile]]'s `maximumSize` property to adjust level of detail.\n * @see [[Viewport.tileSizeModifier]].\n * @public\n */\n public get tileSizeModifier(): number { return this.context.viewport.tileSizeModifier; }\n\n /** @internal */\n public getTileCenter(tile: Tile): Point3d { return this.location.multiplyPoint3d(tile.center); }\n\n /** @internal */\n public getTileRadius(tile: Tile): number {\n let range: Range3d = tile.range.clone(scratchRange);\n if (tile.tree.is2d) {\n // 2d tiles have a fixed Z range of [-1, 1]. Sometimes (e.g., hypermodeling) we draw them within a 3d view. Prevent Z from artificially expanding the radius.\n range.low.z = range.high.z = 0;\n }\n\n range = this.location.multiplyRange(range, range);\n return 0.5 * range.low.distance(range.high);\n }\n\n /** @internal */\n public get clip(): ClipVector | undefined {\n return undefined !== this.clipVolume ? this.clipVolume.clipVector : undefined;\n }\n\n /** Add a provider to supplement or override the symbology overrides for the view.\n * @note If a provider already exists, the new provider will be chained such that it sees the base overrides\n * after they have potentially been modified by the existing provider.\n * @public\n */\n public addAppearanceProvider(provider: FeatureAppearanceProvider): void {\n this._appearanceProvider = this._appearanceProvider ? FeatureAppearanceProvider.chain(this._appearanceProvider, provider) : provider;\n }\n\n /** Optionally customizes aspects of the view's [[FeatureSymbology.Overrides]]. */\n public get appearanceProvider(): FeatureAppearanceProvider | undefined {\n return this._appearanceProvider;\n }\n\n /** @internal */\n public produceGraphics(): RenderGraphic | undefined {\n return this._produceGraphicBranch(this.graphics);\n }\n /** @internal */\n public get secondaryClassifiers(): Map<number, RenderPlanarClassifier>| undefined {\n return undefined;\n }\n\n /** @internal */\n private _produceGraphicBranch(graphics: GraphicBranch): RenderGraphic | undefined {\n if (graphics.isEmpty)\n return undefined;\n\n const opts: GraphicBranchOptions = {\n iModel: this.tree.iModel,\n transformFromIModel: this.transformFromIModel,\n clipVolume: this.clipVolume,\n classifierOrDrape: this.planarClassifier ?? this.drape,\n appearanceProvider: this.appearanceProvider,\n hline: this.hiddenLineSettings,\n secondaryClassifiers: this.secondaryClassifiers,\n };\n\n let graphic = this.context.createGraphicBranch(graphics, this.location, opts);\n if (undefined !== this.animationTransformNodeId)\n graphic = this.context.renderSystem.createAnimationTransformNode(graphic, this.animationTransformNodeId);\n\n if (undefined !== this.groupNodeId) {\n const branch = new GraphicBranch();\n branch.add(graphic);\n branch.groupNodeId = this.groupNodeId;\n graphic = this.context.createGraphicBranch(branch, Transform.identity);\n }\n\n return graphic;\n }\n\n /** Output graphics for all accumulated tiles. */\n public drawGraphics(): void {\n const graphics = this.produceGraphics();\n if (undefined !== graphics)\n this.context.outputGraphic(graphics);\n }\n\n /** Output graphics of the specified type for all accumulated tiles. */\n public drawGraphicsWithType(graphicType: TileGraphicType, graphics: GraphicBranch): void {\n const branch = this._produceGraphicBranch(graphics);\n if (undefined !== branch)\n this.context.withGraphicType(graphicType, () => this.context.outputGraphic(branch));\n }\n\n /** Indicate that graphics for the specified tile are desired but not yet available. Subsequently a request will be enqueued to load the tile's graphics. */\n public insertMissing(tile: Tile): void {\n this.context.insertMissingTile(tile);\n }\n\n /** Indicate that some requested child tiles are not yet loaded. */\n public markChildrenLoading(): void {\n this.context.markChildrenLoading();\n }\n\n /** Indicate that the specified tile is being used for some purpose by the [[SceneContext]]'s [[Viewport]]. Typically \"used\" means \"displayed\", but the exact meaning is up to the [[TileTree]] - for example, \"used\" might also mean that the tile's children are being used. A tile that is \"in use\" by any [[Viewport]] will not be discarded. */\n public markUsed(tile: Tile): void {\n tile.usageMarker.mark(this.context.viewport, this.now);\n }\n\n /** Indicate that the specified tile should be displayed and that its graphics are ready to be displayed. The number of \"ready\" tiles is used in conjunction with the number of \"missing\" tiles to convey to the user how complete the current view is.\n * @see [[insertMissing]]\n */\n public markReady(tile: Tile): void {\n this.readyTiles.add(tile);\n }\n\n /** Invoked by [[TileTree.selectTiles]]. This exists chiefly for [[SolarShadowMap]].\n * @internal\n */\n public processSelectedTiles(_tiles: Tile[]): void { }\n\n /* @internal */\n public get maxRealityTreeSelectionCount(): number | undefined { return undefined; }\n}\n"]}
1
+ {"version":3,"file":"TileDrawArgs.js","sourceRoot":"","sources":["../../../src/tile/TileDrawArgs.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAc,QAAQ,EAAS,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAiC,MAAM,oBAAoB,CAAC;AAE7G,OAAO,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AAM9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,MAAM,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;AACnC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACtC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACxC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;AAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;AAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;AA8ClD;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACvB,0FAA0F;IAC1E,QAAQ,CAAY;IACpC,iCAAiC;IACjB,IAAI,CAAW;IAC/B,iDAAiD;IAC1C,UAAU,CAA+B;IAChD,mIAAmI;IACnH,OAAO,CAAe;IACtC,mCAAmC;IAC5B,YAAY,CAAe;IAClC,2CAA2C;IAC3B,QAAQ,GAAkB,IAAI,aAAa,EAAE,CAAC;IAC9D,gBAAgB;IACA,GAAG,CAAc;IACjC,mEAAmE;IACzD,cAAc,CAAiB;IACzC,gBAAgB;IACT,gBAAgB,CAA0B;IACjD,gBAAgB;IACT,KAAK,CAAsB;IAClC,6DAA6D;IAC7C,QAAQ,CAAc;IACtC,6EAA6E;IACtE,2BAA2B,CAAU;IAC5C,gBAAgB;IACR,mBAAmB,CAA6B;IACxD,8DAA8D;IACvD,kBAAkB,CAAuB;IAChD,oIAAoI;IACpH,UAAU,GAAG,IAAI,GAAG,EAAQ,CAAC;IAC7C;;OAEG;IACa,YAAY,GAAG,IAAI,GAAG,EAAQ,CAAC;IAC/C,2DAA2D;IAC1C,gBAAgB,CAAW;IAC5C,mFAAmF;IACnF,IAAW,iBAAiB,KAAwB,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7F,sFAAsF;IACtF,IAAW,kBAAkB,KAA6C,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpH,2EAA2E;IACpE,gBAAgB,CAAc;IACrC,2GAA2G;IACpG,aAAa,CAAW;IAC/B,gBAAgB;IACA,oBAAoB,CAAC;IACrC,gBAAgB;IACA,wBAAwB,CAAU;IAClD,gBAAgB;IACA,WAAW,CAAU;IACrC,aAAa;IACN,uBAAuB,CAAC;IAC/B,aAAa;IACN,mBAAmB,CAAa;IAEvC,kHAAkH;IAC3G,YAAY,CAAC,IAAU;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,SAAS,KAAK,kBAAkB;YAClC,OAAO,kBAAkB,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,uGAAuG;QAChJ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,aAAa,GAAG,IAAI,CAAC,sCAAsC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClF,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnG,CAAC;IAED,kHAAkH;IAC1G,0BAA0B,CAAC,IAAU;QAC3C,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9D,IAAI,CAAC,qBAAqB;YACxB,OAAO,SAAS,CAAC;QAEnB,8JAA8J;QAC9J,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;QAClJ,aAAa,CAAC,OAAO,EAAE,CAAC;QACxB,aAAa,CAAC,OAAO,EAAE,CAAC;QAExB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YACzE,IAAI,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;gBACvB,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YAED,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACnD,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,SAAS;YACX,OAAO,SAAS,CAAC;QAEnB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxI,CAAC;IAED,gHAAgH;IACzG,kCAAkC,CAAC,IAAU;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,uGAAuG;QAChJ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,aAAa,GAAG,IAAI,CAAC,sCAAsC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClF,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1F,CAAC;IAED;;OAEG;IACI,sCAAsC,CAAC,MAAe,EAAE,MAAc;QAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnG,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpD,mHAAmH;YACnH,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;gBACvC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACR,uCAAuC;gBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEzE,IAAI,KAAK,EAAE,CAAC,CAAE,8CAA8C;oBAC1D,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBAC3B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9J,CAAC;IAED,wDAAwD;IACjD,iBAAiB,CAAC,KAAc;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,gBAAgB,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,CAAE,CAAC;QAC3E,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QAEvD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3K,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,CAAC;IAED,gBAAgB;IACT,eAAe,CAAC,IAAU;QAC/B,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAED,mEAAmE;IACnE,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9F,CAAC;IAED,mFAAmF;IACnF,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC1C,CAAC;IAEO,2BAA2B;QACjC,oFAAoF;QACpF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,EAAE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC;QACpI,IAAI,CAAC,GAAG;YACN,OAAO,CAAC,CAAC;QAEX,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,mBAAmB;YAChI,OAAO,CAAC,CAAC;QAEX,wIAAwI;QACxI,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACrB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAErC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YAC3B,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAE3C,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,kBAAkB;IAClB,YAAmB,MAAyB;QAC1C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,UAAU,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;QAChI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;QAChE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,0BAA0B;QAC/F,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEtD,kHAAkH;QAClH,IAAI,SAAS,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY;YACjG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE/B,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QAEzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;QAEhF,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3D,4EAA4E;QAC5E,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,KAAK,KAAK,iBAAiB,CAAC,UAAU,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YACvG,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC;YACvF,IAAI,CAAC,QAAQ,GAAG,SAAS,KAAK,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,CAAC;QAED,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU;YAC7B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QAErF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,IAAW,gBAAgB,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAExF,gBAAgB;IACT,aAAa,CAAC,IAAU,IAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEhG,gBAAgB;IACT,aAAa,CAAC,IAAU;QAC7B,IAAI,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,6JAA6J;YAC7J,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,gBAAgB;IAChB,IAAW,IAAI;QACb,OAAO,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IAED;;;;OAIG;IACI,qBAAqB,CAAC,QAAmC;QAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvI,CAAC;IAED,kFAAkF;IAClF,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,gBAAgB;IACT,eAAe;QACpB,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IACD,gBAAgB;IAChB,IAAW,oBAAoB;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gBAAgB;IACR,qBAAqB,CAAC,QAAuB;QACnD,IAAI,QAAQ,CAAC,OAAO;YAClB,OAAO,SAAS,CAAC;QAEnB,MAAM,IAAI,GAAyB;YACjC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK;YACtD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,KAAK,EAAE,IAAI,CAAC,kBAAkB;YAC9B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;SAChD,CAAC;QAEF,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9E,IAAI,SAAS,KAAK,IAAI,CAAC,wBAAwB;YAC7C,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAE3G,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iDAAiD;IAC1C,YAAY;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,SAAS,KAAK,QAAQ;YACxB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,uEAAuE;IAChE,oBAAoB,CAAC,WAA4B,EAAE,QAAuB;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,MAAM;YACtB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,4JAA4J;IACrJ,aAAa,CAAC,IAAU;QAC7B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,mEAAmE;IAC5D,mBAAmB;QACxB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IACrC,CAAC;IAED,oVAAoV;IAC7U,QAAQ,CAAC,IAAU;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,IAAU;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,MAAc,IAAU,CAAC;IAErD,eAAe;IACf,IAAW,4BAA4B,KAAyB,OAAO,SAAS,CAAC,CAAC,CAAC;IAEnF,eAAe;IACf,IAAW,+BAA+B,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;CACvE","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { BeTimePoint } from \"@itwin/core-bentley\";\nimport { ClipVector, Geometry, Map4d, Matrix4d, Point3d, Point4d, Range1d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { FeatureAppearanceProvider, FrustumPlanes, HiddenLine, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { FeatureSymbology } from \"../render/FeatureSymbology\";\nimport { GraphicBranch, GraphicBranchOptions } from \"../render/GraphicBranch\";\nimport { RenderClipVolume } from \"../render/RenderClipVolume\";\nimport { RenderGraphic } from \"../render/RenderGraphic\";\nimport { RenderPlanarClassifier } from \"../internal/render/RenderPlanarClassifier\";\nimport { SceneContext } from \"../ViewContext\";\nimport { ViewingSpace } from \"../ViewingSpace\";\nimport { CoordSystem } from \"../CoordSystem\";\nimport { Tile, TileGraphicType, TileTree } from \"./internal\";\nimport { RenderTextureDrape } from \"../internal/render/RenderTextureDrape\";\n\nconst scratchRange = new Range3d();\nconst scratchPoint = Point3d.create();\nconst scratchPoint4d = Point4d.create();\nconst scratchXRange = Range1d.createNull();\nconst scratchYRange = Range1d.createNull();\nconst scratchMatrix4d = Matrix4d.createIdentity();\n\n/** Parameters used to construct [[TileDrawArgs]].\n * @public\n * @extensions\n */\nexport interface TileDrawArgParams {\n /** Context for the scene into which the tiles are to be rendered. */\n context: SceneContext;\n /** Transform to be applied when drawing the tiles. */\n location: Transform;\n /** The tile tree from which to obtain tiles. */\n tree: TileTree;\n /** The time at which these args were created. */\n now: BeTimePoint;\n /** Overrides to apply to the view's [ViewFlags]($common) when drawing the tiles. */\n viewFlagOverrides: ViewFlagOverrides;\n /** Clip volume used to clip the tiles. */\n clipVolume?: RenderClipVolume;\n /** True if a tile and its child tiles should not be drawn simultaneously. */\n parentsAndChildrenExclusive: boolean;\n /** Symbology overrides to apply to the tiles. */\n symbologyOverrides: FeatureSymbology.Overrides | undefined;\n /** Optionally customizes the view's symbology overrides for the tiles. */\n appearanceProvider?: FeatureAppearanceProvider;\n /** Optionally overrides the view's hidden line settings. */\n hiddenLineSettings?: HiddenLine.Settings;\n /** If defined, tiles should be culled if they do not intersect this clip. */\n intersectionClip?: ClipVector;\n /** If defined, the Id of a node in the scene's [RenderSchedule.Script]($common) that applies a transform to the graphics;\n * or \"0xffffffff\" for any node that does *not* apply a transform.\n * @internal\n */\n animationTransformNodeId?: number;\n /** See [[GraphicBranch.groupNodeId]].\n * @internal\n */\n groupNodeId?: number;\n /** If defined, a bounding range in tile tree coordinates outside of which tiles should not be selected. */\n boundingRange?: Range3d;\n /** @alpha */\n maximumScreenSpaceError?: number;\n /** @alpha */\n transformFromIModel?: Transform;\n}\n\n/**\n * Provides context used when selecting and drawing [[Tile]]s.\n * @see [[TileTree.selectTiles]]\n * @see [[TileTree.draw]]\n * @public\n * @extensions\n */\nexport class TileDrawArgs {\n /** Transform to the location in iModel coordinates at which the tiles are to be drawn. */\n public readonly location: Transform;\n /** The tile tree being drawn. */\n public readonly tree: TileTree;\n /** Optional clip volume applied to the tiles. */\n public clipVolume: RenderClipVolume | undefined;\n /** The context in which the tiles will be drawn, exposing, e.g., the [[Viewport]] and accepting [[RenderGraphic]]s to be drawn. */\n public readonly context: SceneContext;\n /** Describes the viewed volume. */\n public viewingSpace: ViewingSpace;\n /** Holds the tile graphics to be drawn. */\n public readonly graphics: GraphicBranch = new GraphicBranch();\n /** @internal */\n public readonly now: BeTimePoint;\n /** The planes of the viewing frustum, used for frustum culling. */\n protected _frustumPlanes?: FrustumPlanes;\n /** @internal */\n public planarClassifier?: RenderPlanarClassifier;\n /** @internal */\n public drape?: RenderTextureDrape;\n /** Optional clip volume applied to all tiles in the view. */\n public readonly viewClip?: ClipVector;\n /** True if a tile and its child tiles should not be drawn simultaneously. */\n public parentsAndChildrenExclusive: boolean;\n /** @internal */\n private _appearanceProvider?: FeatureAppearanceProvider;\n /** Optional overrides for the view's hidden line settings. */\n public hiddenLineSettings?: HiddenLine.Settings;\n /** Tiles that we want to draw and that are ready to draw. May not actually be selected, e.g. if sibling tiles are not yet ready. */\n public readonly readyTiles = new Set<Tile>();\n /** Tiles whose contents should be kept in memory regardless of whether or not they are selected for display.\n * @internal\n */\n public readonly touchedTiles = new Set<Tile>();\n /** For perspective views, the view-Z of the near plane. */\n private readonly _nearFrontCenter?: Point3d;\n /** Overrides applied to the view's [ViewFlags]($common) when drawing the tiles. */\n public get viewFlagOverrides(): ViewFlagOverrides { return this.graphics.viewFlagOverrides; }\n /** If defined, replaces the view's own symbology overrides when drawing the tiles. */\n public get symbologyOverrides(): FeatureSymbology.Overrides | undefined { return this.graphics.symbologyOverrides; }\n /** If defined, tiles will be culled if they do not intersect this clip. */\n public intersectionClip?: ClipVector;\n /** If defined, a bounding range in tile tree coordinates outside of which tiles should not be selected. */\n public boundingRange?: Range3d;\n /** @internal */\n public readonly pixelSizeScaleFactor;\n /** @internal */\n public readonly animationTransformNodeId?: number;\n /** @internal */\n public readonly groupNodeId?: number;\n /** @alpha */\n public maximumScreenSpaceError;\n /** @alpha */\n public transformFromIModel?: Transform;\n\n /** Compute the size in pixels of the specified tile at the point on its bounding sphere closest to the camera. */\n public getPixelSize(tile: Tile): number {\n const sizeFromProjection = this.getPixelSizeFromProjection(tile);\n if (undefined !== sizeFromProjection)\n return sizeFromProjection;\n\n const radius = this.getTileRadius(tile); // use a sphere to test pixel size. We don't know the orientation of the image within the bounding box.\n const center = this.getTileCenter(tile);\n\n const pixelSizeAtPt = this.computePixelSizeInMetersAtClosestPoint(center, radius);\n return 0 !== pixelSizeAtPt ? this.context.adjustPixelSizeForLOD(radius / pixelSizeAtPt) : 1.0e-3;\n }\n\n /** If the tile provides corners (from an OBB) then this produces most accurate representation of the tile size */\n private getPixelSizeFromProjection(tile: Tile): number | undefined {\n const sizeProjectionCorners = tile.getSizeProjectionCorners();\n if (!sizeProjectionCorners)\n return undefined;\n\n /* For maps or global reality models we use the projected screen rectangle rather than sphere to calculate pixel size to avoid excessive tiles at horizon. */\n const tileToView = this.worldToViewMap.transform0.multiplyMatrixMatrix(Matrix4d.createTransform(this.location, scratchMatrix4d), scratchMatrix4d);\n scratchXRange.setNull();\n scratchYRange.setNull();\n\n let behindEye = false;\n for (const corner of sizeProjectionCorners) {\n const viewCorner = tileToView.multiplyPoint3d(corner, 1, scratchPoint4d);\n if (viewCorner.w < 0.0) {\n behindEye = true;\n break;\n }\n\n scratchXRange.extendX(viewCorner.x / viewCorner.w);\n scratchYRange.extendX(viewCorner.y / viewCorner.w);\n }\n if (behindEye)\n return undefined;\n\n return scratchXRange.isNull ? 1.0E-3 : this.context.adjustPixelSizeForLOD(Math.sqrt(scratchXRange.length() * scratchYRange.length()));\n }\n\n /** Compute the size in meters of one pixel at the point on the tile's bounding sphere closest to the camera. */\n public getPixelSizeInMetersAtClosestPoint(tile: Tile): number {\n const radius = this.getTileRadius(tile); // use a sphere to test pixel size. We don't know the orientation of the image within the bounding box.\n const center = this.getTileCenter(tile);\n\n const pixelSizeAtPt = this.computePixelSizeInMetersAtClosestPoint(center, radius);\n return 0 !== pixelSizeAtPt ? this.context.adjustPixelSizeForLOD(pixelSizeAtPt) : 1.0e-3;\n }\n\n /** Compute the size in meters of one pixel at the point on a sphere closest to the camera.\n * Device scaling is not applied.\n */\n public computePixelSizeInMetersAtClosestPoint(center: Point3d, radius: number): number {\n if (this.context.viewport.view.is3d() && this.context.viewport.isCameraOn && this._nearFrontCenter) {\n const toFront = Vector3d.createStartEnd(center, this._nearFrontCenter);\n const viewZ = this.context.viewport.rotation.rowZ();\n // If the sphere overlaps the near front plane just use near front point. This also handles behind eye conditions.\n if (viewZ.dotProduct(toFront) < radius) {\n center = this._nearFrontCenter;\n } else {\n // Find point on sphere closest to eye.\n const toEye = center.unitVectorTo(this.context.viewport.view.camera.eye);\n\n if (toEye) { // Only if tile is not already behind the eye.\n toEye.scaleInPlace(radius);\n center.addInPlace(toEye);\n }\n }\n }\n\n const viewPt = this.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\n return this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\n }\n\n /** Compute this size of a sphere on screen in pixels */\n public getRangePixelSize(range: Range3d): number {\n const transformedRange = this.location.multiplyRange(range, scratchRange);\n const center = transformedRange.localXYZToWorld(.5, .5, .5, scratchPoint)!;\n const radius = transformedRange.diagonal().magnitude();\n\n const viewPt = this.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\n const pixelSizeAtPt = this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(this.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\n return 0 !== pixelSizeAtPt ? radius / pixelSizeAtPt : 1.0e-3;\n }\n\n /** @internal */\n public getTileGraphics(tile: Tile) {\n return tile.produceGraphics();\n }\n\n /** The planes of the viewing frustum, used for frustum culling. */\n public get frustumPlanes(): FrustumPlanes {\n return this._frustumPlanes !== undefined ? this._frustumPlanes : this.context.frustumPlanes;\n }\n\n /** Provides conversions between [[CoordSystem.World]] and [[CoordSystem.View]]. */\n public get worldToViewMap(): Map4d {\n return this.viewingSpace.worldToViewMap;\n }\n\n private computePixelSizeScaleFactor(): number {\n // Check to see if a model display transform with non-uniform scaling is being used.\n const mat = this.context.viewport.view.modelDisplayTransformProvider?.getModelDisplayTransform(this.tree.modelId)?.transform.matrix;\n if (!mat)\n return 1;\n\n const scale = [0, 1, 2].map((x) => mat.getColumn(x).magnitude());\n if (Math.abs(scale[0] - scale[1]) <= Geometry.smallMetricDistance && Math.abs(scale[0] - scale[2]) <= Geometry.smallMetricDistance)\n return 1;\n\n // If the component with the largest scale is not the same as the component with the largest tile range use it to adjust the pixel size.\n const rangeDiag = this.tree.range.diagonal();\n let maxS = 0;\n let maxR = 0;\n if (scale[0] > scale[1])\n maxS = (scale[0] > scale[2] ? 0 : 2);\n else\n maxS = (scale[1] > scale[2] ? 1 : 2);\n\n if (rangeDiag.x > rangeDiag.y)\n maxR = (rangeDiag.x > rangeDiag.z ? 0 : 2);\n else\n maxR = (rangeDiag.y > rangeDiag.z ? 1 : 2);\n\n return maxS !== maxR ? scale[maxS] : 1;\n }\n\n /** Constructor */\n public constructor(params: TileDrawArgParams) {\n const { location, tree, context, now, viewFlagOverrides, clipVolume, parentsAndChildrenExclusive, symbologyOverrides } = params;\n this.location = location;\n this.tree = tree;\n this.context = context;\n this.now = now;\n this._appearanceProvider = params.appearanceProvider;\n this.hiddenLineSettings = params.hiddenLineSettings;\n this.animationTransformNodeId = params.animationTransformNodeId;\n this.groupNodeId = params.groupNodeId;\n this.boundingRange = params.boundingRange;\n this.maximumScreenSpaceError = params.maximumScreenSpaceError ?? 16; // 16 is Cesium's default.\n this.transformFromIModel = params.transformFromIModel;\n\n // Do not cull tiles based on clip volume if tiles outside clip are supposed to be drawn but in a different color.\n if (undefined !== clipVolume && !context.viewport.view.displayStyle.settings.clipStyle.outsideColor)\n this.clipVolume = clipVolume;\n\n this.graphics.setViewFlagOverrides(viewFlagOverrides);\n this.graphics.symbologyOverrides = symbologyOverrides;\n this.graphics.animationId = tree.modelId;\n\n this.viewingSpace = context.viewingSpace;\n this._frustumPlanes = FrustumPlanes.fromFrustum(this.viewingSpace.getFrustum());\n\n this.planarClassifier = context.getPlanarClassifierForModel(tree.modelId);\n this.drape = context.getTextureDrapeForModel(tree.modelId);\n\n // NB: If the tile tree has its own clip, do not also apply the view's clip.\n if (context.viewFlags.clipVolume && false !== viewFlagOverrides.clipVolume && undefined === clipVolume) {\n const outsideClipColor = context.viewport.displayStyle.settings.clipStyle.outsideColor;\n this.viewClip = undefined === outsideClipColor ? context.viewport.view.getViewClip() : undefined;\n }\n\n this.parentsAndChildrenExclusive = parentsAndChildrenExclusive;\n if (context.viewport.isCameraOn)\n this._nearFrontCenter = context.viewport.getFrustum(CoordSystem.World).frontCenter;\n\n this.pixelSizeScaleFactor = this.computePixelSizeScaleFactor();\n }\n\n /** A multiplier applied to a [[Tile]]'s `maximumSize` property to adjust level of detail.\n * @see [[Viewport.tileSizeModifier]].\n * @public\n */\n public get tileSizeModifier(): number { return this.context.viewport.tileSizeModifier; }\n\n /** @internal */\n public getTileCenter(tile: Tile): Point3d { return this.location.multiplyPoint3d(tile.center); }\n\n /** @internal */\n public getTileRadius(tile: Tile): number {\n let range: Range3d = tile.range.clone(scratchRange);\n if (tile.tree.is2d) {\n // 2d tiles have a fixed Z range of [-1, 1]. Sometimes (e.g., hypermodeling) we draw them within a 3d view. Prevent Z from artificially expanding the radius.\n range.low.z = range.high.z = 0;\n }\n\n range = this.location.multiplyRange(range, range);\n return 0.5 * range.low.distance(range.high);\n }\n\n /** @internal */\n public get clip(): ClipVector | undefined {\n return undefined !== this.clipVolume ? this.clipVolume.clipVector : undefined;\n }\n\n /** Add a provider to supplement or override the symbology overrides for the view.\n * @note If a provider already exists, the new provider will be chained such that it sees the base overrides\n * after they have potentially been modified by the existing provider.\n * @public\n */\n public addAppearanceProvider(provider: FeatureAppearanceProvider): void {\n this._appearanceProvider = this._appearanceProvider ? FeatureAppearanceProvider.chain(this._appearanceProvider, provider) : provider;\n }\n\n /** Optionally customizes aspects of the view's [[FeatureSymbology.Overrides]]. */\n public get appearanceProvider(): FeatureAppearanceProvider | undefined {\n return this._appearanceProvider;\n }\n\n /** @internal */\n public produceGraphics(): RenderGraphic | undefined {\n return this._produceGraphicBranch(this.graphics);\n }\n /** @internal */\n public get secondaryClassifiers(): Map<number, RenderPlanarClassifier>| undefined {\n return undefined;\n }\n\n /** @internal */\n private _produceGraphicBranch(graphics: GraphicBranch): RenderGraphic | undefined {\n if (graphics.isEmpty)\n return undefined;\n\n const opts: GraphicBranchOptions = {\n iModel: this.tree.iModel,\n transformFromIModel: this.transformFromIModel,\n clipVolume: this.clipVolume,\n classifierOrDrape: this.planarClassifier ?? this.drape,\n appearanceProvider: this.appearanceProvider,\n hline: this.hiddenLineSettings,\n secondaryClassifiers: this.secondaryClassifiers,\n };\n\n let graphic = this.context.createGraphicBranch(graphics, this.location, opts);\n if (undefined !== this.animationTransformNodeId)\n graphic = this.context.renderSystem.createAnimationTransformNode(graphic, this.animationTransformNodeId);\n\n if (undefined !== this.groupNodeId) {\n const branch = new GraphicBranch();\n branch.add(graphic);\n branch.groupNodeId = this.groupNodeId;\n graphic = this.context.createGraphicBranch(branch, Transform.identity);\n }\n\n return graphic;\n }\n\n /** Output graphics for all accumulated tiles. */\n public drawGraphics(): void {\n const graphics = this.produceGraphics();\n if (undefined !== graphics)\n this.context.outputGraphic(graphics);\n }\n\n /** Output graphics of the specified type for all accumulated tiles. */\n public drawGraphicsWithType(graphicType: TileGraphicType, graphics: GraphicBranch): void {\n const branch = this._produceGraphicBranch(graphics);\n if (undefined !== branch)\n this.context.withGraphicType(graphicType, () => this.context.outputGraphic(branch));\n }\n\n /** Indicate that graphics for the specified tile are desired but not yet available. Subsequently a request will be enqueued to load the tile's graphics. */\n public insertMissing(tile: Tile): void {\n this.context.insertMissingTile(tile);\n }\n\n /** Indicate that some requested child tiles are not yet loaded. */\n public markChildrenLoading(): void {\n this.context.markChildrenLoading();\n }\n\n /** Indicate that the specified tile is being used for some purpose by the [[SceneContext]]'s [[Viewport]]. Typically \"used\" means \"displayed\", but the exact meaning is up to the [[TileTree]] - for example, \"used\" might also mean that the tile's children are being used. A tile that is \"in use\" by any [[Viewport]] will not be discarded. */\n public markUsed(tile: Tile): void {\n tile.usageMarker.mark(this.context.viewport, this.now);\n }\n\n /** Indicate that the specified tile should be displayed and that its graphics are ready to be displayed. The number of \"ready\" tiles is used in conjunction with the number of \"missing\" tiles to convey to the user how complete the current view is.\n * @see [[insertMissing]]\n */\n public markReady(tile: Tile): void {\n this.readyTiles.add(tile);\n }\n\n /** Invoked by [[TileTree.selectTiles]]. This exists chiefly for [[SolarShadowMap]].\n * @internal\n */\n public processSelectedTiles(_tiles: Tile[]): void { }\n\n /* @internal */\n public get maxRealityTreeSelectionCount(): number | undefined { return undefined; }\n\n /* @internal */\n public get shouldCollectClassifierGraphics(): boolean { return true; }\n}\n"]}