@itwin/editor-frontend 4.5.0-dev.6 → 4.5.0-dev.8
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/CreateElementTool.js.map +1 -1
- package/lib/cjs/DeleteElementsTool.js.map +1 -1
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/EditToolIpc.js.map +1 -1
- package/lib/cjs/ElementGeometryTool.js.map +1 -1
- package/lib/cjs/ModifyCurveTools.js.map +1 -1
- package/lib/cjs/ModifyElementTool.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/cjs/SketchTools.js.map +1 -1
- package/lib/cjs/SolidModelingTools.js.map +1 -1
- package/lib/cjs/SolidPrimitiveTools.js.map +1 -1
- package/lib/cjs/TransformElementsTool.js.map +1 -1
- package/lib/cjs/UndoRedoTool.js.map +1 -1
- package/lib/cjs/editor-frontend.js.map +1 -1
- package/lib/esm/CreateElementTool.js.map +1 -1
- package/lib/esm/DeleteElementsTool.js.map +1 -1
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/EditToolIpc.js.map +1 -1
- package/lib/esm/ElementGeometryTool.js.map +1 -1
- package/lib/esm/ModifyCurveTools.js.map +1 -1
- package/lib/esm/ModifyElementTool.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/esm/SketchTools.js.map +1 -1
- package/lib/esm/SolidModelingTools.js.map +1 -1
- package/lib/esm/SolidPrimitiveTools.js.map +1 -1
- package/lib/esm/TransformElementsTool.js.map +1 -1
- package/lib/esm/UndoRedoTool.js.map +1 -1
- package/lib/esm/editor-frontend.js.map +1 -1
- package/lib/public/locales/en/Editor.json +490 -490
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateElementTool.js","sourceRoot":"","sources":["../../src/CreateElementTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAqE;AACrE,wDAAuF;AACvF,oDAAsP;AACtP,wDAA4U;AAE5U,SAAS,uCAAuC,CAAC,EAAY,EAAE,MAAe,EAAE,MAAc;IAC5F,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;QACxC,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,2BAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrE,MAAM,OAAO,GAAG,wBAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEjC,kHAAkH;QAClH,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;YACtC,MAAM,GAAG,eAAe,CAAC;SAC1B;aAAM;YACL,uCAAuC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEtD,sCAAsC;YACtC,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B;SACF;KACF;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,IAAI,uBAAO,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnK,6CAA6C;IAC7C,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,SAAgB,8BAA8B,CAAC,EAAY,EAAE,EAAW,EAAE,MAAe;IACvF,OAAO,uCAAuC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAQ,CAAC,aAAa,CAAC,CAAC;AACnG,CAAC;AAFD,wEAEC;AAED;;GAEG;AACH,SAAgB,8BAA8B,CAAC,EAAY,EAAE,KAAc;IACzE,OAAO,uCAAuC,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACzG,CAAC;AAFD,wEAEC;AAED;;GAEG;AACH,MAAa,uBAAuB;IAalC,YAAY,MAAwB,EAAE,MAAc;QAHpD,wEAAwE;QACjE,mBAAc,GAAG,KAAK,CAAC;QAG5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,YAAY,CAAC,EAAc,IAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACvE,iBAAiB,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,KAAK,CAAC,aAAa,CAAC,UAAsB,EAAE,SAAyB,EAAE,QAAuD;QACpI,IAAI,WAAW,CAAC;QAChB,IAAI,IAAI,CAAC;QAET,IAAI,IAAI,GAAG,IAAA,gCAAkB,EAAC,SAAS,CAAC,EAAE;YACxC,MAAM,YAAY,GAAkC;gBAClD,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC;gBACrE,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBACxC,IAAI,EAAE,IAAI;gBACV,SAAS;gBACT,UAAU;gBACV,QAAQ;aACT,CAAC;YACF,WAAW,GAAG,MAAM,yBAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC1F,IAAI,GAAG,IAAI,CAAC;SACb;aAAM;YACL,MAAM,YAAY,GAAkC;gBAClD,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC;gBACrE,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBACxC,IAAI,EAAE,IAAI;gBACV,SAAS;gBACT,UAAU;gBACV,QAAQ;aACT,CAAC;YACF,WAAW,GAAG,MAAM,yBAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SAC3F;QAED,IAAI,SAAS,KAAK,WAAW;YAC3B,OAAO;QAET,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAmB,EAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzJ,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO;QAET,OAAO,yBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa,CAAC,UAAsB,EAAE,SAAyB,EAAE,QAAuD;QACnI,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;SACjD;QAAC,MAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED;;;OAGG;IACI,8BAA8B,CAAC,EAAiB,EAAE,UAAsB,EAAE,SAAyB,EAAE,QAAuD;QACjK,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE3F,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe;gBAClC,OAAO,CAAC,4BAA4B;YAEtC,yBAAS,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,cAAc;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO;QACT,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAEM,UAAU,CAAC,OAAwB,EAAE,SAAqB;QAC/D,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO;QAET,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO;SACR;QAED,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzB,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;CACF;AAnHD,0DAmHC;AAED;;GAEG;AACH,MAAsB,iBAAkB,SAAQ,6BAAa;IAC3D,IAAW,cAAc;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,QAAQ,CAAC;QAC7D,IAAI,SAAS,KAAK,QAAQ;YACxB,MAAM,IAAI,yBAAW,CAAC,2BAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAE1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAoB,aAAa;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;QACvD,IAAI,SAAS,KAAK,KAAK;YACrB,MAAM,IAAI,yBAAW,CAAC,2BAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEnD,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,oBAAoB,CAAC,EAAwB,EAAE,oBAA6B;QAC1F,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,qBAAqB,EAAE;YACrC,OAAO,KAAK,CAAC;QAEf,OAAO,SAAS,KAAK,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAClH,CAAC;IAED;;OAEG;IACH,IAAc,YAAY,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAEvD;;OAEG;IACH,IAAc,YAAY,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAEvD;;OAEG;IACO,UAAU,CAAC,GAAkB,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;IAKnE;;;;OAIG;IACO,KAAK,CAAC,iBAAiB,CAAC,EAAiB;QACjD,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;YACvB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,OAAO,4BAAY,CAAC,GAAG,CAAC;SACzB;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEnC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY;YAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;QAEvB,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,gBAAgB,CAAC,EAAiB;QACtD,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,GAAkB;QACtD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,8CAA8C;IAC9B,KAAK,CAAC,aAAa;QACjC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAED,8GAA8G;IAC9F,KAAK,CAAC,WAAW;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED,yEAAyE;IAC/D,2BAA2B;QACnC,yBAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED,yEAAyE;IAC/D,qBAAqB,CAAC,aAAsB,EAAE,eAA6C;QACnG,MAAM,OAAO,GAAG,kCAAkC,CAAC;QACnD,MAAM,OAAO,GAAG,+BAA+B,CAAC;QAChD,MAAM,QAAQ,GAAG,0BAA0B,CAAC;QAE5C,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAE1D,IAAI,CAAC,8BAAc,CAAC,6BAA6B,CAAC,iBAAiB,CAAC;YAClE,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,yBAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAClK,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,SAAS,EAAE,yBAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9J,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,yBAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjK,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,UAAU,EAAE,yBAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAEhK,IAAI,SAAS,KAAK,eAAe,EAAE;YACjC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;gBACnC,IAAI,yCAAyB,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW;oBACvD,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;oBAE9B,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjC;SACF;QAED,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3F,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,eAAe,GAAG,8BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACpJ,MAAM,YAAY,GAAG,8BAAc,CAAC,kBAAkB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAClF,yBAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;CACF;AA1HD,8CA0HC;AAED;;GAEG;AACH,MAAsB,6BAA8B,SAAQ,iBAAiB;IAG3E,IAAuB,YAAY,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAuB,YAAY,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAErD,aAAa;QACrB,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,OAAO;QACT,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,EAAiB;QAC9C,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACnC,OAAO;QAET,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO;QAET,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO;QAET,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjF,6CAA6C;QAC7C,IAAI,EAAE,CAAC,QAAQ;YACb,IAAI,CAAC,iBAAiB,CAAC,cAAc,GAAG,8BAA8B,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAEhG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvF,CAAC;IAEe,cAAc,CAAC,GAAkB,EAAE,OAAwB;QACzE,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEe,KAAK,CAAC,aAAa,CAAC,EAAiB;QACnD,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAMS,KAAK,CAAC,eAAe,CAAC,MAA6B,EAAE,KAAoC,IAAkB,CAAC;IAC5G,KAAK,CAAC,iBAAiB,CAAC,GAAkB,EAAE,WAAoB,IAAkB,CAAC;IAEnF,KAAK,CAAC,iBAAiB,CAAC,EAAiB;QACjD,IAAI,CAAC,yBAAS,CAAC,WAAW,CAAC,cAAc;YACvC,OAAO,KAAK,CAAC,CAAC,gEAAgE;QAEhF,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO;QAET,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO;QAET,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO;QAET,IAAI,IAAI,CAAC;QACT,IAAI,YAAY,KAAK,QAAQ,CAAC,MAAM,EAAE;YACpC,IAAI,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,2DAA2D;SACnF;aAAM;YACL,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;SAChC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAES,aAAa,KAAW,CAAC;IAEhB,2BAA2B;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,KAAK,CAAC,2BAA2B,EAAE,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,EAAiB;QAC3C,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,gBAAgB,CAAC,EAAiB;QACtD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,4BAAY,CAAC,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,GAAkB,IAAsB,OAAO,IAAI,CAAC,CAAC,CAAC;IAElE,KAAK,CAAC,eAAe,CAAC,EAAiB;QACrD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,4BAAY,CAAC,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAEe,KAAK,CAAC,SAAS;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;CACF;AAjHD,sEAiHC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Constant, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { DynamicGraphicsRequest2dProps, DynamicGraphicsRequest3dProps, ElementGeometryBuilderParams, FlatBufferGeometryStream, GeometricElementProps, IModelError, isPlacement3dProps, JsonGeometryStream, PlacementProps } from \"@itwin/core-common\";\r\nimport { BeButtonEvent, CoordSystem, CoreTools, DynamicsContext, EventHandled, GraphicBranch, IModelApp, IModelConnection, PrimitiveTool, readElementGraphics, RenderGraphicOwner, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\r\n\r\nfunction computeChordToleranceFromPointAndRadius(vp: Viewport, center: Point3d, radius: number): number {\r\n if (vp.view.is3d() && vp.view.isCameraOn) {\r\n const nearFrontCenter = vp.getFrustum(CoordSystem.World).frontCenter;\r\n const toFront = Vector3d.createStartEnd(center, nearFrontCenter);\r\n const viewZ = vp.rotation.rowZ();\r\n\r\n // If the sphere overlaps the near front plane just use near front point. This also handles behind eye conditions.\r\n if (viewZ.dotProduct(toFront) < radius) {\r\n center = nearFrontCenter;\r\n } else {\r\n // Find point on sphere closest to eye.\r\n const toEye = center.unitVectorTo(vp.view.camera.eye);\r\n\r\n // Only if not already behind the eye.\r\n if (toEye) {\r\n toEye.scaleInPlace(radius);\r\n center.addInPlace(toEye);\r\n }\r\n }\r\n }\r\n\r\n const viewPt = vp.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\r\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\r\n const pixelSize = vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\r\n\r\n // Return size of a physical pixel in meters.\r\n return (0.0 !== pixelSize ? vp.target.adjustPixelSizeForLOD(pixelSize) : 0.001);\r\n}\r\n\r\n/** Calculate a view based chord tolerance for facetting curved geometry given a world coordinate and optional radius.\r\n * @beta\r\n */\r\nexport function computeChordToleranceFromPoint(vp: Viewport, pt: Point3d, radius?: number): number {\r\n return computeChordToleranceFromPointAndRadius(vp, pt, radius ? radius : Constant.oneCentimeter);\r\n}\r\n\r\n/** Calculate a view based chord tolerance for facetting curved geometry given a world coordinate range box.\r\n * @beta\r\n */\r\nexport function computeChordToleranceFromRange(vp: Viewport, range: Range3d): number {\r\n return computeChordToleranceFromPointAndRadius(vp, range.center, 0.5 * range.low.distance(range.high));\r\n}\r\n\r\n/** A class for creating and managing a RenderGraphic for the purpose of interactive tool dynamics.\r\n * @beta\r\n */\r\nexport class DynamicGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly prefix: string;\r\n public graphic?: RenderGraphicOwner;\r\n /** Current request for graphic */\r\n private _graphicPromise?: Promise<boolean>;\r\n /** Optional element id generated graphics will be associated to */\r\n public elementId?: Id64String;\r\n /** Optional model id generated graphics will be associated to */\r\n public modelId?: Id64String;\r\n /** Chord tolerance to use to stroke the element's geometry in meters */\r\n public chordTolerance = 0.001;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n }\r\n\r\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\r\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\r\n\r\n private async createRequest(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<RenderGraphicOwner | undefined> {\r\n let graphicData;\r\n let is3d;\r\n\r\n if (is3d = isPlacement3dProps(placement)) {\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\r\n elementId: this.elementId,\r\n modelId: this.modelId,\r\n toleranceLog10: this.getToleranceLog10(),\r\n type: \"3d\",\r\n placement,\r\n categoryId,\r\n geometry,\r\n };\r\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n is3d = true;\r\n } else {\r\n const requestProps: DynamicGraphicsRequest2dProps = {\r\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\r\n elementId: this.elementId,\r\n modelId: this.modelId,\r\n toleranceLog10: this.getToleranceLog10(),\r\n type: \"2d\",\r\n placement,\r\n categoryId,\r\n geometry,\r\n };\r\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n }\r\n\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, this.modelId ? this.modelId : Id64.invalid, is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return IModelApp.renderSystem.createGraphicOwner(graphic);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied geometry and placement.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public async createGraphic(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<boolean> {\r\n try {\r\n const graphic = await this.createRequest(categoryId, placement, geometry);\r\n this.cleanupGraphic();\r\n return (undefined !== (this.graphic = graphic));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied geometry and trigger a dynamic update upon fulfillment.\r\n * @note May be useful to update a dynamic preview outside of normal button and motion events, ex. modifier key change.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public createGraphicAndUpdateDynamics(ev: BeButtonEvent, categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): void {\r\n const promise = this._graphicPromise = this.createGraphic(categoryId, placement, geometry);\r\n\r\n promise.then(() => {\r\n if (promise !== this._graphicPromise)\r\n return; // abandoned this request...\r\n\r\n IModelApp.toolAdmin.updateDynamics(ev);\r\n }).catch((_) => { });\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]].\r\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\r\n */\r\n public cleanupGraphic(): void {\r\n if (undefined === this.graphic)\r\n return;\r\n this.graphic.disposeGraphic();\r\n this.graphic = undefined;\r\n }\r\n\r\n public addGraphic(context: DynamicsContext, transform?: Transform): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n if (undefined === transform) {\r\n context.addGraphic(this.graphic);\r\n return;\r\n }\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** Placement tool base class for creating new elements.\r\n * @beta\r\n */\r\nexport abstract class CreateElementTool extends PrimitiveTool {\r\n public get targetCategory(): Id64String {\r\n const category = this.briefcase?.editorToolSettings.category;\r\n if (undefined === category)\r\n throw new IModelError(IModelStatus.InvalidCategory, \"\");\r\n\r\n return category;\r\n }\r\n\r\n public override get targetModelId(): Id64String {\r\n const model = this.briefcase?.editorToolSettings.model;\r\n if (undefined === model)\r\n throw new IModelError(IModelStatus.BadModel, \"\");\r\n\r\n return model;\r\n }\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean {\r\n if (!vp?.iModel.isBriefcaseConnection())\r\n return false;\r\n\r\n return undefined !== vp.iModel.editorToolSettings.model && super.isCompatibleViewport(vp, isSelectedViewChange);\r\n }\r\n\r\n /** Whether [[setupAndPromptForNextAction]] should call [[AccuSnap.enableSnap]] for current tool phase.\r\n * @return true to enable snapping to elements.\r\n */\r\n protected get wantAccuSnap(): boolean { return false; }\r\n\r\n /** Whether to automatically start element dynamics on button event.\r\n * @return true if tool will implement [[InteractiveTool.onDynamicFrame]] to show element dynamics.\r\n */\r\n protected get wantDynamics(): boolean { return false; }\r\n\r\n /** Whether tool is ready to insert the new element.\r\n * @return true to call [[createElement]].\r\n */\r\n protected isComplete(_ev: BeButtonEvent): boolean { return false; }\r\n\r\n /** Insert new element and call [[saveChanges]] */\r\n protected abstract createElement(): Promise<void>;\r\n\r\n /** Orchestrates advancing the internal state of the tool on a data button event.\r\n * - Gather input: Initiates element dynamics and accepts additional points as required.\r\n * - Complete operation: Create new element, restart or exit tool.\r\n * @returns EventHandled.Yes if onReinitialize was called to restart or exit tool.\r\n */\r\n protected async processDataButton(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this.isComplete(ev)) {\r\n await this.createElement();\r\n await this.onReinitialize();\r\n\r\n return EventHandled.Yes;\r\n }\r\n\r\n this.setupAndPromptForNextAction();\r\n\r\n if (!this.isDynamicsStarted && this.wantDynamics)\r\n this.beginDynamics();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n return this.processDataButton(ev);\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** Setup initial tool state, prompts, etc. */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** Restore tool assistance after no longer being suspended by either a [[ViewTool]] or [[InputCollector]]. */\r\n public override async onUnsuspend() {\r\n this.provideToolAssistance();\r\n }\r\n\r\n /** Setup auto-locate, AccuSnap, AccuDraw, and supply tool assistance. */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(this.wantAccuSnap);\r\n this.provideToolAssistance();\r\n }\r\n\r\n /** Sub-classes should override to provide tool specific instructions. */\r\n protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n const mainMsg = \"ElementSet.Prompts.IdentifyPoint\";\r\n const leftMsg = \"ElementSet.Inputs.AcceptPoint\";\r\n const rightMsg = \"ElementSet.Inputs.Cancel\";\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (undefined !== additionalInstr) {\r\n for (const instr of additionalInstr) {\r\n if (ToolAssistanceInputMethod.Touch === instr.inputMethod)\r\n touchInstructions.push(instr);\r\n else\r\n mouseInstructions.push(instr);\r\n }\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, undefined !== mainInstrText ? mainInstrText : CoreTools.translate(mainMsg));\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n}\r\n\r\n/** Placement tool base class for creating new elements that use dynamics to show intermediate results.\r\n * @beta\r\n */\r\nexport abstract class CreateElementWithDynamicsTool extends CreateElementTool {\r\n protected _graphicsProvider?: DynamicGraphicsProvider;\r\n\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n\r\n protected clearGraphics(): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n this._graphicsProvider.cleanupGraphic();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected async createGraphics(ev: BeButtonEvent): Promise<void> {\r\n if (!await this.updateDynamicData(ev))\r\n return;\r\n\r\n const placement = this.getPlacementProps();\r\n if (undefined === placement)\r\n return;\r\n\r\n const geometry = this.getGeometryProps(placement);\r\n if (undefined === geometry)\r\n return;\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);\r\n\r\n // Set chord tolerance for curved surfaces...\r\n if (ev.viewport)\r\n this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);\r\n\r\n await this._graphicsProvider.createGraphic(this.targetCategory, placement, geometry);\r\n }\r\n\r\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphic(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n return this.createGraphics(ev);\r\n }\r\n\r\n protected abstract getPlacementProps(): PlacementProps | undefined;\r\n protected abstract getGeometryProps(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;\r\n protected abstract getElementProps(placement: PlacementProps): GeometricElementProps | undefined;\r\n\r\n protected async doCreateElement(_props: GeometricElementProps, _data?: ElementGeometryBuilderParams): Promise<void> {}\r\n protected async updateElementData(_ev: BeButtonEvent, _isDynamics: boolean): Promise<void> {}\r\n\r\n protected async updateDynamicData(ev: BeButtonEvent): Promise<boolean> {\r\n if (!IModelApp.viewManager.inDynamicsMode)\r\n return false; // Don't need to create graphic if dynamics aren't yet active...\r\n\r\n await this.updateElementData(ev, true);\r\n return true;\r\n }\r\n\r\n protected async createElement(): Promise<void> {\r\n const placement = this.getPlacementProps();\r\n if (undefined === placement)\r\n return;\r\n\r\n const geometry = this.getGeometryProps(placement);\r\n if (undefined === geometry)\r\n return;\r\n\r\n const elemProps = this.getElementProps(placement);\r\n if (undefined === elemProps)\r\n return;\r\n\r\n let data;\r\n if (\"flatbuffer\" === geometry.format) {\r\n data = { entryArray: geometry.data };\r\n delete elemProps.geom; // Leave unchanged until replaced by flatbuffer geometry...\r\n } else {\r\n elemProps.geom = geometry.data;\r\n }\r\n\r\n return this.doCreateElement(elemProps, data);\r\n }\r\n\r\n protected setupAccuDraw(): void { }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n this.setupAccuDraw();\r\n super.setupAndPromptForNextAction();\r\n }\r\n\r\n protected async acceptPoint(ev: BeButtonEvent): Promise<boolean> {\r\n await this.updateElementData(ev, false);\r\n return true;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (!await this.acceptPoint(ev))\r\n return EventHandled.Yes;\r\n return super.onDataButtonDown(ev);\r\n }\r\n\r\n protected async cancelPoint(_ev: BeButtonEvent): Promise<boolean> { return true; }\r\n\r\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (!await this.cancelPoint(ev))\r\n return EventHandled.Yes;\r\n return super.onResetButtonUp(ev);\r\n }\r\n\r\n public override async onCleanup() {\r\n this.clearGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CreateElementTool.js","sourceRoot":"","sources":["../../src/CreateElementTool.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\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\nimport { Constant, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { DynamicGraphicsRequest2dProps, DynamicGraphicsRequest3dProps, ElementGeometryBuilderParams, FlatBufferGeometryStream, GeometricElementProps, IModelError, isPlacement3dProps, JsonGeometryStream, PlacementProps } from \"@itwin/core-common\";\nimport { BeButtonEvent, CoordSystem, CoreTools, DynamicsContext, EventHandled, GraphicBranch, IModelApp, IModelConnection, PrimitiveTool, readElementGraphics, RenderGraphicOwner, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\n\nfunction computeChordToleranceFromPointAndRadius(vp: Viewport, center: Point3d, radius: number): number {\n if (vp.view.is3d() && vp.view.isCameraOn) {\n const nearFrontCenter = vp.getFrustum(CoordSystem.World).frontCenter;\n const toFront = Vector3d.createStartEnd(center, nearFrontCenter);\n const viewZ = vp.rotation.rowZ();\n\n // If the sphere overlaps the near front plane just use near front point. This also handles behind eye conditions.\n if (viewZ.dotProduct(toFront) < radius) {\n center = nearFrontCenter;\n } else {\n // Find point on sphere closest to eye.\n const toEye = center.unitVectorTo(vp.view.camera.eye);\n\n // Only if not already behind the eye.\n if (toEye) {\n toEye.scaleInPlace(radius);\n center.addInPlace(toEye);\n }\n }\n }\n\n const viewPt = vp.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\n const pixelSize = vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\n\n // Return size of a physical pixel in meters.\n return (0.0 !== pixelSize ? vp.target.adjustPixelSizeForLOD(pixelSize) : 0.001);\n}\n\n/** Calculate a view based chord tolerance for facetting curved geometry given a world coordinate and optional radius.\n * @beta\n */\nexport function computeChordToleranceFromPoint(vp: Viewport, pt: Point3d, radius?: number): number {\n return computeChordToleranceFromPointAndRadius(vp, pt, radius ? radius : Constant.oneCentimeter);\n}\n\n/** Calculate a view based chord tolerance for facetting curved geometry given a world coordinate range box.\n * @beta\n */\nexport function computeChordToleranceFromRange(vp: Viewport, range: Range3d): number {\n return computeChordToleranceFromPointAndRadius(vp, range.center, 0.5 * range.low.distance(range.high));\n}\n\n/** A class for creating and managing a RenderGraphic for the purpose of interactive tool dynamics.\n * @beta\n */\nexport class DynamicGraphicsProvider {\n public readonly iModel: IModelConnection;\n public readonly prefix: string;\n public graphic?: RenderGraphicOwner;\n /** Current request for graphic */\n private _graphicPromise?: Promise<boolean>;\n /** Optional element id generated graphics will be associated to */\n public elementId?: Id64String;\n /** Optional model id generated graphics will be associated to */\n public modelId?: Id64String;\n /** Chord tolerance to use to stroke the element's geometry in meters */\n public chordTolerance = 0.001;\n\n constructor(iModel: IModelConnection, prefix: string) {\n this.iModel = iModel;\n this.prefix = prefix;\n }\n\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\n\n private async createRequest(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<RenderGraphicOwner | undefined> {\n let graphicData;\n let is3d;\n\n if (is3d = isPlacement3dProps(placement)) {\n const requestProps: DynamicGraphicsRequest3dProps = {\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\n elementId: this.elementId,\n modelId: this.modelId,\n toleranceLog10: this.getToleranceLog10(),\n type: \"3d\",\n placement,\n categoryId,\n geometry,\n };\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\n is3d = true;\n } else {\n const requestProps: DynamicGraphicsRequest2dProps = {\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\n elementId: this.elementId,\n modelId: this.modelId,\n toleranceLog10: this.getToleranceLog10(),\n type: \"2d\",\n placement,\n categoryId,\n geometry,\n };\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\n }\n\n if (undefined === graphicData)\n return;\n\n const graphic = await readElementGraphics(graphicData, this.iModel, this.modelId ? this.modelId : Id64.invalid, is3d, { noFlash: true, noHilite: true });\n if (undefined === graphic)\n return;\n\n return IModelApp.renderSystem.createGraphicOwner(graphic);\n }\n\n /** Call to request a RenderGraphic for the supplied geometry and placement.\n * @see [[cleanupGraphic]] Must be called when the tool exits.\n */\n public async createGraphic(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<boolean> {\n try {\n const graphic = await this.createRequest(categoryId, placement, geometry);\n this.cleanupGraphic();\n return (undefined !== (this.graphic = graphic));\n } catch {\n return false;\n }\n }\n\n /** Call to request a RenderGraphic for the supplied geometry and trigger a dynamic update upon fulfillment.\n * @note May be useful to update a dynamic preview outside of normal button and motion events, ex. modifier key change.\n * @see [[cleanupGraphic]] Must be called when the tool exits.\n */\n public createGraphicAndUpdateDynamics(ev: BeButtonEvent, categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): void {\n const promise = this._graphicPromise = this.createGraphic(categoryId, placement, geometry);\n\n promise.then(() => {\n if (promise !== this._graphicPromise)\n return; // abandoned this request...\n\n IModelApp.toolAdmin.updateDynamics(ev);\n }).catch((_) => { });\n }\n\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]].\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\n */\n public cleanupGraphic(): void {\n if (undefined === this.graphic)\n return;\n this.graphic.disposeGraphic();\n this.graphic = undefined;\n }\n\n public addGraphic(context: DynamicsContext, transform?: Transform): void {\n if (undefined === this.graphic)\n return;\n\n if (undefined === transform) {\n context.addGraphic(this.graphic);\n return;\n }\n\n const branch = new GraphicBranch(false);\n branch.add(this.graphic);\n\n const branchGraphic = context.createBranch(branch, transform);\n context.addGraphic(branchGraphic);\n }\n}\n\n/** Placement tool base class for creating new elements.\n * @beta\n */\nexport abstract class CreateElementTool extends PrimitiveTool {\n public get targetCategory(): Id64String {\n const category = this.briefcase?.editorToolSettings.category;\n if (undefined === category)\n throw new IModelError(IModelStatus.InvalidCategory, \"\");\n\n return category;\n }\n\n public override get targetModelId(): Id64String {\n const model = this.briefcase?.editorToolSettings.model;\n if (undefined === model)\n throw new IModelError(IModelStatus.BadModel, \"\");\n\n return model;\n }\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean {\n if (!vp?.iModel.isBriefcaseConnection())\n return false;\n\n return undefined !== vp.iModel.editorToolSettings.model && super.isCompatibleViewport(vp, isSelectedViewChange);\n }\n\n /** Whether [[setupAndPromptForNextAction]] should call [[AccuSnap.enableSnap]] for current tool phase.\n * @return true to enable snapping to elements.\n */\n protected get wantAccuSnap(): boolean { return false; }\n\n /** Whether to automatically start element dynamics on button event.\n * @return true if tool will implement [[InteractiveTool.onDynamicFrame]] to show element dynamics.\n */\n protected get wantDynamics(): boolean { return false; }\n\n /** Whether tool is ready to insert the new element.\n * @return true to call [[createElement]].\n */\n protected isComplete(_ev: BeButtonEvent): boolean { return false; }\n\n /** Insert new element and call [[saveChanges]] */\n protected abstract createElement(): Promise<void>;\n\n /** Orchestrates advancing the internal state of the tool on a data button event.\n * - Gather input: Initiates element dynamics and accepts additional points as required.\n * - Complete operation: Create new element, restart or exit tool.\n * @returns EventHandled.Yes if onReinitialize was called to restart or exit tool.\n */\n protected async processDataButton(ev: BeButtonEvent): Promise<EventHandled> {\n if (this.isComplete(ev)) {\n await this.createElement();\n await this.onReinitialize();\n\n return EventHandled.Yes;\n }\n\n this.setupAndPromptForNextAction();\n\n if (!this.isDynamicsStarted && this.wantDynamics)\n this.beginDynamics();\n\n return EventHandled.No;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n return this.processDataButton(ev);\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** Setup initial tool state, prompts, etc. */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** Restore tool assistance after no longer being suspended by either a [[ViewTool]] or [[InputCollector]]. */\n public override async onUnsuspend() {\n this.provideToolAssistance();\n }\n\n /** Setup auto-locate, AccuSnap, AccuDraw, and supply tool assistance. */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(this.wantAccuSnap);\n this.provideToolAssistance();\n }\n\n /** Sub-classes should override to provide tool specific instructions. */\n protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n const mainMsg = \"ElementSet.Prompts.IdentifyPoint\";\n const leftMsg = \"ElementSet.Inputs.AcceptPoint\";\n const rightMsg = \"ElementSet.Inputs.Cancel\";\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Mouse));\n\n if (undefined !== additionalInstr) {\n for (const instr of additionalInstr) {\n if (ToolAssistanceInputMethod.Touch === instr.inputMethod)\n touchInstructions.push(instr);\n else\n mouseInstructions.push(instr);\n }\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, undefined !== mainInstrText ? mainInstrText : CoreTools.translate(mainMsg));\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n}\n\n/** Placement tool base class for creating new elements that use dynamics to show intermediate results.\n * @beta\n */\nexport abstract class CreateElementWithDynamicsTool extends CreateElementTool {\n protected _graphicsProvider?: DynamicGraphicsProvider;\n\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantDynamics(): boolean { return true; }\n\n protected clearGraphics(): void {\n if (undefined === this._graphicsProvider)\n return;\n this._graphicsProvider.cleanupGraphic();\n this._graphicsProvider = undefined;\n }\n\n protected async createGraphics(ev: BeButtonEvent): Promise<void> {\n if (!await this.updateDynamicData(ev))\n return;\n\n const placement = this.getPlacementProps();\n if (undefined === placement)\n return;\n\n const geometry = this.getGeometryProps(placement);\n if (undefined === geometry)\n return;\n\n if (undefined === this._graphicsProvider)\n this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);\n\n // Set chord tolerance for curved surfaces...\n if (ev.viewport)\n this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);\n\n await this._graphicsProvider.createGraphic(this.targetCategory, placement, geometry);\n }\n\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\n if (undefined !== this._graphicsProvider)\n this._graphicsProvider.addGraphic(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n return this.createGraphics(ev);\n }\n\n protected abstract getPlacementProps(): PlacementProps | undefined;\n protected abstract getGeometryProps(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;\n protected abstract getElementProps(placement: PlacementProps): GeometricElementProps | undefined;\n\n protected async doCreateElement(_props: GeometricElementProps, _data?: ElementGeometryBuilderParams): Promise<void> {}\n protected async updateElementData(_ev: BeButtonEvent, _isDynamics: boolean): Promise<void> {}\n\n protected async updateDynamicData(ev: BeButtonEvent): Promise<boolean> {\n if (!IModelApp.viewManager.inDynamicsMode)\n return false; // Don't need to create graphic if dynamics aren't yet active...\n\n await this.updateElementData(ev, true);\n return true;\n }\n\n protected async createElement(): Promise<void> {\n const placement = this.getPlacementProps();\n if (undefined === placement)\n return;\n\n const geometry = this.getGeometryProps(placement);\n if (undefined === geometry)\n return;\n\n const elemProps = this.getElementProps(placement);\n if (undefined === elemProps)\n return;\n\n let data;\n if (\"flatbuffer\" === geometry.format) {\n data = { entryArray: geometry.data };\n delete elemProps.geom; // Leave unchanged until replaced by flatbuffer geometry...\n } else {\n elemProps.geom = geometry.data;\n }\n\n return this.doCreateElement(elemProps, data);\n }\n\n protected setupAccuDraw(): void { }\n\n protected override setupAndPromptForNextAction(): void {\n this.setupAccuDraw();\n super.setupAndPromptForNextAction();\n }\n\n protected async acceptPoint(ev: BeButtonEvent): Promise<boolean> {\n await this.updateElementData(ev, false);\n return true;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (!await this.acceptPoint(ev))\n return EventHandled.Yes;\n return super.onDataButtonDown(ev);\n }\n\n protected async cancelPoint(_ev: BeButtonEvent): Promise<boolean> { return true; }\n\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\n if (!await this.cancelPoint(ev))\n return EventHandled.Yes;\n return super.onResetButtonUp(ev);\n }\n\n public override async onCleanup() {\n this.clearGraphics();\n return super.onCleanup();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteElementsTool.js","sourceRoot":"","sources":["../../src/DeleteElementsTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAiE;AACjE,wDAA8G;AAC9G,wDAA2D;AAC3D,yCAAuC;AACvC,+CAAqD;AAErD,kHAAkH;AAClH,MAAa,kBAAmB,SAAQ,8BAAc;IAIpD,IAAuB,iBAAiB,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IACpE,IAAuB,WAAW,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAuB,eAAe,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAClE,IAAuB,4BAA4B,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAuB,qCAAqC,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAEzE,KAAK,CAAC,sBAAsB;QAC1C,IAAI;YACF,MAAM,oBAAS,CAAC,YAAY,CAAS,EAAE,SAAS,EAAE,mCAAmB,CAAC,oBAAoB,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1H,IAAI,2BAAY,CAAC,OAAO,KAAK,MAAM,kCAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC/F,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,2BAAY,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,4BAA4B,CAAC,CAAC,CAAC;SACjK;IACH,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AAvBsB,yBAAM,GAAG,gBAAgB,CAAC;AAC1B,2BAAQ,GAAG,aAAa,CAAC;AAFrC,gDAAkB","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"DeleteElementsTool.js","sourceRoot":"","sources":["../../src/DeleteElementsTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAiE;AACjE,wDAA8G;AAC9G,wDAA2D;AAC3D,yCAAuC;AACvC,+CAAqD;AAErD,kHAAkH;AAClH,MAAa,kBAAmB,SAAQ,8BAAc;IAIpD,IAAuB,iBAAiB,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IACpE,IAAuB,WAAW,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAuB,eAAe,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAClE,IAAuB,4BAA4B,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAuB,qCAAqC,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAEzE,KAAK,CAAC,sBAAsB;QAC1C,IAAI;YACF,MAAM,oBAAS,CAAC,YAAY,CAAS,EAAE,SAAS,EAAE,mCAAmB,CAAC,oBAAoB,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1H,IAAI,2BAAY,CAAC,OAAO,KAAK,MAAM,kCAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC/F,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,2BAAY,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,4BAA4B,CAAC,CAAC,CAAC;SACjK;IACH,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AAvBsB,yBAAM,GAAG,gBAAgB,CAAC;AAC1B,2BAAQ,GAAG,aAAa,CAAC;AAFrC,gDAAkB","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\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { BentleyError, IModelStatus } from \"@itwin/core-bentley\";\nimport { ElementSetTool, IModelApp, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { editorBuiltInCmdIds } from \"@itwin/editor-common\";\nimport { EditTools } from \"./EditTool\";\nimport { basicManipulationIpc } from \"./EditToolIpc\";\n\n/** @alpha Delete elements immediately from active selection set or prompt user to identify elements to delete. */\nexport class DeleteElementsTool extends ElementSetTool {\n public static override toolId = \"DeleteElements\";\n public static override iconSpec = \"icon-delete\";\n\n protected override get allowSelectionSet(): boolean { return true; }\n protected override get allowGroups(): boolean { return true; }\n protected override get allowDragSelect(): boolean { return true; }\n protected override get controlKeyContinuesSelection(): boolean { return true; }\n protected override get requireAcceptForSelectionSetOperation(): boolean { return false; }\n\n public override async processAgendaImmediate(): Promise<void> {\n try {\n await EditTools.startCommand<string>({ commandId: editorBuiltInCmdIds.cmdBasicManipulation, iModelKey: this.iModel.key });\n if (IModelStatus.Success === await basicManipulationIpc.deleteElements(this.agenda.compressIds()))\n await this.saveChanges();\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\n }\n }\n\n public async onRestartTool() {\n const tool = new DeleteElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n"]}
|
package/lib/cjs/EditTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAiD;AACjD,wDAAyD;AACzD,wDAAwD;AAExD,gDAAgD;AAChD,2DAA2D;AAC3D,uDAAuD;AACvD,8EAA8E;AAC9E,2EAA2E;AAC3E,6CAA6C;AAC7C,2DAA2D;AAC3D,6DAA6D;AAC7D,0DAA0D;AAgB1D;;;GAGG;AACH,MAAa,SAAS;IAMb,MAAM,CAAC,KAAK,CAAC,YAAY,CAAI,QAA6B,EAAE,GAAG,OAAc;QAClF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,EAAE;YACX,IAAI;gBACF,OAAO,MAAO,sBAAM,CAAC,cAAc,CAAC,gCAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,OAAO,CAAgB,CAAC;aAClJ;YAAC,OAAO,CAAM,EAAE;gBACf,IAAI,CAAC,CAAC,IAAI,KAAK,gCAAgB,CAAC,WAAW;oBACzC,MAAM,CAAC,CAAC,CAAC,wBAAwB;gBACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;gBACnE,MAAM,yBAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;aACjD;SACF;IACH,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,SAAS,CAAC,MAAc;QACpC,OAAO,yBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC5B,IAAI,IAAI,CAAC,YAAY;YACnB,OAAO;QAET,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,oCAAoC;QACpC,yBAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,yBAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElF,MAAM,KAAK,GAAG,yBAAS,CAAC,KAAK,CAAC;QAC9B,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpD,uEAAuE;QACvE,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,MAAM,CAAC,QAAQ;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;;AA5DsB,mBAAS,GAAG,QAAQ,CAAC;AACrB,eAAK,GAAG,eAAe,CAAC;AAEhC,sBAAY,GAAG,KAAK,CAAC;AAJzB,8BAAS","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAiD;AACjD,wDAAyD;AACzD,wDAAwD;AAExD,gDAAgD;AAChD,2DAA2D;AAC3D,uDAAuD;AACvD,8EAA8E;AAC9E,2EAA2E;AAC3E,6CAA6C;AAC7C,2DAA2D;AAC3D,6DAA6D;AAC7D,0DAA0D;AAgB1D;;;GAGG;AACH,MAAa,SAAS;IAMb,MAAM,CAAC,KAAK,CAAC,YAAY,CAAI,QAA6B,EAAE,GAAG,OAAc;QAClF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,EAAE;YACX,IAAI;gBACF,OAAO,MAAO,sBAAM,CAAC,cAAc,CAAC,gCAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,OAAO,CAAgB,CAAC;aAClJ;YAAC,OAAO,CAAM,EAAE;gBACf,IAAI,CAAC,CAAC,IAAI,KAAK,gCAAgB,CAAC,WAAW;oBACzC,MAAM,CAAC,CAAC,CAAC,wBAAwB;gBACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;gBACnE,MAAM,yBAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;aACjD;SACF;IACH,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,SAAS,CAAC,MAAc;QACpC,OAAO,yBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC5B,IAAI,IAAI,CAAC,YAAY;YACnB,OAAO;QAET,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,oCAAoC;QACpC,yBAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,yBAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElF,MAAM,KAAK,GAAG,yBAAS,CAAC,KAAK,CAAC;QAC9B,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpD,uEAAuE;QACvE,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,MAAM,CAAC,QAAQ;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;;AA5DsB,mBAAS,GAAG,QAAQ,CAAC;AACrB,eAAK,GAAG,eAAe,CAAC;AAEhC,sBAAY,GAAG,KAAK,CAAC;AAJzB,8BAAS","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 Editing\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { IModelApp, IpcApp } from \"@itwin/core-frontend\";\nimport { editorIpcStrings } from \"@itwin/editor-common\";\n\nimport * as UndoRedoTools from \"./UndoRedoTool\";\nimport * as DeleteElementsTool from \"./DeleteElementsTool\";\nimport * as ModifyCurveTools from \"./ModifyCurveTools\";\nimport * as ProjectLocation from \"./ProjectLocation/ProjectExtentsDecoration\";\nimport * as ProjectGeoLocation from \"./ProjectLocation/ProjectGeolocation\";\nimport * as SketchTools from \"./SketchTools\";\nimport * as SolidModelingTools from \"./SolidModelingTools\";\nimport * as SolidPrimitiveTools from \"./SolidPrimitiveTools\";\nimport * as TransformTools from \"./TransformElementsTool\";\n\n/** @beta */\nexport namespace EditTools {\n export interface StartArgs {\n commandId: string;\n iModelKey: string;\n }\n /** handler for retries when an EditTool attempts to start but a backend command is busy and can't finish its work.\n * @param attempt the number of times this handler was previously called for this EditTool\n * @param msg the message about what's happening from the currently busy EditCommand.\n * @returns the delay (in milliseconds) before attempting again. If `undefined` use default (usually 1 second)\n */\n export type BusyRetry = (attempt: number, msg: string) => Promise<number | undefined>;\n}\n\n/**\n * Supports PrimitiveTool and InputCollector sub-classes.\n * @beta\n */\nexport class EditTools {\n public static readonly namespace = \"Editor\";\n public static readonly tools = \"Editor:tools.\";\n public static busyRetry?: EditTools.BusyRetry;\n private static _initialized = false;\n\n public static async startCommand<T>(startArg: EditTools.StartArgs, ...cmdArgs: any[]): Promise<T> {\n let attempt = 0;\n while (true) {\n try {\n return await (IpcApp.callIpcChannel(editorIpcStrings.channel, \"startCommand\", startArg.commandId, startArg.iModelKey, ...cmdArgs) as Promise<T>);\n } catch (e: any) {\n if (e.name !== editorIpcStrings.commandBusy)\n throw e; // unknown backend error\n const delay = await this.busyRetry?.(attempt++, e.message) ?? 1000;\n await BeDuration.fromMilliseconds(delay).wait();\n }\n }\n }\n\n /** @internal */\n public static translate(prompt: string) {\n return IModelApp.localization.getLocalizedString(this.tools + prompt);\n }\n\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await EditorTools.initialize();\n * ```\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\n\n const tools = IModelApp.tools;\n tools.registerModule(UndoRedoTools, this.namespace);\n\n // TODO: TEMPORARY - Register tools for testing. To be moved into apps.\n tools.registerModule(ProjectLocation, this.namespace);\n tools.registerModule(ProjectGeoLocation, this.namespace);\n tools.registerModule(SketchTools, this.namespace);\n tools.registerModule(SolidModelingTools, this.namespace);\n tools.registerModule(SolidPrimitiveTools, this.namespace);\n tools.registerModule(TransformTools, this.namespace);\n tools.registerModule(DeleteElementsTool, this.namespace);\n tools.registerModule(ModifyCurveTools, this.namespace);\n\n return namespacePromise;\n }\n\n private static shutdown() {\n this._initialized = false;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditToolIpc.js","sourceRoot":"","sources":["../../src/EditToolIpc.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,wDAA8C;AAC9C,wDAA8H;AAE9H;;;GAGG;AACH,SAAgB,eAAe;IAC7B,OAAO,sBAAM,CAAC,oBAAoB,CAAI,gCAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAChF,CAAC;AAFD,0CAEC;AAED;;GAEG;AACU,QAAA,oBAAoB,GAAG,eAAe,EAA+B,CAAC;AACnF;;EAEE;AACW,QAAA,gBAAgB,GAAG,eAAe,EAA2B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"EditToolIpc.js","sourceRoot":"","sources":["../../src/EditToolIpc.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,wDAA8C;AAC9C,wDAA8H;AAE9H;;;GAGG;AACH,SAAgB,eAAe;IAC7B,OAAO,sBAAM,CAAC,oBAAoB,CAAI,gCAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAChF,CAAC;AAFD,0CAEC;AAED;;GAEG;AACU,QAAA,oBAAoB,GAAG,eAAe,EAA+B,CAAC;AACnF;;EAEE;AACW,QAAA,gBAAgB,GAAG,eAAe,EAA2B,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 Editing\n */\n\nimport { PickAsyncMethods } from \"@itwin/core-bentley\";\nimport { IpcApp } from \"@itwin/core-frontend\";\nimport { BasicManipulationCommandIpc, EditCommandIpc, editorIpcStrings, SolidModelingCommandIpc } from \"@itwin/editor-common\";\n\n/**\n * Create a type safe Proxy object to make IPC calls from [[EditTools]] to methods of an `EditCommandIpc` interface of the current `EditCommand`.\n * @beta\n */\nexport function makeEditToolIpc<K extends EditCommandIpc>(): PickAsyncMethods<K> {\n return IpcApp.makeIpcFunctionProxy<K>(editorIpcStrings.channel, \"callMethod\");\n}\n\n/** Proxy for calling methods in `BasicManipulationCommandIpc`\n * @internal\n */\nexport const basicManipulationIpc = makeEditToolIpc<BasicManipulationCommandIpc>();\n/** Proxy for calling methods in `SolidModelingCommandIpc`\n* @internal\n*/\nexport const solidModelingIpc = makeEditToolIpc<SolidModelingCommandIpc>();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementGeometryTool.js","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from \"@itwin/core-common\";\r\nimport {\r\n AccuDrawHintBuilder, BeButtonEvent, BeModifierKeys, CoordinateLockOverrides, CoordSource, CoreTools, DecorateContext, DynamicsContext,\r\n ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranch, GraphicBranchOptions, GraphicType, HitDetail, IModelApp,\r\n IModelConnection, InputSource, LocateResponse, readElementGraphics, RenderGraphicOwner, SelectionMethod, SelectionSet, ToolAssistance,\r\n ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { Point3d, Range3d, Ray3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BRepEntityType, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, LocateSubEntityProps,\r\n SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType,\r\n} from \"@itwin/editor-common\";\r\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\r\nimport { EditTools } from \"./EditTool\";\r\nimport { solidModelingIpc } from \"./EditToolIpc\";\r\n\r\n/** @alpha */\r\nexport class ElementGeometryGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public graphic?: RenderGraphicOwner;\r\n\r\n constructor(iModel: IModelConnection) {\r\n this.iModel = iModel;\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied graphic data.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public async createGraphic(graphicData: Uint8Array): Promise<boolean> {\r\n try {\r\n const graphic = await readElementGraphics(graphicData, this.iModel, Id64.invalid, true, { noFlash: true, noHilite: true });\r\n const graphicOwner = graphic ? IModelApp.renderSystem.createGraphicOwner(graphic) : undefined;\r\n this.cleanupGraphic();\r\n return (undefined !== (this.graphic = graphicOwner));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]].\r\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\r\n */\r\n public cleanupGraphic(): void {\r\n if (undefined === this.graphic)\r\n return;\r\n this.graphic.disposeGraphic();\r\n this.graphic = undefined;\r\n }\r\n\r\n public addGraphic(context: DynamicsContext, transform?: Transform, opts?: GraphicBranchOptions): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n if (undefined === transform && undefined === opts) {\r\n context.addGraphic(this.graphic);\r\n return;\r\n }\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addDecoration(context: DecorateContext, type: GraphicType, transform?: Transform, opts?: GraphicBranchOptions): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\r\n context.addDecoration(type, branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport function isSameSubEntity(a: SubEntityProps, b: SubEntityProps): boolean {\r\n if (a.type !== b.type)\r\n return false;\r\n if (a.id !== b.id)\r\n return false;\r\n if ((undefined !== a.index ? a.index : 0) !== (undefined !== b.index ? b.index : 0))\r\n return false;\r\n return true;\r\n}\r\n\r\n/** @alpha */\r\nexport class SubEntityData {\r\n public toolData?: any;\r\n public chordTolerance?: number;\r\n\r\n private _props: SubEntityProps;\r\n private _geometry?: SubEntityGeometryProps;\r\n private _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n\r\n constructor(props: SubEntityProps) { this._props = props; }\r\n\r\n public get props(): SubEntityProps { return this._props; }\r\n public set props(value: SubEntityProps) {\r\n this.cleanupGraphic();\r\n this._props = value;\r\n }\r\n\r\n public get geometry(): SubEntityGeometryProps | undefined { return this._geometry; }\r\n public set geometry(value: SubEntityGeometryProps | undefined) { this._geometry = value; }\r\n\r\n public isSame(other: SubEntityProps): boolean { return isSameSubEntity(this._props, other); }\r\n\r\n public getAppearance(vp: Viewport, accepted: boolean): FeatureAppearance {\r\n const color = vp.hilite.color;\r\n const rgb = RgbColor.fromColorDef(accepted ? color.inverse() : color);\r\n const transparency = 0.25;\r\n const emphasized = true; // Necessary for obscured sub-entities w/SceneGraphic...\r\n let weight;\r\n\r\n switch (this.props.type) {\r\n case SubEntityType.Face:\r\n break;\r\n case SubEntityType.Edge:\r\n const edgeWeight = accepted ? 1 : 3;\r\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + edgeWeight, 31) : edgeWeight;\r\n break;\r\n case SubEntityType.Vertex:\r\n const vertexWeight = accepted ? 8 : 10;\r\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + vertexWeight, 31) : vertexWeight;\r\n break;\r\n }\r\n\r\n return FeatureAppearance.fromJSON({ rgb, transparency, weight, emphasized, nonLocatable: true });\r\n }\r\n\r\n public async createGraphic(iModel: IModelConnection): Promise<boolean> {\r\n if (undefined === this._geometry?.graphic)\r\n return false;\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new ElementGeometryGraphicsProvider(iModel);\r\n\r\n return this._graphicsProvider.createGraphic(this._geometry.graphic);\r\n }\r\n\r\n public cleanupGraphic(): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n this._graphicsProvider.cleanupGraphic();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n public get hasGraphic(): boolean {\r\n return (undefined !== this._graphicsProvider?.graphic);\r\n }\r\n\r\n public display(context: DecorateContext, accepted: boolean): void {\r\n if (undefined === this._graphicsProvider?.graphic)\r\n return;\r\n\r\n const range = (this._geometry?.range ? Range3d.fromJSON(this._geometry.range) : undefined);\r\n const pixelSize = context.viewport.getPixelSizeAtPoint(range ? range.center : undefined);\r\n const offsetDir = context.viewport.view.getZVector();\r\n offsetDir.scaleToLength(3 * pixelSize, offsetDir);\r\n const offsetTrans = Transform.createTranslation(offsetDir);\r\n\r\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.getAppearance(context.viewport, accepted));\r\n });\r\n\r\n this._graphicsProvider.addDecoration(context, GraphicType.Scene, offsetTrans, { appearanceProvider });\r\n }\r\n}\r\n\r\n/** @alpha Base class for tools that want to use the backend geometry cache. */\r\nexport abstract class ElementGeometryCacheTool extends ElementSetTool implements FeatureOverrideProvider {\r\n protected _startedCmd?: string;\r\n protected readonly _checkedIds = new Map<Id64String, boolean>();\r\n protected _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n protected _graphicsPending?: true;\r\n protected _firstResult = true;\r\n protected _agendaAppearanceDefault?: FeatureAppearance;\r\n protected _agendaAppearanceDynamic?: FeatureAppearance;\r\n\r\n protected allowView(vp: Viewport) { return vp.view.is3d(); }\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>({ commandId: editorBuiltInCmdIds.cmdSolidModeling, iModelKey: this.iModel.key });\r\n }\r\n\r\n protected agendaAppearance(isDynamics: boolean): FeatureAppearance {\r\n if (isDynamics) {\r\n if (undefined === this._agendaAppearanceDynamic)\r\n this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);\r\n\r\n return this._agendaAppearanceDynamic;\r\n }\r\n\r\n if (undefined === this._agendaAppearanceDefault)\r\n this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);\r\n\r\n return this._agendaAppearanceDefault;\r\n }\r\n\r\n protected get wantAgendaAppearanceOverride(): boolean { return false; }\r\n\r\n public addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void {\r\n if (this.agenda.isEmpty)\r\n return;\r\n\r\n const appearance = this.agendaAppearance(false);\r\n this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));\r\n }\r\n\r\n protected updateAgendaAppearanceProvider(drop?: true): void {\r\n if (!this.wantAgendaAppearanceOverride)\r\n return;\r\n\r\n for (const vp of IModelApp.viewManager) {\r\n if (!this.allowView(vp))\r\n continue;\r\n\r\n if (drop || this.agenda.isEmpty)\r\n vp.dropFeatureOverrideProvider(this);\r\n else if (!vp.addFeatureOverrideProvider(this))\r\n vp.setFeatureOverrideProviderChanged();\r\n }\r\n }\r\n\r\n protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined { return undefined; }\r\n protected onGeometryCacheFilterChanged(): void { this._checkedIds.clear(); }\r\n\r\n protected async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n // NOTE: Creates cache if it doesn't already exist then test new or existing cache against filter...\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n return await solidModelingIpc.createElementGeometryCache(id, this.geometryCacheFilter);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n protected async acceptElementForOperation(id: Id64String): Promise<boolean> {\r\n if (Id64.isInvalid(id) || Id64.isTransient(id))\r\n return false;\r\n\r\n let accept = this._checkedIds.get(id);\r\n\r\n if (undefined === accept) {\r\n if (this.agenda.isEmpty && this._checkedIds.size > 1000)\r\n this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...\r\n\r\n accept = await this.createElementGeometryCache(id);\r\n this._checkedIds.set(id, accept);\r\n }\r\n\r\n return accept;\r\n }\r\n\r\n protected override async isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean> {\r\n if (!await super.isElementValidForOperation(hit, out))\r\n return false;\r\n\r\n return this.acceptElementForOperation(hit.sourceId);\r\n }\r\n\r\n protected async postFilterIds(arg: Id64Arg): Promise<Id64Arg> {\r\n const ids: Id64Array = [];\r\n\r\n for (const id of Id64.iterable(arg)) {\r\n if (await this.acceptElementForOperation(id))\r\n ids.push(id);\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n protected override async getGroupIds(id: Id64String): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getGroupIds(id));\r\n }\r\n\r\n protected override async getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getSelectionSetCandidates(ss));\r\n }\r\n\r\n protected override async getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));\r\n }\r\n\r\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n if (!this.wantAgendaAppearanceOverride)\r\n return this._graphicsProvider.addGraphic(context);\r\n\r\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.agendaAppearance(true));\r\n });\r\n\r\n this._graphicsProvider.addGraphic(context, undefined, { appearanceProvider });\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n return this.updateGraphic(ev, IModelApp.viewManager.inDynamicsMode);\r\n }\r\n\r\n protected async getGraphicData(_ev: BeButtonEvent): Promise<Uint8Array | undefined> { return undefined; }\r\n\r\n protected async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (!isDynamics || this._graphicsPending)\r\n return; // Continue displaying previous graphic if new graphic is still pending...\r\n\r\n this._graphicsPending = true;\r\n const graphicData = await this.getGraphicData(ev);\r\n this._graphicsPending = undefined;\r\n\r\n if (undefined !== graphicData) {\r\n if (this._firstResult) {\r\n this.updateAgendaAppearanceProvider();\r\n this._firstResult = false;\r\n }\r\n return this.createGraphic(graphicData);\r\n }\r\n\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.cleanupGraphic();\r\n }\r\n\r\n protected async createGraphic(graphicData: Uint8Array): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new ElementGeometryGraphicsProvider(this.iModel);\r\n\r\n await this._graphicsProvider.createGraphic(graphicData);\r\n }\r\n\r\n protected clearGraphic(): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n this._graphicsProvider.cleanupGraphic();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected async clearElementGeometryCache(): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n await solidModelingIpc.clearElementGeometryCache();\r\n } catch (err) { }\r\n }\r\n\r\n public override async onUnsuspend(): Promise<void> {\r\n if (!this._firstResult)\r\n this.updateAgendaAppearanceProvider();\r\n return super.onUnsuspend();\r\n }\r\n\r\n public override async onSuspend(): Promise<void> {\r\n if (!this._firstResult)\r\n this.updateAgendaAppearanceProvider(true);\r\n return super.onSuspend();\r\n }\r\n\r\n public override async onPostInstall(): Promise<void> {\r\n await super.onPostInstall();\r\n if (this.wantAgendaAppearanceOverride)\r\n this.agenda.manageHiliteState = false;\r\n }\r\n\r\n public override async onCleanup(): Promise<void> {\r\n await super.onCleanup();\r\n await this.clearElementGeometryCache();\r\n this.updateAgendaAppearanceProvider(true);\r\n this.clearGraphic();\r\n }\r\n}\r\n\r\n/** @alpha Base class for tools that need to locate faces, edges, and vertices. */\r\nexport abstract class LocateSubEntityTool extends ElementGeometryCacheTool {\r\n protected _currentSubEntity?: SubEntityData;\r\n protected _acceptedSubEntities: SubEntityData[] = [];\r\n protected _locatedSubEntities?: SubEntityLocationProps[];\r\n protected _subEntityGraphicPending?: true;\r\n protected readonly _summaryIds = new Map<Id64String, BRepEntityType[]>();\r\n\r\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n if (this.wantAdditionalSubEntities) {\r\n const faceKey = this.wantSubEntityType(SubEntityType.Face) ? \"Face\" : \"\";\r\n const edgeKey = this.wantSubEntityType(SubEntityType.Edge) ? \"Edge\" : \"\";\r\n const vertexKey = this.wantSubEntityType(SubEntityType.Vertex) ? \"Vertex\" : \"\";\r\n const subEntityKey: string = `${faceKey}${edgeKey}${vertexKey}`;\r\n\r\n if (0 === subEntityKey.length) {\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n return;\r\n }\r\n\r\n if (undefined === mainInstrText)\r\n mainInstrText = EditTools.translate(`LocateSubEntities.Identify.${subEntityKey}`);\r\n\r\n const leftMsg = EditTools.translate(`LocateSubEntities.Accept.${subEntityKey}`);\r\n const rightMsg = this.haveAcceptedSubEntities && this.allowSubEntitySelectNext ? EditTools.translate(`LocateSubEntities.AcceptNext.${subEntityKey}`) : CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, leftMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, leftMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rightMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rightMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (this.allowSubEntityControlSelect)\r\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClickDrag, EditTools.translate(`LocateSubEntities.IdentifyAdditional.${subEntityKey}`), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (undefined !== additionalInstr) {\r\n for (const instr of additionalInstr) {\r\n if (ToolAssistanceInputMethod.Touch === instr.inputMethod)\r\n touchInstructions.push(instr);\r\n else\r\n mouseInstructions.push(instr);\r\n }\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, mainInstrText);\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n return;\r\n }\r\n\r\n super.provideToolAssistance(mainInstrText, additionalInstr);\r\n }\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n protected get wantGeometrySummary(): boolean { return false; }\r\n protected get wantSubEntitySnap(): boolean { return false; }\r\n\r\n protected wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Face === type; }\r\n protected getMaximumSubEntityHits(type: SubEntityType): number { return this.wantSubEntityType(type) ? 25 : 0; }\r\n\r\n protected get requiredSubEntityCount(): number { return 1; }\r\n protected get haveAcceptedSubEntities(): boolean { return (0 !== this._acceptedSubEntities.length); }\r\n protected get inhibitSubEntityDisplay(): boolean { return this.isDynamicsStarted; }\r\n\r\n protected get allowSubEntityControlSelect(): boolean { return true; }\r\n protected get allowSubEntityControlDeselect(): boolean { return this.allowSubEntityControlSelect; }\r\n protected get allowSubEntitySelectNext(): boolean { return !this.isDynamicsStarted; }\r\n\r\n protected getBRepEntityTypeForSubEntity(id: Id64String, subEntity: SubEntityProps): BRepEntityType {\r\n const summary = this._summaryIds.get(id);\r\n\r\n if (undefined === summary)\r\n return BRepEntityType.Invalid;\r\n\r\n const index = (undefined !== subEntity.index ? subEntity.index : 0);\r\n\r\n if (index >= summary.length)\r\n return BRepEntityType.Invalid;\r\n\r\n return summary[index];\r\n }\r\n\r\n protected async createElementGeometrySummary(id: Id64String): Promise<boolean> {\r\n let summary = this._summaryIds.get(id);\r\n\r\n if (undefined === summary) {\r\n if (this.agenda.isEmpty && this._summaryIds.size > 1000)\r\n this._summaryIds.clear(); // Limit auto-locate cache size to something reasonable...\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (undefined === (summary = await solidModelingIpc.summarizeElementGeometryCache(id)))\r\n return false;\r\n } catch (err) {\r\n return false;\r\n }\r\n\r\n this._summaryIds.set(id, summary);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected override async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n const accept = await super.createElementGeometryCache(id);\r\n return (accept && this.wantGeometrySummary ? this.createElementGeometrySummary(id) : accept);\r\n }\r\n\r\n protected getAcceptedSubEntityData(index: number = -1): SubEntityData | undefined {\r\n if (-1 === index)\r\n index = this._acceptedSubEntities.length - 1;\r\n\r\n if (index < 0 || index > this._acceptedSubEntities.length - 1)\r\n return undefined;\r\n\r\n return this._acceptedSubEntities[index];\r\n }\r\n\r\n protected getAcceptedSubEntities(): SubEntityProps[] {\r\n const accepted: SubEntityProps[] = [];\r\n this._acceptedSubEntities.forEach((entry) => accepted.push(entry.props));\r\n return accepted;\r\n }\r\n\r\n protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void {\r\n subEntity.display(context, accepted);\r\n }\r\n\r\n protected drawAcceptedSubEntities(context: DecorateContext): void {\r\n this._acceptedSubEntities.forEach((entry) => this.drawSubEntity(context, entry, true));\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\r\n return;\r\n\r\n if (this.haveAcceptedSubEntities)\r\n this.drawAcceptedSubEntities(context);\r\n\r\n if (undefined !== this._currentSubEntity)\r\n this.drawSubEntity(context, this._currentSubEntity, false);\r\n }\r\n\r\n public override decorateSuspended(context: DecorateContext): void {\r\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\r\n return;\r\n\r\n if (this.haveAcceptedSubEntities)\r\n this.drawAcceptedSubEntities(context);\r\n }\r\n\r\n protected getLocateAperture(ev: BeButtonEvent): number {\r\n if (undefined === ev.viewport)\r\n return 0.0;\r\n\r\n return ev.viewport.pixelsFromInches(InputSource.Touch === ev.inputSource ? IModelApp.locateManager.touchApertureInches : IModelApp.locateManager.apertureInches);\r\n }\r\n\r\n protected getMaxRayDistance(ev: BeButtonEvent, aperture: number): number {\r\n if (undefined === ev.viewport)\r\n return 0.0;\r\n\r\n // NOTE: Compute a world coordinate radius for ray test, try getting aperture size at point on element...\r\n const hit = IModelApp.accuSnap.currHit;\r\n const vec: Point3d[] = [];\r\n\r\n vec[0] = ev.viewport.worldToView(hit ? hit.hitPoint : ev.point);\r\n vec[1] = vec[0].clone();\r\n vec[1].x += 1;\r\n ev.viewport.viewToWorldArray(vec);\r\n\r\n // The edge and vertex hits get post-filtered on xy distance, so this is fine for perspective views...\r\n return (aperture * vec[0].distance(vec[1]));\r\n }\r\n\r\n protected getRayOrigin(ev: BeButtonEvent): Point3d {\r\n const spacePoint = ev.point.clone();\r\n const vp = ev.viewport;\r\n\r\n if (undefined === vp)\r\n return spacePoint;\r\n\r\n vp.worldToNpc(spacePoint, spacePoint);\r\n spacePoint.z = 1.0;\r\n vp.npcToWorld(spacePoint, spacePoint);\r\n\r\n return spacePoint;\r\n }\r\n\r\n protected wantHiddenEdges(vp: Viewport): boolean {\r\n return vp.viewFlags.hiddenEdgesVisible();\r\n }\r\n\r\n protected getSubEntityFilter(): SubEntityFilter | undefined { return undefined; }\r\n\r\n protected async pickSubEntities(id: Id64String, boresite: Ray3d, maxFace: number, maxEdge: number, maxVertex: number, maxDistance: number, hiddenEdgesVisible: boolean, filter?: SubEntityFilter): Promise<SubEntityLocationProps[] | undefined> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const opts: LocateSubEntityProps = {\r\n maxFace,\r\n maxEdge,\r\n maxVertex,\r\n maxDistance,\r\n hiddenEdgesVisible,\r\n filter,\r\n };\r\n return await solidModelingIpc.locateSubEntities(id, boresite.origin, boresite.direction, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\r\n const vp = ev.viewport;\r\n if (undefined === vp)\r\n return undefined;\r\n\r\n const maxFace = this.getMaximumSubEntityHits(SubEntityType.Face);\r\n const maxEdge = this.getMaximumSubEntityHits(SubEntityType.Edge);\r\n const maxVertex = this.getMaximumSubEntityHits(SubEntityType.Vertex);\r\n\r\n if (0 === maxFace && 0 === maxEdge && 0 === maxVertex)\r\n return undefined;\r\n\r\n const aperture = this.getLocateAperture(ev);\r\n const maxDistance = this.getMaxRayDistance(ev, aperture);\r\n const spacePoint = this.getRayOrigin(ev);\r\n const boresite = AccuDrawHintBuilder.getBoresite(spacePoint, vp);\r\n const hiddenEdgesVisible = this.wantHiddenEdges(vp);\r\n const filter = this.getSubEntityFilter();\r\n\r\n let hits = await this.pickSubEntities(id, boresite, maxFace, maxEdge, maxVertex, maxDistance, hiddenEdgesVisible, filter);\r\n\r\n // NOTE: Remove erroneous edge/vertex hits in perspective views by checking real xy distance to hit point...\r\n if (undefined === hits || !vp.isCameraOn)\r\n return hits;\r\n\r\n if (maxEdge > 0 && hits.length > 1) {\r\n const edgeApertureSquared = (aperture * aperture);\r\n const vertexApertureSquared = ((aperture * 2.0) * (aperture * 2.0));\r\n\r\n const e2 = Math.pow(aperture, 2);\r\n const v2 = Math.pow(aperture * 2.0, 2);\r\n\r\n if (e2 !== edgeApertureSquared || v2 !== vertexApertureSquared)\r\n return hits;\r\n\r\n const rayOrigin = vp.worldToView(boresite.origin);\r\n\r\n hits = hits.filter((hit) => {\r\n if (SubEntityType.Face === hit.subEntity.type)\r\n return true;\r\n\r\n const hitPoint = vp.worldToView(Point3d.fromJSON(hit.point));\r\n const distance = hitPoint.distanceSquaredXY(rayOrigin);\r\n\r\n return (distance <= (SubEntityType.Edge === hit.subEntity.type ? edgeApertureSquared : vertexApertureSquared));\r\n });\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n protected async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = new SubEntityData(hit.subEntity);\r\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(hit.point)) : undefined);\r\n\r\n await this.createSubEntityGraphic(id, data, chordTolerance);\r\n\r\n return data;\r\n }\r\n\r\n /** Append specified sub-entity to accepted array. */\r\n protected async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\r\n this._acceptedSubEntities.push(await this.createSubEntityData(id, props));\r\n }\r\n\r\n /** Remove specified sub-entity from accepted array, or pop last sub-entity if undefined. */\r\n protected async removeSubEntity(_id: Id64String, props?: SubEntityLocationProps): Promise<void> {\r\n if (undefined !== props)\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isSameSubEntity(entry.props, props.subEntity));\r\n else\r\n this._acceptedSubEntities.pop();\r\n }\r\n\r\n /** Locate sub-entities for the most recently added (last) agenda entry. Tool sub-classes that wish to identity\r\n * sub-entities from multiple elements are responsible for maintaining the sub-entities per-element.\r\n */\r\n protected async doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean> {\r\n if (this.agenda.isEmpty || undefined === ev.viewport)\r\n return false;\r\n\r\n const id = this.agenda.elements[this.agenda.length - 1];\r\n\r\n if (newSearch) {\r\n this._locatedSubEntities = await this.doPickSubEntities(id, ev);\r\n if (undefined === this._locatedSubEntities || 0 === this._locatedSubEntities.length)\r\n return false;\r\n\r\n /** NOTE: Set last button location to point on sub-entity when not snapping.\r\n * If dynamics are enabled on this event, onDynamicFrame is called with this location.\r\n */\r\n if (CoordSource.ElemSnap !== ev.coordsFrom) {\r\n ev.point.setFrom(Point3d.fromJSON(this._locatedSubEntities[0].point));\r\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\r\n }\r\n } else {\r\n await this.removeSubEntity(id);\r\n }\r\n\r\n const hit = this._locatedSubEntities?.shift();\r\n if (undefined !== hit) {\r\n if (undefined === this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, hit.subEntity)))\r\n await this.addSubEntity(id, hit);\r\n else if (this.allowSubEntityControlDeselect)\r\n await this.removeSubEntity(id, hit);\r\n }\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n protected override async chooseNextHit(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (!this.haveAcceptedSubEntities)\r\n return super.chooseNextHit(ev);\r\n\r\n if (!this.allowSubEntitySelectNext) {\r\n await this.onReinitialize(); // Don't cycle through hits after starting dynamics...\r\n } else {\r\n await this.doLocateSubEntity(ev, false);\r\n if (!this.haveAcceptedSubEntities)\r\n await this.onReinitialize();\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n protected get wantAdditionalSubEntities(): boolean {\r\n return (this._acceptedSubEntities.length < this.requiredSubEntityCount || (this.allowSubEntityControlSelect && this.isControlDown));\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n if (this.wantAdditionalSubEntities) {\r\n await this.doLocateSubEntity(ev, true);\r\n\r\n if (this.wantAdditionalSubEntities) {\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.clearCurrentSubEntity();\r\n }\r\n\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected getCurrentElement(): Id64String | undefined {\r\n if (!this.agenda.isEmpty)\r\n return this.agenda.elements[this.agenda.length - 1];\r\n\r\n const hit = IModelApp.accuSnap.currHit;\r\n return (undefined !== hit && hit.isElementHit ? hit.sourceId : undefined);\r\n }\r\n\r\n protected clearCurrentSubEntity(): void {\r\n if (undefined === this._currentSubEntity)\r\n return;\r\n this._currentSubEntity.cleanupGraphic();\r\n this._currentSubEntity = undefined;\r\n }\r\n\r\n protected async setCurrentSubEntity(id: Id64String, hit: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\r\n if (undefined === this._currentSubEntity)\r\n this._currentSubEntity = new SubEntityData(hit.subEntity);\r\n else\r\n this._currentSubEntity.props = hit.subEntity;\r\n\r\n return this.createSubEntityGraphic(id, this._currentSubEntity, chordTolerance);\r\n }\r\n\r\n protected async changeCurrentSubEntity(id?: Id64String, current?: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\r\n if (undefined === id || undefined === current) {\r\n if (undefined === this._currentSubEntity || !this._currentSubEntity.hasGraphic)\r\n return false;\r\n this._currentSubEntity.cleanupGraphic();\r\n return true;\r\n }\r\n\r\n if (undefined !== this._currentSubEntity && this._currentSubEntity.hasGraphic && this._currentSubEntity.isSame(current.subEntity))\r\n return false;\r\n\r\n return this.setCurrentSubEntity(id, current, chordTolerance);\r\n }\r\n\r\n protected async updateCurrentSubEntity(ev: BeButtonEvent): Promise<boolean> {\r\n if (undefined === ev.viewport)\r\n return false;\r\n\r\n const id = this.wantAdditionalSubEntities ? this.getCurrentElement() : undefined;\r\n if (undefined === id)\r\n return this.changeCurrentSubEntity();\r\n\r\n if (this._subEntityGraphicPending)\r\n return false;\r\n\r\n this._subEntityGraphicPending = true;\r\n\r\n const current = await this.doPickSubEntities(id, ev);\r\n const chordTolerance = current ? computeChordToleranceFromPoint(ev.viewport, Point3d.fromJSON(current[0].point)) : 0.0;\r\n const status = await this.changeCurrentSubEntity(id, current ? current[0] : undefined, chordTolerance);\r\n\r\n this._subEntityGraphicPending = undefined;\r\n\r\n if (status)\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n\r\n return status;\r\n }\r\n\r\n protected async createSubEntityGraphic(id: Id64String, data: SubEntityData, chordTolerance?: number): Promise<boolean> {\r\n try {\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: true,\r\n wantRange: true,\r\n wantAppearance: true,\r\n chordTolerance,\r\n };\r\n\r\n data.chordTolerance = chordTolerance;\r\n data.geometry = await solidModelingIpc.getSubEntityGeometry(id, data.props, opts);\r\n\r\n return await data.createGraphic(this.iModel);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n protected override async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (isDynamics)\r\n return super.updateGraphic(ev, isDynamics);\r\n\r\n await this.updateCurrentSubEntity(ev);\r\n }\r\n\r\n protected override async getGraphicData(ev: BeButtonEvent): Promise<Uint8Array | undefined> {\r\n const result = await this.applyAgendaOperation(ev, false);\r\n return result?.graphic;\r\n }\r\n\r\n protected async applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined> { return undefined; }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation(ev, true);\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public override async onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<EventHandled> {\r\n if (EventHandled.Yes === await super.onModifierKeyTransition(wentDown, modifier, event))\r\n return EventHandled.Yes;\r\n\r\n if (BeModifierKeys.Control !== modifier)\r\n return EventHandled.No;\r\n\r\n if (IModelApp.toolAdmin.isLocateCircleOn === this.wantAdditionalSubEntities)\r\n return EventHandled.No;\r\n\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.Yes;\r\n }\r\n\r\n public override changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void {\r\n super.changeLocateState(enableLocate, enableSnap, cursor, coordLockOvr);\r\n\r\n // Keep showing locate circle when identifying sub-entities even if done locating elements...\r\n if (!IModelApp.toolAdmin.isLocateCircleOn && this.wantAdditionalSubEntities)\r\n IModelApp.toolAdmin.setLocateCircleOn(true);\r\n }\r\n\r\n protected override get shouldEnableSnap(): boolean {\r\n if (this.isSelectByPoints || !this.wantAccuSnap)\r\n return false;\r\n\r\n if (this.isDynamicsStarted)\r\n return true;\r\n\r\n const isCtrlSelect = (this.isControlDown && (this.controlKeyContinuesSelection || this.allowSubEntityControlSelect));\r\n\r\n if (isCtrlSelect || this.wantAdditionalElements || this.wantAdditionalSubEntities)\r\n return this.wantSubEntitySnap;\r\n\r\n return !this.wantSubEntitySnap;\r\n }\r\n\r\n protected setupAccuDraw(): void { }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n this.setupAccuDraw();\r\n super.setupAndPromptForNextAction();\r\n }\r\n\r\n protected clearSubEntityGraphics(): void {\r\n if (undefined !== this._currentSubEntity)\r\n this._currentSubEntity.cleanupGraphic();\r\n\r\n this._acceptedSubEntities.forEach((entry) => entry.cleanupGraphic());\r\n }\r\n\r\n public override async onCleanup(): Promise<void> {\r\n this.clearSubEntityGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ElementGeometryTool.js","sourceRoot":"","sources":["../../src/ElementGeometryTool.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 Editing\n */\n\nimport { Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from \"@itwin/core-common\";\nimport {\n AccuDrawHintBuilder, BeButtonEvent, BeModifierKeys, CoordinateLockOverrides, CoordSource, CoreTools, DecorateContext, DynamicsContext,\n ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranch, GraphicBranchOptions, GraphicType, HitDetail, IModelApp,\n IModelConnection, InputSource, LocateResponse, readElementGraphics, RenderGraphicOwner, SelectionMethod, SelectionSet, ToolAssistance,\n ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport,\n} from \"@itwin/core-frontend\";\nimport { Point3d, Range3d, Ray3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BRepEntityType, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, LocateSubEntityProps,\n SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType,\n} from \"@itwin/editor-common\";\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\nimport { EditTools } from \"./EditTool\";\nimport { solidModelingIpc } from \"./EditToolIpc\";\n\n/** @alpha */\nexport class ElementGeometryGraphicsProvider {\n public readonly iModel: IModelConnection;\n public graphic?: RenderGraphicOwner;\n\n constructor(iModel: IModelConnection) {\n this.iModel = iModel;\n }\n\n /** Call to request a RenderGraphic for the supplied graphic data.\n * @see [[cleanupGraphic]] Must be called when the tool exits.\n */\n public async createGraphic(graphicData: Uint8Array): Promise<boolean> {\n try {\n const graphic = await readElementGraphics(graphicData, this.iModel, Id64.invalid, true, { noFlash: true, noHilite: true });\n const graphicOwner = graphic ? IModelApp.renderSystem.createGraphicOwner(graphic) : undefined;\n this.cleanupGraphic();\n return (undefined !== (this.graphic = graphicOwner));\n } catch {\n return false;\n }\n }\n\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]].\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\n */\n public cleanupGraphic(): void {\n if (undefined === this.graphic)\n return;\n this.graphic.disposeGraphic();\n this.graphic = undefined;\n }\n\n public addGraphic(context: DynamicsContext, transform?: Transform, opts?: GraphicBranchOptions): void {\n if (undefined === this.graphic)\n return;\n\n if (undefined === transform && undefined === opts) {\n context.addGraphic(this.graphic);\n return;\n }\n\n const branch = new GraphicBranch(false);\n branch.add(this.graphic);\n\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\n context.addGraphic(branchGraphic);\n }\n\n public addDecoration(context: DecorateContext, type: GraphicType, transform?: Transform, opts?: GraphicBranchOptions): void {\n if (undefined === this.graphic)\n return;\n\n const branch = new GraphicBranch(false);\n branch.add(this.graphic);\n\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\n context.addDecoration(type, branchGraphic);\n }\n}\n\n/** @alpha */\nexport function isSameSubEntity(a: SubEntityProps, b: SubEntityProps): boolean {\n if (a.type !== b.type)\n return false;\n if (a.id !== b.id)\n return false;\n if ((undefined !== a.index ? a.index : 0) !== (undefined !== b.index ? b.index : 0))\n return false;\n return true;\n}\n\n/** @alpha */\nexport class SubEntityData {\n public toolData?: any;\n public chordTolerance?: number;\n\n private _props: SubEntityProps;\n private _geometry?: SubEntityGeometryProps;\n private _graphicsProvider?: ElementGeometryGraphicsProvider;\n\n constructor(props: SubEntityProps) { this._props = props; }\n\n public get props(): SubEntityProps { return this._props; }\n public set props(value: SubEntityProps) {\n this.cleanupGraphic();\n this._props = value;\n }\n\n public get geometry(): SubEntityGeometryProps | undefined { return this._geometry; }\n public set geometry(value: SubEntityGeometryProps | undefined) { this._geometry = value; }\n\n public isSame(other: SubEntityProps): boolean { return isSameSubEntity(this._props, other); }\n\n public getAppearance(vp: Viewport, accepted: boolean): FeatureAppearance {\n const color = vp.hilite.color;\n const rgb = RgbColor.fromColorDef(accepted ? color.inverse() : color);\n const transparency = 0.25;\n const emphasized = true; // Necessary for obscured sub-entities w/SceneGraphic...\n let weight;\n\n switch (this.props.type) {\n case SubEntityType.Face:\n break;\n case SubEntityType.Edge:\n const edgeWeight = accepted ? 1 : 3;\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + edgeWeight, 31) : edgeWeight;\n break;\n case SubEntityType.Vertex:\n const vertexWeight = accepted ? 8 : 10;\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + vertexWeight, 31) : vertexWeight;\n break;\n }\n\n return FeatureAppearance.fromJSON({ rgb, transparency, weight, emphasized, nonLocatable: true });\n }\n\n public async createGraphic(iModel: IModelConnection): Promise<boolean> {\n if (undefined === this._geometry?.graphic)\n return false;\n\n if (undefined === this._graphicsProvider)\n this._graphicsProvider = new ElementGeometryGraphicsProvider(iModel);\n\n return this._graphicsProvider.createGraphic(this._geometry.graphic);\n }\n\n public cleanupGraphic(): void {\n if (undefined === this._graphicsProvider)\n return;\n this._graphicsProvider.cleanupGraphic();\n this._graphicsProvider = undefined;\n }\n\n public get hasGraphic(): boolean {\n return (undefined !== this._graphicsProvider?.graphic);\n }\n\n public display(context: DecorateContext, accepted: boolean): void {\n if (undefined === this._graphicsProvider?.graphic)\n return;\n\n const range = (this._geometry?.range ? Range3d.fromJSON(this._geometry.range) : undefined);\n const pixelSize = context.viewport.getPixelSizeAtPoint(range ? range.center : undefined);\n const offsetDir = context.viewport.view.getZVector();\n offsetDir.scaleToLength(3 * pixelSize, offsetDir);\n const offsetTrans = Transform.createTranslation(offsetDir);\n\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\n return app.extendAppearance(this.getAppearance(context.viewport, accepted));\n });\n\n this._graphicsProvider.addDecoration(context, GraphicType.Scene, offsetTrans, { appearanceProvider });\n }\n}\n\n/** @alpha Base class for tools that want to use the backend geometry cache. */\nexport abstract class ElementGeometryCacheTool extends ElementSetTool implements FeatureOverrideProvider {\n protected _startedCmd?: string;\n protected readonly _checkedIds = new Map<Id64String, boolean>();\n protected _graphicsProvider?: ElementGeometryGraphicsProvider;\n protected _graphicsPending?: true;\n protected _firstResult = true;\n protected _agendaAppearanceDefault?: FeatureAppearance;\n protected _agendaAppearanceDynamic?: FeatureAppearance;\n\n protected allowView(vp: Viewport) { return vp.view.is3d(); }\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n\n protected async startCommand(): Promise<string> {\n if (undefined !== this._startedCmd)\n return this._startedCmd;\n return EditTools.startCommand<string>({ commandId: editorBuiltInCmdIds.cmdSolidModeling, iModelKey: this.iModel.key });\n }\n\n protected agendaAppearance(isDynamics: boolean): FeatureAppearance {\n if (isDynamics) {\n if (undefined === this._agendaAppearanceDynamic)\n this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);\n\n return this._agendaAppearanceDynamic;\n }\n\n if (undefined === this._agendaAppearanceDefault)\n this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);\n\n return this._agendaAppearanceDefault;\n }\n\n protected get wantAgendaAppearanceOverride(): boolean { return false; }\n\n public addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void {\n if (this.agenda.isEmpty)\n return;\n\n const appearance = this.agendaAppearance(false);\n this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));\n }\n\n protected updateAgendaAppearanceProvider(drop?: true): void {\n if (!this.wantAgendaAppearanceOverride)\n return;\n\n for (const vp of IModelApp.viewManager) {\n if (!this.allowView(vp))\n continue;\n\n if (drop || this.agenda.isEmpty)\n vp.dropFeatureOverrideProvider(this);\n else if (!vp.addFeatureOverrideProvider(this))\n vp.setFeatureOverrideProviderChanged();\n }\n }\n\n protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined { return undefined; }\n protected onGeometryCacheFilterChanged(): void { this._checkedIds.clear(); }\n\n protected async createElementGeometryCache(id: Id64String): Promise<boolean> {\n // NOTE: Creates cache if it doesn't already exist then test new or existing cache against filter...\n try {\n this._startedCmd = await this.startCommand();\n return await solidModelingIpc.createElementGeometryCache(id, this.geometryCacheFilter);\n } catch (err) {\n return false;\n }\n }\n\n protected async acceptElementForOperation(id: Id64String): Promise<boolean> {\n if (Id64.isInvalid(id) || Id64.isTransient(id))\n return false;\n\n let accept = this._checkedIds.get(id);\n\n if (undefined === accept) {\n if (this.agenda.isEmpty && this._checkedIds.size > 1000)\n this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...\n\n accept = await this.createElementGeometryCache(id);\n this._checkedIds.set(id, accept);\n }\n\n return accept;\n }\n\n protected override async isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean> {\n if (!await super.isElementValidForOperation(hit, out))\n return false;\n\n return this.acceptElementForOperation(hit.sourceId);\n }\n\n protected async postFilterIds(arg: Id64Arg): Promise<Id64Arg> {\n const ids: Id64Array = [];\n\n for (const id of Id64.iterable(arg)) {\n if (await this.acceptElementForOperation(id))\n ids.push(id);\n }\n\n return ids;\n }\n\n protected override async getGroupIds(id: Id64String): Promise<Id64Arg> {\n return this.postFilterIds(await super.getGroupIds(id));\n }\n\n protected override async getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg> {\n return this.postFilterIds(await super.getSelectionSetCandidates(ss));\n }\n\n protected override async getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg> {\n return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));\n }\n\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\n if (undefined === this._graphicsProvider)\n return;\n\n if (!this.wantAgendaAppearanceOverride)\n return this._graphicsProvider.addGraphic(context);\n\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\n return app.extendAppearance(this.agendaAppearance(true));\n });\n\n this._graphicsProvider.addGraphic(context, undefined, { appearanceProvider });\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n return this.updateGraphic(ev, IModelApp.viewManager.inDynamicsMode);\n }\n\n protected async getGraphicData(_ev: BeButtonEvent): Promise<Uint8Array | undefined> { return undefined; }\n\n protected async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n if (!isDynamics || this._graphicsPending)\n return; // Continue displaying previous graphic if new graphic is still pending...\n\n this._graphicsPending = true;\n const graphicData = await this.getGraphicData(ev);\n this._graphicsPending = undefined;\n\n if (undefined !== graphicData) {\n if (this._firstResult) {\n this.updateAgendaAppearanceProvider();\n this._firstResult = false;\n }\n return this.createGraphic(graphicData);\n }\n\n if (undefined !== this._graphicsProvider)\n this._graphicsProvider.cleanupGraphic();\n }\n\n protected async createGraphic(graphicData: Uint8Array): Promise<void> {\n if (undefined === this._graphicsProvider)\n this._graphicsProvider = new ElementGeometryGraphicsProvider(this.iModel);\n\n await this._graphicsProvider.createGraphic(graphicData);\n }\n\n protected clearGraphic(): void {\n if (undefined === this._graphicsProvider)\n return;\n this._graphicsProvider.cleanupGraphic();\n this._graphicsProvider = undefined;\n }\n\n protected async clearElementGeometryCache(): Promise<void> {\n try {\n this._startedCmd = await this.startCommand();\n await solidModelingIpc.clearElementGeometryCache();\n } catch (err) { }\n }\n\n public override async onUnsuspend(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider();\n return super.onUnsuspend();\n }\n\n public override async onSuspend(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider(true);\n return super.onSuspend();\n }\n\n public override async onPostInstall(): Promise<void> {\n await super.onPostInstall();\n if (this.wantAgendaAppearanceOverride)\n this.agenda.manageHiliteState = false;\n }\n\n public override async onCleanup(): Promise<void> {\n await super.onCleanup();\n await this.clearElementGeometryCache();\n this.updateAgendaAppearanceProvider(true);\n this.clearGraphic();\n }\n}\n\n/** @alpha Base class for tools that need to locate faces, edges, and vertices. */\nexport abstract class LocateSubEntityTool extends ElementGeometryCacheTool {\n protected _currentSubEntity?: SubEntityData;\n protected _acceptedSubEntities: SubEntityData[] = [];\n protected _locatedSubEntities?: SubEntityLocationProps[];\n protected _subEntityGraphicPending?: true;\n protected readonly _summaryIds = new Map<Id64String, BRepEntityType[]>();\n\n protected override provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\n if (this.wantAdditionalSubEntities) {\n const faceKey = this.wantSubEntityType(SubEntityType.Face) ? \"Face\" : \"\";\n const edgeKey = this.wantSubEntityType(SubEntityType.Edge) ? \"Edge\" : \"\";\n const vertexKey = this.wantSubEntityType(SubEntityType.Vertex) ? \"Vertex\" : \"\";\n const subEntityKey: string = `${faceKey}${edgeKey}${vertexKey}`;\n\n if (0 === subEntityKey.length) {\n super.provideToolAssistance(mainInstrText, additionalInstr);\n return;\n }\n\n if (undefined === mainInstrText)\n mainInstrText = EditTools.translate(`LocateSubEntities.Identify.${subEntityKey}`);\n\n const leftMsg = EditTools.translate(`LocateSubEntities.Accept.${subEntityKey}`);\n const rightMsg = this.haveAcceptedSubEntities && this.allowSubEntitySelectNext ? EditTools.translate(`LocateSubEntities.AcceptNext.${subEntityKey}`) : CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, leftMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, leftMsg, false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rightMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rightMsg, false, ToolAssistanceInputMethod.Mouse));\n\n if (this.allowSubEntityControlSelect)\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClickDrag, EditTools.translate(`LocateSubEntities.IdentifyAdditional.${subEntityKey}`), false, ToolAssistanceInputMethod.Mouse));\n\n if (undefined !== additionalInstr) {\n for (const instr of additionalInstr) {\n if (ToolAssistanceInputMethod.Touch === instr.inputMethod)\n touchInstructions.push(instr);\n else\n mouseInstructions.push(instr);\n }\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, mainInstrText);\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n return;\n }\n\n super.provideToolAssistance(mainInstrText, additionalInstr);\n }\n\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\n protected get wantGeometrySummary(): boolean { return false; }\n protected get wantSubEntitySnap(): boolean { return false; }\n\n protected wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Face === type; }\n protected getMaximumSubEntityHits(type: SubEntityType): number { return this.wantSubEntityType(type) ? 25 : 0; }\n\n protected get requiredSubEntityCount(): number { return 1; }\n protected get haveAcceptedSubEntities(): boolean { return (0 !== this._acceptedSubEntities.length); }\n protected get inhibitSubEntityDisplay(): boolean { return this.isDynamicsStarted; }\n\n protected get allowSubEntityControlSelect(): boolean { return true; }\n protected get allowSubEntityControlDeselect(): boolean { return this.allowSubEntityControlSelect; }\n protected get allowSubEntitySelectNext(): boolean { return !this.isDynamicsStarted; }\n\n protected getBRepEntityTypeForSubEntity(id: Id64String, subEntity: SubEntityProps): BRepEntityType {\n const summary = this._summaryIds.get(id);\n\n if (undefined === summary)\n return BRepEntityType.Invalid;\n\n const index = (undefined !== subEntity.index ? subEntity.index : 0);\n\n if (index >= summary.length)\n return BRepEntityType.Invalid;\n\n return summary[index];\n }\n\n protected async createElementGeometrySummary(id: Id64String): Promise<boolean> {\n let summary = this._summaryIds.get(id);\n\n if (undefined === summary) {\n if (this.agenda.isEmpty && this._summaryIds.size > 1000)\n this._summaryIds.clear(); // Limit auto-locate cache size to something reasonable...\n\n try {\n this._startedCmd = await this.startCommand();\n if (undefined === (summary = await solidModelingIpc.summarizeElementGeometryCache(id)))\n return false;\n } catch (err) {\n return false;\n }\n\n this._summaryIds.set(id, summary);\n }\n\n return true;\n }\n\n protected override async createElementGeometryCache(id: Id64String): Promise<boolean> {\n const accept = await super.createElementGeometryCache(id);\n return (accept && this.wantGeometrySummary ? this.createElementGeometrySummary(id) : accept);\n }\n\n protected getAcceptedSubEntityData(index: number = -1): SubEntityData | undefined {\n if (-1 === index)\n index = this._acceptedSubEntities.length - 1;\n\n if (index < 0 || index > this._acceptedSubEntities.length - 1)\n return undefined;\n\n return this._acceptedSubEntities[index];\n }\n\n protected getAcceptedSubEntities(): SubEntityProps[] {\n const accepted: SubEntityProps[] = [];\n this._acceptedSubEntities.forEach((entry) => accepted.push(entry.props));\n return accepted;\n }\n\n protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void {\n subEntity.display(context, accepted);\n }\n\n protected drawAcceptedSubEntities(context: DecorateContext): void {\n this._acceptedSubEntities.forEach((entry) => this.drawSubEntity(context, entry, true));\n }\n\n public override decorate(context: DecorateContext): void {\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\n return;\n\n if (this.haveAcceptedSubEntities)\n this.drawAcceptedSubEntities(context);\n\n if (undefined !== this._currentSubEntity)\n this.drawSubEntity(context, this._currentSubEntity, false);\n }\n\n public override decorateSuspended(context: DecorateContext): void {\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\n return;\n\n if (this.haveAcceptedSubEntities)\n this.drawAcceptedSubEntities(context);\n }\n\n protected getLocateAperture(ev: BeButtonEvent): number {\n if (undefined === ev.viewport)\n return 0.0;\n\n return ev.viewport.pixelsFromInches(InputSource.Touch === ev.inputSource ? IModelApp.locateManager.touchApertureInches : IModelApp.locateManager.apertureInches);\n }\n\n protected getMaxRayDistance(ev: BeButtonEvent, aperture: number): number {\n if (undefined === ev.viewport)\n return 0.0;\n\n // NOTE: Compute a world coordinate radius for ray test, try getting aperture size at point on element...\n const hit = IModelApp.accuSnap.currHit;\n const vec: Point3d[] = [];\n\n vec[0] = ev.viewport.worldToView(hit ? hit.hitPoint : ev.point);\n vec[1] = vec[0].clone();\n vec[1].x += 1;\n ev.viewport.viewToWorldArray(vec);\n\n // The edge and vertex hits get post-filtered on xy distance, so this is fine for perspective views...\n return (aperture * vec[0].distance(vec[1]));\n }\n\n protected getRayOrigin(ev: BeButtonEvent): Point3d {\n const spacePoint = ev.point.clone();\n const vp = ev.viewport;\n\n if (undefined === vp)\n return spacePoint;\n\n vp.worldToNpc(spacePoint, spacePoint);\n spacePoint.z = 1.0;\n vp.npcToWorld(spacePoint, spacePoint);\n\n return spacePoint;\n }\n\n protected wantHiddenEdges(vp: Viewport): boolean {\n return vp.viewFlags.hiddenEdgesVisible();\n }\n\n protected getSubEntityFilter(): SubEntityFilter | undefined { return undefined; }\n\n protected async pickSubEntities(id: Id64String, boresite: Ray3d, maxFace: number, maxEdge: number, maxVertex: number, maxDistance: number, hiddenEdgesVisible: boolean, filter?: SubEntityFilter): Promise<SubEntityLocationProps[] | undefined> {\n try {\n this._startedCmd = await this.startCommand();\n const opts: LocateSubEntityProps = {\n maxFace,\n maxEdge,\n maxVertex,\n maxDistance,\n hiddenEdgesVisible,\n filter,\n };\n return await solidModelingIpc.locateSubEntities(id, boresite.origin, boresite.direction, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n protected async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\n const vp = ev.viewport;\n if (undefined === vp)\n return undefined;\n\n const maxFace = this.getMaximumSubEntityHits(SubEntityType.Face);\n const maxEdge = this.getMaximumSubEntityHits(SubEntityType.Edge);\n const maxVertex = this.getMaximumSubEntityHits(SubEntityType.Vertex);\n\n if (0 === maxFace && 0 === maxEdge && 0 === maxVertex)\n return undefined;\n\n const aperture = this.getLocateAperture(ev);\n const maxDistance = this.getMaxRayDistance(ev, aperture);\n const spacePoint = this.getRayOrigin(ev);\n const boresite = AccuDrawHintBuilder.getBoresite(spacePoint, vp);\n const hiddenEdgesVisible = this.wantHiddenEdges(vp);\n const filter = this.getSubEntityFilter();\n\n let hits = await this.pickSubEntities(id, boresite, maxFace, maxEdge, maxVertex, maxDistance, hiddenEdgesVisible, filter);\n\n // NOTE: Remove erroneous edge/vertex hits in perspective views by checking real xy distance to hit point...\n if (undefined === hits || !vp.isCameraOn)\n return hits;\n\n if (maxEdge > 0 && hits.length > 1) {\n const edgeApertureSquared = (aperture * aperture);\n const vertexApertureSquared = ((aperture * 2.0) * (aperture * 2.0));\n\n const e2 = Math.pow(aperture, 2);\n const v2 = Math.pow(aperture * 2.0, 2);\n\n if (e2 !== edgeApertureSquared || v2 !== vertexApertureSquared)\n return hits;\n\n const rayOrigin = vp.worldToView(boresite.origin);\n\n hits = hits.filter((hit) => {\n if (SubEntityType.Face === hit.subEntity.type)\n return true;\n\n const hitPoint = vp.worldToView(Point3d.fromJSON(hit.point));\n const distance = hitPoint.distanceSquaredXY(rayOrigin);\n\n return (distance <= (SubEntityType.Edge === hit.subEntity.type ? edgeApertureSquared : vertexApertureSquared));\n });\n }\n\n return hits;\n }\n\n protected async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\n const data = new SubEntityData(hit.subEntity);\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(hit.point)) : undefined);\n\n await this.createSubEntityGraphic(id, data, chordTolerance);\n\n return data;\n }\n\n /** Append specified sub-entity to accepted array. */\n protected async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\n this._acceptedSubEntities.push(await this.createSubEntityData(id, props));\n }\n\n /** Remove specified sub-entity from accepted array, or pop last sub-entity if undefined. */\n protected async removeSubEntity(_id: Id64String, props?: SubEntityLocationProps): Promise<void> {\n if (undefined !== props)\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isSameSubEntity(entry.props, props.subEntity));\n else\n this._acceptedSubEntities.pop();\n }\n\n /** Locate sub-entities for the most recently added (last) agenda entry. Tool sub-classes that wish to identity\n * sub-entities from multiple elements are responsible for maintaining the sub-entities per-element.\n */\n protected async doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean> {\n if (this.agenda.isEmpty || undefined === ev.viewport)\n return false;\n\n const id = this.agenda.elements[this.agenda.length - 1];\n\n if (newSearch) {\n this._locatedSubEntities = await this.doPickSubEntities(id, ev);\n if (undefined === this._locatedSubEntities || 0 === this._locatedSubEntities.length)\n return false;\n\n /** NOTE: Set last button location to point on sub-entity when not snapping.\n * If dynamics are enabled on this event, onDynamicFrame is called with this location.\n */\n if (CoordSource.ElemSnap !== ev.coordsFrom) {\n ev.point.setFrom(Point3d.fromJSON(this._locatedSubEntities[0].point));\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\n }\n } else {\n await this.removeSubEntity(id);\n }\n\n const hit = this._locatedSubEntities?.shift();\n if (undefined !== hit) {\n if (undefined === this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, hit.subEntity)))\n await this.addSubEntity(id, hit);\n else if (this.allowSubEntityControlDeselect)\n await this.removeSubEntity(id, hit);\n }\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n return true;\n }\n\n protected override async chooseNextHit(ev: BeButtonEvent): Promise<EventHandled> {\n if (!this.haveAcceptedSubEntities)\n return super.chooseNextHit(ev);\n\n if (!this.allowSubEntitySelectNext) {\n await this.onReinitialize(); // Don't cycle through hits after starting dynamics...\n } else {\n await this.doLocateSubEntity(ev, false);\n if (!this.haveAcceptedSubEntities)\n await this.onReinitialize();\n }\n\n return EventHandled.No;\n }\n\n protected get wantAdditionalSubEntities(): boolean {\n return (this._acceptedSubEntities.length < this.requiredSubEntityCount || (this.allowSubEntityControlSelect && this.isControlDown));\n }\n\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\n if (this.wantAdditionalSubEntities) {\n await this.doLocateSubEntity(ev, true);\n\n if (this.wantAdditionalSubEntities) {\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n this.clearCurrentSubEntity();\n }\n\n return super.gatherInput(ev);\n }\n\n protected getCurrentElement(): Id64String | undefined {\n if (!this.agenda.isEmpty)\n return this.agenda.elements[this.agenda.length - 1];\n\n const hit = IModelApp.accuSnap.currHit;\n return (undefined !== hit && hit.isElementHit ? hit.sourceId : undefined);\n }\n\n protected clearCurrentSubEntity(): void {\n if (undefined === this._currentSubEntity)\n return;\n this._currentSubEntity.cleanupGraphic();\n this._currentSubEntity = undefined;\n }\n\n protected async setCurrentSubEntity(id: Id64String, hit: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\n if (undefined === this._currentSubEntity)\n this._currentSubEntity = new SubEntityData(hit.subEntity);\n else\n this._currentSubEntity.props = hit.subEntity;\n\n return this.createSubEntityGraphic(id, this._currentSubEntity, chordTolerance);\n }\n\n protected async changeCurrentSubEntity(id?: Id64String, current?: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\n if (undefined === id || undefined === current) {\n if (undefined === this._currentSubEntity || !this._currentSubEntity.hasGraphic)\n return false;\n this._currentSubEntity.cleanupGraphic();\n return true;\n }\n\n if (undefined !== this._currentSubEntity && this._currentSubEntity.hasGraphic && this._currentSubEntity.isSame(current.subEntity))\n return false;\n\n return this.setCurrentSubEntity(id, current, chordTolerance);\n }\n\n protected async updateCurrentSubEntity(ev: BeButtonEvent): Promise<boolean> {\n if (undefined === ev.viewport)\n return false;\n\n const id = this.wantAdditionalSubEntities ? this.getCurrentElement() : undefined;\n if (undefined === id)\n return this.changeCurrentSubEntity();\n\n if (this._subEntityGraphicPending)\n return false;\n\n this._subEntityGraphicPending = true;\n\n const current = await this.doPickSubEntities(id, ev);\n const chordTolerance = current ? computeChordToleranceFromPoint(ev.viewport, Point3d.fromJSON(current[0].point)) : 0.0;\n const status = await this.changeCurrentSubEntity(id, current ? current[0] : undefined, chordTolerance);\n\n this._subEntityGraphicPending = undefined;\n\n if (status)\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n return status;\n }\n\n protected async createSubEntityGraphic(id: Id64String, data: SubEntityData, chordTolerance?: number): Promise<boolean> {\n try {\n const opts: ElementGeometryResultOptions = {\n wantGraphic: true,\n wantRange: true,\n wantAppearance: true,\n chordTolerance,\n };\n\n data.chordTolerance = chordTolerance;\n data.geometry = await solidModelingIpc.getSubEntityGeometry(id, data.props, opts);\n\n return await data.createGraphic(this.iModel);\n } catch (err) {\n return false;\n }\n }\n\n protected override async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\n if (isDynamics)\n return super.updateGraphic(ev, isDynamics);\n\n await this.updateCurrentSubEntity(ev);\n }\n\n protected override async getGraphicData(ev: BeButtonEvent): Promise<Uint8Array | undefined> {\n const result = await this.applyAgendaOperation(ev, false);\n return result?.graphic;\n }\n\n protected async applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined> { return undefined; }\n\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation(ev, true);\n if (result?.elementId)\n await this.saveChanges();\n }\n\n public override async onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<EventHandled> {\n if (EventHandled.Yes === await super.onModifierKeyTransition(wentDown, modifier, event))\n return EventHandled.Yes;\n\n if (BeModifierKeys.Control !== modifier)\n return EventHandled.No;\n\n if (IModelApp.toolAdmin.isLocateCircleOn === this.wantAdditionalSubEntities)\n return EventHandled.No;\n\n this.setupAndPromptForNextAction();\n return EventHandled.Yes;\n }\n\n public override changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void {\n super.changeLocateState(enableLocate, enableSnap, cursor, coordLockOvr);\n\n // Keep showing locate circle when identifying sub-entities even if done locating elements...\n if (!IModelApp.toolAdmin.isLocateCircleOn && this.wantAdditionalSubEntities)\n IModelApp.toolAdmin.setLocateCircleOn(true);\n }\n\n protected override get shouldEnableSnap(): boolean {\n if (this.isSelectByPoints || !this.wantAccuSnap)\n return false;\n\n if (this.isDynamicsStarted)\n return true;\n\n const isCtrlSelect = (this.isControlDown && (this.controlKeyContinuesSelection || this.allowSubEntityControlSelect));\n\n if (isCtrlSelect || this.wantAdditionalElements || this.wantAdditionalSubEntities)\n return this.wantSubEntitySnap;\n\n return !this.wantSubEntitySnap;\n }\n\n protected setupAccuDraw(): void { }\n\n protected override setupAndPromptForNextAction(): void {\n this.setupAccuDraw();\n super.setupAndPromptForNextAction();\n }\n\n protected clearSubEntityGraphics(): void {\n if (undefined !== this._currentSubEntity)\n this._currentSubEntity.cleanupGraphic();\n\n this._acceptedSubEntities.forEach((entry) => entry.cleanupGraphic());\n }\n\n public override async onCleanup(): Promise<void> {\n this.clearSubEntityGraphics();\n return super.onCleanup();\n }\n}\n"]}
|