@itwin/editor-frontend 3.0.0-dev.98 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +108 -1
- package/LICENSE.md +1 -1
- package/README.md +9 -9
- package/lib/cjs/EditTool.d.ts.map +1 -1
- package/lib/cjs/EditTool.js +18 -7
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/ElementGeometryTool.d.ts +64 -80
- package/lib/cjs/ElementGeometryTool.d.ts.map +1 -1
- package/lib/cjs/ElementGeometryTool.js +333 -295
- package/lib/cjs/ElementGeometryTool.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.d.ts +10 -17
- package/lib/cjs/ProjectLocation/ProjectGeolocation.d.ts.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js +54 -94
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/cjs/SketchTools.d.ts +21 -9
- package/lib/cjs/SketchTools.d.ts.map +1 -1
- package/lib/cjs/SketchTools.js +197 -204
- package/lib/cjs/SketchTools.js.map +1 -1
- package/lib/cjs/SolidModelingTools.d.ts +381 -0
- package/lib/cjs/SolidModelingTools.d.ts.map +1 -0
- package/lib/cjs/SolidModelingTools.js +1460 -0
- package/lib/cjs/SolidModelingTools.js.map +1 -0
- package/lib/cjs/TransformElementsTool.d.ts.map +1 -1
- package/lib/cjs/TransformElementsTool.js +8 -28
- package/lib/cjs/TransformElementsTool.js.map +1 -1
- package/lib/cjs/UndoRedoTool.js +1 -1
- package/lib/cjs/UndoRedoTool.js.map +1 -1
- package/lib/cjs/editor-frontend.d.ts +1 -0
- package/lib/cjs/editor-frontend.d.ts.map +1 -1
- package/lib/cjs/editor-frontend.js +1 -0
- package/lib/cjs/editor-frontend.js.map +1 -1
- package/lib/esm/EditTool.d.ts.map +1 -1
- package/lib/esm/EditTool.js +14 -3
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/ElementGeometryTool.d.ts +64 -80
- package/lib/esm/ElementGeometryTool.d.ts.map +1 -1
- package/lib/esm/ElementGeometryTool.js +334 -290
- package/lib/esm/ElementGeometryTool.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.d.ts +10 -17
- package/lib/esm/ProjectLocation/ProjectGeolocation.d.ts.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.js +54 -94
- package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/esm/SketchTools.d.ts +21 -9
- package/lib/esm/SketchTools.d.ts.map +1 -1
- package/lib/esm/SketchTools.js +198 -205
- package/lib/esm/SketchTools.js.map +1 -1
- package/lib/esm/SolidModelingTools.d.ts +381 -0
- package/lib/esm/SolidModelingTools.d.ts.map +1 -0
- package/lib/esm/SolidModelingTools.js +1435 -0
- package/lib/esm/SolidModelingTools.js.map +1 -0
- package/lib/esm/TransformElementsTool.d.ts.map +1 -1
- package/lib/esm/TransformElementsTool.js +8 -28
- package/lib/esm/TransformElementsTool.js.map +1 -1
- package/lib/esm/UndoRedoTool.js +1 -1
- package/lib/esm/UndoRedoTool.js.map +1 -1
- package/lib/esm/editor-frontend.d.ts +1 -0
- package/lib/esm/editor-frontend.d.ts.map +1 -1
- package/lib/esm/editor-frontend.js +1 -0
- package/lib/esm/editor-frontend.js.map +1 -1
- package/lib/public/locales/en/Editor.json +141 -3
- package/package.json +17 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformElementsTool.js","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BentleyError, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, Geometry, Matrix3d, Point3d, Transform, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, GeometricElementProps, IModelStatus, isPlacement2dProps, LinePixels, PersistentGraphicsRequestProps, Placement, Placement2d, Placement3d,\r\n} from \"@itwin/core-common\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport {\r\n AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CoreTools, DynamicsContext, ElementSetTool, GraphicBranch, GraphicType, IModelApp,\r\n IModelConnection, IpcApp, NotifyMessageDetails, OutputMessagePriority, readElementGraphics, RenderGraphic, RenderGraphicOwner,\r\n ToolAssistanceInstruction,\r\n} from \"@itwin/core-frontend\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, EnumerationChoice, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha */\r\nexport interface TransformGraphicsData {\r\n id: Id64String;\r\n placement: Placement;\r\n graphic: RenderGraphicOwner;\r\n}\r\n\r\n/** @alpha */\r\nexport class TransformGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly data: TransformGraphicsData[];\r\n public readonly pending: Map<Id64String, string>;\r\n public readonly prefix: string;\r\n /** Chord tolerance to use to stroke the element's geometry in meters. */\r\n public chordTolerance = 0.01;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n this.data = new Array<TransformGraphicsData>();\r\n this.pending = new Map<Id64String, string>();\r\n }\r\n\r\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\r\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\r\n\r\n private async createRequest(id: Id64String): Promise<TransformGraphicsData | undefined> {\r\n const elementProps = (await this.iModel.elements.getProps(id)) as GeometricElementProps[];\r\n if (0 === elementProps.length)\r\n return;\r\n\r\n const placementProps = elementProps[0].placement;\r\n if (undefined === placementProps)\r\n return;\r\n\r\n const placement = isPlacement2dProps(placementProps) ? Placement2d.fromJSON(placementProps) : Placement3d.fromJSON(placementProps);\r\n if (!placement.isValid)\r\n return; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const requestProps: PersistentGraphicsRequestProps = {\r\n id: this.getRequestId(id),\r\n elementId: id,\r\n toleranceLog10: this.getToleranceLog10(),\r\n };\r\n\r\n this.pending.set(id, requestProps.id); // keep track of requests so they can be cancelled...\r\n\r\n const graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, elementProps[0].model, placement.is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return { id, placement, graphic: IModelApp.renderSystem.createGraphicOwner(graphic) };\r\n }\r\n\r\n private disposeOfGraphics(): void {\r\n this.data.forEach((data) => {\r\n data.graphic.disposeGraphic();\r\n });\r\n\r\n this.data.length = 0;\r\n }\r\n\r\n private async cancelPendingRequests(): Promise<void> {\r\n const requests = new Array<string>();\r\n for (const [_key, id] of this.pending)\r\n requests.push(id);\r\n\r\n this.pending.clear();\r\n if (0 === requests.length)\r\n return;\r\n\r\n return IpcApp.callIpcHost(\"cancelElementGraphicsRequests\", this.iModel.key, requests);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied element id.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public async createSingleGraphic(id: Id64String): Promise<boolean> {\r\n try {\r\n const info = await this.createRequest(id);\r\n\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined === info?.graphic)\r\n return false;\r\n\r\n this.data.push(info);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request RenderGraphics for the supplied element ids. Does not wait for results as\r\n * generating graphics for a large number of elements can take time. Instead an array of [[RenderGraphicOwner]]\r\n * is populated as requests are resolved and the current dynamics frame displays what is available.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public createGraphics(elements: Id64Arg): void {\r\n if (0 === Id64.sizeOf(elements))\r\n return;\r\n\r\n try {\r\n for (const id of Id64.iterable(elements)) {\r\n const promise = this.createRequest(id);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then((info) => {\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined !== info?.graphic)\r\n this.data.push(info);\r\n });\r\n }\r\n } catch { }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]] and cancel requests that are still pending.\r\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\r\n */\r\n public async cleanupGraphics(): Promise<void> {\r\n await this.cancelPendingRequests();\r\n this.disposeOfGraphics();\r\n }\r\n\r\n public addSingleGraphic(graphic: RenderGraphic, transform: Transform, context: DynamicsContext): void {\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addGraphics(transform: Transform, context: DynamicsContext): void {\r\n if (0 === this.data.length)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n for (const data of this.data)\r\n branch.add(data.graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha Base class for applying a transform to element placements. */\r\nexport abstract class TransformElementsTool extends ElementSetTool {\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowGroups(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected get wantMakeCopy(): boolean { return false; } // For testing repeat vs. restart...\r\n protected _graphicsProvider?: TransformGraphicsProvider;\r\n protected _startedCmd?: string;\r\n\r\n protected abstract calculateTransform(ev: BeButtonEvent): Transform | undefined;\r\n\r\n protected async createAgendaGraphics(changed: boolean): Promise<void> {\r\n if (changed) {\r\n if (undefined === this._graphicsProvider)\r\n return; // Not yet needed...\r\n } else {\r\n if (undefined !== this._graphicsProvider)\r\n return; // Use existing graphics...\r\n }\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new TransformGraphicsProvider(this.iModel, this.toolId);\r\n else\r\n await this._graphicsProvider.cleanupGraphics();\r\n\r\n if (1 === this.agenda.length) {\r\n await this._graphicsProvider.createSingleGraphic(this.agenda.elements[0]);\r\n return;\r\n }\r\n\r\n this._graphicsProvider.createGraphics(this.agenda.elements);\r\n }\r\n\r\n protected async clearAgendaGraphics(): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n await this._graphicsProvider.cleanupGraphics();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n await this.createAgendaGraphics(true);\r\n }\r\n\r\n protected override async initAgendaDynamics(): Promise<boolean> {\r\n await this.createAgendaGraphics(false);\r\n return super.initAgendaDynamics();\r\n }\r\n\r\n protected transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphics(transform, context);\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n this.transformAgendaDynamics(transform, context);\r\n }\r\n\r\n protected updateAnchorLocation(transform: Transform): void {\r\n // Update anchor point to support creating additional copies (repeat vs. restart)...\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n transform.multiplyPoint3d(this.anchorPoint, this.anchorPoint);\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOrigin(this.anchorPoint);\r\n hints.sendHints();\r\n }\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n public static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<BasicManipulationCommandIpc[T]>;\r\n }\r\n\r\n protected async transformAgenda(transform: Transform): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await TransformElementsTool.callCommand(\"transformPlacement\", this.agenda.compressIds(), transform.toJSON()))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n await this.transformAgenda(transform);\r\n this.updateAnchorLocation(transform);\r\n }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n if (this.wantMakeCopy)\r\n return; // TODO: Update agenda to hold copies, replace current selection set with copies, etc...\r\n return super.onProcessComplete();\r\n }\r\n\r\n public override async onCleanup() {\r\n await this.clearAgendaGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n\r\n/** @alpha Move elements by applying translation to placement. */\r\nexport class MoveElementsTool extends TransformElementsTool {\r\n public static override toolId = \"MoveElements\";\r\n public static override iconSpec = \"icon-move\";\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === this.anchorPoint)\r\n return undefined;\r\n return Transform.createTranslation(ev.point.minus(this.anchorPoint));\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements)\r\n mainMsg = CoreTools.translate(this.wantAdditionalInput ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MoveElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateMethod {\r\n By3Points,\r\n ByAngle,\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateAbout {\r\n Point,\r\n Origin,\r\n Center,\r\n}\r\n\r\n/** @alpha Rotate elements by applying transform to placement. */\r\nexport class RotateElementsTool extends TransformElementsTool {\r\n public static override toolId = \"RotateElements\";\r\n public static override iconSpec = \"icon-rotate\";\r\n\r\n protected xAxisPoint?: Point3d;\r\n protected havePivotPoint = false;\r\n protected haveFinalPoint = false;\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n private static methodMessage(str: string) { return EditTools.translate(`RotateElements.Method.${str}`); }\r\n private static getMethodChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.methodMessage(\"3Points\"), value: RotateMethod.By3Points },\r\n { label: RotateElementsTool.methodMessage(\"Angle\"), value: RotateMethod.ByAngle },\r\n ];\r\n };\r\n\r\n private _methodProperty: DialogProperty<number> | undefined;\r\n public get methodProperty() {\r\n if (!this._methodProperty)\r\n this._methodProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateMethod\", EditTools.translate(\"RotateElements.Label.Method\"), RotateElementsTool.getMethodChoices()), RotateMethod.By3Points as number);\r\n return this._methodProperty;\r\n }\r\n\r\n public get rotateMethod(): RotateMethod { return this.methodProperty.value as RotateMethod; }\r\n public set rotateMethod(method: RotateMethod) { this.methodProperty.value = method; }\r\n\r\n private static aboutMessage(str: string) { return EditTools.translate(`RotateElements.About.${str}`); }\r\n private static getAboutChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.aboutMessage(\"Point\"), value: RotateAbout.Point },\r\n { label: RotateElementsTool.aboutMessage(\"Origin\"), value: RotateAbout.Origin },\r\n { label: RotateElementsTool.aboutMessage(\"Center\"), value: RotateAbout.Center },\r\n ];\r\n };\r\n\r\n private _aboutProperty: DialogProperty<number> | undefined;\r\n public get aboutProperty() {\r\n if (!this._aboutProperty)\r\n this._aboutProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateAbout\", EditTools.translate(\"RotateElements.Label.About\"), RotateElementsTool.getAboutChoices()), RotateAbout.Point as number);\r\n return this._aboutProperty;\r\n }\r\n\r\n public get rotateAbout(): RotateAbout { return this.aboutProperty.value as RotateAbout; }\r\n public set rotateAbout(method: RotateAbout) { this.aboutProperty.value = method; }\r\n\r\n private _angleProperty: DialogProperty<number> | undefined;\r\n public get angleProperty() {\r\n if (!this._angleProperty)\r\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"rotateAngle\", EditTools.translate(\"RotateElements.Label.Angle\")), 0.0);\r\n return this._angleProperty;\r\n }\r\n\r\n public get rotateAngle(): number { return this.angleProperty.value; }\r\n public set rotateAngle(value: number) { this.angleProperty.value = value; }\r\n\r\n protected override get requireAcceptForSelectionSetDynamics(): boolean { return RotateMethod.ByAngle !== this.rotateMethod; }\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(this.rotateAngle, 0, 0).toMatrix3d();\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(ev.point, rotMatrix);\r\n }\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return undefined;\r\n\r\n const vec1 = Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint);\r\n const vec2 = Vector3d.createStartEnd(this.anchorPoint, ev.point);\r\n\r\n if (!vec1.normalizeInPlace() || !vec2.normalizeInPlace())\r\n return undefined;\r\n\r\n const dot = vec1.dotProduct(vec2);\r\n if (dot > (1.0 - Geometry.smallAngleRadians))\r\n return undefined;\r\n\r\n if (dot < (-1.0 + Geometry.smallAngleRadians)) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(Math.PI, 0, 0).toMatrix3d(); // 180 degree rotation...\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, rotMatrix);\r\n }\r\n\r\n const zVec = vec1.unitCrossProduct(vec2);\r\n if (undefined === zVec)\r\n return undefined;\r\n\r\n const yVec = zVec.unitCrossProduct(vec1);\r\n if (undefined === yVec)\r\n return undefined;\r\n\r\n const matrix1 = Matrix3d.createRows(vec1, yVec, zVec);\r\n zVec.unitCrossProduct(vec2, yVec);\r\n const matrix2 = Matrix3d.createColumns(vec2, yVec, zVec);\r\n\r\n const matrix = matrix2.multiplyMatrixMatrix(matrix1);\r\n if (undefined === matrix)\r\n return undefined;\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, matrix);\r\n }\r\n\r\n protected override transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n const rotatePoint = Point3d.create();\r\n\r\n for (const data of this._graphicsProvider.data) {\r\n if (RotateAbout.Origin === this.rotateAbout)\r\n rotatePoint.setFrom(data.placement.origin);\r\n else\r\n rotatePoint.setFrom(data.placement.calculateRange().center);\r\n\r\n const rotateTrans = Transform.createFixedPointAndMatrix(rotatePoint, transform.matrix);\r\n this._graphicsProvider.addSingleGraphic(data.graphic, rotateTrans, context);\r\n }\r\n }\r\n\r\n protected override async transformAgenda(transform: Transform): Promise<void> {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgenda(transform);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await TransformElementsTool.callCommand(\"rotatePlacement\", this.agenda.compressIds(), transform.matrix.toJSON(), RotateAbout.Center === this.rotateAbout))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined !== transform)\r\n return this.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 1, LinePixels.Code2);\r\n builder.addLineString([this.anchorPoint.clone(), ev.point.clone()]);\r\n context.addGraphic(builder.finish());\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantAdditionalInput;\r\n\r\n return !this.haveFinalPoint;\r\n }\r\n\r\n protected override wantProcessAgenda(ev: BeButtonEvent): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantProcessAgenda(ev);\r\n\r\n if (!this.havePivotPoint)\r\n this.havePivotPoint = true; // Uses anchorPoint...\r\n else if (undefined === this.xAxisPoint)\r\n this.xAxisPoint = ev.point.clone();\r\n else if (!this.haveFinalPoint)\r\n this.haveFinalPoint = true; // Uses button event...\r\n\r\n return super.wantProcessAgenda(ev);\r\n }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n super.setupAndPromptForNextAction();\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return;\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setXAxis(Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint));\r\n hints.setOrigin(this.anchorPoint);\r\n hints.setModePolar();\r\n hints.sendHints();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements && this.wantAdditionalInput)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n } else {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements) {\r\n if (!this.havePivotPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n else if (undefined === this.xAxisPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineStart\");\r\n else\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineAmount\");\r\n }\r\n }\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n if (this.methodProperty.name === updatedValue.propertyName) {\r\n this.methodProperty.value = updatedValue.value.value as number;\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, this.methodProperty.item);\r\n await this.onRestartTool(); // calling restart, not reinitialize to not exit tool for selection set...\r\n return true;\r\n } else if (this.aboutProperty.name === updatedValue.propertyName) {\r\n this.aboutProperty.value = updatedValue.value.value as number;\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, this.aboutProperty.item);\r\n return true;\r\n } else if (this.angleProperty.name === updatedValue.propertyName) {\r\n this.rotateAngle = updatedValue.value.value as number;\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, this.angleProperty.item);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n toolSettings.push(this.methodProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.aboutProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RotateElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!await super.onInstall())\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n const rotateMethod = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, this.methodProperty.name);\r\n if (undefined !== rotateMethod)\r\n this.methodProperty.dialogItemValue = rotateMethod;\r\n\r\n const rotateAbout = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, this.aboutProperty.name);\r\n if (undefined !== rotateAbout)\r\n this.aboutProperty.dialogItemValue = rotateAbout;\r\n\r\n const rotateAngle = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, this.angleProperty.name);\r\n if (undefined !== rotateAngle)\r\n this.angleProperty.dialogItemValue = rotateAngle;\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `method=0|1` How rotate angle will be specified. 0 for by 3 points, 1 for by specified angle.\r\n * - `about=0|1|2` Location to rotate about. 0 for point, 1 for placement origin, and 2 for center of range.\r\n * - `angle=number` Rotation angle in degrees when not defining angle by points.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n let rotateMethod;\r\n let rotateAbout;\r\n let rotateAngle;\r\n\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"me\")) {\r\n const method = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(method)) {\r\n switch (method) {\r\n case 0:\r\n rotateMethod = RotateMethod.By3Points;\r\n break;\r\n case 1:\r\n rotateMethod = RotateMethod.ByAngle;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"ab\")) {\r\n const about = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(about)) {\r\n switch (about) {\r\n case 0:\r\n rotateAbout = RotateAbout.Point;\r\n break;\r\n case 1:\r\n rotateAbout = RotateAbout.Origin;\r\n break;\r\n case 2:\r\n rotateAbout = RotateAbout.Center;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"an\")) {\r\n const angle = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(angle)) {\r\n rotateAngle = Angle.createDegrees(angle).radians;\r\n }\r\n }\r\n }\r\n\r\n // Update current session values so keyin args are picked up for tool settings/restart...\r\n if (undefined !== rotateMethod)\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: this.methodProperty.name, value: { value: rotateMethod } });\r\n\r\n if (undefined !== rotateAbout)\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: this.aboutProperty.name, value: { value: rotateAbout } });\r\n\r\n if (undefined !== rotateAngle)\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: this.angleProperty.name, value: { value: rotateAngle } });\r\n\r\n return this.run();\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"TransformElementsTool.js","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BentleyError, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, Geometry, Matrix3d, Point3d, Transform, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, GeometricElementProps, IModelStatus, isPlacement2dProps, LinePixels, PersistentGraphicsRequestProps, Placement, Placement2d, Placement3d,\r\n} from \"@itwin/core-common\";\r\nimport { BasicManipulationCommandIpc, editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport {\r\n AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CoreTools, DynamicsContext, ElementSetTool, GraphicBranch, GraphicType, IModelApp,\r\n IModelConnection, IpcApp, NotifyMessageDetails, OutputMessagePriority, readElementGraphics, RenderGraphic, RenderGraphicOwner,\r\n ToolAssistanceInstruction,\r\n} from \"@itwin/core-frontend\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, EnumerationChoice, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha */\r\nexport interface TransformGraphicsData {\r\n id: Id64String;\r\n placement: Placement;\r\n graphic: RenderGraphicOwner;\r\n}\r\n\r\n/** @alpha */\r\nexport class TransformGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly data: TransformGraphicsData[];\r\n public readonly pending: Map<Id64String, string>;\r\n public readonly prefix: string;\r\n /** Chord tolerance to use to stroke the element's geometry in meters. */\r\n public chordTolerance = 0.01;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n this.data = new Array<TransformGraphicsData>();\r\n this.pending = new Map<Id64String, string>();\r\n }\r\n\r\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\r\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\r\n\r\n private async createRequest(id: Id64String): Promise<TransformGraphicsData | undefined> {\r\n const elementProps = (await this.iModel.elements.getProps(id)) as GeometricElementProps[];\r\n if (0 === elementProps.length)\r\n return;\r\n\r\n const placementProps = elementProps[0].placement;\r\n if (undefined === placementProps)\r\n return;\r\n\r\n const placement = isPlacement2dProps(placementProps) ? Placement2d.fromJSON(placementProps) : Placement3d.fromJSON(placementProps);\r\n if (!placement.isValid)\r\n return; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const requestProps: PersistentGraphicsRequestProps = {\r\n id: this.getRequestId(id),\r\n elementId: id,\r\n toleranceLog10: this.getToleranceLog10(),\r\n };\r\n\r\n this.pending.set(id, requestProps.id); // keep track of requests so they can be cancelled...\r\n\r\n const graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, elementProps[0].model, placement.is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return { id, placement, graphic: IModelApp.renderSystem.createGraphicOwner(graphic) };\r\n }\r\n\r\n private disposeOfGraphics(): void {\r\n this.data.forEach((data) => {\r\n data.graphic.disposeGraphic();\r\n });\r\n\r\n this.data.length = 0;\r\n }\r\n\r\n private async cancelPendingRequests(): Promise<void> {\r\n const requests = new Array<string>();\r\n for (const [_key, id] of this.pending)\r\n requests.push(id);\r\n\r\n this.pending.clear();\r\n if (0 === requests.length)\r\n return;\r\n\r\n return IpcApp.callIpcHost(\"cancelElementGraphicsRequests\", this.iModel.key, requests);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied element id.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public async createSingleGraphic(id: Id64String): Promise<boolean> {\r\n try {\r\n const info = await this.createRequest(id);\r\n\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined === info?.graphic)\r\n return false;\r\n\r\n this.data.push(info);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request RenderGraphics for the supplied element ids. Does not wait for results as\r\n * generating graphics for a large number of elements can take time. Instead an array of [[RenderGraphicOwner]]\r\n * is populated as requests are resolved and the current dynamics frame displays what is available.\r\n * @see [[cleanupGraphics]] Must be called when the tool exits.\r\n */\r\n public createGraphics(elements: Id64Arg): void {\r\n if (0 === Id64.sizeOf(elements))\r\n return;\r\n\r\n try {\r\n for (const id of Id64.iterable(elements)) {\r\n const promise = this.createRequest(id);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then((info) => {\r\n if (undefined !== info?.id)\r\n this.pending.delete(info.id);\r\n\r\n if (undefined !== info?.graphic)\r\n this.data.push(info);\r\n });\r\n }\r\n } catch { }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]] and cancel requests that are still pending.\r\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\r\n */\r\n public async cleanupGraphics(): Promise<void> {\r\n await this.cancelPendingRequests();\r\n this.disposeOfGraphics();\r\n }\r\n\r\n public addSingleGraphic(graphic: RenderGraphic, transform: Transform, context: DynamicsContext): void {\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addGraphics(transform: Transform, context: DynamicsContext): void {\r\n if (0 === this.data.length)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n for (const data of this.data)\r\n branch.add(data.graphic);\r\n\r\n const branchGraphic = context.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha Base class for applying a transform to element placements. */\r\nexport abstract class TransformElementsTool extends ElementSetTool {\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowGroups(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected get wantMakeCopy(): boolean { return false; } // For testing repeat vs. restart...\r\n protected _graphicsProvider?: TransformGraphicsProvider;\r\n protected _startedCmd?: string;\r\n\r\n protected abstract calculateTransform(ev: BeButtonEvent): Transform | undefined;\r\n\r\n protected async createAgendaGraphics(changed: boolean): Promise<void> {\r\n if (changed) {\r\n if (undefined === this._graphicsProvider)\r\n return; // Not yet needed...\r\n } else {\r\n if (undefined !== this._graphicsProvider)\r\n return; // Use existing graphics...\r\n }\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new TransformGraphicsProvider(this.iModel, this.toolId);\r\n else\r\n await this._graphicsProvider.cleanupGraphics();\r\n\r\n if (1 === this.agenda.length) {\r\n await this._graphicsProvider.createSingleGraphic(this.agenda.elements[0]);\r\n return;\r\n }\r\n\r\n this._graphicsProvider.createGraphics(this.agenda.elements);\r\n }\r\n\r\n protected async clearAgendaGraphics(): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n await this._graphicsProvider.cleanupGraphics();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n await this.createAgendaGraphics(true);\r\n }\r\n\r\n protected override async initAgendaDynamics(): Promise<boolean> {\r\n await this.createAgendaGraphics(false);\r\n return super.initAgendaDynamics();\r\n }\r\n\r\n protected transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphics(transform, context);\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n this.transformAgendaDynamics(transform, context);\r\n }\r\n\r\n protected updateAnchorLocation(transform: Transform): void {\r\n // Update anchor point to support creating additional copies (repeat vs. restart)...\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n transform.multiplyPoint3d(this.anchorPoint, this.anchorPoint);\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOrigin(this.anchorPoint);\r\n hints.sendHints();\r\n }\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n public static callCommand<T extends keyof BasicManipulationCommandIpc>(method: T, ...args: Parameters<BasicManipulationCommandIpc[T]>): ReturnType<BasicManipulationCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<BasicManipulationCommandIpc[T]>;\r\n }\r\n\r\n protected async transformAgenda(transform: Transform): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await TransformElementsTool.callCommand(\"transformPlacement\", this.agenda.compressIds(), transform.toJSON()))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined === transform)\r\n return;\r\n await this.transformAgenda(transform);\r\n this.updateAnchorLocation(transform);\r\n }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n if (this.wantMakeCopy)\r\n return; // TODO: Update agenda to hold copies, replace current selection set with copies, etc...\r\n return super.onProcessComplete();\r\n }\r\n\r\n public override async onCleanup() {\r\n await this.clearAgendaGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n\r\n/** @alpha Move elements by applying translation to placement. */\r\nexport class MoveElementsTool extends TransformElementsTool {\r\n public static override toolId = \"MoveElements\";\r\n public static override iconSpec = \"icon-move\";\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === this.anchorPoint)\r\n return undefined;\r\n return Transform.createTranslation(ev.point.minus(this.anchorPoint));\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements)\r\n mainMsg = CoreTools.translate(this.wantAdditionalInput ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MoveElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateMethod {\r\n By3Points,\r\n ByAngle,\r\n}\r\n\r\n/** @alpha */\r\nexport enum RotateAbout {\r\n Point,\r\n Origin,\r\n Center,\r\n}\r\n\r\n/** @alpha Rotate elements by applying transform to placement. */\r\nexport class RotateElementsTool extends TransformElementsTool {\r\n public static override toolId = \"RotateElements\";\r\n public static override iconSpec = \"icon-rotate\";\r\n\r\n protected xAxisPoint?: Point3d;\r\n protected havePivotPoint = false;\r\n protected haveFinalPoint = false;\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n private static methodMessage(str: string) { return EditTools.translate(`RotateElements.Method.${str}`); }\r\n private static getMethodChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.methodMessage(\"3Points\"), value: RotateMethod.By3Points },\r\n { label: RotateElementsTool.methodMessage(\"Angle\"), value: RotateMethod.ByAngle },\r\n ];\r\n };\r\n\r\n private _methodProperty: DialogProperty<number> | undefined;\r\n public get methodProperty() {\r\n if (!this._methodProperty)\r\n this._methodProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateMethod\", EditTools.translate(\"RotateElements.Label.Method\"), RotateElementsTool.getMethodChoices()), RotateMethod.By3Points as number);\r\n return this._methodProperty;\r\n }\r\n\r\n public get rotateMethod(): RotateMethod { return this.methodProperty.value as RotateMethod; }\r\n public set rotateMethod(method: RotateMethod) { this.methodProperty.value = method; }\r\n\r\n private static aboutMessage(str: string) { return EditTools.translate(`RotateElements.About.${str}`); }\r\n private static getAboutChoices = (): EnumerationChoice[] => {\r\n return [\r\n { label: RotateElementsTool.aboutMessage(\"Point\"), value: RotateAbout.Point },\r\n { label: RotateElementsTool.aboutMessage(\"Origin\"), value: RotateAbout.Origin },\r\n { label: RotateElementsTool.aboutMessage(\"Center\"), value: RotateAbout.Center },\r\n ];\r\n };\r\n\r\n private _aboutProperty: DialogProperty<number> | undefined;\r\n public get aboutProperty() {\r\n if (!this._aboutProperty)\r\n this._aboutProperty = new DialogProperty<number>(PropertyDescriptionHelper.buildEnumPicklistEditorDescription(\r\n \"rotateAbout\", EditTools.translate(\"RotateElements.Label.About\"), RotateElementsTool.getAboutChoices()), RotateAbout.Point as number);\r\n return this._aboutProperty;\r\n }\r\n\r\n public get rotateAbout(): RotateAbout { return this.aboutProperty.value as RotateAbout; }\r\n public set rotateAbout(method: RotateAbout) { this.aboutProperty.value = method; }\r\n\r\n private _angleProperty: DialogProperty<number> | undefined;\r\n public get angleProperty() {\r\n if (!this._angleProperty)\r\n this._angleProperty = new DialogProperty<number>(new AngleDescription(\"rotateAngle\", EditTools.translate(\"RotateElements.Label.Angle\")), 0.0);\r\n return this._angleProperty;\r\n }\r\n\r\n public get rotateAngle(): number { return this.angleProperty.value; }\r\n public set rotateAngle(value: number) { this.angleProperty.value = value; }\r\n\r\n protected override get requireAcceptForSelectionSetDynamics(): boolean { return RotateMethod.ByAngle !== this.rotateMethod; }\r\n\r\n protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(this.rotateAngle, 0, 0).toMatrix3d();\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(ev.point, rotMatrix);\r\n }\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return undefined;\r\n\r\n const vec1 = Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint);\r\n const vec2 = Vector3d.createStartEnd(this.anchorPoint, ev.point);\r\n\r\n if (!vec1.normalizeInPlace() || !vec2.normalizeInPlace())\r\n return undefined;\r\n\r\n const dot = vec1.dotProduct(vec2);\r\n if (dot > (1.0 - Geometry.smallAngleRadians))\r\n return undefined;\r\n\r\n if (dot < (-1.0 + Geometry.smallAngleRadians)) {\r\n const rotMatrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n if (undefined === rotMatrix)\r\n return undefined;\r\n\r\n const invMatrix = rotMatrix.inverse();\r\n if (undefined === invMatrix)\r\n return undefined;\r\n\r\n const angMatrix = YawPitchRollAngles.createRadians(Math.PI, 0, 0).toMatrix3d(); // 180 degree rotation...\r\n if (undefined === angMatrix)\r\n return undefined;\r\n\r\n angMatrix.multiplyMatrixMatrix(invMatrix, invMatrix);\r\n rotMatrix.multiplyMatrixMatrix(invMatrix, rotMatrix);\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, rotMatrix);\r\n }\r\n\r\n const zVec = vec1.unitCrossProduct(vec2);\r\n if (undefined === zVec)\r\n return undefined;\r\n\r\n const yVec = zVec.unitCrossProduct(vec1);\r\n if (undefined === yVec)\r\n return undefined;\r\n\r\n const matrix1 = Matrix3d.createRows(vec1, yVec, zVec);\r\n zVec.unitCrossProduct(vec2, yVec);\r\n const matrix2 = Matrix3d.createColumns(vec2, yVec, zVec);\r\n\r\n const matrix = matrix2.multiplyMatrixMatrix(matrix1);\r\n if (undefined === matrix)\r\n return undefined;\r\n\r\n return Transform.createFixedPointAndMatrix(this.anchorPoint, matrix);\r\n }\r\n\r\n protected override transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n const rotatePoint = Point3d.create();\r\n\r\n for (const data of this._graphicsProvider.data) {\r\n if (RotateAbout.Origin === this.rotateAbout)\r\n rotatePoint.setFrom(data.placement.origin);\r\n else\r\n rotatePoint.setFrom(data.placement.calculateRange().center);\r\n\r\n const rotateTrans = Transform.createFixedPointAndMatrix(rotatePoint, transform.matrix);\r\n this._graphicsProvider.addSingleGraphic(data.graphic, rotateTrans, context);\r\n }\r\n }\r\n\r\n protected override async transformAgenda(transform: Transform): Promise<void> {\r\n if (RotateAbout.Point === this.rotateAbout)\r\n return super.transformAgenda(transform);\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (IModelStatus.Success === await TransformElementsTool.callCommand(\"rotatePlacement\", this.agenda.compressIds(), transform.matrix.toJSON(), RotateAbout.Center === this.rotateAbout))\r\n await this.saveChanges();\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n }\r\n }\r\n\r\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\r\n const transform = this.calculateTransform(ev);\r\n if (undefined !== transform)\r\n return this.transformAgendaDynamics(transform, context);\r\n\r\n if (undefined === this.anchorPoint)\r\n return;\r\n\r\n const builder = context.createGraphic({ type: GraphicType.WorldOverlay });\r\n builder.setSymbology(context.viewport.getContrastToBackgroundColor(), ColorDef.black, 1, LinePixels.Code2);\r\n builder.addLineString([this.anchorPoint.clone(), ev.point.clone()]);\r\n context.addGraphic(builder.finish());\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantAdditionalInput;\r\n\r\n return !this.haveFinalPoint;\r\n }\r\n\r\n protected override wantProcessAgenda(ev: BeButtonEvent): boolean {\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return super.wantProcessAgenda(ev);\r\n\r\n if (!this.havePivotPoint)\r\n this.havePivotPoint = true; // Uses anchorPoint...\r\n else if (undefined === this.xAxisPoint)\r\n this.xAxisPoint = ev.point.clone();\r\n else if (!this.haveFinalPoint)\r\n this.haveFinalPoint = true; // Uses button event...\r\n\r\n return super.wantProcessAgenda(ev);\r\n }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n super.setupAndPromptForNextAction();\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n return;\r\n\r\n if (undefined === this.anchorPoint || undefined === this.xAxisPoint)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setXAxis(Vector3d.createStartEnd(this.anchorPoint, this.xAxisPoint));\r\n hints.setOrigin(this.anchorPoint);\r\n hints.setModePolar();\r\n hints.sendHints();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (RotateMethod.ByAngle === this.rotateMethod) {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements && this.wantAdditionalInput)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n } else {\r\n if (!this.isSelectByPoints && !this.wantAdditionalElements) {\r\n if (!this.havePivotPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.IdentifyPoint\");\r\n else if (undefined === this.xAxisPoint)\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineStart\");\r\n else\r\n mainMsg = EditTools.translate(\"RotateElements.Prompts.DefineAmount\");\r\n }\r\n }\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n if (!this.changeToolSettingPropertyValue(updatedValue))\r\n return false;\r\n\r\n if (this.methodProperty.name === updatedValue.propertyName)\r\n await this.onRestartTool(); // calling restart, not reinitialize to not exit tool for selection set...\r\n\r\n return true;\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n toolSettings.push(this.methodProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.aboutProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n\r\n if (RotateMethod.ByAngle === this.rotateMethod)\r\n toolSettings.push(this.angleProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new RotateElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!await super.onInstall())\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.methodProperty, this.aboutProperty, this.angleProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `method=0|1` How rotate angle will be specified. 0 for by 3 points, 1 for by specified angle.\r\n * - `about=0|1|2` Location to rotate about. 0 for point, 1 for placement origin, and 2 for center of range.\r\n * - `angle=number` Rotation angle in degrees when not defining angle by points.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n let rotateMethod;\r\n let rotateAbout;\r\n let rotateAngle;\r\n\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"me\")) {\r\n const method = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(method)) {\r\n switch (method) {\r\n case 0:\r\n rotateMethod = RotateMethod.By3Points;\r\n break;\r\n case 1:\r\n rotateMethod = RotateMethod.ByAngle;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"ab\")) {\r\n const about = Number.parseInt(parts[1], 10);\r\n if (!Number.isNaN(about)) {\r\n switch (about) {\r\n case 0:\r\n rotateAbout = RotateAbout.Point;\r\n break;\r\n case 1:\r\n rotateAbout = RotateAbout.Origin;\r\n break;\r\n case 2:\r\n rotateAbout = RotateAbout.Center;\r\n break;\r\n }\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"an\")) {\r\n const angle = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(angle)) {\r\n rotateAngle = Angle.createDegrees(angle).radians;\r\n }\r\n }\r\n }\r\n\r\n // Update current session values so keyin args are picked up for tool settings/restart...\r\n if (undefined !== rotateMethod)\r\n this.saveToolSettingPropertyValue(this.methodProperty, { value: rotateMethod });\r\n\r\n if (undefined !== rotateAbout)\r\n this.saveToolSettingPropertyValue(this.aboutProperty, { value: rotateAbout });\r\n\r\n if (undefined !== rotateAngle)\r\n this.saveToolSettingPropertyValue(this.angleProperty, { value: rotateAngle });\r\n\r\n return this.run();\r\n }\r\n}\r\n\r\n"]}
|
package/lib/cjs/UndoRedoTool.js
CHANGED
|
@@ -16,7 +16,7 @@ class UndoAllTool extends core_frontend_1.Tool {
|
|
|
16
16
|
await core_frontend_1.IpcApp.callIpcHost("reverseAllTxn", imodel.key);
|
|
17
17
|
// ### TODO Restart of primitive tool should be handled by Txn event listener...needs to happen even if not the active tool...
|
|
18
18
|
if (undefined !== core_frontend_1.IModelApp.toolAdmin.primitiveTool)
|
|
19
|
-
core_frontend_1.IModelApp.toolAdmin.primitiveTool.onRestartTool();
|
|
19
|
+
await core_frontend_1.IModelApp.toolAdmin.primitiveTool.onRestartTool();
|
|
20
20
|
return true;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UndoRedoTool.js","sourceRoot":"","sources":["../../src/UndoRedoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,wDAA+D;AAE/D,sCAAsC;AACtC,MAAa,WAAY,SAAQ,oBAAI;IAEnB,KAAK,CAAC,GAAG;;QACvB,MAAM,MAAM,GAAG,MAAA,yBAAS,CAAC,WAAW,CAAC,YAAY,0CAAE,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,qBAAqB;YAC5E,OAAO,IAAI,CAAC;QAEd,MAAM,sBAAM,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAEtD,8HAA8H;QAC9H,IAAI,SAAS,KAAK,yBAAS,CAAC,SAAS,CAAC,aAAa;YACjD,yBAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"UndoRedoTool.js","sourceRoot":"","sources":["../../src/UndoRedoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,wDAA+D;AAE/D,sCAAsC;AACtC,MAAa,WAAY,SAAQ,oBAAI;IAEnB,KAAK,CAAC,GAAG;;QACvB,MAAM,MAAM,GAAG,MAAA,yBAAS,CAAC,WAAW,CAAC,YAAY,0CAAE,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,qBAAqB;YAC5E,OAAO,IAAI,CAAC;QAEd,MAAM,sBAAM,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAEtD,8HAA8H;QAC9H,IAAI,SAAS,KAAK,yBAAS,CAAC,SAAS,CAAC,aAAa;YACjD,MAAM,yBAAS,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;;AAbH,kCAcC;AAbwB,kBAAM,GAAG,SAAS,CAAC;AAe5C,wDAAwD;AACxD,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AALH,4BAMC;AALwB,eAAM,GAAG,MAAM,CAAC;AAOzC,wDAAwD;AACxD,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AALH,4BAMC;AALwB,eAAM,GAAG,MAAM,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModelApp, IpcApp, Tool } from \"@itwin/core-frontend\";\r\n\r\n/** @alpha Undo all element changes */\r\nexport class UndoAllTool extends Tool {\r\n public static override toolId = \"UndoAll\";\r\n public override async run(): Promise<boolean> {\r\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\r\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection)\r\n return true;\r\n\r\n await IpcApp.callIpcHost(\"reverseAllTxn\", imodel.key);\r\n\r\n // ### TODO Restart of primitive tool should be handled by Txn event listener...needs to happen even if not the active tool...\r\n if (undefined !== IModelApp.toolAdmin.primitiveTool)\r\n await IModelApp.toolAdmin.primitiveTool.onRestartTool();\r\n return true;\r\n }\r\n}\r\n\r\n/** @alpha Undo active tool steps, or element changes */\r\nexport class UndoTool extends Tool {\r\n public static override toolId = \"Undo\";\r\n public override async run(): Promise<boolean> {\r\n await IModelApp.toolAdmin.doUndoOperation();\r\n return true;\r\n }\r\n}\r\n\r\n/** @alpha Redo active tool steps, or element changes */\r\nexport class RedoTool extends Tool {\r\n public static override toolId = \"Redo\";\r\n public override async run(): Promise<boolean> {\r\n await IModelApp.toolAdmin.doRedoOperation();\r\n return true;\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -6,6 +6,7 @@ export * from "./DeleteElementsTool";
|
|
|
6
6
|
export * from "./EditTool";
|
|
7
7
|
export * from "./ElementGeometryTool";
|
|
8
8
|
export * from "./SketchTools";
|
|
9
|
+
export * from "./SolidModelingTools";
|
|
9
10
|
export * from "./TransformElementsTool";
|
|
10
11
|
export * from "./UndoRedoTool";
|
|
11
12
|
export * from "./ProjectLocation/ProjectExtentsDecoration";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-frontend.d.ts","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"editor-frontend.d.ts","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC"}
|
|
@@ -22,6 +22,7 @@ __exportStar(require("./DeleteElementsTool"), exports);
|
|
|
22
22
|
__exportStar(require("./EditTool"), exports);
|
|
23
23
|
__exportStar(require("./ElementGeometryTool"), exports);
|
|
24
24
|
__exportStar(require("./SketchTools"), exports);
|
|
25
|
+
__exportStar(require("./SolidModelingTools"), exports);
|
|
25
26
|
__exportStar(require("./TransformElementsTool"), exports);
|
|
26
27
|
__exportStar(require("./UndoRedoTool"), exports);
|
|
27
28
|
__exportStar(require("./ProjectLocation/ProjectExtentsDecoration"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-frontend.js","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;GAEG;AACH,sDAAoC;AACpC,uDAAqC;AACrC,6CAA2B;AAC3B,wDAAsC;AACtC,gDAA8B;AAC9B,0DAAwC;AACxC,iDAA+B;AAC/B,6EAA2D;AAC3D,uEAAqD","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\nexport * from \"./CreateElementTool\";\r\nexport * from \"./DeleteElementsTool\";\r\nexport * from \"./EditTool\";\r\nexport * from \"./ElementGeometryTool\";\r\nexport * from \"./SketchTools\";\r\nexport * from \"./TransformElementsTool\";\r\nexport * from \"./UndoRedoTool\";\r\nexport * from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nexport * from \"./ProjectLocation/ProjectGeolocation\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"editor-frontend.js","sourceRoot":"","sources":["../../src/editor-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;GAEG;AACH,sDAAoC;AACpC,uDAAqC;AACrC,6CAA2B;AAC3B,wDAAsC;AACtC,gDAA8B;AAC9B,uDAAqC;AACrC,0DAAwC;AACxC,iDAA+B;AAC/B,6EAA2D;AAC3D,uEAAqD","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\nexport * from \"./CreateElementTool\";\r\nexport * from \"./DeleteElementsTool\";\r\nexport * from \"./EditTool\";\r\nexport * from \"./ElementGeometryTool\";\r\nexport * from \"./SketchTools\";\r\nexport * from \"./SolidModelingTools\";\r\nexport * from \"./TransformElementsTool\";\r\nexport * from \"./UndoRedoTool\";\r\nexport * from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nexport * from \"./ProjectLocation/ProjectGeolocation\";\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 { HollowFacesTool, IntersectSolidElementsTool, OffsetFacesTool, SewSheetElementsTool, SubtractSolidElementsTool, UniteSolidElementsTool } from "./
|
|
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";
|
|
@@ -86,12 +86,23 @@ export class EditTools {
|
|
|
86
86
|
}
|
|
87
87
|
if (registerAllTools || (options === null || options === void 0 ? void 0 : options.registerSolidModelingTools)) {
|
|
88
88
|
const tools = [
|
|
89
|
-
OffsetFacesTool,
|
|
90
|
-
HollowFacesTool,
|
|
91
89
|
UniteSolidElementsTool,
|
|
92
90
|
SubtractSolidElementsTool,
|
|
93
91
|
IntersectSolidElementsTool,
|
|
94
92
|
SewSheetElementsTool,
|
|
93
|
+
ThickenSheetElementsTool,
|
|
94
|
+
CutSolidElementsTool,
|
|
95
|
+
EmbossSolidElementsTool,
|
|
96
|
+
ImprintSolidElementsTool,
|
|
97
|
+
SweepAlongPathTool,
|
|
98
|
+
LoftProfilesTool,
|
|
99
|
+
OffsetFacesTool,
|
|
100
|
+
HollowFacesTool,
|
|
101
|
+
SweepFacesTool,
|
|
102
|
+
SpinFacesTool,
|
|
103
|
+
RoundEdgesTool,
|
|
104
|
+
ChamferEdgesTool,
|
|
105
|
+
DeleteSubEntitiesTool,
|
|
95
106
|
];
|
|
96
107
|
for (const tool of tools)
|
|
97
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,eAAe,EAAE,0BAA0B,EAAE,eAAe,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,
|
|
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"]}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @module Editing
|
|
3
3
|
*/
|
|
4
4
|
import { Id64Arg, Id64String } from "@itwin/core-bentley";
|
|
5
|
-
import {
|
|
5
|
+
import { BRepEntityType, ElementGeometryCacheFilter, ElementGeometryResultProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from "@itwin/editor-common";
|
|
6
6
|
import { FeatureAppearance } from "@itwin/core-common";
|
|
7
7
|
import { Point3d, Ray3d, Transform } from "@itwin/core-geometry";
|
|
8
|
-
import { BeButtonEvent, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranchOptions, GraphicType, HitDetail, IModelConnection, LocateResponse, RenderGraphicOwner, SelectionMethod, SelectionSet, Viewport } from "@itwin/core-frontend";
|
|
8
|
+
import { BeButtonEvent, BeModifierKeys, CoordinateLockOverrides, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranchOptions, GraphicType, HitDetail, IModelConnection, LocateResponse, RenderGraphicOwner, SelectionMethod, SelectionSet, ToolAssistanceInstruction, Viewport } from "@itwin/core-frontend";
|
|
9
9
|
/** @alpha */
|
|
10
10
|
export declare class ElementGeometryGraphicsProvider {
|
|
11
11
|
readonly iModel: IModelConnection;
|
|
@@ -23,10 +23,19 @@ export declare class ElementGeometryGraphicsProvider {
|
|
|
23
23
|
addDecoration(context: DecorateContext, type: GraphicType, transform?: Transform, opts?: GraphicBranchOptions): void;
|
|
24
24
|
}
|
|
25
25
|
/** @alpha */
|
|
26
|
+
export declare function isSameSubEntity(a: SubEntityProps, b: SubEntityProps): boolean;
|
|
27
|
+
/** @alpha */
|
|
26
28
|
export declare class SubEntityData {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
toolData?: any;
|
|
30
|
+
chordTolerance?: number;
|
|
31
|
+
private _props;
|
|
32
|
+
private _geometry?;
|
|
33
|
+
private _graphicsProvider?;
|
|
34
|
+
constructor(props: SubEntityProps);
|
|
35
|
+
get props(): SubEntityProps;
|
|
36
|
+
set props(value: SubEntityProps);
|
|
37
|
+
get geometry(): SubEntityGeometryProps | undefined;
|
|
38
|
+
set geometry(value: SubEntityGeometryProps | undefined);
|
|
30
39
|
isSame(other: SubEntityProps): boolean;
|
|
31
40
|
getAppearance(vp: Viewport, accepted: boolean): FeatureAppearance;
|
|
32
41
|
createGraphic(iModel: IModelConnection): Promise<boolean>;
|
|
@@ -41,15 +50,19 @@ export declare abstract class ElementGeometryCacheTool extends ElementSetTool im
|
|
|
41
50
|
protected _graphicsProvider?: ElementGeometryGraphicsProvider;
|
|
42
51
|
protected _graphicsPending?: true;
|
|
43
52
|
protected _firstResult: boolean;
|
|
53
|
+
protected _agendaAppearanceDefault?: FeatureAppearance;
|
|
54
|
+
protected _agendaAppearanceDynamic?: FeatureAppearance;
|
|
44
55
|
protected allowView(vp: Viewport): boolean;
|
|
45
56
|
isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean;
|
|
46
57
|
protected startCommand(): Promise<string>;
|
|
47
58
|
static callCommand<T extends keyof SolidModelingCommandIpc>(method: T, ...args: Parameters<SolidModelingCommandIpc[T]>): ReturnType<SolidModelingCommandIpc[T]>;
|
|
48
|
-
protected
|
|
59
|
+
protected agendaAppearance(isDynamics: boolean): FeatureAppearance;
|
|
49
60
|
protected get wantAgendaAppearanceOverride(): boolean;
|
|
50
61
|
addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void;
|
|
51
62
|
protected updateAgendaAppearanceProvider(drop?: true): void;
|
|
52
63
|
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
64
|
+
protected onGeometryCacheFilterChanged(): void;
|
|
65
|
+
protected createElementGeometryCache(id: Id64String): Promise<boolean>;
|
|
53
66
|
protected acceptElementForOperation(id: Id64String): Promise<boolean>;
|
|
54
67
|
protected isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean>;
|
|
55
68
|
protected postFilterIds(arg: Id64Arg): Promise<Id64Arg>;
|
|
@@ -68,98 +81,69 @@ export declare abstract class ElementGeometryCacheTool extends ElementSetTool im
|
|
|
68
81
|
onPostInstall(): Promise<void>;
|
|
69
82
|
onCleanup(): Promise<void>;
|
|
70
83
|
}
|
|
71
|
-
/** @alpha Base class for tools that perform boolean operations on a set of elements. */
|
|
72
|
-
export declare abstract class BooleanOperationTool extends ElementGeometryCacheTool {
|
|
73
|
-
protected abstract get mode(): BooleanMode;
|
|
74
|
-
protected get allowSelectionSet(): boolean;
|
|
75
|
-
protected get allowDragSelect(): boolean;
|
|
76
|
-
protected get controlKeyContinuesSelection(): boolean;
|
|
77
|
-
protected get requiredElementCount(): number;
|
|
78
|
-
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
79
|
-
protected onAgendaModified(): Promise<void>;
|
|
80
|
-
protected applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined>;
|
|
81
|
-
processAgenda(_ev: BeButtonEvent): Promise<void>;
|
|
82
|
-
}
|
|
83
|
-
/** @alpha Perform boolean union of solid geometry. */
|
|
84
|
-
export declare class UniteSolidElementsTool extends BooleanOperationTool {
|
|
85
|
-
static toolId: string;
|
|
86
|
-
static iconSpec: string;
|
|
87
|
-
protected get mode(): BooleanMode;
|
|
88
|
-
onRestartTool(): Promise<void>;
|
|
89
|
-
}
|
|
90
|
-
/** @alpha Perform boolean subtract of solid geometry. */
|
|
91
|
-
export declare class SubtractSolidElementsTool extends BooleanOperationTool {
|
|
92
|
-
static toolId: string;
|
|
93
|
-
static iconSpec: string;
|
|
94
|
-
protected get mode(): BooleanMode;
|
|
95
|
-
onRestartTool(): Promise<void>;
|
|
96
|
-
}
|
|
97
|
-
/** @alpha Perform boolean intersection of solid geometry. */
|
|
98
|
-
export declare class IntersectSolidElementsTool extends BooleanOperationTool {
|
|
99
|
-
static toolId: string;
|
|
100
|
-
static iconSpec: string;
|
|
101
|
-
protected get mode(): BooleanMode;
|
|
102
|
-
onRestartTool(): Promise<void>;
|
|
103
|
-
}
|
|
104
|
-
/** @alpha Perform sew operation on surface geometry. */
|
|
105
|
-
export declare class SewSheetElementsTool extends ElementGeometryCacheTool {
|
|
106
|
-
static toolId: string;
|
|
107
|
-
static iconSpec: string;
|
|
108
|
-
protected get allowSelectionSet(): boolean;
|
|
109
|
-
protected get allowDragSelect(): boolean;
|
|
110
|
-
protected get controlKeyContinuesSelection(): boolean;
|
|
111
|
-
protected get requiredElementCount(): number;
|
|
112
|
-
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
113
|
-
protected applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined>;
|
|
114
|
-
processAgenda(_ev: BeButtonEvent): Promise<void>;
|
|
115
|
-
onRestartTool(): Promise<void>;
|
|
116
|
-
}
|
|
117
84
|
/** @alpha Base class for tools that need to locate faces, edges, and vertices. */
|
|
118
85
|
export declare abstract class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
119
86
|
protected _currentSubEntity?: SubEntityData;
|
|
120
|
-
protected
|
|
121
|
-
protected
|
|
122
|
-
protected
|
|
87
|
+
protected _acceptedSubEntities: SubEntityData[];
|
|
88
|
+
protected _locatedSubEntities?: SubEntityLocationProps[];
|
|
89
|
+
protected _subEntityGraphicPending?: true;
|
|
90
|
+
protected readonly _summaryIds: Map<string, BRepEntityType[]>;
|
|
91
|
+
protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void;
|
|
123
92
|
protected get wantAgendaAppearanceOverride(): boolean;
|
|
93
|
+
protected get wantGeometrySummary(): boolean;
|
|
94
|
+
protected get wantSubEntitySnap(): boolean;
|
|
95
|
+
protected wantSubEntityType(type: SubEntityType): boolean;
|
|
96
|
+
protected getMaximumSubEntityHits(type: SubEntityType): number;
|
|
97
|
+
protected get requiredSubEntityCount(): number;
|
|
98
|
+
protected get haveAcceptedSubEntities(): boolean;
|
|
99
|
+
protected get inhibitSubEntityDisplay(): boolean;
|
|
100
|
+
protected get allowSubEntityControlSelect(): boolean;
|
|
101
|
+
protected get allowSubEntityControlDeselect(): boolean;
|
|
102
|
+
protected get allowSubEntitySelectNext(): boolean;
|
|
103
|
+
protected getBRepEntityTypeForSubEntity(id: Id64String, subEntity: SubEntityProps): BRepEntityType;
|
|
104
|
+
protected createElementGeometrySummary(id: Id64String): Promise<boolean>;
|
|
105
|
+
protected createElementGeometryCache(id: Id64String): Promise<boolean>;
|
|
106
|
+
protected getAcceptedSubEntityData(index?: number): SubEntityData | undefined;
|
|
107
|
+
protected getAcceptedSubEntities(): SubEntityProps[];
|
|
108
|
+
protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void;
|
|
109
|
+
protected drawAcceptedSubEntities(context: DecorateContext): void;
|
|
124
110
|
decorate(context: DecorateContext): void;
|
|
111
|
+
decorateSuspended(context: DecorateContext): void;
|
|
125
112
|
protected getLocateAperture(ev: BeButtonEvent): number;
|
|
126
113
|
protected getMaxRayDistance(ev: BeButtonEvent, aperture: number): number;
|
|
114
|
+
protected getRayOrigin(ev: BeButtonEvent): Point3d;
|
|
115
|
+
protected wantHiddenEdges(vp: Viewport): boolean;
|
|
127
116
|
protected getSubEntityFilter(): SubEntityFilter | undefined;
|
|
128
117
|
protected pickSubEntities(id: Id64String, boresite: Ray3d, maxFace: number, maxEdge: number, maxVertex: number, maxDistance: number, hiddenEdgesVisible: boolean, filter?: SubEntityFilter): Promise<SubEntityLocationProps[] | undefined>;
|
|
129
118
|
protected doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined>;
|
|
119
|
+
protected createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData>;
|
|
120
|
+
/** Append specified sub-entity to accepted array. */
|
|
121
|
+
protected addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void>;
|
|
122
|
+
/** Remove specified sub-entity from accepted array, or pop last sub-entity if undefined. */
|
|
123
|
+
protected removeSubEntity(_id: Id64String, props?: SubEntityLocationProps): Promise<void>;
|
|
124
|
+
/** Locate sub-entities for the most recently added (last) agenda entry. Tool sub-classes that wish to identity
|
|
125
|
+
* sub-entities from multiple elements are responsible for maintaining the sub-entities per-element.
|
|
126
|
+
*/
|
|
130
127
|
protected doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean>;
|
|
131
128
|
protected chooseNextHit(ev: BeButtonEvent): Promise<EventHandled>;
|
|
129
|
+
protected get wantAdditionalSubEntities(): boolean;
|
|
132
130
|
protected gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined>;
|
|
133
|
-
protected
|
|
134
|
-
protected
|
|
135
|
-
protected
|
|
136
|
-
protected
|
|
131
|
+
protected getCurrentElement(): Id64String | undefined;
|
|
132
|
+
protected clearCurrentSubEntity(): void;
|
|
133
|
+
protected setCurrentSubEntity(id: Id64String, hit: SubEntityLocationProps, chordTolerance?: number): Promise<boolean>;
|
|
134
|
+
protected changeCurrentSubEntity(id?: Id64String, current?: SubEntityLocationProps, chordTolerance?: number): Promise<boolean>;
|
|
135
|
+
protected updateCurrentSubEntity(ev: BeButtonEvent): Promise<boolean>;
|
|
136
|
+
protected createSubEntityGraphic(id: Id64String, data: SubEntityData, chordTolerance?: number): Promise<boolean>;
|
|
137
137
|
protected updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void>;
|
|
138
|
-
protected applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
139
138
|
protected getGraphicData(ev: BeButtonEvent): Promise<Uint8Array | undefined>;
|
|
139
|
+
protected applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
140
140
|
processAgenda(ev: BeButtonEvent): Promise<void>;
|
|
141
|
+
onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<EventHandled>;
|
|
142
|
+
changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void;
|
|
143
|
+
protected get shouldEnableSnap(): boolean;
|
|
141
144
|
protected setupAccuDraw(): void;
|
|
142
145
|
protected setupAndPromptForNextAction(): void;
|
|
146
|
+
protected clearSubEntityGraphics(): void;
|
|
143
147
|
onCleanup(): Promise<void>;
|
|
144
148
|
}
|
|
145
|
-
/** @alpha Identify faces of solids and surfaces to offset. */
|
|
146
|
-
export declare class OffsetFacesTool extends LocateSubEntityTool {
|
|
147
|
-
static toolId: string;
|
|
148
|
-
static iconSpec: string;
|
|
149
|
-
requireWriteableTarget(): boolean;
|
|
150
|
-
protected get wantDynamics(): boolean;
|
|
151
|
-
protected get wantAccuSnap(): boolean;
|
|
152
|
-
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
153
|
-
protected applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
154
|
-
protected setupAccuDraw(): void;
|
|
155
|
-
onRestartTool(): Promise<void>;
|
|
156
|
-
}
|
|
157
|
-
/** @alpha Identify faces to offset to hollow solids. */
|
|
158
|
-
export declare class HollowFacesTool extends LocateSubEntityTool {
|
|
159
|
-
static toolId: string;
|
|
160
|
-
static iconSpec: string;
|
|
161
|
-
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
162
|
-
protected applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
163
|
-
onRestartTool(): Promise<void>;
|
|
164
|
-
}
|
|
165
149
|
//# sourceMappingURL=ElementGeometryTool.d.ts.map
|