@itwin/editor-frontend 5.0.0-dev.55 → 5.0.0-dev.57
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/CreateElementTool.js +12 -2
- package/lib/cjs/CreateElementTool.js.map +1 -1
- package/lib/cjs/EditTool.js +4 -3
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/ModifyElementTool.js +5 -8
- package/lib/cjs/ModifyElementTool.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js +28 -18
- package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js +23 -15
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/cjs/TransformElementsTool.js +8 -2
- package/lib/cjs/TransformElementsTool.js.map +1 -1
- package/lib/cjs/UndoRedoTool.js +3 -3
- package/lib/cjs/UndoRedoTool.js.map +1 -1
- package/lib/esm/CreateElementTool.js +12 -2
- package/lib/esm/CreateElementTool.js.map +1 -1
- package/lib/esm/EditTool.js +4 -3
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/ModifyElementTool.js +5 -8
- package/lib/esm/ModifyElementTool.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js +28 -18
- package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.js +23 -15
- package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/esm/TransformElementsTool.js +8 -2
- package/lib/esm/TransformElementsTool.js.map +1 -1
- package/lib/esm/UndoRedoTool.js +3 -3
- package/lib/esm/UndoRedoTool.js.map +1 -1
- package/package.json +14 -14
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,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,eAAe,MAAM,4CAA4C,CAAC;AAC9E,OAAO,KAAK,kBAAkB,MAAM,sCAAsC,CAAC;AAgB3E;;;GAGG;AACH,MAAM,OAAO,SAAS;
|
|
1
|
+
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { _callIpcChannel, IModelApp, IpcApp } from \"@itwin/core-frontend\";\nimport { editorIpcStrings } from \"@itwin/editor-common\";\n\nimport * as UndoRedoTools from \"./UndoRedoTool\";\nimport * as ProjectLocation from \"./ProjectLocation/ProjectExtentsDecoration\";\nimport * as ProjectGeoLocation from \"./ProjectLocation/ProjectGeolocation\";\n\n/** @beta */\nexport namespace EditTools {\n export interface StartArgs {\n commandId: string;\n iModelKey: string;\n }\n /** handler for retries when an EditTool attempts to start but a backend command is busy and can't finish its work.\n * @param attempt the number of times this handler was previously called for this EditTool\n * @param msg the message about what's happening from the currently busy EditCommand.\n * @returns the delay (in milliseconds) before attempting again. If `undefined` use default (usually 1 second)\n */\n export type BusyRetry = (attempt: number, msg: string) => Promise<number | undefined>;\n}\n\n/**\n * Supports PrimitiveTool and InputCollector sub-classes.\n * @beta\n */\nexport class EditTools {\n public static readonly namespace = \"Editor\";\n public static readonly tools = \"Editor:tools.\";\n public static busyRetry?: EditTools.BusyRetry;\n private static _initialized = false;\n\n public static async startCommand<T>(startArg: EditTools.StartArgs, ...cmdArgs: any[]): Promise<T> {\n let attempt = 0;\n while (true) {\n try {\n return await (IpcApp[_callIpcChannel](editorIpcStrings.channel, \"startCommand\", startArg.commandId, startArg.iModelKey, ...cmdArgs) as Promise<T>);\n } catch (e: any) {\n if (e.name !== editorIpcStrings.commandBusy)\n throw e; // unknown backend error\n const delay = await this.busyRetry?.(attempt++, e.message) ?? 1000;\n await BeDuration.fromMilliseconds(delay).wait();\n }\n }\n }\n\n /** @internal */\n public static translate(prompt: string) {\n return IModelApp.localization.getLocalizedString(this.tools + prompt);\n }\n\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await EditorTools.initialize();\n * ```\n * @note This registers tools for element undo and redo.\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n // Make sure current edit command finishes before starting a new primitive tool...\n IModelApp.toolAdmin.setEditCommandHandler(this);\n\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\n\n const tools = IModelApp.tools;\n tools.registerModule(UndoRedoTools, this.namespace);\n\n return namespacePromise;\n }\n\n /** Can be called after initialize to register tools for changing project extents and geolocation.\n * @note Requires backend to register BasicManipulationCommand with EditCommandAdmin.\n */\n public static registerProjectLocationTools(): void {\n if (!this._initialized)\n return;\n const tools = IModelApp.tools;\n tools.registerModule(ProjectLocation, this.namespace);\n tools.registerModule(ProjectGeoLocation, this.namespace);\n }\n\n /** @internal */\n public static async finishCommand(): Promise<string> {\n return this.startCommand<string>({ commandId: \"\", iModelKey: \"\" });\n }\n\n private static shutdown() {\n IModelApp.toolAdmin.setEditCommandHandler();\n this._initialized = false;\n }\n}\n"]}
|
|
@@ -13,10 +13,7 @@ import { computeChordToleranceFromPoint, DynamicGraphicsProvider } from "./Creat
|
|
|
13
13
|
* @beta
|
|
14
14
|
*/
|
|
15
15
|
export class ModifyElementTool extends ElementSetTool {
|
|
16
|
-
|
|
17
|
-
super(...arguments);
|
|
18
|
-
this._checkedIds = new Map();
|
|
19
|
-
}
|
|
16
|
+
_checkedIds = new Map();
|
|
20
17
|
allowView(_vp) { return true; }
|
|
21
18
|
isCompatibleViewport(vp, isSelectedViewChange) { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }
|
|
22
19
|
onGeometryFilterChanged() { this._checkedIds.clear(); }
|
|
@@ -83,10 +80,10 @@ export class ModifyElementTool extends ElementSetTool {
|
|
|
83
80
|
* @beta
|
|
84
81
|
*/
|
|
85
82
|
export class ModifyElementWithDynamicsTool extends ModifyElementTool {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
_graphicsProvider;
|
|
84
|
+
_firstResult = true;
|
|
85
|
+
_agendaAppearanceDefault;
|
|
86
|
+
_agendaAppearanceDynamic;
|
|
90
87
|
get wantAccuSnap() { return true; }
|
|
91
88
|
get wantDynamics() { return true; }
|
|
92
89
|
agendaAppearance(isDynamics) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModifyElementTool.js","sourceRoot":"","sources":["../../src/ModifyElementTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { FeatureAppearance, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream } from \"@itwin/core-common\";\nimport { BeButtonEvent, DynamicsContext, ElementSetTool, FeatureOverrideProvider, FeatureSymbology, HitDetail, IModelApp, LocateResponse, SelectionMethod, SelectionSet, Viewport } from \"@itwin/core-frontend\";\nimport { Point3d } from \"@itwin/core-geometry\";\nimport { computeChordToleranceFromPoint, DynamicGraphicsProvider } from \"./CreateElementTool\";\n\n/** Edit tool base class for updating existing elements.\n * @beta\n */\nexport abstract class ModifyElementTool extends ElementSetTool {\n protected readonly _checkedIds = new Map<Id64String, boolean>();\n\n protected allowView(_vp: Viewport) { return true; }\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n\n protected onGeometryFilterChanged(): void { this._checkedIds.clear(); }\n\n protected async doAcceptElementForOperation(_id: Id64String): Promise<boolean> { return false; }\n\n protected async acceptElementForOperation(id: Id64String): Promise<boolean> {\n if (Id64.isInvalid(id) || Id64.isTransient(id))\n return false;\n\n let accept = this._checkedIds.get(id);\n\n if (undefined === accept) {\n if (this.agenda.isEmpty && this._checkedIds.size > 1000)\n this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...\n\n accept = await this.doAcceptElementForOperation(id);\n this._checkedIds.set(id, accept);\n }\n\n return accept;\n }\n\n protected override async isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean> {\n if (!await super.isElementValidForOperation(hit, out))\n return false;\n\n return this.acceptElementForOperation(hit.sourceId);\n }\n\n protected async postFilterIds(arg: Id64Arg): Promise<Id64Arg> {\n const ids: Id64Array = [];\n\n for (const id of Id64.iterable(arg)) {\n if (await this.acceptElementForOperation(id))\n ids.push(id);\n }\n\n return ids;\n }\n\n protected override async getGroupIds(id: Id64String): Promise<Id64Arg> {\n return this.postFilterIds(await super.getGroupIds(id));\n }\n\n protected override async getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg> {\n return this.postFilterIds(await super.getSelectionSetCandidates(ss));\n }\n\n protected override async getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg> {\n return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));\n }\n\n protected setupAccuDraw(): void { }\n\n protected override setupAndPromptForNextAction(): void {\n this.setupAccuDraw();\n super.setupAndPromptForNextAction();\n }\n\n protected abstract getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined;\n protected abstract getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined;\n\n protected async doUpdateElement(_props: GeometricElementProps): Promise<boolean> { return false; }\n\n protected async applyAgendaOperation(ev: BeButtonEvent): Promise<boolean> {\n const geometry = this.getGeometryProps(ev, true);\n if (undefined === geometry)\n return false;\n\n const elemProps = this.getElementProps(ev);\n if (undefined === elemProps)\n return false;\n\n if (\"flatbuffer\" === geometry.format)\n elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };\n else\n elemProps.geom = geometry.data;\n\n return this.doUpdateElement(elemProps);\n }\n\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\n if (await this.applyAgendaOperation(ev))\n return this.saveChanges();\n }\n}\n\n/** Edit tool base class for updating existing elements that use dynamics to show intermediate results.\n * @beta\n */\nexport abstract class ModifyElementWithDynamicsTool extends ModifyElementTool implements FeatureOverrideProvider {\n protected _graphicsProvider?: DynamicGraphicsProvider;\n protected _firstResult = true;\n protected _agendaAppearanceDefault?: FeatureAppearance;\n protected _agendaAppearanceDynamic?: FeatureAppearance;\n\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantDynamics(): boolean { return true; }\n\n protected agendaAppearance(isDynamics: boolean): FeatureAppearance {\n if (isDynamics) {\n if (undefined === this._agendaAppearanceDynamic)\n this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);\n\n return this._agendaAppearanceDynamic;\n }\n\n if (undefined === this._agendaAppearanceDefault)\n this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);\n\n return this._agendaAppearanceDefault;\n }\n\n protected get wantAgendaAppearanceOverride(): boolean { return false; }\n\n public addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void {\n if (this.agenda.isEmpty)\n return;\n\n const appearance = this.agendaAppearance(false);\n this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));\n }\n\n protected updateAgendaAppearanceProvider(drop?: true): void {\n if (!this.wantAgendaAppearanceOverride)\n return;\n\n for (const vp of IModelApp.viewManager) {\n if (!this.allowView(vp))\n continue;\n\n if (drop || this.agenda.isEmpty)\n vp.dropFeatureOverrideProvider(this);\n else if (!vp.addFeatureOverrideProvider(this))\n vp.setFeatureOverrideProviderChanged();\n }\n }\n\n protected clearGraphics(): void {\n if (undefined === this._graphicsProvider)\n return;\n this._graphicsProvider.cleanupGraphic();\n this._graphicsProvider = undefined;\n }\n\n protected async createGraphics(ev: BeButtonEvent): Promise<void> {\n if (!IModelApp.viewManager.inDynamicsMode)\n return; // Don't need to create graphic if dynamics aren't yet active...\n\n const geometry = this.getGeometryProps(ev, false);\n if (undefined === geometry) {\n this.clearGraphics();\n return;\n }\n\n const elemProps = this.getElementProps(ev);\n if (undefined === elemProps?.placement) {\n this.clearGraphics();\n return;\n }\n\n if (undefined === this._graphicsProvider) {\n if (this._firstResult) {\n this.updateAgendaAppearanceProvider();\n this._firstResult = false;\n }\n this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);\n }\n\n // Set chord tolerance for non-linear/non-planar geometry...\n if (ev.viewport)\n this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);\n\n await this._graphicsProvider.createGraphic(elemProps.category, elemProps.placement, geometry);\n }\n\n protected override async onAgendaModified(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider(); // When Reset cycles between elements, recompute feature overrides...\n return super.onAgendaModified();\n }\n\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\n if (undefined !== this._graphicsProvider)\n this._graphicsProvider.addGraphic(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n return this.createGraphics(ev);\n }\n\n public override async onUnsuspend(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider();\n return super.onUnsuspend();\n }\n\n public override async onSuspend(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider(true);\n return super.onSuspend();\n }\n\n public override async onPostInstall(): Promise<void> {\n await super.onPostInstall();\n if (this.wantAgendaAppearanceOverride)\n this.agenda.manageHiliteState = false;\n }\n\n public override async onCleanup(): Promise<void> {\n this.clearGraphics();\n this.updateAgendaAppearanceProvider(true);\n return super.onCleanup();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModifyElementTool.js","sourceRoot":"","sources":["../../src/ModifyElementTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { FeatureAppearance, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream } from \"@itwin/core-common\";\nimport { BeButtonEvent, DynamicsContext, ElementSetTool, FeatureOverrideProvider, FeatureSymbology, HitDetail, IModelApp, LocateResponse, SelectionMethod, SelectionSet, Viewport } from \"@itwin/core-frontend\";\nimport { Point3d } from \"@itwin/core-geometry\";\nimport { computeChordToleranceFromPoint, DynamicGraphicsProvider } from \"./CreateElementTool\";\n\n/** Edit tool base class for updating existing elements.\n * @beta\n */\nexport abstract class ModifyElementTool extends ElementSetTool {\n protected readonly _checkedIds = new Map<Id64String, boolean>();\n\n protected allowView(_vp: Viewport) { return true; }\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n\n protected onGeometryFilterChanged(): void { this._checkedIds.clear(); }\n\n protected async doAcceptElementForOperation(_id: Id64String): Promise<boolean> { return false; }\n\n protected async acceptElementForOperation(id: Id64String): Promise<boolean> {\n if (Id64.isInvalid(id) || Id64.isTransient(id))\n return false;\n\n let accept = this._checkedIds.get(id);\n\n if (undefined === accept) {\n if (this.agenda.isEmpty && this._checkedIds.size > 1000)\n this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...\n\n accept = await this.doAcceptElementForOperation(id);\n this._checkedIds.set(id, accept);\n }\n\n return accept;\n }\n\n protected override async isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean> {\n if (!await super.isElementValidForOperation(hit, out))\n return false;\n\n return this.acceptElementForOperation(hit.sourceId);\n }\n\n protected async postFilterIds(arg: Id64Arg): Promise<Id64Arg> {\n const ids: Id64Array = [];\n\n for (const id of Id64.iterable(arg)) {\n if (await this.acceptElementForOperation(id))\n ids.push(id);\n }\n\n return ids;\n }\n\n protected override async getGroupIds(id: Id64String): Promise<Id64Arg> {\n return this.postFilterIds(await super.getGroupIds(id));\n }\n\n protected override async getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg> {\n return this.postFilterIds(await super.getSelectionSetCandidates(ss));\n }\n\n protected override async getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg> {\n return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));\n }\n\n protected setupAccuDraw(): void { }\n\n protected override setupAndPromptForNextAction(): void {\n this.setupAccuDraw();\n super.setupAndPromptForNextAction();\n }\n\n protected abstract getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined;\n protected abstract getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined;\n\n protected async doUpdateElement(_props: GeometricElementProps): Promise<boolean> { return false; }\n\n protected async applyAgendaOperation(ev: BeButtonEvent): Promise<boolean> {\n const geometry = this.getGeometryProps(ev, true);\n if (undefined === geometry)\n return false;\n\n const elemProps = this.getElementProps(ev);\n if (undefined === elemProps)\n return false;\n\n if (\"flatbuffer\" === geometry.format)\n elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };\n else\n elemProps.geom = geometry.data;\n\n return this.doUpdateElement(elemProps);\n }\n\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\n if (await this.applyAgendaOperation(ev))\n return this.saveChanges();\n }\n}\n\n/** Edit tool base class for updating existing elements that use dynamics to show intermediate results.\n * @beta\n */\nexport abstract class ModifyElementWithDynamicsTool extends ModifyElementTool implements FeatureOverrideProvider {\n protected _graphicsProvider?: DynamicGraphicsProvider;\n protected _firstResult = true;\n protected _agendaAppearanceDefault?: FeatureAppearance;\n protected _agendaAppearanceDynamic?: FeatureAppearance;\n\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantDynamics(): boolean { return true; }\n\n protected agendaAppearance(isDynamics: boolean): FeatureAppearance {\n if (isDynamics) {\n if (undefined === this._agendaAppearanceDynamic)\n this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);\n\n return this._agendaAppearanceDynamic;\n }\n\n if (undefined === this._agendaAppearanceDefault)\n this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);\n\n return this._agendaAppearanceDefault;\n }\n\n protected get wantAgendaAppearanceOverride(): boolean { return false; }\n\n public addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void {\n if (this.agenda.isEmpty)\n return;\n\n const appearance = this.agendaAppearance(false);\n this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));\n }\n\n protected updateAgendaAppearanceProvider(drop?: true): void {\n if (!this.wantAgendaAppearanceOverride)\n return;\n\n for (const vp of IModelApp.viewManager) {\n if (!this.allowView(vp))\n continue;\n\n if (drop || this.agenda.isEmpty)\n vp.dropFeatureOverrideProvider(this);\n else if (!vp.addFeatureOverrideProvider(this))\n vp.setFeatureOverrideProviderChanged();\n }\n }\n\n protected clearGraphics(): void {\n if (undefined === this._graphicsProvider)\n return;\n this._graphicsProvider.cleanupGraphic();\n this._graphicsProvider = undefined;\n }\n\n protected async createGraphics(ev: BeButtonEvent): Promise<void> {\n if (!IModelApp.viewManager.inDynamicsMode)\n return; // Don't need to create graphic if dynamics aren't yet active...\n\n const geometry = this.getGeometryProps(ev, false);\n if (undefined === geometry) {\n this.clearGraphics();\n return;\n }\n\n const elemProps = this.getElementProps(ev);\n if (undefined === elemProps?.placement) {\n this.clearGraphics();\n return;\n }\n\n if (undefined === this._graphicsProvider) {\n if (this._firstResult) {\n this.updateAgendaAppearanceProvider();\n this._firstResult = false;\n }\n this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);\n }\n\n // Set chord tolerance for non-linear/non-planar geometry...\n if (ev.viewport)\n this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);\n\n await this._graphicsProvider.createGraphic(elemProps.category, elemProps.placement, geometry);\n }\n\n protected override async onAgendaModified(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider(); // When Reset cycles between elements, recompute feature overrides...\n return super.onAgendaModified();\n }\n\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\n if (undefined !== this._graphicsProvider)\n this._graphicsProvider.addGraphic(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n return this.createGraphics(ev);\n }\n\n public override async onUnsuspend(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider();\n return super.onUnsuspend();\n }\n\n public override async onSuspend(): Promise<void> {\n if (!this._firstResult)\n this.updateAgendaAppearanceProvider(true);\n return super.onSuspend();\n }\n\n public override async onPostInstall(): Promise<void> {\n await super.onPostInstall();\n if (this.wantAgendaAppearanceOverride)\n this.agenda.manageHiliteState = false;\n }\n\n public override async onCleanup(): Promise<void> {\n this.clearGraphics();\n this.updateAgendaAppearanceProvider(true);\n return super.onCleanup();\n }\n}\n"]}
|
|
@@ -45,10 +45,7 @@ function updateMapDisplay(vp, turnOnMap) {
|
|
|
45
45
|
vp.invalidateRenderPlan();
|
|
46
46
|
}
|
|
47
47
|
class ProjectExtentsControlArrow extends ViewClipControlArrow {
|
|
48
|
-
|
|
49
|
-
super(...arguments);
|
|
50
|
-
this.extentValid = true;
|
|
51
|
-
}
|
|
48
|
+
extentValid = true;
|
|
52
49
|
}
|
|
53
50
|
/** Values for [[ProjectExtentsClipDecoration.onChanged] event.
|
|
54
51
|
* @beta
|
|
@@ -74,19 +71,32 @@ export var ProjectLocationChanged;
|
|
|
74
71
|
* @beta
|
|
75
72
|
*/
|
|
76
73
|
export class ProjectExtentsClipDecoration extends EditManipulator.HandleProvider {
|
|
74
|
+
viewport;
|
|
75
|
+
static _decorator;
|
|
76
|
+
_clip;
|
|
77
|
+
_clipId;
|
|
78
|
+
_clipShape;
|
|
79
|
+
_clipShapeExtents;
|
|
80
|
+
_clipRange;
|
|
81
|
+
_extentsLengthValid = true;
|
|
82
|
+
_extentsWidthValid = true;
|
|
83
|
+
_extentsHeightValid = true;
|
|
84
|
+
_ecefLocation;
|
|
85
|
+
_allowEcefLocationChange = false;
|
|
86
|
+
_controlIds = [];
|
|
87
|
+
_controls = [];
|
|
88
|
+
_monumentPoint;
|
|
89
|
+
_northDirection;
|
|
90
|
+
_monumentId;
|
|
91
|
+
_northId;
|
|
92
|
+
_suspendDecorator = false;
|
|
93
|
+
_removeViewCloseListener;
|
|
94
|
+
suspendGeolocationDecorations = false;
|
|
95
|
+
/** Called when project extents or geolocation is modified */
|
|
96
|
+
onChanged = new BeEvent();
|
|
77
97
|
constructor(viewport) {
|
|
78
98
|
super(viewport.iModel);
|
|
79
99
|
this.viewport = viewport;
|
|
80
|
-
this._extentsLengthValid = true;
|
|
81
|
-
this._extentsWidthValid = true;
|
|
82
|
-
this._extentsHeightValid = true;
|
|
83
|
-
this._allowEcefLocationChange = false;
|
|
84
|
-
this._controlIds = [];
|
|
85
|
-
this._controls = [];
|
|
86
|
-
this._suspendDecorator = false;
|
|
87
|
-
this.suspendGeolocationDecorations = false;
|
|
88
|
-
/** Called when project extents or geolocation is modified */
|
|
89
|
-
this.onChanged = new BeEvent();
|
|
90
100
|
if (!this.init())
|
|
91
101
|
return;
|
|
92
102
|
this._monumentId = this.iModel.transientIds.getNext();
|
|
@@ -725,7 +735,7 @@ export class ProjectExtentsClipDecoration extends EditManipulator.HandleProvider
|
|
|
725
735
|
* @beta
|
|
726
736
|
*/
|
|
727
737
|
export class ProjectLocationShowTool extends Tool {
|
|
728
|
-
static
|
|
738
|
+
static toolId = "ProjectLocation.Show";
|
|
729
739
|
async run() {
|
|
730
740
|
const vp = IModelApp.viewManager.selectedView;
|
|
731
741
|
if (undefined === vp || !ProjectExtentsClipDecoration.show(vp))
|
|
@@ -738,7 +748,7 @@ export class ProjectLocationShowTool extends Tool {
|
|
|
738
748
|
* @beta
|
|
739
749
|
*/
|
|
740
750
|
export class ProjectLocationHideTool extends Tool {
|
|
741
|
-
static
|
|
751
|
+
static toolId = "ProjectLocation.Hide";
|
|
742
752
|
async run() {
|
|
743
753
|
ProjectExtentsClipDecoration.hide();
|
|
744
754
|
await IModelApp.toolAdmin.startDefaultTool();
|
|
@@ -749,7 +759,7 @@ export class ProjectLocationHideTool extends Tool {
|
|
|
749
759
|
* @beta
|
|
750
760
|
*/
|
|
751
761
|
export class ProjectLocationCancelTool extends Tool {
|
|
752
|
-
static
|
|
762
|
+
static toolId = "ProjectLocation.Cancel";
|
|
753
763
|
async run() {
|
|
754
764
|
ProjectExtentsClipDecoration.clear();
|
|
755
765
|
await IModelApp.toolAdmin.startDefaultTool();
|
|
@@ -762,7 +772,7 @@ export class ProjectLocationCancelTool extends Tool {
|
|
|
762
772
|
* @beta
|
|
763
773
|
*/
|
|
764
774
|
export class ProjectLocationSaveTool extends Tool {
|
|
765
|
-
static
|
|
775
|
+
static toolId = "ProjectLocation.Save";
|
|
766
776
|
async allowRestartTxnSession(iModel) {
|
|
767
777
|
if (!await iModel.txns.isUndoPossible())
|
|
768
778
|
return true;
|