@itwin/editor-frontend 4.5.0-dev.9 → 4.6.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +0 -29
  4. package/lib/cjs/CreateElementTool.d.ts +64 -2
  5. package/lib/cjs/CreateElementTool.d.ts.map +1 -1
  6. package/lib/cjs/CreateElementTool.js +65 -4
  7. package/lib/cjs/CreateElementTool.js.map +1 -1
  8. package/lib/cjs/EditTool.d.ts +5 -0
  9. package/lib/cjs/EditTool.d.ts.map +1 -1
  10. package/lib/cjs/EditTool.js +10 -14
  11. package/lib/cjs/EditTool.js.map +1 -1
  12. package/lib/cjs/EditToolIpc.d.ts +1 -5
  13. package/lib/cjs/EditToolIpc.d.ts.map +1 -1
  14. package/lib/cjs/EditToolIpc.js +1 -5
  15. package/lib/cjs/EditToolIpc.js.map +1 -1
  16. package/lib/cjs/ModifyElementTool.js.map +1 -1
  17. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  18. package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
  19. package/lib/cjs/TransformElementsTool.d.ts +17 -98
  20. package/lib/cjs/TransformElementsTool.d.ts.map +1 -1
  21. package/lib/cjs/TransformElementsTool.js +15 -412
  22. package/lib/cjs/TransformElementsTool.js.map +1 -1
  23. package/lib/cjs/UndoRedoTool.js.map +1 -1
  24. package/lib/cjs/editor-frontend.d.ts +0 -6
  25. package/lib/cjs/editor-frontend.d.ts.map +1 -1
  26. package/lib/cjs/editor-frontend.js +0 -6
  27. package/lib/cjs/editor-frontend.js.map +1 -1
  28. package/lib/esm/CreateElementTool.d.ts +64 -2
  29. package/lib/esm/CreateElementTool.d.ts.map +1 -1
  30. package/lib/esm/CreateElementTool.js +65 -4
  31. package/lib/esm/CreateElementTool.js.map +1 -1
  32. package/lib/esm/EditTool.d.ts +5 -0
  33. package/lib/esm/EditTool.d.ts.map +1 -1
  34. package/lib/esm/EditTool.js +10 -14
  35. package/lib/esm/EditTool.js.map +1 -1
  36. package/lib/esm/EditToolIpc.d.ts +1 -5
  37. package/lib/esm/EditToolIpc.d.ts.map +1 -1
  38. package/lib/esm/EditToolIpc.js +0 -4
  39. package/lib/esm/EditToolIpc.js.map +1 -1
  40. package/lib/esm/ModifyElementTool.js.map +1 -1
  41. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  42. package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
  43. package/lib/esm/TransformElementsTool.d.ts +17 -98
  44. package/lib/esm/TransformElementsTool.d.ts.map +1 -1
  45. package/lib/esm/TransformElementsTool.js +16 -413
  46. package/lib/esm/TransformElementsTool.js.map +1 -1
  47. package/lib/esm/UndoRedoTool.js.map +1 -1
  48. package/lib/esm/editor-frontend.d.ts +0 -6
  49. package/lib/esm/editor-frontend.d.ts.map +1 -1
  50. package/lib/esm/editor-frontend.js +0 -6
  51. package/lib/esm/editor-frontend.js.map +1 -1
  52. package/lib/public/locales/en/Editor.json +79 -490
  53. package/package.json +14 -14
  54. package/lib/cjs/DeleteElementsTool.d.ts +0 -14
  55. package/lib/cjs/DeleteElementsTool.d.ts.map +0 -1
  56. package/lib/cjs/DeleteElementsTool.js +0 -42
  57. package/lib/cjs/DeleteElementsTool.js.map +0 -1
  58. package/lib/cjs/ElementGeometryTool.d.ts +0 -148
  59. package/lib/cjs/ElementGeometryTool.d.ts.map +0 -1
  60. package/lib/cjs/ElementGeometryTool.js +0 -705
  61. package/lib/cjs/ElementGeometryTool.js.map +0 -1
  62. package/lib/cjs/ModifyCurveTools.d.ts +0 -140
  63. package/lib/cjs/ModifyCurveTools.d.ts.map +0 -1
  64. package/lib/cjs/ModifyCurveTools.js +0 -777
  65. package/lib/cjs/ModifyCurveTools.js.map +0 -1
  66. package/lib/cjs/SketchTools.d.ts +0 -308
  67. package/lib/cjs/SketchTools.d.ts.map +0 -1
  68. package/lib/cjs/SketchTools.js +0 -1708
  69. package/lib/cjs/SketchTools.js.map +0 -1
  70. package/lib/cjs/SolidModelingTools.d.ts +0 -381
  71. package/lib/cjs/SolidModelingTools.d.ts.map +0 -1
  72. package/lib/cjs/SolidModelingTools.js +0 -1453
  73. package/lib/cjs/SolidModelingTools.js.map +0 -1
  74. package/lib/cjs/SolidPrimitiveTools.d.ts +0 -322
  75. package/lib/cjs/SolidPrimitiveTools.d.ts.map +0 -1
  76. package/lib/cjs/SolidPrimitiveTools.js +0 -1376
  77. package/lib/cjs/SolidPrimitiveTools.js.map +0 -1
  78. package/lib/esm/DeleteElementsTool.d.ts +0 -14
  79. package/lib/esm/DeleteElementsTool.d.ts.map +0 -1
  80. package/lib/esm/DeleteElementsTool.js +0 -39
  81. package/lib/esm/DeleteElementsTool.js.map +0 -1
  82. package/lib/esm/ElementGeometryTool.d.ts +0 -148
  83. package/lib/esm/ElementGeometryTool.d.ts.map +0 -1
  84. package/lib/esm/ElementGeometryTool.js +0 -697
  85. package/lib/esm/ElementGeometryTool.js.map +0 -1
  86. package/lib/esm/ModifyCurveTools.d.ts +0 -140
  87. package/lib/esm/ModifyCurveTools.d.ts.map +0 -1
  88. package/lib/esm/ModifyCurveTools.js +0 -772
  89. package/lib/esm/ModifyCurveTools.js.map +0 -1
  90. package/lib/esm/SketchTools.d.ts +0 -308
  91. package/lib/esm/SketchTools.d.ts.map +0 -1
  92. package/lib/esm/SketchTools.js +0 -1704
  93. package/lib/esm/SketchTools.js.map +0 -1
  94. package/lib/esm/SolidModelingTools.d.ts +0 -381
  95. package/lib/esm/SolidModelingTools.d.ts.map +0 -1
  96. package/lib/esm/SolidModelingTools.js +0 -1445
  97. package/lib/esm/SolidModelingTools.js.map +0 -1
  98. package/lib/esm/SolidPrimitiveTools.d.ts +0 -322
  99. package/lib/esm/SolidPrimitiveTools.d.ts.map +0 -1
  100. package/lib/esm/SolidPrimitiveTools.js +0 -1372
  101. package/lib/esm/SolidPrimitiveTools.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"UndoRedoTool.js","sourceRoot":"","sources":["../../src/UndoRedoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAA+D;AAE/D;;GAEG;AACH,MAAa,WAAY,SAAQ,oBAAI;IAEnB,KAAK,CAAC,GAAG;QACvB,MAAM,MAAM,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,qBAAqB;YAC5E,OAAO,IAAI,CAAC;QAEd,MAAM,sBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEtD,8HAA8H;QAC9H,IAAI,SAAS,KAAK,yBAAS,CAAC,SAAS,CAAC,aAAa;YACjD,MAAM,yBAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;;AAZsB,kBAAM,GAAG,SAAS,CAAC;AAD/B,kCAAW;AAgBxB;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AAJsB,eAAM,GAAG,MAAM,CAAC;AAD5B,4BAAQ;AAQrB;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AAJsB,eAAM,GAAG,MAAM,CAAC;AAD5B,4BAAQ","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 { IModelApp, IpcApp, Tool } from \"@itwin/core-frontend\";\r\n\r\n/** Undo all element changes\r\n * @beta\r\n */\r\nexport class UndoAllTool extends Tool {\r\n public static override toolId = \"UndoAll\";\r\n public override async run(): Promise<boolean> {\r\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\r\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection)\r\n return true;\r\n\r\n await IpcApp.appFunctionIpc.reverseAllTxn(imodel.key);\r\n\r\n // ### TODO Restart of primitive tool should be handled by Txn event listener...needs to happen even if not the active tool...\r\n if (undefined !== IModelApp.toolAdmin.primitiveTool)\r\n await IModelApp.toolAdmin.primitiveTool.onRestartTool();\r\n return true;\r\n }\r\n}\r\n\r\n/** Undo active tool steps, or element changes\r\n * @beta\r\n */\r\nexport class UndoTool extends Tool {\r\n public static override toolId = \"Undo\";\r\n public override async run(): Promise<boolean> {\r\n await IModelApp.toolAdmin.doUndoOperation();\r\n return true;\r\n }\r\n}\r\n\r\n/** Redo active tool steps, or element changes\r\n * @beta\r\n */\r\nexport class RedoTool extends Tool {\r\n public static override toolId = \"Redo\";\r\n public override async run(): Promise<boolean> {\r\n await IModelApp.toolAdmin.doRedoOperation();\r\n return true;\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"UndoRedoTool.js","sourceRoot":"","sources":["../../src/UndoRedoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAA+D;AAE/D;;GAEG;AACH,MAAa,WAAY,SAAQ,oBAAI;IAEnB,KAAK,CAAC,GAAG;QACvB,MAAM,MAAM,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,qBAAqB;YAC5E,OAAO,IAAI,CAAC;QAEd,MAAM,sBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEtD,8HAA8H;QAC9H,IAAI,SAAS,KAAK,yBAAS,CAAC,SAAS,CAAC,aAAa;YACjD,MAAM,yBAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;;AAZsB,kBAAM,GAAG,SAAS,CAAC;AAD/B,kCAAW;AAgBxB;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AAJsB,eAAM,GAAG,MAAM,CAAC;AAD5B,4BAAQ;AAQrB;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AAJsB,eAAM,GAAG,MAAM,CAAC;AAD5B,4BAAQ","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 { IModelApp, IpcApp, Tool } from \"@itwin/core-frontend\";\n\n/** Undo all element changes\n * @beta\n */\nexport class UndoAllTool extends Tool {\n public static override toolId = \"UndoAll\";\n public override async run(): Promise<boolean> {\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection)\n return true;\n\n await IpcApp.appFunctionIpc.reverseAllTxn(imodel.key);\n\n // ### TODO Restart of primitive tool should be handled by Txn event listener...needs to happen even if not the active tool...\n if (undefined !== IModelApp.toolAdmin.primitiveTool)\n await IModelApp.toolAdmin.primitiveTool.onRestartTool();\n return true;\n }\n}\n\n/** Undo active tool steps, or element changes\n * @beta\n */\nexport class UndoTool extends Tool {\n public static override toolId = \"Undo\";\n public override async run(): Promise<boolean> {\n await IModelApp.toolAdmin.doUndoOperation();\n return true;\n }\n}\n\n/** Redo active tool steps, or element changes\n * @beta\n */\nexport class RedoTool extends Tool {\n public static override toolId = \"Redo\";\n public override async run(): Promise<boolean> {\n await IModelApp.toolAdmin.doRedoOperation();\n return true;\n }\n}\n\n"]}
@@ -1,15 +1,9 @@
1
1
  export * from "./CreateElementTool";
2
- export * from "./DeleteElementsTool";
3
2
  export * from "./EditTool";
4
- export * from "./ElementGeometryTool";
5
3
  export * from "./EditToolIpc";
6
- export * from "./ModifyCurveTools";
7
4
  export * from "./ModifyElementTool";
8
5
  export * from "./ProjectLocation/ProjectExtentsDecoration";
9
6
  export * from "./ProjectLocation/ProjectGeolocation";
10
- export * from "./SketchTools";
11
- export * from "./SolidModelingTools";
12
- export * from "./SolidPrimitiveTools";
13
7
  export * from "./TransformElementsTool";
14
8
  export * from "./UndoRedoTool";
15
9
  /** @docs-package-description
@@ -1 +1 @@
1
- {"version":3,"file":"editor-frontend.d.ts","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAE/B;;GAEG;AAEH;;;GAGG"}
1
+ {"version":3,"file":"editor-frontend.d.ts","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAE/B;;GAEG;AAEH;;;GAGG"}
@@ -19,17 +19,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
19
  * See LICENSE.md in the project root for license terms and full copyright notice.
20
20
  *--------------------------------------------------------------------------------------------*/
21
21
  __exportStar(require("./CreateElementTool"), exports);
22
- __exportStar(require("./DeleteElementsTool"), exports);
23
22
  __exportStar(require("./EditTool"), exports);
24
- __exportStar(require("./ElementGeometryTool"), exports);
25
23
  __exportStar(require("./EditToolIpc"), exports);
26
- __exportStar(require("./ModifyCurveTools"), exports);
27
24
  __exportStar(require("./ModifyElementTool"), exports);
28
25
  __exportStar(require("./ProjectLocation/ProjectExtentsDecoration"), exports);
29
26
  __exportStar(require("./ProjectLocation/ProjectGeolocation"), exports);
30
- __exportStar(require("./SketchTools"), exports);
31
- __exportStar(require("./SolidModelingTools"), exports);
32
- __exportStar(require("./SolidPrimitiveTools"), exports);
33
27
  __exportStar(require("./TransformElementsTool"), exports);
34
28
  __exportStar(require("./UndoRedoTool"), exports);
35
29
  /** @docs-package-description
@@ -1 +1 @@
1
- {"version":3,"file":"editor-frontend.js","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,sDAAoC;AACpC,uDAAqC;AACrC,6CAA2B;AAC3B,wDAAsC;AACtC,gDAA8B;AAC9B,qDAAmC;AACnC,sDAAoC;AACpC,6EAA2D;AAC3D,uEAAqD;AACrD,gDAA8B;AAC9B,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,iDAA+B;AAE/B;;GAEG;AAEH;;;GAGG","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\nexport * from \"./CreateElementTool\";\r\nexport * from \"./DeleteElementsTool\";\r\nexport * from \"./EditTool\";\r\nexport * from \"./ElementGeometryTool\";\r\nexport * from \"./EditToolIpc\";\r\nexport * from \"./ModifyCurveTools\";\r\nexport * from \"./ModifyElementTool\";\r\nexport * from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nexport * from \"./ProjectLocation/ProjectGeolocation\";\r\nexport * from \"./SketchTools\";\r\nexport * from \"./SolidModelingTools\";\r\nexport * from \"./SolidPrimitiveTools\";\r\nexport * from \"./TransformElementsTool\";\r\nexport * from \"./UndoRedoTool\";\r\n\r\n/** @docs-package-description\r\n * The editor-frontend package contains frontend capabilities for editing iModels.\r\n */\r\n\r\n/**\r\n * @docs-group-description Editing\r\n * Classes containing functionality for editing iModels on the frontend.\r\n */\r\n"]}
1
+ {"version":3,"file":"editor-frontend.js","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,sDAAoC;AACpC,6CAA2B;AAC3B,gDAA8B;AAC9B,sDAAoC;AACpC,6EAA2D;AAC3D,uEAAqD;AACrD,0DAAwC;AACxC,iDAA+B;AAE/B;;GAEG;AAEH;;;GAGG","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*--------------------------------------------------------------------------------------------*/\nexport * from \"./CreateElementTool\";\nexport * from \"./EditTool\";\nexport * from \"./EditToolIpc\";\nexport * from \"./ModifyElementTool\";\nexport * from \"./ProjectLocation/ProjectExtentsDecoration\";\nexport * from \"./ProjectLocation/ProjectGeolocation\";\nexport * from \"./TransformElementsTool\";\nexport * from \"./UndoRedoTool\";\n\n/** @docs-package-description\n * The editor-frontend package contains frontend capabilities for editing iModels.\n */\n\n/**\n * @docs-group-description Editing\n * Classes containing functionality for editing iModels on the frontend.\n */\n"]}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Id64String } from "@itwin/core-bentley";
5
5
  import { Point3d, Range3d, Transform } from "@itwin/core-geometry";
6
- import { ElementGeometryBuilderParams, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream, PlacementProps } from "@itwin/core-common";
6
+ import { FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream, PlacementProps } from "@itwin/core-common";
7
7
  import { BeButtonEvent, DynamicsContext, EventHandled, IModelConnection, PrimitiveTool, RenderGraphicOwner, ToolAssistanceInstruction, Viewport } from "@itwin/core-frontend";
8
8
  /** Calculate a view based chord tolerance for facetting curved geometry given a world coordinate and optional radius.
9
9
  * @beta
@@ -87,27 +87,89 @@ export declare abstract class CreateElementTool extends PrimitiveTool {
87
87
  }
88
88
  /** Placement tool base class for creating new elements that use dynamics to show intermediate results.
89
89
  * @beta
90
+ * @usage Subclasses should override the following methods in addition to the
91
+ * abstract methods. See the method descriptions for more details:
92
+ * - Override: [[isComplete]], [[updateElementData]], [[doCreateElement]], [[setupAccuDraw]], [[cancelPoint]]
93
+ * - As necessary: [[wantAccuSnap]], [[wantDynamics]]
94
+ * - Ensure the parent's implementation is called: [[setupAndPromptForNextAction]], [[onPostInstall]]
95
+ *
96
+ * This class expects subclasses to call [[setupAndPromptForNextAction]] as moving between the subclass's internal state.
97
+ * @note To trigger an element to be inserted on [[onDataButtonDown]], ensure [[isComplete]] returns `true`
98
+ * @caution Subclasses typically do not override the following methods. Instead, overwrite the methods they call as described here:
99
+ * - [[onMouseMotion]]: See [[updateElementData]].
100
+ * - [[onDataButtonDown]]:
101
+ * - - See [[updateElementData]] for accepting data points.
102
+ * - - See [[isComplete]] & [[doCreateElement` for creating the finalized element.
103
+ * - - (With caution) See [[acceptPoint]] for preventing the mouse click event from propagating to the base tools.
104
+ * - [[onResetButtonUp]]: See [[cancelPoint]].
90
105
  */
91
106
  export declare abstract class CreateElementWithDynamicsTool extends CreateElementTool {
92
107
  protected _graphicsProvider?: DynamicGraphicsProvider;
93
108
  protected get wantAccuSnap(): boolean;
94
109
  protected get wantDynamics(): boolean;
95
110
  protected clearGraphics(): void;
111
+ /**
112
+ * This method is intended to update the dynamic graphics displayed by the tool.
113
+ *
114
+ * It expects [[updateDynamicData]] to return `true`. If it returns `false`, no graphics are created.
115
+ *
116
+ * It expects [[getPlacementProps]] and [[getGeometryProps]] to be defined as it uses these functions to create the dynamic graphic.
117
+ */
96
118
  protected createGraphics(ev: BeButtonEvent): Promise<void>;
97
119
  onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void;
120
+ /** Invoked when the cursor is moving
121
+ * Propagates event to [[updateElementData]].
122
+ * @caution Subclasses typically don't override this.
123
+ */
98
124
  onMouseMotion(ev: BeButtonEvent): Promise<void>;
99
125
  protected abstract getPlacementProps(): PlacementProps | undefined;
100
126
  protected abstract getGeometryProps(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;
101
127
  protected abstract getElementProps(placement: PlacementProps): GeometricElementProps | undefined;
102
- protected doCreateElement(_props: GeometricElementProps, _data?: ElementGeometryBuilderParams): Promise<void>;
128
+ /**
129
+ * Creates a new element in the iModel by interfacing with the core/editor backend.
130
+ *
131
+ * This method is called by [[onDataButtonDown]] only if `isComplete` is true.
132
+ *
133
+ * @param _props Argument passed in is based on the return value from the [[getElementProps]] method.
134
+ */
135
+ protected doCreateElement(_props: GeometricElementProps): Promise<void>;
136
+ /** This method is intended to update information related to the element. This method is called in 2 scenarios:
137
+ * 1. [[onMouseMotion]] as a dynamics
138
+ * 2. [[onDataButtonDown]] when accepting the next point of the tool
139
+ * @param ev - The mouse event triggering this call.
140
+ * @param isDynamics it is `true` in scenario [1] and `false` in scenario [2].
141
+ */
103
142
  protected updateElementData(_ev: BeButtonEvent, _isDynamics: boolean): Promise<void>;
143
+ /**
144
+ * This function does not handle updating data itself, instead, it directly calls [[updateElementData]] to handle that.
145
+ * @returns `true` if dynamics are active, `false` otherwise.
146
+ * @caution Subclasses typically don't override this.
147
+ */
104
148
  protected updateDynamicData(ev: BeButtonEvent): Promise<boolean>;
105
149
  protected createElement(): Promise<void>;
150
+ /** Intended to be used to setupAccuSnap. Is called by [[setupAndPromptForNextAction]].
151
+ * @note Has not checked for [[wantAccuSnap]] at this point. Directly, *after* this method is called in [[setupAndPromptForNextAction]], AccuSnap will be enabled/disabled based on [[wantAccuSnap]].
152
+ */
106
153
  protected setupAccuDraw(): void;
107
154
  protected setupAndPromptForNextAction(): void;
155
+ /** Called by [[onDataButtonDown]].
156
+ * @returns return `false` if the event has been handled.
157
+ * @caution Subclasses typically don't override this.
158
+ */
108
159
  protected acceptPoint(ev: BeButtonEvent): Promise<boolean>;
160
+ /** Invoked when the data button is pressed.
161
+ * Propagates event to [[updateElementData]] by way of [[acceptPoint]].
162
+ * @caution Subclasses typically don't override this.
163
+ */
109
164
  onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
165
+ /** Called by [[onResetButtonUp]].
166
+ * @returns return `false` if the event has been handled.
167
+ */
110
168
  protected cancelPoint(_ev: BeButtonEvent): Promise<boolean>;
169
+ /** Invoked when the reset button is released.
170
+ * Propagates event to [[cancelPoint]].
171
+ * @caution Subclasses typically don't override this.
172
+ */
111
173
  onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled>;
112
174
  onCleanup(): Promise<void>;
113
175
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CreateElementTool.d.ts","sourceRoot":"","sources":["../../src/CreateElementTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CreateElementTool.d.ts","sourceRoot":"","sources":["../../src/CreateElementTool.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAQ,UAAU,EAAgB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAY,OAAO,EAAE,OAAO,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAgE,wBAAwB,EAAE,qBAAqB,EAAmC,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxN,OAAO,EAAE,aAAa,EAA0B,eAAe,EAAE,YAAY,EAA4B,gBAAgB,EAAE,aAAa,EAAuB,kBAAkB,EAAkE,yBAAyB,EAAyB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA+B5U;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjG;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnF;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IACzC,SAAgB,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACpC,kCAAkC;IAClC,OAAO,CAAC,eAAe,CAAC,CAAmB;IAC3C,mEAAmE;IAC5D,SAAS,CAAC,EAAE,UAAU,CAAC;IAC9B,iEAAiE;IAC1D,OAAO,CAAC,EAAE,UAAU,CAAC;IAC5B,wEAAwE;IACjE,cAAc,SAAS;gBAElB,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM;IAKpD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;YAEX,aAAa;IAyC3B;;OAEG;IACU,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxJ;;;OAGG;IACI,8BAA8B,CAAC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB,GAAG,IAAI;IAW1K;;OAEG;IACI,cAAc,IAAI,IAAI;IAOtB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;CAezE;AAED;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,aAAa;IAC3D,IAAW,cAAc,IAAI,UAAU,CAMtC;IAED,IAAoB,aAAa,IAAI,UAAU,CAM9C;IAEe,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO;IAOtG;;OAEG;IACH,SAAS,KAAK,YAAY,IAAI,OAAO,CAAkB;IAEvD;;OAEG;IACH,SAAS,KAAK,YAAY,IAAI,OAAO,CAAkB;IAEvD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAEjD,kDAAkD;IAClD,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjD;;;;OAIG;cACa,iBAAiB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBrD,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAI1D,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAKhF,8CAA8C;IACxB,aAAa;IAKnC,8GAA8G;IACxF,WAAW;IAIjC,yEAAyE;IACzE,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAK7C,yEAAyE;IACzE,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,yBAAyB,EAAE,GAAG,IAAI;CAgC7G;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,6BAA8B,SAAQ,iBAAiB;IAC3E,SAAS,CAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAEtD,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAC/D,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAE/D,SAAS,CAAC,aAAa,IAAI,IAAI;IAO/B;;;;;;OAMG;cACa,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhD,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAKlF;;;OAGG;IACmB,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,cAAc,GAAG,SAAS;IAClE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,kBAAkB,GAAG,wBAAwB,GAAG,SAAS;IACzH,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,cAAc,GAAG,qBAAqB,GAAG,SAAS;IAEhG;;;;;;OAMG;cACa,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7E;;;;;OAKG;cACa,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1F;;;;OAIG;cACa,iBAAiB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;cAQtD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB9C;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;cAEZ,2BAA2B,IAAI,IAAI;IAKtD;;;OAGG;cACa,WAAW,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAKhE;;;OAGG;IACmB,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAMhF;;OAEG;cACa,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAEjE;;;MAGE;IACoB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAMzD,SAAS;CAIhC"}
@@ -242,6 +242,21 @@ export class CreateElementTool extends PrimitiveTool {
242
242
  }
243
243
  /** Placement tool base class for creating new elements that use dynamics to show intermediate results.
244
244
  * @beta
245
+ * @usage Subclasses should override the following methods in addition to the
246
+ * abstract methods. See the method descriptions for more details:
247
+ * - Override: [[isComplete]], [[updateElementData]], [[doCreateElement]], [[setupAccuDraw]], [[cancelPoint]]
248
+ * - As necessary: [[wantAccuSnap]], [[wantDynamics]]
249
+ * - Ensure the parent's implementation is called: [[setupAndPromptForNextAction]], [[onPostInstall]]
250
+ *
251
+ * This class expects subclasses to call [[setupAndPromptForNextAction]] as moving between the subclass's internal state.
252
+ * @note To trigger an element to be inserted on [[onDataButtonDown]], ensure [[isComplete]] returns `true`
253
+ * @caution Subclasses typically do not override the following methods. Instead, overwrite the methods they call as described here:
254
+ * - [[onMouseMotion]]: See [[updateElementData]].
255
+ * - [[onDataButtonDown]]:
256
+ * - - See [[updateElementData]] for accepting data points.
257
+ * - - See [[isComplete]] & [[doCreateElement` for creating the finalized element.
258
+ * - - (With caution) See [[acceptPoint]] for preventing the mouse click event from propagating to the base tools.
259
+ * - [[onResetButtonUp]]: See [[cancelPoint]].
245
260
  */
246
261
  export class CreateElementWithDynamicsTool extends CreateElementTool {
247
262
  get wantAccuSnap() { return true; }
@@ -252,6 +267,13 @@ export class CreateElementWithDynamicsTool extends CreateElementTool {
252
267
  this._graphicsProvider.cleanupGraphic();
253
268
  this._graphicsProvider = undefined;
254
269
  }
270
+ /**
271
+ * This method is intended to update the dynamic graphics displayed by the tool.
272
+ *
273
+ * It expects [[updateDynamicData]] to return `true`. If it returns `false`, no graphics are created.
274
+ *
275
+ * It expects [[getPlacementProps]] and [[getGeometryProps]] to be defined as it uses these functions to create the dynamic graphic.
276
+ */
255
277
  async createGraphics(ev) {
256
278
  if (!await this.updateDynamicData(ev))
257
279
  return;
@@ -272,11 +294,33 @@ export class CreateElementWithDynamicsTool extends CreateElementTool {
272
294
  if (undefined !== this._graphicsProvider)
273
295
  this._graphicsProvider.addGraphic(context);
274
296
  }
297
+ /** Invoked when the cursor is moving
298
+ * Propagates event to [[updateElementData]].
299
+ * @caution Subclasses typically don't override this.
300
+ */
275
301
  async onMouseMotion(ev) {
276
302
  return this.createGraphics(ev);
277
303
  }
278
- async doCreateElement(_props, _data) { }
304
+ /**
305
+ * Creates a new element in the iModel by interfacing with the core/editor backend.
306
+ *
307
+ * This method is called by [[onDataButtonDown]] only if `isComplete` is true.
308
+ *
309
+ * @param _props Argument passed in is based on the return value from the [[getElementProps]] method.
310
+ */
311
+ async doCreateElement(_props) { }
312
+ /** This method is intended to update information related to the element. This method is called in 2 scenarios:
313
+ * 1. [[onMouseMotion]] as a dynamics
314
+ * 2. [[onDataButtonDown]] when accepting the next point of the tool
315
+ * @param ev - The mouse event triggering this call.
316
+ * @param isDynamics it is `true` in scenario [1] and `false` in scenario [2].
317
+ */
279
318
  async updateElementData(_ev, _isDynamics) { }
319
+ /**
320
+ * This function does not handle updating data itself, instead, it directly calls [[updateElementData]] to handle that.
321
+ * @returns `true` if dynamics are active, `false` otherwise.
322
+ * @caution Subclasses typically don't override this.
323
+ */
280
324
  async updateDynamicData(ev) {
281
325
  if (!IModelApp.viewManager.inDynamicsMode)
282
326
  return false; // Don't need to create graphic if dynamics aren't yet active...
@@ -293,31 +337,48 @@ export class CreateElementWithDynamicsTool extends CreateElementTool {
293
337
  const elemProps = this.getElementProps(placement);
294
338
  if (undefined === elemProps)
295
339
  return;
296
- let data;
297
340
  if ("flatbuffer" === geometry.format) {
298
- data = { entryArray: geometry.data };
299
341
  delete elemProps.geom; // Leave unchanged until replaced by flatbuffer geometry...
342
+ elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };
300
343
  }
301
344
  else {
302
345
  elemProps.geom = geometry.data;
303
346
  }
304
- return this.doCreateElement(elemProps, data);
347
+ return this.doCreateElement(elemProps);
305
348
  }
349
+ /** Intended to be used to setupAccuSnap. Is called by [[setupAndPromptForNextAction]].
350
+ * @note Has not checked for [[wantAccuSnap]] at this point. Directly, *after* this method is called in [[setupAndPromptForNextAction]], AccuSnap will be enabled/disabled based on [[wantAccuSnap]].
351
+ */
306
352
  setupAccuDraw() { }
307
353
  setupAndPromptForNextAction() {
308
354
  this.setupAccuDraw();
309
355
  super.setupAndPromptForNextAction();
310
356
  }
357
+ /** Called by [[onDataButtonDown]].
358
+ * @returns return `false` if the event has been handled.
359
+ * @caution Subclasses typically don't override this.
360
+ */
311
361
  async acceptPoint(ev) {
312
362
  await this.updateElementData(ev, false);
313
363
  return true;
314
364
  }
365
+ /** Invoked when the data button is pressed.
366
+ * Propagates event to [[updateElementData]] by way of [[acceptPoint]].
367
+ * @caution Subclasses typically don't override this.
368
+ */
315
369
  async onDataButtonDown(ev) {
316
370
  if (!await this.acceptPoint(ev))
317
371
  return EventHandled.Yes;
318
372
  return super.onDataButtonDown(ev);
319
373
  }
374
+ /** Called by [[onResetButtonUp]].
375
+ * @returns return `false` if the event has been handled.
376
+ */
320
377
  async cancelPoint(_ev) { return true; }
378
+ /** Invoked when the reset button is released.
379
+ * Propagates event to [[cancelPoint]].
380
+ * @caution Subclasses typically don't override this.
381
+ */
321
382
  async onResetButtonUp(ev) {
322
383
  if (!await this.cancelPoint(ev))
323
384
  return EventHandled.Yes;
@@ -1 +1 @@
1
- {"version":3,"file":"CreateElementTool.js","sourceRoot":"","sources":["../../src/CreateElementTool.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\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, 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 * @usage Subclasses should override the following methods in addition to the\n * abstract methods. See the method descriptions for more details:\n * - Override: [[isComplete]], [[updateElementData]], [[doCreateElement]], [[setupAccuDraw]], [[cancelPoint]]\n * - As necessary: [[wantAccuSnap]], [[wantDynamics]]\n * - Ensure the parent's implementation is called: [[setupAndPromptForNextAction]], [[onPostInstall]]\n *\n * This class expects subclasses to call [[setupAndPromptForNextAction]] as moving between the subclass's internal state.\n * @note To trigger an element to be inserted on [[onDataButtonDown]], ensure [[isComplete]] returns `true`\n * @caution Subclasses typically do not override the following methods. Instead, overwrite the methods they call as described here:\n * - [[onMouseMotion]]: See [[updateElementData]].\n * - [[onDataButtonDown]]:\n * - - See [[updateElementData]] for accepting data points.\n * - - See [[isComplete]] & [[doCreateElement` for creating the finalized element.\n * - - (With caution) See [[acceptPoint]] for preventing the mouse click event from propagating to the base tools.\n * - [[onResetButtonUp]]: See [[cancelPoint]].\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 /**\n * This method is intended to update the dynamic graphics displayed by the tool.\n *\n * It expects [[updateDynamicData]] to return `true`. If it returns `false`, no graphics are created.\n *\n * It expects [[getPlacementProps]] and [[getGeometryProps]] to be defined as it uses these functions to create the dynamic graphic.\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 /** Invoked when the cursor is moving\n * Propagates event to [[updateElementData]].\n * @caution Subclasses typically don't override this.\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 /**\n * Creates a new element in the iModel by interfacing with the core/editor backend.\n *\n * This method is called by [[onDataButtonDown]] only if `isComplete` is true.\n *\n * @param _props Argument passed in is based on the return value from the [[getElementProps]] method.\n */\n protected async doCreateElement(_props: GeometricElementProps): Promise<void> {}\n\n /** This method is intended to update information related to the element. This method is called in 2 scenarios:\n * 1. [[onMouseMotion]] as a dynamics\n * 2. [[onDataButtonDown]] when accepting the next point of the tool\n * @param ev - The mouse event triggering this call.\n * @param isDynamics it is `true` in scenario [1] and `false` in scenario [2].\n */\n protected async updateElementData(_ev: BeButtonEvent, _isDynamics: boolean): Promise<void> {}\n\n /**\n * This function does not handle updating data itself, instead, it directly calls [[updateElementData]] to handle that.\n * @returns `true` if dynamics are active, `false` otherwise.\n * @caution Subclasses typically don't override this.\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 if (\"flatbuffer\" === geometry.format) {\n delete elemProps.geom; // Leave unchanged until replaced by flatbuffer geometry...\n elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };\n } else {\n elemProps.geom = geometry.data;\n }\n\n return this.doCreateElement(elemProps);\n }\n\n /** Intended to be used to setupAccuSnap. Is called by [[setupAndPromptForNextAction]].\n * @note Has not checked for [[wantAccuSnap]] at this point. Directly, *after* this method is called in [[setupAndPromptForNextAction]], AccuSnap will be enabled/disabled based on [[wantAccuSnap]].\n */\n protected setupAccuDraw(): void { }\n\n protected override setupAndPromptForNextAction(): void {\n this.setupAccuDraw();\n super.setupAndPromptForNextAction();\n }\n\n /** Called by [[onDataButtonDown]].\n * @returns return `false` if the event has been handled.\n * @caution Subclasses typically don't override this.\n */\n protected async acceptPoint(ev: BeButtonEvent): Promise<boolean> {\n await this.updateElementData(ev, false);\n return true;\n }\n\n /** Invoked when the data button is pressed.\n * Propagates event to [[updateElementData]] by way of [[acceptPoint]].\n * @caution Subclasses typically don't override this.\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 /** Called by [[onResetButtonUp]].\n * @returns return `false` if the event has been handled.\n */\n protected async cancelPoint(_ev: BeButtonEvent): Promise<boolean> { return true; }\n\n /** Invoked when the reset button is released.\n * Propagates event to [[cancelPoint]].\n * @caution Subclasses typically don't override this.\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"]}
@@ -32,8 +32,13 @@ export declare class EditTools {
32
32
  * IModelApp.startup();
33
33
  * await EditorTools.initialize();
34
34
  * ```
35
+ * @note This registers tools for element undo and redo.
35
36
  */
36
37
  static initialize(): Promise<void>;
38
+ /** Can be called after initialize to register tools for changing project extents and geolocation.
39
+ * @note Requires backend to register BasicManipulationCommand with EditCommandAdmin.
40
+ */
41
+ static registerProjectLocationTools(): void;
37
42
  private static shutdown;
38
43
  }
39
44
  //# sourceMappingURL=EditTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAgBH,YAAY;AACZ,yBAAiB,SAAS,CAAC;IACzB,UAAiB,SAAS;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB;IACD;;;;OAIG;IACH,KAAY,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACvF;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,gBAAuB,SAAS,YAAY;IAC5C,gBAAuB,KAAK,mBAAmB;IAC/C,OAAc,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAcjG,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAItC;;;;;;OAMG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B/C,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
1
+ {"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAUH,YAAY;AACZ,yBAAiB,SAAS,CAAC;IACzB,UAAiB,SAAS;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB;IACD;;;;OAIG;IACH,KAAY,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACvF;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,gBAAuB,SAAS,YAAY;IAC5C,gBAAuB,KAAK,mBAAmB;IAC/C,OAAc,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAcjG,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAItC;;;;;;;OAOG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB/C;;OAEG;WACW,4BAA4B,IAAI,IAAI;IAQlD,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
@@ -9,14 +9,8 @@ import { BeDuration } from "@itwin/core-bentley";
9
9
  import { IModelApp, IpcApp } from "@itwin/core-frontend";
10
10
  import { editorIpcStrings } from "@itwin/editor-common";
11
11
  import * as UndoRedoTools from "./UndoRedoTool";
12
- import * as DeleteElementsTool from "./DeleteElementsTool";
13
- import * as ModifyCurveTools from "./ModifyCurveTools";
14
12
  import * as ProjectLocation from "./ProjectLocation/ProjectExtentsDecoration";
15
13
  import * as ProjectGeoLocation from "./ProjectLocation/ProjectGeolocation";
16
- import * as SketchTools from "./SketchTools";
17
- import * as SolidModelingTools from "./SolidModelingTools";
18
- import * as SolidPrimitiveTools from "./SolidPrimitiveTools";
19
- import * as TransformTools from "./TransformElementsTool";
20
14
  /**
21
15
  * Supports PrimitiveTool and InputCollector sub-classes.
22
16
  * @beta
@@ -46,6 +40,7 @@ class EditTools {
46
40
  * IModelApp.startup();
47
41
  * await EditorTools.initialize();
48
42
  * ```
43
+ * @note This registers tools for element undo and redo.
49
44
  */
50
45
  static async initialize() {
51
46
  if (this._initialized)
@@ -56,16 +51,17 @@ class EditTools {
56
51
  const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);
57
52
  const tools = IModelApp.tools;
58
53
  tools.registerModule(UndoRedoTools, this.namespace);
59
- // TODO: TEMPORARY - Register tools for testing. To be moved into apps.
54
+ return namespacePromise;
55
+ }
56
+ /** Can be called after initialize to register tools for changing project extents and geolocation.
57
+ * @note Requires backend to register BasicManipulationCommand with EditCommandAdmin.
58
+ */
59
+ static registerProjectLocationTools() {
60
+ if (!this._initialized)
61
+ return;
62
+ const tools = IModelApp.tools;
60
63
  tools.registerModule(ProjectLocation, this.namespace);
61
64
  tools.registerModule(ProjectGeoLocation, this.namespace);
62
- tools.registerModule(SketchTools, this.namespace);
63
- tools.registerModule(SolidModelingTools, this.namespace);
64
- tools.registerModule(SolidPrimitiveTools, this.namespace);
65
- tools.registerModule(TransformTools, this.namespace);
66
- tools.registerModule(DeleteElementsTool, this.namespace);
67
- tools.registerModule(ModifyCurveTools, this.namespace);
68
- return namespacePromise;
69
65
  }
70
66
  static shutdown() {
71
67
  this._initialized = false;
@@ -1 +1 @@
1
- {"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.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 { BeDuration } from \"@itwin/core-bentley\";\r\nimport { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { editorIpcStrings } from \"@itwin/editor-common\";\r\n\r\nimport * as UndoRedoTools from \"./UndoRedoTool\";\r\nimport * as DeleteElementsTool from \"./DeleteElementsTool\";\r\nimport * as ModifyCurveTools from \"./ModifyCurveTools\";\r\nimport * as ProjectLocation from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport * as ProjectGeoLocation from \"./ProjectLocation/ProjectGeolocation\";\r\nimport * as SketchTools from \"./SketchTools\";\r\nimport * as SolidModelingTools from \"./SolidModelingTools\";\r\nimport * as SolidPrimitiveTools from \"./SolidPrimitiveTools\";\r\nimport * as TransformTools from \"./TransformElementsTool\";\r\n\r\n/** @beta */\r\nexport namespace EditTools {\r\n export interface StartArgs {\r\n commandId: string;\r\n iModelKey: string;\r\n }\r\n /** handler for retries when an EditTool attempts to start but a backend command is busy and can't finish its work.\r\n * @param attempt the number of times this handler was previously called for this EditTool\r\n * @param msg the message about what's happening from the currently busy EditCommand.\r\n * @returns the delay (in milliseconds) before attempting again. If `undefined` use default (usually 1 second)\r\n */\r\n export type BusyRetry = (attempt: number, msg: string) => Promise<number | undefined>;\r\n}\r\n\r\n/**\r\n * Supports PrimitiveTool and InputCollector sub-classes.\r\n * @beta\r\n */\r\nexport class EditTools {\r\n public static readonly namespace = \"Editor\";\r\n public static readonly tools = \"Editor:tools.\";\r\n public static busyRetry?: EditTools.BusyRetry;\r\n private static _initialized = false;\r\n\r\n public static async startCommand<T>(startArg: EditTools.StartArgs, ...cmdArgs: any[]): Promise<T> {\r\n let attempt = 0;\r\n while (true) {\r\n try {\r\n return await (IpcApp.callIpcChannel(editorIpcStrings.channel, \"startCommand\", startArg.commandId, startArg.iModelKey, ...cmdArgs) as Promise<T>);\r\n } catch (e: any) {\r\n if (e.name !== editorIpcStrings.commandBusy)\r\n throw e; // unknown backend error\r\n const delay = await this.busyRetry?.(attempt++, e.message) ?? 1000;\r\n await BeDuration.fromMilliseconds(delay).wait();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static translate(prompt: string) {\r\n return IModelApp.localization.getLocalizedString(this.tools + prompt);\r\n }\r\n\r\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await EditorTools.initialize();\r\n * ```\r\n */\r\n public static async initialize(): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n this._initialized = true;\r\n\r\n // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\r\n\r\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\r\n\r\n const tools = IModelApp.tools;\r\n tools.registerModule(UndoRedoTools, this.namespace);\r\n\r\n // TODO: TEMPORARY - Register tools for testing. To be moved into apps.\r\n tools.registerModule(ProjectLocation, this.namespace);\r\n tools.registerModule(ProjectGeoLocation, this.namespace);\r\n tools.registerModule(SketchTools, this.namespace);\r\n tools.registerModule(SolidModelingTools, this.namespace);\r\n tools.registerModule(SolidPrimitiveTools, this.namespace);\r\n tools.registerModule(TransformTools, this.namespace);\r\n tools.registerModule(DeleteElementsTool, this.namespace);\r\n tools.registerModule(ModifyCurveTools, this.namespace);\r\n\r\n return namespacePromise;\r\n }\r\n\r\n private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,eAAe,MAAM,4CAA4C,CAAC;AAC9E,OAAO,KAAK,kBAAkB,MAAM,sCAAsC,CAAC;AAgB3E;;;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,MAAM,CAAC,cAAc,CAAC,gBAAgB,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,gBAAgB,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,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;aACjD;SACF;IACH,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,SAAS,CAAC,MAAc;QACpC,OAAO,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC5B,IAAI,IAAI,CAAC,YAAY;YACnB,OAAO;QAET,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,oCAAoC;QACpC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,4BAA4B;QACxC,IAAI,CAAC,IAAI,CAAC,YAAY;YACpB,OAAO;QACT,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,KAAK,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,QAAQ;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;;AA9DsB,mBAAS,GAAG,QAAQ,CAAC;AACrB,eAAK,GAAG,eAAe,CAAC;AAEhC,sBAAY,GAAG,KAAK,CAAC;SAJzB,SAAS","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 ProjectLocation from \"./ProjectLocation/ProjectExtentsDecoration\";\nimport * as ProjectGeoLocation from \"./ProjectLocation/ProjectGeolocation\";\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 * @note This registers tools for element undo and redo.\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 return namespacePromise;\n }\n\n /** Can be called after initialize to register tools for changing project extents and geolocation.\n * @note Requires backend to register BasicManipulationCommand with EditCommandAdmin.\n */\n public static registerProjectLocationTools(): void {\n if (!this._initialized)\n return;\n const tools = IModelApp.tools;\n tools.registerModule(ProjectLocation, this.namespace);\n tools.registerModule(ProjectGeoLocation, this.namespace);\n }\n\n private static shutdown() {\n this._initialized = false;\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module Editing
3
3
  */
4
4
  import { PickAsyncMethods } from "@itwin/core-bentley";
5
- import { BasicManipulationCommandIpc, EditCommandIpc, SolidModelingCommandIpc } from "@itwin/editor-common";
5
+ import { BasicManipulationCommandIpc, EditCommandIpc } from "@itwin/editor-common";
6
6
  /**
7
7
  * Create a type safe Proxy object to make IPC calls from [[EditTools]] to methods of an `EditCommandIpc` interface of the current `EditCommand`.
8
8
  * @beta
@@ -12,8 +12,4 @@ export declare function makeEditToolIpc<K extends EditCommandIpc>(): PickAsyncMe
12
12
  * @internal
13
13
  */
14
14
  export declare const basicManipulationIpc: PickAsyncMethods<BasicManipulationCommandIpc>;
15
- /** Proxy for calling methods in `SolidModelingCommandIpc`
16
- * @internal
17
- */
18
- export declare const solidModelingIpc: PickAsyncMethods<SolidModelingCommandIpc>;
19
15
  //# sourceMappingURL=EditToolIpc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditToolIpc.d.ts","sourceRoot":"","sources":["../../src/EditToolIpc.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAoB,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE9H;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAE/E;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,+CAAiD,CAAC;AACnF;;EAEE;AACF,eAAO,MAAM,gBAAgB,2CAA6C,CAAC"}
1
+ {"version":3,"file":"EditToolIpc.d.ts","sourceRoot":"","sources":["../../src/EditToolIpc.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAC;AAErG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAE/E;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,+CAAiD,CAAC"}
@@ -18,8 +18,4 @@ export function makeEditToolIpc() {
18
18
  * @internal
19
19
  */
20
20
  export const basicManipulationIpc = makeEditToolIpc();
21
- /** Proxy for calling methods in `SolidModelingCommandIpc`
22
- * @internal
23
- */
24
- export const solidModelingIpc = makeEditToolIpc();
25
21
  //# sourceMappingURL=EditToolIpc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditToolIpc.js","sourceRoot":"","sources":["../../src/EditToolIpc.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAA+C,gBAAgB,EAA2B,MAAM,sBAAsB,CAAC;AAE9H;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,oBAAoB,CAAI,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,EAA+B,CAAC;AACnF;;EAEE;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,EAA2B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { PickAsyncMethods } from \"@itwin/core-bentley\";\r\nimport { IpcApp } from \"@itwin/core-frontend\";\r\nimport { BasicManipulationCommandIpc, EditCommandIpc, editorIpcStrings, SolidModelingCommandIpc } from \"@itwin/editor-common\";\r\n\r\n/**\r\n * Create a type safe Proxy object to make IPC calls from [[EditTools]] to methods of an `EditCommandIpc` interface of the current `EditCommand`.\r\n * @beta\r\n */\r\nexport function makeEditToolIpc<K extends EditCommandIpc>(): PickAsyncMethods<K> {\r\n return IpcApp.makeIpcFunctionProxy<K>(editorIpcStrings.channel, \"callMethod\");\r\n}\r\n\r\n/** Proxy for calling methods in `BasicManipulationCommandIpc`\r\n * @internal\r\n */\r\nexport const basicManipulationIpc = makeEditToolIpc<BasicManipulationCommandIpc>();\r\n/** Proxy for calling methods in `SolidModelingCommandIpc`\r\n* @internal\r\n*/\r\nexport const solidModelingIpc = makeEditToolIpc<SolidModelingCommandIpc>();\r\n"]}
1
+ {"version":3,"file":"EditToolIpc.js","sourceRoot":"","sources":["../../src/EditToolIpc.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAA+C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErG;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,oBAAoB,CAAI,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,EAA+B,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 } 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\n"]}