@itwin/editor-frontend 4.5.0-dev.8 → 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.
- package/CHANGELOG.md +51 -1
- package/LICENSE.md +1 -1
- package/README.md +0 -29
- package/lib/cjs/CreateElementTool.d.ts +64 -2
- package/lib/cjs/CreateElementTool.d.ts.map +1 -1
- package/lib/cjs/CreateElementTool.js +65 -4
- package/lib/cjs/CreateElementTool.js.map +1 -1
- package/lib/cjs/EditTool.d.ts +5 -0
- package/lib/cjs/EditTool.d.ts.map +1 -1
- package/lib/cjs/EditTool.js +10 -14
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/EditToolIpc.d.ts +1 -5
- package/lib/cjs/EditToolIpc.d.ts.map +1 -1
- package/lib/cjs/EditToolIpc.js +1 -5
- package/lib/cjs/EditToolIpc.js.map +1 -1
- package/lib/cjs/TransformElementsTool.d.ts +17 -98
- package/lib/cjs/TransformElementsTool.d.ts.map +1 -1
- package/lib/cjs/TransformElementsTool.js +15 -412
- package/lib/cjs/TransformElementsTool.js.map +1 -1
- package/lib/cjs/editor-frontend.d.ts +0 -6
- package/lib/cjs/editor-frontend.d.ts.map +1 -1
- package/lib/cjs/editor-frontend.js +0 -6
- package/lib/cjs/editor-frontend.js.map +1 -1
- package/lib/esm/CreateElementTool.d.ts +64 -2
- package/lib/esm/CreateElementTool.d.ts.map +1 -1
- package/lib/esm/CreateElementTool.js +65 -4
- package/lib/esm/CreateElementTool.js.map +1 -1
- package/lib/esm/EditTool.d.ts +5 -0
- package/lib/esm/EditTool.d.ts.map +1 -1
- package/lib/esm/EditTool.js +10 -14
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/EditToolIpc.d.ts +1 -5
- package/lib/esm/EditToolIpc.d.ts.map +1 -1
- package/lib/esm/EditToolIpc.js +0 -4
- package/lib/esm/EditToolIpc.js.map +1 -1
- package/lib/esm/TransformElementsTool.d.ts +17 -98
- package/lib/esm/TransformElementsTool.d.ts.map +1 -1
- package/lib/esm/TransformElementsTool.js +16 -413
- package/lib/esm/TransformElementsTool.js.map +1 -1
- package/lib/esm/editor-frontend.d.ts +0 -6
- package/lib/esm/editor-frontend.d.ts.map +1 -1
- package/lib/esm/editor-frontend.js +0 -6
- package/lib/esm/editor-frontend.js.map +1 -1
- package/lib/public/locales/en/Editor.json +0 -411
- package/package.json +14 -14
- package/lib/cjs/DeleteElementsTool.d.ts +0 -14
- package/lib/cjs/DeleteElementsTool.d.ts.map +0 -1
- package/lib/cjs/DeleteElementsTool.js +0 -42
- package/lib/cjs/DeleteElementsTool.js.map +0 -1
- package/lib/cjs/ElementGeometryTool.d.ts +0 -148
- package/lib/cjs/ElementGeometryTool.d.ts.map +0 -1
- package/lib/cjs/ElementGeometryTool.js +0 -705
- package/lib/cjs/ElementGeometryTool.js.map +0 -1
- package/lib/cjs/ModifyCurveTools.d.ts +0 -140
- package/lib/cjs/ModifyCurveTools.d.ts.map +0 -1
- package/lib/cjs/ModifyCurveTools.js +0 -777
- package/lib/cjs/ModifyCurveTools.js.map +0 -1
- package/lib/cjs/SketchTools.d.ts +0 -308
- package/lib/cjs/SketchTools.d.ts.map +0 -1
- package/lib/cjs/SketchTools.js +0 -1708
- package/lib/cjs/SketchTools.js.map +0 -1
- package/lib/cjs/SolidModelingTools.d.ts +0 -381
- package/lib/cjs/SolidModelingTools.d.ts.map +0 -1
- package/lib/cjs/SolidModelingTools.js +0 -1453
- package/lib/cjs/SolidModelingTools.js.map +0 -1
- package/lib/cjs/SolidPrimitiveTools.d.ts +0 -322
- package/lib/cjs/SolidPrimitiveTools.d.ts.map +0 -1
- package/lib/cjs/SolidPrimitiveTools.js +0 -1376
- package/lib/cjs/SolidPrimitiveTools.js.map +0 -1
- package/lib/esm/DeleteElementsTool.d.ts +0 -14
- package/lib/esm/DeleteElementsTool.d.ts.map +0 -1
- package/lib/esm/DeleteElementsTool.js +0 -39
- package/lib/esm/DeleteElementsTool.js.map +0 -1
- package/lib/esm/ElementGeometryTool.d.ts +0 -148
- package/lib/esm/ElementGeometryTool.d.ts.map +0 -1
- package/lib/esm/ElementGeometryTool.js +0 -697
- package/lib/esm/ElementGeometryTool.js.map +0 -1
- package/lib/esm/ModifyCurveTools.d.ts +0 -140
- package/lib/esm/ModifyCurveTools.d.ts.map +0 -1
- package/lib/esm/ModifyCurveTools.js +0 -772
- package/lib/esm/ModifyCurveTools.js.map +0 -1
- package/lib/esm/SketchTools.d.ts +0 -308
- package/lib/esm/SketchTools.d.ts.map +0 -1
- package/lib/esm/SketchTools.js +0 -1704
- package/lib/esm/SketchTools.js.map +0 -1
- package/lib/esm/SolidModelingTools.d.ts +0 -381
- package/lib/esm/SolidModelingTools.d.ts.map +0 -1
- package/lib/esm/SolidModelingTools.js +0 -1445
- package/lib/esm/SolidModelingTools.js.map +0 -1
- package/lib/esm/SolidPrimitiveTools.d.ts +0 -322
- package/lib/esm/SolidPrimitiveTools.d.ts.map +0 -1
- package/lib/esm/SolidPrimitiveTools.js +0 -1372
- package/lib/esm/SolidPrimitiveTools.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolidModelingTools.js","sourceRoot":"","sources":["../../src/SolidModelingTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, EnumerationChoice, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { ColorDef, ElementGeometry } from \"@itwin/core-common\";\nimport {\n AccuDraw, AccuDrawHintBuilder, AngleDescription, BeButtonEvent, DecorateContext, DynamicsContext, EventHandled, GraphicType, HitDetail, IModelApp,\n LengthDescription, TentativeOrAccuSnap,\n} from \"@itwin/core-frontend\";\nimport { Angle, Geometry, LineString3d, Matrix3d, Point3d, Vector3d, XYZProps } from \"@itwin/core-geometry\";\nimport {\n BlendEdgesProps, BooleanMode, BooleanOperationProps, BRepEntityType, ChamferEdgesProps, ChamferMode, CutDepthMode, CutDirectionMode, CutProps,\n DeleteSubEntityProps, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EmbossDirectionMode, EmbossProps,\n HollowFacesProps, ImprintProps, LoftProps, OffsetFacesProps, ProfileClosure, SewSheetProps, SpinFacesProps, SubEntityFilter, SubEntityLocationProps,\n SubEntityProps, SubEntityType, SweepFacesProps, SweepPathProps, ThickenSheetProps,\n} from \"@itwin/editor-common\";\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\nimport { EditTools } from \"./EditTool\";\nimport { ElementGeometryCacheTool, isSameSubEntity, LocateSubEntityTool, SubEntityData } from \"./ElementGeometryTool\";\nimport { solidModelingIpc } from \"./EditToolIpc\";\n\n/** @alpha Base class for tools that perform boolean operations on a set of elements. */\nexport abstract class BooleanOperationTool extends ElementGeometryCacheTool {\n protected abstract get mode(): BooleanMode;\n protected override get allowSelectionSet(): boolean { return BooleanMode.Subtract !== this.mode; }\n protected override get allowDragSelect(): boolean { return BooleanMode.Subtract !== this.mode; }\n protected override get controlKeyContinuesSelection(): boolean { return true; }\n protected override get requiredElementCount(): number { return 2; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: BooleanMode.Subtract === this.mode && !this.agenda.isEmpty, solids: true, other: false };\n }\n\n protected override async onAgendaModified(): Promise<void> {\n // Filter changes to allow surfaces as tools, invalidate cached accept status...\n if (BooleanMode.Subtract === this.mode && (this.agenda.isEmpty || 1 === this.agenda.length))\n this.onGeometryCacheFilterChanged();\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const tools: Id64Array = this.agenda.elements.slice(1);\n const params: BooleanOperationProps = { mode: this.mode, tools };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.booleanOperation(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n}\n\n/** @alpha Perform boolean union of solid geometry. */\nexport class UniteSolidElementsTool extends BooleanOperationTool {\n public static override toolId = \"UniteSolids\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get mode(): BooleanMode { return BooleanMode.Unite; }\n\n public async onRestartTool(): Promise<void> {\n const tool = new UniteSolidElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Perform boolean subtract of solid geometry. */\nexport class SubtractSolidElementsTool extends BooleanOperationTool {\n public static override toolId = \"SubtractSolids\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get mode(): BooleanMode { return BooleanMode.Subtract; }\n\n public async onRestartTool(): Promise<void> {\n const tool = new SubtractSolidElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Perform boolean intersection of solid geometry. */\nexport class IntersectSolidElementsTool extends BooleanOperationTool {\n public static override toolId = \"IntersectSolids\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get mode(): BooleanMode { return BooleanMode.Intersect; }\n\n public async onRestartTool(): Promise<void> {\n const tool = new IntersectSolidElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Perform sew operation on surface geometry. */\nexport class SewSheetElementsTool extends ElementGeometryCacheTool {\n public static override toolId = \"SewSheets\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get allowSelectionSet(): boolean { return true; }\n protected override get allowDragSelect(): boolean { return true; }\n protected override get controlKeyContinuesSelection(): boolean { return true; }\n protected override get requiredElementCount(): number { return 2; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const tools: Id64Array = this.agenda.elements.slice(1);\n const params: SewSheetProps = { tools };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.sewSheets(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new SewSheetElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Perform thicken operation on surface geometry. */\nexport class ThickenSheetElementsTool extends ElementGeometryCacheTool {\n public static override toolId = \"ThickenSheets\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n private _frontDistanceProperty: DialogProperty<number> | undefined;\n public get frontDistanceProperty() {\n if (!this._frontDistanceProperty)\n this._frontDistanceProperty = new DialogProperty<number>(new LengthDescription(\"thickenFront\", EditTools.translate(\"ThickenSheets.Label.FrontDistance\")), 0.1, undefined);\n return this._frontDistanceProperty;\n }\n\n public get frontDistance(): number { return this.frontDistanceProperty.value; }\n public set frontDistance(value: number) { this.frontDistanceProperty.value = value; }\n\n private _backDistanceProperty: DialogProperty<number> | undefined;\n public get backDistanceProperty() {\n if (!this._backDistanceProperty)\n this._backDistanceProperty = new DialogProperty<number>(new LengthDescription(\"thickenBack\", EditTools.translate(\"ThickenSheets.Label.BackDistance\")), 0.0, undefined);\n return this._backDistanceProperty;\n }\n\n public get backDistance(): number { return this.backDistanceProperty.value; }\n public set backDistance(value: number) { this.backDistanceProperty.value = value; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const params: ThickenSheetProps = { front: this.frontDistance, back: this.backDistance };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.thickenSheets(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.frontDistanceProperty, this.backDistanceProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.frontDistanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n toolSettings.push(this.backDistanceProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new ThickenSheetElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Perform cut operation on solid using region or path profile. */\nexport class CutSolidElementsTool extends ElementGeometryCacheTool {\n public static override toolId = \"CutSolids\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n protected targetPoint?: Point3d;\n protected toolPoint?: Point3d;\n\n private _bothDirectionsProperty: DialogProperty<boolean> | undefined;\n public get bothDirectionsProperty() {\n if (!this._bothDirectionsProperty)\n this._bothDirectionsProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"cutBothDirections\", EditTools.translate(\"CutSolids.Label.BothDirections\")), false);\n return this._bothDirectionsProperty;\n }\n\n public get bothDirections(): boolean { return this.bothDirectionsProperty.value; }\n public set bothDirections(value: boolean) { this.bothDirectionsProperty.value = value; }\n\n private _outsideProperty: DialogProperty<boolean> | undefined;\n public get outsideProperty() {\n if (!this._outsideProperty)\n this._outsideProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"cutOutside\", EditTools.translate(\"CutSolids.Label.Outside\")), false);\n return this._outsideProperty;\n }\n\n public get outside(): boolean { return this.outsideProperty.value; }\n public set outside(value: boolean) { this.outsideProperty.value = value; }\n\n private _useDepthProperty: DialogProperty<boolean> | undefined;\n public get useDepthProperty() {\n if (!this._useDepthProperty)\n this._useDepthProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useCutDepth\"), false);\n return this._useDepthProperty;\n }\n\n public get useDepth(): boolean { return this.useDepthProperty.value; }\n public set useDepth(value: boolean) { this.useDepthProperty.value = value; }\n\n private _depthProperty: DialogProperty<number> | undefined;\n public get depthProperty() {\n if (!this._depthProperty)\n this._depthProperty = new DialogProperty<number>(new LengthDescription(\"cutDepth\", EditTools.translate(\"CutSolids.Label.Depth\")), 0.1, undefined, !this.useDepth);\n return this._depthProperty;\n }\n\n public get depth(): number { return this.depthProperty.value; }\n public set depth(value: number) { this.depthProperty.value = value; }\n\n protected override get requiredElementCount(): number { return 2; }\n protected get isProfilePhase(): boolean { return !this.agenda.isEmpty; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n const profilePhase = this.isProfilePhase;\n return { minGeom: 1, maxGeom: profilePhase ? 1 : undefined, parts: true, curves: profilePhase, surfaces: profilePhase, solids: !profilePhase, other: false };\n }\n\n protected override async createElementGeometryCache(id: Id64String): Promise<boolean> {\n if (!await super.createElementGeometryCache(id))\n return false;\n\n if (!this.isProfilePhase)\n return true;\n\n try {\n this._startedCmd = await this.startCommand();\n return await solidModelingIpc.isPlanarBody(id, 0);\n } catch (err) {\n return false;\n }\n }\n\n protected override async onAgendaModified(): Promise<void> {\n // Filter changes to allow sheets and wires as profiles, invalidate cached accept status...\n if (this.agenda.isEmpty || 1 === this.agenda.length)\n this.onGeometryCacheFilterChanged();\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n const direction = (this.bothDirections ? CutDirectionMode.Both : CutDirectionMode.Auto);\n const depth = (this.useDepth ? CutDepthMode.Blind : CutDepthMode.All);\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const profile = this.agenda.elements[1];\n const params: CutProps = { profile, direction, depth, distance: this.depth, outside: this.outside ? true : undefined, closeOpen: ProfileClosure.Auto, targetPoint: this.targetPoint, toolPoint: this.toolPoint };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.cutSolid(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n\n protected override async buildLocateAgenda(hit: HitDetail): Promise<boolean> {\n if (this.isProfilePhase)\n this.toolPoint = hit.hitPoint;\n else\n this.targetPoint = hit.hitPoint;\n\n return super.buildLocateAgenda(hit);\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n return (property === this.useDepthProperty ? this.depthProperty : undefined);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.bothDirectionsProperty, this.outsideProperty, this.useDepthProperty, this.depthProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.bothDirectionsProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n toolSettings.push(this.outsideProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n\n // ensure controls are enabled/disabled based on current lock property state\n this.depthProperty.isDisabled = !this.useDepth;\n const useDepthLock = this.useDepthProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 });\n toolSettings.push(this.depthProperty.toDialogItem({ rowPriority: 3, columnIndex: 1 }, useDepthLock));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new CutSolidElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Perform emboss operation on solid or sheet using sheet profile. */\nexport class EmbossSolidElementsTool extends ElementGeometryCacheTool {\n public static override toolId = \"EmbossSolids\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n protected targetPoint?: Point3d;\n\n protected override get requiredElementCount(): number { return 2; }\n protected get isProfilePhase(): boolean { return !this.agenda.isEmpty; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n const profilePhase = this.isProfilePhase;\n return { minGeom: 1, maxGeom: 1, parts: true, curves: false, surfaces: true, solids: !profilePhase, other: false };\n }\n\n protected override async onAgendaModified(): Promise<void> {\n // Filter changes to disallow solids as profiles, invalidate cached accept status...\n if (this.agenda.isEmpty || 1 === this.agenda.length)\n this.onGeometryCacheFilterChanged();\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const profile = this.agenda.elements[1];\n const params: EmbossProps = { profile, direction: EmbossDirectionMode.Auto, targetPoint: this.targetPoint };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.embossBody(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n\n protected override async buildLocateAgenda(hit: HitDetail): Promise<boolean> {\n if (!this.isProfilePhase)\n this.targetPoint = hit.hitPoint;\n\n return super.buildLocateAgenda(hit);\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new EmbossSolidElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Create a solid for sheet by sweeping a profile along a path. */\nexport class SweepAlongPathTool extends ElementGeometryCacheTool {\n public static override toolId = \"SweepAlongPath\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get requiredElementCount(): number { return 2; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { minGeom: 1, maxGeom: 1, parts: true, curves: true, surfaces: true, solids: false, other: false };\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const path = this.agenda.elements[1];\n const params: SweepPathProps = { path };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.sweepAlongPath(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new SweepAlongPathTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Create a new sheet or solid body by lofting through a set of profiles. */\nexport class LoftProfilesTool extends ElementGeometryCacheTool {\n public static override toolId = \"LoftProfiles\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get requiredElementCount(): number { return 2; }\n protected override get controlKeyContinuesSelection(): boolean { return true; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { minGeom: 1, maxGeom: 1, parts: true, curves: true, surfaces: true, solids: false, other: false };\n }\n\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\n if (this.agenda.length < this.requiredElementCount)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const target = this.agenda.elements[0];\n const tools = this.agenda.elements.slice(1);\n const params: LoftProps = { tools, orderCurves: this.isSelectionSetModify ? true : undefined, orientCurves: true };\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.loftProfiles(target, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\n const result = await this.applyAgendaOperation();\n if (result?.elementId)\n await this.saveChanges();\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new LoftProfilesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha */\nexport class FaceLocationData {\n public point: Point3d;\n public normal: Vector3d;\n\n constructor(point: Point3d, normal: Vector3d) {\n this.point = point;\n this.normal = normal;\n }\n\n public static create(pointProps: XYZProps, normalProps: XYZProps) {\n const point = Point3d.fromJSON(pointProps);\n const normal = Vector3d.fromJSON(normalProps);\n return new FaceLocationData(point, normal);\n }\n}\n\n/** @alpha Identify faces of solids and surfaces to offset. */\nexport class OffsetFacesTool extends LocateSubEntityTool {\n public static override toolId = \"OffsetFaces\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n private _addSmoothProperty: DialogProperty<boolean> | undefined;\n public get addSmoothProperty() {\n if (!this._addSmoothProperty)\n this._addSmoothProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"offsetSmooth\", EditTools.translate(\"OffsetFaces.Label.AddSmooth\")), false);\n return this._addSmoothProperty;\n }\n\n public get addSmooth(): boolean { return this.addSmoothProperty.value; }\n public set addSmooth(value: boolean) { this.addSmoothProperty.value = value; }\n\n private _useDistanceProperty: DialogProperty<boolean> | undefined;\n public get useDistanceProperty() {\n if (!this._useDistanceProperty)\n this._useDistanceProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useOffsetDistance\"), false);\n return this._useDistanceProperty;\n }\n\n public get useDistance(): boolean { return this.useDistanceProperty.value; }\n public set useDistance(value: boolean) { this.useDistanceProperty.value = value; }\n\n private _distanceProperty: DialogProperty<number> | undefined;\n public get distanceProperty() {\n if (!this._distanceProperty)\n this._distanceProperty = new DialogProperty<number>(new LengthDescription(\"offsetDistance\", EditTools.translate(\"OffsetFaces.Label.Distance\")), 0.1, undefined, !this.useDistance);\n return this._distanceProperty;\n }\n\n public get distance(): number { return this.distanceProperty.value; }\n public set distance(value: number) { this.distanceProperty.value = value; }\n\n protected override get wantDynamics(): boolean { return true; }\n protected override get wantAccuSnap(): boolean { return this.isDynamicsStarted; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\n }\n\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\n const data = await super.createSubEntityData(id, hit);\n\n if (undefined !== hit.point && undefined !== hit.normal)\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\n\n return data;\n }\n\n protected override drawAcceptedSubEntities(context: DecorateContext): void {\n super.drawAcceptedSubEntities(context);\n\n // Show pick point on last identified face, offset direction/distance will be computed from this location...\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\n if (undefined === faceData)\n return;\n\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 10);\n builder.addPointString([faceData.point]);\n\n context.addDecorationFromBuilder(builder);\n }\n\n protected async getSmoothFaces(id: Id64String, face: SubEntityProps): Promise<SubEntityProps[] | undefined> {\n try {\n // NOTE: For offset, include all smoothly connected faces, not just adjacent...\n return await solidModelingIpc.getConnectedSubEntities(id, face, SubEntityType.Face, { smoothFaces: true });\n } catch (err) {\n return undefined;\n }\n }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\n return undefined;\n\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\n if (undefined === faceData)\n return undefined;\n\n const projPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, faceData.point, faceData.normal, ev.viewport);\n\n if (undefined === projPt)\n return undefined;\n\n const offsetDir = Vector3d.createStartEnd(faceData.point, projPt);\n\n if (this.useDistance && undefined === offsetDir.scaleToLength(this.distance, offsetDir))\n return undefined;\n\n let offset = offsetDir.magnitude();\n\n if (offset < Geometry.smallMetricDistance)\n return undefined;\n\n if (offsetDir.dotProduct(faceData.normal) < 0.0)\n offset = -offset;\n\n if (!this.useDistance) {\n this.distance = offset;\n this.syncToolSettingPropertyValue(this.distanceProperty);\n if (isAccept)\n this.saveToolSettingPropertyValue(this.distanceProperty, this.distanceProperty.dialogItemValue);\n }\n\n try {\n this._startedCmd = await this.startCommand();\n const id = this.agenda.elements[0];\n\n const faces = this.getAcceptedSubEntities();\n\n if (this.addSmooth) {\n const allSmoothFaces: SubEntityProps[] = [];\n\n for (const face of faces) {\n const smoothFaces = await this.getSmoothFaces(id, face);\n if (undefined !== smoothFaces)\n allSmoothFaces.push(...smoothFaces);\n }\n\n for (const smooth of allSmoothFaces) {\n if (undefined === faces.find((selected) => isSameSubEntity(selected, smooth)))\n faces.unshift(smooth); // Preserve last selected entry as reference face...\n }\n }\n\n const params: OffsetFacesProps = { faces, distances: offset };\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${id}`,\n writeChanges: isAccept ? true : undefined,\n };\n return await solidModelingIpc.offsetFaces(id, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n protected override setupAccuDraw(): void {\n if (!this.haveAcceptedSubEntities)\n return;\n\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\n if (undefined === faceData)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setOriginFixed = true;\n hints.setLockY = true;\n hints.setLockZ = true;\n hints.setModeRectangular();\n hints.setOrigin(faceData.point);\n hints.setXAxis2(faceData.normal);\n hints.sendHints(false);\n }\n\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\n return (property === this.useDistanceProperty ? this.distanceProperty : undefined);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.addSmoothProperty, this.useDistanceProperty, this.distanceProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n // ensure controls are enabled/disabled based on current lock property state\n this.distanceProperty.isDisabled = !this.useDistance;\n const useDistanceLock = this.useDistanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.distanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useDistanceLock));\n toolSettings.push(this.addSmoothProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new OffsetFacesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Identify faces to offset to hollow solids. */\nexport class HollowFacesTool extends LocateSubEntityTool {\n public static override toolId = \"HollowFaces\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n private _shellThicknessProperty: DialogProperty<number> | undefined;\n public get shellThicknessProperty() {\n if (!this._shellThicknessProperty)\n this._shellThicknessProperty = new DialogProperty<number>(new LengthDescription(\"hollowShellThickness\", EditTools.translate(\"HollowFaces.Label.ShellThickness\")), 0.1, undefined);\n return this._shellThicknessProperty;\n }\n\n public get shellThickness(): number { return this.shellThicknessProperty.value; }\n public set shellThickness(value: number) { this.shellThicknessProperty.value = value; }\n\n private _faceThicknessProperty: DialogProperty<number> | undefined;\n public get faceThicknessProperty() {\n if (!this._faceThicknessProperty)\n this._faceThicknessProperty = new DialogProperty<number>(new LengthDescription(\"hollowFaceThickness\", EditTools.translate(\"HollowFaces.Label.FaceThickness\")), 0.0, undefined);\n return this._faceThicknessProperty;\n }\n\n public get faceThickness(): number { return this.faceThicknessProperty.value; }\n public set faceThickness(value: number) { this.faceThicknessProperty.value = value; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: false, solids: true, other: false };\n }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const params: HollowFacesProps = { faces: this.getAcceptedSubEntities(), distances: this.faceThickness, defaultDistance: this.shellThickness };\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\n writeChanges: isAccept ? true : undefined,\n };\n return await solidModelingIpc.hollowFaces(this.agenda.elements[0], params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.shellThicknessProperty, this.faceThicknessProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.shellThicknessProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n toolSettings.push(this.faceThicknessProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new HollowFacesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Identify faces or edges for removal by growing surrounding faces. */\nexport class DeleteSubEntitiesTool extends LocateSubEntityTool {\n public static override toolId = \"DeleteSubEntities\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override wantSubEntityType(type: SubEntityType): boolean {\n switch (type) {\n case SubEntityType.Face:\n case SubEntityType.Edge:\n // Choose all faces or all edges...\n return (0 === this._acceptedSubEntities.length || this._acceptedSubEntities[0].props.type === type);\n default:\n return false;\n }\n }\n\n protected override getMaximumSubEntityHits(type: SubEntityType): number {\n if (!this.wantSubEntityType(type))\n return 0;\n\n // Only return single closest edge, avoids having to test for redundant edges on reset...\n return (SubEntityType.Edge === type ? 1 : 25);\n }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\n }\n\n protected override async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\n const hits = await super.doPickSubEntities(id, ev);\n\n if (undefined === hits)\n return hits;\n\n // Don't allow reset to select a back edge...\n if (SubEntityType.Face === hits[0].subEntity.type)\n return hits.filter((hit) => { return SubEntityType.Face === hit.subEntity.type; });\n\n try {\n const accept = await solidModelingIpc.isRedundantEdge(id, hits[0].subEntity);\n\n if (accept)\n return hits;\n\n if (hits.length > 1 && SubEntityType.Face === hits[1].subEntity.type)\n return hits.slice(1); // Accept face of rejected edge...\n\n return undefined;\n } catch (err) {\n return undefined;\n }\n }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const params: DeleteSubEntityProps = { subEntities: this.getAcceptedSubEntities() };\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\n writeChanges: isAccept ? true : undefined,\n };\n return await solidModelingIpc.deleteSubEntities(this.agenda.elements[0], params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new DeleteSubEntitiesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha */\nexport enum ImprintSolidMethod {\n /** Imprint intersection with another element */\n Element = 0,\n /** Imprint offset edges onto face */\n Edges = 1,\n /** Imprint line string defined by points onto face */\n Points = 2,\n}\n\n/** @alpha Identify edges or elements to imprint on solid or surface. */\nexport class ImprintSolidElementsTool extends LocateSubEntityTool {\n public static override toolId = \"ImprintSolids\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected points: Point3d[] = [];\n\n private static methodMessage(str: string) { return EditTools.translate(`ImprintSolids.Method.${str}`); }\n private static getMethodChoices = (): EnumerationChoice[] => {\n return [\n { label: ImprintSolidElementsTool.methodMessage(\"Element\"), value: ImprintSolidMethod.Element },\n { label: ImprintSolidElementsTool.methodMessage(\"Edges\"), value: ImprintSolidMethod.Edges },\n { label: ImprintSolidElementsTool.methodMessage(\"Points\"), value: ImprintSolidMethod.Points },\n ];\n };\n\n private _methodProperty: DialogProperty<number> | undefined;\n public get methodProperty() {\n if (!this._methodProperty)\n this._methodProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\n \"imprintMethod\", EditTools.translate(\"ImprintSolids.Label.Method\"), ImprintSolidElementsTool.getMethodChoices()), ImprintSolidMethod.Element as number);\n return this._methodProperty;\n }\n\n public get method(): ImprintSolidMethod { return this.methodProperty.value as ImprintSolidMethod; }\n public set method(method: ImprintSolidMethod) { this.methodProperty.value = method; }\n\n private _distanceProperty: DialogProperty<number> | undefined;\n public get distanceProperty() {\n if (!this._distanceProperty)\n this._distanceProperty = new DialogProperty<number>(new LengthDescription(\"imprintDistance\", EditTools.translate(\"ImprintSolids.Label.Distance\")), 0.1, undefined);\n return this._distanceProperty;\n }\n\n public get distance(): number { return this.distanceProperty.value; }\n public set distance(value: number) { this.distanceProperty.value = value; }\n\n private _extendProperty: DialogProperty<boolean> | undefined;\n public get extendProperty() {\n if (!this._extendProperty)\n this._extendProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"imprintExtend\", EditTools.translate(\"ImprintSolids.Label.Extend\")), false);\n return this._extendProperty;\n }\n\n public get extend(): boolean { return this.extendProperty.value; }\n public set extend(value: boolean) { this.extendProperty.value = value; }\n\n protected override get requiredSubEntityCount(): number { return ImprintSolidMethod.Element === this.method ? 0 : 1; }\n protected override get requiredElementCount(): number { return ImprintSolidMethod.Element === this.method ? 2 : 1; }\n protected override get allowSubEntityControlSelect(): boolean { return ImprintSolidMethod.Edges === this.method; }\n protected override get inhibitSubEntityDisplay(): boolean { return ImprintSolidMethod.Points === this.method ? false : super.inhibitSubEntityDisplay; }\n\n protected override wantSubEntityType(type: SubEntityType): boolean {\n switch (type) {\n case SubEntityType.Face:\n return ImprintSolidMethod.Points === this.method;\n case SubEntityType.Edge:\n return ImprintSolidMethod.Edges === this.method;\n default:\n return false;\n }\n }\n\n protected override get wantDynamics(): boolean { return ImprintSolidMethod.Points === this.method; }\n protected override get wantAccuSnap(): boolean { return ImprintSolidMethod.Points === this.method && this.isDynamicsStarted; }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: !this.agenda.isEmpty, surfaces: true, solids: true, other: false };\n }\n\n protected override async onAgendaModified(): Promise<void> {\n // Filter changes to allow imprinting an open path, invalidate cached accept status...\n if (ImprintSolidMethod.Element === this.method && (this.agenda.isEmpty || 1 === this.agenda.length))\n this.onGeometryCacheFilterChanged();\n }\n\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\n const data = await super.createSubEntityData(id, hit);\n\n if (undefined !== hit.point && undefined !== hit.normal)\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\n\n return data;\n }\n\n protected override async applyAgendaOperation(_ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (!isAccept || this.agenda.length < this.requiredElementCount)\n return undefined;\n\n const id = this.agenda.elements[0];\n\n try {\n this._startedCmd = await this.startCommand();\n\n let params: ImprintProps;\n if (ImprintSolidMethod.Points === this.method) {\n if (!this.haveAcceptedSubEntities)\n return undefined;\n\n const geom = ElementGeometry.fromGeometryQuery(LineString3d.create(this.points));\n if (undefined === geom)\n return undefined;\n\n params = { imprint: geom, face: this.getAcceptedSubEntityData(0)?.props, extend: this.extend ? true : undefined };\n } else if (ImprintSolidMethod.Edges === this.method) {\n if (!this.haveAcceptedSubEntities)\n return undefined;\n\n // TODO: Include all accepted edges...\n const edge = this.getAcceptedSubEntityData(0)?.props;\n if (undefined === edge)\n return undefined;\n\n const edgeFaces = await solidModelingIpc.getConnectedSubEntities(id, edge, SubEntityType.Face);\n if (undefined === edgeFaces || 0 === edgeFaces.length)\n return undefined;\n\n // TODO: Check planar face...get preferred face from cursor location in dynamics, etc.\n const edgeLoop = await solidModelingIpc.getConnectedSubEntities(id, edge, SubEntityType.Edge, { loopFace: edgeFaces[0] });\n if (undefined === edgeLoop || 0 === edgeLoop.length)\n return undefined;\n\n params = { imprint: edgeLoop, face: edgeFaces[0], distance: this.distance, extend: this.extend ? true : undefined };\n } else {\n params = { imprint: this.agenda.elements[1], extend: this.extend ? true : undefined };\n }\n\n const opts: ElementGeometryResultOptions = { writeChanges: true };\n return await solidModelingIpc.imprintBody(id, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\n if (ImprintSolidMethod.Points !== this.method || 0 === this.points.length)\n return;\n\n const pts = this.points.slice();\n pts.push(ev.point.clone());\n\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 3);\n builder.addLineString(pts);\n\n context.addGraphic(builder.finish());\n }\n\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\n switch (this.method) {\n case ImprintSolidMethod.Points: {\n if (!this.haveAcceptedSubEntities)\n break;\n\n this.points.push(ev.point.clone());\n if (!ev.isControlKey)\n break;\n\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n default:\n break;\n }\n\n return super.gatherInput(ev);\n }\n\n protected override get wantAdditionalInput(): boolean {\n switch (this.method) {\n case ImprintSolidMethod.Element:\n return false;\n\n case ImprintSolidMethod.Edges:\n return super.wantAdditionalInput;\n\n case ImprintSolidMethod.Points:\n return super.wantAdditionalInput || this.points.length < 2;\n }\n }\n\n protected override setupAccuDraw(): void {\n if (ImprintSolidMethod.Points !== this.method || 0 !== this.points.length)\n return;\n\n if (!this.haveAcceptedSubEntities)\n return;\n\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\n if (undefined === faceData)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setModeRectangular();\n hints.setOrigin(faceData.point);\n hints.setNormal(faceData.normal);\n hints.sendHints(false);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (!this.changeToolSettingPropertyValue(updatedValue))\n return false;\n\n if (updatedValue.propertyName === this.methodProperty.name)\n await this.onReinitialize();\n\n return true;\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.methodProperty, this.extendProperty, this.distanceProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.methodProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n\n switch (this.method) {\n case ImprintSolidMethod.Element:\n toolSettings.push(this.extendProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n break;\n case ImprintSolidMethod.Edges:\n toolSettings.push(this.distanceProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n break;\n case ImprintSolidMethod.Points:\n toolSettings.push(this.extendProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n break;\n }\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new ImprintSolidElementsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Base class for tools to identify edges of solids and surfaces and apply blends. */\nexport abstract class BlendEdgesTool extends LocateSubEntityTool {\n private _addSmoothProperty: DialogProperty<boolean> | undefined;\n public get addSmoothProperty() {\n if (!this._addSmoothProperty)\n this._addSmoothProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"blendSmooth\", EditTools.translate(\"RoundEdges.Label.AddSmooth\")), false);\n return this._addSmoothProperty;\n }\n\n public get addSmooth(): boolean { return this.addSmoothProperty.value; }\n public set addSmooth(value: boolean) { this.addSmoothProperty.value = value; }\n\n protected override wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Edge === type; }\n\n protected override getSubEntityFilter(): SubEntityFilter | undefined {\n return { laminarEdges: true, smoothEdges: true };\n }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\n }\n\n protected async getTangentEdges(id: Id64String, edge: SubEntityProps): Promise<SubEntityProps[] | undefined> {\n try {\n return await solidModelingIpc.getConnectedSubEntities(id, edge, SubEntityType.Edge, { smoothEdges: true });\n } catch (err) {\n return undefined;\n }\n }\n\n protected async addTangentEdges(id: Id64String, edge?: SubEntityProps, chordTolerance?: number): Promise<void> {\n if (undefined === edge) {\n this._acceptedSubEntities.forEach(async (accepted) => {\n if (undefined === accepted.toolData)\n await this.addTangentEdges(id, accepted.props, accepted.chordTolerance);\n });\n return;\n }\n\n const tangentEdges = await this.getTangentEdges(id, edge);\n if (undefined === tangentEdges)\n return;\n\n tangentEdges.forEach(async (entry) => {\n if (!isSameSubEntity(entry, edge)) {\n const data = new SubEntityData(entry);\n data.toolData = edge; // Mark edge so we know it was added as tangent edge...\n await this.createSubEntityGraphic(id, data, chordTolerance);\n this._acceptedSubEntities.push(data);\n }\n });\n }\n\n protected async removeTangentEdges(_id: Id64String, edge?: SubEntityProps): Promise<void> {\n if (undefined === edge) {\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => undefined === entry.toolData);\n return;\n }\n\n const edgeData = this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, edge));\n if (undefined === edgeData)\n return undefined;\n\n const isTangentEdge = (other: SubEntityData): boolean => {\n const primaryOther = (undefined !== other.toolData ? other.toolData : other.props);\n return isSameSubEntity(primaryEdge, primaryOther);\n };\n\n const primaryEdge = (undefined !== edgeData.toolData ? edgeData.toolData : edgeData.props);\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isTangentEdge(entry));\n }\n\n protected async syncTangentEdges(): Promise<void> {\n const id = this.getCurrentElement();\n if (undefined === id)\n return;\n\n if (this.addSmooth)\n await this.addTangentEdges(id);\n else\n await this.removeTangentEdges(id);\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n\n protected override async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\n await super.addSubEntity(id, props);\n\n if (!this.addSmooth)\n return;\n\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(props.point)) : undefined);\n\n return this.addTangentEdges(id, props.subEntity, chordTolerance);\n }\n\n protected override async removeSubEntity(id: Id64String, props?: SubEntityLocationProps): Promise<void> {\n if (!this.addSmooth)\n return super.removeSubEntity(id, props);\n\n const edge = (undefined !== props) ? props.subEntity : this.getAcceptedSubEntityData()?.props;\n if (undefined === edge)\n return;\n\n return this.removeTangentEdges(id, edge);\n }\n\n protected override getAcceptedSubEntities(): SubEntityProps[] {\n const edges: SubEntityProps[] = [];\n this._acceptedSubEntities.forEach((entry) => {\n if (undefined === entry.toolData)\n edges.push(entry.props);\n });\n\n return edges;\n }\n}\n\n/** @alpha Identify edges of solids and surfaces to apply a rolling ball blend to. */\nexport class RoundEdgesTool extends BlendEdgesTool {\n public static override toolId = \"RoundEdges\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n private _radiusProperty: DialogProperty<number> | undefined;\n public get radiusProperty() {\n if (!this._radiusProperty)\n this._radiusProperty = new DialogProperty<number>(new LengthDescription(\"roundRadius\", EditTools.translate(\"RoundEdges.Label.Radius\")), 0.1, undefined);\n return this._radiusProperty;\n }\n\n public get radius(): number { return this.radiusProperty.value; }\n public set radius(value: number) { this.radiusProperty.value = value; }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n const params: BlendEdgesProps = { edges: this.getAcceptedSubEntities(), radii: this.radius, propagateSmooth: this.addSmooth };\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\n writeChanges: isAccept ? true : undefined,\n };\n return await solidModelingIpc.blendEdges(this.agenda.elements[0], params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (!this.changeToolSettingPropertyValue(updatedValue))\n return false;\n\n if (updatedValue.propertyName === this.addSmoothProperty.name)\n await this.syncTangentEdges();\n\n return true;\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.radiusProperty, this.addSmoothProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.radiusProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n toolSettings.push(this.addSmoothProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new RoundEdgesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Identify edges of solids and surfaces to apply a rolling ball blend to. */\nexport class ChamferEdgesTool extends BlendEdgesTool {\n public static override toolId = \"ChamferEdges\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n private static methodMessage(str: string) { return EditTools.translate(`ChamferEdges.Method.${str}`); }\n private static getMethodChoices = (): EnumerationChoice[] => {\n return [\n { label: ChamferEdgesTool.methodMessage(\"Length\"), value: ChamferMode.Length },\n { label: ChamferEdgesTool.methodMessage(\"Distances\"), value: ChamferMode.Distances },\n { label: ChamferEdgesTool.methodMessage(\"DistanceAngle\"), value: ChamferMode.DistanceAngle },\n { label: ChamferEdgesTool.methodMessage(\"AngleDistance\"), value: ChamferMode.AngleDistance },\n ];\n };\n\n private _methodProperty: DialogProperty<number> | undefined;\n public get methodProperty() {\n if (!this._methodProperty)\n this._methodProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\n \"chamferMethod\", EditTools.translate(\"ChamferEdges.Label.Method\"), ChamferEdgesTool.getMethodChoices()), ChamferMode.Length as number);\n return this._methodProperty;\n }\n\n public get method(): ChamferMode { return this.methodProperty.value as ChamferMode; }\n public set method(method: ChamferMode) { this.methodProperty.value = method; }\n\n private _lengthProperty: DialogProperty<number> | undefined;\n public get lengthProperty() {\n if (!this._lengthProperty)\n this._lengthProperty = new DialogProperty<number>(new LengthDescription(\"chamferLength\", EditTools.translate(\"ChamferEdges.Label.Length\")), 0.1, undefined);\n return this._lengthProperty;\n }\n\n public get length(): number { return this.lengthProperty.value; }\n public set length(value: number) { this.lengthProperty.value = value; }\n\n private _distanceLeftProperty: DialogProperty<number> | undefined;\n public get distanceLeftProperty() {\n if (!this._distanceLeftProperty)\n this._distanceLeftProperty = new DialogProperty<number>(new LengthDescription(\"chamferLeftDist\", EditTools.translate(\"ChamferEdges.Label.LeftDistance\")), 0.1, undefined);\n return this._distanceLeftProperty;\n }\n\n public get distanceLeft(): number { return this.distanceLeftProperty.value; }\n public set distanceLeft(value: number) { this.distanceLeftProperty.value = value; }\n\n private _distanceRightProperty: DialogProperty<number> | undefined;\n public get distanceRightProperty() {\n if (!this._distanceRightProperty)\n this._distanceRightProperty = new DialogProperty<number>(new LengthDescription(\"chamferRightDist\", EditTools.translate(\"ChamferEdges.Label.RightDistance\")), 0.1, undefined);\n return this._distanceRightProperty;\n }\n\n public get distanceRight(): number { return this.distanceRightProperty.value; }\n public set distanceRight(value: number) { this.distanceRightProperty.value = value; }\n\n private _angleProperty: DialogProperty<number> | undefined;\n public get angleProperty() {\n if (!this._angleProperty)\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"chamferAngle\", EditTools.translate(\"ChamferEdges.Label.Angle\")), Angle.piOver4Radians, undefined, false);\n return this._angleProperty;\n }\n\n public get angle(): number { return this.angleProperty.value; }\n public set angle(value: number) { this.angleProperty.value = value; }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\n return undefined;\n\n try {\n this._startedCmd = await this.startCommand();\n\n let values1;\n let values2;\n\n switch (this.method) {\n case ChamferMode.Length:\n values1 = this.length;\n break;\n case ChamferMode.Distances:\n values1 = this.distanceLeft;\n values2 = this.distanceRight;\n break;\n case ChamferMode.DistanceAngle:\n values1 = this.distanceLeft;\n values2 = this.angle;\n break;\n case ChamferMode.AngleDistance:\n values1 = this.angle;\n values2 = this.distanceRight;\n break;\n default:\n return undefined;\n }\n\n const params: ChamferEdgesProps = { edges: this.getAcceptedSubEntities(), mode: this.method, values1, values2, propagateSmooth: this.addSmooth };\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\n writeChanges: isAccept ? true : undefined,\n };\n return await solidModelingIpc.chamferEdges(this.agenda.elements[0], params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (!this.changeToolSettingPropertyValue(updatedValue))\n return false;\n\n if (updatedValue.propertyName === this.methodProperty.name)\n await this.onReinitialize();\n\n return true;\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.methodProperty, this.addSmoothProperty, this.lengthProperty, this.distanceLeftProperty, this.distanceRightProperty, this.angleProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.methodProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n toolSettings.push(this.addSmoothProperty.toDialogItem({ rowPriority: ChamferMode.Length === this.method ? 3 : 4, columnIndex: 0 }));\n\n switch (this.method) {\n case ChamferMode.Length:\n toolSettings.push(this.lengthProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n break;\n case ChamferMode.Distances:\n toolSettings.push(this.distanceLeftProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n toolSettings.push(this.distanceRightProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 }));\n break;\n case ChamferMode.DistanceAngle:\n toolSettings.push(this.distanceLeftProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 }));\n break;\n case ChamferMode.AngleDistance:\n toolSettings.push(this.distanceRightProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 0 }));\n break;\n }\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new ChamferEdgesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha */\nexport class ProfileLocationData {\n public point: Point3d;\n public orientation: Vector3d | Matrix3d;\n\n constructor(point: Point3d, orientation: Vector3d | Matrix3d) {\n this.point = point;\n this.orientation = orientation;\n }\n}\n\n/** @alpha Base class for picking profiles (open paths and regions) or faces of solids. */\nexport abstract class LocateFaceOrProfileTool extends LocateSubEntityTool {\n protected override get wantGeometrySummary(): boolean { return true; }\n\n protected override wantSubEntityType(type: SubEntityType): boolean {\n switch (type) {\n case SubEntityType.Face:\n case SubEntityType.Edge:\n // Choose all faces or all edges...\n return (0 === this._acceptedSubEntities.length || this._acceptedSubEntities[0].props.type === type);\n default:\n return false;\n }\n }\n\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\n return { parts: true, curves: true, surfaces: true, solids: true, other: false };\n }\n\n protected override async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\n const hits = await super.doPickSubEntities(id, ev);\n\n if (undefined === hits)\n return hits;\n\n // Only want edges from wire bodies...\n const accept = (BRepEntityType.Wire === this.getBRepEntityTypeForSubEntity(id, hits[0].subEntity) ? SubEntityType.Edge : SubEntityType.Face);\n return hits.filter((hit) => accept === hit.subEntity.type);\n }\n\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\n const data = await super.createSubEntityData(id, hit);\n\n // Prefer orientation from snap to take entire path curve as well as placement z into account...\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n const point = (id === snap?.sourceId && snap.isHot ? snap.snapPoint : Point3d.fromJSON(hit.point));\n const matrix = (id === snap?.sourceId ? AccuDraw.getSnapRotation(snap, undefined) : undefined);\n const invMatrix = matrix?.inverse(); // getSnapRotation returns row matrix...\n\n if (undefined !== invMatrix)\n data.toolData = new ProfileLocationData(point, invMatrix);\n else\n data.toolData = new ProfileLocationData(point, undefined !== hit.normal ? Vector3d.fromJSON(hit.normal) : Vector3d.unitZ());\n\n return data;\n }\n\n protected override drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void {\n const id = this.getCurrentElement();\n if (undefined !== id && BRepEntityType.Solid !== this.getBRepEntityTypeForSubEntity(id, subEntity.props))\n return; // Operation will be applied to wire or sheet body, don't display sub-entity...\n super.drawSubEntity(context, subEntity, accepted);\n }\n\n protected override drawAcceptedSubEntities(context: DecorateContext): void {\n super.drawAcceptedSubEntities(context);\n\n // Show pick point on last identified face...\n const profileData = this.getAcceptedSubEntityData()?.toolData as ProfileLocationData;\n if (undefined === profileData)\n return;\n\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 10);\n builder.addPointString([profileData.point]);\n\n context.addDecorationFromBuilder(builder);\n }\n}\n\n/** @alpha Identify faces of solids and surfaces to translate. */\nexport class SweepFacesTool extends LocateFaceOrProfileTool {\n public static override toolId = \"SweepFaces\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected override get wantDynamics(): boolean { return true; }\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantSubEntitySnap(): boolean { return true; }\n\n private _addSmoothProperty: DialogProperty<boolean> | undefined;\n public get addSmoothProperty() {\n if (!this._addSmoothProperty)\n this._addSmoothProperty = new DialogProperty<boolean>(\n PropertyDescriptionHelper.buildToggleDescription(\"sweepSmooth\", EditTools.translate(\"SweepFaces.Label.AddSmooth\")), false);\n return this._addSmoothProperty;\n }\n\n public get addSmooth(): boolean { return this.addSmoothProperty.value; }\n public set addSmooth(value: boolean) { this.addSmoothProperty.value = value; }\n\n private _useDistanceProperty: DialogProperty<boolean> | undefined;\n public get useDistanceProperty() {\n if (!this._useDistanceProperty)\n this._useDistanceProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useOffsetDistance\"), false);\n return this._useDistanceProperty;\n }\n\n public get useDistance(): boolean { return this.useDistanceProperty.value; }\n public set useDistance(value: boolean) { this.useDistanceProperty.value = value; }\n\n private _distanceProperty: DialogProperty<number> | undefined;\n public get distanceProperty() {\n if (!this._distanceProperty)\n this._distanceProperty = new DialogProperty<number>(new LengthDescription(\"sweepDistance\", EditTools.translate(\"SweepFaces.Label.Distance\")), 0.1, undefined, !this.useDistance);\n return this._distanceProperty;\n }\n\n public get distance(): number { return this.distanceProperty.value; }\n public set distance(value: number) { this.distanceProperty.value = value; }\n\n protected async getSmoothFaces(id: Id64String, face: SubEntityProps): Promise<SubEntityProps[] | undefined> {\n try {\n // NOTE: For sweep/translation, it makes sense to limit smooth to immediately adjacent...\n return await solidModelingIpc.getConnectedSubEntities(id, face, SubEntityType.Face, { smoothFaces: true, adjacentFaces: true });\n } catch (err) {\n return undefined;\n }\n }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\n return undefined;\n\n const profileData = this.getAcceptedSubEntityData()?.toolData as ProfileLocationData;\n if (undefined === profileData)\n return undefined;\n\n const path = Vector3d.createStartEnd(profileData.point, ev.point);\n\n if (this.useDistance && undefined === path.scaleToLength(this.distance, path))\n return undefined;\n\n if (path.magnitude() < Geometry.smallMetricDistance)\n return undefined;\n\n if (!this.useDistance) {\n this.distance = path.magnitude();\n this.syncToolSettingPropertyValue(this.distanceProperty);\n if (isAccept)\n this.saveToolSettingPropertyValue(this.distanceProperty, this.distanceProperty.dialogItemValue);\n }\n\n try {\n this._startedCmd = await this.startCommand();\n const id = this.agenda.elements[0];\n\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${id}`,\n writeChanges: isAccept ? true : undefined,\n };\n\n const subEntities = this.getAcceptedSubEntities();\n const params: SweepFacesProps = { path };\n\n if (SubEntityType.Edge === subEntities[0].type || BRepEntityType.Solid !== this.getBRepEntityTypeForSubEntity(id, subEntities[0])) {\n return await solidModelingIpc.sweepFaces(id, params, opts);\n }\n\n if (this.addSmooth) {\n const allSmoothFaces: SubEntityProps[] = [];\n\n for (const face of subEntities) {\n const smoothFaces = await this.getSmoothFaces(id, face);\n if (undefined !== smoothFaces)\n allSmoothFaces.push(...smoothFaces);\n }\n\n for (const smooth of allSmoothFaces) {\n if (undefined === subEntities.find((selected) => isSameSubEntity(selected, smooth)))\n subEntities.unshift(smooth); // Preserve last selected entry as reference face...\n }\n }\n\n params.faces = subEntities;\n return await solidModelingIpc.sweepFaces(id, params, opts);\n } catch (err) {\n return undefined;\n }\n }\n\n protected override setupAccuDraw(): void {\n if (!this.haveAcceptedSubEntities)\n return;\n\n const profileData = this.getAcceptedSubEntityData()?.toolData as ProfileLocationData;\n if (undefined === profileData)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setOriginFixed = true;\n hints.setLockY = true;\n hints.setLockZ = true;\n hints.setModeRectangular();\n hints.setOrigin(profileData.point);\n hints.setXAxis2(profileData.orientation instanceof Matrix3d ? profileData.orientation.getColumn(2) : profileData.orientation);\n hints.sendHints(false);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.addSmoothProperty, this.useDistanceProperty, this.distanceProperty]);\n\n const toolSettings = new Array<DialogItem>();\n\n // ensure controls are enabled/disabled based on current lock property state\n this.distanceProperty.isDisabled = !this.useDistance;\n const useDistanceLock = this.useDistanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\n toolSettings.push(this.distanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useDistanceLock));\n toolSettings.push(this.addSmoothProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\n\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new SweepFacesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** @alpha Identify faces of solids and surfaces to revolve. */\nexport class SpinFacesTool extends LocateFaceOrProfileTool {\n public static override toolId = \"SpinFaces\";\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\n\n protected points: Point3d[] = [];\n\n private _angleProperty: DialogProperty<number> | undefined;\n public get angleProperty() {\n if (!this._angleProperty)\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"spinAngle\", EditTools.translate(\"SpinFaces.Label.Angle\")), Angle.piOver2Radians, undefined, false);\n return this._angleProperty;\n }\n\n public get angle(): number { return this.angleProperty.value; }\n public set angle(value: number) { this.angleProperty.value = value; }\n\n protected override get wantDynamics(): boolean { return true; }\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantSubEntitySnap(): boolean { return true; }\n\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities || this.points.length < (isAccept ? 2 : 1))\n return undefined;\n\n const direction = Vector3d.createStartEnd(this.points[0], isAccept ? this.points[1] : ev.point);\n if (direction.magnitude() < Geometry.smallMetricDistance)\n return undefined;\n\n const origin = this.points[0];\n const angle = Angle.createRadians(this.angle);\n\n try {\n this._startedCmd = await this.startCommand();\n const id = this.agenda.elements[0];\n\n const opts: ElementGeometryResultOptions = {\n wantGraphic: isAccept ? undefined : true,\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\n requestId: `${this.toolId}:${id}`,\n writeChanges: isAccept ? true : undefined,\n };\n\n const subEntities = this.getAcceptedSubEntities();\n const params: SpinFacesProps = { origin, direction, angle };\n\n if (SubEntityType.Edge === subEntities[0].type || BRepEntityType.Solid !== this.getBRepEntityTypeForSubEntity(id, subEntities[0])) {\n return await solidModelingIpc.spinFaces(id, params, opts);\n }\n\n params.faces = subEntities;\n let result = await solidModelingIpc.spinFaces(id, params, opts);\n\n // Spun face can be used to create a pocket...retry with negative sweep...\n if (undefined === result) {\n angle.setRadians(-angle.radians);\n result = await solidModelingIpc.spinFaces(id, params, opts);\n }\n\n return result;\n } catch (err) {\n return undefined;\n }\n }\n\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\n if (0 === this.points.length)\n return;\n\n const pts = this.points.slice();\n pts.push(ev.point.clone());\n\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 3);\n builder.addLineString(pts);\n\n context.addGraphic(builder.finish());\n\n super.onDynamicFrame(ev, context);\n }\n\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\n if (!this.wantAdditionalSubEntities)\n this.points.push(ev.point.clone());\n\n return super.gatherInput(ev);\n }\n\n protected override get wantAdditionalInput(): boolean {\n return super.wantAdditionalInput || this.points.length < 2;\n }\n\n protected override setupAccuDraw(): void {\n if (!this.haveAcceptedSubEntities || 0 !== this.points.length)\n return;\n\n const profileData = this.getAcceptedSubEntityData()?.toolData as ProfileLocationData;\n if (undefined === profileData)\n return;\n\n const hints = new AccuDrawHintBuilder();\n\n hints.setModeRectangular();\n hints.setOrigin(profileData.point);\n\n if (profileData.orientation instanceof Matrix3d)\n hints.setMatrix(profileData.orientation);\n else\n hints.setNormal(profileData.orientation);\n\n hints.sendHints(false);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this.initializeToolSettingPropertyValues([this.angleProperty]);\n\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));\n return toolSettings;\n }\n\n public async onRestartTool(): Promise<void> {\n const tool = new SpinFacesTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n"]}
|