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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +0 -29
  4. package/lib/cjs/CreateElementTool.d.ts +64 -2
  5. package/lib/cjs/CreateElementTool.d.ts.map +1 -1
  6. package/lib/cjs/CreateElementTool.js +65 -4
  7. package/lib/cjs/CreateElementTool.js.map +1 -1
  8. package/lib/cjs/EditTool.d.ts +5 -0
  9. package/lib/cjs/EditTool.d.ts.map +1 -1
  10. package/lib/cjs/EditTool.js +10 -14
  11. package/lib/cjs/EditTool.js.map +1 -1
  12. package/lib/cjs/EditToolIpc.d.ts +1 -5
  13. package/lib/cjs/EditToolIpc.d.ts.map +1 -1
  14. package/lib/cjs/EditToolIpc.js +1 -5
  15. package/lib/cjs/EditToolIpc.js.map +1 -1
  16. package/lib/cjs/ModifyElementTool.js.map +1 -1
  17. package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  18. package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
  19. package/lib/cjs/TransformElementsTool.d.ts +17 -98
  20. package/lib/cjs/TransformElementsTool.d.ts.map +1 -1
  21. package/lib/cjs/TransformElementsTool.js +15 -412
  22. package/lib/cjs/TransformElementsTool.js.map +1 -1
  23. package/lib/cjs/UndoRedoTool.js.map +1 -1
  24. package/lib/cjs/editor-frontend.d.ts +0 -6
  25. package/lib/cjs/editor-frontend.d.ts.map +1 -1
  26. package/lib/cjs/editor-frontend.js +0 -6
  27. package/lib/cjs/editor-frontend.js.map +1 -1
  28. package/lib/esm/CreateElementTool.d.ts +64 -2
  29. package/lib/esm/CreateElementTool.d.ts.map +1 -1
  30. package/lib/esm/CreateElementTool.js +65 -4
  31. package/lib/esm/CreateElementTool.js.map +1 -1
  32. package/lib/esm/EditTool.d.ts +5 -0
  33. package/lib/esm/EditTool.d.ts.map +1 -1
  34. package/lib/esm/EditTool.js +10 -14
  35. package/lib/esm/EditTool.js.map +1 -1
  36. package/lib/esm/EditToolIpc.d.ts +1 -5
  37. package/lib/esm/EditToolIpc.d.ts.map +1 -1
  38. package/lib/esm/EditToolIpc.js +0 -4
  39. package/lib/esm/EditToolIpc.js.map +1 -1
  40. package/lib/esm/ModifyElementTool.js.map +1 -1
  41. package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
  42. package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
  43. package/lib/esm/TransformElementsTool.d.ts +17 -98
  44. package/lib/esm/TransformElementsTool.d.ts.map +1 -1
  45. package/lib/esm/TransformElementsTool.js +16 -413
  46. package/lib/esm/TransformElementsTool.js.map +1 -1
  47. package/lib/esm/UndoRedoTool.js.map +1 -1
  48. package/lib/esm/editor-frontend.d.ts +0 -6
  49. package/lib/esm/editor-frontend.d.ts.map +1 -1
  50. package/lib/esm/editor-frontend.js +0 -6
  51. package/lib/esm/editor-frontend.js.map +1 -1
  52. package/lib/public/locales/en/Editor.json +79 -490
  53. package/package.json +14 -14
  54. package/lib/cjs/DeleteElementsTool.d.ts +0 -14
  55. package/lib/cjs/DeleteElementsTool.d.ts.map +0 -1
  56. package/lib/cjs/DeleteElementsTool.js +0 -42
  57. package/lib/cjs/DeleteElementsTool.js.map +0 -1
  58. package/lib/cjs/ElementGeometryTool.d.ts +0 -148
  59. package/lib/cjs/ElementGeometryTool.d.ts.map +0 -1
  60. package/lib/cjs/ElementGeometryTool.js +0 -705
  61. package/lib/cjs/ElementGeometryTool.js.map +0 -1
  62. package/lib/cjs/ModifyCurveTools.d.ts +0 -140
  63. package/lib/cjs/ModifyCurveTools.d.ts.map +0 -1
  64. package/lib/cjs/ModifyCurveTools.js +0 -777
  65. package/lib/cjs/ModifyCurveTools.js.map +0 -1
  66. package/lib/cjs/SketchTools.d.ts +0 -308
  67. package/lib/cjs/SketchTools.d.ts.map +0 -1
  68. package/lib/cjs/SketchTools.js +0 -1708
  69. package/lib/cjs/SketchTools.js.map +0 -1
  70. package/lib/cjs/SolidModelingTools.d.ts +0 -381
  71. package/lib/cjs/SolidModelingTools.d.ts.map +0 -1
  72. package/lib/cjs/SolidModelingTools.js +0 -1453
  73. package/lib/cjs/SolidModelingTools.js.map +0 -1
  74. package/lib/cjs/SolidPrimitiveTools.d.ts +0 -322
  75. package/lib/cjs/SolidPrimitiveTools.d.ts.map +0 -1
  76. package/lib/cjs/SolidPrimitiveTools.js +0 -1376
  77. package/lib/cjs/SolidPrimitiveTools.js.map +0 -1
  78. package/lib/esm/DeleteElementsTool.d.ts +0 -14
  79. package/lib/esm/DeleteElementsTool.d.ts.map +0 -1
  80. package/lib/esm/DeleteElementsTool.js +0 -39
  81. package/lib/esm/DeleteElementsTool.js.map +0 -1
  82. package/lib/esm/ElementGeometryTool.d.ts +0 -148
  83. package/lib/esm/ElementGeometryTool.d.ts.map +0 -1
  84. package/lib/esm/ElementGeometryTool.js +0 -697
  85. package/lib/esm/ElementGeometryTool.js.map +0 -1
  86. package/lib/esm/ModifyCurveTools.d.ts +0 -140
  87. package/lib/esm/ModifyCurveTools.d.ts.map +0 -1
  88. package/lib/esm/ModifyCurveTools.js +0 -772
  89. package/lib/esm/ModifyCurveTools.js.map +0 -1
  90. package/lib/esm/SketchTools.d.ts +0 -308
  91. package/lib/esm/SketchTools.d.ts.map +0 -1
  92. package/lib/esm/SketchTools.js +0 -1704
  93. package/lib/esm/SketchTools.js.map +0 -1
  94. package/lib/esm/SolidModelingTools.d.ts +0 -381
  95. package/lib/esm/SolidModelingTools.d.ts.map +0 -1
  96. package/lib/esm/SolidModelingTools.js +0 -1445
  97. package/lib/esm/SolidModelingTools.js.map +0 -1
  98. package/lib/esm/SolidPrimitiveTools.d.ts +0 -322
  99. package/lib/esm/SolidPrimitiveTools.d.ts.map +0 -1
  100. package/lib/esm/SolidPrimitiveTools.js +0 -1372
  101. package/lib/esm/SolidPrimitiveTools.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModifyCurveTools.js","sourceRoot":"","sources":["../../src/ModifyCurveTools.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 { DialogItem, DialogProperty, DialogPropertySyncItem, EnumerationChoice, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\r\nimport { CompressedId64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BentleyError, Code, ElementGeometry, ElementGeometryInfo, ElementGeometryOpcode, FlatBufferGeometryStream, GeometricElementProps,\r\n GeometryParams, JsonGeometryStream,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n AccuDrawHintBuilder, BeButtonEvent, IModelApp,\r\n LengthDescription, NotifyMessageDetails, OutputMessagePriority, ToolAssistanceInstruction,\r\n} from \"@itwin/core-frontend\";\r\nimport {\r\n AngleSweep, AnyRegion, Arc3d, AxisOrder, CurveChainWithDistanceIndex, CurveCollection, CurveLocationDetail, CurvePrimitive, FrameBuilder, Geometry, GeometryQuery, JointOptions, LineSegment3d, LineString3d, Loop, Matrix3d,\r\n Path, Plane3dByOriginAndUnitNormal, Point3d, RegionBinaryOpType, RegionOps, SignedLoops, UnionRegion, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { EditTools } from \"./EditTool\";\r\nimport { basicManipulationIpc } from \"./EditToolIpc\";\r\nimport { ModifyElementWithDynamicsTool } from \"./ModifyElementTool\";\r\n\r\n/** @alpha */\r\nexport class CurveData {\r\n public props: GeometricElementProps;\r\n public params: GeometryParams;\r\n public geom: CurveCollection | CurvePrimitive;\r\n\r\n constructor(props: GeometricElementProps, params: GeometryParams, geom: CurveCollection | CurvePrimitive) {\r\n this.props = props;\r\n this.params = params;\r\n this.geom = geom;\r\n }\r\n}\r\n\r\n/** @alpha Base class for modifying all types of curve geometry. */\r\nexport abstract class ModifyCurveTool extends ModifyElementWithDynamicsTool {\r\n protected _startedCmd?: string;\r\n protected curveData?: CurveData;\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>({ commandId: editorBuiltInCmdIds.cmdBasicManipulation, iModelKey: this.iModel.key });\r\n }\r\n\r\n public static isSingleCurve(info: ElementGeometryInfo): { curve: CurveCollection | CurvePrimitive, params: GeometryParams } | undefined {\r\n const it = new ElementGeometry.Iterator(info);\r\n it.requestWorldCoordinates();\r\n\r\n for (const entry of it) {\r\n const geom = entry.toGeometryQuery();\r\n if (undefined === geom)\r\n return;\r\n\r\n if (\"curvePrimitive\" === geom.geometryCategory) {\r\n return { curve: geom as CurvePrimitive, params: entry.geomParams };\r\n } else if (\"curveCollection\" === geom.geometryCategory) {\r\n return { curve: geom as CurveCollection, params: entry.geomParams };\r\n }\r\n\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n\r\n public static isInPlane(curve: CurveCollection | CurvePrimitive, plane: Plane3dByOriginAndUnitNormal): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return curve.isInPlane(plane);\r\n\r\n if (!curve.children)\r\n return false;\r\n\r\n for (const child of curve.children) {\r\n if (child instanceof CurvePrimitive) {\r\n if (!child.isInPlane(plane))\r\n return false;\r\n } else if (child instanceof CurveCollection) {\r\n if (!this.isInPlane(child, plane))\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected acceptCurve(_curve: CurveCollection | CurvePrimitive): boolean { return true; }\r\n protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined { return undefined; }\r\n\r\n protected async getCurveData(id: Id64String): Promise<CurveData | undefined> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const reject: ElementGeometryOpcode[] = [ElementGeometryOpcode.Polyface, ElementGeometryOpcode.SolidPrimitive, ElementGeometryOpcode.BsplineSurface, ElementGeometryOpcode.BRep];\r\n const info = await basicManipulationIpc.requestElementGeometry(id, { maxDisplayable: 1, reject, geometry: { curves: true, surfaces: true, solids: false } });\r\n if (undefined === info)\r\n return undefined;\r\n\r\n const data = ModifyCurveTool.isSingleCurve(info);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n if (!this.acceptCurve(data.curve))\r\n return undefined;\r\n\r\n const props = await this.iModel.elements.loadProps(id) as GeometricElementProps;\r\n if (undefined === props)\r\n return undefined;\r\n\r\n return new CurveData(props, data.params, data.curve);\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err)));\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override async doAcceptElementForOperation(id: Id64String): Promise<boolean> {\r\n return (undefined !== await this.getCurveData(id));\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n this.curveData = undefined;\r\n if (this.agenda.isEmpty)\r\n return;\r\n\r\n const id = this.agenda.elements[this.agenda.length - 1];\r\n this.curveData = await this.getCurveData(id);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.enableSmartRotation = true;\r\n hints.sendHints(false);\r\n }\r\n\r\n protected getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined {\r\n if (undefined === this.curveData)\r\n return;\r\n\r\n const geom = this.modifyCurve(ev, isAccept);\r\n if (undefined === geom)\r\n return;\r\n\r\n const builder = new ElementGeometry.Builder();\r\n builder.setLocalToWorldFromPlacement(this.curveData.props.placement!);\r\n\r\n if (!builder.appendGeometryParamsChange(this.curveData.params))\r\n return;\r\n\r\n if (!builder.appendGeometryQuery(geom))\r\n return;\r\n\r\n return { format: \"flatbuffer\", data: builder.entries };\r\n }\r\n\r\n protected getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined {\r\n if (undefined === this.curveData)\r\n return;\r\n\r\n if (!this.wantModifyOriginal) {\r\n // Create result as new element with same model and category as original...\r\n const classFullName = (ev.viewport?.view.is3d() ? \"Generic:PhysicalObject\" : \"BisCore:DrawingGraphic\");\r\n return { classFullName, model: this.curveData.props.model, category: this.curveData.props.category, code: Code.createEmpty(), placement: this.curveData.props.placement };\r\n }\r\n\r\n return this.curveData.props;\r\n }\r\n\r\n protected override async doUpdateElement(elemProps: GeometricElementProps): Promise<boolean> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (undefined === elemProps.id) {\r\n const repeatOperation = this.wantContinueWithPreviousResult;\r\n if (repeatOperation)\r\n this.agenda.clear();\r\n\r\n const newId = await basicManipulationIpc.insertGeometricElement(elemProps);\r\n\r\n if (repeatOperation && this.agenda.add(newId))\r\n await this.onAgendaModified();\r\n } else {\r\n await basicManipulationIpc.updateGeometricElement(elemProps);\r\n }\r\n return true;\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n return false;\r\n }\r\n }\r\n\r\n protected get wantModifyOriginal(): boolean { return true; }\r\n protected get wantContinueWithPreviousResult(): boolean { return false; }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n // Don't restart tool want to continue operation using previous result...\r\n if (this.wantContinueWithPreviousResult && !this.agenda.isEmpty && undefined !== this.curveData)\r\n return;\r\n return super.onProcessComplete();\r\n }\r\n}\r\n\r\n/** @alpha Tool for applying an offset to paths and loops. */\r\nexport class OffsetCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"OffsetCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n private _useDistanceProperty: DialogProperty<boolean> | undefined;\r\n public get useDistanceProperty() {\r\n if (!this._useDistanceProperty)\r\n this._useDistanceProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useOffsetDistance\"), false);\r\n return this._useDistanceProperty;\r\n }\r\n\r\n public get useDistance(): boolean { return this.useDistanceProperty.value; }\r\n public set useDistance(value: boolean) { this.useDistanceProperty.value = value; }\r\n\r\n private _distanceProperty: DialogProperty<number> | undefined;\r\n public get distanceProperty() {\r\n if (!this._distanceProperty)\r\n this._distanceProperty = new DialogProperty<number>(new LengthDescription(\"offsetDistance\", EditTools.translate(\"OffsetCurve.Label.Distance\")), 0.1, undefined, !this.useDistance);\r\n return this._distanceProperty;\r\n }\r\n\r\n public get distance(): number { return this.distanceProperty.value; }\r\n public set distance(value: number) { this.distanceProperty.value = value; }\r\n\r\n private _makeCopyProperty: DialogProperty<boolean> | undefined;\r\n public get makeCopyProperty() {\r\n if (!this._makeCopyProperty)\r\n this._makeCopyProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"offsetCopy\", EditTools.translate(\"OffsetCurve.Label.MakeCopy\")), false);\r\n return this._makeCopyProperty;\r\n }\r\n\r\n public get makeCopy(): boolean { return this.makeCopyProperty.value; }\r\n public set makeCopy(value: boolean) { this.makeCopyProperty.value = value; }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n return (property === this.useDistanceProperty ? this.distanceProperty : undefined);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.makeCopyProperty, this.useDistanceProperty, this.distanceProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n // ensure controls are enabled/disabled based on current lock property state\r\n this.distanceProperty.isDisabled = !this.useDistance;\r\n const useDistanceLock = this.useDistanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.distanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useDistanceLock));\r\n toolSettings.push(this.makeCopyProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return true;\r\n\r\n return (curve.isOpenPath || curve.isClosedPath);\r\n }\r\n\r\n protected override modifyCurve(ev: BeButtonEvent, isAccept: boolean): GeometryQuery | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const worldToLocal = localToWorld.inverse();\r\n if (undefined === worldToLocal)\r\n return undefined;\r\n\r\n const geomXY = ((geom instanceof CurvePrimitive) ? Path.create(geom) : geom).cloneTransformed(worldToLocal);\r\n if (undefined === geomXY)\r\n return undefined;\r\n\r\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, localToWorld.getOrigin(), localToWorld.matrix.getColumn(2), ev.viewport);\r\n if (undefined === spacePoint)\r\n return undefined;\r\n\r\n worldToLocal.multiplyPoint3d(spacePoint, spacePoint);\r\n spacePoint.z = 0.0;\r\n\r\n const closeDetail = geomXY.closestPoint(spacePoint);\r\n if (undefined === closeDetail?.curve)\r\n return undefined;\r\n\r\n const unitZ = Vector3d.unitZ();\r\n const unitX = closeDetail.curve.fractionToPointAndUnitTangent(closeDetail.fraction).direction;\r\n const unitY = unitZ.unitCrossProduct(unitX);\r\n\r\n if (undefined === unitY)\r\n return undefined;\r\n\r\n let distance = closeDetail.point.distance(spacePoint);\r\n const refDir = Vector3d.createStartEnd(closeDetail.point, spacePoint);\r\n\r\n if (refDir.dotProduct(unitY) < 0.0)\r\n distance = -distance;\r\n\r\n let offset = 0.0;\r\n\r\n if (this.useDistance) {\r\n offset = this.distance;\r\n if ((offset < 0.0 && distance > 0.0) || (offset > 0.0 && distance < 0.0))\r\n offset = -offset;\r\n } else {\r\n offset = distance;\r\n }\r\n\r\n if (Math.abs(offset) < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offset !== this.distance) {\r\n this.distance = offset;\r\n this.syncToolSettingPropertyValue(this.distanceProperty);\r\n if (isAccept)\r\n this.saveToolSettingPropertyValue(this.distanceProperty, this.distanceProperty.dialogItemValue);\r\n }\r\n\r\n const jointOptions = new JointOptions(offset);\r\n jointOptions.preserveEllipticalArcs = true;\r\n\r\n const offsetGeom = RegionOps.constructCurveXYOffset(geomXY as Path | Loop, jointOptions);\r\n if (undefined === offsetGeom)\r\n return undefined;\r\n\r\n if (!offsetGeom.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n\r\n if (geom instanceof CurvePrimitive && offsetGeom instanceof Path && 1 === offsetGeom.children.length)\r\n return offsetGeom.getChild(0); // Don't create path for offset of single open curve...\r\n\r\n return offsetGeom;\r\n }\r\n\r\n protected override get wantModifyOriginal(): boolean {\r\n return !this.makeCopy;\r\n }\r\n\r\n protected override get wantContinueWithPreviousResult(): boolean {\r\n return !this.wantModifyOriginal;\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (this.agenda.isEmpty) {\r\n hints.enableSmartRotation = true;\r\n } else if (undefined !== this.anchorPoint && undefined !== this.targetView) {\r\n const geom = this.curveData?.geom;\r\n const closeDetail = (geom instanceof CurvePrimitive) ? geom.closestPoint(this.anchorPoint, false) : geom?.closestPoint(this.anchorPoint);\r\n\r\n if (undefined !== closeDetail?.curve) {\r\n const unitX = closeDetail.curve.fractionToPointAndUnitTangent(closeDetail.fraction).direction;\r\n\r\n if (undefined !== unitX) {\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(this.targetView, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n\r\n if (undefined !== localToWorld) {\r\n const unitZ = localToWorld.matrix.getColumn(2);\r\n const frame = Matrix3d.createRigidFromColumns(unitX, unitZ, AxisOrder.XZY);\r\n\r\n if (undefined !== frame) {\r\n hints.setOrigin(closeDetail.point);\r\n hints.setMatrix(frame);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n hints.sendHints(false);\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"OffsetCurve.Prompts.DefineOffset\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Tool for opening loops and splitting paths. */\r\nexport class BreakCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"BreakCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n protected resultA?: CurveCollection | CurvePrimitive;\r\n protected resultB?: CurveCollection | CurvePrimitive;\r\n protected modifyOriginal = true;\r\n\r\n protected override get wantDynamics(): boolean { return false; }\r\n protected override get wantModifyOriginal(): boolean { return this.modifyOriginal; }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return true;\r\n\r\n return (curve.isOpenPath || curve.isClosedPath);\r\n }\r\n\r\n protected doBreakCurve(ev: BeButtonEvent): void {\r\n this.resultA = this.resultB = undefined;\r\n\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return;\r\n\r\n const closeDetail = (geom instanceof CurvePrimitive) ? geom.closestPoint(ev.point, false) : geom.closestPoint(ev.point);\r\n if (undefined === closeDetail?.curve)\r\n return;\r\n\r\n const selectedStart = (closeDetail.fraction <= Geometry.smallFraction);\r\n const selectedEnd = (closeDetail.fraction >= (1.0 - Geometry.smallFraction));\r\n\r\n if (geom instanceof CurvePrimitive) {\r\n if (selectedStart || selectedEnd)\r\n return; // split is no-op...\r\n\r\n this.resultA = geom.clonePartialCurve(0.0, closeDetail.fraction);\r\n this.resultB = geom.clonePartialCurve(closeDetail.fraction, 1.0);\r\n return;\r\n } else if (geom instanceof Path) {\r\n const firstCurve = geom.children[0];\r\n const lastCurve = geom.children[geom.children.length - 1];\r\n\r\n if ((closeDetail.curve === firstCurve && selectedStart) || (closeDetail.curve === lastCurve && selectedEnd))\r\n return; // split is no-op...\r\n\r\n let beforeCurve = true;\r\n const resultA = Path.create();\r\n const resultB = Path.create();\r\n\r\n for (const curve of geom.children) {\r\n if (curve === closeDetail.curve) {\r\n if (selectedStart) {\r\n resultB.children.push(curve.clone());\r\n } else if (selectedEnd) {\r\n resultA.children.push(curve.clone());\r\n } else {\r\n const curveA = curve.clonePartialCurve(0.0, closeDetail.fraction);\r\n if (undefined !== curveA)\r\n resultA.children.push(curveA);\r\n\r\n const curveB = curve.clonePartialCurve(closeDetail.fraction, 1.0);\r\n if (undefined !== curveB)\r\n resultB.children.push(curveB);\r\n }\r\n beforeCurve = false;\r\n } else {\r\n if (beforeCurve)\r\n resultA.children.push(curve.clone());\r\n else\r\n resultB.children.push(curve.clone());\r\n }\r\n }\r\n\r\n this.resultA = resultA;\r\n this.resultB = resultB;\r\n } else if (geom instanceof Loop) {\r\n const closeIndex = geom.children.findIndex((child) => child === closeDetail.curve);\r\n if (-1 === closeIndex)\r\n return;\r\n\r\n const endIndex = closeIndex + geom.children.length;\r\n const resultA = Path.create(); // Result is always a single path...\r\n\r\n if (selectedStart) {\r\n resultA.children.push(closeDetail.curve.clone());\r\n } else if (!selectedEnd) {\r\n const curveB = closeDetail.curve.clonePartialCurve(closeDetail.fraction, 1.0);\r\n if (undefined !== curveB)\r\n resultA.children.push(curveB);\r\n }\r\n\r\n for (let index = closeIndex; index < endIndex; ++index) {\r\n const curve = geom.cyclicCurvePrimitive(index);\r\n if (undefined === curve || curve === closeDetail.curve)\r\n continue;\r\n\r\n resultA.children.push(curve.clone());\r\n }\r\n\r\n if (selectedEnd) {\r\n resultA.children.push(closeDetail.curve.clone());\r\n } else if (!selectedStart) {\r\n const curveA = closeDetail.curve.clonePartialCurve(0.0, closeDetail.fraction);\r\n if (undefined !== curveA)\r\n resultA.children.push(curveA);\r\n }\r\n\r\n this.resultA = resultA;\r\n }\r\n }\r\n\r\n protected override modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined {\r\n return (this.wantModifyOriginal ? this.resultA : this.resultB);\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n this.doBreakCurve(ev);\r\n if (undefined === this.resultA || !await this.applyAgendaOperation(ev))\r\n return;\r\n\r\n if (undefined !== this.resultB) {\r\n this.modifyOriginal = false;\r\n await this.applyAgendaOperation(ev);\r\n }\r\n\r\n return this.saveChanges();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"BreakCurve.Prompts.IdentifyBreak\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new BreakCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Tool to extend or trim a path or open curve */\r\nexport class ExtendCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"ExtendCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n protected modifyingEnd?: CurvePrimitive;\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return curve.isExtensibleFractionSpace;\r\n\r\n return curve.isOpenPath;\r\n }\r\n\r\n protected extendCurve(geom: CurvePrimitive, pickPoint: Point3d, spacePoint: Point3d): CurvePrimitive | undefined {\r\n const pickDetail = geom.closestPoint(pickPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return undefined;\r\n\r\n const closeDetail = geom.closestPoint(spacePoint, true);\r\n if (undefined === closeDetail?.curve)\r\n return undefined;\r\n\r\n if (closeDetail.curve instanceof Arc3d) {\r\n if (pickDetail.fraction > 0.5 && closeDetail.fraction < 0.0) {\r\n const smallArc = closeDetail.curve.clonePartialCurve(closeDetail.fraction, 0.0);\r\n smallArc.sweep.cloneComplement(false, smallArc.sweep);\r\n return smallArc;\r\n } else if (pickDetail.fraction <= 0.5 && closeDetail.fraction > 1.0) {\r\n const smallArc = closeDetail.curve.clonePartialCurve(1.0, closeDetail.fraction);\r\n smallArc.sweep.cloneComplement(false, smallArc.sweep);\r\n return smallArc;\r\n } else if (Math.abs(pickDetail.fraction > 0.5 ? closeDetail.fraction : 1.0 - closeDetail.fraction) < Geometry.smallFraction) {\r\n const fullArc = closeDetail.curve.clone();\r\n fullArc.sweep = AngleSweep.create360();\r\n return fullArc;\r\n }\r\n }\r\n\r\n return geom.clonePartialCurve(pickDetail.fraction > 0.5 ? 0.0 : 1.0, closeDetail.fraction);\r\n }\r\n\r\n protected extendPathEnd(geom: Path, closeDetail: CurveLocationDetail, isStart: boolean): Path | undefined {\r\n if (undefined === closeDetail.curve)\r\n return undefined;\r\n\r\n const curve = closeDetail.curve.clonePartialCurve(isStart ? closeDetail.fraction : 0.0, isStart ? 1.0 : closeDetail.fraction);\r\n if (undefined === curve)\r\n return undefined;\r\n\r\n if (curve instanceof Arc3d && closeDetail.curve instanceof Arc3d && (curve.sweep.isCCW !== closeDetail.curve.sweep.isCCW))\r\n curve.sweep.cloneComplement(true, curve.sweep); // Preserve current sweep direction...\r\n\r\n const result = geom.clone() as Path;\r\n result.children[isStart ? 0 : geom.children.length - 1] = curve;\r\n\r\n return result;\r\n }\r\n\r\n protected extendPath(geom: Path, pickPoint: Point3d, spacePoint: Point3d): Path | CurvePrimitive | undefined {\r\n if (geom.children.length < 2)\r\n return this.extendCurve(geom.children[0], pickPoint, spacePoint);\r\n\r\n const pathAsPrimitive = CurveChainWithDistanceIndex.createCapture(geom);\r\n const closeDetail = pathAsPrimitive.closestPoint(spacePoint, true);\r\n if (undefined === closeDetail?.curve || undefined === closeDetail.childDetail?.curve)\r\n return undefined;\r\n\r\n if (undefined !== this.modifyingEnd) {\r\n if (closeDetail.childDetail.curve === this.modifyingEnd) {\r\n this.modifyingEnd = undefined; // Ok to unlock extending first/last curve in path...\r\n } else {\r\n const pathEndDetail = this.modifyingEnd.closestPoint(spacePoint, true);\r\n if (undefined === pathEndDetail?.curve)\r\n return undefined;\r\n return this.extendPathEnd(geom, pathEndDetail, (pathEndDetail.curve === geom.children[0]));\r\n }\r\n }\r\n\r\n // NOTE: Special case extend instead of using CurveChainWithDistanceIndex.clonePartialCurve...\r\n if (closeDetail.fraction < 0.0) {\r\n this.modifyingEnd = closeDetail.childDetail.curve;\r\n return this.extendPathEnd(geom, closeDetail.childDetail, true);\r\n } else if (closeDetail.fraction > 1.0) {\r\n this.modifyingEnd = closeDetail.childDetail.curve;\r\n return this.extendPathEnd(geom, closeDetail.childDetail, false);\r\n }\r\n\r\n const pickDetail = pathAsPrimitive.closestPoint(pickPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return undefined;\r\n\r\n const result = pathAsPrimitive.clonePartialCurve(pickDetail.fraction > 0.5 ? 0.0 : 1.0, closeDetail.fraction);\r\n if (undefined === result)\r\n return undefined;\r\n\r\n return Path.create(...result.path.children);\r\n }\r\n\r\n protected override modifyCurve(ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined {\r\n if (undefined === ev.viewport || undefined === this.anchorPoint)\r\n return undefined;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const worldToLocal = localToWorld.inverse();\r\n if (undefined === worldToLocal)\r\n return undefined;\r\n\r\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, localToWorld.getOrigin(), localToWorld.matrix.getColumn(2), ev.viewport);\r\n if (undefined === spacePoint)\r\n return undefined;\r\n\r\n if (geom instanceof CurvePrimitive)\r\n return this.extendCurve(geom, this.anchorPoint, spacePoint);\r\n else if (geom instanceof Path)\r\n return this.extendPath(geom, this.anchorPoint, spacePoint);\r\n\r\n return undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n IModelApp.accuSnap.neverFlash(this.agenda.elements); // Don't flash snapped segment for better preview when trimming curve/path...\r\n return super.onAgendaModified();\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (this.agenda.isEmpty) {\r\n hints.enableSmartRotation = true;\r\n } else {\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom || undefined === this.anchorPoint)\r\n return;\r\n\r\n let pickDetail;\r\n if (geom instanceof CurvePrimitive)\r\n pickDetail = geom.closestPoint(this.anchorPoint, false);\r\n else if (geom instanceof Path)\r\n pickDetail = CurveChainWithDistanceIndex.createCapture(geom).closestPoint(this.anchorPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return;\r\n\r\n const curve = (undefined !== pickDetail.childDetail?.curve ? pickDetail.childDetail?.curve : pickDetail.curve);\r\n\r\n if (curve instanceof Arc3d) {\r\n const matrix = curve.matrixClone();\r\n matrix.normalizeColumnsInPlace();\r\n hints.setOrigin(curve.center);\r\n hints.setMatrix(matrix);\r\n hints.setModePolar();\r\n } else if (curve instanceof LineSegment3d) {\r\n hints.setOrigin(pickDetail.fraction > 0.5 ? curve.point0Ref : curve.point1Ref);\r\n hints.setXAxis(Vector3d.createStartEnd(pickDetail.fraction > 0.5 ? curve.point0Ref : curve.point1Ref, pickDetail.fraction > 0.5 ? curve.point1Ref : curve.point0Ref));\r\n hints.setModeRectangular();\r\n } else if (curve instanceof LineString3d) {\r\n if (curve.numPoints() > 1) {\r\n hints.setOrigin(curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 2 : 1));\r\n hints.setXAxis(Vector3d.createStartEnd(curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 2 : 1), curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 1 : 0)));\r\n }\r\n hints.setModeRectangular();\r\n } else {\r\n const ray = curve.fractionToPointAndUnitTangent(pickDetail.fraction > 0.5 ? 0.0 : 1.0);\r\n hints.setOrigin(ray.origin);\r\n hints.setXAxis(ray.direction);\r\n hints.setModeRectangular();\r\n }\r\n }\r\n hints.sendHints(false);\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"ExtendCurve.Prompts.IdentifyEnd\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ExtendCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum RegionBooleanMode {\r\n /** Create region from union of all input regions */\r\n Unite = 0,\r\n /** Create region from subtraction from the first input region */\r\n Subtract = 1,\r\n /** Create region from intersection of all input regions */\r\n Intersect = 2,\r\n}\r\n\r\n/** @alpha Tool to unite, subtract, or intersect planar regions. */\r\nexport class RegionBooleanTool extends ModifyCurveTool {\r\n public static override toolId = \"RegionBoolean\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n private _makeCopyProperty: DialogProperty<boolean> | undefined;\r\n public get makeCopyProperty() {\r\n if (!this._makeCopyProperty)\r\n this._makeCopyProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"regionBooleanKeep\", EditTools.translate(\"RegionBoolean.Label.KeepOriginal\")), false);\r\n return this._makeCopyProperty;\r\n }\r\n\r\n public get makeCopy(): boolean { return this.makeCopyProperty.value; }\r\n public set makeCopy(value: boolean) { this.makeCopyProperty.value = value; }\r\n\r\n private static modeMessage(str: string) { return EditTools.translate(`RegionBoolean.Mode.${str}`); }\r\n private static getModeChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RegionBooleanTool.modeMessage(\"Unite\"), value: RegionBooleanMode.Unite },\r\n { label: RegionBooleanTool.modeMessage(\"Subtract\"), value: RegionBooleanMode.Subtract },\r\n { label: RegionBooleanTool.modeMessage(\"Intersect\"), value: RegionBooleanMode.Intersect },\r\n ];\r\n };\r\n\r\n private _modeProperty: DialogProperty<number> | undefined;\r\n public get modeProperty() {\r\n if (!this._modeProperty)\r\n this._modeProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"regionBooleanMode\", EditTools.translate(\"RegionBoolean.Label.Mode\"), RegionBooleanTool.getModeChoices()), RegionBooleanMode.Unite as number);\r\n return this._modeProperty;\r\n }\r\n\r\n public get mode(): RegionBooleanMode { return this.modeProperty.value as RegionBooleanMode; }\r\n public set mode(mode: RegionBooleanMode) { this.modeProperty.value = mode; }\r\n\r\n protected override get clearSelectionSet(): boolean { return false; } // Don't clear for subtract so that mode can be changed...\r\n protected override get allowSelectionSet(): boolean { return RegionBooleanMode.Subtract !== this.mode; }\r\n protected override get allowDragSelect(): boolean { return RegionBooleanMode.Subtract !== this.mode; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get wantAccuSnap(): boolean { return false; }\r\n protected override get wantDynamics(): boolean { return false; }\r\n protected override get wantModifyOriginal(): boolean { return !this.makeCopy; }\r\n\r\n protected override async onAgendaModified(): Promise<void> { } // No intermediate result preview, defer to processAgenda...\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return false;\r\n\r\n return curve.isAnyRegionType;\r\n }\r\n\r\n private regionBinaryOp(): RegionBinaryOpType {\r\n switch (this.mode) {\r\n case RegionBooleanMode.Subtract:\r\n return RegionBinaryOpType.AMinusB;\r\n case RegionBooleanMode.Intersect:\r\n return RegionBinaryOpType.Intersection;\r\n default:\r\n return RegionBinaryOpType.Union;\r\n }\r\n }\r\n\r\n private regionFromSignedLoops(loops: SignedLoops): AnyRegion | undefined {\r\n switch (loops.negativeAreaLoops.length) {\r\n case 0:\r\n return undefined;\r\n case 1:\r\n return loops.negativeAreaLoops[0];\r\n default:\r\n return RegionOps.sortOuterAndHoleLoopsXY(loops.negativeAreaLoops);\r\n }\r\n }\r\n\r\n private regionBooleanXY(tools: AnyRegion[], op: RegionBinaryOpType): AnyRegion | undefined {\r\n if (tools.length < 2)\r\n return undefined;\r\n\r\n const loopsA = (RegionBinaryOpType.Union !== op ? tools[0] : tools);\r\n const loopsB = (RegionBinaryOpType.Union !== op ? tools.slice(1) : undefined);\r\n\r\n // TODO: Need to be able to specify group operation for loopsB to correctly support intersect w/o doing 2 at time...\r\n const areas = RegionOps.regionBooleanXY(loopsA, loopsB, op);\r\n if (undefined === areas)\r\n return undefined;\r\n\r\n // TODO: Holes are expected to be returned as negative area loops but currently are not...\r\n const loops = RegionOps.constructAllXYRegionLoops(areas);\r\n\r\n if (1 === loops.length)\r\n return this.regionFromSignedLoops(loops[0]);\r\n\r\n if (loops.length > 1) {\r\n const unionRegion = UnionRegion.create();\r\n\r\n for (const loop of loops) {\r\n const child = this.regionFromSignedLoops(loop);\r\n if (undefined === child)\r\n continue;\r\n\r\n unionRegion.tryAddChild(child);\r\n }\r\n\r\n if (unionRegion.children.length > 1)\r\n return unionRegion;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected async doRegionBoolean(_ev: BeButtonEvent): Promise<void> {\r\n this.curveData = undefined;\r\n\r\n if (this.agenda.length < this.requiredElementCount)\r\n return;\r\n\r\n const targetData = await this.getCurveData(this.agenda.elements[0]);\r\n if (undefined === targetData?.geom)\r\n return;\r\n\r\n const targetLocalToWorld = FrameBuilder.createRightHandedFrame(undefined, targetData.geom);\r\n if (undefined === targetLocalToWorld)\r\n return;\r\n\r\n const targetWorldToLocal = targetLocalToWorld.inverse();\r\n if (undefined === targetWorldToLocal)\r\n return;\r\n\r\n const targetPlane = Plane3dByOriginAndUnitNormal.create(targetLocalToWorld.getOrigin(), targetLocalToWorld.matrix.getColumn(2));\r\n if (undefined === targetPlane)\r\n return;\r\n\r\n if (!targetData.geom.tryTransformInPlace(targetWorldToLocal))\r\n return;\r\n\r\n const tools: AnyRegion[] = [targetData.geom as AnyRegion];\r\n\r\n for (const id of this.agenda.elements) {\r\n if (id === targetData.props.id)\r\n continue;\r\n\r\n const curveData = await this.getCurveData(id);\r\n if (undefined === curveData?.geom)\r\n return;\r\n\r\n if (!ModifyCurveTool.isInPlane(curveData.geom, targetPlane)) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, EditTools.translate(\"RegionBoolean.Error.NonCoplanar\")));\r\n return;\r\n }\r\n\r\n if (!curveData.geom.tryTransformInPlace(targetWorldToLocal))\r\n return;\r\n\r\n tools.push(curveData.geom as AnyRegion);\r\n }\r\n\r\n const result = this.regionBooleanXY(tools, this.regionBinaryOp());\r\n if (undefined === result || !result.tryTransformInPlace(targetLocalToWorld))\r\n return;\r\n\r\n this.curveData = targetData;\r\n this.curveData.geom = result;\r\n }\r\n\r\n protected override modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined {\r\n return this.curveData?.geom;\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent): Promise<boolean> {\r\n if (!await super.applyAgendaOperation(ev))\r\n return false;\r\n\r\n if (this.wantModifyOriginal && this.agenda.length > 1)\r\n await basicManipulationIpc.deleteElements(CompressedId64Set.sortAndCompress(this.agenda.elements.slice(1)));\r\n\r\n return true;\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n await this.doRegionBoolean(ev);\r\n return super.processAgenda(ev);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RegionBooleanTool();\r\n if (!await tool.run())\r\n return this.exitTool();\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.modeProperty.name === updatedValue.propertyName)\r\n await this.onReinitialize();\r\n\r\n return true;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.makeCopyProperty, this.modeProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n toolSettings.push(this.modeProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\r\n toolSettings.push(this.makeCopyProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n}\r\n"]}
@@ -1,308 +0,0 @@
1
- /** @packageDocumentation
2
- * @module Editing
3
- */
4
- import { DialogItem, DialogProperty, DialogPropertySyncItem } from "@itwin/appui-abstract";
5
- import { Id64String } from "@itwin/core-bentley";
6
- import { ElementGeometryBuilderParams, ElementGeometryInfo, FlatBufferGeometryStream, GeometricElementProps, GeometryParams, GeometryStreamProps, JsonGeometryStream, PlacementProps } from "@itwin/core-common";
7
- import { BeButtonEvent, BeModifierKeys, DecorateContext, DynamicsContext, EventHandled, HitDetail, SnapDetail, ToolAssistanceInstruction } from "@itwin/core-frontend";
8
- import { CurvePrimitive, GeometryQuery, Matrix3d, Path, Point3d, Transform, Vector3d } from "@itwin/core-geometry";
9
- import { CreateElementWithDynamicsTool } from "./CreateElementTool";
10
- /** @alpha Values for [[CreateOrContinueTool.createCurvePhase] to support join and closure. */
11
- export declare enum CreateCurvePhase {
12
- /** Current tool phase changes CurvePrimitive startPoint.
13
- * ex. Arc defined by center, start would return this when accepted length is 1.
14
- */
15
- DefineStart = 0,
16
- /** Current tool phase changes CurvePrimitive endPoint.
17
- * ex. Arc defined by start, end, mid would return this when accepted length is 1.
18
- */
19
- DefineEnd = 1,
20
- /** Current tool phase does NOT change CurvePrimitive startPoint or endPoint.
21
- * ex. When defining arc mid point, or start and end tangents for a bcurve return this.
22
- */
23
- DefineOther = 2
24
- }
25
- /** @alpha Base class for creating open and closed paths. */
26
- export declare abstract class CreateOrContinuePathTool extends CreateElementWithDynamicsTool {
27
- protected _createCurvePhase: CreateCurvePhase;
28
- protected readonly accepted: Point3d[];
29
- protected current?: CurvePrimitive;
30
- protected continuationData?: {
31
- props: GeometricElementProps;
32
- path: Path;
33
- params: GeometryParams;
34
- };
35
- protected isClosed: boolean;
36
- protected isConstruction: boolean;
37
- protected _snapGeomId?: Id64String;
38
- protected _startedCmd?: string;
39
- protected startCommand(): Promise<string>;
40
- protected get allowJoin(): boolean;
41
- protected get allowClosure(): boolean;
42
- protected get allowSimplify(): boolean;
43
- protected get wantSmartRotation(): boolean;
44
- protected get wantPickableDynamics(): boolean;
45
- protected get wantJoin(): boolean;
46
- protected get wantClosure(): boolean;
47
- protected get wantSimplify(): boolean;
48
- protected get showCurveConstructions(): boolean;
49
- protected get showJoin(): boolean;
50
- protected get showClosure(): boolean;
51
- protected get createCurvePhase(): CreateCurvePhase;
52
- /** Sub-classes should override unless they don't support join or closure. */
53
- protected updateCurvePhase(): void;
54
- /** Implemented by sub-classes to create the new curve or construction curve for placement dynamics.
55
- * @param ev The current button event from a click or motion event.
56
- * @param isDynamics true when called for dynamics and the point from ev should be included in the result curve.
57
- * @internal
58
- */
59
- protected abstract createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
60
- protected getCurrentRotation(ev: BeButtonEvent): Matrix3d;
61
- protected getUpVector(ev: BeButtonEvent): Vector3d;
62
- protected updateCurveAndContinuationData(ev: BeButtonEvent, isDynamics: boolean): Promise<void>;
63
- protected updateElementData(ev: BeButtonEvent, isDynamics: boolean): Promise<void>;
64
- protected updateDynamicData(ev: BeButtonEvent): Promise<boolean>;
65
- protected get isContinueExistingPath(): boolean;
66
- protected isValidForContinue(snap: SnapDetail): Promise<{
67
- props: GeometricElementProps;
68
- path: Path;
69
- params: GeometryParams;
70
- } | undefined>;
71
- protected isValidForJoin(): Promise<boolean>;
72
- protected isValidForClosure(): Promise<boolean>;
73
- static isSingleOpenPath(info: ElementGeometryInfo): {
74
- path: Path;
75
- params: GeometryParams;
76
- } | undefined;
77
- static isPathEndPoint(curve: CurvePrimitive, path: Path): boolean;
78
- static isPathClosurePoint(curve: CurvePrimitive, path?: Path): boolean;
79
- protected addConstructionGraphics(curve: CurvePrimitive, showCurve: boolean, context: DynamicsContext): void;
80
- protected showConstructionGraphics(_ev: BeButtonEvent, context: DynamicsContext): boolean;
81
- onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void;
82
- protected showJoinIndicator(context: DecorateContext, pt: Point3d): void;
83
- protected showClosureIndicator(context: DecorateContext, pt: Point3d): void;
84
- testDecorationHit(id: Id64String): boolean;
85
- getToolTip(hit: HitDetail): Promise<HTMLElement | string>;
86
- protected getSnapGeometry(): GeometryQuery | undefined;
87
- getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined;
88
- protected addPickableGraphics(context: DecorateContext): void;
89
- decorate(context: DecorateContext): void;
90
- onModifierKeyTransition(_wentDown: boolean, modifier: BeModifierKeys, _event: KeyboardEvent): Promise<EventHandled>;
91
- protected getPlacementProps(): PlacementProps | undefined;
92
- protected createNewPath(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;
93
- protected continueExistingPath(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;
94
- protected getGeometryProps(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;
95
- protected getElementProps(placement: PlacementProps): GeometricElementProps | undefined;
96
- protected doCreateElement(props: GeometricElementProps, data?: ElementGeometryBuilderParams): Promise<void>;
97
- protected setupAccuDraw(): void;
98
- onUndoPreviousStep(): Promise<boolean>;
99
- onPostInstall(): Promise<void>;
100
- }
101
- /** @alpha Creates a line string or shape. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */
102
- export declare class CreateLineStringTool extends CreateOrContinuePathTool {
103
- static toolId: string;
104
- static iconSpec: string;
105
- protected get wantPickableDynamics(): boolean;
106
- protected provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void;
107
- protected get wantClosure(): boolean;
108
- protected updateCurvePhase(): void;
109
- protected isComplete(ev: BeButtonEvent): boolean;
110
- protected createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
111
- protected cancelPoint(ev: BeButtonEvent): Promise<boolean>;
112
- onRestartTool(): Promise<void>;
113
- }
114
- /** @alpha */
115
- export declare enum ArcMethod {
116
- CenterStart = 0,
117
- StartCenter = 1,
118
- StartMidEnd = 2,
119
- StartEndMid = 3
120
- }
121
- /** @alpha Creates an arc. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */
122
- export declare class CreateArcTool extends CreateOrContinuePathTool {
123
- static toolId: string;
124
- static iconSpec: string;
125
- static get minArgs(): number;
126
- static get maxArgs(): number;
127
- protected get showCurveConstructions(): boolean;
128
- protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void;
129
- protected setupAccuDraw(): void;
130
- private static methodMessage;
131
- private static getMethodChoices;
132
- private _methodProperty;
133
- get methodProperty(): DialogProperty<number>;
134
- get method(): ArcMethod;
135
- set method(method: ArcMethod);
136
- private _useRadiusProperty;
137
- get useRadiusProperty(): DialogProperty<boolean>;
138
- get useRadius(): boolean;
139
- set useRadius(value: boolean);
140
- private _radiusProperty;
141
- get radiusProperty(): DialogProperty<number>;
142
- get radius(): number;
143
- set radius(value: number);
144
- private _useSweepProperty;
145
- get useSweepProperty(): DialogProperty<boolean>;
146
- get useSweep(): boolean;
147
- set useSweep(value: boolean);
148
- private _sweepProperty;
149
- get sweepProperty(): DialogProperty<number>;
150
- get sweep(): number;
151
- set sweep(value: number);
152
- protected isComplete(_ev: BeButtonEvent): boolean;
153
- protected updateCurvePhase(): void;
154
- protected createConstructionCurve(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
155
- protected createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
156
- private syncToolSettingsRadiusAndSweep;
157
- protected getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined;
158
- applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
159
- supplyToolSettingsProperties(): DialogItem[] | undefined;
160
- onRestartTool(): Promise<void>;
161
- onInstall(): Promise<boolean>;
162
- /** The keyin takes the following arguments, all of which are optional:
163
- * - `method=0|1|2|3` How arc will be defined. 0 for center/start, 1 for start/center, 2 for start/mid/end, and 3 for start/end/mid.
164
- * - `radius=number` Arc radius for start/center or center/start, 0 to define by points.
165
- * - `sweep=number` Arc sweep angle in degrees for start/center or center/start, 0 to define by points.
166
- */
167
- parseAndRun(...inputArgs: string[]): Promise<boolean>;
168
- }
169
- /** @alpha */
170
- export declare enum CircleMethod {
171
- Center = 0,
172
- Edge = 1
173
- }
174
- /** @alpha Creates a circle. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */
175
- export declare class CreateCircleTool extends CreateOrContinuePathTool {
176
- static toolId: string;
177
- static iconSpec: string;
178
- static get minArgs(): number;
179
- static get maxArgs(): number;
180
- protected get showCurveConstructions(): boolean;
181
- protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void;
182
- protected setupAccuDraw(): void;
183
- private static methodMessage;
184
- private static getMethodChoices;
185
- private _methodProperty;
186
- get methodProperty(): DialogProperty<number>;
187
- get method(): CircleMethod;
188
- set method(method: CircleMethod);
189
- private _useRadiusProperty;
190
- get useRadiusProperty(): DialogProperty<boolean>;
191
- get useRadius(): boolean;
192
- set useRadius(value: boolean);
193
- private _radiusProperty;
194
- get radiusProperty(): DialogProperty<number>;
195
- get radius(): number;
196
- set radius(value: number);
197
- protected isComplete(_ev: BeButtonEvent): boolean;
198
- protected createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
199
- protected cancelPoint(_ev: BeButtonEvent): Promise<boolean>;
200
- protected getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined;
201
- applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
202
- supplyToolSettingsProperties(): DialogItem[] | undefined;
203
- onRestartTool(): Promise<void>;
204
- onReinitialize(): Promise<void>;
205
- onPostInstall(): Promise<void>;
206
- onInstall(): Promise<boolean>;
207
- /** The keyin takes the following arguments, all of which are optional:
208
- * - `method=0|1` How circle will be defined. 0 for center, 1 for edge.
209
- * - `radius=number` Circle radius, 0 to define by points.
210
- */
211
- parseAndRun(...inputArgs: string[]): Promise<boolean>;
212
- }
213
- /** @alpha Creates an ellipse. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */
214
- export declare class CreateEllipseTool extends CreateOrContinuePathTool {
215
- static toolId: string;
216
- static iconSpec: string;
217
- protected isComplete(_ev: BeButtonEvent): boolean;
218
- protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void;
219
- protected setupAccuDraw(): void;
220
- protected createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
221
- onRestartTool(): Promise<void>;
222
- }
223
- /** @alpha Creates a rectangle by corner points. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */
224
- export declare class CreateRectangleTool extends CreateOrContinuePathTool {
225
- static toolId: string;
226
- static iconSpec: string;
227
- protected localToWorld: Transform;
228
- protected originLocal?: Point3d;
229
- protected cornerLocal?: Point3d;
230
- static get minArgs(): number;
231
- static get maxArgs(): number;
232
- protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void;
233
- protected setupAccuDraw(): void;
234
- private _useRadiusProperty;
235
- get useRadiusProperty(): DialogProperty<boolean>;
236
- get useRadius(): boolean;
237
- set useRadius(value: boolean);
238
- private _radiusProperty;
239
- get radiusProperty(): DialogProperty<number>;
240
- get radius(): number;
241
- set radius(value: number);
242
- protected isComplete(_ev: BeButtonEvent): boolean;
243
- protected createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
244
- protected createNewPath(placement: PlacementProps): JsonGeometryStream | FlatBufferGeometryStream | undefined;
245
- protected getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined;
246
- applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
247
- supplyToolSettingsProperties(): DialogItem[] | undefined;
248
- onRestartTool(): Promise<void>;
249
- onInstall(): Promise<boolean>;
250
- /** The keyin takes the following arguments, all of which are optional:
251
- * - `radius=number` Corner radius, 0 for sharp corners.
252
- */
253
- parseAndRun(...inputArgs: string[]): Promise<boolean>;
254
- }
255
- /** @alpha */
256
- export declare enum BCurveMethod {
257
- ControlPoints = 0,
258
- ThroughPoints = 1
259
- }
260
- /** @alpha Creates a bspline curve by poles or through points. Uses model and category from [[BriefcaseConnection.editorToolSettings]]. */
261
- export declare class CreateBCurveTool extends CreateOrContinuePathTool {
262
- static toolId: string;
263
- static iconSpec: string;
264
- protected _isPhysicallyClosedOrComplete: boolean;
265
- protected _tangentPhase: CreateCurvePhase;
266
- static get minArgs(): number;
267
- static get maxArgs(): number;
268
- protected get wantPickableDynamics(): boolean;
269
- protected get showCurveConstructions(): boolean;
270
- protected provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void;
271
- private static methodMessage;
272
- private static getMethodChoices;
273
- private _methodProperty;
274
- get methodProperty(): DialogProperty<number>;
275
- get method(): BCurveMethod;
276
- set method(method: BCurveMethod);
277
- private _orderProperty;
278
- get orderProperty(): DialogProperty<number>;
279
- get order(): number;
280
- set order(value: number);
281
- protected get minOrder(): number;
282
- protected get maxOrder(): number;
283
- private _tangentsProperty;
284
- get tangentsProperty(): DialogProperty<boolean>;
285
- get tangents(): boolean;
286
- set tangents(value: boolean);
287
- protected get wantClosure(): boolean;
288
- protected get requiredPointCount(): number;
289
- protected get createCurvePhase(): CreateCurvePhase;
290
- protected updateCurvePhase(): void;
291
- protected isComplete(ev: BeButtonEvent): boolean;
292
- protected showConstructionGraphics(ev: BeButtonEvent, context: DynamicsContext): boolean;
293
- protected createNewCurvePrimitive(ev: BeButtonEvent, isDynamics: boolean): CurvePrimitive | undefined;
294
- protected getSnapGeometry(): GeometryQuery | undefined;
295
- protected acceptPoint(ev: BeButtonEvent): Promise<boolean>;
296
- protected cancelPoint(ev: BeButtonEvent): Promise<boolean>;
297
- applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
298
- supplyToolSettingsProperties(): DialogItem[] | undefined;
299
- onRestartTool(): Promise<void>;
300
- onInstall(): Promise<boolean>;
301
- /** The keyin takes the following arguments, all of which are optional:
302
- * - `method=0|1` How bcurve will be defined. 0 for control points, 1 for through points.
303
- * - `order=number` bcurve order from 2 to 16.
304
- * - 'tangents=0|1 Whether to specify start/end tangents for through points construction.
305
- */
306
- parseAndRun(...inputArgs: string[]): Promise<boolean>;
307
- }
308
- //# sourceMappingURL=SketchTools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SketchTools.d.ts","sourceRoot":"","sources":["../../src/SketchTools.ts"],"names":[],"mappings":"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"}