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

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 (69) hide show
  1. package/lib/cjs/DeleteElementsTool.d.ts +1 -1
  2. package/lib/cjs/DeleteElementsTool.d.ts.map +1 -1
  3. package/lib/cjs/DeleteElementsTool.js +5 -4
  4. package/lib/cjs/DeleteElementsTool.js.map +1 -1
  5. package/lib/cjs/EditTool.d.ts +6 -1
  6. package/lib/cjs/EditTool.d.ts.map +1 -1
  7. package/lib/cjs/EditTool.js +11 -2
  8. package/lib/cjs/EditTool.js.map +1 -1
  9. package/lib/cjs/ElementGeometryTool.d.ts +1 -1
  10. package/lib/cjs/ElementGeometryTool.d.ts.map +1 -1
  11. package/lib/cjs/ElementGeometryTool.js +6 -8
  12. package/lib/cjs/ElementGeometryTool.js.map +1 -1
  13. package/lib/cjs/ModifyCurveTools.d.ts +1 -1
  14. package/lib/cjs/ModifyCurveTools.d.ts.map +1 -1
  15. package/lib/cjs/ModifyCurveTools.js +4 -6
  16. package/lib/cjs/ModifyCurveTools.js.map +1 -1
  17. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.d.ts +1 -1
  18. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.d.ts.map +1 -1
  19. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js +5 -4
  20. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  21. package/lib/cjs/SketchTools.d.ts +1 -1
  22. package/lib/cjs/SketchTools.d.ts.map +1 -1
  23. package/lib/cjs/SketchTools.js +4 -6
  24. package/lib/cjs/SketchTools.js.map +1 -1
  25. package/lib/cjs/SolidModelingTools.js +25 -25
  26. package/lib/cjs/SolidModelingTools.js.map +1 -1
  27. package/lib/cjs/SolidPrimitiveTools.d.ts +1 -1
  28. package/lib/cjs/SolidPrimitiveTools.d.ts.map +1 -1
  29. package/lib/cjs/SolidPrimitiveTools.js +2 -4
  30. package/lib/cjs/SolidPrimitiveTools.js.map +1 -1
  31. package/lib/cjs/TransformElementsTool.d.ts +1 -1
  32. package/lib/cjs/TransformElementsTool.d.ts.map +1 -1
  33. package/lib/cjs/TransformElementsTool.js +7 -6
  34. package/lib/cjs/TransformElementsTool.js.map +1 -1
  35. package/lib/esm/DeleteElementsTool.d.ts +1 -1
  36. package/lib/esm/DeleteElementsTool.d.ts.map +1 -1
  37. package/lib/esm/DeleteElementsTool.js +5 -4
  38. package/lib/esm/DeleteElementsTool.js.map +1 -1
  39. package/lib/esm/EditTool.d.ts +6 -1
  40. package/lib/esm/EditTool.d.ts.map +1 -1
  41. package/lib/esm/EditTool.js +11 -2
  42. package/lib/esm/EditTool.js.map +1 -1
  43. package/lib/esm/ElementGeometryTool.d.ts +1 -1
  44. package/lib/esm/ElementGeometryTool.d.ts.map +1 -1
  45. package/lib/esm/ElementGeometryTool.js +6 -8
  46. package/lib/esm/ElementGeometryTool.js.map +1 -1
  47. package/lib/esm/ModifyCurveTools.d.ts +1 -1
  48. package/lib/esm/ModifyCurveTools.d.ts.map +1 -1
  49. package/lib/esm/ModifyCurveTools.js +4 -6
  50. package/lib/esm/ModifyCurveTools.js.map +1 -1
  51. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.d.ts +1 -1
  52. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.d.ts.map +1 -1
  53. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js +5 -4
  54. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  55. package/lib/esm/SketchTools.d.ts +1 -1
  56. package/lib/esm/SketchTools.d.ts.map +1 -1
  57. package/lib/esm/SketchTools.js +4 -6
  58. package/lib/esm/SketchTools.js.map +1 -1
  59. package/lib/esm/SolidModelingTools.js +25 -25
  60. package/lib/esm/SolidModelingTools.js.map +1 -1
  61. package/lib/esm/SolidPrimitiveTools.d.ts +1 -1
  62. package/lib/esm/SolidPrimitiveTools.d.ts.map +1 -1
  63. package/lib/esm/SolidPrimitiveTools.js +2 -4
  64. package/lib/esm/SolidPrimitiveTools.js.map +1 -1
  65. package/lib/esm/TransformElementsTool.d.ts +1 -1
  66. package/lib/esm/TransformElementsTool.d.ts.map +1 -1
  67. package/lib/esm/TransformElementsTool.js +7 -6
  68. package/lib/esm/TransformElementsTool.js.map +1 -1
  69. package/package.json +15 -15
@@ -128,6 +128,10 @@ class TransformGraphicsProvider {
128
128
  exports.TransformGraphicsProvider = TransformGraphicsProvider;
129
129
  /** @alpha Base class for applying a transform to element placements. */
130
130
  class TransformElementsTool extends core_frontend_1.ElementSetTool {
131
+ constructor() {
132
+ super(...arguments);
133
+ this.commandConnection = EditTool_1.EditTools.connect();
134
+ }
131
135
  get allowSelectionSet() { return true; }
132
136
  get allowGroups() { return true; }
133
137
  get allowDragSelect() { return true; }
@@ -192,9 +196,6 @@ class TransformElementsTool extends core_frontend_1.ElementSetTool {
192
196
  return this._startedCmd;
193
197
  return EditTool_1.EditTools.startCommand(editor_common_1.editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);
194
198
  }
195
- static callCommand(method, ...args) {
196
- return EditTool_1.EditTools.callCommand(method, ...args);
197
- }
198
199
  async replaceAgenda(newIds) {
199
200
  this.agenda.clear();
200
201
  if (undefined !== newIds)
@@ -215,7 +216,7 @@ class TransformElementsTool extends core_frontend_1.ElementSetTool {
215
216
  async transformAgenda(transform) {
216
217
  try {
217
218
  this._startedCmd = await this.startCommand();
218
- if (core_common_1.IModelStatus.Success === await TransformElementsTool.callCommand("transformPlacement", this.agenda.compressIds(), transform.toJSON()))
219
+ if (core_common_1.IModelStatus.Success === await this.commandConnection.transformPlacement(this.agenda.compressIds(), transform.toJSON()))
219
220
  await this.saveChanges();
220
221
  }
221
222
  catch (err) {
@@ -308,7 +309,7 @@ class CopyElementsTool extends MoveElementsTool {
308
309
  let newId;
309
310
  for (let iCopy = 0; iCopy < numCopies; ++iCopy) {
310
311
  placement.multiplyTransform(transform);
311
- newId = await CopyElementsTool.callCommand("insertGeometricElement", newProps);
312
+ newId = await this.commandConnection.insertGeometricElement(newProps);
312
313
  }
313
314
  if (undefined !== newId)
314
315
  newIds.push(newId); // When numCopies > 1 ids are return for just the final copy...
@@ -486,7 +487,7 @@ class RotateElementsTool extends TransformElementsTool {
486
487
  return super.transformAgenda(transform);
487
488
  try {
488
489
  this._startedCmd = await this.startCommand();
489
- if (core_common_1.IModelStatus.Success === await TransformElementsTool.callCommand("rotatePlacement", this.agenda.compressIds(), transform.matrix.toJSON(), RotateAbout.Center === this.rotateAbout))
490
+ if (core_common_1.IModelStatus.Success === await this.commandConnection.rotatePlacement(this.agenda.compressIds(), transform.matrix.toJSON(), RotateAbout.Center === this.rotateAbout))
490
491
  await this.saveChanges();
491
492
  }
492
493
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"TransformElementsTool.js","sourceRoot":"","sources":["../../src/TransformElementsTool.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\nimport { BentleyError, Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, Geometry, Matrix3d, Point3d, Transform, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { Code, ColorDef, GeometricElementProps, IModelStatus, isPlacement2dProps, LinePixels, PersistentGraphicsRequestProps, Placement, Placement2d, Placement3d } from \"@itwin/core-common\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CoreTools, DynamicsContext, ElementSetTool, GraphicBranch, GraphicType, IModelApp, IModelConnection, IpcApp, ModifyElementSource, NotifyMessageDetails, OutputMessagePriority, readElementGraphics, RenderGraphic, RenderGraphicOwner, ToolAssistanceInstruction } from \"@itwin/core-frontend\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, EnumerationChoice, PropertyDescriptionHelper, PropertyEditorParamTypes, RangeEditorParams } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha */\r\nexport interface TransformGraphicsData {\r\n id: Id64String;\r\n placement: Placement;\r\n graphic: RenderGraphicOwner;\r\n}\r\n\r\n/** @alpha */\r\nexport class TransformGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly data: TransformGraphicsData[];\r\n public readonly pending: Map<Id64String, string>;\r\n public readonly prefix: string;\r\n /** Chord tolerance to use to stroke the element's geometry in meters. */\r\n public chordTolerance = 0.01;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n this.data = new Array<TransformGraphicsData>();\r\n this.pending = new Map<Id64String, string>();\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(id: Id64String): Promise<TransformGraphicsData | undefined> {\r\n const elementProps = (await this.iModel.elements.getProps(id)) as GeometricElementProps[];\r\n if (0 === elementProps.length)\r\n return;\r\n\r\n const placementProps = elementProps[0].placement;\r\n if (undefined === placementProps)\r\n return;\r\n\r\n const placement = isPlacement2dProps(placementProps) ? Placement2d.fromJSON(placementProps) : Placement3d.fromJSON(placementProps);\r\n if (!placement.isValid)\r\n return; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const requestProps: PersistentGraphicsRequestProps = {\r\n id: this.getRequestId(id),\r\n elementId: id,\r\n toleranceLog10: this.getToleranceLog10(),\r\n };\r\n\r\n this.pending.set(id, requestProps.id); // keep track of requests so they can be cancelled...\r\n\r\n const graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, elementProps[0].model, placement.is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return { id, placement, graphic: IModelApp.renderSystem.createGraphicOwner(graphic) };\r\n }\r\n\r\n private disposeOfGraphics(): void {\r\n this.data.forEach((data) => {\r\n data.graphic.disposeGraphic();\r\n });\r\n\r\n this.data.length = 0;\r\n }\r\n\r\n private async cancelPendingRequests(): Promise<void> {\r\n const requests = new Array<string>();\r\n for (const [_key, id] of this.pending)\r\n requests.push(id);\r\n\r\n this.pending.clear();\r\n if (0 === requests.length)\r\n return;\r\n\r\n return IpcApp.callIpcHost(\"cancelElementGraphicsRequests\", this.iModel.key, requests);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied element id.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public async createSingleGraphic(id: Id64String): Promise<boolean> {\r\n try {\r\n const info = await this.createRequest(id);\r\n\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined === info?.graphic)\r\n return false;\r\n\r\n this.data.push(info);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request RenderGraphics for the supplied element ids. Does not wait for results as\r\n * generating graphics for a large number of elements can take time. Instead an array of [[RenderGraphicOwner]]\r\n * is populated as requests are resolved and the current dynamics frame displays what is available.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public createGraphics(elements: Id64Arg): void {\r\n if (0 === Id64.sizeOf(elements))\r\n return;\r\n\r\n try {\r\n for (const id of Id64.iterable(elements)) {\r\n const promise = this.createRequest(id);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then((info) => {\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined !== info?.graphic)\r\n this.data.push(info);\r\n });\r\n }\r\n } catch { }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]] and cancel requests that are still pending.\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 async cleanupGraphics(): Promise<void> {\r\n await this.cancelPendingRequests();\r\n this.disposeOfGraphics();\r\n }\r\n\r\n public addSingleGraphic(graphic: RenderGraphic, transform: Transform, context: DynamicsContext): void {\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addGraphics(transform: Transform, context: DynamicsContext): void {\r\n if (0 === this.data.length)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n for (const data of this.data)\r\n branch.add(data.graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha Base class for applying a transform to element placements. */\r\nexport abstract class TransformElementsTool extends ElementSetTool {\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowGroups(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected get wantMakeCopy(): boolean { return false; }\r\n protected get wantRepeatOperation(): boolean { return this.wantMakeCopy && !this.agenda.isEmpty; }\r\n protected _graphicsProvider?: TransformGraphicsProvider;\r\n protected _startedCmd?: string;\r\n\r\n protected abstract calculateTransform(ev: BeButtonEvent): Transform | undefined;\r\n\r\n protected async createAgendaGraphics(changed: boolean): Promise<void> {\r\n if (changed) {\r\n if (undefined === this._graphicsProvider)\r\n return; // Not yet needed...\r\n } else {\r\n if (undefined !== this._graphicsProvider)\r\n return; // Use existing graphics...\r\n }\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new TransformGraphicsProvider(this.iModel, this.toolId);\r\n else\r\n await this._graphicsProvider.cleanupGraphics();\r\n\r\n if (1 === this.agenda.length) {\r\n await this._graphicsProvider.createSingleGraphic(this.agenda.elements[0]);\r\n return;\r\n }\r\n\r\n this._graphicsProvider.createGraphics(this.agenda.elements);\r\n }\r\n\r\n protected async clearAgendaGraphics(): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n await this._graphicsProvider.cleanupGraphics();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n await this.createAgendaGraphics(true);\r\n }\r\n\r\n protected override async initAgendaDynamics(): Promise<boolean> {\r\n await this.createAgendaGraphics(false);\r\n return super.initAgendaDynamics();\r\n }\r\n\r\n protected transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphics(transform, context);\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n this.transformAgendaDynamics(transform, context);\r\n }\r\n\r\n protected updateAnchorLocation(transform: Transform): void {\r\n // Update anchor point to support creating additional copies (repeat vs. restart)...\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n transform.multiplyPoint3d(this.anchorPoint, this.anchorPoint);\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOrigin(this.anchorPoint);\r\n hints.sendHints();\r\n }\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n public static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<BasicManipulationCommandIpc[T]>;\r\n }\r\n\r\n protected async replaceAgenda(newIds: Id64Arg | undefined): Promise<void> {\r\n this.agenda.clear();\r\n\r\n if (undefined !== newIds)\r\n this.agenda.add(newIds);\r\n\r\n if (this.isSelectionSetModify) {\r\n if (this.agenda.isEmpty)\r\n this.iModel.selectionSet.emptyAll();\r\n else\r\n this.iModel.selectionSet.replace(this.agenda.elements);\r\n\r\n this.agenda.setSource(ModifyElementSource.SelectionSet);\r\n this.setPreferredElementSource(); // Update \"use selection set\" flag...\r\n }\r\n\r\n return this.onAgendaModified();\r\n }\r\n\r\n protected async transformAndCopyAgenda(_transform: Transform): Promise<Id64Arg | undefined> {\r\n return undefined;\r\n }\r\n\r\n protected async transformAgenda(transform: Transform): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await TransformElementsTool.callCommand(\"transformPlacement\", this.agenda.compressIds(), transform.toJSON()))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n\r\n if (this.wantMakeCopy)\r\n await this.replaceAgenda(await this.transformAndCopyAgenda(transform));\r\n else\r\n await this.transformAgenda(transform);\r\n\r\n this.updateAnchorLocation(transform);\r\n }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n if (this.wantRepeatOperation)\r\n return; // Continue with current agenda instead of restarting (ex. create additional copies)\r\n return super.onProcessComplete();\r\n }\r\n\r\n public override async onCleanup() {\r\n await this.clearAgendaGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n\r\n/** @alpha Move elements by applying translation to placement. */\r\nexport class MoveElementsTool extends TransformElementsTool {\r\n public static override toolId = \"MoveElements\";\r\n public static override iconSpec = \"icon-move\";\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === this.anchorPoint)\r\n return undefined;\r\n return Transform.createTranslation(ev.point.minus(this.anchorPoint));\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements)\r\n mainMsg = CoreTools.translate(this.wantAdditionalInput ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MoveElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Create new elements with translation applied to placement.\r\n * This is a brute force implementation strictly for example and testing purposes.\r\n * The new elements are Generic:PhysicalObject or BisCore:DrawingGraphic using the model and category of original.\r\n * Does not preserve assemblies and geometric elements without geometry are not copied.\r\n * Using loadProps to return json format geometry to the frontend for each element in the tool agenda is very inefficient.\r\n * Applications that wish to support copy are expected to sub-class TransformElementsTool and register their\r\n * own EditCommand that can correctly copy their application elements.\r\n * @alpha\r\n */\r\nexport class CopyElementsTool extends MoveElementsTool {\r\n public static override toolId = \"CopyElements\";\r\n public static override iconSpec = \"icon-move\"; // Need better icon...\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n private _numCopiesProperty: DialogProperty<number> | undefined;\r\n public get numCopiesProperty() {\r\n if (!this._numCopiesProperty)\r\n this._numCopiesProperty = new DialogProperty<number>(\r\n PropertyDescriptionHelper.buildNumberEditorDescription(\"numCopies\", EditTools.translate(\"CopyElements.Label.NumCopies\"),\r\n { type: PropertyEditorParamTypes.Range, minimum: 1 } as RangeEditorParams), 1);\r\n return this._numCopiesProperty;\r\n }\r\n\r\n public get numCopies(): number { return this.numCopiesProperty.value; }\r\n public set numCopies(value: number) { this.numCopiesProperty.value = value; }\r\n\r\n protected override get wantMakeCopy(): boolean { return this.numCopies > 0; }\r\n\r\n protected override updateAnchorLocation(transform: Transform): void {\r\n // Account for additional copies for repeat operation anchor point...\r\n for (let iCopy = 0; iCopy < this.numCopies; ++iCopy)\r\n super.updateAnchorLocation(transform);\r\n }\r\n\r\n protected async doTranformedCopy(ids: Id64Array, transform: Transform, numCopies: number): Promise<Id64Arg | undefined> {\r\n if (numCopies < 1 || 0 === ids.length)\r\n return undefined;\r\n\r\n this._startedCmd = await this.startCommand();\r\n const newIds: Id64Array = [];\r\n\r\n for (const id of ids) {\r\n // NOTE: For testing only. Using loadProps to return json format geometry to the frontend for each element in the tool agenda is very inefficient.\r\n const props = await this.iModel.elements.loadProps(id, { wantGeometry: true, wantBRepData: true }) as GeometricElementProps;\r\n if (undefined === props.placement)\r\n continue;\r\n\r\n const placement = isPlacement2dProps(props.placement) ? Placement2d.fromJSON(props.placement) : Placement3d.fromJSON(props.placement);\r\n if (!placement.isValid)\r\n continue; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const classFullName = (placement.is3d ? \"Generic:PhysicalObject\" : \"BisCore:DrawingGraphic\");\r\n const newProps: GeometricElementProps = { classFullName, model: props.model, category: props.category, code: Code.createEmpty(), placement, geom: props.geom };\r\n let newId;\r\n\r\n for (let iCopy = 0; iCopy < numCopies; ++iCopy) {\r\n placement.multiplyTransform(transform);\r\n newId = await CopyElementsTool.callCommand(\"insertGeometricElement\", newProps);\r\n }\r\n\r\n if (undefined !== newId)\r\n newIds.push(newId); // When numCopies > 1 ids are return for just the final copy...\r\n }\r\n\r\n return (0 === newIds.length ? undefined : newIds);\r\n }\r\n\r\n protected override async transformAndCopyAgenda(transform: Transform): Promise<Id64Arg | undefined> {\r\n try {\r\n const newIds = await this.doTranformedCopy(this.agenda.elements, transform, this.numCopies);\r\n if (undefined !== newIds)\r\n await this.saveChanges();\r\n return newIds;\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n // NOTE: Don't call changeToolSettingPropertyValue, value of numCopies should not be saved...\r\n if (updatedValue.propertyName !== this.numCopiesProperty.name || undefined === updatedValue.value.value)\r\n return false;\r\n this.numCopies = updatedValue.value.value as number;\r\n return true;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n // NOTE: Don't call initializeToolSettingPropertyValues, value of numCopies is not saved...\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push(this.numCopiesProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n return toolSettings;\r\n }\r\n\r\n public override async onRestartTool(): Promise<void> {\r\n const tool = new CopyElementsTool();\r\n tool.numCopies = this.numCopies; // Preserve numCopies on restart...\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `numCopies=number` Number of copies of each element to create, default is 1.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"num\")) {\r\n const copies = Number.parseInt(parts[1], 10);\r\n if (copies >= 1)\r\n this.numCopies = copies; // NOTE: Don't call saveToolSettingPropertyValue, always default to single copy...\r\n }\r\n }\r\n\r\n return this.run();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateMethod {\r\n By3Points,\r\n ByAngle,\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateAbout {\r\n Point,\r\n Origin,\r\n Center,\r\n}\r\n\r\n/** @alpha Rotate elements by applying transform to placement. */\r\nexport class RotateElementsTool extends TransformElementsTool {\r\n public static override toolId = \"RotateElements\";\r\n public static override iconSpec = \"icon-rotate\";\r\n\r\n protected xAxisPoint?: Point3d;\r\n protected havePivotPoint = false;\r\n protected haveFinalPoint = false;\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n private static methodMessage(str: string) { return EditTools.translate(`RotateElements.Method.${str}`); }\r\n private static getMethodChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.methodMessage(\"3Points\"), value: RotateMethod.By3Points },\r\n { label: RotateElementsTool.methodMessage(\"Angle\"), value: RotateMethod.ByAngle },\r\n ];\r\n };\r\n\r\n private _methodProperty: DialogProperty<number> | undefined;\r\n public get methodProperty() {\r\n if (!this._methodProperty)\r\n this._methodProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateMethod\", EditTools.translate(\"RotateElements.Label.Method\"), RotateElementsTool.getMethodChoices()), RotateMethod.By3Points as number);\r\n return this._methodProperty;\r\n }\r\n\r\n public get rotateMethod(): RotateMethod { return this.methodProperty.value as RotateMethod; }\r\n public set rotateMethod(method: RotateMethod) { this.methodProperty.value = method; }\r\n\r\n private static aboutMessage(str: string) { return EditTools.translate(`RotateElements.About.${str}`); }\r\n private static getAboutChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.aboutMessage(\"Point\"), value: RotateAbout.Point },\r\n { label: RotateElementsTool.aboutMessage(\"Origin\"), value: RotateAbout.Origin },\r\n { label: RotateElementsTool.aboutMessage(\"Center\"), value: RotateAbout.Center },\r\n ];\r\n };\r\n\r\n private _aboutProperty: DialogProperty<number> | undefined;\r\n public get aboutProperty() {\r\n if (!this._aboutProperty)\r\n this._aboutProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateAbout\", EditTools.translate(\"RotateElements.Label.About\"), RotateElementsTool.getAboutChoices()), RotateAbout.Point as number);\r\n return this._aboutProperty;\r\n }\r\n\r\n public get rotateAbout(): RotateAbout { return this.aboutProperty.value as RotateAbout; }\r\n public set rotateAbout(method: RotateAbout) { this.aboutProperty.value = method; }\r\n\r\n private _angleProperty: DialogProperty<number> | undefined;\r\n public get angleProperty() {\r\n if (!this._angleProperty)\r\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"rotateAngle\", EditTools.translate(\"RotateElements.Label.Angle\")), 0.0);\r\n return this._angleProperty;\r\n }\r\n\r\n public get rotateAngle(): number { return this.angleProperty.value; }\r\n public set rotateAngle(value: number) { this.angleProperty.value = value; }\r\n\r\n protected override get requireAcceptForSelectionSetDynamics(): boolean { return RotateMethod.ByAngle !== this.rotateMethod; }\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(this.rotateAngle, 0, 0).toMatrix3d();\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(ev.point, rotMatrix);\r\n }\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return undefined;\r\n\r\n const vec1 = Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint);\r\n const vec2 = Vector3d.createStartEnd(this.anchorPoint, ev.point);\r\n\r\n if (!vec1.normalizeInPlace() || !vec2.normalizeInPlace())\r\n return undefined;\r\n\r\n const dot = vec1.dotProduct(vec2);\r\n if (dot > (1.0 - Geometry.smallAngleRadians))\r\n return undefined;\r\n\r\n if (dot < (-1.0 + Geometry.smallAngleRadians)) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(Math.PI, 0, 0).toMatrix3d(); // 180 degree rotation...\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, rotMatrix);\r\n }\r\n\r\n const zVec = vec1.unitCrossProduct(vec2);\r\n if (undefined === zVec)\r\n return undefined;\r\n\r\n const yVec = zVec.unitCrossProduct(vec1);\r\n if (undefined === yVec)\r\n return undefined;\r\n\r\n const matrix1 = Matrix3d.createRows(vec1, yVec, zVec);\r\n zVec.unitCrossProduct(vec2, yVec);\r\n const matrix2 = Matrix3d.createColumns(vec2, yVec, zVec);\r\n\r\n const matrix = matrix2.multiplyMatrixMatrix(matrix1);\r\n if (undefined === matrix)\r\n return undefined;\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, matrix);\r\n }\r\n\r\n protected override transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n const rotatePoint = Point3d.create();\r\n\r\n for (const data of this._graphicsProvider.data) {\r\n if (RotateAbout.Origin === this.rotateAbout)\r\n rotatePoint.setFrom(data.placement.origin);\r\n else\r\n rotatePoint.setFrom(data.placement.calculateRange().center);\r\n\r\n const rotateTrans = Transform.createFixedPointAndMatrix(rotatePoint, transform.matrix);\r\n this._graphicsProvider.addSingleGraphic(data.graphic, rotateTrans, context);\r\n }\r\n }\r\n\r\n protected override async transformAgenda(transform: Transform): Promise<void> {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgenda(transform);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await TransformElementsTool.callCommand(\"rotatePlacement\", this.agenda.compressIds(), transform.matrix.toJSON(), RotateAbout.Center === this.rotateAbout))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined !== transform)\r\n return this.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 1, LinePixels.Code2);\r\n builder.addLineString([this.anchorPoint.clone(), ev.point.clone()]);\r\n context.addGraphic(builder.finish());\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantAdditionalInput;\r\n\r\n return !this.haveFinalPoint;\r\n }\r\n\r\n protected override wantProcessAgenda(ev: BeButtonEvent): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantProcessAgenda(ev);\r\n\r\n if (!this.havePivotPoint)\r\n this.havePivotPoint = true; // Uses anchorPoint...\r\n else if (undefined === this.xAxisPoint)\r\n this.xAxisPoint = ev.point.clone();\r\n else if (!this.haveFinalPoint)\r\n this.haveFinalPoint = true; // Uses button event...\r\n\r\n return super.wantProcessAgenda(ev);\r\n }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n super.setupAndPromptForNextAction();\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return;\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setXAxis(Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint));\r\n hints.setOrigin(this.anchorPoint);\r\n hints.setModePolar();\r\n hints.sendHints();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements && this.wantAdditionalInput)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n } else {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements) {\r\n if (!this.havePivotPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n else if (undefined === this.xAxisPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineStart\");\r\n else\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineAmount\");\r\n }\r\n }\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n if (!this.changeToolSettingPropertyValue(updatedValue))\r\n return false;\r\n\r\n if (this.methodProperty.name === updatedValue.propertyName)\r\n await this.onRestartTool(); // calling restart, not reinitialize to not exit tool for selection set...\r\n\r\n return true;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n toolSettings.push(this.methodProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.aboutProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RotateElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!await super.onInstall())\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.methodProperty, this.aboutProperty, this.angleProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `method=0|1` How rotate angle will be specified. 0 for by 3 points, 1 for by specified angle.\r\n * - `about=0|1|2` Location to rotate about. 0 for point, 1 for placement origin, and 2 for center of range.\r\n * - `angle=number` Rotation angle in degrees when not defining angle by points.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n let rotateMethod;\r\n let rotateAbout;\r\n let rotateAngle;\r\n\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"me\")) {\r\n const method = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(method)) {\r\n switch (method) {\r\n case 0:\r\n rotateMethod = RotateMethod.By3Points;\r\n break;\r\n case 1:\r\n rotateMethod = RotateMethod.ByAngle;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"ab\")) {\r\n const about = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(about)) {\r\n switch (about) {\r\n case 0:\r\n rotateAbout = RotateAbout.Point;\r\n break;\r\n case 1:\r\n rotateAbout = RotateAbout.Origin;\r\n break;\r\n case 2:\r\n rotateAbout = RotateAbout.Center;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"an\")) {\r\n const angle = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(angle)) {\r\n rotateAngle = Angle.createDegrees(angle).radians;\r\n }\r\n }\r\n }\r\n\r\n // Update current session values so keyin args are picked up for tool settings/restart...\r\n if (undefined !== rotateMethod)\r\n this.saveToolSettingPropertyValue(this.methodProperty, { value: rotateMethod });\r\n\r\n if (undefined !== rotateAbout)\r\n this.saveToolSettingPropertyValue(this.aboutProperty, { value: rotateAbout });\r\n\r\n if (undefined !== rotateAngle)\r\n this.saveToolSettingPropertyValue(this.angleProperty, { value: rotateAngle });\r\n\r\n return this.run();\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"TransformElementsTool.js","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAyF;AACzF,wDAAmH;AACnH,oDAA8L;AAC9L,wDAAwF;AACxF,wDAA8V;AAC9V,0DAAsL;AACtL,yCAAuC;AASvC,aAAa;AACb,MAAa,yBAAyB;IAQpC,YAAY,MAAwB,EAAE,MAAc;QAHpD,yEAAyE;QAClE,mBAAc,GAAG,IAAI,CAAC;QAG3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,EAAyB,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC/C,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,EAAc;QACxC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAA4B,CAAC;QAC1F,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM;YAC3B,OAAO;QAET,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,IAAI,SAAS,KAAK,cAAc;YAC9B,OAAO;QAET,MAAM,SAAS,GAAG,IAAA,gCAAkB,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACnI,IAAI,CAAC,SAAS,CAAC,OAAO;YACpB,OAAO,CAAC,+CAA+C;QAEzD,MAAM,YAAY,GAAmC;YACnD,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACzB,SAAS,EAAE,EAAE;YACb,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;SACzC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,qDAAqD;QAE5F,MAAM,WAAW,GAAG,MAAM,yBAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChG,IAAI,SAAS,KAAK,WAAW;YAC3B,OAAO;QAET,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAmB,EAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9I,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO;QAET,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;IACxF,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAU,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO;YACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM;YACvB,OAAO;QAET,OAAO,sBAAM,CAAC,WAAW,CAAC,+BAA+B,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACxF,CAAC;IAED;;KAEC;IACM,KAAK,CAAC,mBAAmB,CAAC,EAAc;QAC7C,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAE1C,IAAI,SAAS,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAA;gBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,SAAS,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAA;gBAC7B,OAAO,KAAK,CAAC;YAEf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;SACb;QAAC,MAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,QAAiB;QACrC,IAAI,CAAC,KAAK,mBAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC7B,OAAO;QAET,IAAI;YACF,KAAK,MAAM,EAAE,IAAI,mBAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAEvC,mEAAmE;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACpB,IAAI,SAAS,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAA;wBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAE/B,IAAI,SAAS,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAA;wBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;aACJ;SACF;QAAC,MAAM,GAAG;IACb,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,eAAe;QAC1B,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,gBAAgB,CAAC,OAAsB,EAAE,SAAoB,EAAE,OAAwB;QAC5F,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEpB,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAEM,WAAW,CAAC,SAAoB,EAAE,OAAwB;QAC/D,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,OAAO;QAET,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI;YAC1B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3B,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;CACF;AA9ID,8DA8IC;AAED,wEAAwE;AACxE,MAAsB,qBAAsB,SAAQ,8BAAc;IAAlE;;QAkFY,sBAAiB,GAAG,oBAAS,CAAC,OAAO,EAA+B,CAAC;IA0DjF,CAAC;IA3IC,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,YAAY,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAuB,YAAY,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAc,YAAY,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IACvD,IAAc,mBAAmB,KAAc,OAAO,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAMxF,KAAK,CAAC,oBAAoB,CAAC,OAAgB;QACnD,IAAI,OAAO,EAAE;YACX,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;gBACtC,OAAO,CAAC,oBAAoB;SAC/B;aAAM;YACL,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;gBACtC,OAAO,CAAC,2BAA2B;SACtC;QAED,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;YAEjF,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;QAEjD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5B,MAAM,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAES,KAAK,CAAC,mBAAmB;QACjC,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,OAAO;QACT,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAEkB,KAAK,CAAC,gBAAgB;QACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAEkB,KAAK,CAAC,kBAAkB;QACzC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;IACpC,CAAC;IAES,uBAAuB,CAAC,SAAoB,EAAE,OAAwB;QAC9E,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAEe,cAAc,CAAC,EAAiB,EAAE,OAAwB;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO;QACT,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAES,oBAAoB,CAAC,SAAoB;QACjD,oFAAoF;QACpF,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO;QAET,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9D,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAES,KAAK,CAAC,YAAY;QAC1B,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,OAAO,oBAAS,CAAC,YAAY,CAAS,mCAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnG,CAAC;IAIS,KAAK,CAAC,aAAa,CAAC,MAA2B;QACvD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,SAAS,KAAK,MAAM;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;gBACrB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;;gBAEpC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEzD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mCAAmB,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,qCAAqC;SACxE;QAED,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAC,UAAqB;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,SAAoB;QAClD,IAAI;YACF,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,0BAAY,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;gBACzH,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;IAEe,KAAK,CAAC,aAAa,CAAC,EAAiB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO;QAET,IAAI,IAAI,CAAC,YAAY;YACnB,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;;YAEvE,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAExC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAEe,KAAK,CAAC,iBAAiB;QACrC,IAAI,IAAI,CAAC,mBAAmB;YAC1B,OAAO,CAAC,oFAAoF;QAC9F,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACnC,CAAC;IAEe,KAAK,CAAC,SAAS;QAC7B,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;CACF;AA5ID,sDA4IC;AAED,iEAAiE;AACjE,MAAa,gBAAiB,SAAQ,qBAAqB;IAI/C,kBAAkB,CAAC,EAAiB;QAC5C,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO,SAAS,CAAC;QACnB,OAAO,yBAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,CAAC;IAEkB,qBAAqB,CAAC,cAAuB,EAAE,gBAA8C;QAC9G,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,sBAAsB;YACxD,OAAO,GAAG,yBAAS,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;QAC5H,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AArBH,4CAsBC;AArBwB,uBAAM,GAAG,cAAc,CAAC;AACxB,yBAAQ,GAAG,WAAW,CAAC;AAsBhD;;;;;;;;GAQG;AACH,MAAa,gBAAiB,SAAQ,gBAAgB;IAI7C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAGlD,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAC1C,0CAAyB,CAAC,4BAA4B,CAAC,WAAW,EAAE,oBAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC,EACrH,EAAE,IAAI,EAAE,yCAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAW,SAAS,CAAC,KAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE7E,IAAuB,YAAY,KAAc,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;IAE1D,oBAAoB,CAAC,SAAoB;QAC1D,qEAAqE;QACrE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK;YACjD,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,GAAc,EAAE,SAAoB,EAAE,SAAiB;QACtF,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM;YACnC,OAAO,SAAS,CAAC;QAEnB,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;YACpB,kJAAkJ;YAClJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAA0B,CAAC;YAC5H,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS;gBAC/B,SAAS;YAEX,MAAM,SAAS,GAAG,IAAA,gCAAkB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtI,IAAI,CAAC,SAAS,CAAC,OAAO;gBACpB,SAAS,CAAC,+CAA+C;YAE3D,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAA0B,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,kBAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/J,IAAI,KAAK,CAAC;YAEV,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE;gBAC9C,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACvC,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;aACvE;YAED,IAAI,SAAS,KAAK,KAAK;gBACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,+DAA+D;SACtF;QAED,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAEkB,KAAK,CAAC,sBAAsB,CAAC,SAAoB;QAClE,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5F,IAAI,SAAS,KAAK,MAAM;gBACtB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC;SACf;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;YAChK,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,6FAA6F;QAC7F,IAAI,YAAY,CAAC,YAAY,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,SAAS,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK;YACrG,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAe,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,4BAA4B;QAC1C,2FAA2F;QAC3F,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,YAAY,CAAC;IACtB,CAAC;IAEe,KAAK,CAAC,aAAa;QACjC,MAAM,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,mCAAmC;QACpE,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACa,KAAK,CAAC,WAAW,CAAC,GAAG,SAAmB;QACtD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;YAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;gBACpB,SAAS;YAEX,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,MAAM,IAAI,CAAC;oBACb,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,kFAAkF;aAC9G;SACF;QAED,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;;AA/GH,4CAgHC;AA/GwB,uBAAM,GAAG,cAAc,CAAC;AACxB,yBAAQ,GAAG,WAAW,CAAC,CAAC,sBAAsB;AAgHvE,aAAa;AACb,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,yDAAS,CAAA;IACT,qDAAO,CAAA;AACT,CAAC,EAHW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAGvB;AAED,aAAa;AACb,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,+CAAK,CAAA;IACL,iDAAM,CAAA;IACN,iDAAM,CAAA;AACR,CAAC,EAJW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAItB;AAED,iEAAiE;AACjE,MAAa,kBAAmB,SAAQ,qBAAqB;IAA7D;;QAKY,mBAAc,GAAG,KAAK,CAAC;QACvB,mBAAc,GAAG,KAAK,CAAC;IA4UnC,CAAC;IA1UQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,CAAC,aAAa,CAAC,GAAW,IAAI,OAAO,oBAAS,CAAC,SAAS,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IASzG,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAc,CAAS,0CAAyB,CAAC,kCAAkC,CAC5G,cAAc,EAAE,oBAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,EAAE,YAAY,CAAC,SAAmB,CAAC,CAAC;QAClJ,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY,KAAmB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAqB,CAAC,CAAC,CAAC;IAC7F,IAAW,YAAY,CAAC,MAAoB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IAE7E,MAAM,CAAC,YAAY,CAAC,GAAW,IAAI,OAAO,oBAAS,CAAC,SAAS,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAUvG,IAAW,aAAa;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAS,0CAAyB,CAAC,kCAAkC,CAC3G,aAAa,EAAE,oBAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,EAAE,kBAAkB,CAAC,eAAe,EAAE,CAAC,EAAE,WAAW,CAAC,KAAe,CAAC,CAAC;QAC1I,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,KAAkB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAoB,CAAC,CAAC,CAAC;IACzF,IAAW,WAAW,CAAC,MAAmB,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IAGlF,IAAW,aAAa;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAS,IAAI,gCAAgB,CAAC,aAAa,EAAE,oBAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChJ,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,IAAW,WAAW,CAAC,KAAa,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE3E,IAAuB,oCAAoC,KAAc,OAAO,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnH,kBAAkB,CAAC,EAAiB;QAC5C,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO,SAAS,CAAC;QAEnB,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,EAAE;YAC9C,MAAM,SAAS,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClF,IAAI,SAAS,KAAK,SAAS;gBACzB,OAAO,SAAS,CAAC;YAEnB,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,SAAS,KAAK,SAAS;gBACzB,OAAO,SAAS,CAAC;YAEnB,MAAM,SAAS,GAAG,kCAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YACxF,IAAI,SAAS,KAAK,SAAS;gBACzB,OAAO,SAAS,CAAC;YAEnB,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAErD,OAAO,yBAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SACjE;QAED,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YACjE,OAAO,SAAS,CAAC;QAEnB,MAAM,IAAI,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACtD,OAAO,SAAS,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,wBAAQ,CAAC,iBAAiB,CAAC;YAC1C,OAAO,SAAS,CAAC;QAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,wBAAQ,CAAC,iBAAiB,CAAC,EAAE;YAC7C,MAAM,SAAS,GAAG,mCAAmB,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClF,IAAI,SAAS,KAAK,SAAS;gBACzB,OAAO,SAAS,CAAC;YAEnB,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,SAAS,KAAK,SAAS;gBACzB,OAAO,SAAS,CAAC;YAEnB,MAAM,SAAS,GAAG,kCAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,yBAAyB;YACzG,IAAI,SAAS,KAAK,SAAS;gBACzB,OAAO,SAAS,CAAC;YAEnB,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAErD,OAAO,yBAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SACzE;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,SAAS,CAAC;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,SAAS,CAAC;QAEnB,MAAM,OAAO,GAAG,wBAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,wBAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,SAAS,KAAK,MAAM;YACtB,OAAO,SAAS,CAAC;QAEnB,OAAO,yBAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAEkB,uBAAuB,CAAC,SAAoB,EAAE,OAAwB;QACvF,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW;YACxC,OAAO,KAAK,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE3D,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,OAAO;QAET,MAAM,WAAW,GAAG,uBAAO,CAAC,MAAM,EAAE,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;YAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW;gBACzC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;gBAE3C,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;YAE9D,MAAM,WAAW,GAAG,yBAAS,CAAC,yBAAyB,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YACvF,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;SAC7E;IACH,CAAC;IAEkB,KAAK,CAAC,eAAe,CAAC,SAAoB;QAC3D,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW;YACxC,OAAO,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI;YACF,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,0BAAY,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC;gBACtK,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;IAEe,cAAc,CAAC,EAAiB,EAAE,OAAwB;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO;QAET,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,2BAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,EAAE,EAAE,sBAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,wBAAU,CAAC,KAAK,CAAC,CAAC;QAC3G,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,IAAuB,mBAAmB;QACxC,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY;YAC5C,OAAO,KAAK,CAAC,mBAAmB,CAAC;QAEnC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;IAC9B,CAAC;IAEkB,iBAAiB,CAAC,EAAiB;QACpD,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY;YAC5C,OAAO,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,cAAc;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,sBAAsB;aAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YACpC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;aAChC,IAAI,CAAC,IAAI,CAAC,cAAc;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,uBAAuB;QAErD,OAAO,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAEkB,2BAA2B;QAC5C,KAAK,CAAC,2BAA2B,EAAE,CAAC;QAEpC,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY;YAC5C,OAAO;QAET,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YACjE,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QACxC,KAAK,CAAC,QAAQ,CAAC,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAEkB,qBAAqB,CAAC,cAAuB,EAAE,gBAA8C;QAC9G,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,mBAAmB;gBACpF,OAAO,GAAG,oBAAS,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC1D,IAAI,CAAC,IAAI,CAAC,cAAc;oBACtB,OAAO,GAAG,oBAAS,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;qBACnE,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;oBACpC,OAAO,GAAG,oBAAS,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;;oBAEpE,OAAO,GAAG,oBAAS,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;aACxE;SACF;QACD,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC;YACpD,OAAO,KAAK,CAAC;QAEf,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,YAAY,CAAC,YAAY;YACxD,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,0EAA0E;QAExG,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,4BAA4B;QAC1C,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAE7C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvF,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY;YAC5C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEe,KAAK,CAAC,SAAS;QAC7B,IAAI,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE;YAC1B,OAAO,KAAK,CAAC;QAEf,6GAA6G;QAC7G,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAExG,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACa,KAAK,CAAC,WAAW,CAAC,GAAG,SAAmB;QACtD,IAAI,YAAY,CAAC;QACjB,IAAI,WAAW,CAAC;QAChB,IAAI,WAAW,CAAC;QAEhB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;YAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;gBACpB,SAAS;YAEX,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACzB,QAAQ,MAAM,EAAE;wBACd,KAAK,CAAC;4BACJ,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC;4BACtC,MAAM;wBACR,KAAK,CAAC;4BACJ,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC;4BACpC,MAAM;qBACT;iBACF;aACF;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACxB,QAAQ,KAAK,EAAE;wBACb,KAAK,CAAC;4BACJ,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;4BAChC,MAAM;wBACR,KAAK,CAAC;4BACJ,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;4BACjC,MAAM;wBACR,KAAK,CAAC;4BACJ,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;4BACjC,MAAM;qBACT;iBACF;aACF;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACxB,WAAW,GAAG,qBAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;iBAClD;aACF;SACF;QAED,yFAAyF;QACzF,IAAI,SAAS,KAAK,YAAY;YAC5B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAElF,IAAI,SAAS,KAAK,WAAW;YAC3B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhF,IAAI,SAAS,KAAK,WAAW;YAC3B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhF,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;;AAjVH,gDAkVC;AAjVwB,yBAAM,GAAG,gBAAgB,CAAC;AAC1B,2BAAQ,GAAG,aAAa,CAAC;AAUjC,mCAAgB,GAAG,GAAwB,EAAE;IAC1D,OAAO;QACL,EAAE,KAAK,EAAE,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE;QACrF,EAAE,KAAK,EAAE,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE;KAClF,CAAC;AACJ,CAAC,CAAC;AAca,kCAAe,GAAG,GAAwB,EAAE;IACzD,OAAO;QACL,EAAE,KAAK,EAAE,kBAAkB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE;QAC7E,EAAE,KAAK,EAAE,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;QAC/E,EAAE,KAAK,EAAE,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;KAChF,CAAC;AACJ,CAAC,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\r\nimport { BentleyError, Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, Geometry, Matrix3d, Point3d, Transform, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { Code, ColorDef, GeometricElementProps, IModelStatus, isPlacement2dProps, LinePixels, PersistentGraphicsRequestProps, Placement, Placement2d, Placement3d } from \"@itwin/core-common\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CoreTools, DynamicsContext, ElementSetTool, GraphicBranch, GraphicType, IModelApp, IModelConnection, IpcApp, ModifyElementSource, NotifyMessageDetails, OutputMessagePriority, readElementGraphics, RenderGraphic, RenderGraphicOwner, ToolAssistanceInstruction } from \"@itwin/core-frontend\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, EnumerationChoice, PropertyDescriptionHelper, PropertyEditorParamTypes, RangeEditorParams } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha */\r\nexport interface TransformGraphicsData {\r\n id: Id64String;\r\n placement: Placement;\r\n graphic: RenderGraphicOwner;\r\n}\r\n\r\n/** @alpha */\r\nexport class TransformGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly data: TransformGraphicsData[];\r\n public readonly pending: Map<Id64String, string>;\r\n public readonly prefix: string;\r\n /** Chord tolerance to use to stroke the element's geometry in meters. */\r\n public chordTolerance = 0.01;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n this.data = new Array<TransformGraphicsData>();\r\n this.pending = new Map<Id64String, string>();\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(id: Id64String): Promise<TransformGraphicsData | undefined> {\r\n const elementProps = (await this.iModel.elements.getProps(id)) as GeometricElementProps[];\r\n if (0 === elementProps.length)\r\n return;\r\n\r\n const placementProps = elementProps[0].placement;\r\n if (undefined === placementProps)\r\n return;\r\n\r\n const placement = isPlacement2dProps(placementProps) ? Placement2d.fromJSON(placementProps) : Placement3d.fromJSON(placementProps);\r\n if (!placement.isValid)\r\n return; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const requestProps: PersistentGraphicsRequestProps = {\r\n id: this.getRequestId(id),\r\n elementId: id,\r\n toleranceLog10: this.getToleranceLog10(),\r\n };\r\n\r\n this.pending.set(id, requestProps.id); // keep track of requests so they can be cancelled...\r\n\r\n const graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, elementProps[0].model, placement.is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return { id, placement, graphic: IModelApp.renderSystem.createGraphicOwner(graphic) };\r\n }\r\n\r\n private disposeOfGraphics(): void {\r\n this.data.forEach((data) => {\r\n data.graphic.disposeGraphic();\r\n });\r\n\r\n this.data.length = 0;\r\n }\r\n\r\n private async cancelPendingRequests(): Promise<void> {\r\n const requests = new Array<string>();\r\n for (const [_key, id] of this.pending)\r\n requests.push(id);\r\n\r\n this.pending.clear();\r\n if (0 === requests.length)\r\n return;\r\n\r\n return IpcApp.callIpcHost(\"cancelElementGraphicsRequests\", this.iModel.key, requests);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied element id.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public async createSingleGraphic(id: Id64String): Promise<boolean> {\r\n try {\r\n const info = await this.createRequest(id);\r\n\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined === info?.graphic)\r\n return false;\r\n\r\n this.data.push(info);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request RenderGraphics for the supplied element ids. Does not wait for results as\r\n * generating graphics for a large number of elements can take time. Instead an array of [[RenderGraphicOwner]]\r\n * is populated as requests are resolved and the current dynamics frame displays what is available.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public createGraphics(elements: Id64Arg): void {\r\n if (0 === Id64.sizeOf(elements))\r\n return;\r\n\r\n try {\r\n for (const id of Id64.iterable(elements)) {\r\n const promise = this.createRequest(id);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then((info) => {\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined !== info?.graphic)\r\n this.data.push(info);\r\n });\r\n }\r\n } catch { }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]] and cancel requests that are still pending.\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 async cleanupGraphics(): Promise<void> {\r\n await this.cancelPendingRequests();\r\n this.disposeOfGraphics();\r\n }\r\n\r\n public addSingleGraphic(graphic: RenderGraphic, transform: Transform, context: DynamicsContext): void {\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addGraphics(transform: Transform, context: DynamicsContext): void {\r\n if (0 === this.data.length)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n for (const data of this.data)\r\n branch.add(data.graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha Base class for applying a transform to element placements. */\r\nexport abstract class TransformElementsTool extends ElementSetTool {\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowGroups(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected get wantMakeCopy(): boolean { return false; }\r\n protected get wantRepeatOperation(): boolean { return this.wantMakeCopy && !this.agenda.isEmpty; }\r\n protected _graphicsProvider?: TransformGraphicsProvider;\r\n protected _startedCmd?: string;\r\n\r\n protected abstract calculateTransform(ev: BeButtonEvent): Transform | undefined;\r\n\r\n protected async createAgendaGraphics(changed: boolean): Promise<void> {\r\n if (changed) {\r\n if (undefined === this._graphicsProvider)\r\n return; // Not yet needed...\r\n } else {\r\n if (undefined !== this._graphicsProvider)\r\n return; // Use existing graphics...\r\n }\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new TransformGraphicsProvider(this.iModel, this.toolId);\r\n else\r\n await this._graphicsProvider.cleanupGraphics();\r\n\r\n if (1 === this.agenda.length) {\r\n await this._graphicsProvider.createSingleGraphic(this.agenda.elements[0]);\r\n return;\r\n }\r\n\r\n this._graphicsProvider.createGraphics(this.agenda.elements);\r\n }\r\n\r\n protected async clearAgendaGraphics(): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n await this._graphicsProvider.cleanupGraphics();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n await this.createAgendaGraphics(true);\r\n }\r\n\r\n protected override async initAgendaDynamics(): Promise<boolean> {\r\n await this.createAgendaGraphics(false);\r\n return super.initAgendaDynamics();\r\n }\r\n\r\n protected transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphics(transform, context);\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n this.transformAgendaDynamics(transform, context);\r\n }\r\n\r\n protected updateAnchorLocation(transform: Transform): void {\r\n // Update anchor point to support creating additional copies (repeat vs. restart)...\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n transform.multiplyPoint3d(this.anchorPoint, this.anchorPoint);\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOrigin(this.anchorPoint);\r\n hints.sendHints();\r\n }\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n protected commandConnection = EditTools.connect<BasicManipulationCommandIpc>();\r\n\r\n protected async replaceAgenda(newIds: Id64Arg | undefined): Promise<void> {\r\n this.agenda.clear();\r\n\r\n if (undefined !== newIds)\r\n this.agenda.add(newIds);\r\n\r\n if (this.isSelectionSetModify) {\r\n if (this.agenda.isEmpty)\r\n this.iModel.selectionSet.emptyAll();\r\n else\r\n this.iModel.selectionSet.replace(this.agenda.elements);\r\n\r\n this.agenda.setSource(ModifyElementSource.SelectionSet);\r\n this.setPreferredElementSource(); // Update \"use selection set\" flag...\r\n }\r\n\r\n return this.onAgendaModified();\r\n }\r\n\r\n protected async transformAndCopyAgenda(_transform: Transform): Promise<Id64Arg | undefined> {\r\n return undefined;\r\n }\r\n\r\n protected async transformAgenda(transform: Transform): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await this.commandConnection.transformPlacement(this.agenda.compressIds(), transform.toJSON()))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n\r\n if (this.wantMakeCopy)\r\n await this.replaceAgenda(await this.transformAndCopyAgenda(transform));\r\n else\r\n await this.transformAgenda(transform);\r\n\r\n this.updateAnchorLocation(transform);\r\n }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n if (this.wantRepeatOperation)\r\n return; // Continue with current agenda instead of restarting (ex. create additional copies)\r\n return super.onProcessComplete();\r\n }\r\n\r\n public override async onCleanup() {\r\n await this.clearAgendaGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n\r\n/** @alpha Move elements by applying translation to placement. */\r\nexport class MoveElementsTool extends TransformElementsTool {\r\n public static override toolId = \"MoveElements\";\r\n public static override iconSpec = \"icon-move\";\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === this.anchorPoint)\r\n return undefined;\r\n return Transform.createTranslation(ev.point.minus(this.anchorPoint));\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements)\r\n mainMsg = CoreTools.translate(this.wantAdditionalInput ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MoveElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Create new elements with translation applied to placement.\r\n * This is a brute force implementation strictly for example and testing purposes.\r\n * The new elements are Generic:PhysicalObject or BisCore:DrawingGraphic using the model and category of original.\r\n * Does not preserve assemblies and geometric elements without geometry are not copied.\r\n * Using loadProps to return json format geometry to the frontend for each element in the tool agenda is very inefficient.\r\n * Applications that wish to support copy are expected to sub-class TransformElementsTool and register their\r\n * own EditCommand that can correctly copy their application elements.\r\n * @alpha\r\n */\r\nexport class CopyElementsTool extends MoveElementsTool {\r\n public static override toolId = \"CopyElements\";\r\n public static override iconSpec = \"icon-move\"; // Need better icon...\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n private _numCopiesProperty: DialogProperty<number> | undefined;\r\n public get numCopiesProperty() {\r\n if (!this._numCopiesProperty)\r\n this._numCopiesProperty = new DialogProperty<number>(\r\n PropertyDescriptionHelper.buildNumberEditorDescription(\"numCopies\", EditTools.translate(\"CopyElements.Label.NumCopies\"),\r\n { type: PropertyEditorParamTypes.Range, minimum: 1 } as RangeEditorParams), 1);\r\n return this._numCopiesProperty;\r\n }\r\n\r\n public get numCopies(): number { return this.numCopiesProperty.value; }\r\n public set numCopies(value: number) { this.numCopiesProperty.value = value; }\r\n\r\n protected override get wantMakeCopy(): boolean { return this.numCopies > 0; }\r\n\r\n protected override updateAnchorLocation(transform: Transform): void {\r\n // Account for additional copies for repeat operation anchor point...\r\n for (let iCopy = 0; iCopy < this.numCopies; ++iCopy)\r\n super.updateAnchorLocation(transform);\r\n }\r\n\r\n protected async doTranformedCopy(ids: Id64Array, transform: Transform, numCopies: number): Promise<Id64Arg | undefined> {\r\n if (numCopies < 1 || 0 === ids.length)\r\n return undefined;\r\n\r\n this._startedCmd = await this.startCommand();\r\n const newIds: Id64Array = [];\r\n\r\n for (const id of ids) {\r\n // NOTE: For testing only. Using loadProps to return json format geometry to the frontend for each element in the tool agenda is very inefficient.\r\n const props = await this.iModel.elements.loadProps(id, { wantGeometry: true, wantBRepData: true }) as GeometricElementProps;\r\n if (undefined === props.placement)\r\n continue;\r\n\r\n const placement = isPlacement2dProps(props.placement) ? Placement2d.fromJSON(props.placement) : Placement3d.fromJSON(props.placement);\r\n if (!placement.isValid)\r\n continue; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const classFullName = (placement.is3d ? \"Generic:PhysicalObject\" : \"BisCore:DrawingGraphic\");\r\n const newProps: GeometricElementProps = { classFullName, model: props.model, category: props.category, code: Code.createEmpty(), placement, geom: props.geom };\r\n let newId;\r\n\r\n for (let iCopy = 0; iCopy < numCopies; ++iCopy) {\r\n placement.multiplyTransform(transform);\r\n newId = await this.commandConnection.insertGeometricElement(newProps);\r\n }\r\n\r\n if (undefined !== newId)\r\n newIds.push(newId); // When numCopies > 1 ids are return for just the final copy...\r\n }\r\n\r\n return (0 === newIds.length ? undefined : newIds);\r\n }\r\n\r\n protected override async transformAndCopyAgenda(transform: Transform): Promise<Id64Arg | undefined> {\r\n try {\r\n const newIds = await this.doTranformedCopy(this.agenda.elements, transform, this.numCopies);\r\n if (undefined !== newIds)\r\n await this.saveChanges();\r\n return newIds;\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n // NOTE: Don't call changeToolSettingPropertyValue, value of numCopies should not be saved...\r\n if (updatedValue.propertyName !== this.numCopiesProperty.name || undefined === updatedValue.value.value)\r\n return false;\r\n this.numCopies = updatedValue.value.value as number;\r\n return true;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n // NOTE: Don't call initializeToolSettingPropertyValues, value of numCopies is not saved...\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push(this.numCopiesProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n return toolSettings;\r\n }\r\n\r\n public override async onRestartTool(): Promise<void> {\r\n const tool = new CopyElementsTool();\r\n tool.numCopies = this.numCopies; // Preserve numCopies on restart...\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `numCopies=number` Number of copies of each element to create, default is 1.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"num\")) {\r\n const copies = Number.parseInt(parts[1], 10);\r\n if (copies >= 1)\r\n this.numCopies = copies; // NOTE: Don't call saveToolSettingPropertyValue, always default to single copy...\r\n }\r\n }\r\n\r\n return this.run();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateMethod {\r\n By3Points,\r\n ByAngle,\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateAbout {\r\n Point,\r\n Origin,\r\n Center,\r\n}\r\n\r\n/** @alpha Rotate elements by applying transform to placement. */\r\nexport class RotateElementsTool extends TransformElementsTool {\r\n public static override toolId = \"RotateElements\";\r\n public static override iconSpec = \"icon-rotate\";\r\n\r\n protected xAxisPoint?: Point3d;\r\n protected havePivotPoint = false;\r\n protected haveFinalPoint = false;\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n private static methodMessage(str: string) { return EditTools.translate(`RotateElements.Method.${str}`); }\r\n private static getMethodChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.methodMessage(\"3Points\"), value: RotateMethod.By3Points },\r\n { label: RotateElementsTool.methodMessage(\"Angle\"), value: RotateMethod.ByAngle },\r\n ];\r\n };\r\n\r\n private _methodProperty: DialogProperty<number> | undefined;\r\n public get methodProperty() {\r\n if (!this._methodProperty)\r\n this._methodProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateMethod\", EditTools.translate(\"RotateElements.Label.Method\"), RotateElementsTool.getMethodChoices()), RotateMethod.By3Points as number);\r\n return this._methodProperty;\r\n }\r\n\r\n public get rotateMethod(): RotateMethod { return this.methodProperty.value as RotateMethod; }\r\n public set rotateMethod(method: RotateMethod) { this.methodProperty.value = method; }\r\n\r\n private static aboutMessage(str: string) { return EditTools.translate(`RotateElements.About.${str}`); }\r\n private static getAboutChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.aboutMessage(\"Point\"), value: RotateAbout.Point },\r\n { label: RotateElementsTool.aboutMessage(\"Origin\"), value: RotateAbout.Origin },\r\n { label: RotateElementsTool.aboutMessage(\"Center\"), value: RotateAbout.Center },\r\n ];\r\n };\r\n\r\n private _aboutProperty: DialogProperty<number> | undefined;\r\n public get aboutProperty() {\r\n if (!this._aboutProperty)\r\n this._aboutProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateAbout\", EditTools.translate(\"RotateElements.Label.About\"), RotateElementsTool.getAboutChoices()), RotateAbout.Point as number);\r\n return this._aboutProperty;\r\n }\r\n\r\n public get rotateAbout(): RotateAbout { return this.aboutProperty.value as RotateAbout; }\r\n public set rotateAbout(method: RotateAbout) { this.aboutProperty.value = method; }\r\n\r\n private _angleProperty: DialogProperty<number> | undefined;\r\n public get angleProperty() {\r\n if (!this._angleProperty)\r\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"rotateAngle\", EditTools.translate(\"RotateElements.Label.Angle\")), 0.0);\r\n return this._angleProperty;\r\n }\r\n\r\n public get rotateAngle(): number { return this.angleProperty.value; }\r\n public set rotateAngle(value: number) { this.angleProperty.value = value; }\r\n\r\n protected override get requireAcceptForSelectionSetDynamics(): boolean { return RotateMethod.ByAngle !== this.rotateMethod; }\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(this.rotateAngle, 0, 0).toMatrix3d();\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(ev.point, rotMatrix);\r\n }\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return undefined;\r\n\r\n const vec1 = Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint);\r\n const vec2 = Vector3d.createStartEnd(this.anchorPoint, ev.point);\r\n\r\n if (!vec1.normalizeInPlace() || !vec2.normalizeInPlace())\r\n return undefined;\r\n\r\n const dot = vec1.dotProduct(vec2);\r\n if (dot > (1.0 - Geometry.smallAngleRadians))\r\n return undefined;\r\n\r\n if (dot < (-1.0 + Geometry.smallAngleRadians)) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(Math.PI, 0, 0).toMatrix3d(); // 180 degree rotation...\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, rotMatrix);\r\n }\r\n\r\n const zVec = vec1.unitCrossProduct(vec2);\r\n if (undefined === zVec)\r\n return undefined;\r\n\r\n const yVec = zVec.unitCrossProduct(vec1);\r\n if (undefined === yVec)\r\n return undefined;\r\n\r\n const matrix1 = Matrix3d.createRows(vec1, yVec, zVec);\r\n zVec.unitCrossProduct(vec2, yVec);\r\n const matrix2 = Matrix3d.createColumns(vec2, yVec, zVec);\r\n\r\n const matrix = matrix2.multiplyMatrixMatrix(matrix1);\r\n if (undefined === matrix)\r\n return undefined;\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, matrix);\r\n }\r\n\r\n protected override transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n const rotatePoint = Point3d.create();\r\n\r\n for (const data of this._graphicsProvider.data) {\r\n if (RotateAbout.Origin === this.rotateAbout)\r\n rotatePoint.setFrom(data.placement.origin);\r\n else\r\n rotatePoint.setFrom(data.placement.calculateRange().center);\r\n\r\n const rotateTrans = Transform.createFixedPointAndMatrix(rotatePoint, transform.matrix);\r\n this._graphicsProvider.addSingleGraphic(data.graphic, rotateTrans, context);\r\n }\r\n }\r\n\r\n protected override async transformAgenda(transform: Transform): Promise<void> {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgenda(transform);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await this.commandConnection.rotatePlacement(this.agenda.compressIds(), transform.matrix.toJSON(), RotateAbout.Center === this.rotateAbout))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined !== transform)\r\n return this.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 1, LinePixels.Code2);\r\n builder.addLineString([this.anchorPoint.clone(), ev.point.clone()]);\r\n context.addGraphic(builder.finish());\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantAdditionalInput;\r\n\r\n return !this.haveFinalPoint;\r\n }\r\n\r\n protected override wantProcessAgenda(ev: BeButtonEvent): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantProcessAgenda(ev);\r\n\r\n if (!this.havePivotPoint)\r\n this.havePivotPoint = true; // Uses anchorPoint...\r\n else if (undefined === this.xAxisPoint)\r\n this.xAxisPoint = ev.point.clone();\r\n else if (!this.haveFinalPoint)\r\n this.haveFinalPoint = true; // Uses button event...\r\n\r\n return super.wantProcessAgenda(ev);\r\n }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n super.setupAndPromptForNextAction();\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return;\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setXAxis(Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint));\r\n hints.setOrigin(this.anchorPoint);\r\n hints.setModePolar();\r\n hints.sendHints();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements && this.wantAdditionalInput)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n } else {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements) {\r\n if (!this.havePivotPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n else if (undefined === this.xAxisPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineStart\");\r\n else\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineAmount\");\r\n }\r\n }\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n if (!this.changeToolSettingPropertyValue(updatedValue))\r\n return false;\r\n\r\n if (this.methodProperty.name === updatedValue.propertyName)\r\n await this.onRestartTool(); // calling restart, not reinitialize to not exit tool for selection set...\r\n\r\n return true;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n toolSettings.push(this.methodProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.aboutProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RotateElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!await super.onInstall())\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.methodProperty, this.aboutProperty, this.angleProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `method=0|1` How rotate angle will be specified. 0 for by 3 points, 1 for by specified angle.\r\n * - `about=0|1|2` Location to rotate about. 0 for point, 1 for placement origin, and 2 for center of range.\r\n * - `angle=number` Rotation angle in degrees when not defining angle by points.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n let rotateMethod;\r\n let rotateAbout;\r\n let rotateAngle;\r\n\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"me\")) {\r\n const method = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(method)) {\r\n switch (method) {\r\n case 0:\r\n rotateMethod = RotateMethod.By3Points;\r\n break;\r\n case 1:\r\n rotateMethod = RotateMethod.ByAngle;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"ab\")) {\r\n const about = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(about)) {\r\n switch (about) {\r\n case 0:\r\n rotateAbout = RotateAbout.Point;\r\n break;\r\n case 1:\r\n rotateAbout = RotateAbout.Origin;\r\n break;\r\n case 2:\r\n rotateAbout = RotateAbout.Center;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"an\")) {\r\n const angle = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(angle)) {\r\n rotateAngle = Angle.createDegrees(angle).radians;\r\n }\r\n }\r\n }\r\n\r\n // Update current session values so keyin args are picked up for tool settings/restart...\r\n if (undefined !== rotateMethod)\r\n this.saveToolSettingPropertyValue(this.methodProperty, { value: rotateMethod });\r\n\r\n if (undefined !== rotateAbout)\r\n this.saveToolSettingPropertyValue(this.aboutProperty, { value: rotateAbout });\r\n\r\n if (undefined !== rotateAngle)\r\n this.saveToolSettingPropertyValue(this.angleProperty, { value: rotateAngle });\r\n\r\n return this.run();\r\n }\r\n}\r\n\r\n"]}
@@ -9,7 +9,7 @@ export declare class DeleteElementsTool extends ElementSetTool {
9
9
  protected get allowDragSelect(): boolean;
10
10
  protected get controlKeyContinuesSelection(): boolean;
11
11
  protected get requireAcceptForSelectionSetOperation(): boolean;
12
- static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]>;
12
+ protected commandConnection: import("@itwin/core-bentley").PickAsyncMethods<BasicManipulationCommandIpc>;
13
13
  processAgendaImmediate(): Promise<void>;
14
14
  onRestartTool(): Promise<void>;
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteElementsTool.d.ts","sourceRoot":"","sources":["../../src/DeleteElementsTool.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,2BAA2B,EAAuB,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,cAAc,EAA0D,MAAM,sBAAsB,CAAC;AAG9G,kHAAkH;AAClH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAuB,MAAM,SAAoB;IACjD,OAAuB,QAAQ,SAAiB;IAEhD,cAAuB,iBAAiB,IAAI,OAAO,CAAiB;IACpE,cAAuB,WAAW,IAAI,OAAO,CAAiB;IAC9D,cAAuB,eAAe,IAAI,OAAO,CAAiB;IAClE,cAAuB,4BAA4B,IAAI,OAAO,CAAiB;IAC/E,cAAuB,qCAAqC,IAAI,OAAO,CAAkB;WAE3E,WAAW,CAAC,CAAC,SAAS,MAAM,2BAA2B,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAI5J,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhD,aAAa;CAK3B"}
1
+ {"version":3,"file":"DeleteElementsTool.d.ts","sourceRoot":"","sources":["../../src/DeleteElementsTool.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,2BAA2B,EAAuB,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,cAAc,EAA0D,MAAM,sBAAsB,CAAC;AAG9G,kHAAkH;AAClH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAuB,MAAM,SAAoB;IACjD,OAAuB,QAAQ,SAAiB;IAEhD,cAAuB,iBAAiB,IAAI,OAAO,CAAiB;IACpE,cAAuB,WAAW,IAAI,OAAO,CAAiB;IAC9D,cAAuB,eAAe,IAAI,OAAO,CAAiB;IAClE,cAAuB,4BAA4B,IAAI,OAAO,CAAiB;IAC/E,cAAuB,qCAAqC,IAAI,OAAO,CAAkB;IAEzF,SAAS,CAAC,iBAAiB,8EAAoD;IAEzD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhD,aAAa;CAK3B"}
@@ -8,18 +8,19 @@ import { ElementSetTool, IModelApp, NotifyMessageDetails, OutputMessagePriority
8
8
  import { EditTools } from "./EditTool";
9
9
  /** @alpha Delete elements immediately from active selection set or prompt user to identify elements to delete. */
10
10
  export class DeleteElementsTool extends ElementSetTool {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.commandConnection = EditTools.connect();
14
+ }
11
15
  get allowSelectionSet() { return true; }
12
16
  get allowGroups() { return true; }
13
17
  get allowDragSelect() { return true; }
14
18
  get controlKeyContinuesSelection() { return true; }
15
19
  get requireAcceptForSelectionSetOperation() { return false; }
16
- static callCommand(method, ...args) {
17
- return EditTools.callCommand(method, ...args);
18
- }
19
20
  async processAgendaImmediate() {
20
21
  try {
21
22
  await EditTools.startCommand(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);
22
- if (IModelStatus.Success === await DeleteElementsTool.callCommand("deleteElements", this.agenda.compressIds()))
23
+ if (IModelStatus.Success === await this.commandConnection.deleteElements(this.agenda.compressIds()))
23
24
  await this.saveChanges();
24
25
  }
25
26
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteElementsTool.js","sourceRoot":"","sources":["../../src/DeleteElementsTool.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAA+B,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,kHAAkH;AAClH,MAAM,OAAO,kBAAmB,SAAQ,cAAc;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;IAElF,MAAM,CAAC,WAAW,CAA8C,MAAS,EAAE,GAAG,IAAgD;QACnI,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,CAA+C,CAAC;IAC9F,CAAC;IAEe,KAAK,CAAC,sBAAsB;QAC1C,IAAI;YACF,MAAM,SAAS,CAAC,YAAY,CAAS,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChG,IAAI,YAAY,CAAC,OAAO,KAAK,MAAM,kBAAkB,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5G,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,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;;AA3BsB,yBAAM,GAAG,gBAAgB,CAAC;AAC1B,2BAAQ,GAAG,aAAa,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\r\nimport { BentleyError, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { ElementSetTool, IModelApp, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha Delete elements immediately from active selection set or prompt user to identify elements to delete. */\r\nexport class DeleteElementsTool extends ElementSetTool {\r\n public static override toolId = \"DeleteElements\";\r\n public static override iconSpec = \"icon-delete\";\r\n\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowGroups(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requireAcceptForSelectionSetOperation(): boolean { return false; }\r\n\r\n public static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<BasicManipulationCommandIpc[T]>;\r\n }\r\n\r\n public override async processAgendaImmediate(): Promise<void> {\r\n try {\r\n await EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n if (IModelStatus.Success === await DeleteElementsTool.callCommand(\"deleteElements\", this.agenda.compressIds()))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public async onRestartTool() {\r\n const tool = new DeleteElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DeleteElementsTool.js","sourceRoot":"","sources":["../../src/DeleteElementsTool.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAA+B,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,kHAAkH;AAClH,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IAAtD;;QAUY,sBAAiB,GAAG,SAAS,CAAC,OAAO,EAA+B,CAAC;IAiBjF,CAAC;IAvBC,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;IAIzE,KAAK,CAAC,sBAAsB;QAC1C,IAAI;YACF,MAAM,SAAS,CAAC,YAAY,CAAS,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChG,IAAI,YAAY,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACjG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,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;;AAzBsB,yBAAM,GAAG,gBAAgB,CAAC;AAC1B,2BAAQ,GAAG,aAAa,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\r\nimport { BentleyError, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { ElementSetTool, IModelApp, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha Delete elements immediately from active selection set or prompt user to identify elements to delete. */\r\nexport class DeleteElementsTool extends ElementSetTool {\r\n public static override toolId = \"DeleteElements\";\r\n public static override iconSpec = \"icon-delete\";\r\n\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowGroups(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requireAcceptForSelectionSetOperation(): boolean { return false; }\r\n\r\n protected commandConnection = EditTools.connect<BasicManipulationCommandIpc>();\r\n\r\n public override async processAgendaImmediate(): Promise<void> {\r\n try {\r\n await EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n if (IModelStatus.Success === await this.commandConnection.deleteElements(this.agenda.compressIds()))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public async onRestartTool() {\r\n const tool = new DeleteElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
@@ -1,6 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module Editing
3
3
  */
4
+ import { PickAsyncMethods } from "@itwin/core-bentley";
4
5
  /** @alpha Options for [[EditTools.initialize]]. */
5
6
  export interface EditorOptions {
6
7
  /** If true, all tools will be registered. */
@@ -22,7 +23,11 @@ export declare class EditTools {
22
23
  static tools: string;
23
24
  private static _initialized;
24
25
  static startCommand<T>(commandId: string, iModelKey: string, ...args: any[]): Promise<T>;
25
- static callCommand(methodName: string, ...args: any[]): Promise<any>;
26
+ /**
27
+ * Create a typed object that "connects" to the underlying backend IPC representation, but
28
+ * will just forward all typed calls through [IpcApp.callIpcChannel]($backend).
29
+ */
30
+ static connect<IpcInterface>(): PickAsyncMethods<IpcInterface>;
26
31
  /** @internal */
27
32
  static translate(prompt: string): string;
28
33
  /** Call this before using the package (e.g., before attempting to use any of its tools.)
@@ -1 +1 @@
1
- {"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAcH,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,0FAA0F;IAC1F,4BAA4B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAChD,gEAAgE;IAChE,8BAA8B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,4DAA4D;IAC5D,0BAA0B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/C;AAED,uGAAuG;AACvG,qBAAa,SAAS;IACpB,OAAc,SAAS,SAAY;IACnC,OAAc,KAAK,SAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;WAIjF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwGtE,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
1
+ {"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAaH,OAAO,EAAiB,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAEzF,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,0FAA0F;IAC1F,4BAA4B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAChD,gEAAgE;IAChE,8BAA8B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,4DAA4D;IAC5D,0BAA0B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/C;AAED,uGAAuG;AACvG,qBAAa,SAAS;IACpB,OAAc,SAAS,SAAY;IACnC,OAAc,KAAK,SAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrG;;;OAGG;WACW,OAAO,CAAC,YAAY,KAAK,gBAAgB,CAAC,YAAY,CAAC;IAoBrE,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwGtE,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
@@ -21,8 +21,17 @@ export class EditTools {
21
21
  static async startCommand(commandId, iModelKey, ...args) {
22
22
  return IpcApp.callIpcChannel(editorChannel, "startCommand", commandId, iModelKey, ...args);
23
23
  }
24
- static async callCommand(methodName, ...args) {
25
- return IpcApp.callIpcChannel(editorChannel, "callMethod", methodName, ...args);
24
+ /**
25
+ * Create a typed object that "connects" to the underlying backend IPC representation, but
26
+ * will just forward all typed calls through [IpcApp.callIpcChannel]($backend).
27
+ */
28
+ static connect() {
29
+ const makeIpcCall = (methodName) => async (...args) => IpcApp.callIpcChannel(editorChannel, "callMethod", methodName, ...args);
30
+ return new Proxy({}, {
31
+ get(_target, key) {
32
+ return makeIpcCall(key);
33
+ },
34
+ });
26
35
  }
27
36
  /** @internal */
28
37
  static translate(prompt) { return IModelApp.localization.getLocalizedString(this.tools + prompt); }
@@ -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 { editorChannel } from \"@itwin/editor-common\";\r\nimport { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { DeleteElementsTool } from \"./DeleteElementsTool\";\r\nimport { ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool, IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool, SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool } from \"./SolidModelingTools\";\r\nimport { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool } from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from \"./ProjectLocation/ProjectGeolocation\";\r\nimport { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from \"./SketchTools\";\r\nimport { CopyElementsTool, MoveElementsTool, RotateElementsTool } from \"./TransformElementsTool\";\r\nimport { BreakCurveTool, ExtendCurveTool, OffsetCurveTool } from \"./ModifyCurveTools\";\r\nimport { RedoTool, UndoAllTool, UndoTool } from \"./UndoRedoTool\";\r\nimport { CreateBoxTool, CreateConeTool, CreateCylinderTool, CreateSphereTool, CreateTorusTool } from \"./SolidPrimitiveTools\";\r\n\r\n/** @alpha Options for [[EditTools.initialize]]. */\r\nexport interface EditorOptions {\r\n /** If true, all tools will be registered. */\r\n registerAllTools?: true | undefined;\r\n /** If true, tools for undo/redo will be registered. */\r\n registerUndoRedoTools?: true | undefined;\r\n /** If true, tools for updating the project extents and geolocation will be registered. */\r\n registerProjectLocationTools?: true | undefined;\r\n /** If true, tools for basic manipulation will be registered. */\r\n registerBasicManipulationTools?: true | undefined;\r\n /** If true, tools for sketching will be registered. */\r\n registerSketchTools?: true | undefined;\r\n /** If true, tools for solid modeling will be registered. */\r\n registerSolidModelingTools?: true | undefined;\r\n}\r\n\r\n/** @alpha functions to support PrimitiveTool and InputCollector sub-classes with using EditCommand. */\r\nexport class EditTools {\r\n public static namespace = \"Editor\";\r\n public static tools = \"Editor:tools.\";\r\n private static _initialized = false;\r\n\r\n public static async startCommand<T>(commandId: string, iModelKey: string, ...args: any[]): Promise<T> {\r\n return IpcApp.callIpcChannel(editorChannel, \"startCommand\", commandId, iModelKey, ...args) as Promise<T>;\r\n }\r\n\r\n public static async callCommand(methodName: string, ...args: any[]): Promise<any> {\r\n return IpcApp.callIpcChannel(editorChannel, \"callMethod\", methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static translate(prompt: string) { return IModelApp.localization.getLocalizedString(this.tools + prompt); }\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(options?: EditorOptions): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n // NOTE: We should clear the active command whenever a new PrimitiveTool is installed.\r\n // As tool run/install isn't currently async ToolAdmin.activeToolChanged can't be used at this time.\r\n // The active command will be cleared whenever another edit tool calls startCommand.\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 const registerAllTools = options?.registerAllTools;\r\n\r\n // Register requested tools...\r\n if (registerAllTools || options?.registerUndoRedoTools) {\r\n const tools = [\r\n UndoAllTool,\r\n UndoTool,\r\n RedoTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerProjectLocationTools) {\r\n const tools = [\r\n ProjectLocationShowTool,\r\n ProjectLocationHideTool,\r\n ProjectLocationCancelTool,\r\n ProjectLocationSaveTool,\r\n ProjectGeolocationMoveTool,\r\n ProjectGeolocationPointTool,\r\n ProjectGeolocationNorthTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerBasicManipulationTools) {\r\n const tools = [\r\n DeleteElementsTool,\r\n MoveElementsTool,\r\n CopyElementsTool,\r\n RotateElementsTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSketchTools) {\r\n const tools = [\r\n CreateArcTool,\r\n CreateBCurveTool,\r\n CreateCircleTool,\r\n CreateEllipseTool,\r\n CreateLineStringTool,\r\n CreateRectangleTool,\r\n BreakCurveTool,\r\n ExtendCurveTool,\r\n OffsetCurveTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSolidModelingTools) {\r\n const tools = [\r\n CreateSphereTool,\r\n CreateCylinderTool,\r\n CreateConeTool,\r\n CreateBoxTool,\r\n CreateTorusTool,\r\n UniteSolidElementsTool,\r\n SubtractSolidElementsTool,\r\n IntersectSolidElementsTool,\r\n SewSheetElementsTool,\r\n ThickenSheetElementsTool,\r\n CutSolidElementsTool,\r\n EmbossSolidElementsTool,\r\n ImprintSolidElementsTool,\r\n SweepAlongPathTool,\r\n LoftProfilesTool,\r\n OffsetFacesTool,\r\n HollowFacesTool,\r\n SweepFacesTool,\r\n SpinFacesTool,\r\n RoundEdgesTool,\r\n ChamferEdgesTool,\r\n DeleteSubEntitiesTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\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":"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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 { editorChannel } from \"@itwin/editor-common\";\r\nimport { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { DeleteElementsTool } from \"./DeleteElementsTool\";\r\nimport { ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool, IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool, SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool } from \"./SolidModelingTools\";\r\nimport { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool } from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from \"./ProjectLocation/ProjectGeolocation\";\r\nimport { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from \"./SketchTools\";\r\nimport { CopyElementsTool, MoveElementsTool, RotateElementsTool } from \"./TransformElementsTool\";\r\nimport { BreakCurveTool, ExtendCurveTool, OffsetCurveTool } from \"./ModifyCurveTools\";\r\nimport { RedoTool, UndoAllTool, UndoTool } from \"./UndoRedoTool\";\r\nimport { CreateBoxTool, CreateConeTool, CreateCylinderTool, CreateSphereTool, CreateTorusTool } from \"./SolidPrimitiveTools\";\r\nimport { AsyncFunction, PickAsyncMethods, PromiseReturnType } from \"@itwin/core-bentley\";\r\n\r\n/** @alpha Options for [[EditTools.initialize]]. */\r\nexport interface EditorOptions {\r\n /** If true, all tools will be registered. */\r\n registerAllTools?: true | undefined;\r\n /** If true, tools for undo/redo will be registered. */\r\n registerUndoRedoTools?: true | undefined;\r\n /** If true, tools for updating the project extents and geolocation will be registered. */\r\n registerProjectLocationTools?: true | undefined;\r\n /** If true, tools for basic manipulation will be registered. */\r\n registerBasicManipulationTools?: true | undefined;\r\n /** If true, tools for sketching will be registered. */\r\n registerSketchTools?: true | undefined;\r\n /** If true, tools for solid modeling will be registered. */\r\n registerSolidModelingTools?: true | undefined;\r\n}\r\n\r\n/** @alpha functions to support PrimitiveTool and InputCollector sub-classes with using EditCommand. */\r\nexport class EditTools {\r\n public static namespace = \"Editor\";\r\n public static tools = \"Editor:tools.\";\r\n private static _initialized = false;\r\n\r\n public static async startCommand<T>(commandId: string, iModelKey: string, ...args: any[]): Promise<T> {\r\n return IpcApp.callIpcChannel(editorChannel, \"startCommand\", commandId, iModelKey, ...args) as Promise<T>;\r\n }\r\n\r\n /**\r\n * Create a typed object that \"connects\" to the underlying backend IPC representation, but\r\n * will just forward all typed calls through [IpcApp.callIpcChannel]($backend).\r\n */\r\n public static connect<IpcInterface>(): PickAsyncMethods<IpcInterface> {\r\n type IpcConnector = PickAsyncMethods<IpcInterface>;\r\n\r\n const makeIpcCall =\r\n <K extends keyof IpcConnector>(methodName: K) =>\r\n async (...args: Parameters<IpcConnector[K]>) =>\r\n IpcApp.callIpcChannel(\r\n editorChannel,\r\n \"callMethod\",\r\n methodName,\r\n ...args as any[]\r\n ) as PromiseReturnType<IpcConnector[K]>;\r\n\r\n return new Proxy({} as IpcConnector, {\r\n get(_target, key: string): AsyncFunction {\r\n return makeIpcCall(key as keyof IpcConnector) as AsyncFunction;\r\n },\r\n });\r\n }\r\n\r\n /** @internal */\r\n public static translate(prompt: string) { return IModelApp.localization.getLocalizedString(this.tools + prompt); }\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(options?: EditorOptions): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n // NOTE: We should clear the active command whenever a new PrimitiveTool is installed.\r\n // As tool run/install isn't currently async ToolAdmin.activeToolChanged can't be used at this time.\r\n // The active command will be cleared whenever another edit tool calls startCommand.\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 const registerAllTools = options?.registerAllTools;\r\n\r\n // Register requested tools...\r\n if (registerAllTools || options?.registerUndoRedoTools) {\r\n const tools = [\r\n UndoAllTool,\r\n UndoTool,\r\n RedoTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerProjectLocationTools) {\r\n const tools = [\r\n ProjectLocationShowTool,\r\n ProjectLocationHideTool,\r\n ProjectLocationCancelTool,\r\n ProjectLocationSaveTool,\r\n ProjectGeolocationMoveTool,\r\n ProjectGeolocationPointTool,\r\n ProjectGeolocationNorthTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerBasicManipulationTools) {\r\n const tools = [\r\n DeleteElementsTool,\r\n MoveElementsTool,\r\n CopyElementsTool,\r\n RotateElementsTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSketchTools) {\r\n const tools = [\r\n CreateArcTool,\r\n CreateBCurveTool,\r\n CreateCircleTool,\r\n CreateEllipseTool,\r\n CreateLineStringTool,\r\n CreateRectangleTool,\r\n BreakCurveTool,\r\n ExtendCurveTool,\r\n OffsetCurveTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSolidModelingTools) {\r\n const tools = [\r\n CreateSphereTool,\r\n CreateCylinderTool,\r\n CreateConeTool,\r\n CreateBoxTool,\r\n CreateTorusTool,\r\n UniteSolidElementsTool,\r\n SubtractSolidElementsTool,\r\n IntersectSolidElementsTool,\r\n SewSheetElementsTool,\r\n ThickenSheetElementsTool,\r\n CutSolidElementsTool,\r\n EmbossSolidElementsTool,\r\n ImprintSolidElementsTool,\r\n SweepAlongPathTool,\r\n LoftProfilesTool,\r\n OffsetFacesTool,\r\n HollowFacesTool,\r\n SweepFacesTool,\r\n SpinFacesTool,\r\n RoundEdgesTool,\r\n ChamferEdgesTool,\r\n DeleteSubEntitiesTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\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"]}
@@ -55,7 +55,7 @@ export declare abstract class ElementGeometryCacheTool extends ElementSetTool im
55
55
  protected allowView(vp: Viewport): boolean;
56
56
  isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean;
57
57
  protected startCommand(): Promise<string>;
58
- static callCommand<T extends keyof SolidModelingCommandIpc>(method: T, ...args: Parameters<SolidModelingCommandIpc[T]>): ReturnType<SolidModelingCommandIpc[T]>;
58
+ protected commandConnection: import("@itwin/core-bentley").PickAsyncMethods<SolidModelingCommandIpc>;
59
59
  protected agendaAppearance(isDynamics: boolean): FeatureAppearance;
60
60
  protected get wantAgendaAppearanceOverride(): boolean;
61
61
  addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"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"}