@itwin/editor-frontend 3.0.0-dev.127 → 3.0.0-dev.131
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/EditTool.d.ts.map +1 -1
- package/lib/cjs/EditTool.js +3 -0
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/ElementGeometryTool.d.ts +1 -0
- package/lib/cjs/ElementGeometryTool.d.ts.map +1 -1
- package/lib/cjs/ElementGeometryTool.js +11 -1
- package/lib/cjs/ElementGeometryTool.js.map +1 -1
- package/lib/cjs/SolidModelingTools.d.ts +50 -0
- package/lib/cjs/SolidModelingTools.d.ts.map +1 -1
- package/lib/cjs/SolidModelingTools.js +306 -4
- package/lib/cjs/SolidModelingTools.js.map +1 -1
- package/lib/esm/EditTool.d.ts.map +1 -1
- package/lib/esm/EditTool.js +4 -1
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/ElementGeometryTool.d.ts +1 -0
- package/lib/esm/ElementGeometryTool.d.ts.map +1 -1
- package/lib/esm/ElementGeometryTool.js +12 -2
- package/lib/esm/ElementGeometryTool.js.map +1 -1
- package/lib/esm/SolidModelingTools.d.ts +50 -0
- package/lib/esm/SolidModelingTools.d.ts.map +1 -1
- package/lib/esm/SolidModelingTools.js +303 -4
- package/lib/esm/SolidModelingTools.js.map +1 -1
- package/lib/public/locales/en/Editor.json +12 -0
- package/package.json +12 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidModelingTools.js","sourceRoot":"","sources":["../../src/SolidModelingTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { BlendEdgesProps, BooleanMode, BooleanOperationProps, ChamferEdgesProps, ChamferMode, CutDepthMode, CutDirectionMode, CutProps, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EmbossDirectionMode, EmbossProps, HollowFacesProps, ImprintProps, LoftProps, OffsetFacesProps, ProfileClosure, SewSheetProps, SubEntityFilter, SubEntityLocationProps, SubEntityProps, SubEntityType, SweepPathProps, ThickenSheetProps } from \"@itwin/editor-common\";\r\nimport { ColorDef, ElementGeometry } from \"@itwin/core-common\";\r\nimport { Geometry, LineString3d, Point3d, Vector3d, XYZProps } from \"@itwin/core-geometry\";\r\nimport { AccuDrawHintBuilder, BeButtonEvent, DecorateContext, DynamicsContext, EventHandled, GraphicType, HitDetail } from \"@itwin/core-frontend\";\r\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\r\nimport { ElementGeometryCacheTool, isSameSubEntity, LocateSubEntityTool, SubEntityData } from \"./ElementGeometryTool\";\r\n\r\n/** @alpha Base class for tools that perform boolean operations on a set of elements. */\r\nexport abstract class BooleanOperationTool extends ElementGeometryCacheTool {\r\n protected abstract get mode(): BooleanMode;\r\n protected override get allowSelectionSet(): boolean { return BooleanMode.Subtract !== this.mode; }\r\n protected override get allowDragSelect(): boolean { return BooleanMode.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 geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: BooleanMode.Subtract === this.mode && !this.agenda.isEmpty, solids: true, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow surfaces as tools, invalidate cached accept status...\r\n if (BooleanMode.Subtract === this.mode && (this.agenda.isEmpty || 1 === this.agenda.length))\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools: Id64Array = this.agenda.elements.slice(1);\r\n const params: BooleanOperationProps = { mode: this.mode, tools };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"booleanOperation\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean union of solid geometry. */\r\nexport class UniteSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"UniteSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Unite; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new UniteSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean subtract of solid geometry. */\r\nexport class SubtractSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"SubtractSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Subtract; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SubtractSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean intersection of solid geometry. */\r\nexport class IntersectSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"IntersectSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Intersect; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new IntersectSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform sew operation on surface geometry. */\r\nexport class SewSheetElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"SewSheets\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools: Id64Array = this.agenda.elements.slice(1);\r\n const params: SewSheetProps = { tools };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"sewSheets\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SewSheetElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform thicken operation on surface geometry. */\r\nexport class ThickenSheetElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"ThickenSheets\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for front and back distances...\r\n protected frontDistance = 0.5;\r\n protected backDistance = 0.0;\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const params: ThickenSheetProps = { front: this.frontDistance, back: this.backDistance };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"thickenSheets\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ThickenSheetElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform cut operation on solid using region or path profile. */\r\nexport class CutSolidElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"CutSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n protected targetPoint?: Point3d;\r\n protected toolPoint?: Point3d;\r\n\r\n // TODO: Tool settings for both directions, blind cut depth, and outside...\r\n protected bothDirections = false;\r\n protected distance = 0.0;\r\n protected outside = undefined;\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n protected get isProfilePhase(): boolean { return !this.agenda.isEmpty; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n const profilePhase = this.isProfilePhase;\r\n return { minGeom: 1, maxGeom: profilePhase ? 1 : undefined, parts: true, curves: profilePhase, surfaces: profilePhase, solids: !profilePhase, other: false };\r\n }\r\n\r\n protected override async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n if (!await super.createElementGeometryCache(id))\r\n return false;\r\n\r\n if (!this.isProfilePhase)\r\n return true;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n return await ElementGeometryCacheTool.callCommand(\"isPlanarBody\", id, 0);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow sheets and wires as profiles, invalidate cached accept status...\r\n if (this.agenda.isEmpty || 1 === this.agenda.length)\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n const direction = (this.bothDirections ? CutDirectionMode.Both : CutDirectionMode.Auto);\r\n const depth = (0.0 === this.distance ? CutDepthMode.All : CutDepthMode.Blind);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const profile = this.agenda.elements[1];\r\n const params: CutProps = { profile, direction, depth, distance: this.distance, outside: this.outside, closeOpen: ProfileClosure.Auto, targetPoint: this.targetPoint, toolPoint: this.toolPoint };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"cutSolid\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n protected override async buildLocateAgenda(hit: HitDetail): Promise<boolean> {\r\n if (this.isProfilePhase)\r\n this.toolPoint = hit.hitPoint;\r\n else\r\n this.targetPoint = hit.hitPoint;\r\n\r\n return super.buildLocateAgenda(hit);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CutSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform emboss operation on solid or sheet using sheet profile. */\r\nexport class EmbossSolidElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"EmbossSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n protected targetPoint?: Point3d;\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n protected get isProfilePhase(): boolean { return !this.agenda.isEmpty; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n const profilePhase = this.isProfilePhase;\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: false, surfaces: true, solids: !profilePhase, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to disallow solids as profiles, invalidate cached accept status...\r\n if (this.agenda.isEmpty || 1 === this.agenda.length)\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const profile = this.agenda.elements[1];\r\n const params: EmbossProps = { profile, direction: EmbossDirectionMode.Auto, targetPoint: this.targetPoint };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"embossBody\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n protected override async buildLocateAgenda(hit: HitDetail): Promise<boolean> {\r\n if (!this.isProfilePhase)\r\n this.targetPoint = hit.hitPoint;\r\n\r\n return super.buildLocateAgenda(hit);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new EmbossSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Create a solid for sheet by sweeping a profile along a path. */\r\nexport class SweepAlongPathTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"SweepAlongPath\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: true, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const path = this.agenda.elements[1];\r\n const params: SweepPathProps = { path };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"sweepAlongPath\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SweepAlongPathTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Create a new sheet or solid body by lofting through a set of profiles. */\r\nexport class LoftProfilesTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"LoftProfiles\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: true, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools = this.agenda.elements.slice(1);\r\n const params: LoftProps = { tools, orderCurves: this.isSelectionSetModify ? true : undefined, orientCurves: true };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"loftProfiles\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new LoftProfilesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport class FaceLocationData {\r\n public point: Point3d;\r\n public normal: Vector3d;\r\n\r\n constructor(point: Point3d, normal: Vector3d) {\r\n this.point = point;\r\n this.normal = normal;\r\n }\r\n\r\n public static create(pointProps: XYZProps, normalProps: XYZProps) {\r\n const point = Point3d.fromJSON(pointProps);\r\n const normal = Vector3d.fromJSON(normalProps);\r\n return new FaceLocationData(point, normal);\r\n }\r\n}\r\n\r\n/** @alpha Identify faces of solids and surfaces to offset. */\r\nexport class OffsetFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"OffsetFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return this.isDynamicsStarted; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = await super.createSubEntityData(id, hit);\r\n\r\n if (undefined !== hit.point && undefined !== hit.normal)\r\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\r\n\r\n return data;\r\n }\r\n\r\n protected override drawAcceptedSubEntities(context: DecorateContext): void {\r\n super.drawAcceptedSubEntities(context);\r\n\r\n // Show pick point on last identified face, offset direction/distance will be computed from this location...\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 10);\r\n builder.addPointString([faceData.point]);\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return undefined;\r\n\r\n const projPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, faceData.point, faceData.normal, ev.viewport);\r\n\r\n if (undefined === projPt)\r\n return undefined;\r\n\r\n const offsetDir = Vector3d.createStartEnd(faceData.point, projPt);\r\n let offset = offsetDir.magnitude();\r\n\r\n if (offset < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offsetDir.dotProduct(faceData.normal) < 0.0)\r\n offset = -offset;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: OffsetFacesProps = { faces: this.getAcceptedSubEntities(), distances: offset };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"offsetFaces\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (!this.haveAcceptedSubEntities)\r\n return;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOriginFixed = true;\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n hints.setModeRectangular();\r\n hints.setOrigin(faceData.point);\r\n hints.setXAxis2(faceData.normal);\r\n hints.sendHints(false);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces to offset to hollow solids. */\r\nexport class HollowFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"HollowFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for shell thickness and face thickness...\r\n protected shellThickness = 0.1;\r\n protected faceThickness = 0.0;\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: false, solids: true, other: false };\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: HollowFacesProps = { faces: this.getAcceptedSubEntities(), distances: this.faceThickness, defaultDistance: this.shellThickness };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"hollowFaces\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new HollowFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum ImprintSolidMethod {\r\n /** Imprint intersection with another element */\r\n Element = 0,\r\n /** Imprint offset edges onto face */\r\n Edges = 1,\r\n /** Imprint line string defined by points onto face */\r\n Points = 2,\r\n}\r\n\r\n/** @alpha Identify edges or elements to imprint on solid or surface. */\r\nexport class ImprintSolidElementsTool extends LocateSubEntityTool {\r\n public static override toolId = \"ImprintSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for method, propagate for edges, offset distance...\r\n protected method = ImprintSolidMethod.Points;\r\n protected points: Point3d[] = [];\r\n protected extend = true;\r\n protected distance = 0.1;\r\n\r\n protected override get requiredElementCount(): number { return ImprintSolidMethod.Element === this.method ? 2 : 1; }\r\n protected override get allowSubEntityControlSelect(): boolean { return ImprintSolidMethod.Edges === this.method; }\r\n protected override get inhibitSubEntityDisplay(): boolean { return ImprintSolidMethod.Points === this.method ? false : super.inhibitSubEntityDisplay; }\r\n\r\n protected override wantSubEntityType(type: SubEntityType): boolean {\r\n switch (type) {\r\n case SubEntityType.Face:\r\n return ImprintSolidMethod.Points === this.method;\r\n case SubEntityType.Edge:\r\n return ImprintSolidMethod.Edges === this.method;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected override get wantDynamics(): boolean { return ImprintSolidMethod.Points === this.method; }\r\n protected override get wantAccuSnap(): boolean { return ImprintSolidMethod.Points === this.method && this.isDynamicsStarted; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: !this.agenda.isEmpty, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow imprinting an open path, invalidate cached accept status...\r\n if (ImprintSolidMethod.Element === this.method && (this.agenda.isEmpty || 1 === this.agenda.length))\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = await super.createSubEntityData(id, hit);\r\n\r\n if (undefined !== hit.point && undefined !== hit.normal)\r\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\r\n\r\n return data;\r\n }\r\n\r\n protected override async applyAgendaOperation(_ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (!isAccept || this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n const id = this.agenda.elements[0];\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n\r\n let params: ImprintProps;\r\n if (ImprintSolidMethod.Points === this.method) {\r\n if (!this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n const geom = ElementGeometry.fromGeometryQuery(LineString3d.create(this.points));\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n params = { imprint : geom, face: this.getAcceptedSubEntityData(0)?.props, extend: this.extend ? true : undefined };\r\n } else if (ImprintSolidMethod.Edges === this.method) {\r\n if (!this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n // TODO: Include all accepted edges...\r\n const edge = this.getAcceptedSubEntityData(0)?.props;\r\n if (undefined === edge)\r\n return undefined;\r\n\r\n const edgeFaces = await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, edge, SubEntityType.Face );\r\n if (undefined === edgeFaces || 0 === edgeFaces.length)\r\n return undefined;\r\n\r\n // TODO: Check planar face...get preferred face from cursor location in dynamics, etc.\r\n const edgeLoop = await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, edge, SubEntityType.Edge, { loopFace: edgeFaces[0] } );\r\n if (undefined === edgeLoop || 0 === edgeLoop.length)\r\n return undefined;\r\n\r\n params = { imprint : edgeLoop, face: edgeFaces[0], distance: this.distance, extend: this.extend ? true : undefined };\r\n } else {\r\n params = { imprint : this.agenda.elements[1], extend: this.extend ? true : undefined };\r\n }\r\n\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"imprintBody\", id, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (ImprintSolidMethod.Points !== this.method || 0 === this.points.length)\r\n return;\r\n\r\n const pts = this.points.slice();\r\n pts.push(ev.point.clone());\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 3);\r\n builder.addLineString(pts);\r\n\r\n context.addGraphic(builder.finish());\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n switch (this.method) {\r\n case ImprintSolidMethod.Points: {\r\n if (!this.haveAcceptedSubEntities)\r\n break;\r\n\r\n this.points.push(ev.point.clone());\r\n if (!ev.isControlKey)\r\n break;\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n switch (this.method) {\r\n case ImprintSolidMethod.Element:\r\n return false;\r\n\r\n case ImprintSolidMethod.Edges:\r\n return super.wantAdditionalInput;\r\n\r\n case ImprintSolidMethod.Points:\r\n return super.wantAdditionalInput || this.points.length < 2;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (ImprintSolidMethod.Points !== this.method || 0 !== this.points.length)\r\n return;\r\n\r\n if (!this.haveAcceptedSubEntities)\r\n return;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setModeRectangular();\r\n hints.setOrigin(faceData.point);\r\n hints.setNormal(faceData.normal);\r\n hints.sendHints(false);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ImprintSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify edges of solids and surfaces to apply blend to. */\r\nexport abstract class BlendEdgesTool extends LocateSubEntityTool {\r\n // TODO: Tool settings for tangent edge propagation...\r\n protected propagateSmooth = true;\r\n\r\n protected override wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Edge === type; }\r\n\r\n protected override getSubEntityFilter(): SubEntityFilter | undefined {\r\n return { laminarEdges: true, smoothEdges: true };\r\n }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected async getTangentEdges(id: Id64String, edge: SubEntityProps): Promise<SubEntityProps[] | undefined> {\r\n try {\r\n return await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, edge, SubEntityType.Edge, { smoothEdges: true });\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async addTangentEdges(id: Id64String, edge?: SubEntityProps, chordTolerance?: number): Promise<void> {\r\n if (undefined === edge) {\r\n this._acceptedSubEntities.forEach(async (accepted) => {\r\n if (undefined === accepted.toolData)\r\n await this.addTangentEdges(id, accepted.props, accepted.chordTolerance);\r\n });\r\n return;\r\n }\r\n\r\n const tangentEdges = await this.getTangentEdges(id, edge);\r\n if (undefined === tangentEdges)\r\n return;\r\n\r\n tangentEdges.forEach(async (entry) => {\r\n if (!isSameSubEntity(entry, edge)) {\r\n const data = new SubEntityData(entry);\r\n data.toolData = edge; // Mark edge so we know it was added as tangent edge...\r\n await this.createSubEntityGraphic(id, data, chordTolerance);\r\n this._acceptedSubEntities.push(data);\r\n }\r\n });\r\n }\r\n\r\n protected async removeTangentEdges(_id: Id64String, edge?: SubEntityProps): Promise<void> {\r\n if (undefined === edge) {\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => undefined === entry.toolData );\r\n return;\r\n }\r\n\r\n const edgeData = this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, edge));\r\n if (undefined === edgeData)\r\n return undefined;\r\n\r\n const isTangentEdge = (other: SubEntityData): boolean => {\r\n const primaryOther = (undefined !== other.toolData ? other.toolData : other.props);\r\n return isSameSubEntity(primaryEdge, primaryOther);\r\n };\r\n\r\n const primaryEdge = (undefined !== edgeData.toolData ? edgeData.toolData : edgeData.props);\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isTangentEdge(entry));\r\n }\r\n\r\n protected override async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\r\n await super.addSubEntity(id, props);\r\n\r\n if (!this.propagateSmooth)\r\n return;\r\n\r\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(props.point)) : undefined);\r\n\r\n return this.addTangentEdges(id, props.subEntity, chordTolerance);\r\n }\r\n\r\n protected override async removeSubEntity(id: Id64String, props?: SubEntityLocationProps): Promise<void> {\r\n if (!this.propagateSmooth)\r\n return super.removeSubEntity(id, props);\r\n\r\n const edge = (undefined !== props) ? props.subEntity : this.getAcceptedSubEntityData()?.props;\r\n if (undefined === edge)\r\n return;\r\n\r\n return this.removeTangentEdges(id, edge);\r\n }\r\n\r\n protected override getAcceptedSubEntities(): SubEntityProps[] {\r\n const edges: SubEntityProps[] = [];\r\n this._acceptedSubEntities.forEach((entry) => { if (undefined === entry.toolData) edges.push(entry.props); });\r\n return edges;\r\n }\r\n}\r\n\r\n/** @alpha Identify edges of solids and surfaces to apply a rolling ball blend to. */\r\nexport class RoundEdgesTool extends BlendEdgesTool {\r\n public static override toolId = \"RoundEdges\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for blend radius...\r\n protected radius = 0.5;\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: BlendEdgesProps = { edges: this.getAcceptedSubEntities(), radii: this.radius, propagateSmooth: this.propagateSmooth };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"blendEdges\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RoundEdgesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify edges of solids and surfaces to apply a rolling ball blend to. */\r\nexport class ChamferEdgesTool extends BlendEdgesTool {\r\n public static override toolId = \"ChamferEdges\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for chamfer length, distances, distance + angle...\r\n protected mode = ChamferMode.Length;\r\n protected length = 0.5;\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: ChamferEdgesProps = { edges: this.getAcceptedSubEntities(), mode: this.mode, values1: this.length, propagateSmooth: this.propagateSmooth };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"chamferEdges\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ChamferEdgesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"SolidModelingTools.js","sourceRoot":"","sources":["../../src/SolidModelingTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { BlendEdgesProps, BooleanMode, BooleanOperationProps, ChamferEdgesProps, ChamferMode, CutDepthMode, CutDirectionMode, CutProps, DeleteSubEntityProps, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EmbossDirectionMode, EmbossProps, HollowFacesProps, ImprintProps, LoftProps, OffsetFacesProps, ProfileClosure, SewSheetProps, SpinFacesProps, SubEntityFilter, SubEntityLocationProps, SubEntityProps, SubEntityType, SweepFacesProps, SweepPathProps, ThickenSheetProps } from \"@itwin/editor-common\";\r\nimport { ColorDef, ElementGeometry } from \"@itwin/core-common\";\r\nimport { Angle, Geometry, LineString3d, Point3d, Vector3d, XYZProps } from \"@itwin/core-geometry\";\r\nimport { AccuDrawHintBuilder, BeButtonEvent, DecorateContext, DynamicsContext, EventHandled, GraphicType, HitDetail } from \"@itwin/core-frontend\";\r\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\r\nimport { ElementGeometryCacheTool, isSameSubEntity, LocateSubEntityTool, SubEntityData } from \"./ElementGeometryTool\";\r\n\r\n/** @alpha Base class for tools that perform boolean operations on a set of elements. */\r\nexport abstract class BooleanOperationTool extends ElementGeometryCacheTool {\r\n protected abstract get mode(): BooleanMode;\r\n protected override get allowSelectionSet(): boolean { return BooleanMode.Subtract !== this.mode; }\r\n protected override get allowDragSelect(): boolean { return BooleanMode.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 geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: BooleanMode.Subtract === this.mode && !this.agenda.isEmpty, solids: true, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow surfaces as tools, invalidate cached accept status...\r\n if (BooleanMode.Subtract === this.mode && (this.agenda.isEmpty || 1 === this.agenda.length))\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools: Id64Array = this.agenda.elements.slice(1);\r\n const params: BooleanOperationProps = { mode: this.mode, tools };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"booleanOperation\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean union of solid geometry. */\r\nexport class UniteSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"UniteSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Unite; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new UniteSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean subtract of solid geometry. */\r\nexport class SubtractSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"SubtractSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Subtract; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SubtractSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean intersection of solid geometry. */\r\nexport class IntersectSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"IntersectSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Intersect; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new IntersectSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform sew operation on surface geometry. */\r\nexport class SewSheetElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"SewSheets\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools: Id64Array = this.agenda.elements.slice(1);\r\n const params: SewSheetProps = { tools };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"sewSheets\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SewSheetElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform thicken operation on surface geometry. */\r\nexport class ThickenSheetElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"ThickenSheets\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for front and back distances...\r\n protected frontDistance = 0.5;\r\n protected backDistance = 0.0;\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const params: ThickenSheetProps = { front: this.frontDistance, back: this.backDistance };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"thickenSheets\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ThickenSheetElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform cut operation on solid using region or path profile. */\r\nexport class CutSolidElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"CutSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n protected targetPoint?: Point3d;\r\n protected toolPoint?: Point3d;\r\n\r\n // TODO: Tool settings for both directions, blind cut depth, and outside...\r\n protected bothDirections = false;\r\n protected distance = 0.0;\r\n protected outside = undefined;\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n protected get isProfilePhase(): boolean { return !this.agenda.isEmpty; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n const profilePhase = this.isProfilePhase;\r\n return { minGeom: 1, maxGeom: profilePhase ? 1 : undefined, parts: true, curves: profilePhase, surfaces: profilePhase, solids: !profilePhase, other: false };\r\n }\r\n\r\n protected override async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n if (!await super.createElementGeometryCache(id))\r\n return false;\r\n\r\n if (!this.isProfilePhase)\r\n return true;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n return await ElementGeometryCacheTool.callCommand(\"isPlanarBody\", id, 0);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow sheets and wires as profiles, invalidate cached accept status...\r\n if (this.agenda.isEmpty || 1 === this.agenda.length)\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n const direction = (this.bothDirections ? CutDirectionMode.Both : CutDirectionMode.Auto);\r\n const depth = (0.0 === this.distance ? CutDepthMode.All : CutDepthMode.Blind);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const profile = this.agenda.elements[1];\r\n const params: CutProps = { profile, direction, depth, distance: this.distance, outside: this.outside, closeOpen: ProfileClosure.Auto, targetPoint: this.targetPoint, toolPoint: this.toolPoint };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"cutSolid\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n protected override async buildLocateAgenda(hit: HitDetail): Promise<boolean> {\r\n if (this.isProfilePhase)\r\n this.toolPoint = hit.hitPoint;\r\n else\r\n this.targetPoint = hit.hitPoint;\r\n\r\n return super.buildLocateAgenda(hit);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new CutSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform emboss operation on solid or sheet using sheet profile. */\r\nexport class EmbossSolidElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"EmbossSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n protected targetPoint?: Point3d;\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n protected get isProfilePhase(): boolean { return !this.agenda.isEmpty; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n const profilePhase = this.isProfilePhase;\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: false, surfaces: true, solids: !profilePhase, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to disallow solids as profiles, invalidate cached accept status...\r\n if (this.agenda.isEmpty || 1 === this.agenda.length)\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const profile = this.agenda.elements[1];\r\n const params: EmbossProps = { profile, direction: EmbossDirectionMode.Auto, targetPoint: this.targetPoint };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"embossBody\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n protected override async buildLocateAgenda(hit: HitDetail): Promise<boolean> {\r\n if (!this.isProfilePhase)\r\n this.targetPoint = hit.hitPoint;\r\n\r\n return super.buildLocateAgenda(hit);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new EmbossSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Create a solid for sheet by sweeping a profile along a path. */\r\nexport class SweepAlongPathTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"SweepAlongPath\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: true, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const path = this.agenda.elements[1];\r\n const params: SweepPathProps = { path };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"sweepAlongPath\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SweepAlongPathTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Create a new sheet or solid body by lofting through a set of profiles. */\r\nexport class LoftProfilesTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"LoftProfiles\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get requiredElementCount(): number { return 2; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: true, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools = this.agenda.elements.slice(1);\r\n const params: LoftProps = { tools, orderCurves: this.isSelectionSetModify ? true : undefined, orientCurves: true };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"loftProfiles\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new LoftProfilesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport class FaceLocationData {\r\n public point: Point3d;\r\n public normal: Vector3d;\r\n\r\n constructor(point: Point3d, normal: Vector3d) {\r\n this.point = point;\r\n this.normal = normal;\r\n }\r\n\r\n public static create(pointProps: XYZProps, normalProps: XYZProps) {\r\n const point = Point3d.fromJSON(pointProps);\r\n const normal = Vector3d.fromJSON(normalProps);\r\n return new FaceLocationData(point, normal);\r\n }\r\n}\r\n\r\n/** @alpha Identify faces of solids and surfaces to offset. */\r\nexport class OffsetFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"OffsetFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for offset distance...\r\n protected useOffset = false;\r\n protected offset = 0.1;\r\n protected addSmoothFaces = false;\r\n\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return this.isDynamicsStarted; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = await super.createSubEntityData(id, hit);\r\n\r\n if (undefined !== hit.point && undefined !== hit.normal)\r\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\r\n\r\n return data;\r\n }\r\n\r\n protected override drawAcceptedSubEntities(context: DecorateContext): void {\r\n super.drawAcceptedSubEntities(context);\r\n\r\n // Show pick point on last identified face, offset direction/distance will be computed from this location...\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 10);\r\n builder.addPointString([faceData.point]);\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n protected async getSmoothFaces(id: Id64String, face: SubEntityProps): Promise<SubEntityProps[] | undefined> {\r\n try {\r\n // NOTE: For offset, include all smoothly connected faces, not just adjacent...\r\n return await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, face, SubEntityType.Face, { smoothFaces: true });\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return undefined;\r\n\r\n const projPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, faceData.point, faceData.normal, ev.viewport);\r\n\r\n if (undefined === projPt)\r\n return undefined;\r\n\r\n const offsetDir = Vector3d.createStartEnd(faceData.point, projPt);\r\n\r\n if (this.useOffset && undefined === offsetDir.scaleToLength(this.offset, offsetDir))\r\n return undefined;\r\n\r\n let offset = offsetDir.magnitude();\r\n\r\n if (offset < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offsetDir.dotProduct(faceData.normal) < 0.0)\r\n offset = -offset;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const id = this.agenda.elements[0];\r\n\r\n const faces = this.getAcceptedSubEntities();\r\n\r\n if (this.addSmoothFaces) {\r\n const allSmoothFaces: SubEntityProps[] = [];\r\n\r\n for (const face of faces) {\r\n const smoothFaces = await this.getSmoothFaces(id, face);\r\n if (undefined !== smoothFaces)\r\n allSmoothFaces.push(...smoothFaces);\r\n }\r\n\r\n for (const smooth of allSmoothFaces) {\r\n if (undefined === faces.find((selected) => isSameSubEntity(selected, smooth)))\r\n faces.unshift(smooth); // Preserve last selected entry as reference face...\r\n }\r\n }\r\n\r\n const params: OffsetFacesProps = { faces, distances: offset };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${id}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"offsetFaces\", id, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (!this.haveAcceptedSubEntities)\r\n return;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOriginFixed = true;\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n hints.setModeRectangular();\r\n hints.setOrigin(faceData.point);\r\n hints.setXAxis2(faceData.normal);\r\n hints.sendHints(false);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces to offset to hollow solids. */\r\nexport class HollowFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"HollowFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for shell thickness and face thickness...\r\n protected shellThickness = 0.1;\r\n protected faceThickness = 0.0;\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: false, solids: true, other: false };\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: HollowFacesProps = { faces: this.getAcceptedSubEntities(), distances: this.faceThickness, defaultDistance: this.shellThickness };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"hollowFaces\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new HollowFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces or edges for removal by growing surrounding faces. */\r\nexport class DeleteSubEntitiesTool extends LocateSubEntityTool {\r\n public static override toolId = \"DeleteSubEntities\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override wantSubEntityType(type: SubEntityType): boolean {\r\n switch (type) {\r\n case SubEntityType.Face:\r\n case SubEntityType.Edge:\r\n // Choose all faces or all edges...\r\n return (0 === this._acceptedSubEntities.length || this._acceptedSubEntities[0].props.type === type);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected override getMaximumSubEntityHits(type: SubEntityType): number {\r\n if (!this.wantSubEntityType(type))\r\n return 0;\r\n\r\n // Only return single closest edge, avoids having to test for redundant edges on reset...\r\n return (SubEntityType.Edge === type ? 1 : 25);\r\n }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\r\n const hits = await super.doPickSubEntities(id, ev);\r\n\r\n if (undefined === hits)\r\n return hits;\r\n\r\n // Don't allow reset to select a back edge...\r\n if (SubEntityType.Face === hits[0].subEntity.type)\r\n return hits.filter((hit) => { return SubEntityType.Face === hit.subEntity.type; });\r\n\r\n try {\r\n const accept = await ElementGeometryCacheTool.callCommand(\"isRedundantEdge\", id, hits[0].subEntity);\r\n\r\n if (accept)\r\n return hits;\r\n\r\n if (hits.length > 1 && SubEntityType.Face === hits[1].subEntity.type)\r\n return hits.slice(1); // Accept face of rejected edge...\r\n\r\n return undefined;\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: DeleteSubEntityProps = { subEntities: this.getAcceptedSubEntities() };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"deleteSubEntities\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new DeleteSubEntitiesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum ImprintSolidMethod {\r\n /** Imprint intersection with another element */\r\n Element = 0,\r\n /** Imprint offset edges onto face */\r\n Edges = 1,\r\n /** Imprint line string defined by points onto face */\r\n Points = 2,\r\n}\r\n\r\n/** @alpha Identify edges or elements to imprint on solid or surface. */\r\nexport class ImprintSolidElementsTool extends LocateSubEntityTool {\r\n public static override toolId = \"ImprintSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for method, propagate for edges, offset distance...\r\n protected method = ImprintSolidMethod.Points;\r\n protected points: Point3d[] = [];\r\n protected extend = true;\r\n protected distance = 0.1;\r\n\r\n protected override get requiredElementCount(): number { return ImprintSolidMethod.Element === this.method ? 2 : 1; }\r\n protected override get allowSubEntityControlSelect(): boolean { return ImprintSolidMethod.Edges === this.method; }\r\n protected override get inhibitSubEntityDisplay(): boolean { return ImprintSolidMethod.Points === this.method ? false : super.inhibitSubEntityDisplay; }\r\n\r\n protected override wantSubEntityType(type: SubEntityType): boolean {\r\n switch (type) {\r\n case SubEntityType.Face:\r\n return ImprintSolidMethod.Points === this.method;\r\n case SubEntityType.Edge:\r\n return ImprintSolidMethod.Edges === this.method;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected override get wantDynamics(): boolean { return ImprintSolidMethod.Points === this.method; }\r\n protected override get wantAccuSnap(): boolean { return ImprintSolidMethod.Points === this.method && this.isDynamicsStarted; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: !this.agenda.isEmpty, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow imprinting an open path, invalidate cached accept status...\r\n if (ImprintSolidMethod.Element === this.method && (this.agenda.isEmpty || 1 === this.agenda.length))\r\n this.onGeometryCacheFilterChanged();\r\n }\r\n\r\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = await super.createSubEntityData(id, hit);\r\n\r\n if (undefined !== hit.point && undefined !== hit.normal)\r\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\r\n\r\n return data;\r\n }\r\n\r\n protected override async applyAgendaOperation(_ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (!isAccept || this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n const id = this.agenda.elements[0];\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n\r\n let params: ImprintProps;\r\n if (ImprintSolidMethod.Points === this.method) {\r\n if (!this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n const geom = ElementGeometry.fromGeometryQuery(LineString3d.create(this.points));\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n params = { imprint : geom, face: this.getAcceptedSubEntityData(0)?.props, extend: this.extend ? true : undefined };\r\n } else if (ImprintSolidMethod.Edges === this.method) {\r\n if (!this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n // TODO: Include all accepted edges...\r\n const edge = this.getAcceptedSubEntityData(0)?.props;\r\n if (undefined === edge)\r\n return undefined;\r\n\r\n const edgeFaces = await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, edge, SubEntityType.Face );\r\n if (undefined === edgeFaces || 0 === edgeFaces.length)\r\n return undefined;\r\n\r\n // TODO: Check planar face...get preferred face from cursor location in dynamics, etc.\r\n const edgeLoop = await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, edge, SubEntityType.Edge, { loopFace: edgeFaces[0] } );\r\n if (undefined === edgeLoop || 0 === edgeLoop.length)\r\n return undefined;\r\n\r\n params = { imprint : edgeLoop, face: edgeFaces[0], distance: this.distance, extend: this.extend ? true : undefined };\r\n } else {\r\n params = { imprint : this.agenda.elements[1], extend: this.extend ? true : undefined };\r\n }\r\n\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"imprintBody\", id, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (ImprintSolidMethod.Points !== this.method || 0 === this.points.length)\r\n return;\r\n\r\n const pts = this.points.slice();\r\n pts.push(ev.point.clone());\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 3);\r\n builder.addLineString(pts);\r\n\r\n context.addGraphic(builder.finish());\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n switch (this.method) {\r\n case ImprintSolidMethod.Points: {\r\n if (!this.haveAcceptedSubEntities)\r\n break;\r\n\r\n this.points.push(ev.point.clone());\r\n if (!ev.isControlKey)\r\n break;\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n switch (this.method) {\r\n case ImprintSolidMethod.Element:\r\n return false;\r\n\r\n case ImprintSolidMethod.Edges:\r\n return super.wantAdditionalInput;\r\n\r\n case ImprintSolidMethod.Points:\r\n return super.wantAdditionalInput || this.points.length < 2;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (ImprintSolidMethod.Points !== this.method || 0 !== this.points.length)\r\n return;\r\n\r\n if (!this.haveAcceptedSubEntities)\r\n return;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setModeRectangular();\r\n hints.setOrigin(faceData.point);\r\n hints.setNormal(faceData.normal);\r\n hints.sendHints(false);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ImprintSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify edges of solids and surfaces to apply blend to. */\r\nexport abstract class BlendEdgesTool extends LocateSubEntityTool {\r\n // TODO: Tool settings for tangent edge propagation...\r\n protected propagateSmooth = true;\r\n\r\n protected override wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Edge === type; }\r\n\r\n protected override getSubEntityFilter(): SubEntityFilter | undefined {\r\n return { laminarEdges: true, smoothEdges: true };\r\n }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected async getTangentEdges(id: Id64String, edge: SubEntityProps): Promise<SubEntityProps[] | undefined> {\r\n try {\r\n return await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, edge, SubEntityType.Edge, { smoothEdges: true });\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async addTangentEdges(id: Id64String, edge?: SubEntityProps, chordTolerance?: number): Promise<void> {\r\n if (undefined === edge) {\r\n this._acceptedSubEntities.forEach(async (accepted) => {\r\n if (undefined === accepted.toolData)\r\n await this.addTangentEdges(id, accepted.props, accepted.chordTolerance);\r\n });\r\n return;\r\n }\r\n\r\n const tangentEdges = await this.getTangentEdges(id, edge);\r\n if (undefined === tangentEdges)\r\n return;\r\n\r\n tangentEdges.forEach(async (entry) => {\r\n if (!isSameSubEntity(entry, edge)) {\r\n const data = new SubEntityData(entry);\r\n data.toolData = edge; // Mark edge so we know it was added as tangent edge...\r\n await this.createSubEntityGraphic(id, data, chordTolerance);\r\n this._acceptedSubEntities.push(data);\r\n }\r\n });\r\n }\r\n\r\n protected async removeTangentEdges(_id: Id64String, edge?: SubEntityProps): Promise<void> {\r\n if (undefined === edge) {\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => undefined === entry.toolData );\r\n return;\r\n }\r\n\r\n const edgeData = this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, edge));\r\n if (undefined === edgeData)\r\n return undefined;\r\n\r\n const isTangentEdge = (other: SubEntityData): boolean => {\r\n const primaryOther = (undefined !== other.toolData ? other.toolData : other.props);\r\n return isSameSubEntity(primaryEdge, primaryOther);\r\n };\r\n\r\n const primaryEdge = (undefined !== edgeData.toolData ? edgeData.toolData : edgeData.props);\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isTangentEdge(entry));\r\n }\r\n\r\n protected override async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\r\n await super.addSubEntity(id, props);\r\n\r\n if (!this.propagateSmooth)\r\n return;\r\n\r\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(props.point)) : undefined);\r\n\r\n return this.addTangentEdges(id, props.subEntity, chordTolerance);\r\n }\r\n\r\n protected override async removeSubEntity(id: Id64String, props?: SubEntityLocationProps): Promise<void> {\r\n if (!this.propagateSmooth)\r\n return super.removeSubEntity(id, props);\r\n\r\n const edge = (undefined !== props) ? props.subEntity : this.getAcceptedSubEntityData()?.props;\r\n if (undefined === edge)\r\n return;\r\n\r\n return this.removeTangentEdges(id, edge);\r\n }\r\n\r\n protected override getAcceptedSubEntities(): SubEntityProps[] {\r\n const edges: SubEntityProps[] = [];\r\n this._acceptedSubEntities.forEach((entry) => { if (undefined === entry.toolData) edges.push(entry.props); });\r\n return edges;\r\n }\r\n}\r\n\r\n/** @alpha Identify edges of solids and surfaces to apply a rolling ball blend to. */\r\nexport class RoundEdgesTool extends BlendEdgesTool {\r\n public static override toolId = \"RoundEdges\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for blend radius...\r\n protected radius = 0.5;\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: BlendEdgesProps = { edges: this.getAcceptedSubEntities(), radii: this.radius, propagateSmooth: this.propagateSmooth };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"blendEdges\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RoundEdgesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify edges of solids and surfaces to apply a rolling ball blend to. */\r\nexport class ChamferEdgesTool extends BlendEdgesTool {\r\n public static override toolId = \"ChamferEdges\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for chamfer length, distances, distance + angle...\r\n protected mode = ChamferMode.Length;\r\n protected length = 0.5;\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: ChamferEdgesProps = { edges: this.getAcceptedSubEntities(), mode: this.mode, values1: this.length, propagateSmooth: this.propagateSmooth };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"chamferEdges\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ChamferEdgesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces of solids and surfaces to translate. */\r\nexport class SweepFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"SweepFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n // TODO: Tool settings for sweep distance...\r\n protected useDistance = false;\r\n protected distance = 0.1;\r\n protected addSmoothFaces = false;\r\n\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return this.isDynamicsStarted; }\r\n\r\n // TODO: Sweep open path to surface, sweep surface to solid...\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = await super.createSubEntityData(id, hit);\r\n\r\n if (undefined !== hit.point && undefined !== hit.normal)\r\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\r\n\r\n return data;\r\n }\r\n\r\n protected override drawAcceptedSubEntities(context: DecorateContext): void {\r\n super.drawAcceptedSubEntities(context);\r\n\r\n // Show pick point on last identified face, offset direction/distance will be computed from this location...\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 10);\r\n builder.addPointString([faceData.point]);\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n protected async getSmoothFaces(id: Id64String, face: SubEntityProps): Promise<SubEntityProps[] | undefined> {\r\n try {\r\n // NOTE: For sweep/translation, it makes sense to limit smooth to immediately adjacent...\r\n return await ElementGeometryCacheTool.callCommand(\"getConnectedSubEntities\", id, face, SubEntityType.Face, { smoothFaces: true, adjacentFaces: true });\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities)\r\n return undefined;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return undefined;\r\n\r\n const path = Vector3d.createStartEnd(faceData.point, ev.point);\r\n\r\n if (this.useDistance && undefined === path.scaleToLength(this.distance, path))\r\n return undefined;\r\n\r\n if (path.magnitude() < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const id = this.agenda.elements[0];\r\n\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${id}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n\r\n const faces = this.getAcceptedSubEntities();\r\n\r\n if (this.addSmoothFaces) {\r\n const allSmoothFaces: SubEntityProps[] = [];\r\n\r\n for (const face of faces) {\r\n const smoothFaces = await this.getSmoothFaces(id, face);\r\n if (undefined !== smoothFaces)\r\n allSmoothFaces.push(...smoothFaces);\r\n }\r\n\r\n for (const smooth of allSmoothFaces) {\r\n if (undefined === faces.find((selected) => isSameSubEntity(selected, smooth)))\r\n faces.unshift(smooth); // Preserve last selected entry as reference face...\r\n }\r\n }\r\n\r\n const params: SweepFacesProps = { faces, path };\r\n return await ElementGeometryCacheTool.callCommand(\"sweepFaces\", id, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (!this.haveAcceptedSubEntities)\r\n return;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOriginFixed = true;\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n hints.setModeRectangular();\r\n hints.setOrigin(faceData.point);\r\n hints.setXAxis2(faceData.normal);\r\n hints.sendHints(false);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SweepFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces of solids and surfaces to revolve. */\r\nexport class SpinFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"SpinFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected points: Point3d[] = [];\r\n\r\n // TODO: Tool settings for sweep angle...\r\n protected sweep = Angle.piOver2Radians;\r\n\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return this.isDynamicsStarted || (this.haveAcceptedSubEntities && !this.isControlDown); }\r\n\r\n // TODO: Spin open path to surface, spin surface to solid...\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override getSubEntityFilter(): SubEntityFilter | undefined {\r\n return { nonPlanarFaces: true };\r\n }\r\n\r\n protected override async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = await super.createSubEntityData(id, hit);\r\n\r\n if (undefined !== hit.point && undefined !== hit.normal)\r\n data.toolData = FaceLocationData.create(hit.point, hit.normal);\r\n\r\n return data;\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || !this.haveAcceptedSubEntities || this.points.length < (isAccept ? 2 : 1))\r\n return undefined;\r\n\r\n const direction = Vector3d.createStartEnd(this.points[0], isAccept ? this.points[1] : ev.point);\r\n if (direction.magnitude() < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n const origin = this.points[0];\r\n const angle = Angle.createRadians(this.sweep);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const id = this.agenda.elements[0];\r\n\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${id}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n\r\n const faces = this.getAcceptedSubEntities();\r\n const params: SpinFacesProps = { faces, origin, direction, angle };\r\n\r\n let result = await ElementGeometryCacheTool.callCommand(\"spinFaces\", id, params, opts);\r\n\r\n // Spun face can be used to create a pocket...retry with negative sweep...\r\n if (undefined === result) {\r\n angle.setRadians(-angle.radians);\r\n result = await ElementGeometryCacheTool.callCommand(\"spinFaces\", id, params, opts);\r\n }\r\n\r\n return result;\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (0 === this.points.length)\r\n return;\r\n\r\n const pts = this.points.slice();\r\n pts.push(ev.point.clone());\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 3);\r\n builder.addLineString(pts);\r\n\r\n context.addGraphic(builder.finish());\r\n\r\n super.onDynamicFrame(ev, context);\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n if (this.haveAcceptedSubEntities)\r\n this.points.push(ev.point.clone());\r\n\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n return super.wantAdditionalInput || this.points.length < 2;\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (!this.haveAcceptedSubEntities || 0 !== this.points.length)\r\n return;\r\n\r\n const faceData = this.getAcceptedSubEntityData()?.toolData as FaceLocationData;\r\n if (undefined === faceData)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setModeRectangular();\r\n hints.setOrigin(faceData.point);\r\n hints.setNormal(faceData.normal);\r\n hints.sendHints(false);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SpinFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,0FAA0F;IAC1F,4BAA4B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAChD,gEAAgE;IAChE,8BAA8B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,4DAA4D;IAC5D,0BAA0B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/C;AAED,uGAAuG;AACvG,qBAAa,SAAS;IACpB,OAAc,SAAS,SAAY;IACnC,OAAc,KAAK,SAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;WAIjF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,0FAA0F;IAC1F,4BAA4B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAChD,gEAAgE;IAChE,8BAA8B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,4DAA4D;IAC5D,0BAA0B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/C;AAED,uGAAuG;AACvG,qBAAa,SAAS;IACpB,OAAc,SAAS,SAAY;IACnC,OAAc,KAAK,SAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;WAIjF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CA2FvE"}
|
package/lib/esm/EditTool.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { editorChannel } from "@itwin/editor-common";
|
|
9
9
|
import { IModelApp, IpcApp } from "@itwin/core-frontend";
|
|
10
10
|
import { DeleteElementsTool } from "./DeleteElementsTool";
|
|
11
|
-
import { ChamferEdgesTool, CutSolidElementsTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool, IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SubtractSolidElementsTool, SweepAlongPathTool, ThickenSheetElementsTool, UniteSolidElementsTool } from "./SolidModelingTools";
|
|
11
|
+
import { ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool, IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool, SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool } from "./SolidModelingTools";
|
|
12
12
|
import { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool } from "./ProjectLocation/ProjectExtentsDecoration";
|
|
13
13
|
import { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from "./ProjectLocation/ProjectGeolocation";
|
|
14
14
|
import { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from "./SketchTools";
|
|
@@ -98,8 +98,11 @@ export class EditTools {
|
|
|
98
98
|
LoftProfilesTool,
|
|
99
99
|
OffsetFacesTool,
|
|
100
100
|
HollowFacesTool,
|
|
101
|
+
SweepFacesTool,
|
|
102
|
+
SpinFacesTool,
|
|
101
103
|
RoundEdgesTool,
|
|
102
104
|
ChamferEdgesTool,
|
|
105
|
+
DeleteSubEntitiesTool,
|
|
103
106
|
];
|
|
104
107
|
for (const tool of tools)
|
|
105
108
|
tool.register(this.namespace);
|
package/lib/esm/EditTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,eAAe,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { editorChannel } from \"@itwin/editor-common\";\r\nimport { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { DeleteElementsTool } from \"./DeleteElementsTool\";\r\nimport { ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool, IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool, SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool } from \"./SolidModelingTools\";\r\nimport { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool } from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from \"./ProjectLocation/ProjectGeolocation\";\r\nimport { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from \"./SketchTools\";\r\nimport { MoveElementsTool, RotateElementsTool } from \"./TransformElementsTool\";\r\nimport { RedoTool, UndoAllTool, UndoTool } from \"./UndoRedoTool\";\r\n\r\n/** @alpha Options for [[EditTools.initialize]]. */\r\nexport interface EditorOptions {\r\n /** If true, all tools will be registered. */\r\n registerAllTools?: true | undefined;\r\n /** If true, tools for undo/redo will be registered. */\r\n registerUndoRedoTools?: true | undefined;\r\n /** If true, tools for updating the project extents and geolocation will be registered. */\r\n registerProjectLocationTools?: true | undefined;\r\n /** If true, tools for basic manipulation will be registered. */\r\n registerBasicManipulationTools?: true | undefined;\r\n /** If true, tools for sketching will be registered. */\r\n registerSketchTools?: true | undefined;\r\n /** If true, tools for solid modeling will be registered. */\r\n registerSolidModelingTools?: true | undefined;\r\n}\r\n\r\n/** @alpha functions to support PrimitiveTool and InputCollector sub-classes with using EditCommand. */\r\nexport class EditTools {\r\n public static namespace = \"Editor\";\r\n public static tools = \"Editor:tools.\";\r\n private static _initialized = false;\r\n\r\n public static async startCommand<T>(commandId: string, iModelKey: string, ...args: any[]): Promise<T> {\r\n return IpcApp.callIpcChannel(editorChannel, \"startCommand\", commandId, iModelKey, ...args) as Promise<T>;\r\n }\r\n\r\n public static async callCommand(methodName: string, ...args: any[]): Promise<any> {\r\n return IpcApp.callIpcChannel(editorChannel, \"callMethod\", methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static translate(prompt: string) { return IModelApp.localization.getLocalizedString(this.tools + prompt); }\r\n\r\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await EditorTools.initialize();\r\n * ```\r\n */\r\n public static async initialize(options?: EditorOptions): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n // NOTE: We should clear the active command whenever a new PrimitiveTool is installed.\r\n // As tool run/install isn't currently async ToolAdmin.activeToolChanged can't be used at this time.\r\n // The active command will be cleared whenever another edit tool calls startCommand.\r\n this._initialized = true;\r\n\r\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\r\n const registerAllTools = options?.registerAllTools;\r\n\r\n // Register requested tools...\r\n if (registerAllTools || options?.registerUndoRedoTools) {\r\n const tools = [\r\n UndoAllTool,\r\n UndoTool,\r\n RedoTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerProjectLocationTools) {\r\n const tools = [\r\n ProjectLocationShowTool,\r\n ProjectLocationHideTool,\r\n ProjectLocationCancelTool,\r\n ProjectLocationSaveTool,\r\n ProjectGeolocationMoveTool,\r\n ProjectGeolocationPointTool,\r\n ProjectGeolocationNorthTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerBasicManipulationTools) {\r\n const tools = [\r\n DeleteElementsTool,\r\n MoveElementsTool,\r\n RotateElementsTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSketchTools) {\r\n const tools = [\r\n CreateArcTool,\r\n CreateBCurveTool,\r\n CreateCircleTool,\r\n CreateEllipseTool,\r\n CreateLineStringTool,\r\n CreateRectangleTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSolidModelingTools) {\r\n const tools = [\r\n UniteSolidElementsTool,\r\n SubtractSolidElementsTool,\r\n IntersectSolidElementsTool,\r\n SewSheetElementsTool,\r\n ThickenSheetElementsTool,\r\n CutSolidElementsTool,\r\n EmbossSolidElementsTool,\r\n ImprintSolidElementsTool,\r\n SweepAlongPathTool,\r\n LoftProfilesTool,\r\n OffsetFacesTool,\r\n HollowFacesTool,\r\n SweepFacesTool,\r\n SpinFacesTool,\r\n RoundEdgesTool,\r\n ChamferEdgesTool,\r\n DeleteSubEntitiesTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n return namespacePromise;\r\n }\r\n}\r\n"]}
|
|
@@ -104,6 +104,7 @@ export declare abstract class LocateSubEntityTool extends ElementGeometryCacheTo
|
|
|
104
104
|
protected getLocateAperture(ev: BeButtonEvent): number;
|
|
105
105
|
protected getMaxRayDistance(ev: BeButtonEvent, aperture: number): number;
|
|
106
106
|
protected getRayOrigin(ev: BeButtonEvent): Point3d;
|
|
107
|
+
protected wantHiddenEdges(vp: Viewport): boolean;
|
|
107
108
|
protected getSubEntityFilter(): SubEntityFilter | undefined;
|
|
108
109
|
protected pickSubEntities(id: Id64String, boresite: Ray3d, maxFace: number, maxEdge: number, maxVertex: number, maxDistance: number, hiddenEdgesVisible: boolean, filter?: SubEntityFilter): Promise<SubEntityLocationProps[] | undefined>;
|
|
109
110
|
protected doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAQ,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,0BAA0B,EAAgC,0BAA0B,EAAwB,uBAAuB,EAAE,eAAe,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChS,OAAO,EAAE,iBAAiB,EAAuC,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAW,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAuB,aAAa,EAAE,cAAc,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { Id64 } from "@itwin/core-bentley";
|
|
|
9
9
|
import { editorBuiltInCmdIds, SubEntityType } from "@itwin/editor-common";
|
|
10
10
|
import { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from "@itwin/core-common";
|
|
11
11
|
import { Point3d, Range3d, Transform } from "@itwin/core-geometry";
|
|
12
|
-
import { AccuDrawHintBuilder, BeModifierKeys, ElementSetTool, EventHandled, GraphicBranch, GraphicType, IModelApp, InputSource, readElementGraphics } from "@itwin/core-frontend";
|
|
12
|
+
import { AccuDrawHintBuilder, BeModifierKeys, CoordSource, ElementSetTool, EventHandled, GraphicBranch, GraphicType, IModelApp, InputSource, readElementGraphics } from "@itwin/core-frontend";
|
|
13
13
|
import { computeChordToleranceFromPoint } from "./CreateElementTool";
|
|
14
14
|
import { EditTools } from "./EditTool";
|
|
15
15
|
/** @alpha */
|
|
@@ -368,6 +368,9 @@ export class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
368
368
|
vp.npcToWorld(spacePoint, spacePoint);
|
|
369
369
|
return spacePoint;
|
|
370
370
|
}
|
|
371
|
+
wantHiddenEdges(vp) {
|
|
372
|
+
return vp.viewFlags.hiddenEdgesVisible();
|
|
373
|
+
}
|
|
371
374
|
getSubEntityFilter() { return undefined; }
|
|
372
375
|
async pickSubEntities(id, boresite, maxFace, maxEdge, maxVertex, maxDistance, hiddenEdgesVisible, filter) {
|
|
373
376
|
try {
|
|
@@ -399,7 +402,7 @@ export class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
399
402
|
const maxDistance = this.getMaxRayDistance(ev, aperture);
|
|
400
403
|
const spacePoint = this.getRayOrigin(ev);
|
|
401
404
|
const boresite = AccuDrawHintBuilder.getBoresite(spacePoint, vp);
|
|
402
|
-
const hiddenEdgesVisible =
|
|
405
|
+
const hiddenEdgesVisible = this.wantHiddenEdges(vp);
|
|
403
406
|
const filter = this.getSubEntityFilter();
|
|
404
407
|
let hits = await this.pickSubEntities(id, boresite, maxFace, maxEdge, maxVertex, maxDistance, hiddenEdgesVisible, filter);
|
|
405
408
|
// NOTE: Remove erroneous edge/vertex hits in perspective views by checking real xy distance to hit point...
|
|
@@ -452,6 +455,13 @@ export class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
452
455
|
this._locatedSubEntities = await this.doPickSubEntities(id, ev);
|
|
453
456
|
if (undefined === this._locatedSubEntities || 0 === this._locatedSubEntities.length)
|
|
454
457
|
return false;
|
|
458
|
+
/** NOTE: Set last button location to point on sub-entity when not snapping.
|
|
459
|
+
* If dynamics are enabled on this event, onDynamicFrame is called with this location.
|
|
460
|
+
*/
|
|
461
|
+
if (CoordSource.ElemSnap !== ev.coordsFrom) {
|
|
462
|
+
ev.point.setFrom(Point3d.fromJSON(this._locatedSubEntities[0].point));
|
|
463
|
+
IModelApp.toolAdmin.setAdjustedDataPoint(ev);
|
|
464
|
+
}
|
|
455
465
|
}
|
|
456
466
|
else {
|
|
457
467
|
await this.removeSubEntity(id);
|