@itwin/core-frontend 5.12.0-dev.13 → 5.12.0-dev.15
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.
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +7 -2
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AuxCoordSys.d.ts +11 -4
- package/lib/cjs/AuxCoordSys.d.ts.map +1 -1
- package/lib/cjs/AuxCoordSys.js +12 -6
- package/lib/cjs/AuxCoordSys.js.map +1 -1
- package/lib/cjs/EntityState.js +1 -1
- package/lib/cjs/EntityState.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts +37 -0
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +56 -26
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +20 -3
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +108 -58
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +8 -3
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AuxCoordSys.d.ts +11 -4
- package/lib/esm/AuxCoordSys.d.ts.map +1 -1
- package/lib/esm/AuxCoordSys.js +13 -7
- package/lib/esm/AuxCoordSys.js.map +1 -1
- package/lib/esm/EntityState.js +1 -1
- package/lib/esm/EntityState.js.map +1 -1
- package/lib/esm/IpcApp.d.ts +37 -0
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +56 -27
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/tile/TileRequestChannel.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +20 -3
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +109 -59
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +23 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccuDrawTool.js","sourceRoot":"","sources":["../../../src/tools/AccuDrawTool.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjI,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/I,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAuB,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,+BAA+B;AAE/B,SAAS,oBAAoB,CAAC,MAAe,EAAE,MAAe,EAAE,GAAa;IAC3E,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC9D,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAc,EAAE,IAAc,EAAE,GAAa;IAC3E,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC5B,8CAA8C;IACvC,MAAM,CAAC,aAAa;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,IAAI,QAAQ,CAAC,SAAS;YACpB,QAAQ,CAAC,iBAAiB,EAAE,CAAC;;YAE7B,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAED,qDAAqD;IAC9C,MAAM,CAAC,aAAa;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,QAAQ,CAAC,QAAQ;YACnB,QAAQ,CAAC,UAAU,EAAE,CAAC;;YAEtB,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAEtB,QAAQ,CAAC,6BAA6B,EAAE,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,SAAkB,EAAE,aAAsB;QACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO,KAAK,CAAC;QAEf,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE;YACL,OAAO,KAAK,CAAC;QAEf,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;QAEhB,IAAI,aAAa;YACf,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;;YAE/F,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAEjG,4CAA4C;QAC5C,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,iBAAiB;YAClF,OAAO,KAAK,CAAC;QAEf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ,CAAC,YAAY;YAChD,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEjD,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC;QAClD,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;QAEtC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE1B,kGAAkG;QAClG,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,GAAwB,EAAE,EAAY,EAAE,MAAiB,EAAE,UAAmB;QAC5G,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC7D,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,CAAC;gBACJ,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACtC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC;oBACnD,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACjC,CAAC;gBACD,MAAM;YAER,KAAK,CAAC;gBACJ,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;oBACjE,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;gBACR,CAAC;gBAED,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,IAAI,QAAQ,CAAC,SAAS,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;wBAC5F,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAE1B,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;4BAC7D,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC1B,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjD,CAAC;oBACH,CAAC;oBAED,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE7D,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;wBACtC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7C,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;wBAC7E,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1B,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;YAER,KAAK,CAAC;gBACJ,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;oBAC9D,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;oBAC5D,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;oBAC3D,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;gBACR,CAAC;gBAED,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;QACV,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,mBAAmB;QAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,iBAAiB;QAC7B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED,0CAA0C;IACnC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAgB,EAAE,GAAW,EAAE,OAAgB;QACnF,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC;YAC9B,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,MAAM,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YACpD,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC7D,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,SAAS,CAAC,SAAS;gBACtB,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACvE,MAAM;YAER,KAAK,SAAS,CAAC,UAAU;gBACvB,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACrE,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACnE,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClE,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7H,MAAM;QACV,CAAC;QAED,yGAAyG;QACzG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,KAAgB,IAAU,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,CAAC,uBAAuB,CAAC,KAAgB,IAAU,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEzH,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAgB,EAAE,GAAW;QACpE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACnD,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAEpD,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC;YAC9B,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAElE,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE;gBACL,OAAO;YAET,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW;gBAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;;gBAE3B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAEnC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC7D,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,SAAS,CAAC,SAAS;gBACtB,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC;gBAC7B,MAAM;YAER,KAAK,SAAS,CAAC,UAAU;gBACvB,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;gBACzB,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrD,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3D,MAAM;QACV,CAAC;QACD,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,KAAgB;QAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,SAAS,CAAC,SAAS;oBACtB,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACnC,MAAM;gBAER,KAAK,SAAS,CAAC,UAAU;oBACvB,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACrB,MAAM;gBAER,KAAK,SAAS,CAAC,MAAM;oBACnB,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAC1B,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;oBACrC,MAAM;gBAER,KAAK,SAAS,CAAC,MAAM;oBACnB,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAC1B,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;oBACrC,MAAM;gBAER,KAAK,SAAS,CAAC,MAAM;oBACnB,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAC1B,MAAM;YACV,CAAC;YAED,OAAO;QACT,CAAC;QAED,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,SAAS,CAAC,SAAS;gBACtB,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBACzC,MAAM;YAER,KAAK,SAAS,CAAC,UAAU;gBACvB,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC1C,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACtC,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACtC,MAAM;YAER,KAAK,SAAS,CAAC,MAAM;gBACnB,MAAM;QACV,CAAC;QAED,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC;QAC/B,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,KAAgB;QAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,6BAA6B,EAAE,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,KAAgB;QAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,6BAA6B,EAAE,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,gBAAgB;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,QAAsB;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAExC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC;YAC9E,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAE7C,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;QACvC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,mDAAmD;IAC5C,MAAM,CAAC,SAAS,CAAC,cAAwB;QAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAClD,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QACxC,CAAC;aAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YACzD,kFAAkF;YAClF,MAAM,IAAI,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/F,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC;gBAC/B,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;gBAEpD,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAChB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC5C,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,wEAAwE;oBACxE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClD,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;YACtC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAEhC,0EAA0E;QAC1E,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACvB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;QAEpC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpD,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,aAAa,CAAC,SAAS,CAAC;QACpD,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpB,QAAQ,CAAC,6BAA6B,EAAE,CAAC,CAAC,8DAA8D;IAC1G,CAAC;IAEM,MAAM,CAAC,iBAAiB;QAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;QAE1D,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACrD,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG;oBAChE,cAAc,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBAEvC,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG;oBAChE,cAAc,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACzC,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACrD,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBAE1C,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI;oBACpC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBAC3C,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI;oBACzC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YACD,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QACnC,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,gDAAgD;QAChD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEjB,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW;oBAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;;oBAE3B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5C,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,2BAA2B;gBACxE,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBACnD,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC5C,CAAC;iBAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,8BAA8B;gBACrF,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClD,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC3C,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,0BAA0B;gBAC/E,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC/G,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC;;oBAEtC,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC;gBACxC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,oBAAoB;YACzC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACvC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;gBAC9F,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC,CAAC,uBAAuB;YAC9B,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;oBACzH,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC5B,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBACvB,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC9C,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;gBACrC,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACtC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC/C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC9C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBACvB,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC9C,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;gBACrC,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACtC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC/C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC9C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACnC,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBACrC,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;gBACnD,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,uFAAuF;IAChF,MAAM,CAAC,SAAS;QACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,QAAQ,CAAC,MAAM;gBACjB,IAAI,CAAC,SAAS,EAAE,CAAC;YAEnB,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;oBAC1C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAClD,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,CAAC;gBAED,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;oBACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;oBACzC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAEb,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;wBACzC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;gBAED,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;oBACzC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAEb,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;wBACzC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;gBAED,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxF,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI;wBACrC,IAAI,CAAC,KAAK,EAAE,CAAC;;wBAEb,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE1B,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,IAAI,CAAC,EAAE;gBACL,OAAO;YAET,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACjC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;YACvD,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9C,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE1B,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,IAAI,CAAC,EAAE;gBACL,OAAO;YAET,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACjC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;YACvD,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9C,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACxB,OAAO;QAET,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE5C,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC3C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACxC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;YAChC,CAAC;YACD,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,YAAY;QACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE5C,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YAChC,IAAI,CAAC,EAAE;gBACL,OAAO;YAET,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC3B,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClD,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACzC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,eAAe;gBACxC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC7C,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QACT,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,QAAsB;QACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACvC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC3E,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;YACvC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE;YACL,OAAO;QAET,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC;YACrC,OAAO;QAET,MAAM,YAAY,GAAG,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,CAAC;QACpG,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QACnC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAErC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACrC,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,oBAAoB,EAAE,CAAC;QAE1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,YAAY,KAAW,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEhG,MAAM,CAAC,WAAW;QACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QACT,sEAAsE;QACtE,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACxB,OAAO;QAET,IAAI,QAAsB,CAAC;QAC3B,QAAQ,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC9B,KAAK,YAAY,CAAC,IAAI,CAAC;YACvB,KAAK,YAAY,CAAC,IAAI;gBACpB,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC;gBAC5B,MAAM;YAER,KAAK,YAAY,CAAC,GAAG;gBACnB,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC;gBAC9B,MAAM;YAER,KAAK,YAAY,CAAC,KAAK;gBACrB,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;gBAC7B,MAAM;YAER,KAAK,YAAY,CAAC,OAAO;gBACvB,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC;gBAEhC,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;oBAC7C,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACzC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC;oBACnD,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACvC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAC3E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;wBAC7B,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;gBAC9C,CAAC;gBAED,QAAQ,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACxC,KAAK,YAAY,CAAC,KAAK;wBACrB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC;wBACpD,MAAM;oBAER,KAAK,YAAY,CAAC,IAAI;wBACpB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC;wBACnD,MAAM;oBAER,KAAK,YAAY,CAAC,GAAG;wBACnB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC;wBACrD,MAAM;gBACV,CAAC;gBACD,MAAM;YAER,KAAK,YAAY,CAAC,GAAG;gBACnB,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC;gBAC5B,QAAQ,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACxC,KAAK,YAAY,CAAC,KAAK;wBACrB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC;wBACpD,MAAM;oBACR,KAAK,YAAY,CAAC,IAAI;wBACpB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC;wBACnD,MAAM;oBACR,KAAK,YAAY,CAAC,GAAG;wBACnB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC;wBACrD,MAAM;gBACV,CAAC;gBACD,MAAM;YAER;gBACE,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO;QAET,MAAM,WAAW,GAAG,IAAI,SAAS,EAAE,CAAC;QAEpC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QACvC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAE3B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,CAAC;gBACJ,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM;YAER,KAAK,CAAC;gBACJ,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM;YAER,KAAK,CAAC;gBACJ,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM;QACV,CAAC;QAED,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAsB;QACnD,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,eAAe;QACjC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,kBAAkB;QACpC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC5D,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,iBAAiB;QACnC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC3D,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,SAAkB,EAAE,WAAoB;QACxF,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO,aAAa,CAAC,KAAK,CAAC;QAE7B,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE;YACL,OAAO,aAAa,CAAC,KAAK,CAAC;QAE7B,IAAI,YAAY,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAE7B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,qFAAqF;YACrF,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;YACrC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,OAAO,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAC9B,yCAAyC;YACzC,4GAA4G;YAC5G,wGAAwG;YAExG,0BAA0B;YAC1B,oBAAoB;YAEpB,4GAA4G;YAE5G,2BAA2B;YAC3B,oBAAoB;YAEpB,qEAAqE;YAErE,2BAA2B;YAC3B,oBAAoB;YAEpB,kFAAkF;YAElF,oBAAoB;YACpB,+CAA+C;YAE/C,sBAAsB;YACtB,mDAAmD;YAEnD,0DAA0D;QAC5D,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAErD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;YAChD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACvC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,YAAY,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACrD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;gBAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACvC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAEzB,QAAQ,CAAC,yBAAyB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QACvD,CAAC;QAED,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACrB,OAAO,aAAa,CAAC,KAAK,CAAC;QAE7B,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE;YACL,OAAO,aAAa,CAAC,KAAK,CAAC;QAE7B,kCAAkC;QAClC,0CAA0C;QAC1C,8GAA8G;QAC9G,+BAA+B;QAC/B,kCAAkC;QAClC,sHAAsH;QACtH,qIAAqI;QACrI,gCAAgC;QAEhC,uCAAuC;QACvC,wBAAwB;QACxB,gCAAgC;QAEhC,yCAAyC;QACzC,gCAAgC;QAChC,IAAI;QAEJ,wDAAwD;QAExD,kDAAkD;QAClD,8CAA8C;QAE9C,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,kBAAkB;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,QAAQ,CAAC,SAAS;YACpB,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC/B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,IAAI;IAC1C,MAAM,CAAU,MAAM,GAAG,wBAAwB,CAAC;IACzC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,IAAI;IAC1C,MAAM,CAAU,MAAM,GAAG,wBAAwB,CAAC;IACzC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,IAAI;IACtC,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;IACrC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,wBAAyB,SAAQ,IAAI;IACzC,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;IACrC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,IAAI;IACzC,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;IACrC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,IAAI;IACrC,MAAM,CAAU,MAAM,GAAG,gBAAgB,CAAC;IACjC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,IAAI;IACrC,MAAM,CAAU,MAAM,GAAG,gBAAgB,CAAC;IACjC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,IAAI;IACrC,MAAM,CAAU,MAAM,GAAG,gBAAgB,CAAC;IACjC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,IAAI;IAC5C,MAAM,CAAU,MAAM,GAAG,uBAAuB,CAAC;IACxC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,IAAI;IACzC,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;IACrC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,IAAI;IACvC,MAAM,CAAU,MAAM,GAAG,qBAAqB,CAAC;IACtC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,IAAI;IACxC,MAAM,CAAU,MAAM,GAAG,sBAAsB,CAAC;IACvC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,IAAI;IACtC,MAAM,CAAU,MAAM,GAAG,oBAAoB,CAAC;IACrC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,IAAI;IACxC,MAAM,CAAU,MAAM,GAAG,sBAAsB,CAAC;IACvC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,IAAI;IACvC,MAAM,CAAU,MAAM,GAAG,qBAAqB,CAAC;IACtC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,IAAI;IACvC,MAAM,CAAU,MAAM,GAAG,qBAAqB,CAAC;IACtC,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,IAAI;IAC3C,MAAM,CAAU,MAAM,GAAG,yBAAyB,CAAC;IAC1C,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,IAAI;IAC3C,MAAM,CAAU,MAAM,GAAG,yBAAyB,CAAC;IAC1C,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,IAAI;IAC3C,MAAM,CAAU,MAAM,GAAG,yBAAyB,CAAC;IAC1C,KAAK,CAAC,GAAG;QACvB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH,gBAAgB;AAChB,MAAM,wBAAyB,SAAQ,8BAA8B;IAC/B;IAApC,YAAoC,cAAuB;QAAI,KAAK,EAAE,CAAC;QAAnC,mBAAc,GAAd,cAAc,CAAS;IAAa,CAAC;IAEzE,IAAuB,aAAa,KAAc,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,4DAA4D;IAEpJ,IAAuB,mBAAmB;QACxC,IAAI,mBAAmB,CAAC,KAAK;YAC3B,OAAO,KAAK,CAAC;QAEf,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW;YAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEtD,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,CAAC;IAEkB,uBAAuB;QACxC,SAAS,CAAC,iBAAiB,CAAC,wCAAwC,CAAC,CAAC;IACxE,CAAC;IAEkB,YAAY;QAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,+CAA+C;QAC9E,IAAI,IAAI,CAAC,cAAc;YACrB,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,wFAAwF;IAC7J,CAAC;IAEM,cAAc,CAAC,EAA6B,EAAE,QAAiB;QACpE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7D,IAAI,CAAC,EAAE;YACL,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;YACtF,OAAO,KAAK,CAAC;QACf,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;YACvC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,oBAAoB;IAGpC;IAFnB,MAAM,CAAU,MAAM,GAAG,qBAAqB,CAAC;IAC/C,MAAM,KAAc,OAAO,KAAa,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,YAA0B,gBAAyB,IAAI;QAAI,KAAK,EAAE,CAAC;QAAzC,kBAAa,GAAb,aAAa,CAAgB;IAAa,CAAC;IAErE,gBAAgB;IACG,oBAAoB;QACrC,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,IAAW;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,WAAW;gBACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;;AAGH,gBAAgB;AAChB,MAAM,2BAA4B,SAAQ,8BAA8B;IAC9D,WAAW,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,+EAA+E;IAExK,IAAuB,aAAa,KAAc,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,yEAAyE;IAClK,IAAuB,mBAAmB,KAAc,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAElF,uBAAuB;QACxC,SAAS,CAAC,iBAAiB,CAAC,2CAA2C,CAAC,CAAC;IAC3E,CAAC;IAEkB,YAAY;QAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,6DAA6D;IACzH,CAAC;IAEkB,UAAU;QAC3B,IAAI,WAAW,GAAG,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,0HAA0H;QAC9L,IAAI,IAAI,CAAC,WAAW;YAClB,WAAW,IAAI,aAAa,CAAC,SAAS,CAAC;QACzC,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,iBAAiB,CAAC,IAAgB,EAAE,QAAwB;QAClE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,KAAK,CAAC;QAEf,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,cAAc,CAAC,EAA6B,EAAE,QAAiB;QACpE,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnE,IAAI,CAAC,QAAQ;YACX,OAAO,KAAK,CAAC;QAEf,MAAM,IAAI,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC/D,OAAO,KAAK,CAAC;QAEf,IAAI,SAAS,KAAK,EAAE;YAClB,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,CAAC,4FAA4F;QAEvI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7D,IAAI,EAAE;YACJ,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,CAAC,QAAQ;YACX,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C;QAClH,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;IAC1D,MAAM,CAAU,MAAM,GAAG,wBAAwB,CAAC;IAEzD,gBAAgB;IACG,oBAAoB;QACrC,OAAO,IAAI,2BAA2B,EAAE,CAAC;IAC3C,CAAC;;AAGH,gBAAgB;AAChB,MAAM,0BAA2B,SAAQ,8BAA8B;IACpD,OAAO,GAAc,EAAE,CAAC;IACjC,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,WAAW,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,+EAA+E;IAChK,UAAU,CAAW;IAEV,uBAAuB;QACxC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC;gBACJ,SAAS,CAAC,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;gBACxE,MAAM;YAER,KAAK,CAAC;gBACJ,SAAS,CAAC,iBAAiB,CAAC,2CAA2C,CAAC,CAAC;gBACzE,MAAM;YAER;gBACE,SAAS,CAAC,iBAAiB,CAAC,yCAAyC,CAAC,CAAC;gBACvE,MAAM;QACV,CAAC;IACH,CAAC;IAEkB,YAAY;QAC7B,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO;QAET,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,mDAAmD;QAEzF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,SAAS,CAAC,QAAQ,CAAC,6BAA6B,EAAE,CAAC;IACrD,CAAC;IAEkB,UAAU;QAC3B,IAAI,WAAW,GAAG,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,0HAA0H;QAC9L,IAAI,IAAI,CAAC,WAAW;YAClB,WAAW,IAAI,aAAa,CAAC,SAAS,CAAC;QACzC,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,cAAc,CAAC,EAA6B,EAAE,QAAiB;QACpE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ;YACrB,OAAO,KAAK,CAAC;QAEf,SAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAEpB,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1F,MAAM;YACR,CAAC;YAED,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,IAAI,GAAG,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,SAAS,KAAK,IAAI;oBACpB,OAAO,KAAK,CAAC;gBAEf,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;oBACzE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC7F,OAAO,IAAI,CAAC,CAAC,WAAW;gBAC1B,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,WAAW,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC1H,MAAM;YACR,CAAC;YAED,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,IAAI,GAAG,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,IAAI,SAAS,KAAK,IAAI;oBACpB,OAAO,KAAK,CAAC;gBAEf,MAAM,IAAI,GAAG,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,SAAS,KAAK,IAAI;oBACpB,OAAO,KAAK,CAAC;gBAEf,MAAM,MAAM,GAAG,QAAQ,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC1E,IAAI,SAAS,KAAK,MAAM;oBACtB,OAAO,KAAK,CAAC;gBAEf,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,SAAS,KAAK,SAAS;oBACzB,OAAO,KAAK,CAAC;gBAEf,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACpG,OAAO,IAAI,CAAC,CAAC,WAAW;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,UAAU,CAAC,OAAwB;QACjD,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,OAAO;QAET,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,IAAI,SAAS,KAAK,YAAY;YAC5B,OAAO;QAET,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,SAAS,KAAK,IAAI;gBACpB,OAAO;YAET,MAAM,KAAK,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACzE,IAAI,SAAS,KAAK,KAAK;gBACrB,OAAO;YAET,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE7B,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,4BAA4B,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEvE,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEjC,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IACzD,MAAM,CAAU,MAAM,GAAG,uBAAuB,CAAC;IAExD,gBAAgB;IACG,oBAAoB;QACrC,OAAO,IAAI,0BAA0B,EAAE,CAAC;IAC1C,CAAC;;AAGH,gBAAgB;AAChB,MAAM,gCAAiC,SAAQ,8BAA8B;IACnE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC3B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IACrC,IAAI,CAAuB;IAEhB,uBAAuB;QACxC,SAAS,CAAC,iBAAiB,CAAC,gDAAgD,CAAC,CAAC;IAChF,CAAC;IAEO,iBAAiB,CAAC,IAAgB,EAAE,EAAY;QACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,cAAc,CAAC,EAA6B,EAAE,QAAiB;QACpE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,EAAE;YACL,OAAO,KAAK,CAAC;QAEf,MAAM,UAAU,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,SAAS,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC;YACrE,OAAO,KAAK,CAAC;QAEf,SAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;QACtD,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC;QAEd,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QAExD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,UAAU,CAAC,OAAwB;QACjD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpF,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,oBAAoB;IACvD,MAAM,CAAU,MAAM,GAAG,6BAA6B,CAAC;IAE9D,gBAAgB;IACG,oBAAoB;QACrC,OAAO,IAAI,gCAAgC,EAAE,CAAC;IAChD,CAAC;;AAGH,gBAAgB;AAChB,MAAM,+BAAgC,SAAQ,8BAA8B;IACzD,OAAO,GAAc,EAAE,CAAC;IACjC,IAAI,CAAuB;IAC3B,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,UAAU,CAAW;IAEV,uBAAuB;QACxC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC;gBACJ,SAAS,CAAC,iBAAiB,CAAC,+CAA+C,CAAC,CAAC;gBAC7E,MAAM;YAER,KAAK,CAAC;gBACJ,SAAS,CAAC,iBAAiB,CAAC,gDAAgD,CAAC,CAAC;gBAC9E,MAAM;YAER;gBACE,SAAS,CAAC,iBAAiB,CAAC,8CAA8C,CAAC,CAAC;gBAC5E,MAAM;QACV,CAAC;IACH,CAAC;IAEkB,YAAY;QAC7B,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO;QAET,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,mDAAmD;QAEzF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,SAAS,CAAC,QAAQ,CAAC,6BAA6B,EAAE,CAAC;IACrD,CAAC;IAEM,cAAc,CAAC,EAA6B,EAAE,QAAiB;QACpE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ;YACrB,OAAO,KAAK,CAAC;QAEf,SAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QAExD,IAAI,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5E,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClD,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,UAAU,CAAC,OAAwB;QACjD,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,OAAO;QAET,MAAM,SAAS,GAAc,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QAExD,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpF,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;IACtD,MAAM,CAAU,MAAM,GAAG,4BAA4B,CAAC;IAE7D,gBAAgB;IACG,oBAAoB;QACrC,OAAO,IAAI,+BAA+B,EAAE,CAAC;IAC/C,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport { AxisOrder, Geometry, Matrix3d, Plane3dByOriginAndUnitNormal, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { AccuDraw, AccuDrawFlags, CompassMode, ContextMode, ItemField, KeyinStatus, LockedStates, RotationMode, ThreeAxes } from \"../AccuDraw\";\nimport { TentativeOrAccuSnap } from \"../AccuSnap\";\nimport { ACSDisplayOptions, AuxCoordSystemState } from \"../AuxCoordSys\";\nimport { SnapDetail } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { DecorateContext } from \"../ViewContext\";\nimport { ScreenViewport, Viewport } from \"../Viewport\";\nimport { BeButtonEvent, CoreTools, Tool } from \"./Tool\";\nimport { AccuDrawShortcutImplementation, AccuDrawShortcutTool } from \"./AccuDrawShortcutTool\";\nimport { GraphicType } from \"../common/render/GraphicType\";\n\n// cSpell:ignore dont unlockedz\n\nfunction normalizedDifference(point1: Point3d, point2: Point3d, out: Vector3d): number {\n return point2.vectorTo(point1).normalizeWithLength(out).mag;\n}\n\nfunction normalizedCrossProduct(vec1: Vector3d, vec2: Vector3d, out: Vector3d): number {\n return vec1.crossProduct(vec2, out).normalizeWithLength(out).mag;\n}\n\n/**\n * A shortcut may require no user input (immediate) or it may install a tool to collect the needed input. AccuDrawShortcuts are how users control AccuDraw.\n * A tool implementor should not use this class to setup AccuDraw, instead use AccuDrawHintBuilder to provide hints.\n * @beta\n */\nexport class AccuDrawShortcuts {\n /** Disable/Enable AccuDraw for the session */\n public static sessionToggle(): void {\n const accudraw = IModelApp.accuDraw;\n\n if (accudraw.isEnabled)\n accudraw.disableForSession();\n else\n accudraw.enableForSession();\n }\n\n /** Suspend/Unsuspend AccuDraw for the active tool */\n public static suspendToggle(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.isActive)\n accudraw.deactivate();\n else\n accudraw.activate();\n\n accudraw.refreshDecorationsAndDynamics();\n }\n\n public static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return false;\n\n const vp = accudraw.currentView;\n if (!vp)\n return false;\n\n const point = accudraw.point;\n if (!vp.view.is3d())\n point.z = 0.0;\n\n if (aboutCurrentZ)\n accudraw.hardConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\n else\n accudraw.softConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\n\n // Snap point and compass origin coincide...\n const xVec = new Vector3d();\n if (normalizedDifference(point, accudraw.planePt, xVec) < Geometry.smallAngleRadians)\n return false;\n\n accudraw.axes.x.setFrom(xVec);\n\n if (RotationMode.Context !== accudraw.rotationMode)\n accudraw.setRotationMode(RotationMode.Context);\n\n accudraw.flags.contextRotMode = ContextMode.XAxis;\n accudraw.flags.lockedRotation = false;\n\n accudraw.updateRotation();\n\n // Always want index line to display for x-Axis...changing rotation clears this...so it flashes...\n accudraw.indexed |= LockedStates.X_BM;\n return true;\n }\n\n public static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean {\n const accudraw = IModelApp.accuDraw;\n let accept = false;\n const vec = [new Vector3d(), new Vector3d(), new Vector3d()];\n acs.setOrigin(points[0]);\n switch (points.length) {\n case 1:\n acs.setRotation(vp.rotation);\n if (!isDynamics && accudraw.isEnabled) {\n accudraw.published.origin.setFrom(points[0]);\n accudraw.published.flags = AccuDrawFlags.SetOrigin;\n accudraw.flags.fixedOrg = true;\n }\n break;\n\n case 2:\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001) {\n accept = true;\n break;\n }\n\n if (vp.view.is3d()) {\n if (accudraw.isEnabled && normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {\n vec[2].set(0.0, 0.0, 1.0);\n\n if (normalizedCrossProduct(vec[2], vec[0], vec[1]) < 0.00001) {\n vec[2].set(0.0, 1.0, 0.0);\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\n }\n }\n\n normalizedCrossProduct(vec[0], vec[1], vec[2]);\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\n\n if (!isDynamics && accudraw.isEnabled) {\n accudraw.published.origin.setFrom(points[0]);\n accudraw.published.flags = AccuDrawFlags.SetOrigin | AccuDrawFlags.SetNormal;\n accudraw.published.vector.setFrom(vec[0]);\n }\n break;\n }\n\n vec[2].set(0.0, 0.0, 1.0);\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\n accept = true;\n break;\n\n case 3:\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001 ||\n normalizedDifference(points[2], points[0], vec[1]) < 0.00001 ||\n normalizedCrossProduct(vec[0], vec[1], vec[2]) < 0.00001) {\n accept = true;\n break;\n }\n\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\n accept = true;\n break;\n }\n\n return accept;\n }\n\n public static processPendingHints() {\n IModelApp.accuDraw.processHints();\n }\n\n public static requestInputFocus() {\n IModelApp.accuDraw.requestInputFocus();\n }\n\n // Helper method for GUI implementation...\n public static async itemFieldNavigate(index: ItemField, str: string, forward: boolean): Promise<void> {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.getFieldLock(index))\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\n\n if (!accudraw.isActive && KeyinStatus.Partial === accudraw.getKeyinStatus(index)) {\n await accudraw.processFieldInput(index, str, true);\n } else {\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\n accudraw.onFieldValueChange(index);\n }\n\n const vp = accudraw.currentView;\n const is3d = vp ? accudraw.is3dCompass(vp) : false;\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\n switch (index) {\n case ItemField.DIST_Item:\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.ANGLE_Item);\n break;\n\n case ItemField.ANGLE_Item:\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.DIST_Item);\n break;\n\n case ItemField.X_Item:\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.Y_Item);\n break;\n\n case ItemField.Y_Item:\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.X_Item);\n break;\n\n case ItemField.Z_Item:\n index = (forward ? (isPolar ? ItemField.DIST_Item : ItemField.X_Item) : (isPolar ? ItemField.ANGLE_Item : ItemField.Y_Item));\n break;\n }\n\n // Set focus to new item and disable automatic focus change based on cursor location in rectangular mode.\n accudraw.setFocusItem(index);\n accudraw.dontMoveFocus = true;\n }\n\n public static itemFieldNewInput(index: ItemField): void { IModelApp.accuDraw.setKeyinStatus(index, KeyinStatus.Partial); }\n public static itemFieldCompletedInput(index: ItemField): void { IModelApp.accuDraw.setKeyinStatus(index, KeyinStatus.Dynamic); }\n\n public static async itemFieldAcceptInput(index: ItemField, str: string): Promise<void> {\n const accudraw = IModelApp.accuDraw;\n await accudraw.processFieldInput(index, str, true);\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\n\n if (accudraw.getFieldLock(index))\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\n\n const vp = accudraw.currentView;\n if (accudraw.isActive) {\n if (!vp)\n return;\n\n if (CompassMode.Polar === accudraw.compassMode)\n accudraw.fixPointPolar(vp);\n else\n accudraw.fixPointRectangular(vp);\n\n accudraw.flags.dialogNeedsUpdate = true;\n return;\n }\n\n const is3d = vp ? vp.view.is3d() : false;\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\n switch (index) {\n case ItemField.DIST_Item:\n index = ItemField.ANGLE_Item;\n break;\n\n case ItemField.ANGLE_Item:\n index = (is3d ? ItemField.Z_Item : ItemField.DIST_Item);\n break;\n\n case ItemField.X_Item:\n index = ItemField.Y_Item;\n break;\n\n case ItemField.Y_Item:\n index = (is3d ? ItemField.Z_Item : ItemField.X_Item);\n break;\n\n case ItemField.Z_Item:\n index = (isPolar ? ItemField.DIST_Item : ItemField.X_Item);\n break;\n }\n accudraw.setFocusItem(index);\n }\n\n public static itemFieldLockToggle(index: ItemField): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.getFieldLock(index)) {\n switch (index) {\n case ItemField.DIST_Item:\n accudraw.distanceLock(true, false);\n break;\n\n case ItemField.ANGLE_Item:\n accudraw.angleLock();\n break;\n\n case ItemField.X_Item:\n accudraw.clearTentative();\n accudraw.locked |= LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n accudraw.clearTentative();\n accudraw.locked |= LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n accudraw.clearTentative();\n break;\n }\n\n return;\n }\n\n switch (index) {\n case ItemField.DIST_Item:\n accudraw.locked &= ~LockedStates.DIST_BM;\n break;\n\n case ItemField.ANGLE_Item:\n accudraw.locked &= ~LockedStates.ANGLE_BM;\n break;\n\n case ItemField.X_Item:\n accudraw.locked &= ~LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n accudraw.locked &= ~LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n break;\n }\n\n accudraw.dontMoveFocus = false;\n accudraw.clearTentative();\n }\n\n public static choosePreviousValue(index: ItemField): void {\n const accudraw = IModelApp.accuDraw;\n accudraw.getSavedValue(index, false);\n accudraw.refreshDecorationsAndDynamics();\n }\n\n public static chooseNextValue(index: ItemField): void {\n const accudraw = IModelApp.accuDraw;\n accudraw.getSavedValue(index, true);\n accudraw.refreshDecorationsAndDynamics();\n }\n\n public static clearSavedValues(): void {\n const accudraw = IModelApp.accuDraw;\n accudraw.clearSavedValues();\n }\n\n public static itemRotationModeChange(rotation: RotationMode): void {\n const accudraw = IModelApp.accuDraw;\n const vp = accudraw.currentView;\n const is3d = vp ? vp.view.is3d() : true;\n\n if (!is3d && (RotationMode.Front === rotation || RotationMode.Side === rotation))\n accudraw.setRotationMode(RotationMode.Top);\n\n accudraw.flags.baseRotation = rotation;\n accudraw.updateRotation(true);\n }\n\n // Shortcut implementations for GUI entry points...\n public static setOrigin(explicitOrigin?: Point3d): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (explicitOrigin) {\n accudraw.published.origin.setFrom(explicitOrigin);\n accudraw.flags.haveValidOrigin = true;\n } else if (accudraw.isInactive || accudraw.isDeactivated) {\n // If AccuSnap is active use adjusted snap point, otherwise use last data point...\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined !== snap) {\n accudraw.published.origin.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint());\n accudraw.flags.haveValidOrigin = true;\n } else {\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromLastDataButton(ev);\n\n if (ev.viewport) {\n accudraw.published.origin.setFrom(ev.point);\n accudraw.flags.haveValidOrigin = true;\n } else {\n // NOTE: If current point isn't valid setDefaultOrigin will be called...\n accudraw.published.origin.setFrom(accudraw.point);\n }\n }\n } else {\n accudraw.published.origin.setFrom(accudraw.point);\n accudraw.flags.haveValidOrigin = true;\n accudraw.setLastPoint(accudraw.published.origin);\n }\n\n accudraw.clearTentative();\n const vp = accudraw.currentView;\n\n // NOTE: _AdjustPoint should have been called to have setup currentView...\n if (vp && !vp.view.is3d())\n accudraw.published.origin.z = 0.0;\n\n accudraw.origin.setFrom(accudraw.published.origin);\n accudraw.point.setFrom(accudraw.published.origin);\n accudraw.planePt.setFrom(accudraw.published.origin);\n accudraw.published.flags |= AccuDrawFlags.SetOrigin;\n accudraw.activate();\n accudraw.refreshDecorationsAndDynamics(); // NOTE: Will already grab input focus through processHints...\n }\n\n public static changeCompassMode(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n let axisLockStatus = accudraw.locked & LockedStates.XY_BM;\n\n if (axisLockStatus) {\n if (CompassMode.Rectangular === accudraw.compassMode) {\n if (axisLockStatus & LockedStates.X_BM && accudraw.delta.x !== 0.0)\n axisLockStatus &= ~LockedStates.X_BM;\n\n if (axisLockStatus & LockedStates.Y_BM && accudraw.delta.y !== 0.0)\n axisLockStatus &= ~LockedStates.Y_BM;\n }\n }\n\n accudraw.changeCompassMode(true);\n if (axisLockStatus) {\n if (CompassMode.Rectangular === accudraw.compassMode) {\n accudraw.delta.x = accudraw.delta.y = 0.0;\n\n if (axisLockStatus & LockedStates.X_BM)\n accudraw.setFieldLock(ItemField.X_Item, true);\n else if (axisLockStatus & LockedStates.Y_BM)\n accudraw.setFieldLock(ItemField.Y_Item, true);\n } else {\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\n }\n accudraw.locked = axisLockStatus;\n }\n accudraw.flags.baseMode = accudraw.compassMode;\n this.requestInputFocus();\n }\n\n public static lockSmart(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const accuSnap = IModelApp.accuSnap;\n\n // Don't want AccuSnap to influence axis or Z...\n if (accuSnap.isHot) {\n accuSnap.clear();\n\n const vp = accudraw.currentView;\n if (vp) {\n if (CompassMode.Polar === accudraw.compassMode)\n accudraw.fixPointPolar(vp);\n else\n accudraw.fixPointRectangular(vp);\n }\n }\n\n if (CompassMode.Polar === accudraw.compassMode) {\n const isSnapped = accudraw.clearTentative();\n if (accudraw.locked & LockedStates.ANGLE_BM) { // angle locked (unlock it)\n accudraw.setFieldLock(ItemField.ANGLE_Item, false);\n accudraw.locked &= ~LockedStates.ANGLE_BM;\n } else if (accudraw.getFieldLock(ItemField.DIST_Item)) { // distance locked (unlock it)\n accudraw.setFieldLock(ItemField.DIST_Item, false);\n accudraw.locked &= ~LockedStates.DIST_BM;\n } else if (isSnapped) {\n accudraw.doLockAngle(isSnapped);\n } else if (accudraw.indexed & LockedStates.ANGLE_BM) { // angle indexed (lock it)\n accudraw.angleLock();\n } else {\n if (Math.abs(accudraw.vector.dotProduct(accudraw.axes.x)) > Math.abs(accudraw.vector.dotProduct(accudraw.axes.y)))\n accudraw.indexed |= LockedStates.Y_BM;\n else\n accudraw.indexed |= LockedStates.X_BM;\n accudraw.angleLock();\n }\n this.requestInputFocus();\n return;\n }\n\n if (accudraw.locked) { // if locked, unlock\n accudraw.clearTentative();\n accudraw.locked &= ~LockedStates.XY_BM;\n accudraw.setFieldLock(ItemField.X_Item, false);\n accudraw.setFieldLock(ItemField.Y_Item, false);\n if (accudraw.getFieldLock(ItemField.Z_Item) && accudraw.delta.z === 0.0 && !accudraw.stickyZLock)\n accudraw.setFieldLock(ItemField.Z_Item, false);\n } else { // lock to nearest axis\n if (accudraw.clearTentative()) {\n if (Math.abs(accudraw.delta.x) >= Geometry.smallAngleRadians && Math.abs(accudraw.delta.y) >= Geometry.smallAngleRadians) {\n accudraw.doLockAngle(false);\n return;\n }\n }\n\n const vp = accudraw.currentView;\n if (Math.abs(accudraw.delta.x) > Math.abs(accudraw.delta.y)) {\n accudraw.delta.y = 0.0;\n accudraw.onFieldValueChange(ItemField.Y_Item);\n accudraw.locked |= LockedStates.Y_BM;\n accudraw.locked &= ~LockedStates.X_BM;\n accudraw.setFieldLock(ItemField.X_Item, false);\n accudraw.setFieldLock(ItemField.Y_Item, true);\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\n } else {\n accudraw.delta.x = 0.0;\n accudraw.onFieldValueChange(ItemField.X_Item);\n accudraw.locked |= LockedStates.X_BM;\n accudraw.locked &= ~LockedStates.Y_BM;\n accudraw.setFieldLock(ItemField.Y_Item, false);\n accudraw.setFieldLock(ItemField.X_Item, true);\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\n }\n\n if (!accudraw.flags.lockedRotation) {\n accudraw.flags.lockedRotation = true;\n accudraw.flags.contextRotMode = ContextMode.Locked;\n accudraw.setRotationMode(RotationMode.Context);\n }\n }\n this.requestInputFocus();\n }\n\n /** Disable indexing when not currently indexed; if indexed, enable respective lock. */\n public static lockIndex(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.flags.indexLocked) {\n if (accudraw.locked)\n this.lockSmart();\n\n accudraw.flags.indexLocked = false;\n } else {\n if (CompassMode.Polar === accudraw.compassMode) {\n if (accudraw.indexed & LockedStates.XY_BM) {\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\n accudraw.angleLock();\n }\n\n if (accudraw.indexed & LockedStates.DIST_BM)\n this.lockDistance();\n } else {\n if (accudraw.indexed & LockedStates.X_BM) {\n this.lockX();\n\n if (accudraw.indexed & LockedStates.DIST_BM)\n this.lockY();\n }\n\n if (accudraw.indexed & LockedStates.Y_BM) {\n this.lockY();\n\n if (accudraw.indexed & LockedStates.DIST_BM)\n this.lockX();\n }\n\n if (accudraw.indexed & LockedStates.DIST_BM && !(accudraw.indexed & LockedStates.XY_BM)) {\n if (accudraw.locked & LockedStates.X_BM)\n this.lockY();\n else\n this.lockX();\n }\n }\n\n accudraw.flags.indexLocked = true;\n }\n\n this.requestInputFocus();\n }\n\n public static lockX(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n accudraw.clearTentative();\n\n if (CompassMode.Rectangular !== accudraw.compassMode) {\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n accudraw.fixPointRectangular(vp);\n accudraw.changeCompassMode(true);\n }\n\n if (accudraw.getFieldLock(ItemField.X_Item)) {\n accudraw.setFieldLock(ItemField.X_Item, false);\n accudraw.locked = accudraw.locked & ~LockedStates.X_BM;\n accudraw.setKeyinStatus(ItemField.X_Item, KeyinStatus.Dynamic);\n } else {\n accudraw.saveCoordinate(ItemField.X_Item, accudraw.delta.x);\n accudraw.setFieldLock(ItemField.X_Item, true);\n accudraw.locked = accudraw.locked | LockedStates.X_BM;\n }\n this.requestInputFocus();\n }\n\n public static lockY(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n accudraw.clearTentative();\n\n if (CompassMode.Rectangular !== accudraw.compassMode) {\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n accudraw.fixPointRectangular(vp);\n accudraw.changeCompassMode(true);\n }\n\n if (accudraw.getFieldLock(ItemField.Y_Item)) {\n accudraw.setFieldLock(ItemField.Y_Item, false);\n accudraw.locked = accudraw.locked & ~LockedStates.Y_BM;\n accudraw.setKeyinStatus(ItemField.Y_Item, KeyinStatus.Dynamic);\n } else {\n accudraw.saveCoordinate(ItemField.Y_Item, accudraw.delta.y);\n accudraw.setFieldLock(ItemField.Y_Item, true);\n accudraw.locked = accudraw.locked | LockedStates.Y_BM;\n }\n this.requestInputFocus();\n }\n\n public static lockZ(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const vp = accudraw.currentView;\n if (!vp || !vp.view.is3d())\n return;\n\n const isSnapped = accudraw.clearTentative();\n\n if (accudraw.getFieldLock(ItemField.Z_Item)) {\n accudraw.setFieldLock(ItemField.Z_Item, false);\n accudraw.setKeyinStatus(ItemField.Z_Item, KeyinStatus.Dynamic);\n } else {\n // Move focus to Z field...\n if (!isSnapped && accudraw.autoFocusFields) {\n accudraw.setFocusItem(ItemField.Z_Item);\n accudraw.dontMoveFocus = true;\n }\n accudraw.setFieldLock(ItemField.Z_Item, true);\n }\n this.requestInputFocus();\n }\n\n public static lockDistance(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const isSnapped = accudraw.clearTentative();\n\n if (CompassMode.Polar !== accudraw.compassMode) {\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n accudraw.locked = 0;\n accudraw.fixPointPolar(vp);\n accudraw.changeCompassMode(true);\n }\n\n if (accudraw.getFieldLock(ItemField.DIST_Item)) {\n accudraw.setFieldLock(ItemField.DIST_Item, false);\n accudraw.locked &= ~LockedStates.DIST_BM;\n accudraw.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic);\n } else {\n // Move focus to distance field...\n if (!isSnapped && accudraw.autoFocusFields)\n accudraw.setFocusItem(ItemField.DIST_Item);\n accudraw.distanceLock(true, true);\n }\n this.requestInputFocus();\n }\n\n public static lockAngle(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n accudraw.doLockAngle(accudraw.clearTentative());\n this.requestInputFocus();\n }\n\n public static setStandardRotation(rotation: RotationMode): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (RotationMode.Context === rotation) {\n const axes = accudraw.baseAxes.clone();\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\n accudraw.setContextRotation(axes.toMatrix3d(), false, true);\n this.requestInputFocus();\n return;\n } else {\n accudraw.flags.baseRotation = rotation;\n accudraw.setRotationMode(rotation);\n }\n accudraw.updateRotation(true);\n this.requestInputFocus();\n }\n\n public static alignView(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n const newMatrix = accudraw.getRotation();\n if (newMatrix.isExactEqual(vp.rotation))\n return;\n\n const targetMatrix = newMatrix.multiplyMatrixMatrix(vp.rotation);\n const rotateTransform = Transform.createFixedPointAndMatrix(vp.view.getTargetPoint(), targetMatrix);\n const newFrustum = vp.getFrustum();\n newFrustum.multiply(rotateTransform);\n\n vp.view.setupFromFrustum(newFrustum);\n vp.synchWithView();\n vp.animateFrustumChange();\n\n this.requestInputFocus();\n }\n\n public static rotateToBase(): void { this.setStandardRotation(IModelApp.accuDraw.flags.baseRotation); }\n\n public static rotateToACS(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n // NOTE: Match current ACS orientation..reset auxRotationPlane to top!\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n this.setStandardRotation(RotationMode.ACS);\n }\n\n public static rotateCycle(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const vp = accudraw.currentView;\n if (!vp || !vp.view.is3d())\n return;\n\n let rotation: RotationMode;\n switch (accudraw.rotationMode) {\n case RotationMode.View:\n case RotationMode.Side:\n rotation = RotationMode.Top;\n break;\n\n case RotationMode.Top:\n rotation = RotationMode.Front;\n break;\n\n case RotationMode.Front:\n rotation = RotationMode.Side;\n break;\n\n case RotationMode.Context:\n rotation = RotationMode.Context;\n\n if (rotation !== accudraw.flags.baseRotation) {\n accudraw.baseAxes.setFrom(accudraw.axes);\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n accudraw.flags.baseRotation = rotation;\n } else {\n const axes = accudraw.baseAxes.clone();\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\n if (!accudraw.axes.equals(axes))\n accudraw.changeBaseRotationMode(rotation);\n }\n\n switch (accudraw.flags.auxRotationPlane) {\n case RotationMode.Front:\n accudraw.flags.auxRotationPlane = RotationMode.Side;\n break;\n\n case RotationMode.Side:\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n break;\n\n case RotationMode.Top:\n accudraw.flags.auxRotationPlane = RotationMode.Front;\n break;\n }\n break;\n\n case RotationMode.ACS:\n rotation = RotationMode.ACS;\n switch (accudraw.flags.auxRotationPlane) {\n case RotationMode.Front:\n accudraw.flags.auxRotationPlane = RotationMode.Side;\n break;\n case RotationMode.Side:\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n break;\n case RotationMode.Top:\n accudraw.flags.auxRotationPlane = RotationMode.Front;\n break;\n }\n break;\n\n default:\n return;\n }\n\n this.setStandardRotation(rotation);\n }\n\n public static rotate90(axis: number): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const newRotation = new ThreeAxes();\n\n accudraw.locked = accudraw.indexed = 0;\n accudraw.unlockAllFields();\n\n switch (axis) {\n case 0:\n newRotation.x.setFrom(accudraw.axes.x);\n newRotation.z.setFrom(accudraw.axes.y);\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\n break;\n\n case 1:\n newRotation.x.setFrom(accudraw.axes.z);\n newRotation.y.setFrom(accudraw.axes.y);\n newRotation.x.crossProduct(newRotation.y, newRotation.z);\n break;\n\n case 2:\n newRotation.x.setFrom(accudraw.axes.y);\n newRotation.z.setFrom(accudraw.axes.z);\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\n break;\n }\n\n accudraw.setContextRotation(newRotation.toMatrix3d(), true, true);\n this.requestInputFocus();\n }\n\n public static async rotateAxes(aboutCurrentZ: boolean) {\n return IModelApp.tools.run(\"AccuDraw.RotateAxes\", aboutCurrentZ);\n }\n\n public static async rotateToElement() {\n return IModelApp.tools.run(\"AccuDraw.RotateElement\");\n }\n\n public static async defineACSByElement() {\n return IModelApp.tools.run(\"AccuDraw.DefineACSByElement\");\n }\n\n public static async defineACSByPoints() {\n return IModelApp.tools.run(\"AccuDraw.DefineACSByPoints\");\n }\n\n public static getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): BentleyStatus {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return BentleyStatus.ERROR;\n\n const vp = accudraw.currentView;\n if (!vp)\n return BentleyStatus.ERROR;\n\n let currRotation = 0, currBaseRotation = 0;\n const axes = new ThreeAxes();\n\n if (!useRotation) {\n // Save current rotation, event listener on ACS change will orient AccuDraw to ACS...\n currRotation = accudraw.rotationMode;\n currBaseRotation = accudraw.flags.baseRotation;\n axes.setFrom(accudraw.axes);\n }\n\n if (acsName && \"\" !== acsName) {\n // // See if this ACS already exists...\n // DgnCode acsCode = AuxCoordSystem:: CreateCode(vp -> GetViewControllerR().GetViewDefinition(), acsName);\n // DgnElementId acsId = vp -> GetViewController().GetDgnDb().Elements().QueryElementIdByCode(acsCode);\n\n // if (!acsId.IsValid())\n // return ERROR;\n\n // AuxCoordSystemCPtr auxElm = vp -> GetViewController().GetDgnDb().Elements().Get<AuxCoordSystem>(acsId);\n\n // if (!auxElm.IsValid())\n // return ERROR;\n\n // AuxCoordSystemPtr acsPtr = auxElm -> MakeCopy<AuxCoordSystem>();\n\n // if (!acsPtr.IsValid())\n // return ERROR;\n\n // AuxCoordSystemCR oldACS = vp -> GetViewController().GetAuxCoordinateSystem();\n\n // if (!useOrigin)\n // acsPtr -> SetOrigin(oldACS.GetOrigin());\n\n // if (!useRotation)\n // acsPtr -> SetRotation(oldACS.GetRotation());\n\n // AccuDraw:: UpdateAuxCoordinateSystem(* acsPtr, * vp);\n }\n\n const currentACS = vp.view.auxiliaryCoordinateSystem;\n\n if (useOrigin) {\n accudraw.origin.setFrom(currentACS.getOrigin());\n accudraw.point.setFrom(accudraw.origin);\n accudraw.planePt.setFrom(accudraw.origin);\n }\n\n if (useRotation) {\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n this.setStandardRotation(RotationMode.ACS);\n } else {\n this.itemFieldUnlockAll();\n\n accudraw.setRotationMode(currRotation);\n accudraw.flags.baseRotation = currBaseRotation;\n accudraw.axes.setFrom(axes);\n\n if (RotationMode.ACS === accudraw.flags.baseRotation) {\n const acs = currentACS.clone();\n\n const rMatrix = accudraw.getRotation();\n acs.setRotation(rMatrix);\n\n AccuDraw.updateAuxCoordinateSystem(acs, vp);\n }\n\n accudraw.published.flags &= ~AccuDrawFlags.OrientACS;\n }\n\n return BentleyStatus.SUCCESS;\n }\n\n public static writeACS(_acsName: string): BentleyStatus {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return BentleyStatus.ERROR;\n\n const vp = accudraw.currentView;\n if (!vp)\n return BentleyStatus.ERROR;\n\n // const origin = accudraw.origin;\n // const rMatrix = accudraw.getRotation();\n // AuxCoordSystemPtr acsPtr = AuxCoordSystem:: CreateFrom(vp -> GetViewController().GetAuxCoordinateSystem());\n // acsPtr -> SetOrigin(origin);\n // acsPtr -> SetRotation(rMatrix);\n // acsPtr -> SetType(CompassMode.Polar == accudraw.getCompassMode() ? ACSType :: Cylindrical : ACSType:: Rectangular);\n // acsPtr -> SetCode(AuxCoordSystem:: CreateCode(vp -> GetViewControllerR().GetViewDefinition(), nullptr != acsName ? acsName : \"\"));\n // acsPtr -> SetDescription(\"\");\n\n // if (acsName && '\\0' != acsName[0]) {\n // DgnDbStatus status;\n // acsPtr -> Insert(& status);\n\n // if (DgnDbStatus:: Success != status)\n // return BentleyStatus.ERROR;\n // }\n\n // AccuDraw:: UpdateAuxCoordinateSystem(* acsPtr, * vp);\n\n // accudraw.flags.baseRotation = RotationMode.ACS;\n // accudraw.SetRotationMode(RotationMode.ACS);\n\n return BentleyStatus.SUCCESS;\n }\n\n public static itemFieldUnlockAll(): void {\n const accudraw = IModelApp.accuDraw;\n if (accudraw.isEnabled)\n accudraw.unlockAllFields();\n }\n}\n\n/**\n * Immediate tool to toggle AccuDraw's availability for the current session.\n * @note AccuDraw is enabled by default\n * @beta\n */\nexport class AccuDrawSessionToggleTool extends Tool {\n public static override toolId = \"AccuDraw.SessionToggle\";\n public override async run() {\n AccuDrawShortcuts.sessionToggle();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle AccuDraw on/off temporarily for the current interactive tool.\n * @note Typically used to disable AccuDraw for a single data button.\n * @beta\n */\nexport class AccuDrawSuspendToggleTool extends Tool {\n public static override toolId = \"AccuDraw.SuspendToggle\";\n public override async run() {\n AccuDrawShortcuts.suspendToggle();\n return true;\n }\n}\n\n/**\n * Immediate tool to enable AccuDraw and position it at the current AccuSnap or Tentative snap location.\n * @note When not snapped, AccuDraw is activated at the last data button location when inactive, or moved to the current cursor location when active.\n * @beta\n */\nexport class AccuDrawSetOriginTool extends Tool {\n public static override toolId = \"AccuDraw.SetOrigin\";\n public override async run() {\n AccuDrawShortcuts.setOrigin();\n return true;\n }\n}\n\n/**\n * Immediate tool to lock the closer of the x or y axis based on the current cursor location.\n * @note When an axis is locked, points are projected onto the axis line.\n * @beta\n */\nexport class AccuDrawSetLockSmartTool extends Tool {\n public static override toolId = \"AccuDraw.LockSmart\";\n public override async run() {\n AccuDrawShortcuts.lockSmart();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of an indexed axis of the AccuDraw compass.\n * @beta\n */\nexport class AccuDrawSetLockIndexTool extends Tool {\n public static override toolId = \"AccuDraw.LockIndex\";\n public override async run() {\n AccuDrawShortcuts.lockIndex();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the X text field.\n * @beta\n */\nexport class AccuDrawSetLockXTool extends Tool {\n public static override toolId = \"AccuDraw.LockX\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockX();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Y text field.\n * @beta\n */\nexport class AccuDrawSetLockYTool extends Tool {\n public static override toolId = \"AccuDraw.LockY\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockY();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Z text field.\n * @beta\n */\nexport class AccuDrawSetLockZTool extends Tool {\n public static override toolId = \"AccuDraw.LockZ\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockZ();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Distance text field.\n * @beta\n */\nexport class AccuDrawSetLockDistanceTool extends Tool {\n public static override toolId = \"AccuDraw.LockDistance\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockDistance();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Angle text field.\n * @beta\n */\nexport class AccuDrawSetLockAngleTool extends Tool {\n public static override toolId = \"AccuDraw.LockAngle\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockAngle();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle between polar and rectangular compass modes.\n * @beta\n */\nexport class AccuDrawChangeModeTool extends Tool {\n public static override toolId = \"AccuDraw.ChangeMode\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.changeCompassMode();\n return true;\n }\n}\n\n/**\n * Immediate tool to cycle between XY, XZ, and YZ planes for the current AccuDraw rotation.\n * @beta\n */\nexport class AccuDrawRotateCycleTool extends Tool {\n public static override toolId = \"AccuDraw.RotateCycle\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotateCycle();\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to a standard Top view.\n * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.\n * @beta\n */\nexport class AccuDrawRotateTopTool extends Tool {\n public static override toolId = \"AccuDraw.RotateTop\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.Top);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to a standard Front view.\n * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.\n * @beta\n */\nexport class AccuDrawRotateFrontTool extends Tool {\n public static override toolId = \"AccuDraw.RotateFront\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.Front);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to a standard Side view.\n * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.\n * @beta\n */\nexport class AccuDrawRotateSideTool extends Tool {\n public static override toolId = \"AccuDraw.RotateSide\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.Side);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to match the rotation of the current view.\n * @beta\n */\nexport class AccuDrawRotateViewTool extends Tool {\n public static override toolId = \"AccuDraw.RotateView\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.View);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current x axis.\n * @beta\n */\nexport class AccuDrawRotate90AboutXTool extends Tool {\n public static override toolId = \"AccuDraw.Rotate90AboutX\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotate90(0);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current y axis.\n * @beta\n */\nexport class AccuDrawRotate90AboutYTool extends Tool {\n public static override toolId = \"AccuDraw.Rotate90AboutY\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotate90(1);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current z axis.\n * @beta\n */\nexport class AccuDrawRotate90AboutZTool extends Tool {\n public static override toolId = \"AccuDraw.Rotate90AboutZ\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotate90(2);\n return true;\n }\n}\n\n/** @internal */\nclass RotateAxesImplementation extends AccuDrawShortcutImplementation {\n public constructor(private readonly _aboutCurrentZ: boolean) { super(); }\n\n protected override get allowShortcut(): boolean { return IModelApp.accuDraw.isActive; } // Require compass to already be active for this shortcut...\n\n protected override get wantAdditionalInput(): boolean {\n if (TentativeOrAccuSnap.isHot)\n return false;\n\n const accudraw = IModelApp.accuDraw;\n\n if (CompassMode.Polar === accudraw.compassMode)\n return !accudraw.getFieldLock(ItemField.ANGLE_Item);\n\n return !(accudraw.getFieldLock(ItemField.X_Item) && accudraw.getFieldLock(ItemField.Y_Item));\n }\n\n protected override onProvideToolAssistance(): void {\n CoreTools.outputPromptByKey(\"AccuDraw.RotateAxes.Prompts.FirstPoint\");\n }\n\n protected override onInitialize(): void {\n IModelApp.accuDraw.activate(); // State demoted to inactive by tool install...\n if (this._aboutCurrentZ)\n IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Establish current orientation as base for when defining compass rotation by x axis...\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\n if (!vp)\n return false;\n if (!AccuDrawShortcuts.rotateAxesByPoint(TentativeOrAccuSnap.isHot, this._aboutCurrentZ))\n return false;\n vp.invalidateDecorations();\n if (!isMotion) {\n AccuDrawShortcuts.itemFieldUnlockAll();\n IModelApp.tentativePoint.clear(true);\n }\n return true;\n }\n}\n\n/**\n * Interactive tool to set the AccuDraw rotation by rotating about the current z axis to a point on the x axis.\n * @note When AccuSnap or Tentative snap is active, the snap point is immediately used to define the x axis and not further input is required.\n * @beta\n */\nexport class AccuDrawRotateAxesTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.RotateAxes\";\n public static override get maxArgs(): number { return 1; }\n public constructor(public aboutCurrentZ: boolean = true) { super(); }\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new RotateAxesImplementation(this.aboutCurrentZ);\n }\n\n public override async parseAndRun(...args: any[]): Promise<boolean> {\n for (const arg of args) {\n if (arg.toLowerCase() === \"unlockedz\")\n this.aboutCurrentZ = false;\n }\n return this.run();\n }\n}\n\n/** @internal */\nclass RotateElementImplementation extends AccuDrawShortcutImplementation {\n private _moveOrigin = !IModelApp.accuDraw.isActive || IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...\n\n protected override get allowShortcut(): boolean { return IModelApp.accuDraw.isEnabled; } // Require AccuDraw to be enabled by the application for this shortcut...\n protected override get wantAdditionalInput(): boolean { return !IModelApp.tentativePoint.isSnapped; }\n\n protected override onProvideToolAssistance(): void {\n CoreTools.outputPromptByKey(\"AccuDraw.RotateElement.Prompts.FirstPoint\");\n }\n\n protected override onInitialize(): void {\n IModelApp.accuDraw.activate();\n IModelApp.accuDraw.setContext(AccuDrawFlags.FixedOrigin); // Don't move compass when updateOrientation returns false...\n }\n\n protected override onComplete(): AccuDrawFlags {\n let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...\n if (this._moveOrigin)\n ignoreFlags |= AccuDrawFlags.SetOrigin;\n return ignoreFlags;\n }\n\n private updateOrientation(snap: SnapDetail, viewport: ScreenViewport): boolean {\n const accudraw = IModelApp.accuDraw;\n const rMatrix = AccuDraw.getSnapRotation(snap, viewport);\n if (undefined === rMatrix)\n return false;\n\n const point = this._moveOrigin ? snap.snapPoint : accudraw.origin;\n accudraw.setContext(AccuDrawFlags.SetRMatrix | AccuDrawFlags.AlwaysSetOrigin, point, rMatrix);\n return true;\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n const viewport = ev ? ev.viewport : IModelApp.accuDraw.currentView;\n if (!viewport)\n return false;\n\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined === snap || !this.updateOrientation(snap, viewport))\n return false;\n\n if (undefined === ev)\n AccuDrawShortcuts.processPendingHints(); // Would normally be processed after button down, necessary when called from post install...\n\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\n if (vp)\n vp.invalidateDecorations();\n\n if (!isMotion)\n IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Hold temporary rotation for tool duration...\n return true;\n }\n}\n\n/**\n * Interactive tool to set the AccuDraw rotation using the snapped to geometry under the cursor.\n * @beta\n */\nexport class AccuDrawRotateElementTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.RotateElement\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new RotateElementImplementation();\n }\n}\n\n/** @internal */\nclass RotatePointsImplementation extends AccuDrawShortcutImplementation {\n private readonly _points: Point3d[] = [];\n private _origin = IModelApp.tentativePoint.isActive ? IModelApp.tentativePoint.getPoint().clone() : undefined;\n private _moveOrigin = !IModelApp.accuDraw.isActive || IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...\n private _lastPoint?: Point3d;\n\n protected override onProvideToolAssistance(): void {\n switch (this._points.length) {\n case 0:\n CoreTools.outputPromptByKey(\"AccuDraw.RotatePoints.Prompts.FirstPoint\");\n break;\n\n case 1:\n CoreTools.outputPromptByKey(\"AccuDraw.RotatePoints.Prompts.SecondPoint\");\n break;\n\n default:\n CoreTools.outputPromptByKey(\"AccuDraw.RotatePoints.Prompts.NextPoint\");\n break;\n }\n }\n\n protected override onInitialize(): void {\n if (undefined === this._origin)\n return;\n\n this._points.push(this._origin);\n IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...\n\n IModelApp.accuDraw.activate();\n IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, this._origin);\n IModelApp.accuDraw.refreshDecorationsAndDynamics();\n }\n\n protected override onComplete(): AccuDrawFlags {\n let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...\n if (this._moveOrigin)\n ignoreFlags |= AccuDrawFlags.SetOrigin;\n return ignoreFlags;\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n if (!ev || !ev.viewport)\n return false;\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n if (isMotion) {\n this._lastPoint = ev.point.clone();\n return false;\n }\n\n const accuDraw = IModelApp.accuDraw;\n accuDraw.activate();\n\n switch (this._points.length) {\n case 0: {\n this._points.push(ev.point.clone());\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, this._points[0]);\n break;\n }\n\n case 1: {\n const xVec = Vector3d.createNormalizedStartEnd(this._points[0], ev.point);\n if (undefined === xVec)\n return false;\n\n if (!ev.viewport.view.is3d() || !ev.viewport.view.allow3dManipulations()) {\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.SetXAxis, this._points[0], xVec);\n return true; // Complete\n }\n\n this._points.push(ev.point.clone());\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin | AccuDrawFlags.SetNormal, this._points[0], xVec);\n break;\n }\n\n case 2: {\n const xVec = Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);\n if (undefined === xVec)\n return false;\n\n const yVec = Vector3d.createNormalizedStartEnd(this._points[0], ev.point);\n if (undefined === yVec)\n return false;\n\n const matrix = Matrix3d.createRigidFromColumns(xVec, yVec, AxisOrder.XYZ);\n if (undefined === matrix)\n return false;\n\n const invMatrix = matrix.inverse();\n if (undefined === invMatrix)\n return false;\n\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.SetRMatrix, this._points[0], invMatrix);\n return true; // Complete\n }\n }\n\n this.onProvideToolAssistance();\n return false;\n }\n\n public override doDecorate(context: DecorateContext): void {\n if (0 === this._points.length)\n return;\n\n const currentPoint = this._lastPoint;\n if (undefined === currentPoint)\n return;\n\n if (2 === this._points.length) {\n const xVec = Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);\n if (undefined === xVec)\n return;\n\n const plane = Plane3dByOriginAndUnitNormal.create(this._points[0], xVec);\n if (undefined === plane)\n return;\n\n plane.projectPointToPlane(currentPoint, currentPoint);\n }\n\n const tmpPoints = this._points.slice(0, 1);\n tmpPoints.push(currentPoint);\n\n const vp = context.viewport;\n const color = vp.getContrastToBackgroundColor();\n const builder = context.createGraphicBuilder(GraphicType.WorldOverlay);\n\n builder.setSymbology(color, color, 2);\n builder.addLineString(tmpPoints);\n\n context.addDecorationFromBuilder(builder);\n }\n}\n\n/**\n * Interactive tool to set the AccuDraw rotation by 3 points: x axis origin, x axis direction, and y axis direction.\n * @beta\n */\nexport class AccuDrawRotatePointsTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.RotatePoints\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new RotatePointsImplementation();\n }\n}\n\n/** @internal */\nclass DefineACSByElementImplementation extends AccuDrawShortcutImplementation {\n private _origin = Point3d.create();\n private _rMatrix = Matrix3d.createIdentity();\n private _acs?: AuxCoordSystemState;\n\n protected override onProvideToolAssistance(): void {\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByElement.Prompts.FirstPoint\");\n }\n\n private updateOrientation(snap: SnapDetail, vp: Viewport): boolean {\n const rMatrix = AccuDraw.getSnapRotation(snap, vp);\n if (undefined === rMatrix)\n return false;\n this._origin = snap.snapPoint;\n this._rMatrix = rMatrix;\n return true;\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n const vp = ev ? ev.viewport : undefined;\n if (!vp)\n return false;\n\n const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))\n return false;\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n if (isMotion)\n return true;\n\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n\n this._acs.setOrigin(this._origin);\n this._acs.setRotation(this._rMatrix);\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\n AccuDrawShortcuts.rotateToACS();\n return true;\n }\n\n public override doDecorate(context: DecorateContext): void {\n const vp = context.viewport;\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n this._acs.setOrigin(this._origin);\n this._acs.setRotation(this._rMatrix);\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\n }\n}\n\n/**\n * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction/\n * @beta\n */\nexport class DefineACSByElementTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.DefineACSByElement\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new DefineACSByElementImplementation();\n }\n}\n\n/** @internal */\nclass DefineACSByPointsImplementation extends AccuDrawShortcutImplementation {\n private readonly _points: Point3d[] = [];\n private _acs?: AuxCoordSystemState;\n private _origin = IModelApp.tentativePoint.isActive ? IModelApp.tentativePoint.getPoint().clone() : undefined;\n private _lastPoint?: Point3d;\n\n protected override onProvideToolAssistance(): void {\n switch (this._points.length) {\n case 0:\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.FirstPoint\");\n break;\n\n case 1:\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.SecondPoint\");\n break;\n\n default:\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.NextPoint\");\n break;\n }\n }\n\n protected override onInitialize(): void {\n if (undefined === this._origin)\n return;\n\n this._points.push(this._origin);\n IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...\n\n IModelApp.accuDraw.activate();\n IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, this._origin);\n IModelApp.accuDraw.refreshDecorationsAndDynamics();\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n if (!ev || !ev.viewport)\n return false;\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n if (isMotion) {\n this._lastPoint = ev.point.clone();\n return false;\n }\n\n IModelApp.accuDraw.activate();\n this._points.push(ev.point.clone());\n\n const vp = ev.viewport;\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n\n if (AccuDrawShortcuts.updateACSByPoints(this._acs, vp, this._points, false)) {\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\n AccuDrawShortcuts.rotateToACS();\n return true;\n }\n\n this.onProvideToolAssistance();\n return false;\n }\n\n public override doDecorate(context: DecorateContext): void {\n if (undefined === this._lastPoint)\n return;\n\n const tmpPoints: Point3d[] = [];\n this._points.forEach((pt) => tmpPoints.push(pt));\n tmpPoints.push(this._lastPoint);\n\n const vp = context.viewport;\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n\n AccuDrawShortcuts.updateACSByPoints(this._acs, vp, tmpPoints, true);\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\n }\n}\n\n/**\n * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction.\n * @beta\n */\nexport class DefineACSByPointsTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.DefineACSByPoints\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new DefineACSByPointsImplementation();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AccuDrawTool.js","sourceRoot":"","sources":["../../../src/tools/AccuDrawTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { AuxCoordSystemProps, BisCodeSpec, Code } from \"@itwin/core-common\";\nimport { AxisOrder, Geometry, Matrix3d, Plane3dByOriginAndUnitNormal, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { AccuDraw, AccuDrawFlags, CompassMode, ContextMode, ItemField, KeyinStatus, LockedStates, RotationMode, ThreeAxes } from \"../AccuDraw\";\nimport { TentativeOrAccuSnap } from \"../AccuSnap\";\nimport { ACSDisplayOptions, ACSType, AuxCoordSystemState } from \"../AuxCoordSys\";\nimport { SnapDetail } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { DecorateContext } from \"../ViewContext\";\nimport { ViewState } from \"../ViewState\";\nimport { ScreenViewport, Viewport } from \"../Viewport\";\nimport { BeButtonEvent, CoreTools, Tool } from \"./Tool\";\nimport { AccuDrawShortcutImplementation, AccuDrawShortcutTool } from \"./AccuDrawShortcutTool\";\nimport { GraphicType } from \"../common/render/GraphicType\";\n\n// cSpell:ignore dont unlockedz\n\nfunction normalizedDifference(point1: Point3d, point2: Point3d, out: Vector3d): number {\n return point2.vectorTo(point1).normalizeWithLength(out).mag;\n}\n\nfunction normalizedCrossProduct(vec1: Vector3d, vec2: Vector3d, out: Vector3d): number {\n return vec1.crossProduct(vec2, out).normalizeWithLength(out).mag;\n}\n\n/**\n * A shortcut may require no user input (immediate) or it may install a tool to collect the needed input. AccuDrawShortcuts are how users control AccuDraw.\n * A tool implementor should not use this class to setup AccuDraw, instead use AccuDrawHintBuilder to provide hints.\n * @beta\n */\nexport class AccuDrawShortcuts {\n // Monotonic token used to ignore stale async ACS operations.\n private static _acsRequestGeneration = 0;\n\n /** Disable/Enable AccuDraw for the session */\n public static sessionToggle(): void {\n const accudraw = IModelApp.accuDraw;\n\n if (accudraw.isEnabled)\n accudraw.disableForSession();\n else\n accudraw.enableForSession();\n }\n\n /** Suspend/Unsuspend AccuDraw for the active tool */\n public static suspendToggle(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.isActive)\n accudraw.deactivate();\n else\n accudraw.activate();\n\n accudraw.refreshDecorationsAndDynamics();\n }\n\n public static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return false;\n\n const vp = accudraw.currentView;\n if (!vp)\n return false;\n\n const point = accudraw.point;\n if (!vp.view.is3d())\n point.z = 0.0;\n\n if (aboutCurrentZ)\n accudraw.hardConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\n else\n accudraw.softConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\n\n // Snap point and compass origin coincide...\n const xVec = new Vector3d();\n if (normalizedDifference(point, accudraw.planePt, xVec) < Geometry.smallAngleRadians)\n return false;\n\n accudraw.axes.x.setFrom(xVec);\n\n if (RotationMode.Context !== accudraw.rotationMode)\n accudraw.setRotationMode(RotationMode.Context);\n\n accudraw.flags.contextRotMode = ContextMode.XAxis;\n accudraw.flags.lockedRotation = false;\n\n accudraw.updateRotation();\n\n // Always want index line to display for x-Axis...changing rotation clears this...so it flashes...\n accudraw.indexed |= LockedStates.X_BM;\n return true;\n }\n\n public static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean {\n const accudraw = IModelApp.accuDraw;\n let accept = false;\n const vec = [new Vector3d(), new Vector3d(), new Vector3d()];\n acs.setOrigin(points[0]);\n switch (points.length) {\n case 1:\n acs.setRotation(vp.rotation);\n if (!isDynamics && accudraw.isEnabled) {\n accudraw.published.origin.setFrom(points[0]);\n accudraw.published.flags = AccuDrawFlags.SetOrigin;\n accudraw.flags.fixedOrg = true;\n }\n break;\n\n case 2:\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001) {\n accept = true;\n break;\n }\n\n if (vp.view.is3d()) {\n if (accudraw.isEnabled && normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {\n vec[2].set(0.0, 0.0, 1.0);\n\n if (normalizedCrossProduct(vec[2], vec[0], vec[1]) < 0.00001) {\n vec[2].set(0.0, 1.0, 0.0);\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\n }\n }\n\n normalizedCrossProduct(vec[0], vec[1], vec[2]);\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\n\n if (!isDynamics && accudraw.isEnabled) {\n accudraw.published.origin.setFrom(points[0]);\n accudraw.published.flags = AccuDrawFlags.SetOrigin | AccuDrawFlags.SetNormal;\n accudraw.published.vector.setFrom(vec[0]);\n }\n break;\n }\n\n vec[2].set(0.0, 0.0, 1.0);\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\n accept = true;\n break;\n\n case 3:\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001 ||\n normalizedDifference(points[2], points[0], vec[1]) < 0.00001 ||\n normalizedCrossProduct(vec[0], vec[1], vec[2]) < 0.00001) {\n accept = true;\n break;\n }\n\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\n accept = true;\n break;\n }\n\n return accept;\n }\n\n public static processPendingHints() {\n IModelApp.accuDraw.processHints();\n }\n\n public static requestInputFocus() {\n IModelApp.accuDraw.requestInputFocus();\n }\n\n // Helper method for GUI implementation...\n public static async itemFieldNavigate(index: ItemField, str: string, forward: boolean): Promise<void> {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.getFieldLock(index))\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\n\n if (!accudraw.isActive && KeyinStatus.Partial === accudraw.getKeyinStatus(index)) {\n await accudraw.processFieldInput(index, str, true);\n } else {\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\n accudraw.onFieldValueChange(index);\n }\n\n const vp = accudraw.currentView;\n const is3d = vp ? accudraw.is3dCompass(vp) : false;\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\n switch (index) {\n case ItemField.DIST_Item:\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.ANGLE_Item);\n break;\n\n case ItemField.ANGLE_Item:\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.DIST_Item);\n break;\n\n case ItemField.X_Item:\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.Y_Item);\n break;\n\n case ItemField.Y_Item:\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.X_Item);\n break;\n\n case ItemField.Z_Item:\n index = (forward ? (isPolar ? ItemField.DIST_Item : ItemField.X_Item) : (isPolar ? ItemField.ANGLE_Item : ItemField.Y_Item));\n break;\n }\n\n // Set focus to new item and disable automatic focus change based on cursor location in rectangular mode.\n accudraw.setFocusItem(index);\n accudraw.dontMoveFocus = true;\n }\n\n public static itemFieldNewInput(index: ItemField): void { IModelApp.accuDraw.setKeyinStatus(index, KeyinStatus.Partial); }\n public static itemFieldCompletedInput(index: ItemField): void { IModelApp.accuDraw.setKeyinStatus(index, KeyinStatus.Dynamic); }\n\n public static async itemFieldAcceptInput(index: ItemField, str: string): Promise<void> {\n const accudraw = IModelApp.accuDraw;\n await accudraw.processFieldInput(index, str, true);\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\n\n if (accudraw.getFieldLock(index))\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\n\n const vp = accudraw.currentView;\n if (accudraw.isActive) {\n if (!vp)\n return;\n\n if (CompassMode.Polar === accudraw.compassMode)\n accudraw.fixPointPolar(vp);\n else\n accudraw.fixPointRectangular(vp);\n\n accudraw.flags.dialogNeedsUpdate = true;\n return;\n }\n\n const is3d = vp ? vp.view.is3d() : false;\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\n switch (index) {\n case ItemField.DIST_Item:\n index = ItemField.ANGLE_Item;\n break;\n\n case ItemField.ANGLE_Item:\n index = (is3d ? ItemField.Z_Item : ItemField.DIST_Item);\n break;\n\n case ItemField.X_Item:\n index = ItemField.Y_Item;\n break;\n\n case ItemField.Y_Item:\n index = (is3d ? ItemField.Z_Item : ItemField.X_Item);\n break;\n\n case ItemField.Z_Item:\n index = (isPolar ? ItemField.DIST_Item : ItemField.X_Item);\n break;\n }\n accudraw.setFocusItem(index);\n }\n\n public static itemFieldLockToggle(index: ItemField): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.getFieldLock(index)) {\n switch (index) {\n case ItemField.DIST_Item:\n accudraw.distanceLock(true, false);\n break;\n\n case ItemField.ANGLE_Item:\n accudraw.angleLock();\n break;\n\n case ItemField.X_Item:\n accudraw.clearTentative();\n accudraw.locked |= LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n accudraw.clearTentative();\n accudraw.locked |= LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n accudraw.clearTentative();\n break;\n }\n\n return;\n }\n\n switch (index) {\n case ItemField.DIST_Item:\n accudraw.locked &= ~LockedStates.DIST_BM;\n break;\n\n case ItemField.ANGLE_Item:\n accudraw.locked &= ~LockedStates.ANGLE_BM;\n break;\n\n case ItemField.X_Item:\n accudraw.locked &= ~LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n accudraw.locked &= ~LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n break;\n }\n\n accudraw.dontMoveFocus = false;\n accudraw.clearTentative();\n }\n\n public static choosePreviousValue(index: ItemField): void {\n const accudraw = IModelApp.accuDraw;\n accudraw.getSavedValue(index, false);\n accudraw.refreshDecorationsAndDynamics();\n }\n\n public static chooseNextValue(index: ItemField): void {\n const accudraw = IModelApp.accuDraw;\n accudraw.getSavedValue(index, true);\n accudraw.refreshDecorationsAndDynamics();\n }\n\n public static clearSavedValues(): void {\n const accudraw = IModelApp.accuDraw;\n accudraw.clearSavedValues();\n }\n\n public static itemRotationModeChange(rotation: RotationMode): void {\n const accudraw = IModelApp.accuDraw;\n const vp = accudraw.currentView;\n const is3d = vp ? vp.view.is3d() : true;\n\n if (!is3d && (RotationMode.Front === rotation || RotationMode.Side === rotation))\n accudraw.setRotationMode(RotationMode.Top);\n\n accudraw.flags.baseRotation = rotation;\n accudraw.updateRotation(true);\n }\n\n // Shortcut implementations for GUI entry points...\n public static setOrigin(explicitOrigin?: Point3d): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (explicitOrigin) {\n accudraw.published.origin.setFrom(explicitOrigin);\n accudraw.flags.haveValidOrigin = true;\n } else if (accudraw.isInactive || accudraw.isDeactivated) {\n // If AccuSnap is active use adjusted snap point, otherwise use last data point...\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined !== snap) {\n accudraw.published.origin.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint());\n accudraw.flags.haveValidOrigin = true;\n } else {\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromLastDataButton(ev);\n\n if (ev.viewport) {\n accudraw.published.origin.setFrom(ev.point);\n accudraw.flags.haveValidOrigin = true;\n } else {\n // NOTE: If current point isn't valid setDefaultOrigin will be called...\n accudraw.published.origin.setFrom(accudraw.point);\n }\n }\n } else {\n accudraw.published.origin.setFrom(accudraw.point);\n accudraw.flags.haveValidOrigin = true;\n accudraw.setLastPoint(accudraw.published.origin);\n }\n\n accudraw.clearTentative();\n const vp = accudraw.currentView;\n\n // NOTE: _AdjustPoint should have been called to have setup currentView...\n if (vp && !vp.view.is3d())\n accudraw.published.origin.z = 0.0;\n\n accudraw.origin.setFrom(accudraw.published.origin);\n accudraw.point.setFrom(accudraw.published.origin);\n accudraw.planePt.setFrom(accudraw.published.origin);\n accudraw.published.flags |= AccuDrawFlags.SetOrigin;\n accudraw.activate();\n accudraw.refreshDecorationsAndDynamics(); // NOTE: Will already grab input focus through processHints...\n }\n\n public static changeCompassMode(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n let axisLockStatus = accudraw.locked & LockedStates.XY_BM;\n\n if (axisLockStatus) {\n if (CompassMode.Rectangular === accudraw.compassMode) {\n if (axisLockStatus & LockedStates.X_BM && accudraw.delta.x !== 0.0)\n axisLockStatus &= ~LockedStates.X_BM;\n\n if (axisLockStatus & LockedStates.Y_BM && accudraw.delta.y !== 0.0)\n axisLockStatus &= ~LockedStates.Y_BM;\n }\n }\n\n accudraw.changeCompassMode(true);\n if (axisLockStatus) {\n if (CompassMode.Rectangular === accudraw.compassMode) {\n accudraw.delta.x = accudraw.delta.y = 0.0;\n\n if (axisLockStatus & LockedStates.X_BM)\n accudraw.setFieldLock(ItemField.X_Item, true);\n else if (axisLockStatus & LockedStates.Y_BM)\n accudraw.setFieldLock(ItemField.Y_Item, true);\n } else {\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\n }\n accudraw.locked = axisLockStatus;\n }\n accudraw.flags.baseMode = accudraw.compassMode;\n this.requestInputFocus();\n }\n\n public static lockSmart(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const accuSnap = IModelApp.accuSnap;\n\n // Don't want AccuSnap to influence axis or Z...\n if (accuSnap.isHot) {\n accuSnap.clear();\n\n const vp = accudraw.currentView;\n if (vp) {\n if (CompassMode.Polar === accudraw.compassMode)\n accudraw.fixPointPolar(vp);\n else\n accudraw.fixPointRectangular(vp);\n }\n }\n\n if (CompassMode.Polar === accudraw.compassMode) {\n const isSnapped = accudraw.clearTentative();\n if (accudraw.locked & LockedStates.ANGLE_BM) { // angle locked (unlock it)\n accudraw.setFieldLock(ItemField.ANGLE_Item, false);\n accudraw.locked &= ~LockedStates.ANGLE_BM;\n } else if (accudraw.getFieldLock(ItemField.DIST_Item)) { // distance locked (unlock it)\n accudraw.setFieldLock(ItemField.DIST_Item, false);\n accudraw.locked &= ~LockedStates.DIST_BM;\n } else if (isSnapped) {\n accudraw.doLockAngle(isSnapped);\n } else if (accudraw.indexed & LockedStates.ANGLE_BM) { // angle indexed (lock it)\n accudraw.angleLock();\n } else {\n if (Math.abs(accudraw.vector.dotProduct(accudraw.axes.x)) > Math.abs(accudraw.vector.dotProduct(accudraw.axes.y)))\n accudraw.indexed |= LockedStates.Y_BM;\n else\n accudraw.indexed |= LockedStates.X_BM;\n accudraw.angleLock();\n }\n this.requestInputFocus();\n return;\n }\n\n if (accudraw.locked) { // if locked, unlock\n accudraw.clearTentative();\n accudraw.locked &= ~LockedStates.XY_BM;\n accudraw.setFieldLock(ItemField.X_Item, false);\n accudraw.setFieldLock(ItemField.Y_Item, false);\n if (accudraw.getFieldLock(ItemField.Z_Item) && accudraw.delta.z === 0.0 && !accudraw.stickyZLock)\n accudraw.setFieldLock(ItemField.Z_Item, false);\n } else { // lock to nearest axis\n if (accudraw.clearTentative()) {\n if (Math.abs(accudraw.delta.x) >= Geometry.smallAngleRadians && Math.abs(accudraw.delta.y) >= Geometry.smallAngleRadians) {\n accudraw.doLockAngle(false);\n return;\n }\n }\n\n const vp = accudraw.currentView;\n if (Math.abs(accudraw.delta.x) > Math.abs(accudraw.delta.y)) {\n accudraw.delta.y = 0.0;\n accudraw.onFieldValueChange(ItemField.Y_Item);\n accudraw.locked |= LockedStates.Y_BM;\n accudraw.locked &= ~LockedStates.X_BM;\n accudraw.setFieldLock(ItemField.X_Item, false);\n accudraw.setFieldLock(ItemField.Y_Item, true);\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\n } else {\n accudraw.delta.x = 0.0;\n accudraw.onFieldValueChange(ItemField.X_Item);\n accudraw.locked |= LockedStates.X_BM;\n accudraw.locked &= ~LockedStates.Y_BM;\n accudraw.setFieldLock(ItemField.Y_Item, false);\n accudraw.setFieldLock(ItemField.X_Item, true);\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\n }\n\n if (!accudraw.flags.lockedRotation) {\n accudraw.flags.lockedRotation = true;\n accudraw.flags.contextRotMode = ContextMode.Locked;\n accudraw.setRotationMode(RotationMode.Context);\n }\n }\n this.requestInputFocus();\n }\n\n /** Disable indexing when not currently indexed; if indexed, enable respective lock. */\n public static lockIndex(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (accudraw.flags.indexLocked) {\n if (accudraw.locked)\n this.lockSmart();\n\n accudraw.flags.indexLocked = false;\n } else {\n if (CompassMode.Polar === accudraw.compassMode) {\n if (accudraw.indexed & LockedStates.XY_BM) {\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\n accudraw.angleLock();\n }\n\n if (accudraw.indexed & LockedStates.DIST_BM)\n this.lockDistance();\n } else {\n if (accudraw.indexed & LockedStates.X_BM) {\n this.lockX();\n\n if (accudraw.indexed & LockedStates.DIST_BM)\n this.lockY();\n }\n\n if (accudraw.indexed & LockedStates.Y_BM) {\n this.lockY();\n\n if (accudraw.indexed & LockedStates.DIST_BM)\n this.lockX();\n }\n\n if (accudraw.indexed & LockedStates.DIST_BM && !(accudraw.indexed & LockedStates.XY_BM)) {\n if (accudraw.locked & LockedStates.X_BM)\n this.lockY();\n else\n this.lockX();\n }\n }\n\n accudraw.flags.indexLocked = true;\n }\n\n this.requestInputFocus();\n }\n\n public static lockX(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n accudraw.clearTentative();\n\n if (CompassMode.Rectangular !== accudraw.compassMode) {\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n accudraw.fixPointRectangular(vp);\n accudraw.changeCompassMode(true);\n }\n\n if (accudraw.getFieldLock(ItemField.X_Item)) {\n accudraw.setFieldLock(ItemField.X_Item, false);\n accudraw.locked = accudraw.locked & ~LockedStates.X_BM;\n accudraw.setKeyinStatus(ItemField.X_Item, KeyinStatus.Dynamic);\n } else {\n accudraw.saveCoordinate(ItemField.X_Item, accudraw.delta.x);\n accudraw.setFieldLock(ItemField.X_Item, true);\n accudraw.locked = accudraw.locked | LockedStates.X_BM;\n }\n this.requestInputFocus();\n }\n\n public static lockY(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n accudraw.clearTentative();\n\n if (CompassMode.Rectangular !== accudraw.compassMode) {\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n accudraw.fixPointRectangular(vp);\n accudraw.changeCompassMode(true);\n }\n\n if (accudraw.getFieldLock(ItemField.Y_Item)) {\n accudraw.setFieldLock(ItemField.Y_Item, false);\n accudraw.locked = accudraw.locked & ~LockedStates.Y_BM;\n accudraw.setKeyinStatus(ItemField.Y_Item, KeyinStatus.Dynamic);\n } else {\n accudraw.saveCoordinate(ItemField.Y_Item, accudraw.delta.y);\n accudraw.setFieldLock(ItemField.Y_Item, true);\n accudraw.locked = accudraw.locked | LockedStates.Y_BM;\n }\n this.requestInputFocus();\n }\n\n public static lockZ(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const vp = accudraw.currentView;\n if (!vp || !vp.view.is3d())\n return;\n\n const isSnapped = accudraw.clearTentative();\n\n if (accudraw.getFieldLock(ItemField.Z_Item)) {\n accudraw.setFieldLock(ItemField.Z_Item, false);\n accudraw.setKeyinStatus(ItemField.Z_Item, KeyinStatus.Dynamic);\n } else {\n // Move focus to Z field...\n if (!isSnapped && accudraw.autoFocusFields) {\n accudraw.setFocusItem(ItemField.Z_Item);\n accudraw.dontMoveFocus = true;\n }\n accudraw.setFieldLock(ItemField.Z_Item, true);\n }\n this.requestInputFocus();\n }\n\n public static lockDistance(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const isSnapped = accudraw.clearTentative();\n\n if (CompassMode.Polar !== accudraw.compassMode) {\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n accudraw.locked = 0;\n accudraw.fixPointPolar(vp);\n accudraw.changeCompassMode(true);\n }\n\n if (accudraw.getFieldLock(ItemField.DIST_Item)) {\n accudraw.setFieldLock(ItemField.DIST_Item, false);\n accudraw.locked &= ~LockedStates.DIST_BM;\n accudraw.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic);\n } else {\n // Move focus to distance field...\n if (!isSnapped && accudraw.autoFocusFields)\n accudraw.setFocusItem(ItemField.DIST_Item);\n accudraw.distanceLock(true, true);\n }\n this.requestInputFocus();\n }\n\n public static lockAngle(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n accudraw.doLockAngle(accudraw.clearTentative());\n this.requestInputFocus();\n }\n\n public static setStandardRotation(rotation: RotationMode): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n if (RotationMode.Context === rotation) {\n const axes = accudraw.baseAxes.clone();\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\n accudraw.setContextRotation(axes.toMatrix3d(), false, true);\n this.requestInputFocus();\n return;\n } else {\n accudraw.flags.baseRotation = rotation;\n accudraw.setRotationMode(rotation);\n }\n accudraw.updateRotation(true);\n this.requestInputFocus();\n }\n\n public static alignView(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const vp = accudraw.currentView;\n if (!vp)\n return;\n\n const newMatrix = accudraw.getRotation();\n if (newMatrix.isExactEqual(vp.rotation))\n return;\n\n const targetMatrix = newMatrix.multiplyMatrixMatrix(vp.rotation);\n const rotateTransform = Transform.createFixedPointAndMatrix(vp.view.getTargetPoint(), targetMatrix);\n const newFrustum = vp.getFrustum();\n newFrustum.multiply(rotateTransform);\n\n vp.view.setupFromFrustum(newFrustum);\n vp.synchWithView();\n vp.animateFrustumChange();\n\n this.requestInputFocus();\n }\n\n public static rotateToBase(): void { this.setStandardRotation(IModelApp.accuDraw.flags.baseRotation); }\n\n public static rotateToACS(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n // NOTE: Match current ACS orientation..reset auxRotationPlane to top!\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n this.setStandardRotation(RotationMode.ACS);\n }\n\n public static rotateCycle(): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const vp = accudraw.currentView;\n if (!vp || !vp.view.is3d())\n return;\n\n let rotation: RotationMode;\n switch (accudraw.rotationMode) {\n case RotationMode.View:\n case RotationMode.Side:\n rotation = RotationMode.Top;\n break;\n\n case RotationMode.Top:\n rotation = RotationMode.Front;\n break;\n\n case RotationMode.Front:\n rotation = RotationMode.Side;\n break;\n\n case RotationMode.Context:\n rotation = RotationMode.Context;\n\n if (rotation !== accudraw.flags.baseRotation) {\n accudraw.baseAxes.setFrom(accudraw.axes);\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n accudraw.flags.baseRotation = rotation;\n } else {\n const axes = accudraw.baseAxes.clone();\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\n if (!accudraw.axes.equals(axes))\n accudraw.changeBaseRotationMode(rotation);\n }\n\n switch (accudraw.flags.auxRotationPlane) {\n case RotationMode.Front:\n accudraw.flags.auxRotationPlane = RotationMode.Side;\n break;\n\n case RotationMode.Side:\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n break;\n\n case RotationMode.Top:\n accudraw.flags.auxRotationPlane = RotationMode.Front;\n break;\n }\n break;\n\n case RotationMode.ACS:\n rotation = RotationMode.ACS;\n switch (accudraw.flags.auxRotationPlane) {\n case RotationMode.Front:\n accudraw.flags.auxRotationPlane = RotationMode.Side;\n break;\n case RotationMode.Side:\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n break;\n case RotationMode.Top:\n accudraw.flags.auxRotationPlane = RotationMode.Front;\n break;\n }\n break;\n\n default:\n return;\n }\n\n this.setStandardRotation(rotation);\n }\n\n public static rotate90(axis: number): void {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return;\n\n const newRotation = new ThreeAxes();\n\n accudraw.locked = accudraw.indexed = 0;\n accudraw.unlockAllFields();\n\n switch (axis) {\n case 0:\n newRotation.x.setFrom(accudraw.axes.x);\n newRotation.z.setFrom(accudraw.axes.y);\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\n break;\n\n case 1:\n newRotation.x.setFrom(accudraw.axes.z);\n newRotation.y.setFrom(accudraw.axes.y);\n newRotation.x.crossProduct(newRotation.y, newRotation.z);\n break;\n\n case 2:\n newRotation.x.setFrom(accudraw.axes.y);\n newRotation.z.setFrom(accudraw.axes.z);\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\n break;\n }\n\n accudraw.setContextRotation(newRotation.toMatrix3d(), true, true);\n this.requestInputFocus();\n }\n\n public static async rotateAxes(aboutCurrentZ: boolean) {\n return IModelApp.tools.run(\"AccuDraw.RotateAxes\", aboutCurrentZ);\n }\n\n public static async rotateToElement() {\n return IModelApp.tools.run(\"AccuDraw.RotateElement\");\n }\n\n public static async defineACSByElement() {\n return IModelApp.tools.run(\"AccuDraw.DefineACSByElement\");\n }\n\n public static async defineACSByPoints() {\n return IModelApp.tools.run(\"AccuDraw.DefineACSByPoints\");\n }\n\n private static async getACSCode(view: ViewState, acsName: string): Promise<Code> {\n const codeSpecName = view.isSpatialView() ? BisCodeSpec.auxCoordSystemSpatial : (view.is3d() ? BisCodeSpec.auxCoordSystem3d : BisCodeSpec.auxCoordSystem2d);\n const codeSpec = await view.iModel.codeSpecs.getByName(codeSpecName);\n return new Code({ spec: codeSpec.id, scope: view.model, value: acsName });\n }\n\n private static async getNamedACS(view: ViewState, acsName: string): Promise<{ validForView: boolean, acs?: AuxCoordSystemState }> {\n const acsCode = await this.getACSCode(view, acsName);\n const acsProps = await view.iModel.elements.loadProps(acsCode.toJSON());\n if (!acsProps)\n return { validForView: false };\n\n const namedAcs = AuxCoordSystemState.fromProps(acsProps, view.iModel);\n const validForView = namedAcs.isValidForView(view);\n\n return { validForView, acs: namedAcs };\n }\n\n private static async createNewACS(view: ViewState, acsName: string): Promise<AuxCoordSystemState> {\n // Want a CodeProps to support insert so ViewState.createAuxCoordSystem(acsName) is not called.\n const acsCode = await this.getACSCode(view, acsName);\n\n // Determine the class name based on view type\n let classFullName: string;\n if (view.isSpatialView())\n classFullName = \"BisCore:AuxCoordSystemSpatial\";\n else if (view.is3d())\n classFullName = \"BisCore:AuxCoordSystem3d\";\n else\n classFullName = \"BisCore:AuxCoordSystem2d\";\n\n const acsProps: AuxCoordSystemProps = { model: acsCode.scope, code: acsCode.toJSON(), classFullName, type: ACSType.None };\n const acs = AuxCoordSystemState.fromProps(acsProps, view.iModel);\n return acs;\n }\n\n /**\n * Set the AuxiliaryCoordinateSystem for the current AccuDraw viewport by name.\n * Optionally updates the AccuDraw origin and rotation to match the ACS.\n * @note When no name is specified, AccuDraw is updated using the view's current ACS.\n * @returns AuxCoordSystemState or undefined if name does not exist or is invalid for the view.\n * @throws Error if resolving the ACS CodeSpec or loading ACS element properties fails.\n */\n public static async getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): Promise<AuxCoordSystemState | undefined> {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return undefined;\n\n const vp = accudraw.currentView;\n if (!vp)\n return undefined;\n\n const view = vp.view;\n const requestGeneration = ++this._acsRequestGeneration;\n const isRequestCurrent = () => accudraw.isEnabled && accudraw.currentView === vp && vp.view === view && requestGeneration === this._acsRequestGeneration;\n\n let currentACS = view.auxiliaryCoordinateSystem;\n\n if (acsName && \"\" !== acsName) {\n const namedAcsResult = await this.getNamedACS(view, acsName);\n if (!isRequestCurrent())\n return undefined;\n\n if (!namedAcsResult.validForView)\n return undefined;\n\n const namedAcs = namedAcsResult.acs;\n if (!namedAcs)\n return undefined;\n\n if (!useOrigin)\n namedAcs.setOrigin(currentACS.getOrigin());\n\n if (!useRotation)\n namedAcs.setRotation(currentACS.getRotation());\n\n AccuDraw.updateAuxCoordinateSystem(namedAcs, vp); // Sets AccuDrawFlags.OrientACS hint to orient AccuDraw to ACS...\n currentACS = namedAcs;\n }\n\n if (!isRequestCurrent())\n return undefined;\n\n if (useOrigin) {\n accudraw.origin.setFrom(currentACS.getOrigin());\n accudraw.point.setFrom(accudraw.origin);\n accudraw.planePt.setFrom(accudraw.origin);\n }\n\n if (useRotation) {\n accudraw.flags.auxRotationPlane = RotationMode.Top;\n this.setStandardRotation(RotationMode.ACS);\n } else {\n this.itemFieldUnlockAll();\n\n if (RotationMode.ACS === accudraw.flags.baseRotation) {\n const acs = currentACS.clone();\n\n acs.setRotation(accudraw.getRotation());\n AccuDraw.updateAuxCoordinateSystem(acs, vp);\n }\n\n accudraw.published.flags &= ~AccuDrawFlags.OrientACS;\n }\n\n return currentACS;\n }\n\n /**\n * Create a new AuxiliaryCoordinateSystem for the current AccuDraw viewport using the compass origin, orientation, and mode.\n * @note When no name is specified, the view's current ACS is updated from AccuDraw. Caller can choose to create\n * an EditCommand to insert/update as a named ACS element using the returned AuxCoordSystemState.\n * @returns AuxCoordSystemState or undefined if ACS could not be created.\n * @throws Error if resolving the ACS CodeSpec or loading ACS element properties fails.\n */\n public static async writeACS(acsName: string | undefined): Promise<AuxCoordSystemState | undefined> {\n const accudraw = IModelApp.accuDraw;\n if (!accudraw.isEnabled)\n return undefined;\n\n const vp = accudraw.currentView;\n if (!vp)\n return undefined;\n\n const view = vp.view;\n const requestGeneration = ++this._acsRequestGeneration;\n const isRequestCurrent = () => accudraw.isEnabled && accudraw.currentView === vp && vp.view === view && requestGeneration === this._acsRequestGeneration;\n\n let acs: AuxCoordSystemState | undefined;\n if (acsName && \"\" !== acsName) {\n const namedAcsResult = await this.getNamedACS(view, acsName);\n if (!isRequestCurrent())\n return undefined;\n\n acs = namedAcsResult.acs;\n if (!acs) {\n acs = await this.createNewACS(view, acsName);\n if (!isRequestCurrent())\n return undefined;\n } else if (!namedAcsResult.validForView) {\n return undefined;\n }\n } else {\n acs = view.auxiliaryCoordinateSystem.clone();\n acs.description = \"\";\n }\n\n if (!isRequestCurrent())\n return undefined;\n\n if (!acs)\n return undefined;\n\n acs.setOrigin(accudraw.origin);\n acs.setRotation(accudraw.getRotation());\n acs.type = CompassMode.Polar === accudraw.compassMode ? ACSType.Cylindrical : ACSType.Rectangular;\n\n AccuDraw.updateAuxCoordinateSystem(acs, vp);\n accudraw.flags.baseRotation = RotationMode.ACS;\n accudraw.setRotationMode(RotationMode.ACS);\n\n return acs;\n }\n\n public static itemFieldUnlockAll(): void {\n const accudraw = IModelApp.accuDraw;\n if (accudraw.isEnabled)\n accudraw.unlockAllFields();\n }\n}\n\n/**\n * Immediate tool to toggle AccuDraw's availability for the current session.\n * @note AccuDraw is enabled by default\n * @beta\n */\nexport class AccuDrawSessionToggleTool extends Tool {\n public static override toolId = \"AccuDraw.SessionToggle\";\n public override async run() {\n AccuDrawShortcuts.sessionToggle();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle AccuDraw on/off temporarily for the current interactive tool.\n * @note Typically used to disable AccuDraw for a single data button.\n * @beta\n */\nexport class AccuDrawSuspendToggleTool extends Tool {\n public static override toolId = \"AccuDraw.SuspendToggle\";\n public override async run() {\n AccuDrawShortcuts.suspendToggle();\n return true;\n }\n}\n\n/**\n * Immediate tool to enable AccuDraw and position it at the current AccuSnap or Tentative snap location.\n * @note When not snapped, AccuDraw is activated at the last data button location when inactive, or moved to the current cursor location when active.\n * @beta\n */\nexport class AccuDrawSetOriginTool extends Tool {\n public static override toolId = \"AccuDraw.SetOrigin\";\n public override async run() {\n AccuDrawShortcuts.setOrigin();\n return true;\n }\n}\n\n/**\n * Immediate tool to lock the closer of the x or y axis based on the current cursor location.\n * @note When an axis is locked, points are projected onto the axis line.\n * @beta\n */\nexport class AccuDrawSetLockSmartTool extends Tool {\n public static override toolId = \"AccuDraw.LockSmart\";\n public override async run() {\n AccuDrawShortcuts.lockSmart();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of an indexed axis of the AccuDraw compass.\n * @beta\n */\nexport class AccuDrawSetLockIndexTool extends Tool {\n public static override toolId = \"AccuDraw.LockIndex\";\n public override async run() {\n AccuDrawShortcuts.lockIndex();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the X text field.\n * @beta\n */\nexport class AccuDrawSetLockXTool extends Tool {\n public static override toolId = \"AccuDraw.LockX\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockX();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Y text field.\n * @beta\n */\nexport class AccuDrawSetLockYTool extends Tool {\n public static override toolId = \"AccuDraw.LockY\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockY();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Z text field.\n * @beta\n */\nexport class AccuDrawSetLockZTool extends Tool {\n public static override toolId = \"AccuDraw.LockZ\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockZ();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Distance text field.\n * @beta\n */\nexport class AccuDrawSetLockDistanceTool extends Tool {\n public static override toolId = \"AccuDraw.LockDistance\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockDistance();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle the locked state of the Angle text field.\n * @beta\n */\nexport class AccuDrawSetLockAngleTool extends Tool {\n public static override toolId = \"AccuDraw.LockAngle\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.lockAngle();\n return true;\n }\n}\n\n/**\n * Immediate tool to toggle between polar and rectangular compass modes.\n * @beta\n */\nexport class AccuDrawChangeModeTool extends Tool {\n public static override toolId = \"AccuDraw.ChangeMode\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.changeCompassMode();\n return true;\n }\n}\n\n/**\n * Immediate tool to cycle between XY, XZ, and YZ planes for the current AccuDraw rotation.\n * @beta\n */\nexport class AccuDrawRotateCycleTool extends Tool {\n public static override toolId = \"AccuDraw.RotateCycle\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotateCycle();\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to a standard Top view.\n * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.\n * @beta\n */\nexport class AccuDrawRotateTopTool extends Tool {\n public static override toolId = \"AccuDraw.RotateTop\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.Top);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to a standard Front view.\n * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.\n * @beta\n */\nexport class AccuDrawRotateFrontTool extends Tool {\n public static override toolId = \"AccuDraw.RotateFront\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.Front);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to a standard Side view.\n * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.\n * @beta\n */\nexport class AccuDrawRotateSideTool extends Tool {\n public static override toolId = \"AccuDraw.RotateSide\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.Side);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to match the rotation of the current view.\n * @beta\n */\nexport class AccuDrawRotateViewTool extends Tool {\n public static override toolId = \"AccuDraw.RotateView\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.setStandardRotation(RotationMode.View);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current x axis.\n * @beta\n */\nexport class AccuDrawRotate90AboutXTool extends Tool {\n public static override toolId = \"AccuDraw.Rotate90AboutX\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotate90(0);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current y axis.\n * @beta\n */\nexport class AccuDrawRotate90AboutYTool extends Tool {\n public static override toolId = \"AccuDraw.Rotate90AboutY\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotate90(1);\n return true;\n }\n}\n\n/**\n * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current z axis.\n * @beta\n */\nexport class AccuDrawRotate90AboutZTool extends Tool {\n public static override toolId = \"AccuDraw.Rotate90AboutZ\";\n public override async run(): Promise<boolean> {\n AccuDrawShortcuts.rotate90(2);\n return true;\n }\n}\n\n/** @internal */\nclass RotateAxesImplementation extends AccuDrawShortcutImplementation {\n public constructor(private readonly _aboutCurrentZ: boolean) { super(); }\n\n protected override get allowShortcut(): boolean { return IModelApp.accuDraw.isActive; } // Require compass to already be active for this shortcut...\n\n protected override get wantAdditionalInput(): boolean {\n if (TentativeOrAccuSnap.isHot)\n return false;\n\n const accudraw = IModelApp.accuDraw;\n\n if (CompassMode.Polar === accudraw.compassMode)\n return !accudraw.getFieldLock(ItemField.ANGLE_Item);\n\n return !(accudraw.getFieldLock(ItemField.X_Item) && accudraw.getFieldLock(ItemField.Y_Item));\n }\n\n protected override onProvideToolAssistance(): void {\n CoreTools.outputPromptByKey(\"AccuDraw.RotateAxes.Prompts.FirstPoint\");\n }\n\n protected override onInitialize(): void {\n IModelApp.accuDraw.activate(); // State demoted to inactive by tool install...\n if (this._aboutCurrentZ)\n IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Establish current orientation as base for when defining compass rotation by x axis...\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\n if (!vp)\n return false;\n if (!AccuDrawShortcuts.rotateAxesByPoint(TentativeOrAccuSnap.isHot, this._aboutCurrentZ))\n return false;\n vp.invalidateDecorations();\n if (!isMotion) {\n AccuDrawShortcuts.itemFieldUnlockAll();\n IModelApp.tentativePoint.clear(true);\n }\n return true;\n }\n}\n\n/**\n * Interactive tool to set the AccuDraw rotation by rotating about the current z axis to a point on the x axis.\n * @note When AccuSnap or Tentative snap is active, the snap point is immediately used to define the x axis and not further input is required.\n * @beta\n */\nexport class AccuDrawRotateAxesTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.RotateAxes\";\n public static override get maxArgs(): number { return 1; }\n public constructor(public aboutCurrentZ: boolean = true) { super(); }\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new RotateAxesImplementation(this.aboutCurrentZ);\n }\n\n public override async parseAndRun(...args: any[]): Promise<boolean> {\n for (const arg of args) {\n if (arg.toLowerCase() === \"unlockedz\")\n this.aboutCurrentZ = false;\n }\n return this.run();\n }\n}\n\n/** @internal */\nclass RotateElementImplementation extends AccuDrawShortcutImplementation {\n private _moveOrigin = !IModelApp.accuDraw.isActive || IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...\n\n protected override get allowShortcut(): boolean { return IModelApp.accuDraw.isEnabled; } // Require AccuDraw to be enabled by the application for this shortcut...\n protected override get wantAdditionalInput(): boolean { return !IModelApp.tentativePoint.isSnapped; }\n\n protected override onProvideToolAssistance(): void {\n CoreTools.outputPromptByKey(\"AccuDraw.RotateElement.Prompts.FirstPoint\");\n }\n\n protected override onInitialize(): void {\n IModelApp.accuDraw.activate();\n IModelApp.accuDraw.setContext(AccuDrawFlags.FixedOrigin); // Don't move compass when updateOrientation returns false...\n }\n\n protected override onComplete(): AccuDrawFlags {\n let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...\n if (this._moveOrigin)\n ignoreFlags |= AccuDrawFlags.SetOrigin;\n return ignoreFlags;\n }\n\n private updateOrientation(snap: SnapDetail, viewport: ScreenViewport): boolean {\n const accudraw = IModelApp.accuDraw;\n const rMatrix = AccuDraw.getSnapRotation(snap, viewport);\n if (undefined === rMatrix)\n return false;\n\n const point = this._moveOrigin ? snap.snapPoint : accudraw.origin;\n accudraw.setContext(AccuDrawFlags.SetRMatrix | AccuDrawFlags.AlwaysSetOrigin, point, rMatrix);\n return true;\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n const viewport = ev ? ev.viewport : IModelApp.accuDraw.currentView;\n if (!viewport)\n return false;\n\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined === snap || !this.updateOrientation(snap, viewport))\n return false;\n\n if (undefined === ev)\n AccuDrawShortcuts.processPendingHints(); // Would normally be processed after button down, necessary when called from post install...\n\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\n if (vp)\n vp.invalidateDecorations();\n\n if (!isMotion)\n IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Hold temporary rotation for tool duration...\n return true;\n }\n}\n\n/**\n * Interactive tool to set the AccuDraw rotation using the snapped to geometry under the cursor.\n * @beta\n */\nexport class AccuDrawRotateElementTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.RotateElement\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new RotateElementImplementation();\n }\n}\n\n/** @internal */\nclass RotatePointsImplementation extends AccuDrawShortcutImplementation {\n private readonly _points: Point3d[] = [];\n private _origin = IModelApp.tentativePoint.isActive ? IModelApp.tentativePoint.getPoint().clone() : undefined;\n private _moveOrigin = !IModelApp.accuDraw.isActive || IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...\n private _lastPoint?: Point3d;\n\n protected override onProvideToolAssistance(): void {\n switch (this._points.length) {\n case 0:\n CoreTools.outputPromptByKey(\"AccuDraw.RotatePoints.Prompts.FirstPoint\");\n break;\n\n case 1:\n CoreTools.outputPromptByKey(\"AccuDraw.RotatePoints.Prompts.SecondPoint\");\n break;\n\n default:\n CoreTools.outputPromptByKey(\"AccuDraw.RotatePoints.Prompts.NextPoint\");\n break;\n }\n }\n\n protected override onInitialize(): void {\n if (undefined === this._origin)\n return;\n\n this._points.push(this._origin);\n IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...\n\n IModelApp.accuDraw.activate();\n IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, this._origin);\n IModelApp.accuDraw.refreshDecorationsAndDynamics();\n }\n\n protected override onComplete(): AccuDrawFlags {\n let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...\n if (this._moveOrigin)\n ignoreFlags |= AccuDrawFlags.SetOrigin;\n return ignoreFlags;\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n if (!ev || !ev.viewport)\n return false;\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n if (isMotion) {\n this._lastPoint = ev.point.clone();\n return false;\n }\n\n const accuDraw = IModelApp.accuDraw;\n accuDraw.activate();\n\n switch (this._points.length) {\n case 0: {\n this._points.push(ev.point.clone());\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, this._points[0]);\n break;\n }\n\n case 1: {\n const xVec = Vector3d.createNormalizedStartEnd(this._points[0], ev.point);\n if (undefined === xVec)\n return false;\n\n if (!ev.viewport.view.is3d() || !ev.viewport.view.allow3dManipulations()) {\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.SetXAxis, this._points[0], xVec);\n return true; // Complete\n }\n\n this._points.push(ev.point.clone());\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin | AccuDrawFlags.SetNormal, this._points[0], xVec);\n break;\n }\n\n case 2: {\n const xVec = Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);\n if (undefined === xVec)\n return false;\n\n const yVec = Vector3d.createNormalizedStartEnd(this._points[0], ev.point);\n if (undefined === yVec)\n return false;\n\n const matrix = Matrix3d.createRigidFromColumns(xVec, yVec, AxisOrder.XYZ);\n if (undefined === matrix)\n return false;\n\n const invMatrix = matrix.inverse();\n if (undefined === invMatrix)\n return false;\n\n accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.SetRMatrix, this._points[0], invMatrix);\n return true; // Complete\n }\n }\n\n this.onProvideToolAssistance();\n return false;\n }\n\n public override doDecorate(context: DecorateContext): void {\n if (0 === this._points.length)\n return;\n\n const currentPoint = this._lastPoint;\n if (undefined === currentPoint)\n return;\n\n if (2 === this._points.length) {\n const xVec = Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);\n if (undefined === xVec)\n return;\n\n const plane = Plane3dByOriginAndUnitNormal.create(this._points[0], xVec);\n if (undefined === plane)\n return;\n\n plane.projectPointToPlane(currentPoint, currentPoint);\n }\n\n const tmpPoints = this._points.slice(0, 1);\n tmpPoints.push(currentPoint);\n\n const vp = context.viewport;\n const color = vp.getContrastToBackgroundColor();\n const builder = context.createGraphicBuilder(GraphicType.WorldOverlay);\n\n builder.setSymbology(color, color, 2);\n builder.addLineString(tmpPoints);\n\n context.addDecorationFromBuilder(builder);\n }\n}\n\n/**\n * Interactive tool to set the AccuDraw rotation by 3 points: x axis origin, x axis direction, and y axis direction.\n * @beta\n */\nexport class AccuDrawRotatePointsTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.RotatePoints\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new RotatePointsImplementation();\n }\n}\n\n/** @internal */\nclass DefineACSByElementImplementation extends AccuDrawShortcutImplementation {\n private _origin = Point3d.create();\n private _rMatrix = Matrix3d.createIdentity();\n private _acs?: AuxCoordSystemState;\n\n protected override onProvideToolAssistance(): void {\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByElement.Prompts.FirstPoint\");\n }\n\n private updateOrientation(snap: SnapDetail, vp: Viewport): boolean {\n const rMatrix = AccuDraw.getSnapRotation(snap, vp);\n if (undefined === rMatrix)\n return false;\n this._origin = snap.snapPoint;\n this._rMatrix = rMatrix;\n return true;\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n const vp = ev ? ev.viewport : undefined;\n if (!vp)\n return false;\n\n const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))\n return false;\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n if (isMotion)\n return true;\n\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n\n this._acs.setOrigin(this._origin);\n this._acs.setRotation(this._rMatrix);\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\n AccuDrawShortcuts.rotateToACS();\n return true;\n }\n\n public override doDecorate(context: DecorateContext): void {\n const vp = context.viewport;\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n this._acs.setOrigin(this._origin);\n this._acs.setRotation(this._rMatrix);\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\n }\n}\n\n/**\n * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction/\n * @beta\n */\nexport class DefineACSByElementTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.DefineACSByElement\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new DefineACSByElementImplementation();\n }\n}\n\n/** @internal */\nclass DefineACSByPointsImplementation extends AccuDrawShortcutImplementation {\n private readonly _points: Point3d[] = [];\n private _acs?: AuxCoordSystemState;\n private _origin = IModelApp.tentativePoint.isActive ? IModelApp.tentativePoint.getPoint().clone() : undefined;\n private _lastPoint?: Point3d;\n\n protected override onProvideToolAssistance(): void {\n switch (this._points.length) {\n case 0:\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.FirstPoint\");\n break;\n\n case 1:\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.SecondPoint\");\n break;\n\n default:\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.NextPoint\");\n break;\n }\n }\n\n protected override onInitialize(): void {\n if (undefined === this._origin)\n return;\n\n this._points.push(this._origin);\n IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...\n\n IModelApp.accuDraw.activate();\n IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, this._origin);\n IModelApp.accuDraw.refreshDecorationsAndDynamics();\n }\n\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\n if (!ev || !ev.viewport)\n return false;\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n if (isMotion) {\n this._lastPoint = ev.point.clone();\n return false;\n }\n\n IModelApp.accuDraw.activate();\n this._points.push(ev.point.clone());\n\n const vp = ev.viewport;\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n\n if (AccuDrawShortcuts.updateACSByPoints(this._acs, vp, this._points, false)) {\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\n AccuDrawShortcuts.rotateToACS();\n return true;\n }\n\n this.onProvideToolAssistance();\n return false;\n }\n\n public override doDecorate(context: DecorateContext): void {\n if (undefined === this._lastPoint)\n return;\n\n const tmpPoints: Point3d[] = [];\n this._points.forEach((pt) => tmpPoints.push(pt));\n tmpPoints.push(this._lastPoint);\n\n const vp = context.viewport;\n if (!this._acs)\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\n\n AccuDrawShortcuts.updateACSByPoints(this._acs, vp, tmpPoints, true);\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\n }\n}\n\n/**\n * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction.\n * @beta\n */\nexport class DefineACSByPointsTool extends AccuDrawShortcutTool {\n public static override toolId = \"AccuDraw.DefineACSByPoints\";\n\n /** @internal */\n protected override createImplementation(): AccuDrawShortcutImplementation {\n return new DefineACSByPointsImplementation();\n }\n}\n"]}
|