@itwin/editor-frontend 3.5.0-dev.19 → 3.5.0-dev.21

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 (80) hide show
  1. package/lib/cjs/CreateElementTool.d.ts +100 -100
  2. package/lib/cjs/CreateElementTool.js +327 -327
  3. package/lib/cjs/CreateElementTool.js.map +1 -1
  4. package/lib/cjs/DeleteElementsTool.d.ts +15 -15
  5. package/lib/cjs/DeleteElementsTool.js +40 -40
  6. package/lib/cjs/DeleteElementsTool.js.map +1 -1
  7. package/lib/cjs/EditTool.d.ts +37 -37
  8. package/lib/cjs/EditTool.js +135 -135
  9. package/lib/cjs/EditTool.js.map +1 -1
  10. package/lib/cjs/ElementGeometryTool.d.ts +148 -148
  11. package/lib/cjs/ElementGeometryTool.js +711 -711
  12. package/lib/cjs/ElementGeometryTool.js.map +1 -1
  13. package/lib/cjs/ModifyCurveTools.d.ts +118 -118
  14. package/lib/cjs/ModifyCurveTools.js +668 -668
  15. package/lib/cjs/ModifyCurveTools.js.map +1 -1
  16. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.d.ts +137 -137
  17. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js +824 -824
  18. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  19. package/lib/cjs/ProjectLocation/ProjectGeolocation.d.ts +135 -135
  20. package/lib/cjs/ProjectLocation/ProjectGeolocation.js +532 -532
  21. package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
  22. package/lib/cjs/SketchTools.d.ts +306 -306
  23. package/lib/cjs/SketchTools.js +1707 -1707
  24. package/lib/cjs/SketchTools.js.map +1 -1
  25. package/lib/cjs/SolidModelingTools.d.ts +380 -380
  26. package/lib/cjs/SolidModelingTools.js +1461 -1461
  27. package/lib/cjs/SolidModelingTools.js.map +1 -1
  28. package/lib/cjs/SolidPrimitiveTools.d.ts +254 -254
  29. package/lib/cjs/SolidPrimitiveTools.js +1095 -1095
  30. package/lib/cjs/SolidPrimitiveTools.js.map +1 -1
  31. package/lib/cjs/TransformElementsTool.d.ts +166 -166
  32. package/lib/cjs/TransformElementsTool.js +654 -654
  33. package/lib/cjs/TransformElementsTool.js.map +1 -1
  34. package/lib/cjs/UndoRedoTool.d.ts +16 -16
  35. package/lib/cjs/UndoRedoTool.js +42 -42
  36. package/lib/cjs/UndoRedoTool.js.map +1 -1
  37. package/lib/cjs/editor-frontend.d.ts +15 -15
  38. package/lib/cjs/editor-frontend.js +31 -31
  39. package/lib/cjs/editor-frontend.js.map +1 -1
  40. package/lib/esm/CreateElementTool.d.ts +100 -100
  41. package/lib/esm/CreateElementTool.js +319 -319
  42. package/lib/esm/CreateElementTool.js.map +1 -1
  43. package/lib/esm/DeleteElementsTool.d.ts +15 -15
  44. package/lib/esm/DeleteElementsTool.js +36 -36
  45. package/lib/esm/DeleteElementsTool.js.map +1 -1
  46. package/lib/esm/EditTool.d.ts +37 -37
  47. package/lib/esm/EditTool.js +131 -131
  48. package/lib/esm/EditTool.js.map +1 -1
  49. package/lib/esm/ElementGeometryTool.d.ts +148 -148
  50. package/lib/esm/ElementGeometryTool.js +703 -703
  51. package/lib/esm/ElementGeometryTool.js.map +1 -1
  52. package/lib/esm/ModifyCurveTools.d.ts +118 -118
  53. package/lib/esm/ModifyCurveTools.js +660 -660
  54. package/lib/esm/ModifyCurveTools.js.map +1 -1
  55. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.d.ts +137 -137
  56. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js +816 -816
  57. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  58. package/lib/esm/ProjectLocation/ProjectGeolocation.d.ts +135 -135
  59. package/lib/esm/ProjectLocation/ProjectGeolocation.js +526 -526
  60. package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
  61. package/lib/esm/SketchTools.d.ts +306 -306
  62. package/lib/esm/SketchTools.js +1697 -1697
  63. package/lib/esm/SketchTools.js.map +1 -1
  64. package/lib/esm/SolidModelingTools.d.ts +380 -380
  65. package/lib/esm/SolidModelingTools.js +1436 -1436
  66. package/lib/esm/SolidModelingTools.js.map +1 -1
  67. package/lib/esm/SolidPrimitiveTools.d.ts +254 -254
  68. package/lib/esm/SolidPrimitiveTools.js +1086 -1086
  69. package/lib/esm/SolidPrimitiveTools.js.map +1 -1
  70. package/lib/esm/TransformElementsTool.d.ts +166 -166
  71. package/lib/esm/TransformElementsTool.js +646 -646
  72. package/lib/esm/TransformElementsTool.js.map +1 -1
  73. package/lib/esm/UndoRedoTool.d.ts +16 -16
  74. package/lib/esm/UndoRedoTool.js +36 -36
  75. package/lib/esm/UndoRedoTool.js.map +1 -1
  76. package/lib/esm/editor-frontend.d.ts +15 -15
  77. package/lib/esm/editor-frontend.js +19 -19
  78. package/lib/esm/editor-frontend.js.map +1 -1
  79. package/lib/public/locales/en/Editor.json +448 -448
  80. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"SolidPrimitiveTools.js","sourceRoot":"","sources":["../../src/SolidPrimitiveTools.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAmD;AACnD,wDAAmN;AACnN,oDAA8K;AAC9K,wDAA4M;AAC5M,wDAAwF;AACxF,2DAAoE;AACpE,yCAAuC;AACvC,0DAAsH;AAEtH,0EAA0E;AAC1E,MAAsB,kBAAmB,SAAQ,iDAA6B;IAA9E;;QACqB,aAAQ,GAAc,EAAE,CAAC;IA+D9C,CAAC;IA1DW,SAAS,CAAC,EAAY,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAwB,EAAE,oBAA6B,IAAa,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,oBAAoB,CAAC,IAAI,SAAS,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzM,KAAK,CAAC,YAAY;QAC1B,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,OAAO,oBAAS,CAAC,YAAY,CAAS,mCAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnG,CAAC;IAEM,MAAM,CAAC,WAAW,CAA8C,MAAS,EAAE,GAAG,IAAgD;QACnI,OAAO,oBAAS,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,CAA+C,CAAC;IAC9F,CAAC;IAES,iBAAiB;;QACzB,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO,SAAS,CAAC;QAEnB,MAAM,YAAY,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAE,IAAI,CAAC,OAA0B,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,4BAAY,CAAC,sBAAsB,CAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChN,IAAI,SAAS,KAAK,YAAY;YAC5B,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,kCAAkB,EAAE,CAAC;QAExC,kCAAkB,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAES,gBAAgB,CAAC,SAAyB;QAClD,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO,SAAS,CAAC;QAEnB,MAAM,OAAO,GAAG,IAAI,6BAAe,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,OAAO;QAET,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;IAES,eAAe,CAAC,SAAyB;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAErC,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC;IAC3G,CAAC;IAEkB,KAAK,CAAC,eAAe,CAAC,KAA4B,EAAE,IAAmC;QACxG,IAAI;YACF,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,kBAAkB,CAAC,WAAW,CAAC,wBAAwB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;SAC1B;QAAC,OAAO,GAAG,EAAE;YACZ,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,2BAAY,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,4BAA4B,CAAC,CAAC,CAAC;SACjK;IACH,CAAC;CACF;AAhED,gDAgEC;AAED,wGAAwG;AACxG,MAAa,gBAAiB,SAAQ,kBAAkB;IAInC,qBAAqB,CAAC,aAAsB,EAAE,eAA6C;QAC5G,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAC1I,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAEkB,aAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI;YACZ,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QAExC,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAE5B,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAGD,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1I,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAW,SAAS,CAAC,KAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9E,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,cAAc,EAAE,oBAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9K,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,CAAC,KAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGvE,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CACvC,0CAAyB,CAAC,sBAAsB,CAAC,cAAc,EAAE,oBAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9H,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAW,MAAM,CAAC,KAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAErD,UAAU,CAAC,GAAkB;QAC9C,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CAAC,EAAiB,EAAE,UAAmB;QAC/E,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC9B,IAAI,CAAC,UAAU;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO;SACR;QAED,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACxD;QAED,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;YACxD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;SACR;QAED,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;QACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,wBAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjE,IAAI,CAAC,YAAY,GAAG,wBAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,sBAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnI,IAAI,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC1C,OAAO;QAET,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAEkB,4BAA4B,CAAC,QAA6B;QAC3E,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,OAAO,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B;QAC1C,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAE7G,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAE7C,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QACvG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AA3HH,4CA4HC;AA3HwB,uBAAM,GAAG,cAAc,CAAC;AACxB,yBAAQ,GAAG,aAAa,CAAC,CAAC,4BAA4B;AA4H/E,2DAA2D;AAC3D,IAAY,mBASX;AATD,WAAY,mBAAmB;IAC7B,kDAAkD;IAClD,yEAAU,CAAA;IACV,uDAAuD;IACvD,6EAAY,CAAA;IACZ,kDAAkD;IAClD,6EAAY,CAAA;IACZ,0CAA0C;IAC1C,6EAAY,CAAA;AACd,CAAC,EATW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAS9B;AAED,0GAA0G;AAC1G,MAAa,kBAAmB,SAAQ,kBAAkB;IAA1D;;QAIY,gBAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC;IAwOzD,CAAC;IAtOoB,qBAAqB,CAAC,aAAsB,EAAE,eAA6C;QAC5G,QAAQ,IAAI,CAAC,WAAW,EAAE;YACxB,KAAK,mBAAmB,CAAC,UAAU;gBACjC,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;gBACxE,MAAM;YACR,KAAK,mBAAmB,CAAC,YAAY;gBACnC,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;gBAC1E,MAAM;YACR;gBACE,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;gBAC1E,MAAM;SACT;QAED,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAEkB,aAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI;YACZ,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QAExC,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAE5B,IAAI,mBAAmB,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;YAC5F,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;aACvB;SACF;QAED,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAGD,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5I,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAW,SAAS,CAAC,KAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9E,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,gBAAgB,EAAE,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClL,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,CAAC,KAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGvE,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5I,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAW,SAAS,CAAC,KAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9E,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,gBAAgB,EAAE,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClL,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,CAAC,KAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGvE,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CACvC,0CAAyB,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClI,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAW,MAAM,CAAC,KAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGxE,IAAW,kBAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,+BAAc,CAC3C,0CAAyB,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,oBAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1I,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAW,UAAU,CAAC,KAAc,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE7D,UAAU,CAAC,GAAkB;QAC9C,OAAO,CAAC,mBAAmB,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CAAC,EAAiB,EAAE,UAAmB;QAC/E,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAErB,QAAQ,IAAI,CAAC,WAAW,EAAE;YACxB,KAAK,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACnC,IAAI,UAAU;oBACZ,MAAM;gBAER,+EAA+E;gBAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBAC7H,MAAM;aACP;YAED,KAAK,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACrF,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAEpE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACxD;gBAED,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;oBAClH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;oBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO;iBACR;gBAED,MAAM,GAAG,GAAG,qBAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,YAAY,GAAG,wBAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C;gBAC/G,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEtD,IAAI,UAAU;oBACZ,MAAM;gBAER,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC;gBACpD,MAAM;aACP;YAED,KAAK,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,wBAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAElE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACxD;gBAED,gEAAgE;gBAChE,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;oBACjC,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE7E,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACpF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBAEpF,IAAI,SAAS,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;oBACpD,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBACxC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAExC,MAAM,OAAO,GAAG,qBAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAChD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9D,OAAO;iBACR;gBAED,IAAI,IAAI,CAAC,UAAU;oBACjB,IAAI,CAAC,OAAO,GAAG,oBAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;oBAElG,IAAI,CAAC,OAAO,GAAG,oBAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAErH,IAAI,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;oBAC1C,MAAM;gBAER,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC;gBACpD,MAAM;aACP;SACF;IACH,CAAC;IAEkB,4BAA4B,CAAC,QAA6B;QAC3E,IAAI,QAAQ,KAAK,IAAI,CAAC,iBAAiB;YACrC,OAAO,IAAI,CAAC,cAAc,CAAC;aACxB,IAAI,QAAQ,KAAK,IAAI,CAAC,iBAAiB;YAC1C,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,OAAO,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B;QAC1C,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAEnL,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAE7C,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAEvG,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAEvG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AA3OH,gDA4OC;AA3OwB,yBAAM,GAAG,gBAAgB,CAAC;AAC1B,2BAAQ,GAAG,aAAa,CAAC,CAAC,4BAA4B;AA4O/E,uDAAuD;AACvD,IAAY,eAWX;AAXD,WAAY,eAAe;IACzB,kDAAkD;IAClD,iEAAU,CAAA;IACV,4DAA4D;IAC5D,6EAAgB,CAAA;IAChB,kDAAkD;IAClD,qEAAY,CAAA;IACZ,8CAA8C;IAC9C,2EAAe,CAAA;IACf,0CAA0C;IAC1C,qEAAY,CAAA;AACd,CAAC,EAXW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAW1B;AAED,sGAAsG;AACtG,MAAa,cAAe,SAAQ,kBAAkB;IAAtD;;QAIY,gBAAW,GAAG,eAAe,CAAC,UAAU,CAAC;IAoSrD,CAAC;IAlSoB,qBAAqB,CAAC,aAAsB,EAAE,eAA6C;QAC5G,QAAQ,IAAI,CAAC,WAAW,EAAE;YACxB,KAAK,eAAe,CAAC,UAAU;gBAC7B,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,eAAe,CAAC,gBAAgB;gBACnC,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;gBAC1E,MAAM;YACR,KAAK,eAAe,CAAC,eAAe;gBAClC,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;gBACzE,MAAM;YACR;gBACE,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBACtE,MAAM;SACT;QAED,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAEkB,aAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI;YACZ,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QAExC,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAE5B,IAAI,eAAe,CAAC,eAAe,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE;YACtE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;gBACjC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACtC;aAAM,IAAI,eAAe,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;YAC/F,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;aACvB;SACF;QAED,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAGD,IAAW,qBAAqB;QAC9B,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QAChJ,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAED,IAAW,aAAa,KAAc,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAChF,IAAW,aAAa,CAAC,KAAc,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGtF,IAAW,kBAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,gBAAgB,EAAE,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1L,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,UAAU,KAAa,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,IAAW,UAAU,CAAC,KAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG/E,IAAW,oBAAoB;QAC7B,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAC7B,IAAI,CAAC,qBAAqB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9I,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,IAAW,YAAY,KAAc,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAW,YAAY,CAAC,KAAc,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGpF,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,eAAe,EAAE,oBAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtL,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAW,SAAS,CAAC,KAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG7E,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC;QACxI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAW,SAAS,CAAC,KAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9E,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,YAAY,EAAE,oBAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1K,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,CAAC,KAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGvE,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CACvC,0CAAyB,CAAC,sBAAsB,CAAC,YAAY,EAAE,oBAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAW,MAAM,CAAC,KAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGxE,IAAW,kBAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,+BAAc,CAC3C,0CAAyB,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClI,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAW,UAAU,CAAC,KAAc,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE7D,UAAU,CAAC,GAAkB;QAC9C,OAAO,CAAC,eAAe,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CAAC,EAAiB,EAAE,UAAmB;;QAC/E,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAErB,QAAQ,IAAI,CAAC,WAAW,EAAE;YACxB,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC/B,IAAI,UAAU;oBACZ,MAAM;gBAER,mFAAmF;gBACnF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAC7H,MAAM;aACP;YAED,KAAK,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACrF,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAE5E,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;oBACzB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;iBAC5D;gBAED,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;oBAClH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;oBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO;iBACR;gBAED,MAAM,GAAG,GAAG,qBAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,YAAY,GAAG,wBAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C;gBAC/G,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEtD,IAAI,UAAU;oBACZ,MAAM;gBAER,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC;gBAChD,MAAM;aACP;YAED,KAAK,eAAe,CAAC,YAAY,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,wBAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAElE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACxD;gBAED,4DAA4D;gBAC5D,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;oBACjC,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE7E,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACpF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBAEpF,IAAI,SAAS,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;oBACpD,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAC5C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAE5C,MAAM,OAAO,GAAG,qBAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAChD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9D,OAAO;iBACR;gBAED,IAAI,IAAI,CAAC,UAAU;oBACjB,IAAI,CAAC,OAAO,GAAG,oBAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;oBAEnI,IAAI,CAAC,OAAO,GAAG,oBAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEtJ,IAAI,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;oBAC1C,MAAM;gBAER,MAAM,YAAY,GAAI,IAAI,CAAC,OAAgB,CAAC,oBAAoB,EAAE,CAAC;gBACnE,IAAI,SAAS,KAAK,YAAY;oBAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,yDAAyD;gBAEpG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAE,IAAI,CAAC,OAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,0DAA0D;gBACnH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC;gBACtG,MAAM;aACP;YAED,KAAK,eAAe,CAAC,eAAe,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAC,OAAO,MAAK,MAAA,IAAI,CAAC,OAAO,0CAAE,gBAAgB,CAAA,CAAC,CAAC,CAAE,IAAI,CAAC,OAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC/F,IAAI,SAAS,KAAK,IAAI;oBACpB,MAAM;gBAER,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAE1E,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;oBACxB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBAC3D;gBAED,IAAI,CAAC,OAAO,GAAG,oBAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE5J,IAAI,UAAU;oBACZ,MAAM;gBAER,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC;gBAChD,MAAM;aACP;SACF;IACH,CAAC;IAEkB,4BAA4B,CAAC,QAA6B;QAC3E,IAAI,QAAQ,KAAK,IAAI,CAAC,qBAAqB;YACzC,OAAO,IAAI,CAAC,kBAAkB,CAAC;aAC5B,IAAI,QAAQ,KAAK,IAAI,CAAC,oBAAoB;YAC7C,OAAO,IAAI,CAAC,iBAAiB,CAAC;aAC3B,IAAI,QAAQ,KAAK,IAAI,CAAC,iBAAiB;YAC1C,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,OAAO,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B;QAC1C,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAE9O,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAE7C,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QACtG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAE/G,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QACpG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAE7G,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAEvG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AAvSH,wCAwSC;AAvSwB,qBAAM,GAAG,YAAY,CAAC;AACtB,uBAAQ,GAAG,aAAa,CAAC,CAAC,4BAA4B;AAwS/E,qGAAqG;AACrG,MAAa,aAAc,SAAQ,kBAAkB;IAIhC,qBAAqB,CAAC,aAAsB,EAAE,eAA6C;QAC5G,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC5B,KAAK,CAAC;gBACJ,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;gBACnE,MAAM;YACR,KAAK,CAAC;gBACJ,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;gBACrE,MAAM;YACR,KAAK,CAAC;gBACJ,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;gBACpE,MAAM;YACR;gBACE,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;gBACrE,MAAM;SACT;QAED,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAEkB,aAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI;YACZ,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QAExC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAE5B,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACd,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;aACvB;iBAAM,IAAI,CAAC,KAAK,IAAI,EAAE;gBACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACtB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACvB;aACF;SACF;QAED,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAGD,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QACvI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAW,SAAS,CAAC,KAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9E,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,WAAW,EAAE,oBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxK,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,CAAC,KAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGvE,IAAW,gBAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;QACrI,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAW,QAAQ,CAAC,KAAc,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG5E,IAAW,aAAa;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,UAAU,EAAE,oBAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpK,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAW,KAAK,CAAC,KAAa,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGrE,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QACvI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAW,SAAS,CAAC,KAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG9E,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,WAAW,EAAE,oBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxK,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,CAAC,KAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGvE,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CACvC,0CAAyB,CAAC,sBAAsB,CAAC,WAAW,EAAE,oBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACxH,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAW,MAAM,CAAC,KAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGxE,IAAW,kBAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,+BAAc,CAC3C,0CAAyB,CAAC,sBAAsB,CAAC,eAAe,EAAE,oBAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChI,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAW,UAAU,CAAC,KAAc,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE7D,UAAU,CAAC,GAAkB;QAC9C,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CAAC,EAAiB,EAAE,UAAmB;QAC/E,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC5B,KAAK,CAAC,CAAC,CAAC;gBACN,IAAI,CAAC,UAAU;oBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvC,MAAM;aACP;YAED,KAAK,CAAC,CAAC,CAAC;gBACN,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAEpE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACxD;gBAED,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;oBACxD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;oBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO;iBACR;gBAED,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,wBAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAEjE,IAAI,CAAC,YAAY,GAAG,wBAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAC7D,IAAI,CAAC,OAAO,GAAG,6BAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAEtF,IAAI,UAAU;oBACZ,OAAO;gBAET,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrC,MAAM;aACP;YAED,KAAK,CAAC,CAAC,CAAC;gBACN,MAAM,QAAQ,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;gBAElE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;oBACnB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACvD;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACtF,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,wBAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAEjE,IAAI,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,SAAS,KAAK,wBAAQ,CAAC,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;oBACtI,IAAI,CAAC,OAAO,GAAG,6BAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBACzG,OAAO;iBACR;gBAED,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,6CAA6C;gBAEzE,MAAM,QAAQ,GAAc,EAAE,CAAC;gBAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClF,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC5E,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC5E,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBAElC,MAAM,IAAI,GAAG,4BAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAExD,IAAI,UAAU;oBACZ,OAAO;gBAET,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrC,MAAM;aACP;YAED,OAAO,CAAC,CAAC;gBACP,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;oBACjC,OAAO,CAAC,6DAA6D;gBAEvE,MAAM,KAAK,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAElE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACxD;gBAED,IAAI,SAAS,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;oBACpD,MAAM,QAAQ,GAAc,EAAE,CAAC;oBAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;oBACvC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAClF,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjF,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjF,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;oBAElC,MAAM,IAAI,GAAG,4BAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACxD,OAAO;iBACR;gBAED,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9C,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;iBACjF;gBAED,IAAI,CAAC,OAAO,GAAG,mBAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE1K,IAAI,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;oBAC1C,OAAO;gBAET,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrC,MAAM;aACP;SACF;IACH,CAAC;IAEkB,4BAA4B,CAAC,QAA6B;QAC3E,IAAI,QAAQ,KAAK,IAAI,CAAC,iBAAiB;YACrC,OAAO,IAAI,CAAC,cAAc,CAAC;aACxB,IAAI,QAAQ,KAAK,IAAI,CAAC,gBAAgB;YACzC,OAAO,IAAI,CAAC,aAAa,CAAC;aACvB,IAAI,QAAQ,KAAK,IAAI,CAAC,iBAAiB;YAC1C,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,OAAO,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B;QAC1C,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAE9N,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAE7C,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAEvG,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QAErG,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAEvG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AA3SH,sCA4SC;AA3SwB,oBAAM,GAAG,WAAW,CAAC;AACrB,sBAAQ,GAAG,aAAa,CAAC,CAAC,4BAA4B;AA4S/E,wDAAwD;AACxD,IAAY,gBAWX;AAXD,WAAY,gBAAgB;IAC1B,+CAA+C;IAC/C,qEAAW,CAAA;IACX,gDAAgD;IAChD,uEAAY,CAAA;IACZ,qDAAqD;IACrD,yFAAqB,CAAA;IACrB,+CAA+C;IAC/C,qEAAW,CAAA;IACX,0CAA0C;IAC1C,uEAAY,CAAA;AACd,CAAC,EAXW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAW3B;AAED,4GAA4G;AAC5G,MAAa,eAAgB,SAAQ,kBAAkB;IAAvD;;QAIY,gBAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAkTvD,CAAC;IAhToB,qBAAqB,CAAC,aAAsB,EAAE,eAA6C;QAC5G,QAAQ,IAAI,CAAC,WAAW,EAAE;YACxB,KAAK,gBAAgB,CAAC,WAAW;gBAC/B,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBACtE,MAAM;YACR,KAAK,gBAAgB,CAAC,YAAY;gBAChC,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;gBACvE,MAAM;YACR,KAAK,gBAAgB,CAAC,qBAAqB;gBACzC,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;gBAChF,MAAM;YACR;gBACE,aAAa,GAAG,oBAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBACtE,MAAM;SACT;QAED,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAEkB,aAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI;YACZ,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QAExC,IAAI,gBAAgB,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,EAAE;YACtD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;aAAM,IAAI,gBAAgB,CAAC,qBAAqB,KAAK,IAAI,CAAC,WAAW,EAAE;YACtE,KAAK,CAAC,YAAY,EAAE,CAAC;YACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;gBACjC,KAAK,CAAC,SAAS,CAAC,wBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3I;aAAM,IAAI,gBAAgB,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1E,KAAK,CAAC,YAAY,EAAE,CAAC;YACrB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;gBACjC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACtC;QAED,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAGD,IAAW,wBAAwB;QACjC,IAAI,CAAC,IAAI,CAAC,yBAAyB;YACjC,IAAI,CAAC,yBAAyB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,CAAC;QACvJ,OAAO,IAAI,CAAC,yBAAyB,CAAC;IACxC,CAAC;IAED,IAAW,gBAAgB,KAAc,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,IAAW,gBAAgB,CAAC,KAAc,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG5F,IAAW,qBAAqB;QAC9B,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,oBAAoB,EAAE,oBAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxM,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAED,IAAW,aAAa,KAAa,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,IAAW,aAAa,CAAC,KAAa,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGrF,IAAW,0BAA0B;QACnC,IAAI,CAAC,IAAI,CAAC,2BAA2B;YACnC,IAAI,CAAC,2BAA2B,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3J,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC1C,CAAC;IAED,IAAW,kBAAkB,KAAc,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1F,IAAW,kBAAkB,CAAC,KAAc,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGhG,IAAW,uBAAuB;QAChC,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,sBAAsB,EAAE,oBAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjN,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACvC,CAAC;IAED,IAAW,eAAe,KAAa,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;IACnF,IAAW,eAAe,CAAC,KAAa,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGzF,IAAW,gBAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,+BAAc,CAAU,0CAAyB,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC;QACvI,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAW,QAAQ,CAAC,KAAc,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG5E,IAAW,aAAa;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAS,IAAI,gCAAgB,CAAC,YAAY,EAAE,oBAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjL,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAW,KAAK,CAAC,KAAa,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAGrE,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CACvC,0CAAyB,CAAC,sBAAsB,CAAC,aAAa,EAAE,oBAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5H,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,MAAM,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAW,MAAM,CAAC,KAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAErD,UAAU,CAAC,GAAkB;QAC9C,OAAO,CAAC,gBAAgB,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAEkB,KAAK,CAAC,iBAAiB,CAAC,EAAiB,EAAE,UAAmB;QAC/E,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,QAAQ,IAAI,CAAC,WAAW,EAAE;YACxB,KAAK,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACjC,IAAI,UAAU;oBACZ,MAAM;gBAER,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC;gBACjD,MAAM;aACP;YAED,KAAK,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAClC,IAAI,CAAC,YAAY,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACrF,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAEzF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;oBACnC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;iBAC/D;gBAED,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE;oBAChI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;oBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO;iBACR;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvD,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEjG,IAAI,aAAa,EAAE;oBACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC;oBAC3B,QAAQ,CAAC,gBAAgB,EAAE,CAAC;oBAE5B,IAAI,CAAC,OAAO,GAAG,yBAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAE1J,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;wBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;qBACP;oBAED,IAAI,CAAC,UAAU;wBACb,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC;oBACnD,MAAM;iBACP;gBAED,MAAM,GAAG,GAAG,qBAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACpD,IAAI,CAAC,YAAY,GAAG,wBAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C;gBAC/G,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;gBAEnB,IAAI,UAAU;oBACZ,MAAM;gBAER,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,sDAAsD;gBACtF,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;gBACrH,MAAM;aACP;YAED,KAAK,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACpE,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAE7H,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC5B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;oBACvC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;iBACjE;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACpF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBAEpF,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE;oBACjE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;oBAC/C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;oBAE/C,IAAI,CAAC,OAAO,GAAG,qBAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC5D,OAAO;iBACR;gBAED,MAAM,KAAK,GAAG,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5E,IAAI,CAAC,OAAO,GAAG,yBAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAErI,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;oBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;iBACP;gBAED,IAAI,CAAC,UAAU;oBACb,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACtI,MAAM;aACP;YAED,KAAK,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACjC,MAAM,QAAQ,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAErE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACpF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBACpF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC;gBAEpF,MAAM,SAAS,GAAG,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAEnD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;oBACjM,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;gBAEnE,IAAI,KAAK,CAAC,YAAY;oBACpB,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;gBAErF,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;wBACxF,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;wBAE9B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAChC;qBAAM;oBACL,IAAI,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,GAAG,GAAG;wBAChD,KAAK,CAAC,UAAU,CAAC,qBAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;yBAChD,IAAI,KAAK,CAAC,OAAO,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,GAAG,GAAG;wBACrD,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBAExD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;oBAC3B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACvD;gBAED,IAAI,CAAC,OAAO,GAAG,yBAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE1I,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;oBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;iBACP;gBAED,IAAI,CAAC,UAAU;oBACb,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC;gBACnD,MAAM;aACP;SACF;IACH,CAAC;IAEkB,4BAA4B,CAAC,QAA6B;QAC3E,IAAI,QAAQ,KAAK,IAAI,CAAC,wBAAwB;YAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC;aAC/B,IAAI,QAAQ,KAAK,IAAI,CAAC,0BAA0B;YACnD,OAAO,IAAI,CAAC,uBAAuB,CAAC;aACjC,IAAI,QAAQ,KAAK,IAAI,CAAC,gBAAgB;YACzC,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,OAAO,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B;QAC1C,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAErO,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAE7C,IAAI,CAAC,qBAAqB,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/D,MAAM,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5G,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAErH,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACnE,MAAM,sBAAsB,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAChH,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAEzH,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QAErG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AArTH,0CAsTC;AArTwB,sBAAM,GAAG,aAAa,CAAC;AACvB,wBAAQ,GAAG,aAAa,CAAC,CAAC,4BAA4B","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*--------------------------------------------------------------------------------------------*/\nimport { BentleyError } from \"@itwin/core-bentley\";\nimport { Angle, Arc3d, Box, Cone, FrameBuilder, GeometryQuery, LineSegment3d, LineString3d, Loop, Matrix3d, Point3d, SolidPrimitive, Sphere, TorusPipe, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { Code, ElementGeometry, ElementGeometryBuilderParams, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream, PlacementProps } from \"@itwin/core-common\";\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, IModelApp, LengthDescription, NotifyMessageDetails, OutputMessagePriority, ToolAssistanceInstruction, Viewport } from \"@itwin/core-frontend\";\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\nimport { CreateElementWithDynamicsTool } from \"./CreateElementTool\";\nimport { EditTools } from \"./EditTool\";\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\n\n/** @alpha Base class for creating a capped or uncapped SolidPrimitive. */\nexport abstract class SolidPrimitiveTool extends CreateElementWithDynamicsTool {\n protected readonly accepted: Point3d[] = [];\n protected baseRotation?: Matrix3d;\n protected current?: GeometryQuery;\n protected _startedCmd?: string;\n\n protected allowView(vp: Viewport) { return vp.view.is3d(); }\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n\n protected async startCommand(): Promise<string> {\n if (undefined !== this._startedCmd)\n return this._startedCmd;\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\n }\n\n public static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]> {\n return EditTools.callCommand(method, ...args) as ReturnType<BasicManipulationCommandIpc[T]>;\n }\n\n protected getPlacementProps(): PlacementProps | undefined {\n if (undefined === this.current)\n return undefined;\n\n const localToWorld = (\"solid\" === this.current.geometryCategory ? (this.current as SolidPrimitive).getConstructiveFrame() : FrameBuilder.createRightHandedFrame(this.baseRotation?.getColumn(2), this.current));\n if (undefined === localToWorld)\n return undefined;\n\n const origin = localToWorld.getOrigin();\n const angles = new YawPitchRollAngles();\n\n YawPitchRollAngles.createFromMatrix3d(localToWorld.matrix, angles);\n\n return { origin, angles };\n }\n\n protected getGeometryProps(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined {\n if (undefined === this.current)\n return undefined;\n\n const builder = new ElementGeometry.Builder();\n builder.setLocalToWorldFromPlacement(placement);\n\n if (!builder.appendGeometryQuery(this.current))\n return;\n\n return { format: \"flatbuffer\", data: builder.entries };\n }\n\n protected getElementProps(placement: PlacementProps): GeometricElementProps | undefined {\n const model = this.targetModelId;\n const category = this.targetCategory;\n\n return { classFullName: \"Generic:PhysicalObject\", model, category, code: Code.createEmpty(), placement };\n }\n\n protected override async doCreateElement(props: GeometricElementProps, data?: ElementGeometryBuilderParams): Promise<void> {\n try {\n this._startedCmd = await this.startCommand();\n await SolidPrimitiveTool.callCommand(\"insertGeometricElement\", props, data);\n await this.saveChanges();\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\n }\n }\n}\n\n/** @alpha Creates a sphere. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\nexport class CreateSphereTool extends SolidPrimitiveTool {\n public static override toolId = \"CreateSphere\";\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\n\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n mainInstrText = EditTools.translate(0 === this.accepted.length ? \"CreateSphere.Prompts.CenterPoint\" : \"CreateSphere.Prompts.RadiusPoint\");\n super.provideToolAssistance(mainInstrText, additionalInstr);\n }\n\n protected override setupAccuDraw(): void {\n const nPts = this.accepted.length;\n if (0 === nPts)\n return;\n\n const hints = new AccuDrawHintBuilder();\n\n hints.setModePolar();\n hints.setOrigin(this.accepted[0]);\n hints.setOriginFixed = true;\n\n hints.sendHints();\n }\n\n private _useRadiusProperty: DialogProperty<boolean> | undefined;\n public get useRadiusProperty() {\n if (!this._useRadiusProperty)\n this._useRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useSphereRadius\"), false);\n return this._useRadiusProperty;\n }\n\n public get useRadius(): boolean { return this.useRadiusProperty.value; }\n public set useRadius(value: boolean) { this.useRadiusProperty.value = value; }\n\n private _radiusProperty: DialogProperty<number> | undefined;\n public get radiusProperty() {\n if (!this._radiusProperty)\n this._radiusProperty = new DialogProperty<number>(new LengthDescription(\"sphereRadius\", EditTools.translate(\"CreateSphere.Label.Radius\")), 0.1, undefined, !this.useRadius);\n return this._radiusProperty;\n }\n\n public get radius(): number { return this.radiusProperty.value; }\n public set radius(value: number) { this.radiusProperty.value = value; }\n\n private _cappedProperty: DialogProperty<boolean> | undefined;\n public get cappedProperty() {\n if (!this._cappedProperty)\n this._cappedProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"sphereCapped\", EditTools.translate(\"CreateSphere.Label.Capped\")), true);\n return this._cappedProperty;\n }\n\n public get capped(): boolean { return this.cappedProperty.value; }\n public set capped(value: boolean) { this.cappedProperty.value = value; }\n\n protected override isComplete(_ev: BeButtonEvent): boolean {\n return (2 === this.accepted.length);\n }\n\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n const vp = this.targetView;\n if (undefined === vp)\n return;\n\n if (0 === this.accepted.length) {\n if (!isDynamics)\n this.accepted.push(ev.point.clone());\n return;\n }\n\n const vector0 = Vector3d.createStartEnd(this.accepted[0], ev.point);\n const radius = (this.useRadius ? this.radius : vector0.magnitude());\n\n if (!this.useRadius) {\n this.radius = radius;\n this.syncToolSettingPropertyValue(this.radiusProperty);\n }\n\n if (undefined === vector0.scaleToLength(radius, vector0)) {\n this.current = undefined;\n this.clearGraphics();\n return;\n }\n\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\n const vector90 = normal.crossProduct(vector0);\n const matrix = Matrix3d.createColumns(vector0, vector90, normal);\n\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(matrix);\n this.current = Sphere.createFromAxesAndScales(this.accepted[0], this.baseRotation, radius, radius, radius, undefined, this.capped);\n\n if (isDynamics || undefined === this.current)\n return;\n\n this.accepted.push(ev.point.clone());\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n return (property === this.useRadiusProperty ? this.radiusProperty : undefined);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.radiusProperty, this.useRadiusProperty, this.cappedProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n this.radiusProperty.isDisabled = !this.useRadius;\n const useRadiusLock = this.useRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.radiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useRadiusLock));\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new CreateSphereTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Values for [[CreateCylinderTool.createPhase]. */\nexport enum CreateCylinderPhase {\n /** Current tool phase to define center of base */\n AcceptBase,\n /** Current tool phase to define radius or base axes */\n AcceptRadius,\n /** Current tool phase to define length or axis */\n AcceptLength,\n /** Current tool phase to accept result */\n AcceptResult,\n}\n\n/** @alpha Creates a cylinder. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\nexport class CreateCylinderTool extends SolidPrimitiveTool {\n public static override toolId = \"CreateCylinder\";\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\n\n protected createPhase = CreateCylinderPhase.AcceptBase;\n\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n switch (this.createPhase) {\n case CreateCylinderPhase.AcceptBase:\n mainInstrText = EditTools.translate(\"CreateCylinder.Prompts.BasePoint\");\n break;\n case CreateCylinderPhase.AcceptRadius:\n mainInstrText = EditTools.translate(\"CreateCylinder.Prompts.RadiusPoint\");\n break;\n default:\n mainInstrText = EditTools.translate(\"CreateCylinder.Prompts.LengthPoint\");\n break;\n }\n\n super.provideToolAssistance(mainInstrText, additionalInstr);\n }\n\n protected override setupAccuDraw(): void {\n const nPts = this.accepted.length;\n if (0 === nPts)\n return;\n\n const hints = new AccuDrawHintBuilder();\n\n hints.setModePolar();\n hints.setOrigin(this.accepted[0]);\n hints.setOriginFixed = true;\n\n if (CreateCylinderPhase.AcceptLength === this.createPhase && undefined !== this.baseRotation) {\n hints.setXAxis2(this.baseRotation.getColumn(2));\n\n if (this.orthogonal) {\n hints.setModeRectangular();\n hints.setLockY = true;\n hints.setLockZ = true;\n }\n }\n\n hints.sendHints();\n }\n\n private _useRadiusProperty: DialogProperty<boolean> | undefined;\n public get useRadiusProperty() {\n if (!this._useRadiusProperty)\n this._useRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useCylinderRadius\"), false);\n return this._useRadiusProperty;\n }\n\n public get useRadius(): boolean { return this.useRadiusProperty.value; }\n public set useRadius(value: boolean) { this.useRadiusProperty.value = value; }\n\n private _radiusProperty: DialogProperty<number> | undefined;\n public get radiusProperty() {\n if (!this._radiusProperty)\n this._radiusProperty = new DialogProperty<number>(new LengthDescription(\"cylinderRadius\", EditTools.translate(\"CreateCylinder.Label.Radius\")), 0.1, undefined, !this.useRadius);\n return this._radiusProperty;\n }\n\n public get radius(): number { return this.radiusProperty.value; }\n public set radius(value: number) { this.radiusProperty.value = value; }\n\n private _useLengthProperty: DialogProperty<boolean> | undefined;\n public get useLengthProperty() {\n if (!this._useLengthProperty)\n this._useLengthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useCylinderLength\"), false);\n return this._useLengthProperty;\n }\n\n public get useLength(): boolean { return this.useLengthProperty.value; }\n public set useLength(value: boolean) { this.useLengthProperty.value = value; }\n\n private _lengthProperty: DialogProperty<number> | undefined;\n public get lengthProperty() {\n if (!this._lengthProperty)\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"cylinderLength\", EditTools.translate(\"CreateCylinder.Label.Length\")), 0.1, undefined, !this.useLength);\n return this._lengthProperty;\n }\n\n public get length(): number { return this.lengthProperty.value; }\n public set length(value: number) { this.lengthProperty.value = value; }\n\n private _cappedProperty: DialogProperty<boolean> | undefined;\n public get cappedProperty() {\n if (!this._cappedProperty)\n this._cappedProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"cylinderCapped\", EditTools.translate(\"CreateCylinder.Label.Capped\")), true);\n return this._cappedProperty;\n }\n\n public get capped(): boolean { return this.cappedProperty.value; }\n public set capped(value: boolean) { this.cappedProperty.value = value; }\n\n private _orthogonalProperty: DialogProperty<boolean> | undefined;\n public get orthogonalProperty() {\n if (!this._orthogonalProperty)\n this._orthogonalProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"cylinderOrthogonal\", EditTools.translate(\"CreateCylinder.Label.Orthogonal\")), true);\n return this._orthogonalProperty;\n }\n\n public get orthogonal(): boolean { return this.orthogonalProperty.value; }\n public set orthogonal(value: boolean) { this.orthogonalProperty.value = value; }\n\n protected override isComplete(_ev: BeButtonEvent): boolean {\n return (CreateCylinderPhase.AcceptResult === this.createPhase);\n }\n\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n const vp = this.targetView;\n if (undefined === vp)\n return;\n\n const pt1 = (0 === this.accepted.length ? ev.point : this.accepted[0]);\n const pt2 = ev.point;\n\n switch (this.createPhase) {\n case CreateCylinderPhase.AcceptBase: {\n if (isDynamics)\n break;\n\n // Allow creating cylinder by 2 points when orthogonal and radius are locked...\n this.accepted.push(pt2.clone());\n this.createPhase = (this.orthogonal && this.useRadius ? CreateCylinderPhase.AcceptLength : CreateCylinderPhase.AcceptRadius);\n break;\n }\n\n case CreateCylinderPhase.AcceptRadius: {\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\n const vector0 = Vector3d.createStartEnd(pt1, pt2);\n const vector90 = normal.crossProduct(vector0);\n const radius = (this.useRadius ? this.radius : vector0.magnitude());\n\n if (!this.useRadius) {\n this.radius = radius;\n this.syncToolSettingPropertyValue(this.radiusProperty);\n }\n\n if (undefined === vector0.scaleToLength(radius, vector0) || undefined === vector90.scaleToLength(radius, vector90)) {\n this.current = undefined;\n this.clearGraphics();\n return;\n }\n\n const arc = Arc3d.create(pt1, vector0, vector90);\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(arc.matrixRef); // Update base rotation from result arc...\n this.current = (this.capped ? Loop.create(arc) : arc);\n\n if (isDynamics)\n break;\n\n this.createPhase = CreateCylinderPhase.AcceptLength;\n break;\n }\n\n case CreateCylinderPhase.AcceptLength: {\n const zAxis = Vector3d.createStartEnd(pt1, pt2);\n const length = (this.useLength ? this.length : zAxis.magnitude());\n\n if (!this.useLength) {\n this.length = length;\n this.syncToolSettingPropertyValue(this.lengthProperty);\n }\n\n // Establish base rotation when creating cylinder by 2 points...\n if (undefined === this.baseRotation)\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\n\n if (undefined === zAxis.scaleToLength(length, zAxis)) {\n xAxis.scaleToLength(this.radius, xAxis);\n yAxis.scaleToLength(this.radius, yAxis);\n\n const baseArc = Arc3d.create(pt1, xAxis, yAxis);\n this.current = (this.capped ? Loop.create(baseArc) : baseArc);\n return;\n }\n\n if (this.orthogonal)\n this.current = Cone.createAxisPoints(pt1, pt1.plus(zAxis), this.radius, this.radius, this.capped);\n else\n this.current = Cone.createBaseAndTarget(pt1, pt1.plus(zAxis), xAxis, yAxis, this.radius, this.radius, this.capped);\n\n if (isDynamics || undefined === this.current)\n break;\n\n this.createPhase = CreateCylinderPhase.AcceptResult;\n break;\n }\n }\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n if (property === this.useRadiusProperty)\n return this.radiusProperty;\n else if (property === this.useLengthProperty)\n return this.lengthProperty;\n return undefined;\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.radiusProperty, this.useRadiusProperty, this.lengthProperty, this.useLengthProperty, this.orthogonalProperty, this.cappedProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n this.radiusProperty.isDisabled = !this.useRadius;\n const useRadiusLock = this.useRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.radiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useRadiusLock));\n\n this.lengthProperty.isDisabled = !this.useLength;\n const useLengthLock = this.useLengthProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useLengthLock));\n\n toolSettings.push(this.orthogonalProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 }));\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new CreateCylinderTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Values for [[CreateConeTool.createPhase]. */\nexport enum CreateConePhase {\n /** Current tool phase to define center of base */\n AcceptBase,\n /** Current tool phase to define base radius or base axes */\n AcceptBaseRadius,\n /** Current tool phase to define length or axis */\n AcceptLength,\n /** Current tool phase to define top radius */\n AcceptTopRadius,\n /** Current tool phase to accept result */\n AcceptResult,\n}\n\n/** @alpha Creates a cone. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\nexport class CreateConeTool extends SolidPrimitiveTool {\n public static override toolId = \"CreateCone\";\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\n\n protected createPhase = CreateConePhase.AcceptBase;\n\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n switch (this.createPhase) {\n case CreateConePhase.AcceptBase:\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.BasePoint\");\n break;\n case CreateConePhase.AcceptBaseRadius:\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.BaseRadiusPoint\");\n break;\n case CreateConePhase.AcceptTopRadius:\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.TopRadiusPoint\");\n break;\n default:\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.LengthPoint\");\n break;\n }\n\n super.provideToolAssistance(mainInstrText, additionalInstr);\n }\n\n protected override setupAccuDraw(): void {\n const nPts = this.accepted.length;\n if (0 === nPts)\n return;\n\n const hints = new AccuDrawHintBuilder();\n\n hints.setModePolar();\n hints.setOrigin(this.accepted[0]);\n hints.setOriginFixed = true;\n\n if (CreateConePhase.AcceptTopRadius === this.createPhase && 2 === nPts) {\n hints.setOrigin(this.accepted[1]);\n if (undefined !== this.baseRotation)\n hints.setMatrix(this.baseRotation);\n } else if (CreateConePhase.AcceptLength === this.createPhase && undefined !== this.baseRotation) {\n hints.setXAxis2(this.baseRotation.getColumn(2));\n\n if (this.orthogonal) {\n hints.setModeRectangular();\n hints.setLockY = true;\n hints.setLockZ = true;\n }\n }\n\n hints.sendHints();\n }\n\n private _useBaseRadiusProperty: DialogProperty<boolean> | undefined;\n public get useBaseRadiusProperty() {\n if (!this._useBaseRadiusProperty)\n this._useBaseRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useConeBaseRadius\"), false);\n return this._useBaseRadiusProperty;\n }\n\n public get useBaseRadius(): boolean { return this.useBaseRadiusProperty.value; }\n public set useBaseRadius(value: boolean) { this.useBaseRadiusProperty.value = value; }\n\n private _baseRadiusProperty: DialogProperty<number> | undefined;\n public get baseRadiusProperty() {\n if (!this._baseRadiusProperty)\n this._baseRadiusProperty = new DialogProperty<number>(new LengthDescription(\"coneBaseRadius\", EditTools.translate(\"CreateCone.Label.BaseRadius\")), 0.1, undefined, !this.useBaseRadius);\n return this._baseRadiusProperty;\n }\n\n public get baseRadius(): number { return this.baseRadiusProperty.value; }\n public set baseRadius(value: number) { this.baseRadiusProperty.value = value; }\n\n private _useTopRadiusProperty: DialogProperty<boolean> | undefined;\n public get useTopRadiusProperty() {\n if (!this._useTopRadiusProperty)\n this._useTopRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useConeTopRadius\"), false);\n return this._useTopRadiusProperty;\n }\n\n public get useTopRadius(): boolean { return this.useTopRadiusProperty.value; }\n public set useTopRadius(value: boolean) { this.useTopRadiusProperty.value = value; }\n\n private _topRadiusProperty: DialogProperty<number> | undefined;\n public get topRadiusProperty() {\n if (!this._topRadiusProperty)\n this._topRadiusProperty = new DialogProperty<number>(new LengthDescription(\"coneTopRadius\", EditTools.translate(\"CreateCone.Label.TopRadius\")), 0.1, undefined, !this.useTopRadius);\n return this._topRadiusProperty;\n }\n\n public get topRadius(): number { return this.topRadiusProperty.value; }\n public set topRadius(value: number) { this.topRadiusProperty.value = value; }\n\n private _useLengthProperty: DialogProperty<boolean> | undefined;\n public get useLengthProperty() {\n if (!this._useLengthProperty)\n this._useLengthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useConeLength\"), false);\n return this._useLengthProperty;\n }\n\n public get useLength(): boolean { return this.useLengthProperty.value; }\n public set useLength(value: boolean) { this.useLengthProperty.value = value; }\n\n private _lengthProperty: DialogProperty<number> | undefined;\n public get lengthProperty() {\n if (!this._lengthProperty)\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"coneLength\", EditTools.translate(\"CreateCone.Label.Length\")), 0.1, undefined, !this.useLength);\n return this._lengthProperty;\n }\n\n public get length(): number { return this.lengthProperty.value; }\n public set length(value: number) { this.lengthProperty.value = value; }\n\n private _cappedProperty: DialogProperty<boolean> | undefined;\n public get cappedProperty() {\n if (!this._cappedProperty)\n this._cappedProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"coneCapped\", EditTools.translate(\"CreateCone.Label.Capped\")), true);\n return this._cappedProperty;\n }\n\n public get capped(): boolean { return this.cappedProperty.value; }\n public set capped(value: boolean) { this.cappedProperty.value = value; }\n\n private _orthogonalProperty: DialogProperty<boolean> | undefined;\n public get orthogonalProperty() {\n if (!this._orthogonalProperty)\n this._orthogonalProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"coneOrthogonal\", EditTools.translate(\"CreateCone.Label.Orthogonal\")), true);\n return this._orthogonalProperty;\n }\n\n public get orthogonal(): boolean { return this.orthogonalProperty.value; }\n public set orthogonal(value: boolean) { this.orthogonalProperty.value = value; }\n\n protected override isComplete(_ev: BeButtonEvent): boolean {\n return (CreateConePhase.AcceptResult === this.createPhase);\n }\n\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n const vp = this.targetView;\n if (undefined === vp)\n return;\n\n const pt1 = (0 === this.accepted.length ? ev.point : this.accepted[0]);\n const pt2 = ev.point;\n\n switch (this.createPhase) {\n case CreateConePhase.AcceptBase: {\n if (isDynamics)\n break;\n\n // Allow creating cone by 2 points when orthogonal and base/top radii are locked...\n this.accepted.push(pt2.clone());\n this.createPhase = (this.orthogonal && this.useBaseRadius ? CreateConePhase.AcceptLength : CreateConePhase.AcceptBaseRadius);\n break;\n }\n\n case CreateConePhase.AcceptBaseRadius: {\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\n const vector0 = Vector3d.createStartEnd(pt1, pt2);\n const vector90 = normal.crossProduct(vector0);\n const radius = (this.useBaseRadius ? this.baseRadius : vector0.magnitude());\n\n if (!this.useBaseRadius) {\n this.baseRadius = radius;\n this.syncToolSettingPropertyValue(this.baseRadiusProperty);\n }\n\n if (undefined === vector0.scaleToLength(radius, vector0) || undefined === vector90.scaleToLength(radius, vector90)) {\n this.current = undefined;\n this.clearGraphics();\n return;\n }\n\n const arc = Arc3d.create(pt1, vector0, vector90);\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(arc.matrixRef); // Update base rotation from result arc...\n this.current = (this.capped ? Loop.create(arc) : arc);\n\n if (isDynamics)\n break;\n\n this.createPhase = CreateConePhase.AcceptLength;\n break;\n }\n\n case CreateConePhase.AcceptLength: {\n const zAxis = Vector3d.createStartEnd(pt1, pt2);\n const length = (this.useLength ? this.length : zAxis.magnitude());\n\n if (!this.useLength) {\n this.length = length;\n this.syncToolSettingPropertyValue(this.lengthProperty);\n }\n\n // Establish base rotation when creating cone by 2 points...\n if (undefined === this.baseRotation)\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\n\n if (undefined === zAxis.scaleToLength(length, zAxis)) {\n xAxis.scaleToLength(this.baseRadius, xAxis);\n yAxis.scaleToLength(this.baseRadius, yAxis);\n\n const baseArc = Arc3d.create(pt1, xAxis, yAxis);\n this.current = (this.capped ? Loop.create(baseArc) : baseArc);\n return;\n }\n\n if (this.orthogonal)\n this.current = Cone.createAxisPoints(pt1, pt1.plus(zAxis), this.baseRadius, this.useTopRadius ? this.topRadius : 0.0, this.capped);\n else\n this.current = Cone.createBaseAndTarget(pt1, pt1.plus(zAxis), xAxis, yAxis, this.baseRadius, this.useTopRadius ? this.topRadius : 0.0, this.capped);\n\n if (isDynamics || undefined === this.current)\n break;\n\n const localToWorld = (this.current as Cone).getConstructiveFrame();\n if (undefined !== localToWorld)\n this.baseRotation = localToWorld.matrix; // Update base rotation from result for AccuDraw hints...\n\n this.accepted.push((this.current as Cone).getCenterB()); // Add top center to accepted points for AccuDraw hints...\n this.createPhase = this.useTopRadius ? CreateConePhase.AcceptResult : CreateConePhase.AcceptTopRadius;\n break;\n }\n\n case CreateConePhase.AcceptTopRadius: {\n const cone = (\"solid\" === this.current?.geometryCategory ? (this.current as Cone) : undefined);\n if (undefined === cone)\n break;\n\n const vector0 = Vector3d.createStartEnd(cone.getCenterB(), pt2);\n const radius = (this.useTopRadius ? this.topRadius : vector0.magnitude());\n\n if (!this.useTopRadius) {\n this.topRadius = radius;\n this.syncToolSettingPropertyValue(this.topRadiusProperty);\n }\n\n this.current = Cone.createBaseAndTarget(cone.getCenterA(), cone.getCenterB(), cone.getVectorX(), cone.getVectorY(), cone.getRadiusA(), radius, this.capped);\n\n if (isDynamics)\n break;\n\n this.createPhase = CreateConePhase.AcceptResult;\n break;\n }\n }\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n if (property === this.useBaseRadiusProperty)\n return this.baseRadiusProperty;\n else if (property === this.useTopRadiusProperty)\n return this.topRadiusProperty;\n else if (property === this.useLengthProperty)\n return this.lengthProperty;\n return undefined;\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.baseRadiusProperty, this.useBaseRadiusProperty, this.topRadiusProperty, this.useTopRadiusProperty, this.lengthProperty, this.useLengthProperty, this.orthogonalProperty, this.cappedProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n this.baseRadiusProperty.isDisabled = !this.useBaseRadius;\n const useBaseRadiusLock = this.useBaseRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.baseRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useBaseRadiusLock));\n\n this.topRadiusProperty.isDisabled = !this.useTopRadius;\n const useTopRadiusLock = this.useTopRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\n toolSettings.push(this.topRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useTopRadiusLock));\n\n this.lengthProperty.isDisabled = !this.useLength;\n const useLengthLock = this.useLengthProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useLengthLock));\n\n toolSettings.push(this.orthogonalProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 5, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new CreateConeTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Creates a bix. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\nexport class CreateBoxTool extends SolidPrimitiveTool {\n public static override toolId = \"CreateBox\";\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\n\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n switch (this.accepted.length) {\n case 0:\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.BasePoint\");\n break;\n case 1:\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.LengthPoint\");\n break;\n case 2:\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.WidthPoint\");\n break;\n default:\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.HeightPoint\");\n break;\n }\n\n super.provideToolAssistance(mainInstrText, additionalInstr);\n }\n\n protected override setupAccuDraw(): void {\n const nPts = this.accepted.length;\n if (0 === nPts)\n return;\n\n const hints = new AccuDrawHintBuilder();\n\n hints.setModeRectangular();\n hints.setOrigin(this.accepted[0]);\n hints.setOriginFixed = true;\n\n if (undefined !== this.baseRotation) {\n if (2 === nPts) {\n hints.setMatrix(this.baseRotation);\n hints.setLockX = true;\n hints.setLockZ = true;\n } else if (3 === nPts) {\n hints.setXAxis2(this.baseRotation.getColumn(2));\n if (this.orthogonal) {\n hints.setLockY = true;\n hints.setLockZ = true;\n }\n }\n }\n\n hints.sendHints();\n }\n\n private _useLengthProperty: DialogProperty<boolean> | undefined;\n public get useLengthProperty() {\n if (!this._useLengthProperty)\n this._useLengthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useBoxLength\"), false);\n return this._useLengthProperty;\n }\n\n public get useLength(): boolean { return this.useLengthProperty.value; }\n public set useLength(value: boolean) { this.useLengthProperty.value = value; }\n\n private _lengthProperty: DialogProperty<number> | undefined;\n public get lengthProperty() {\n if (!this._lengthProperty)\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"boxLength\", EditTools.translate(\"CreateBox.Label.Length\")), 0.1, undefined, !this.useLength);\n return this._lengthProperty;\n }\n\n public get length(): number { return this.lengthProperty.value; }\n public set length(value: number) { this.lengthProperty.value = value; }\n\n private _useWidthProperty: DialogProperty<boolean> | undefined;\n public get useWidthProperty() {\n if (!this._useWidthProperty)\n this._useWidthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useBoxWidth\"), false);\n return this._useWidthProperty;\n }\n\n public get useWidth(): boolean { return this.useWidthProperty.value; }\n public set useWidth(value: boolean) { this.useWidthProperty.value = value; }\n\n private _widthProperty: DialogProperty<number> | undefined;\n public get widthProperty() {\n if (!this._widthProperty)\n this._widthProperty = new DialogProperty<number>(new LengthDescription(\"boxWidth\", EditTools.translate(\"CreateBox.Label.Width\")), 0.1, undefined, !this.useWidth);\n return this._widthProperty;\n }\n\n public get width(): number { return this.widthProperty.value; }\n public set width(value: number) { this.widthProperty.value = value; }\n\n private _useHeightProperty: DialogProperty<boolean> | undefined;\n public get useHeightProperty() {\n if (!this._useHeightProperty)\n this._useHeightProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useBoxHeight\"), false);\n return this._useHeightProperty;\n }\n\n public get useHeight(): boolean { return this.useHeightProperty.value; }\n public set useHeight(value: boolean) { this.useHeightProperty.value = value; }\n\n private _heightProperty: DialogProperty<number> | undefined;\n public get heightProperty() {\n if (!this._heightProperty)\n this._heightProperty = new DialogProperty<number>(new LengthDescription(\"boxHeight\", EditTools.translate(\"CreateBox.Label.Height\")), 0.1, undefined, !this.useHeight);\n return this._heightProperty;\n }\n\n public get height(): number { return this.heightProperty.value; }\n public set height(value: number) { this.heightProperty.value = value; }\n\n private _cappedProperty: DialogProperty<boolean> | undefined;\n public get cappedProperty() {\n if (!this._cappedProperty)\n this._cappedProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"boxCapped\", EditTools.translate(\"CreateBox.Label.Capped\")), true);\n return this._cappedProperty;\n }\n\n public get capped(): boolean { return this.cappedProperty.value; }\n public set capped(value: boolean) { this.cappedProperty.value = value; }\n\n private _orthogonalProperty: DialogProperty<boolean> | undefined;\n public get orthogonalProperty() {\n if (!this._orthogonalProperty)\n this._orthogonalProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"boxOrthogonal\", EditTools.translate(\"CreateBox.Label.Orthogonal\")), true);\n return this._orthogonalProperty;\n }\n\n public get orthogonal(): boolean { return this.orthogonalProperty.value; }\n public set orthogonal(value: boolean) { this.orthogonalProperty.value = value; }\n\n protected override isComplete(_ev: BeButtonEvent): boolean {\n return (4 === this.accepted.length);\n }\n\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n const vp = this.targetView;\n if (undefined === vp)\n return;\n\n switch (this.accepted.length) {\n case 0: {\n if (!isDynamics)\n this.accepted.push(ev.point.clone());\n break;\n }\n\n case 1: {\n const vector0 = Vector3d.createStartEnd(this.accepted[0], ev.point);\n const length = (this.useLength ? this.length : vector0.magnitude());\n\n if (!this.useLength) {\n this.length = length;\n this.syncToolSettingPropertyValue(this.lengthProperty);\n }\n\n if (undefined === vector0.scaleToLength(length, vector0)) {\n this.current = undefined;\n this.clearGraphics();\n return;\n }\n\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\n const vector90 = normal.crossProduct(vector0);\n const matrix = Matrix3d.createColumns(vector0, vector90, normal);\n\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(matrix);\n this.current = LineSegment3d.create(this.accepted[0], this.accepted[0].plus(vector0));\n\n if (isDynamics)\n return;\n\n this.accepted.push(ev.point.clone());\n break;\n }\n\n case 2: {\n const vector90 = Vector3d.createStartEnd(this.accepted[0], ev.point);\n const width = (this.useWidth ? this.width : vector90.magnitude());\n\n if (!this.useWidth) {\n this.width = width;\n this.syncToolSettingPropertyValue(this.widthProperty);\n }\n\n const vector0 = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\n const normal = vector90.crossProduct(vector0);\n const matrix = Matrix3d.createColumns(vector0, vector90, normal);\n\n if (undefined === vector90.scaleToLength(width, vector90) || undefined === Matrix3d.createRigidFromMatrix3d(matrix, undefined, matrix)) {\n this.current = LineSegment3d.create(this.accepted[0], this.accepted[0].plusScaled(vector0, this.length));\n return;\n }\n\n this.baseRotation = matrix; // Update base rotation from cross product...\n\n const shapePts: Point3d[] = [];\n shapePts[0] = this.accepted[0].clone();\n shapePts[1] = shapePts[0].plusScaled(this.baseRotation.getColumn(0), this.length);\n shapePts[2] = shapePts[1].plusScaled(this.baseRotation.getColumn(1), width);\n shapePts[3] = shapePts[0].plusScaled(this.baseRotation.getColumn(1), width);\n shapePts[4] = shapePts[0].clone();\n\n const base = LineString3d.create(shapePts);\n this.current = (this.capped ? Loop.create(base) : base);\n\n if (isDynamics)\n return;\n\n this.accepted.push(ev.point.clone());\n break;\n }\n\n default: {\n if (undefined === this.baseRotation)\n return; // Should always have base rotation after width is defined...\n\n const zAxis = Vector3d.createStartEnd(this.accepted[0], ev.point);\n const height = (this.useHeight ? this.height : zAxis.magnitude());\n\n if (!this.useHeight) {\n this.height = height;\n this.syncToolSettingPropertyValue(this.heightProperty);\n }\n\n if (undefined === zAxis.scaleToLength(height, zAxis)) {\n const shapePts: Point3d[] = [];\n shapePts[0] = this.accepted[0].clone();\n shapePts[1] = shapePts[0].plusScaled(this.baseRotation.getColumn(0), this.length);\n shapePts[2] = shapePts[1].plusScaled(this.baseRotation.getColumn(1), this.width);\n shapePts[3] = shapePts[0].plusScaled(this.baseRotation.getColumn(1), this.width);\n shapePts[4] = shapePts[0].clone();\n\n const base = LineString3d.create(shapePts);\n this.current = (this.capped ? Loop.create(base) : base);\n return;\n }\n\n if (this.orthogonal) {\n const normal = this.baseRotation.getColumn(2);\n normal.scaleToLength(normal.dotProduct(zAxis) >= 0.0 ? height : -height, zAxis);\n }\n\n this.current = Box.createDgnBoxWithAxes(this.accepted[0], this.baseRotation, this.accepted[0].plus(zAxis), this.length, this.width, this.length, this.width, this.capped);\n\n if (isDynamics || undefined === this.current)\n return;\n\n this.accepted.push(ev.point.clone());\n break;\n }\n }\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n if (property === this.useLengthProperty)\n return this.lengthProperty;\n else if (property === this.useWidthProperty)\n return this.widthProperty;\n else if (property === this.useHeightProperty)\n return this.heightProperty;\n return undefined;\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.lengthProperty, this.useLengthProperty, this.widthProperty, this.useWidthProperty, this.heightProperty, this.useHeightProperty, this.orthogonalProperty, this.cappedProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n this.lengthProperty.isDisabled = !this.useLength;\n const useLengthLock = this.useLengthProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useLengthLock));\n\n this.widthProperty.isDisabled = !this.useWidth;\n const useWidthLock = this.useWidthProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\n toolSettings.push(this.widthProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useWidthLock));\n\n this.heightProperty.isDisabled = !this.useHeight;\n const useHeightLock = this.useHeightProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\n toolSettings.push(this.heightProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useHeightLock));\n\n toolSettings.push(this.orthogonalProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 5, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new CreateBoxTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Values for [[CreateTorusTool.createPhase]. */\nexport enum CreateTorusPhase {\n /** Current tool phase to define start point */\n AcceptStart,\n /** Current tool phase to define center point */\n AcceptCenter,\n /** Current tool phase to define secondary radius */\n AcceptSecondaryRadius,\n /** Current tool phase to define sweep angle */\n AcceptAngle,\n /** Current tool phase to accept result */\n AcceptResult,\n}\n\n/** @alpha Creates a torus pipe. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\nexport class CreateTorusTool extends SolidPrimitiveTool {\n public static override toolId = \"CreateTorus\";\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\n\n protected createPhase = CreateTorusPhase.AcceptStart;\n\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n switch (this.createPhase) {\n case CreateTorusPhase.AcceptStart:\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.StartPoint\");\n break;\n case CreateTorusPhase.AcceptCenter:\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.CenterPoint\");\n break;\n case CreateTorusPhase.AcceptSecondaryRadius:\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.SecondaryRadiusPoint\");\n break;\n default:\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.AnglePoint\");\n break;\n }\n\n super.provideToolAssistance(mainInstrText, additionalInstr);\n }\n\n protected override setupAccuDraw(): void {\n const nPts = this.accepted.length;\n if (0 === nPts)\n return;\n\n const hints = new AccuDrawHintBuilder();\n\n if (CreateTorusPhase.AcceptCenter === this.createPhase) {\n hints.setOrigin(this.accepted[0]);\n } else if (CreateTorusPhase.AcceptSecondaryRadius === this.createPhase) {\n hints.setModePolar();\n hints.setOrigin(this.accepted[0]);\n hints.setOriginFixed = true;\n if (undefined !== this.baseRotation)\n hints.setMatrix(Matrix3d.createColumns(this.baseRotation.getColumn(0), this.baseRotation.getColumn(2), this.baseRotation.getColumn(1)));\n } else if (CreateTorusPhase.AcceptAngle === this.createPhase && 2 === nPts) {\n hints.setModePolar();\n hints.setOrigin(this.accepted[1]);\n hints.setOriginFixed = true;\n if (undefined !== this.baseRotation)\n hints.setMatrix(this.baseRotation);\n }\n\n hints.sendHints();\n }\n\n private _usePrimaryRadiusProperty: DialogProperty<boolean> | undefined;\n public get usePrimaryRadiusProperty() {\n if (!this._usePrimaryRadiusProperty)\n this._usePrimaryRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useTorusPrimaryRadius\"), false);\n return this._usePrimaryRadiusProperty;\n }\n\n public get usePrimaryRadius(): boolean { return this.usePrimaryRadiusProperty.value; }\n public set usePrimaryRadius(value: boolean) { this.usePrimaryRadiusProperty.value = value; }\n\n private _primaryRadiusProperty: DialogProperty<number> | undefined;\n public get primaryRadiusProperty() {\n if (!this._primaryRadiusProperty)\n this._primaryRadiusProperty = new DialogProperty<number>(new LengthDescription(\"torusPrimaryRadius\", EditTools.translate(\"CreateTorus.Label.PrimaryRadius\")), 0.1, undefined, !this.usePrimaryRadius);\n return this._primaryRadiusProperty;\n }\n\n public get primaryRadius(): number { return this.primaryRadiusProperty.value; }\n public set primaryRadius(value: number) { this.primaryRadiusProperty.value = value; }\n\n private _useSecondaryRadiusProperty: DialogProperty<boolean> | undefined;\n public get useSecondaryRadiusProperty() {\n if (!this._useSecondaryRadiusProperty)\n this._useSecondaryRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useTorusSecondaryRadius\"), false);\n return this._useSecondaryRadiusProperty;\n }\n\n public get useSecondaryRadius(): boolean { return this.useSecondaryRadiusProperty.value; }\n public set useSecondaryRadius(value: boolean) { this.useSecondaryRadiusProperty.value = value; }\n\n private _secondaryRadiusProperty: DialogProperty<number> | undefined;\n public get secondaryRadiusProperty() {\n if (!this._secondaryRadiusProperty)\n this._secondaryRadiusProperty = new DialogProperty<number>(new LengthDescription(\"torusSecondaryRadius\", EditTools.translate(\"CreateTorus.Label.SecondaryRadius\")), 0.05, undefined, !this.useSecondaryRadius);\n return this._secondaryRadiusProperty;\n }\n\n public get secondaryRadius(): number { return this.secondaryRadiusProperty.value; }\n public set secondaryRadius(value: number) { this.secondaryRadiusProperty.value = value; }\n\n private _useAngleProperty: DialogProperty<boolean> | undefined;\n public get useAngleProperty() {\n if (!this._useAngleProperty)\n this._useAngleProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useTorusAngle\"), false);\n return this._useAngleProperty;\n }\n\n public get useAngle(): boolean { return this.useAngleProperty.value; }\n public set useAngle(value: boolean) { this.useAngleProperty.value = value; }\n\n private _angleProperty: DialogProperty<number> | undefined;\n public get angleProperty() {\n if (!this._angleProperty)\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"torusAngle\", EditTools.translate(\"CreateTorus.Label.Angle\")), Math.PI / 2.0, undefined, !this.useAngle);\n return this._angleProperty;\n }\n\n public get angle(): number { return this.angleProperty.value; }\n public set angle(value: number) { this.angleProperty.value = value; }\n\n private _cappedProperty: DialogProperty<boolean> | undefined;\n public get cappedProperty() {\n if (!this._cappedProperty)\n this._cappedProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"torusCapped\", EditTools.translate(\"CreateTorus.Label.Capped\")), true);\n return this._cappedProperty;\n }\n\n public get capped(): boolean { return this.cappedProperty.value; }\n public set capped(value: boolean) { this.cappedProperty.value = value; }\n\n protected override isComplete(_ev: BeButtonEvent): boolean {\n return (CreateTorusPhase.AcceptResult === this.createPhase);\n }\n\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n const vp = this.targetView;\n if (undefined === vp)\n return;\n\n switch (this.createPhase) {\n case CreateTorusPhase.AcceptStart: {\n if (isDynamics)\n break;\n\n this.accepted.push(ev.point.clone());\n this.createPhase = CreateTorusPhase.AcceptCenter;\n break;\n }\n\n case CreateTorusPhase.AcceptCenter: {\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\n\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\n const vector0 = Vector3d.createStartEnd(ev.point, this.accepted[0]);\n const vector90 = normal.crossProduct(vector0);\n const primaryRadius = (this.usePrimaryRadius ? this.primaryRadius : vector0.magnitude());\n\n if (!this.usePrimaryRadius) {\n this.primaryRadius = primaryRadius;\n this.syncToolSettingPropertyValue(this.primaryRadiusProperty);\n }\n\n if (undefined === vector0.scaleToLength(primaryRadius, vector0) || undefined === vector90.scaleToLength(primaryRadius, vector90)) {\n this.current = undefined;\n this.clearGraphics();\n return;\n }\n\n const center = this.accepted[0].plus(vector0.negate());\n const allowComplete = (this.useSecondaryRadius && this.useAngle && (2 * Math.PI) === this.angle);\n\n if (allowComplete) {\n vector0.normalizeInPlace();\n vector90.normalizeInPlace();\n\n this.current = TorusPipe.createDgnTorusPipe(center, vector0, vector90, primaryRadius, this.secondaryRadius, Angle.createRadians(this.angle), this.capped);\n\n if (undefined === this.current) {\n this.clearGraphics();\n break;\n }\n\n if (!isDynamics)\n this.createPhase = CreateTorusPhase.AcceptResult;\n break;\n }\n\n const arc = Arc3d.create(center, vector0, vector90);\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(arc.matrixRef); // Update base rotation from result arc...\n this.current = arc;\n\n if (isDynamics)\n break;\n\n this.accepted.push(arc.center); // Add center to accepted points for AccuDraw hints...\n this.createPhase = (this.useSecondaryRadius ? CreateTorusPhase.AcceptAngle : CreateTorusPhase.AcceptSecondaryRadius);\n break;\n }\n\n case CreateTorusPhase.AcceptSecondaryRadius: {\n const vector0 = Vector3d.createStartEnd(this.accepted[0], ev.point);\n const secondaryRadius = (this.useSecondaryRadius ? this.secondaryRadius : Math.min(this.primaryRadius, vector0.magnitude()));\n\n if (!this.useSecondaryRadius) {\n this.secondaryRadius = secondaryRadius;\n this.syncToolSettingPropertyValue(this.secondaryRadiusProperty);\n }\n\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\n\n if (undefined === vector0.scaleToLength(secondaryRadius, vector0)) {\n xAxis.scaleToLength(this.primaryRadius, xAxis);\n yAxis.scaleToLength(this.primaryRadius, yAxis);\n\n this.current = Arc3d.create(this.accepted[1], xAxis, yAxis);\n return;\n }\n\n const sweep = Angle.createRadians(this.useAngle ? this.angle : 2 * Math.PI);\n this.current = TorusPipe.createDgnTorusPipe(this.accepted[1], xAxis, yAxis, this.primaryRadius, secondaryRadius, sweep, this.capped);\n\n if (undefined === this.current) {\n this.clearGraphics();\n break;\n }\n\n if (!isDynamics)\n this.createPhase = ((this.useAngle && (2 * Math.PI) === this.angle) ? CreateTorusPhase.AcceptResult : CreateTorusPhase.AcceptAngle);\n break;\n }\n\n case CreateTorusPhase.AcceptAngle: {\n const vector90 = Vector3d.createStartEnd(this.accepted[1], ev.point);\n\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\n const zAxis = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\n\n const prevSweep = Angle.createRadians(this.angle);\n const sweep = xAxis.planarAngleTo(vector90, zAxis);\n\n if (Math.abs(sweep.radians) < Angle.createDegrees(30.0).radians && prevSweep.isFullCircle && ((sweep.radians < 0.0 && prevSweep.radians > 0.0) || (sweep.radians > 0.0 && prevSweep.radians < 0.0)))\n prevSweep.setRadians(-prevSweep.radians); // Reverse direction...\n\n if (sweep.isAlmostZero)\n sweep.setDegrees(prevSweep.radians < 0.0 ? -360.0 : 360.0); // Create full sweep...\n\n if (this.useAngle) {\n if ((sweep.radians < 0.0 && this.angle > 0.0) || (sweep.radians > 0.0 && this.angle < 0.0))\n sweep.setRadians(-this.angle);\n else\n sweep.setRadians(this.angle);\n } else {\n if (sweep.radians < 0.0 && prevSweep.radians > 0.0)\n sweep.setRadians(Angle.pi2Radians + sweep.radians);\n else if (sweep.radians > 0.0 && prevSweep.radians < 0.0)\n sweep.setRadians(-(Angle.pi2Radians - sweep.radians));\n\n this.angle = sweep.radians;\n this.syncToolSettingPropertyValue(this.angleProperty);\n }\n\n this.current = TorusPipe.createDgnTorusPipe(this.accepted[1], xAxis, yAxis, this.primaryRadius, this.secondaryRadius, sweep, this.capped);\n\n if (undefined === this.current) {\n this.clearGraphics();\n break;\n }\n\n if (!isDynamics)\n this.createPhase = CreateTorusPhase.AcceptResult;\n break;\n }\n }\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n if (property === this.usePrimaryRadiusProperty)\n return this.primaryRadiusProperty;\n else if (property === this.useSecondaryRadiusProperty)\n return this.secondaryRadiusProperty;\n else if (property === this.useAngleProperty)\n return this.angleProperty;\n return undefined;\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.primaryRadiusProperty, this.usePrimaryRadiusProperty, this.secondaryRadiusProperty, this.useSecondaryRadiusProperty, this.angleProperty, this.useAngleProperty, this.cappedProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n this.primaryRadiusProperty.isDisabled = !this.usePrimaryRadius;\n const usePrimaryRadiusLock = this.usePrimaryRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.primaryRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, usePrimaryRadiusLock));\n\n this.secondaryRadiusProperty.isDisabled = !this.useSecondaryRadius;\n const useSecondaryRadiusLock = this.useSecondaryRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\n toolSettings.push(this.secondaryRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useSecondaryRadiusLock));\n\n this.angleProperty.isDisabled = !this.useAngle;\n const useAngleLock = this.useAngleProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useAngleLock));\n\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new CreateTorusTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n"]}
1
+ {"version":3,"file":"SolidPrimitiveTools.js","sourceRoot":"","sources":["../../src/SolidPrimitiveTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { BentleyError } from \"@itwin/core-bentley\";\r\nimport { Angle, Arc3d, Box, Cone, FrameBuilder, GeometryQuery, LineSegment3d, LineString3d, Loop, Matrix3d, Point3d, SolidPrimitive, Sphere, TorusPipe, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { Code, ElementGeometry, ElementGeometryBuilderParams, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream, PlacementProps } from \"@itwin/core-common\";\r\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, IModelApp, LengthDescription, NotifyMessageDetails, OutputMessagePriority, ToolAssistanceInstruction, Viewport } from \"@itwin/core-frontend\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { CreateElementWithDynamicsTool } from \"./CreateElementTool\";\r\nimport { EditTools } from \"./EditTool\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\r\n\r\n/** @alpha Base class for creating a capped or uncapped SolidPrimitive. */\r\nexport abstract class SolidPrimitiveTool extends CreateElementWithDynamicsTool {\r\n protected readonly accepted: Point3d[] = [];\r\n protected baseRotation?: Matrix3d;\r\n protected current?: GeometryQuery;\r\n protected _startedCmd?: string;\r\n\r\n protected allowView(vp: Viewport) { return vp.view.is3d(); }\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n public static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<BasicManipulationCommandIpc[T]>;\r\n }\r\n\r\n protected getPlacementProps(): PlacementProps | undefined {\r\n if (undefined === this.current)\r\n return undefined;\r\n\r\n const localToWorld = (\"solid\" === this.current.geometryCategory ? (this.current as SolidPrimitive).getConstructiveFrame() : FrameBuilder.createRightHandedFrame(this.baseRotation?.getColumn(2), this.current));\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const origin = localToWorld.getOrigin();\r\n const angles = new YawPitchRollAngles();\r\n\r\n YawPitchRollAngles.createFromMatrix3d(localToWorld.matrix, angles);\r\n\r\n return { origin, angles };\r\n }\r\n\r\n protected getGeometryProps(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined {\r\n if (undefined === this.current)\r\n return undefined;\r\n\r\n const builder = new ElementGeometry.Builder();\r\n builder.setLocalToWorldFromPlacement(placement);\r\n\r\n if (!builder.appendGeometryQuery(this.current))\r\n return;\r\n\r\n return { format: \"flatbuffer\", data: builder.entries };\r\n }\r\n\r\n protected getElementProps(placement: PlacementProps): GeometricElementProps | undefined {\r\n const model = this.targetModelId;\r\n const category = this.targetCategory;\r\n\r\n return { classFullName: \"Generic:PhysicalObject\", model, category, code: Code.createEmpty(), placement };\r\n }\r\n\r\n protected override async doCreateElement(props: GeometricElementProps, data?: ElementGeometryBuilderParams): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n await SolidPrimitiveTool.callCommand(\"insertGeometricElement\", props, data);\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n}\r\n\r\n/** @alpha Creates a sphere. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\r\nexport class CreateSphereTool extends SolidPrimitiveTool {\r\n public static override toolId = \"CreateSphere\";\r\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\r\n\r\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n mainInstrText = EditTools.translate(0 === this.accepted.length ? \"CreateSphere.Prompts.CenterPoint\" : \"CreateSphere.Prompts.RadiusPoint\");\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const nPts = this.accepted.length;\r\n if (0 === nPts)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.setModePolar();\r\n hints.setOrigin(this.accepted[0]);\r\n hints.setOriginFixed = true;\r\n\r\n hints.sendHints();\r\n }\r\n\r\n private _useRadiusProperty: DialogProperty<boolean> | undefined;\r\n public get useRadiusProperty() {\r\n if (!this._useRadiusProperty)\r\n this._useRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useSphereRadius\"), false);\r\n return this._useRadiusProperty;\r\n }\r\n\r\n public get useRadius(): boolean { return this.useRadiusProperty.value; }\r\n public set useRadius(value: boolean) { this.useRadiusProperty.value = value; }\r\n\r\n private _radiusProperty: DialogProperty<number> | undefined;\r\n public get radiusProperty() {\r\n if (!this._radiusProperty)\r\n this._radiusProperty = new DialogProperty<number>(new LengthDescription(\"sphereRadius\", EditTools.translate(\"CreateSphere.Label.Radius\")), 0.1, undefined, !this.useRadius);\r\n return this._radiusProperty;\r\n }\r\n\r\n public get radius(): number { return this.radiusProperty.value; }\r\n public set radius(value: number) { this.radiusProperty.value = value; }\r\n\r\n private _cappedProperty: DialogProperty<boolean> | undefined;\r\n public get cappedProperty() {\r\n if (!this._cappedProperty)\r\n this._cappedProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"sphereCapped\", EditTools.translate(\"CreateSphere.Label.Capped\")), true);\r\n return this._cappedProperty;\r\n }\r\n\r\n public get capped(): boolean { return this.cappedProperty.value; }\r\n public set capped(value: boolean) { this.cappedProperty.value = value; }\r\n\r\n protected override isComplete(_ev: BeButtonEvent): boolean {\r\n return (2 === this.accepted.length);\r\n }\r\n\r\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n const vp = this.targetView;\r\n if (undefined === vp)\r\n return;\r\n\r\n if (0 === this.accepted.length) {\r\n if (!isDynamics)\r\n this.accepted.push(ev.point.clone());\r\n return;\r\n }\r\n\r\n const vector0 = Vector3d.createStartEnd(this.accepted[0], ev.point);\r\n const radius = (this.useRadius ? this.radius : vector0.magnitude());\r\n\r\n if (!this.useRadius) {\r\n this.radius = radius;\r\n this.syncToolSettingPropertyValue(this.radiusProperty);\r\n }\r\n\r\n if (undefined === vector0.scaleToLength(radius, vector0)) {\r\n this.current = undefined;\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\r\n const vector90 = normal.crossProduct(vector0);\r\n const matrix = Matrix3d.createColumns(vector0, vector90, normal);\r\n\r\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(matrix);\r\n this.current = Sphere.createFromAxesAndScales(this.accepted[0], this.baseRotation, radius, radius, radius, undefined, this.capped);\r\n\r\n if (isDynamics || undefined === this.current)\r\n return;\r\n\r\n this.accepted.push(ev.point.clone());\r\n }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n return (property === this.useRadiusProperty ? this.radiusProperty : undefined);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.radiusProperty, this.useRadiusProperty, this.cappedProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n this.radiusProperty.isDisabled = !this.useRadius;\r\n const useRadiusLock = this.useRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.radiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useRadiusLock));\r\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CreateSphereTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Values for [[CreateCylinderTool.createPhase]. */\r\nexport enum CreateCylinderPhase {\r\n /** Current tool phase to define center of base */\r\n AcceptBase,\r\n /** Current tool phase to define radius or base axes */\r\n AcceptRadius,\r\n /** Current tool phase to define length or axis */\r\n AcceptLength,\r\n /** Current tool phase to accept result */\r\n AcceptResult,\r\n}\r\n\r\n/** @alpha Creates a cylinder. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\r\nexport class CreateCylinderTool extends SolidPrimitiveTool {\r\n public static override toolId = \"CreateCylinder\";\r\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\r\n\r\n protected createPhase = CreateCylinderPhase.AcceptBase;\r\n\r\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n switch (this.createPhase) {\r\n case CreateCylinderPhase.AcceptBase:\r\n mainInstrText = EditTools.translate(\"CreateCylinder.Prompts.BasePoint\");\r\n break;\r\n case CreateCylinderPhase.AcceptRadius:\r\n mainInstrText = EditTools.translate(\"CreateCylinder.Prompts.RadiusPoint\");\r\n break;\r\n default:\r\n mainInstrText = EditTools.translate(\"CreateCylinder.Prompts.LengthPoint\");\r\n break;\r\n }\r\n\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const nPts = this.accepted.length;\r\n if (0 === nPts)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.setModePolar();\r\n hints.setOrigin(this.accepted[0]);\r\n hints.setOriginFixed = true;\r\n\r\n if (CreateCylinderPhase.AcceptLength === this.createPhase && undefined !== this.baseRotation) {\r\n hints.setXAxis2(this.baseRotation.getColumn(2));\r\n\r\n if (this.orthogonal) {\r\n hints.setModeRectangular();\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n }\r\n }\r\n\r\n hints.sendHints();\r\n }\r\n\r\n private _useRadiusProperty: DialogProperty<boolean> | undefined;\r\n public get useRadiusProperty() {\r\n if (!this._useRadiusProperty)\r\n this._useRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useCylinderRadius\"), false);\r\n return this._useRadiusProperty;\r\n }\r\n\r\n public get useRadius(): boolean { return this.useRadiusProperty.value; }\r\n public set useRadius(value: boolean) { this.useRadiusProperty.value = value; }\r\n\r\n private _radiusProperty: DialogProperty<number> | undefined;\r\n public get radiusProperty() {\r\n if (!this._radiusProperty)\r\n this._radiusProperty = new DialogProperty<number>(new LengthDescription(\"cylinderRadius\", EditTools.translate(\"CreateCylinder.Label.Radius\")), 0.1, undefined, !this.useRadius);\r\n return this._radiusProperty;\r\n }\r\n\r\n public get radius(): number { return this.radiusProperty.value; }\r\n public set radius(value: number) { this.radiusProperty.value = value; }\r\n\r\n private _useLengthProperty: DialogProperty<boolean> | undefined;\r\n public get useLengthProperty() {\r\n if (!this._useLengthProperty)\r\n this._useLengthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useCylinderLength\"), false);\r\n return this._useLengthProperty;\r\n }\r\n\r\n public get useLength(): boolean { return this.useLengthProperty.value; }\r\n public set useLength(value: boolean) { this.useLengthProperty.value = value; }\r\n\r\n private _lengthProperty: DialogProperty<number> | undefined;\r\n public get lengthProperty() {\r\n if (!this._lengthProperty)\r\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"cylinderLength\", EditTools.translate(\"CreateCylinder.Label.Length\")), 0.1, undefined, !this.useLength);\r\n return this._lengthProperty;\r\n }\r\n\r\n public get length(): number { return this.lengthProperty.value; }\r\n public set length(value: number) { this.lengthProperty.value = value; }\r\n\r\n private _cappedProperty: DialogProperty<boolean> | undefined;\r\n public get cappedProperty() {\r\n if (!this._cappedProperty)\r\n this._cappedProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"cylinderCapped\", EditTools.translate(\"CreateCylinder.Label.Capped\")), true);\r\n return this._cappedProperty;\r\n }\r\n\r\n public get capped(): boolean { return this.cappedProperty.value; }\r\n public set capped(value: boolean) { this.cappedProperty.value = value; }\r\n\r\n private _orthogonalProperty: DialogProperty<boolean> | undefined;\r\n public get orthogonalProperty() {\r\n if (!this._orthogonalProperty)\r\n this._orthogonalProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"cylinderOrthogonal\", EditTools.translate(\"CreateCylinder.Label.Orthogonal\")), true);\r\n return this._orthogonalProperty;\r\n }\r\n\r\n public get orthogonal(): boolean { return this.orthogonalProperty.value; }\r\n public set orthogonal(value: boolean) { this.orthogonalProperty.value = value; }\r\n\r\n protected override isComplete(_ev: BeButtonEvent): boolean {\r\n return (CreateCylinderPhase.AcceptResult === this.createPhase);\r\n }\r\n\r\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n const vp = this.targetView;\r\n if (undefined === vp)\r\n return;\r\n\r\n const pt1 = (0 === this.accepted.length ? ev.point : this.accepted[0]);\r\n const pt2 = ev.point;\r\n\r\n switch (this.createPhase) {\r\n case CreateCylinderPhase.AcceptBase: {\r\n if (isDynamics)\r\n break;\r\n\r\n // Allow creating cylinder by 2 points when orthogonal and radius are locked...\r\n this.accepted.push(pt2.clone());\r\n this.createPhase = (this.orthogonal && this.useRadius ? CreateCylinderPhase.AcceptLength : CreateCylinderPhase.AcceptRadius);\r\n break;\r\n }\r\n\r\n case CreateCylinderPhase.AcceptRadius: {\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\r\n const vector0 = Vector3d.createStartEnd(pt1, pt2);\r\n const vector90 = normal.crossProduct(vector0);\r\n const radius = (this.useRadius ? this.radius : vector0.magnitude());\r\n\r\n if (!this.useRadius) {\r\n this.radius = radius;\r\n this.syncToolSettingPropertyValue(this.radiusProperty);\r\n }\r\n\r\n if (undefined === vector0.scaleToLength(radius, vector0) || undefined === vector90.scaleToLength(radius, vector90)) {\r\n this.current = undefined;\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n const arc = Arc3d.create(pt1, vector0, vector90);\r\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(arc.matrixRef); // Update base rotation from result arc...\r\n this.current = (this.capped ? Loop.create(arc) : arc);\r\n\r\n if (isDynamics)\r\n break;\r\n\r\n this.createPhase = CreateCylinderPhase.AcceptLength;\r\n break;\r\n }\r\n\r\n case CreateCylinderPhase.AcceptLength: {\r\n const zAxis = Vector3d.createStartEnd(pt1, pt2);\r\n const length = (this.useLength ? this.length : zAxis.magnitude());\r\n\r\n if (!this.useLength) {\r\n this.length = length;\r\n this.syncToolSettingPropertyValue(this.lengthProperty);\r\n }\r\n\r\n // Establish base rotation when creating cylinder by 2 points...\r\n if (undefined === this.baseRotation)\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\r\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\r\n\r\n if (undefined === zAxis.scaleToLength(length, zAxis)) {\r\n xAxis.scaleToLength(this.radius, xAxis);\r\n yAxis.scaleToLength(this.radius, yAxis);\r\n\r\n const baseArc = Arc3d.create(pt1, xAxis, yAxis);\r\n this.current = (this.capped ? Loop.create(baseArc) : baseArc);\r\n return;\r\n }\r\n\r\n if (this.orthogonal)\r\n this.current = Cone.createAxisPoints(pt1, pt1.plus(zAxis), this.radius, this.radius, this.capped);\r\n else\r\n this.current = Cone.createBaseAndTarget(pt1, pt1.plus(zAxis), xAxis, yAxis, this.radius, this.radius, this.capped);\r\n\r\n if (isDynamics || undefined === this.current)\r\n break;\r\n\r\n this.createPhase = CreateCylinderPhase.AcceptResult;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n if (property === this.useRadiusProperty)\r\n return this.radiusProperty;\r\n else if (property === this.useLengthProperty)\r\n return this.lengthProperty;\r\n return undefined;\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.radiusProperty, this.useRadiusProperty, this.lengthProperty, this.useLengthProperty, this.orthogonalProperty, this.cappedProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n this.radiusProperty.isDisabled = !this.useRadius;\r\n const useRadiusLock = this.useRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.radiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useRadiusLock));\r\n\r\n this.lengthProperty.isDisabled = !this.useLength;\r\n const useLengthLock = this.useLengthProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\r\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useLengthLock));\r\n\r\n toolSettings.push(this.orthogonalProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 }));\r\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CreateCylinderTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Values for [[CreateConeTool.createPhase]. */\r\nexport enum CreateConePhase {\r\n /** Current tool phase to define center of base */\r\n AcceptBase,\r\n /** Current tool phase to define base radius or base axes */\r\n AcceptBaseRadius,\r\n /** Current tool phase to define length or axis */\r\n AcceptLength,\r\n /** Current tool phase to define top radius */\r\n AcceptTopRadius,\r\n /** Current tool phase to accept result */\r\n AcceptResult,\r\n}\r\n\r\n/** @alpha Creates a cone. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\r\nexport class CreateConeTool extends SolidPrimitiveTool {\r\n public static override toolId = \"CreateCone\";\r\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\r\n\r\n protected createPhase = CreateConePhase.AcceptBase;\r\n\r\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n switch (this.createPhase) {\r\n case CreateConePhase.AcceptBase:\r\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.BasePoint\");\r\n break;\r\n case CreateConePhase.AcceptBaseRadius:\r\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.BaseRadiusPoint\");\r\n break;\r\n case CreateConePhase.AcceptTopRadius:\r\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.TopRadiusPoint\");\r\n break;\r\n default:\r\n mainInstrText = EditTools.translate(\"CreateCone.Prompts.LengthPoint\");\r\n break;\r\n }\r\n\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const nPts = this.accepted.length;\r\n if (0 === nPts)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.setModePolar();\r\n hints.setOrigin(this.accepted[0]);\r\n hints.setOriginFixed = true;\r\n\r\n if (CreateConePhase.AcceptTopRadius === this.createPhase && 2 === nPts) {\r\n hints.setOrigin(this.accepted[1]);\r\n if (undefined !== this.baseRotation)\r\n hints.setMatrix(this.baseRotation);\r\n } else if (CreateConePhase.AcceptLength === this.createPhase && undefined !== this.baseRotation) {\r\n hints.setXAxis2(this.baseRotation.getColumn(2));\r\n\r\n if (this.orthogonal) {\r\n hints.setModeRectangular();\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n }\r\n }\r\n\r\n hints.sendHints();\r\n }\r\n\r\n private _useBaseRadiusProperty: DialogProperty<boolean> | undefined;\r\n public get useBaseRadiusProperty() {\r\n if (!this._useBaseRadiusProperty)\r\n this._useBaseRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useConeBaseRadius\"), false);\r\n return this._useBaseRadiusProperty;\r\n }\r\n\r\n public get useBaseRadius(): boolean { return this.useBaseRadiusProperty.value; }\r\n public set useBaseRadius(value: boolean) { this.useBaseRadiusProperty.value = value; }\r\n\r\n private _baseRadiusProperty: DialogProperty<number> | undefined;\r\n public get baseRadiusProperty() {\r\n if (!this._baseRadiusProperty)\r\n this._baseRadiusProperty = new DialogProperty<number>(new LengthDescription(\"coneBaseRadius\", EditTools.translate(\"CreateCone.Label.BaseRadius\")), 0.1, undefined, !this.useBaseRadius);\r\n return this._baseRadiusProperty;\r\n }\r\n\r\n public get baseRadius(): number { return this.baseRadiusProperty.value; }\r\n public set baseRadius(value: number) { this.baseRadiusProperty.value = value; }\r\n\r\n private _useTopRadiusProperty: DialogProperty<boolean> | undefined;\r\n public get useTopRadiusProperty() {\r\n if (!this._useTopRadiusProperty)\r\n this._useTopRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useConeTopRadius\"), false);\r\n return this._useTopRadiusProperty;\r\n }\r\n\r\n public get useTopRadius(): boolean { return this.useTopRadiusProperty.value; }\r\n public set useTopRadius(value: boolean) { this.useTopRadiusProperty.value = value; }\r\n\r\n private _topRadiusProperty: DialogProperty<number> | undefined;\r\n public get topRadiusProperty() {\r\n if (!this._topRadiusProperty)\r\n this._topRadiusProperty = new DialogProperty<number>(new LengthDescription(\"coneTopRadius\", EditTools.translate(\"CreateCone.Label.TopRadius\")), 0.1, undefined, !this.useTopRadius);\r\n return this._topRadiusProperty;\r\n }\r\n\r\n public get topRadius(): number { return this.topRadiusProperty.value; }\r\n public set topRadius(value: number) { this.topRadiusProperty.value = value; }\r\n\r\n private _useLengthProperty: DialogProperty<boolean> | undefined;\r\n public get useLengthProperty() {\r\n if (!this._useLengthProperty)\r\n this._useLengthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useConeLength\"), false);\r\n return this._useLengthProperty;\r\n }\r\n\r\n public get useLength(): boolean { return this.useLengthProperty.value; }\r\n public set useLength(value: boolean) { this.useLengthProperty.value = value; }\r\n\r\n private _lengthProperty: DialogProperty<number> | undefined;\r\n public get lengthProperty() {\r\n if (!this._lengthProperty)\r\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"coneLength\", EditTools.translate(\"CreateCone.Label.Length\")), 0.1, undefined, !this.useLength);\r\n return this._lengthProperty;\r\n }\r\n\r\n public get length(): number { return this.lengthProperty.value; }\r\n public set length(value: number) { this.lengthProperty.value = value; }\r\n\r\n private _cappedProperty: DialogProperty<boolean> | undefined;\r\n public get cappedProperty() {\r\n if (!this._cappedProperty)\r\n this._cappedProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"coneCapped\", EditTools.translate(\"CreateCone.Label.Capped\")), true);\r\n return this._cappedProperty;\r\n }\r\n\r\n public get capped(): boolean { return this.cappedProperty.value; }\r\n public set capped(value: boolean) { this.cappedProperty.value = value; }\r\n\r\n private _orthogonalProperty: DialogProperty<boolean> | undefined;\r\n public get orthogonalProperty() {\r\n if (!this._orthogonalProperty)\r\n this._orthogonalProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"coneOrthogonal\", EditTools.translate(\"CreateCone.Label.Orthogonal\")), true);\r\n return this._orthogonalProperty;\r\n }\r\n\r\n public get orthogonal(): boolean { return this.orthogonalProperty.value; }\r\n public set orthogonal(value: boolean) { this.orthogonalProperty.value = value; }\r\n\r\n protected override isComplete(_ev: BeButtonEvent): boolean {\r\n return (CreateConePhase.AcceptResult === this.createPhase);\r\n }\r\n\r\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n const vp = this.targetView;\r\n if (undefined === vp)\r\n return;\r\n\r\n const pt1 = (0 === this.accepted.length ? ev.point : this.accepted[0]);\r\n const pt2 = ev.point;\r\n\r\n switch (this.createPhase) {\r\n case CreateConePhase.AcceptBase: {\r\n if (isDynamics)\r\n break;\r\n\r\n // Allow creating cone by 2 points when orthogonal and base/top radii are locked...\r\n this.accepted.push(pt2.clone());\r\n this.createPhase = (this.orthogonal && this.useBaseRadius ? CreateConePhase.AcceptLength : CreateConePhase.AcceptBaseRadius);\r\n break;\r\n }\r\n\r\n case CreateConePhase.AcceptBaseRadius: {\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\r\n const vector0 = Vector3d.createStartEnd(pt1, pt2);\r\n const vector90 = normal.crossProduct(vector0);\r\n const radius = (this.useBaseRadius ? this.baseRadius : vector0.magnitude());\r\n\r\n if (!this.useBaseRadius) {\r\n this.baseRadius = radius;\r\n this.syncToolSettingPropertyValue(this.baseRadiusProperty);\r\n }\r\n\r\n if (undefined === vector0.scaleToLength(radius, vector0) || undefined === vector90.scaleToLength(radius, vector90)) {\r\n this.current = undefined;\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n const arc = Arc3d.create(pt1, vector0, vector90);\r\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(arc.matrixRef); // Update base rotation from result arc...\r\n this.current = (this.capped ? Loop.create(arc) : arc);\r\n\r\n if (isDynamics)\r\n break;\r\n\r\n this.createPhase = CreateConePhase.AcceptLength;\r\n break;\r\n }\r\n\r\n case CreateConePhase.AcceptLength: {\r\n const zAxis = Vector3d.createStartEnd(pt1, pt2);\r\n const length = (this.useLength ? this.length : zAxis.magnitude());\r\n\r\n if (!this.useLength) {\r\n this.length = length;\r\n this.syncToolSettingPropertyValue(this.lengthProperty);\r\n }\r\n\r\n // Establish base rotation when creating cone by 2 points...\r\n if (undefined === this.baseRotation)\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\r\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\r\n\r\n if (undefined === zAxis.scaleToLength(length, zAxis)) {\r\n xAxis.scaleToLength(this.baseRadius, xAxis);\r\n yAxis.scaleToLength(this.baseRadius, yAxis);\r\n\r\n const baseArc = Arc3d.create(pt1, xAxis, yAxis);\r\n this.current = (this.capped ? Loop.create(baseArc) : baseArc);\r\n return;\r\n }\r\n\r\n if (this.orthogonal)\r\n this.current = Cone.createAxisPoints(pt1, pt1.plus(zAxis), this.baseRadius, this.useTopRadius ? this.topRadius : 0.0, this.capped);\r\n else\r\n this.current = Cone.createBaseAndTarget(pt1, pt1.plus(zAxis), xAxis, yAxis, this.baseRadius, this.useTopRadius ? this.topRadius : 0.0, this.capped);\r\n\r\n if (isDynamics || undefined === this.current)\r\n break;\r\n\r\n const localToWorld = (this.current as Cone).getConstructiveFrame();\r\n if (undefined !== localToWorld)\r\n this.baseRotation = localToWorld.matrix; // Update base rotation from result for AccuDraw hints...\r\n\r\n this.accepted.push((this.current as Cone).getCenterB()); // Add top center to accepted points for AccuDraw hints...\r\n this.createPhase = this.useTopRadius ? CreateConePhase.AcceptResult : CreateConePhase.AcceptTopRadius;\r\n break;\r\n }\r\n\r\n case CreateConePhase.AcceptTopRadius: {\r\n const cone = (\"solid\" === this.current?.geometryCategory ? (this.current as Cone) : undefined);\r\n if (undefined === cone)\r\n break;\r\n\r\n const vector0 = Vector3d.createStartEnd(cone.getCenterB(), pt2);\r\n const radius = (this.useTopRadius ? this.topRadius : vector0.magnitude());\r\n\r\n if (!this.useTopRadius) {\r\n this.topRadius = radius;\r\n this.syncToolSettingPropertyValue(this.topRadiusProperty);\r\n }\r\n\r\n this.current = Cone.createBaseAndTarget(cone.getCenterA(), cone.getCenterB(), cone.getVectorX(), cone.getVectorY(), cone.getRadiusA(), radius, this.capped);\r\n\r\n if (isDynamics)\r\n break;\r\n\r\n this.createPhase = CreateConePhase.AcceptResult;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n if (property === this.useBaseRadiusProperty)\r\n return this.baseRadiusProperty;\r\n else if (property === this.useTopRadiusProperty)\r\n return this.topRadiusProperty;\r\n else if (property === this.useLengthProperty)\r\n return this.lengthProperty;\r\n return undefined;\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.baseRadiusProperty, this.useBaseRadiusProperty, this.topRadiusProperty, this.useTopRadiusProperty, this.lengthProperty, this.useLengthProperty, this.orthogonalProperty, this.cappedProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n this.baseRadiusProperty.isDisabled = !this.useBaseRadius;\r\n const useBaseRadiusLock = this.useBaseRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.baseRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useBaseRadiusLock));\r\n\r\n this.topRadiusProperty.isDisabled = !this.useTopRadius;\r\n const useTopRadiusLock = this.useTopRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\r\n toolSettings.push(this.topRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useTopRadiusLock));\r\n\r\n this.lengthProperty.isDisabled = !this.useLength;\r\n const useLengthLock = this.useLengthProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\r\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useLengthLock));\r\n\r\n toolSettings.push(this.orthogonalProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\r\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 5, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CreateConeTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Creates a bix. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\r\nexport class CreateBoxTool extends SolidPrimitiveTool {\r\n public static override toolId = \"CreateBox\";\r\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\r\n\r\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n switch (this.accepted.length) {\r\n case 0:\r\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.BasePoint\");\r\n break;\r\n case 1:\r\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.LengthPoint\");\r\n break;\r\n case 2:\r\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.WidthPoint\");\r\n break;\r\n default:\r\n mainInstrText = EditTools.translate(\"CreateBox.Prompts.HeightPoint\");\r\n break;\r\n }\r\n\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const nPts = this.accepted.length;\r\n if (0 === nPts)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.setModeRectangular();\r\n hints.setOrigin(this.accepted[0]);\r\n hints.setOriginFixed = true;\r\n\r\n if (undefined !== this.baseRotation) {\r\n if (2 === nPts) {\r\n hints.setMatrix(this.baseRotation);\r\n hints.setLockX = true;\r\n hints.setLockZ = true;\r\n } else if (3 === nPts) {\r\n hints.setXAxis2(this.baseRotation.getColumn(2));\r\n if (this.orthogonal) {\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n }\r\n }\r\n }\r\n\r\n hints.sendHints();\r\n }\r\n\r\n private _useLengthProperty: DialogProperty<boolean> | undefined;\r\n public get useLengthProperty() {\r\n if (!this._useLengthProperty)\r\n this._useLengthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useBoxLength\"), false);\r\n return this._useLengthProperty;\r\n }\r\n\r\n public get useLength(): boolean { return this.useLengthProperty.value; }\r\n public set useLength(value: boolean) { this.useLengthProperty.value = value; }\r\n\r\n private _lengthProperty: DialogProperty<number> | undefined;\r\n public get lengthProperty() {\r\n if (!this._lengthProperty)\r\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"boxLength\", EditTools.translate(\"CreateBox.Label.Length\")), 0.1, undefined, !this.useLength);\r\n return this._lengthProperty;\r\n }\r\n\r\n public get length(): number { return this.lengthProperty.value; }\r\n public set length(value: number) { this.lengthProperty.value = value; }\r\n\r\n private _useWidthProperty: DialogProperty<boolean> | undefined;\r\n public get useWidthProperty() {\r\n if (!this._useWidthProperty)\r\n this._useWidthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useBoxWidth\"), false);\r\n return this._useWidthProperty;\r\n }\r\n\r\n public get useWidth(): boolean { return this.useWidthProperty.value; }\r\n public set useWidth(value: boolean) { this.useWidthProperty.value = value; }\r\n\r\n private _widthProperty: DialogProperty<number> | undefined;\r\n public get widthProperty() {\r\n if (!this._widthProperty)\r\n this._widthProperty = new DialogProperty<number>(new LengthDescription(\"boxWidth\", EditTools.translate(\"CreateBox.Label.Width\")), 0.1, undefined, !this.useWidth);\r\n return this._widthProperty;\r\n }\r\n\r\n public get width(): number { return this.widthProperty.value; }\r\n public set width(value: number) { this.widthProperty.value = value; }\r\n\r\n private _useHeightProperty: DialogProperty<boolean> | undefined;\r\n public get useHeightProperty() {\r\n if (!this._useHeightProperty)\r\n this._useHeightProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useBoxHeight\"), false);\r\n return this._useHeightProperty;\r\n }\r\n\r\n public get useHeight(): boolean { return this.useHeightProperty.value; }\r\n public set useHeight(value: boolean) { this.useHeightProperty.value = value; }\r\n\r\n private _heightProperty: DialogProperty<number> | undefined;\r\n public get heightProperty() {\r\n if (!this._heightProperty)\r\n this._heightProperty = new DialogProperty<number>(new LengthDescription(\"boxHeight\", EditTools.translate(\"CreateBox.Label.Height\")), 0.1, undefined, !this.useHeight);\r\n return this._heightProperty;\r\n }\r\n\r\n public get height(): number { return this.heightProperty.value; }\r\n public set height(value: number) { this.heightProperty.value = value; }\r\n\r\n private _cappedProperty: DialogProperty<boolean> | undefined;\r\n public get cappedProperty() {\r\n if (!this._cappedProperty)\r\n this._cappedProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"boxCapped\", EditTools.translate(\"CreateBox.Label.Capped\")), true);\r\n return this._cappedProperty;\r\n }\r\n\r\n public get capped(): boolean { return this.cappedProperty.value; }\r\n public set capped(value: boolean) { this.cappedProperty.value = value; }\r\n\r\n private _orthogonalProperty: DialogProperty<boolean> | undefined;\r\n public get orthogonalProperty() {\r\n if (!this._orthogonalProperty)\r\n this._orthogonalProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"boxOrthogonal\", EditTools.translate(\"CreateBox.Label.Orthogonal\")), true);\r\n return this._orthogonalProperty;\r\n }\r\n\r\n public get orthogonal(): boolean { return this.orthogonalProperty.value; }\r\n public set orthogonal(value: boolean) { this.orthogonalProperty.value = value; }\r\n\r\n protected override isComplete(_ev: BeButtonEvent): boolean {\r\n return (4 === this.accepted.length);\r\n }\r\n\r\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n const vp = this.targetView;\r\n if (undefined === vp)\r\n return;\r\n\r\n switch (this.accepted.length) {\r\n case 0: {\r\n if (!isDynamics)\r\n this.accepted.push(ev.point.clone());\r\n break;\r\n }\r\n\r\n case 1: {\r\n const vector0 = Vector3d.createStartEnd(this.accepted[0], ev.point);\r\n const length = (this.useLength ? this.length : vector0.magnitude());\r\n\r\n if (!this.useLength) {\r\n this.length = length;\r\n this.syncToolSettingPropertyValue(this.lengthProperty);\r\n }\r\n\r\n if (undefined === vector0.scaleToLength(length, vector0)) {\r\n this.current = undefined;\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\r\n const vector90 = normal.crossProduct(vector0);\r\n const matrix = Matrix3d.createColumns(vector0, vector90, normal);\r\n\r\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(matrix);\r\n this.current = LineSegment3d.create(this.accepted[0], this.accepted[0].plus(vector0));\r\n\r\n if (isDynamics)\r\n return;\r\n\r\n this.accepted.push(ev.point.clone());\r\n break;\r\n }\r\n\r\n case 2: {\r\n const vector90 = Vector3d.createStartEnd(this.accepted[0], ev.point);\r\n const width = (this.useWidth ? this.width : vector90.magnitude());\r\n\r\n if (!this.useWidth) {\r\n this.width = width;\r\n this.syncToolSettingPropertyValue(this.widthProperty);\r\n }\r\n\r\n const vector0 = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\r\n const normal = vector90.crossProduct(vector0);\r\n const matrix = Matrix3d.createColumns(vector0, vector90, normal);\r\n\r\n if (undefined === vector90.scaleToLength(width, vector90) || undefined === Matrix3d.createRigidFromMatrix3d(matrix, undefined, matrix)) {\r\n this.current = LineSegment3d.create(this.accepted[0], this.accepted[0].plusScaled(vector0, this.length));\r\n return;\r\n }\r\n\r\n this.baseRotation = matrix; // Update base rotation from cross product...\r\n\r\n const shapePts: Point3d[] = [];\r\n shapePts[0] = this.accepted[0].clone();\r\n shapePts[1] = shapePts[0].plusScaled(this.baseRotation.getColumn(0), this.length);\r\n shapePts[2] = shapePts[1].plusScaled(this.baseRotation.getColumn(1), width);\r\n shapePts[3] = shapePts[0].plusScaled(this.baseRotation.getColumn(1), width);\r\n shapePts[4] = shapePts[0].clone();\r\n\r\n const base = LineString3d.create(shapePts);\r\n this.current = (this.capped ? Loop.create(base) : base);\r\n\r\n if (isDynamics)\r\n return;\r\n\r\n this.accepted.push(ev.point.clone());\r\n break;\r\n }\r\n\r\n default: {\r\n if (undefined === this.baseRotation)\r\n return; // Should always have base rotation after width is defined...\r\n\r\n const zAxis = Vector3d.createStartEnd(this.accepted[0], ev.point);\r\n const height = (this.useHeight ? this.height : zAxis.magnitude());\r\n\r\n if (!this.useHeight) {\r\n this.height = height;\r\n this.syncToolSettingPropertyValue(this.heightProperty);\r\n }\r\n\r\n if (undefined === zAxis.scaleToLength(height, zAxis)) {\r\n const shapePts: Point3d[] = [];\r\n shapePts[0] = this.accepted[0].clone();\r\n shapePts[1] = shapePts[0].plusScaled(this.baseRotation.getColumn(0), this.length);\r\n shapePts[2] = shapePts[1].plusScaled(this.baseRotation.getColumn(1), this.width);\r\n shapePts[3] = shapePts[0].plusScaled(this.baseRotation.getColumn(1), this.width);\r\n shapePts[4] = shapePts[0].clone();\r\n\r\n const base = LineString3d.create(shapePts);\r\n this.current = (this.capped ? Loop.create(base) : base);\r\n return;\r\n }\r\n\r\n if (this.orthogonal) {\r\n const normal = this.baseRotation.getColumn(2);\r\n normal.scaleToLength(normal.dotProduct(zAxis) >= 0.0 ? height : -height, zAxis);\r\n }\r\n\r\n this.current = Box.createDgnBoxWithAxes(this.accepted[0], this.baseRotation, this.accepted[0].plus(zAxis), this.length, this.width, this.length, this.width, this.capped);\r\n\r\n if (isDynamics || undefined === this.current)\r\n return;\r\n\r\n this.accepted.push(ev.point.clone());\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n if (property === this.useLengthProperty)\r\n return this.lengthProperty;\r\n else if (property === this.useWidthProperty)\r\n return this.widthProperty;\r\n else if (property === this.useHeightProperty)\r\n return this.heightProperty;\r\n return undefined;\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.lengthProperty, this.useLengthProperty, this.widthProperty, this.useWidthProperty, this.heightProperty, this.useHeightProperty, this.orthogonalProperty, this.cappedProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n this.lengthProperty.isDisabled = !this.useLength;\r\n const useLengthLock = this.useLengthProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useLengthLock));\r\n\r\n this.widthProperty.isDisabled = !this.useWidth;\r\n const useWidthLock = this.useWidthProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\r\n toolSettings.push(this.widthProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useWidthLock));\r\n\r\n this.heightProperty.isDisabled = !this.useHeight;\r\n const useHeightLock = this.useHeightProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\r\n toolSettings.push(this.heightProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useHeightLock));\r\n\r\n toolSettings.push(this.orthogonalProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\r\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 5, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CreateBoxTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Values for [[CreateTorusTool.createPhase]. */\r\nexport enum CreateTorusPhase {\r\n /** Current tool phase to define start point */\r\n AcceptStart,\r\n /** Current tool phase to define center point */\r\n AcceptCenter,\r\n /** Current tool phase to define secondary radius */\r\n AcceptSecondaryRadius,\r\n /** Current tool phase to define sweep angle */\r\n AcceptAngle,\r\n /** Current tool phase to accept result */\r\n AcceptResult,\r\n}\r\n\r\n/** @alpha Creates a torus pipe. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */\r\nexport class CreateTorusTool extends SolidPrimitiveTool {\r\n public static override toolId = \"CreateTorus\";\r\n public static override iconSpec = \"icon-circle\"; // TODO: Need better icon...\r\n\r\n protected createPhase = CreateTorusPhase.AcceptStart;\r\n\r\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n switch (this.createPhase) {\r\n case CreateTorusPhase.AcceptStart:\r\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.StartPoint\");\r\n break;\r\n case CreateTorusPhase.AcceptCenter:\r\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.CenterPoint\");\r\n break;\r\n case CreateTorusPhase.AcceptSecondaryRadius:\r\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.SecondaryRadiusPoint\");\r\n break;\r\n default:\r\n mainInstrText = EditTools.translate(\"CreateTorus.Prompts.AnglePoint\");\r\n break;\r\n }\r\n\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const nPts = this.accepted.length;\r\n if (0 === nPts)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (CreateTorusPhase.AcceptCenter === this.createPhase) {\r\n hints.setOrigin(this.accepted[0]);\r\n } else if (CreateTorusPhase.AcceptSecondaryRadius === this.createPhase) {\r\n hints.setModePolar();\r\n hints.setOrigin(this.accepted[0]);\r\n hints.setOriginFixed = true;\r\n if (undefined !== this.baseRotation)\r\n hints.setMatrix(Matrix3d.createColumns(this.baseRotation.getColumn(0), this.baseRotation.getColumn(2), this.baseRotation.getColumn(1)));\r\n } else if (CreateTorusPhase.AcceptAngle === this.createPhase && 2 === nPts) {\r\n hints.setModePolar();\r\n hints.setOrigin(this.accepted[1]);\r\n hints.setOriginFixed = true;\r\n if (undefined !== this.baseRotation)\r\n hints.setMatrix(this.baseRotation);\r\n }\r\n\r\n hints.sendHints();\r\n }\r\n\r\n private _usePrimaryRadiusProperty: DialogProperty<boolean> | undefined;\r\n public get usePrimaryRadiusProperty() {\r\n if (!this._usePrimaryRadiusProperty)\r\n this._usePrimaryRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useTorusPrimaryRadius\"), false);\r\n return this._usePrimaryRadiusProperty;\r\n }\r\n\r\n public get usePrimaryRadius(): boolean { return this.usePrimaryRadiusProperty.value; }\r\n public set usePrimaryRadius(value: boolean) { this.usePrimaryRadiusProperty.value = value; }\r\n\r\n private _primaryRadiusProperty: DialogProperty<number> | undefined;\r\n public get primaryRadiusProperty() {\r\n if (!this._primaryRadiusProperty)\r\n this._primaryRadiusProperty = new DialogProperty<number>(new LengthDescription(\"torusPrimaryRadius\", EditTools.translate(\"CreateTorus.Label.PrimaryRadius\")), 0.1, undefined, !this.usePrimaryRadius);\r\n return this._primaryRadiusProperty;\r\n }\r\n\r\n public get primaryRadius(): number { return this.primaryRadiusProperty.value; }\r\n public set primaryRadius(value: number) { this.primaryRadiusProperty.value = value; }\r\n\r\n private _useSecondaryRadiusProperty: DialogProperty<boolean> | undefined;\r\n public get useSecondaryRadiusProperty() {\r\n if (!this._useSecondaryRadiusProperty)\r\n this._useSecondaryRadiusProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useTorusSecondaryRadius\"), false);\r\n return this._useSecondaryRadiusProperty;\r\n }\r\n\r\n public get useSecondaryRadius(): boolean { return this.useSecondaryRadiusProperty.value; }\r\n public set useSecondaryRadius(value: boolean) { this.useSecondaryRadiusProperty.value = value; }\r\n\r\n private _secondaryRadiusProperty: DialogProperty<number> | undefined;\r\n public get secondaryRadiusProperty() {\r\n if (!this._secondaryRadiusProperty)\r\n this._secondaryRadiusProperty = new DialogProperty<number>(new LengthDescription(\"torusSecondaryRadius\", EditTools.translate(\"CreateTorus.Label.SecondaryRadius\")), 0.05, undefined, !this.useSecondaryRadius);\r\n return this._secondaryRadiusProperty;\r\n }\r\n\r\n public get secondaryRadius(): number { return this.secondaryRadiusProperty.value; }\r\n public set secondaryRadius(value: number) { this.secondaryRadiusProperty.value = value; }\r\n\r\n private _useAngleProperty: DialogProperty<boolean> | undefined;\r\n public get useAngleProperty() {\r\n if (!this._useAngleProperty)\r\n this._useAngleProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useTorusAngle\"), false);\r\n return this._useAngleProperty;\r\n }\r\n\r\n public get useAngle(): boolean { return this.useAngleProperty.value; }\r\n public set useAngle(value: boolean) { this.useAngleProperty.value = value; }\r\n\r\n private _angleProperty: DialogProperty<number> | undefined;\r\n public get angleProperty() {\r\n if (!this._angleProperty)\r\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"torusAngle\", EditTools.translate(\"CreateTorus.Label.Angle\")), Math.PI / 2.0, undefined, !this.useAngle);\r\n return this._angleProperty;\r\n }\r\n\r\n public get angle(): number { return this.angleProperty.value; }\r\n public set angle(value: number) { this.angleProperty.value = value; }\r\n\r\n private _cappedProperty: DialogProperty<boolean> | undefined;\r\n public get cappedProperty() {\r\n if (!this._cappedProperty)\r\n this._cappedProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"torusCapped\", EditTools.translate(\"CreateTorus.Label.Capped\")), true);\r\n return this._cappedProperty;\r\n }\r\n\r\n public get capped(): boolean { return this.cappedProperty.value; }\r\n public set capped(value: boolean) { this.cappedProperty.value = value; }\r\n\r\n protected override isComplete(_ev: BeButtonEvent): boolean {\r\n return (CreateTorusPhase.AcceptResult === this.createPhase);\r\n }\r\n\r\n protected override async updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n const vp = this.targetView;\r\n if (undefined === vp)\r\n return;\r\n\r\n switch (this.createPhase) {\r\n case CreateTorusPhase.AcceptStart: {\r\n if (isDynamics)\r\n break;\r\n\r\n this.accepted.push(ev.point.clone());\r\n this.createPhase = CreateTorusPhase.AcceptCenter;\r\n break;\r\n }\r\n\r\n case CreateTorusPhase.AcceptCenter: {\r\n this.baseRotation = AccuDrawHintBuilder.getCurrentRotation(vp, true, true);\r\n\r\n const normal = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\r\n const vector0 = Vector3d.createStartEnd(ev.point, this.accepted[0]);\r\n const vector90 = normal.crossProduct(vector0);\r\n const primaryRadius = (this.usePrimaryRadius ? this.primaryRadius : vector0.magnitude());\r\n\r\n if (!this.usePrimaryRadius) {\r\n this.primaryRadius = primaryRadius;\r\n this.syncToolSettingPropertyValue(this.primaryRadiusProperty);\r\n }\r\n\r\n if (undefined === vector0.scaleToLength(primaryRadius, vector0) || undefined === vector90.scaleToLength(primaryRadius, vector90)) {\r\n this.current = undefined;\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n const center = this.accepted[0].plus(vector0.negate());\r\n const allowComplete = (this.useSecondaryRadius && this.useAngle && (2 * Math.PI) === this.angle);\r\n\r\n if (allowComplete) {\r\n vector0.normalizeInPlace();\r\n vector90.normalizeInPlace();\r\n\r\n this.current = TorusPipe.createDgnTorusPipe(center, vector0, vector90, primaryRadius, this.secondaryRadius, Angle.createRadians(this.angle), this.capped);\r\n\r\n if (undefined === this.current) {\r\n this.clearGraphics();\r\n break;\r\n }\r\n\r\n if (!isDynamics)\r\n this.createPhase = CreateTorusPhase.AcceptResult;\r\n break;\r\n }\r\n\r\n const arc = Arc3d.create(center, vector0, vector90);\r\n this.baseRotation = Matrix3d.createRigidFromMatrix3d(arc.matrixRef); // Update base rotation from result arc...\r\n this.current = arc;\r\n\r\n if (isDynamics)\r\n break;\r\n\r\n this.accepted.push(arc.center); // Add center to accepted points for AccuDraw hints...\r\n this.createPhase = (this.useSecondaryRadius ? CreateTorusPhase.AcceptAngle : CreateTorusPhase.AcceptSecondaryRadius);\r\n break;\r\n }\r\n\r\n case CreateTorusPhase.AcceptSecondaryRadius: {\r\n const vector0 = Vector3d.createStartEnd(this.accepted[0], ev.point);\r\n const secondaryRadius = (this.useSecondaryRadius ? this.secondaryRadius : Math.min(this.primaryRadius, vector0.magnitude()));\r\n\r\n if (!this.useSecondaryRadius) {\r\n this.secondaryRadius = secondaryRadius;\r\n this.syncToolSettingPropertyValue(this.secondaryRadiusProperty);\r\n }\r\n\r\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\r\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\r\n\r\n if (undefined === vector0.scaleToLength(secondaryRadius, vector0)) {\r\n xAxis.scaleToLength(this.primaryRadius, xAxis);\r\n yAxis.scaleToLength(this.primaryRadius, yAxis);\r\n\r\n this.current = Arc3d.create(this.accepted[1], xAxis, yAxis);\r\n return;\r\n }\r\n\r\n const sweep = Angle.createRadians(this.useAngle ? this.angle : 2 * Math.PI);\r\n this.current = TorusPipe.createDgnTorusPipe(this.accepted[1], xAxis, yAxis, this.primaryRadius, secondaryRadius, sweep, this.capped);\r\n\r\n if (undefined === this.current) {\r\n this.clearGraphics();\r\n break;\r\n }\r\n\r\n if (!isDynamics)\r\n this.createPhase = ((this.useAngle && (2 * Math.PI) === this.angle) ? CreateTorusPhase.AcceptResult : CreateTorusPhase.AcceptAngle);\r\n break;\r\n }\r\n\r\n case CreateTorusPhase.AcceptAngle: {\r\n const vector90 = Vector3d.createStartEnd(this.accepted[1], ev.point);\r\n\r\n const xAxis = this.baseRotation ? this.baseRotation.getColumn(0) : Vector3d.unitX();\r\n const yAxis = this.baseRotation ? this.baseRotation.getColumn(1) : Vector3d.unitY();\r\n const zAxis = this.baseRotation ? this.baseRotation.getColumn(2) : Vector3d.unitZ();\r\n\r\n const prevSweep = Angle.createRadians(this.angle);\r\n const sweep = xAxis.planarAngleTo(vector90, zAxis);\r\n\r\n if (Math.abs(sweep.radians) < Angle.createDegrees(30.0).radians && prevSweep.isFullCircle && ((sweep.radians < 0.0 && prevSweep.radians > 0.0) || (sweep.radians > 0.0 && prevSweep.radians < 0.0)))\r\n prevSweep.setRadians(-prevSweep.radians); // Reverse direction...\r\n\r\n if (sweep.isAlmostZero)\r\n sweep.setDegrees(prevSweep.radians < 0.0 ? -360.0 : 360.0); // Create full sweep...\r\n\r\n if (this.useAngle) {\r\n if ((sweep.radians < 0.0 && this.angle > 0.0) || (sweep.radians > 0.0 && this.angle < 0.0))\r\n sweep.setRadians(-this.angle);\r\n else\r\n sweep.setRadians(this.angle);\r\n } else {\r\n if (sweep.radians < 0.0 && prevSweep.radians > 0.0)\r\n sweep.setRadians(Angle.pi2Radians + sweep.radians);\r\n else if (sweep.radians > 0.0 && prevSweep.radians < 0.0)\r\n sweep.setRadians(-(Angle.pi2Radians - sweep.radians));\r\n\r\n this.angle = sweep.radians;\r\n this.syncToolSettingPropertyValue(this.angleProperty);\r\n }\r\n\r\n this.current = TorusPipe.createDgnTorusPipe(this.accepted[1], xAxis, yAxis, this.primaryRadius, this.secondaryRadius, sweep, this.capped);\r\n\r\n if (undefined === this.current) {\r\n this.clearGraphics();\r\n break;\r\n }\r\n\r\n if (!isDynamics)\r\n this.createPhase = CreateTorusPhase.AcceptResult;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n if (property === this.usePrimaryRadiusProperty)\r\n return this.primaryRadiusProperty;\r\n else if (property === this.useSecondaryRadiusProperty)\r\n return this.secondaryRadiusProperty;\r\n else if (property === this.useAngleProperty)\r\n return this.angleProperty;\r\n return undefined;\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.primaryRadiusProperty, this.usePrimaryRadiusProperty, this.secondaryRadiusProperty, this.useSecondaryRadiusProperty, this.angleProperty, this.useAngleProperty, this.cappedProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n this.primaryRadiusProperty.isDisabled = !this.usePrimaryRadius;\r\n const usePrimaryRadiusLock = this.usePrimaryRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.primaryRadiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, usePrimaryRadiusLock));\r\n\r\n this.secondaryRadiusProperty.isDisabled = !this.useSecondaryRadius;\r\n const useSecondaryRadiusLock = this.useSecondaryRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 });\r\n toolSettings.push(this.secondaryRadiusProperty.toDialogItem({ rowPriority: 2, columnIndex: 1 }, useSecondaryRadiusLock));\r\n\r\n this.angleProperty.isDisabled = !this.useAngle;\r\n const useAngleLock = this.useAngleProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\r\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useAngleLock));\r\n\r\n toolSettings.push(this.cappedProperty.toDialogItem({ rowPriority: 4, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CreateTorusTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}