@itwin/editor-frontend 3.5.0-dev.49 → 3.5.0-dev.51

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.
@@ -1 +1 @@
1
- {"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAoBH,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;IAIrG,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwGtE,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
1
+ {"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAoBH,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;IAIrG,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0GtE,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
@@ -13,7 +13,7 @@ import { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSave
13
13
  import { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from "./ProjectLocation/ProjectGeolocation";
14
14
  import { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from "./SketchTools";
15
15
  import { ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool, IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool, SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool, } from "./SolidModelingTools";
16
- import { CreateBoxTool, CreateConeTool, CreateCylinderTool, CreateSphereTool, CreateTorusTool } from "./SolidPrimitiveTools";
16
+ import { CreateBoxTool, CreateConeTool, CreateCylinderTool, CreateSphereTool, CreateTorusTool, ExtrudeCurveTool, RevolveCurveTool } from "./SolidPrimitiveTools";
17
17
  import { CopyElementsTool, MoveElementsTool, RotateElementsTool } from "./TransformElementsTool";
18
18
  import { RedoTool, UndoAllTool, UndoTool } from "./UndoRedoTool";
19
19
  /** @alpha functions to support PrimitiveTool and InputCollector sub-classes with using EditCommand. */
@@ -96,6 +96,8 @@ export class EditTools {
96
96
  CreateConeTool,
97
97
  CreateBoxTool,
98
98
  CreateTorusTool,
99
+ ExtrudeCurveTool,
100
+ RevolveCurveTool,
99
101
  UniteSolidElementsTool,
100
102
  SubtractSolidElementsTool,
101
103
  IntersectSolidElementsTool,
@@ -1 +1 @@
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 { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { editorChannel } from \"@itwin/editor-common\";\r\nimport { DeleteElementsTool } from \"./DeleteElementsTool\";\r\nimport { BreakCurveTool, ExtendCurveTool, OffsetCurveTool } from \"./ModifyCurveTools\";\r\nimport {\r\n ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool,\r\n} from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from \"./ProjectLocation/ProjectGeolocation\";\r\nimport { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from \"./SketchTools\";\r\nimport {\r\n ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool,\r\n IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool,\r\n SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool,\r\n} from \"./SolidModelingTools\";\r\nimport { CreateBoxTool, CreateConeTool, CreateCylinderTool, CreateSphereTool, CreateTorusTool } from \"./SolidPrimitiveTools\";\r\nimport { CopyElementsTool, 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 /** @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 // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\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 CopyElementsTool,\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 BreakCurveTool,\r\n ExtendCurveTool,\r\n OffsetCurveTool,\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 CreateSphereTool,\r\n CreateCylinderTool,\r\n CreateConeTool,\r\n CreateBoxTool,\r\n CreateTorusTool,\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 private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
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 { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { editorChannel } from \"@itwin/editor-common\";\r\nimport { DeleteElementsTool } from \"./DeleteElementsTool\";\r\nimport { BreakCurveTool, ExtendCurveTool, OffsetCurveTool } from \"./ModifyCurveTools\";\r\nimport {\r\n ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool,\r\n} from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from \"./ProjectLocation/ProjectGeolocation\";\r\nimport { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from \"./SketchTools\";\r\nimport {\r\n ChamferEdgesTool, CutSolidElementsTool, DeleteSubEntitiesTool, EmbossSolidElementsTool, HollowFacesTool, ImprintSolidElementsTool,\r\n IntersectSolidElementsTool, LoftProfilesTool, OffsetFacesTool, RoundEdgesTool, SewSheetElementsTool, SpinFacesTool, SubtractSolidElementsTool,\r\n SweepAlongPathTool, SweepFacesTool, ThickenSheetElementsTool, UniteSolidElementsTool,\r\n} from \"./SolidModelingTools\";\r\nimport { CreateBoxTool, CreateConeTool, CreateCylinderTool, CreateSphereTool, CreateTorusTool, ExtrudeCurveTool, RevolveCurveTool } from \"./SolidPrimitiveTools\";\r\nimport { CopyElementsTool, 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 /** @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 // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\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 CopyElementsTool,\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 BreakCurveTool,\r\n ExtendCurveTool,\r\n OffsetCurveTool,\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 CreateSphereTool,\r\n CreateCylinderTool,\r\n CreateConeTool,\r\n CreateBoxTool,\r\n CreateTorusTool,\r\n ExtrudeCurveTool,\r\n RevolveCurveTool,\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 private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
@@ -2,7 +2,7 @@ import { DialogItem, DialogProperty, DialogPropertySyncItem } from "@itwin/appui
2
2
  import { Id64String } from "@itwin/core-bentley";
3
3
  import { ElementGeometryInfo, FlatBufferGeometryStream, GeometricElementProps, GeometryParams, JsonGeometryStream } from "@itwin/core-common";
4
4
  import { BeButtonEvent, ToolAssistanceInstruction } from "@itwin/core-frontend";
5
- import { CurveCollection, CurveLocationDetail, CurvePrimitive, Path, Point3d } from "@itwin/core-geometry";
5
+ import { CurveCollection, CurveLocationDetail, CurvePrimitive, GeometryQuery, Path, Point3d } from "@itwin/core-geometry";
6
6
  import { ModifyElementWithDynamicsTool } from "./ModifyElementTool";
7
7
  /** @alpha */
8
8
  export declare class CurveData {
@@ -21,7 +21,7 @@ export declare abstract class ModifyCurveTool extends ModifyElementWithDynamicsT
21
21
  params: GeometryParams;
22
22
  } | undefined;
23
23
  protected acceptCurve(_curve: CurveCollection | CurvePrimitive): boolean;
24
- protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): CurveCollection | CurvePrimitive | undefined;
24
+ protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined;
25
25
  protected getCurveData(id: Id64String): Promise<CurveData | undefined>;
26
26
  protected doAcceptElementForOperation(id: Id64String): Promise<boolean>;
27
27
  protected onAgendaModified(): Promise<void>;
@@ -53,7 +53,7 @@ export declare class OffsetCurveTool extends ModifyCurveTool {
53
53
  applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
54
54
  supplyToolSettingsProperties(): DialogItem[] | undefined;
55
55
  protected acceptCurve(curve: CurveCollection | CurvePrimitive): boolean;
56
- protected modifyCurve(ev: BeButtonEvent, isAccept: boolean): CurveCollection | CurvePrimitive | undefined;
56
+ protected modifyCurve(ev: BeButtonEvent, isAccept: boolean): GeometryQuery | undefined;
57
57
  protected get wantModifyOriginal(): boolean;
58
58
  protected get wantContinueWithPreviousResult(): boolean;
59
59
  protected setupAccuDraw(): void;
@@ -71,7 +71,7 @@ export declare class BreakCurveTool extends ModifyCurveTool {
71
71
  protected get wantModifyOriginal(): boolean;
72
72
  protected acceptCurve(curve: CurveCollection | CurvePrimitive): boolean;
73
73
  protected doBreakCurve(ev: BeButtonEvent): void;
74
- protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): CurveCollection | CurvePrimitive | undefined;
74
+ protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined;
75
75
  processAgenda(ev: BeButtonEvent): Promise<void>;
76
76
  protected provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void;
77
77
  onRestartTool(): Promise<void>;
@@ -86,7 +86,7 @@ export declare class ExtendCurveTool extends ModifyCurveTool {
86
86
  protected extendCurve(geom: CurvePrimitive, pickPoint: Point3d, spacePoint: Point3d): CurvePrimitive | undefined;
87
87
  protected extendPathEnd(geom: Path, closeDetail: CurveLocationDetail, isStart: boolean): Path | undefined;
88
88
  protected extendPath(geom: Path, pickPoint: Point3d, spacePoint: Point3d): Path | CurvePrimitive | undefined;
89
- protected modifyCurve(ev: BeButtonEvent, _isAccept: boolean): CurveCollection | CurvePrimitive | undefined;
89
+ protected modifyCurve(ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined;
90
90
  protected onAgendaModified(): Promise<void>;
91
91
  protected setupAccuDraw(): void;
92
92
  protected provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ModifyCurveTools.d.ts","sourceRoot":"","sources":["../../src/ModifyCurveTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModifyCurveTools.d.ts","sourceRoot":"","sources":["../../src/ModifyCurveTools.ts"],"names":[],"mappings":"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"}
@@ -84,14 +84,14 @@ export class ModifyCurveTool extends ModifyElementWithDynamicsTool {
84
84
  getGeometryProps(ev, isAccept) {
85
85
  if (undefined === this.curveData)
86
86
  return;
87
- const offset = this.modifyCurve(ev, isAccept);
88
- if (undefined === offset)
87
+ const geom = this.modifyCurve(ev, isAccept);
88
+ if (undefined === geom)
89
89
  return;
90
90
  const builder = new ElementGeometry.Builder();
91
91
  builder.setLocalToWorldFromPlacement(this.curveData.props.placement);
92
92
  if (!builder.appendGeometryParamsChange(this.curveData.params))
93
93
  return;
94
- if (!builder.appendGeometryQuery(offset))
94
+ if (!builder.appendGeometryQuery(geom))
95
95
  return;
96
96
  return { format: "flatbuffer", data: builder.entries };
97
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ModifyCurveTools.js","sourceRoot":"","sources":["../../src/ModifyCurveTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BentleyError, Code, ElementGeometry, ElementGeometryInfo, ElementGeometryOpcode, FlatBufferGeometryStream, GeometricElementProps,\r\n GeometryParams, JsonGeometryStream,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n AccuDrawHintBuilder, BeButtonEvent, IModelApp,\r\n LengthDescription, NotifyMessageDetails, OutputMessagePriority, ToolAssistanceInstruction,\r\n} from \"@itwin/core-frontend\";\r\nimport {\r\n AngleSweep, Arc3d, AxisOrder, CurveChainWithDistanceIndex, CurveCollection, CurveLocationDetail, CurvePrimitive, FrameBuilder, Geometry, JointOptions, LineSegment3d, LineString3d, Loop, Matrix3d,\r\n Path, Point3d, RegionOps, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { EditTools } from \"./EditTool\";\r\nimport { basicManipulationIpc } from \"./EditToolIpc\";\r\nimport { ModifyElementWithDynamicsTool } from \"./ModifyElementTool\";\r\n\r\n/** @alpha */\r\nexport class CurveData {\r\n public props: GeometricElementProps;\r\n public params: GeometryParams;\r\n public geom: CurveCollection | CurvePrimitive;\r\n\r\n constructor(props: GeometricElementProps, params: GeometryParams, geom: CurveCollection | CurvePrimitive) {\r\n this.props = props;\r\n this.params = params;\r\n this.geom = geom;\r\n }\r\n}\r\n\r\n/** @alpha Base class for modifying all types of curve geometry. */\r\nexport abstract class ModifyCurveTool extends ModifyElementWithDynamicsTool {\r\n protected _startedCmd?: string;\r\n protected curveData?: CurveData;\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n public static isSingleCurve(info: ElementGeometryInfo): { curve: CurveCollection | CurvePrimitive, params: GeometryParams } | undefined {\r\n const it = new ElementGeometry.Iterator(info);\r\n it.requestWorldCoordinates();\r\n\r\n for (const entry of it) {\r\n const geom = entry.toGeometryQuery();\r\n if (undefined === geom)\r\n return;\r\n\r\n if (\"curvePrimitive\" === geom.geometryCategory) {\r\n return { curve: geom as CurvePrimitive, params: entry.geomParams };\r\n } else if (\"curveCollection\" === geom.geometryCategory) {\r\n return { curve: geom as CurveCollection, params: entry.geomParams };\r\n }\r\n\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n\r\n protected acceptCurve(_curve: CurveCollection | CurvePrimitive): boolean { return true; }\r\n protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): CurveCollection | CurvePrimitive | undefined { return undefined; }\r\n\r\n protected async getCurveData(id: Id64String): Promise<CurveData | undefined> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const reject: ElementGeometryOpcode[] = [ElementGeometryOpcode.Polyface, ElementGeometryOpcode.SolidPrimitive, ElementGeometryOpcode.BsplineSurface, ElementGeometryOpcode.BRep];\r\n const info = await basicManipulationIpc.requestElementGeometry(id, { maxDisplayable: 1, reject, geometry: { curves: true, surfaces: true, solids: false } });\r\n if (undefined === info)\r\n return undefined;\r\n\r\n const data = ModifyCurveTool.isSingleCurve(info);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n if (!this.acceptCurve(data.curve))\r\n return undefined;\r\n\r\n const props = await this.iModel.elements.loadProps(id) as GeometricElementProps;\r\n if (undefined === props)\r\n return undefined;\r\n\r\n return new CurveData(props, data.params, data.curve);\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err)));\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override async doAcceptElementForOperation(id: Id64String): Promise<boolean> {\r\n return (undefined !== await this.getCurveData(id));\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n this.curveData = undefined;\r\n if (this.agenda.isEmpty)\r\n return;\r\n\r\n const id = this.agenda.elements[this.agenda.length - 1];\r\n this.curveData = await this.getCurveData(id);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.enableSmartRotation = true;\r\n hints.sendHints(false);\r\n }\r\n\r\n protected getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined {\r\n if (undefined === this.curveData)\r\n return;\r\n\r\n const offset = this.modifyCurve(ev, isAccept);\r\n if (undefined === offset)\r\n return;\r\n\r\n const builder = new ElementGeometry.Builder();\r\n builder.setLocalToWorldFromPlacement(this.curveData.props.placement!);\r\n\r\n if (!builder.appendGeometryParamsChange(this.curveData.params))\r\n return;\r\n\r\n if (!builder.appendGeometryQuery(offset))\r\n return;\r\n\r\n return { format: \"flatbuffer\", data: builder.entries };\r\n }\r\n\r\n protected getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined {\r\n if (undefined === this.curveData)\r\n return;\r\n\r\n if (!this.wantModifyOriginal) {\r\n // Create result as new element with same model and category as original...\r\n const classFullName = (ev.viewport?.view.is3d() ? \"Generic:PhysicalObject\" : \"BisCore:DrawingGraphic\");\r\n return { classFullName, model: this.curveData.props.model, category: this.curveData.props.category, code: Code.createEmpty(), placement: this.curveData.props.placement };\r\n }\r\n\r\n return this.curveData.props;\r\n }\r\n\r\n protected override async doUpdateElement(elemProps: GeometricElementProps): Promise<boolean> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (undefined === elemProps.id) {\r\n const repeatOperation = this.wantContinueWithPreviousResult;\r\n if (repeatOperation)\r\n this.agenda.clear();\r\n\r\n const newId = await basicManipulationIpc.insertGeometricElement(elemProps);\r\n\r\n if (repeatOperation && this.agenda.add(newId))\r\n await this.onAgendaModified();\r\n } else {\r\n await basicManipulationIpc.updateGeometricElement(elemProps);\r\n }\r\n return true;\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n return false;\r\n }\r\n }\r\n\r\n protected get wantModifyOriginal(): boolean { return true; }\r\n protected get wantContinueWithPreviousResult(): boolean { return false; }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n // Don't restart tool want to continue operation using previous result...\r\n if (this.wantContinueWithPreviousResult && !this.agenda.isEmpty && undefined !== this.curveData)\r\n return;\r\n return super.onProcessComplete();\r\n }\r\n}\r\n\r\n/** @alpha Tool for applying an offset to paths and loops. */\r\nexport class OffsetCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"OffsetCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n private _useDistanceProperty: DialogProperty<boolean> | undefined;\r\n public get useDistanceProperty() {\r\n if (!this._useDistanceProperty)\r\n this._useDistanceProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useOffsetDistance\"), false);\r\n return this._useDistanceProperty;\r\n }\r\n\r\n public get useDistance(): boolean { return this.useDistanceProperty.value; }\r\n public set useDistance(value: boolean) { this.useDistanceProperty.value = value; }\r\n\r\n private _distanceProperty: DialogProperty<number> | undefined;\r\n public get distanceProperty() {\r\n if (!this._distanceProperty)\r\n this._distanceProperty = new DialogProperty<number>(new LengthDescription(\"offsetDistance\", EditTools.translate(\"OffsetCurve.Label.Distance\")), 0.1, undefined, !this.useDistance);\r\n return this._distanceProperty;\r\n }\r\n\r\n public get distance(): number { return this.distanceProperty.value; }\r\n public set distance(value: number) { this.distanceProperty.value = value; }\r\n\r\n private _makeCopyProperty: DialogProperty<boolean> | undefined;\r\n public get makeCopyProperty() {\r\n if (!this._makeCopyProperty)\r\n this._makeCopyProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"offsetCopy\", EditTools.translate(\"OffsetCurve.Label.MakeCopy\")), false);\r\n return this._makeCopyProperty;\r\n }\r\n\r\n public get makeCopy(): boolean { return this.makeCopyProperty.value; }\r\n public set makeCopy(value: boolean) { this.makeCopyProperty.value = value; }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n return (property === this.useDistanceProperty ? this.distanceProperty : undefined);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.makeCopyProperty, this.useDistanceProperty, this.distanceProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n // ensure controls are enabled/disabled based on current lock property state\r\n this.distanceProperty.isDisabled = !this.useDistance;\r\n const useDistanceLock = this.useDistanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.distanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useDistanceLock));\r\n toolSettings.push(this.makeCopyProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return true;\r\n\r\n switch (curve.curveCollectionType) {\r\n case \"path\":\r\n case \"loop\":\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected override modifyCurve(ev: BeButtonEvent, isAccept: boolean): CurveCollection | CurvePrimitive | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const worldToLocal = localToWorld.inverse();\r\n if (undefined === worldToLocal)\r\n return undefined;\r\n\r\n const geomXY = ((geom instanceof CurvePrimitive) ? Path.create(geom) : geom).cloneTransformed(worldToLocal);\r\n if (undefined === geomXY)\r\n return undefined;\r\n\r\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, localToWorld.getOrigin(), localToWorld.matrix.getColumn(2), ev.viewport);\r\n if (undefined === spacePoint)\r\n return undefined;\r\n\r\n worldToLocal.multiplyPoint3d(spacePoint, spacePoint);\r\n spacePoint.z = 0.0;\r\n\r\n const closeDetail = geomXY.closestPoint(spacePoint);\r\n if (undefined === closeDetail?.curve)\r\n return undefined;\r\n\r\n const unitZ = Vector3d.unitZ();\r\n const unitX = closeDetail.curve.fractionToPointAndUnitTangent(closeDetail.fraction).direction;\r\n const unitY = unitZ.unitCrossProduct(unitX);\r\n\r\n if (undefined === unitY)\r\n return undefined;\r\n\r\n let distance = closeDetail.point.distance(spacePoint);\r\n const refDir = Vector3d.createStartEnd(closeDetail.point, spacePoint);\r\n\r\n if (refDir.dotProduct(unitY) < 0.0)\r\n distance = -distance;\r\n\r\n let offset = 0.0;\r\n\r\n if (this.useDistance) {\r\n offset = this.distance;\r\n if ((offset < 0.0 && distance > 0.0) || (offset > 0.0 && distance < 0.0))\r\n offset = -offset;\r\n } else {\r\n offset = distance;\r\n }\r\n\r\n if (Math.abs(offset) < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offset !== this.distance) {\r\n this.distance = offset;\r\n this.syncToolSettingPropertyValue(this.distanceProperty);\r\n if (isAccept)\r\n this.saveToolSettingPropertyValue(this.distanceProperty, this.distanceProperty.dialogItemValue);\r\n }\r\n\r\n const jointOptions = new JointOptions(offset);\r\n jointOptions.preserveEllipticalArcs = true;\r\n\r\n const offsetGeom = RegionOps.constructCurveXYOffset(geomXY as Path | Loop, jointOptions);\r\n if (undefined === offsetGeom)\r\n return undefined;\r\n\r\n if (!offsetGeom.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n\r\n if (geom instanceof CurvePrimitive && offsetGeom instanceof Path && 1 === offsetGeom.children.length)\r\n return offsetGeom.getChild(0); // Don't create path for offset of single open curve...\r\n\r\n return offsetGeom;\r\n }\r\n\r\n protected override get wantModifyOriginal(): boolean {\r\n return !this.makeCopy;\r\n }\r\n\r\n protected override get wantContinueWithPreviousResult(): boolean {\r\n return !this.wantModifyOriginal;\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (this.agenda.isEmpty) {\r\n hints.enableSmartRotation = true;\r\n } else if (undefined !== this.anchorPoint && undefined !== this.targetView) {\r\n const geom = this.curveData?.geom;\r\n const closeDetail = (geom instanceof CurvePrimitive) ? geom.closestPoint(this.anchorPoint, false) : geom?.closestPoint(this.anchorPoint);\r\n\r\n if (undefined !== closeDetail?.curve) {\r\n const unitX = closeDetail.curve.fractionToPointAndUnitTangent(closeDetail.fraction).direction;\r\n\r\n if (undefined !== unitX) {\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(this.targetView, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n\r\n if (undefined !== localToWorld) {\r\n const unitZ = localToWorld.matrix.getColumn(2);\r\n const frame = Matrix3d.createRigidFromColumns(unitX, unitZ, AxisOrder.XZY);\r\n\r\n if (undefined !== frame) {\r\n hints.setOrigin(closeDetail.point);\r\n hints.setMatrix(frame);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n hints.sendHints(false);\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"OffsetCurve.Prompts.DefineOffset\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Tool for opening loops and splitting paths. */\r\nexport class BreakCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"BreakCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n protected resultA?: CurveCollection | CurvePrimitive;\r\n protected resultB?: CurveCollection | CurvePrimitive;\r\n protected modifyOriginal = true;\r\n\r\n protected override get wantDynamics(): boolean { return false; }\r\n protected override get wantModifyOriginal(): boolean { return this.modifyOriginal; }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return true;\r\n\r\n switch (curve.curveCollectionType) {\r\n case \"path\":\r\n case \"loop\":\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected doBreakCurve(ev: BeButtonEvent): void {\r\n this.resultA = this.resultB = undefined;\r\n\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return;\r\n\r\n const closeDetail = (geom instanceof CurvePrimitive) ? geom.closestPoint(ev.point, false) : geom.closestPoint(ev.point);\r\n if (undefined === closeDetail?.curve)\r\n return;\r\n\r\n const selectedStart = (closeDetail.fraction <= Geometry.smallFraction);\r\n const selectedEnd = (closeDetail.fraction >= (1.0 - Geometry.smallFraction));\r\n\r\n if (geom instanceof CurvePrimitive) {\r\n if (selectedStart || selectedEnd)\r\n return; // split is no-op...\r\n\r\n this.resultA = geom.clonePartialCurve(0.0, closeDetail.fraction);\r\n this.resultB = geom.clonePartialCurve(closeDetail.fraction, 1.0);\r\n return;\r\n } else if (geom instanceof Path) {\r\n const firstCurve = geom.children[0];\r\n const lastCurve = geom.children[geom.children.length - 1];\r\n\r\n if ((closeDetail.curve === firstCurve && selectedStart) || (closeDetail.curve === lastCurve && selectedEnd))\r\n return; // split is no-op...\r\n\r\n let beforeCurve = true;\r\n const resultA = Path.create();\r\n const resultB = Path.create();\r\n\r\n for (const curve of geom.children) {\r\n if (curve === closeDetail.curve) {\r\n if (selectedStart) {\r\n resultB.children.push(curve.clone());\r\n } else if (selectedEnd) {\r\n resultA.children.push(curve.clone());\r\n } else {\r\n const curveA = curve.clonePartialCurve(0.0, closeDetail.fraction);\r\n if (undefined !== curveA)\r\n resultA.children.push(curveA);\r\n\r\n const curveB = curve.clonePartialCurve(closeDetail.fraction, 1.0);\r\n if (undefined !== curveB)\r\n resultB.children.push(curveB);\r\n }\r\n beforeCurve = false;\r\n } else {\r\n if (beforeCurve)\r\n resultA.children.push(curve.clone());\r\n else\r\n resultB.children.push(curve.clone());\r\n }\r\n }\r\n\r\n this.resultA = resultA;\r\n this.resultB = resultB;\r\n } else if (geom instanceof Loop) {\r\n const closeIndex = geom.children.findIndex((child) => child === closeDetail.curve);\r\n if (-1 === closeIndex)\r\n return;\r\n\r\n const endIndex = closeIndex + geom.children.length;\r\n const resultA = Path.create(); // Result is always a single path...\r\n\r\n if (selectedStart) {\r\n resultA.children.push(closeDetail.curve.clone());\r\n } else if (!selectedEnd) {\r\n const curveB = closeDetail.curve.clonePartialCurve(closeDetail.fraction, 1.0);\r\n if (undefined !== curveB)\r\n resultA.children.push(curveB);\r\n }\r\n\r\n for (let index = closeIndex; index < endIndex; ++index) {\r\n const curve = geom.cyclicCurvePrimitive(index);\r\n if (undefined === curve || curve === closeDetail.curve)\r\n continue;\r\n\r\n resultA.children.push(curve.clone());\r\n }\r\n\r\n if (selectedEnd) {\r\n resultA.children.push(closeDetail.curve.clone());\r\n } else if (!selectedStart) {\r\n const curveA = closeDetail.curve.clonePartialCurve(0.0, closeDetail.fraction);\r\n if (undefined !== curveA)\r\n resultA.children.push(curveA);\r\n }\r\n\r\n this.resultA = resultA;\r\n }\r\n }\r\n\r\n protected override modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): CurveCollection | CurvePrimitive | undefined {\r\n return (this.wantModifyOriginal ? this.resultA : this.resultB);\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n this.doBreakCurve(ev);\r\n if (undefined === this.resultA || !await this.applyAgendaOperation(ev))\r\n return;\r\n\r\n if (undefined !== this.resultB) {\r\n this.modifyOriginal = false;\r\n await this.applyAgendaOperation(ev);\r\n }\r\n\r\n return this.saveChanges();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"BreakCurve.Prompts.IdentifyBreak\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new BreakCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Tool to extend or trim a path or open curve */\r\nexport class ExtendCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"ExtendCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n protected modifyingEnd?: CurvePrimitive;\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return curve.isExtensibleFractionSpace;\r\n\r\n return (\"path\" === curve.curveCollectionType);\r\n }\r\n\r\n protected extendCurve(geom: CurvePrimitive, pickPoint: Point3d, spacePoint: Point3d): CurvePrimitive | undefined {\r\n const pickDetail = geom.closestPoint(pickPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return undefined;\r\n\r\n const closeDetail = geom.closestPoint(spacePoint, true);\r\n if (undefined === closeDetail?.curve)\r\n return undefined;\r\n\r\n if (closeDetail.curve instanceof Arc3d) {\r\n if (pickDetail.fraction > 0.5 && closeDetail.fraction < 0.0) {\r\n const smallArc = closeDetail.curve.clonePartialCurve(closeDetail.fraction, 0.0);\r\n smallArc.sweep.cloneComplement(false, smallArc.sweep);\r\n return smallArc;\r\n } else if (pickDetail.fraction <= 0.5 && closeDetail.fraction > 1.0) {\r\n const smallArc = closeDetail.curve.clonePartialCurve(1.0, closeDetail.fraction);\r\n smallArc.sweep.cloneComplement(false, smallArc.sweep);\r\n return smallArc;\r\n } else if (Math.abs(pickDetail.fraction > 0.5 ? closeDetail.fraction : 1.0 - closeDetail.fraction) < Geometry.smallFraction) {\r\n const fullArc = closeDetail.curve.clone();\r\n fullArc.sweep = AngleSweep.create360();\r\n return fullArc;\r\n }\r\n }\r\n\r\n return geom.clonePartialCurve(pickDetail.fraction > 0.5 ? 0.0 : 1.0, closeDetail.fraction);\r\n }\r\n\r\n protected extendPathEnd(geom: Path, closeDetail: CurveLocationDetail, isStart: boolean): Path | undefined {\r\n if (undefined === closeDetail.curve)\r\n return undefined;\r\n\r\n const curve = closeDetail.curve.clonePartialCurve(isStart ? closeDetail.fraction : 0.0, isStart ? 1.0 : closeDetail.fraction);\r\n if (undefined === curve)\r\n return undefined;\r\n\r\n if (curve instanceof Arc3d && closeDetail.curve instanceof Arc3d && (curve.sweep.isCCW !== closeDetail.curve.sweep.isCCW))\r\n curve.sweep.cloneComplement(true, curve.sweep); // Preserve current sweep direction...\r\n\r\n const result = geom.clone() as Path;\r\n result.children[isStart ? 0 : geom.children.length - 1] = curve;\r\n\r\n return result;\r\n }\r\n\r\n protected extendPath(geom: Path, pickPoint: Point3d, spacePoint: Point3d): Path | CurvePrimitive | undefined {\r\n if (geom.children.length < 2)\r\n return this.extendCurve(geom.children[0], pickPoint, spacePoint);\r\n\r\n const pathAsPrimitive = CurveChainWithDistanceIndex.createCapture(geom);\r\n const closeDetail = pathAsPrimitive.closestPoint(spacePoint, true);\r\n if (undefined === closeDetail?.curve || undefined === closeDetail.childDetail?.curve)\r\n return undefined;\r\n\r\n if (undefined !== this.modifyingEnd) {\r\n if (closeDetail.childDetail.curve === this.modifyingEnd) {\r\n this.modifyingEnd = undefined; // Ok to unlock extending first/last curve in path...\r\n } else {\r\n const pathEndDetail = this.modifyingEnd.closestPoint(spacePoint, true);\r\n if (undefined === pathEndDetail?.curve)\r\n return undefined;\r\n return this.extendPathEnd(geom, pathEndDetail, (pathEndDetail.curve === geom.children[0]));\r\n }\r\n }\r\n\r\n // NOTE: Special case extend instead of using CurveChainWithDistanceIndex.clonePartialCurve...\r\n if (closeDetail.fraction < 0.0) {\r\n this.modifyingEnd = closeDetail.childDetail.curve;\r\n return this.extendPathEnd(geom, closeDetail.childDetail, true);\r\n } else if (closeDetail.fraction > 1.0) {\r\n this.modifyingEnd = closeDetail.childDetail.curve;\r\n return this.extendPathEnd(geom, closeDetail.childDetail, false);\r\n }\r\n\r\n const pickDetail = pathAsPrimitive.closestPoint(pickPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return undefined;\r\n\r\n const result = pathAsPrimitive.clonePartialCurve(pickDetail.fraction > 0.5 ? 0.0 : 1.0, closeDetail.fraction);\r\n if (undefined === result)\r\n return undefined;\r\n\r\n return Path.create(...result.path.children);\r\n }\r\n\r\n protected override modifyCurve(ev: BeButtonEvent, _isAccept: boolean): CurveCollection | CurvePrimitive | undefined {\r\n if (undefined === ev.viewport || undefined === this.anchorPoint)\r\n return undefined;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const worldToLocal = localToWorld.inverse();\r\n if (undefined === worldToLocal)\r\n return undefined;\r\n\r\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, localToWorld.getOrigin(), localToWorld.matrix.getColumn(2), ev.viewport);\r\n if (undefined === spacePoint)\r\n return undefined;\r\n\r\n if (geom instanceof CurvePrimitive)\r\n return this.extendCurve(geom, this.anchorPoint, spacePoint);\r\n else if (geom instanceof Path)\r\n return this.extendPath(geom, this.anchorPoint, spacePoint);\r\n\r\n return undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n IModelApp.accuSnap.neverFlash(this.agenda.elements); // Don't flash snapped segment for better preview when trimming curve/path...\r\n return super.onAgendaModified();\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (this.agenda.isEmpty) {\r\n hints.enableSmartRotation = true;\r\n } else {\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom || undefined === this.anchorPoint)\r\n return;\r\n\r\n let pickDetail;\r\n if (geom instanceof CurvePrimitive)\r\n pickDetail = geom.closestPoint(this.anchorPoint, false);\r\n else if (geom instanceof Path)\r\n pickDetail = CurveChainWithDistanceIndex.createCapture(geom).closestPoint(this.anchorPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return;\r\n\r\n const curve = (undefined !== pickDetail.childDetail?.curve ? pickDetail.childDetail?.curve : pickDetail.curve);\r\n\r\n if (curve instanceof Arc3d) {\r\n const matrix = curve.matrixClone();\r\n matrix.normalizeColumnsInPlace();\r\n hints.setOrigin(curve.center);\r\n hints.setMatrix(matrix);\r\n hints.setModePolar();\r\n } else if (curve instanceof LineSegment3d) {\r\n hints.setOrigin(pickDetail.fraction > 0.5 ? curve.point0Ref : curve.point1Ref);\r\n hints.setXAxis(Vector3d.createStartEnd(pickDetail.fraction > 0.5 ? curve.point0Ref : curve.point1Ref, pickDetail.fraction > 0.5 ? curve.point1Ref : curve.point0Ref));\r\n hints.setModeRectangular();\r\n } else if (curve instanceof LineString3d) {\r\n if (curve.numPoints() > 1) {\r\n hints.setOrigin(curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 2 : 1));\r\n hints.setXAxis(Vector3d.createStartEnd(curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 2 : 1), curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 1 : 0)));\r\n }\r\n hints.setModeRectangular();\r\n } else {\r\n const ray = curve.fractionToPointAndUnitTangent(pickDetail.fraction > 0.5 ? 0.0 : 1.0);\r\n hints.setOrigin(ray.origin);\r\n hints.setXAxis(ray.direction);\r\n hints.setModeRectangular();\r\n }\r\n }\r\n hints.sendHints(false);\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"ExtendCurve.Prompts.IdentifyEnd\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ExtendCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ModifyCurveTools.js","sourceRoot":"","sources":["../../src/ModifyCurveTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem, PropertyDescriptionHelper } from \"@itwin/appui-abstract\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BentleyError, Code, ElementGeometry, ElementGeometryInfo, ElementGeometryOpcode, FlatBufferGeometryStream, GeometricElementProps,\r\n GeometryParams, JsonGeometryStream,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n AccuDrawHintBuilder, BeButtonEvent, IModelApp,\r\n LengthDescription, NotifyMessageDetails, OutputMessagePriority, ToolAssistanceInstruction,\r\n} from \"@itwin/core-frontend\";\r\nimport {\r\n AngleSweep, Arc3d, AxisOrder, CurveChainWithDistanceIndex, CurveCollection, CurveLocationDetail, CurvePrimitive, FrameBuilder, Geometry, GeometryQuery, JointOptions, LineSegment3d, LineString3d, Loop, Matrix3d,\r\n Path, Point3d, RegionOps, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { editorBuiltInCmdIds } from \"@itwin/editor-common\";\r\nimport { EditTools } from \"./EditTool\";\r\nimport { basicManipulationIpc } from \"./EditToolIpc\";\r\nimport { ModifyElementWithDynamicsTool } from \"./ModifyElementTool\";\r\n\r\n/** @alpha */\r\nexport class CurveData {\r\n public props: GeometricElementProps;\r\n public params: GeometryParams;\r\n public geom: CurveCollection | CurvePrimitive;\r\n\r\n constructor(props: GeometricElementProps, params: GeometryParams, geom: CurveCollection | CurvePrimitive) {\r\n this.props = props;\r\n this.params = params;\r\n this.geom = geom;\r\n }\r\n}\r\n\r\n/** @alpha Base class for modifying all types of curve geometry. */\r\nexport abstract class ModifyCurveTool extends ModifyElementWithDynamicsTool {\r\n protected _startedCmd?: string;\r\n protected curveData?: CurveData;\r\n\r\n protected async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdBasicManipulation, this.iModel.key);\r\n }\r\n\r\n public static isSingleCurve(info: ElementGeometryInfo): { curve: CurveCollection | CurvePrimitive, params: GeometryParams } | undefined {\r\n const it = new ElementGeometry.Iterator(info);\r\n it.requestWorldCoordinates();\r\n\r\n for (const entry of it) {\r\n const geom = entry.toGeometryQuery();\r\n if (undefined === geom)\r\n return;\r\n\r\n if (\"curvePrimitive\" === geom.geometryCategory) {\r\n return { curve: geom as CurvePrimitive, params: entry.geomParams };\r\n } else if (\"curveCollection\" === geom.geometryCategory) {\r\n return { curve: geom as CurveCollection, params: entry.geomParams };\r\n }\r\n\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n\r\n protected acceptCurve(_curve: CurveCollection | CurvePrimitive): boolean { return true; }\r\n protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined { return undefined; }\r\n\r\n protected async getCurveData(id: Id64String): Promise<CurveData | undefined> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const reject: ElementGeometryOpcode[] = [ElementGeometryOpcode.Polyface, ElementGeometryOpcode.SolidPrimitive, ElementGeometryOpcode.BsplineSurface, ElementGeometryOpcode.BRep];\r\n const info = await basicManipulationIpc.requestElementGeometry(id, { maxDisplayable: 1, reject, geometry: { curves: true, surfaces: true, solids: false } });\r\n if (undefined === info)\r\n return undefined;\r\n\r\n const data = ModifyCurveTool.isSingleCurve(info);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n if (!this.acceptCurve(data.curve))\r\n return undefined;\r\n\r\n const props = await this.iModel.elements.loadProps(id) as GeometricElementProps;\r\n if (undefined === props)\r\n return undefined;\r\n\r\n return new CurveData(props, data.params, data.curve);\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err)));\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override async doAcceptElementForOperation(id: Id64String): Promise<boolean> {\r\n return (undefined !== await this.getCurveData(id));\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n this.curveData = undefined;\r\n if (this.agenda.isEmpty)\r\n return;\r\n\r\n const id = this.agenda.elements[this.agenda.length - 1];\r\n this.curveData = await this.getCurveData(id);\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n hints.enableSmartRotation = true;\r\n hints.sendHints(false);\r\n }\r\n\r\n protected getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined {\r\n if (undefined === this.curveData)\r\n return;\r\n\r\n const geom = this.modifyCurve(ev, isAccept);\r\n if (undefined === geom)\r\n return;\r\n\r\n const builder = new ElementGeometry.Builder();\r\n builder.setLocalToWorldFromPlacement(this.curveData.props.placement!);\r\n\r\n if (!builder.appendGeometryParamsChange(this.curveData.params))\r\n return;\r\n\r\n if (!builder.appendGeometryQuery(geom))\r\n return;\r\n\r\n return { format: \"flatbuffer\", data: builder.entries };\r\n }\r\n\r\n protected getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined {\r\n if (undefined === this.curveData)\r\n return;\r\n\r\n if (!this.wantModifyOriginal) {\r\n // Create result as new element with same model and category as original...\r\n const classFullName = (ev.viewport?.view.is3d() ? \"Generic:PhysicalObject\" : \"BisCore:DrawingGraphic\");\r\n return { classFullName, model: this.curveData.props.model, category: this.curveData.props.category, code: Code.createEmpty(), placement: this.curveData.props.placement };\r\n }\r\n\r\n return this.curveData.props;\r\n }\r\n\r\n protected override async doUpdateElement(elemProps: GeometricElementProps): Promise<boolean> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (undefined === elemProps.id) {\r\n const repeatOperation = this.wantContinueWithPreviousResult;\r\n if (repeatOperation)\r\n this.agenda.clear();\r\n\r\n const newId = await basicManipulationIpc.insertGeometricElement(elemProps);\r\n\r\n if (repeatOperation && this.agenda.add(newId))\r\n await this.onAgendaModified();\r\n } else {\r\n await basicManipulationIpc.updateGeometricElement(elemProps);\r\n }\r\n return true;\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\r\n return false;\r\n }\r\n }\r\n\r\n protected get wantModifyOriginal(): boolean { return true; }\r\n protected get wantContinueWithPreviousResult(): boolean { return false; }\r\n\r\n public override async onProcessComplete(): Promise<void> {\r\n // Don't restart tool want to continue operation using previous result...\r\n if (this.wantContinueWithPreviousResult && !this.agenda.isEmpty && undefined !== this.curveData)\r\n return;\r\n return super.onProcessComplete();\r\n }\r\n}\r\n\r\n/** @alpha Tool for applying an offset to paths and loops. */\r\nexport class OffsetCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"OffsetCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n private _useDistanceProperty: DialogProperty<boolean> | undefined;\r\n public get useDistanceProperty() {\r\n if (!this._useDistanceProperty)\r\n this._useDistanceProperty = new DialogProperty<boolean>(PropertyDescriptionHelper.buildLockPropertyDescription(\"useOffsetDistance\"), false);\r\n return this._useDistanceProperty;\r\n }\r\n\r\n public get useDistance(): boolean { return this.useDistanceProperty.value; }\r\n public set useDistance(value: boolean) { this.useDistanceProperty.value = value; }\r\n\r\n private _distanceProperty: DialogProperty<number> | undefined;\r\n public get distanceProperty() {\r\n if (!this._distanceProperty)\r\n this._distanceProperty = new DialogProperty<number>(new LengthDescription(\"offsetDistance\", EditTools.translate(\"OffsetCurve.Label.Distance\")), 0.1, undefined, !this.useDistance);\r\n return this._distanceProperty;\r\n }\r\n\r\n public get distance(): number { return this.distanceProperty.value; }\r\n public set distance(value: number) { this.distanceProperty.value = value; }\r\n\r\n private _makeCopyProperty: DialogProperty<boolean> | undefined;\r\n public get makeCopyProperty() {\r\n if (!this._makeCopyProperty)\r\n this._makeCopyProperty = new DialogProperty<boolean>(\r\n PropertyDescriptionHelper.buildToggleDescription(\"offsetCopy\", EditTools.translate(\"OffsetCurve.Label.MakeCopy\")), false);\r\n return this._makeCopyProperty;\r\n }\r\n\r\n public get makeCopy(): boolean { return this.makeCopyProperty.value; }\r\n public set makeCopy(value: boolean) { this.makeCopyProperty.value = value; }\r\n\r\n protected override getToolSettingPropertyLocked(property: DialogProperty<any>): DialogProperty<any> | undefined {\r\n return (property === this.useDistanceProperty ? this.distanceProperty : undefined);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this.initializeToolSettingPropertyValues([this.makeCopyProperty, this.useDistanceProperty, this.distanceProperty]);\r\n\r\n const toolSettings = new Array<DialogItem>();\r\n\r\n // ensure controls are enabled/disabled based on current lock property state\r\n this.distanceProperty.isDisabled = !this.useDistance;\r\n const useDistanceLock = this.useDistanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 });\r\n toolSettings.push(this.distanceProperty.toDialogItem({ rowPriority: 1, columnIndex: 1 }, useDistanceLock));\r\n toolSettings.push(this.makeCopyProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));\r\n\r\n return toolSettings;\r\n }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return true;\r\n\r\n switch (curve.curveCollectionType) {\r\n case \"path\":\r\n case \"loop\":\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected override modifyCurve(ev: BeButtonEvent, isAccept: boolean): GeometryQuery | undefined {\r\n if (undefined === ev.viewport)\r\n return undefined;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const worldToLocal = localToWorld.inverse();\r\n if (undefined === worldToLocal)\r\n return undefined;\r\n\r\n const geomXY = ((geom instanceof CurvePrimitive) ? Path.create(geom) : geom).cloneTransformed(worldToLocal);\r\n if (undefined === geomXY)\r\n return undefined;\r\n\r\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, localToWorld.getOrigin(), localToWorld.matrix.getColumn(2), ev.viewport);\r\n if (undefined === spacePoint)\r\n return undefined;\r\n\r\n worldToLocal.multiplyPoint3d(spacePoint, spacePoint);\r\n spacePoint.z = 0.0;\r\n\r\n const closeDetail = geomXY.closestPoint(spacePoint);\r\n if (undefined === closeDetail?.curve)\r\n return undefined;\r\n\r\n const unitZ = Vector3d.unitZ();\r\n const unitX = closeDetail.curve.fractionToPointAndUnitTangent(closeDetail.fraction).direction;\r\n const unitY = unitZ.unitCrossProduct(unitX);\r\n\r\n if (undefined === unitY)\r\n return undefined;\r\n\r\n let distance = closeDetail.point.distance(spacePoint);\r\n const refDir = Vector3d.createStartEnd(closeDetail.point, spacePoint);\r\n\r\n if (refDir.dotProduct(unitY) < 0.0)\r\n distance = -distance;\r\n\r\n let offset = 0.0;\r\n\r\n if (this.useDistance) {\r\n offset = this.distance;\r\n if ((offset < 0.0 && distance > 0.0) || (offset > 0.0 && distance < 0.0))\r\n offset = -offset;\r\n } else {\r\n offset = distance;\r\n }\r\n\r\n if (Math.abs(offset) < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offset !== this.distance) {\r\n this.distance = offset;\r\n this.syncToolSettingPropertyValue(this.distanceProperty);\r\n if (isAccept)\r\n this.saveToolSettingPropertyValue(this.distanceProperty, this.distanceProperty.dialogItemValue);\r\n }\r\n\r\n const jointOptions = new JointOptions(offset);\r\n jointOptions.preserveEllipticalArcs = true;\r\n\r\n const offsetGeom = RegionOps.constructCurveXYOffset(geomXY as Path | Loop, jointOptions);\r\n if (undefined === offsetGeom)\r\n return undefined;\r\n\r\n if (!offsetGeom.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n\r\n if (geom instanceof CurvePrimitive && offsetGeom instanceof Path && 1 === offsetGeom.children.length)\r\n return offsetGeom.getChild(0); // Don't create path for offset of single open curve...\r\n\r\n return offsetGeom;\r\n }\r\n\r\n protected override get wantModifyOriginal(): boolean {\r\n return !this.makeCopy;\r\n }\r\n\r\n protected override get wantContinueWithPreviousResult(): boolean {\r\n return !this.wantModifyOriginal;\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (this.agenda.isEmpty) {\r\n hints.enableSmartRotation = true;\r\n } else if (undefined !== this.anchorPoint && undefined !== this.targetView) {\r\n const geom = this.curveData?.geom;\r\n const closeDetail = (geom instanceof CurvePrimitive) ? geom.closestPoint(this.anchorPoint, false) : geom?.closestPoint(this.anchorPoint);\r\n\r\n if (undefined !== closeDetail?.curve) {\r\n const unitX = closeDetail.curve.fractionToPointAndUnitTangent(closeDetail.fraction).direction;\r\n\r\n if (undefined !== unitX) {\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(this.targetView, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n\r\n if (undefined !== localToWorld) {\r\n const unitZ = localToWorld.matrix.getColumn(2);\r\n const frame = Matrix3d.createRigidFromColumns(unitX, unitZ, AxisOrder.XZY);\r\n\r\n if (undefined !== frame) {\r\n hints.setOrigin(closeDetail.point);\r\n hints.setMatrix(frame);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n hints.sendHints(false);\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (!this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"OffsetCurve.Prompts.DefineOffset\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Tool for opening loops and splitting paths. */\r\nexport class BreakCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"BreakCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n protected resultA?: CurveCollection | CurvePrimitive;\r\n protected resultB?: CurveCollection | CurvePrimitive;\r\n protected modifyOriginal = true;\r\n\r\n protected override get wantDynamics(): boolean { return false; }\r\n protected override get wantModifyOriginal(): boolean { return this.modifyOriginal; }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return true;\r\n\r\n switch (curve.curveCollectionType) {\r\n case \"path\":\r\n case \"loop\":\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected doBreakCurve(ev: BeButtonEvent): void {\r\n this.resultA = this.resultB = undefined;\r\n\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return;\r\n\r\n const closeDetail = (geom instanceof CurvePrimitive) ? geom.closestPoint(ev.point, false) : geom.closestPoint(ev.point);\r\n if (undefined === closeDetail?.curve)\r\n return;\r\n\r\n const selectedStart = (closeDetail.fraction <= Geometry.smallFraction);\r\n const selectedEnd = (closeDetail.fraction >= (1.0 - Geometry.smallFraction));\r\n\r\n if (geom instanceof CurvePrimitive) {\r\n if (selectedStart || selectedEnd)\r\n return; // split is no-op...\r\n\r\n this.resultA = geom.clonePartialCurve(0.0, closeDetail.fraction);\r\n this.resultB = geom.clonePartialCurve(closeDetail.fraction, 1.0);\r\n return;\r\n } else if (geom instanceof Path) {\r\n const firstCurve = geom.children[0];\r\n const lastCurve = geom.children[geom.children.length - 1];\r\n\r\n if ((closeDetail.curve === firstCurve && selectedStart) || (closeDetail.curve === lastCurve && selectedEnd))\r\n return; // split is no-op...\r\n\r\n let beforeCurve = true;\r\n const resultA = Path.create();\r\n const resultB = Path.create();\r\n\r\n for (const curve of geom.children) {\r\n if (curve === closeDetail.curve) {\r\n if (selectedStart) {\r\n resultB.children.push(curve.clone());\r\n } else if (selectedEnd) {\r\n resultA.children.push(curve.clone());\r\n } else {\r\n const curveA = curve.clonePartialCurve(0.0, closeDetail.fraction);\r\n if (undefined !== curveA)\r\n resultA.children.push(curveA);\r\n\r\n const curveB = curve.clonePartialCurve(closeDetail.fraction, 1.0);\r\n if (undefined !== curveB)\r\n resultB.children.push(curveB);\r\n }\r\n beforeCurve = false;\r\n } else {\r\n if (beforeCurve)\r\n resultA.children.push(curve.clone());\r\n else\r\n resultB.children.push(curve.clone());\r\n }\r\n }\r\n\r\n this.resultA = resultA;\r\n this.resultB = resultB;\r\n } else if (geom instanceof Loop) {\r\n const closeIndex = geom.children.findIndex((child) => child === closeDetail.curve);\r\n if (-1 === closeIndex)\r\n return;\r\n\r\n const endIndex = closeIndex + geom.children.length;\r\n const resultA = Path.create(); // Result is always a single path...\r\n\r\n if (selectedStart) {\r\n resultA.children.push(closeDetail.curve.clone());\r\n } else if (!selectedEnd) {\r\n const curveB = closeDetail.curve.clonePartialCurve(closeDetail.fraction, 1.0);\r\n if (undefined !== curveB)\r\n resultA.children.push(curveB);\r\n }\r\n\r\n for (let index = closeIndex; index < endIndex; ++index) {\r\n const curve = geom.cyclicCurvePrimitive(index);\r\n if (undefined === curve || curve === closeDetail.curve)\r\n continue;\r\n\r\n resultA.children.push(curve.clone());\r\n }\r\n\r\n if (selectedEnd) {\r\n resultA.children.push(closeDetail.curve.clone());\r\n } else if (!selectedStart) {\r\n const curveA = closeDetail.curve.clonePartialCurve(0.0, closeDetail.fraction);\r\n if (undefined !== curveA)\r\n resultA.children.push(curveA);\r\n }\r\n\r\n this.resultA = resultA;\r\n }\r\n }\r\n\r\n protected override modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined {\r\n return (this.wantModifyOriginal ? this.resultA : this.resultB);\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n this.doBreakCurve(ev);\r\n if (undefined === this.resultA || !await this.applyAgendaOperation(ev))\r\n return;\r\n\r\n if (undefined !== this.resultB) {\r\n this.modifyOriginal = false;\r\n await this.applyAgendaOperation(ev);\r\n }\r\n\r\n return this.saveChanges();\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"BreakCurve.Prompts.IdentifyBreak\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new BreakCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Tool to extend or trim a path or open curve */\r\nexport class ExtendCurveTool extends ModifyCurveTool {\r\n public static override toolId = \"ExtendCurve\";\r\n public static override iconSpec = \"icon-scale\"; // Need better icon...\r\n\r\n protected modifyingEnd?: CurvePrimitive;\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n\r\n protected override acceptCurve(curve: CurveCollection | CurvePrimitive): boolean {\r\n if (\"curvePrimitive\" === curve.geometryCategory)\r\n return curve.isExtensibleFractionSpace;\r\n\r\n return (\"path\" === curve.curveCollectionType);\r\n }\r\n\r\n protected extendCurve(geom: CurvePrimitive, pickPoint: Point3d, spacePoint: Point3d): CurvePrimitive | undefined {\r\n const pickDetail = geom.closestPoint(pickPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return undefined;\r\n\r\n const closeDetail = geom.closestPoint(spacePoint, true);\r\n if (undefined === closeDetail?.curve)\r\n return undefined;\r\n\r\n if (closeDetail.curve instanceof Arc3d) {\r\n if (pickDetail.fraction > 0.5 && closeDetail.fraction < 0.0) {\r\n const smallArc = closeDetail.curve.clonePartialCurve(closeDetail.fraction, 0.0);\r\n smallArc.sweep.cloneComplement(false, smallArc.sweep);\r\n return smallArc;\r\n } else if (pickDetail.fraction <= 0.5 && closeDetail.fraction > 1.0) {\r\n const smallArc = closeDetail.curve.clonePartialCurve(1.0, closeDetail.fraction);\r\n smallArc.sweep.cloneComplement(false, smallArc.sweep);\r\n return smallArc;\r\n } else if (Math.abs(pickDetail.fraction > 0.5 ? closeDetail.fraction : 1.0 - closeDetail.fraction) < Geometry.smallFraction) {\r\n const fullArc = closeDetail.curve.clone();\r\n fullArc.sweep = AngleSweep.create360();\r\n return fullArc;\r\n }\r\n }\r\n\r\n return geom.clonePartialCurve(pickDetail.fraction > 0.5 ? 0.0 : 1.0, closeDetail.fraction);\r\n }\r\n\r\n protected extendPathEnd(geom: Path, closeDetail: CurveLocationDetail, isStart: boolean): Path | undefined {\r\n if (undefined === closeDetail.curve)\r\n return undefined;\r\n\r\n const curve = closeDetail.curve.clonePartialCurve(isStart ? closeDetail.fraction : 0.0, isStart ? 1.0 : closeDetail.fraction);\r\n if (undefined === curve)\r\n return undefined;\r\n\r\n if (curve instanceof Arc3d && closeDetail.curve instanceof Arc3d && (curve.sweep.isCCW !== closeDetail.curve.sweep.isCCW))\r\n curve.sweep.cloneComplement(true, curve.sweep); // Preserve current sweep direction...\r\n\r\n const result = geom.clone() as Path;\r\n result.children[isStart ? 0 : geom.children.length - 1] = curve;\r\n\r\n return result;\r\n }\r\n\r\n protected extendPath(geom: Path, pickPoint: Point3d, spacePoint: Point3d): Path | CurvePrimitive | undefined {\r\n if (geom.children.length < 2)\r\n return this.extendCurve(geom.children[0], pickPoint, spacePoint);\r\n\r\n const pathAsPrimitive = CurveChainWithDistanceIndex.createCapture(geom);\r\n const closeDetail = pathAsPrimitive.closestPoint(spacePoint, true);\r\n if (undefined === closeDetail?.curve || undefined === closeDetail.childDetail?.curve)\r\n return undefined;\r\n\r\n if (undefined !== this.modifyingEnd) {\r\n if (closeDetail.childDetail.curve === this.modifyingEnd) {\r\n this.modifyingEnd = undefined; // Ok to unlock extending first/last curve in path...\r\n } else {\r\n const pathEndDetail = this.modifyingEnd.closestPoint(spacePoint, true);\r\n if (undefined === pathEndDetail?.curve)\r\n return undefined;\r\n return this.extendPathEnd(geom, pathEndDetail, (pathEndDetail.curve === geom.children[0]));\r\n }\r\n }\r\n\r\n // NOTE: Special case extend instead of using CurveChainWithDistanceIndex.clonePartialCurve...\r\n if (closeDetail.fraction < 0.0) {\r\n this.modifyingEnd = closeDetail.childDetail.curve;\r\n return this.extendPathEnd(geom, closeDetail.childDetail, true);\r\n } else if (closeDetail.fraction > 1.0) {\r\n this.modifyingEnd = closeDetail.childDetail.curve;\r\n return this.extendPathEnd(geom, closeDetail.childDetail, false);\r\n }\r\n\r\n const pickDetail = pathAsPrimitive.closestPoint(pickPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return undefined;\r\n\r\n const result = pathAsPrimitive.clonePartialCurve(pickDetail.fraction > 0.5 ? 0.0 : 1.0, closeDetail.fraction);\r\n if (undefined === result)\r\n return undefined;\r\n\r\n return Path.create(...result.path.children);\r\n }\r\n\r\n protected override modifyCurve(ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined {\r\n if (undefined === ev.viewport || undefined === this.anchorPoint)\r\n return undefined;\r\n\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom)\r\n return undefined;\r\n\r\n const matrix = AccuDrawHintBuilder.getCurrentRotation(ev.viewport, true, true);\r\n const localToWorld = FrameBuilder.createRightHandedFrame(matrix?.getColumn(2), geom);\r\n if (undefined === localToWorld)\r\n return undefined;\r\n\r\n const worldToLocal = localToWorld.inverse();\r\n if (undefined === worldToLocal)\r\n return undefined;\r\n\r\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, localToWorld.getOrigin(), localToWorld.matrix.getColumn(2), ev.viewport);\r\n if (undefined === spacePoint)\r\n return undefined;\r\n\r\n if (geom instanceof CurvePrimitive)\r\n return this.extendCurve(geom, this.anchorPoint, spacePoint);\r\n else if (geom instanceof Path)\r\n return this.extendPath(geom, this.anchorPoint, spacePoint);\r\n\r\n return undefined;\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n IModelApp.accuSnap.neverFlash(this.agenda.elements); // Don't flash snapped segment for better preview when trimming curve/path...\r\n return super.onAgendaModified();\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n const hints = new AccuDrawHintBuilder();\r\n\r\n if (this.agenda.isEmpty) {\r\n hints.enableSmartRotation = true;\r\n } else {\r\n const geom = this.curveData?.geom;\r\n if (undefined === geom || undefined === this.anchorPoint)\r\n return;\r\n\r\n let pickDetail;\r\n if (geom instanceof CurvePrimitive)\r\n pickDetail = geom.closestPoint(this.anchorPoint, false);\r\n else if (geom instanceof Path)\r\n pickDetail = CurveChainWithDistanceIndex.createCapture(geom).closestPoint(this.anchorPoint, false);\r\n if (undefined === pickDetail?.curve)\r\n return;\r\n\r\n const curve = (undefined !== pickDetail.childDetail?.curve ? pickDetail.childDetail?.curve : pickDetail.curve);\r\n\r\n if (curve instanceof Arc3d) {\r\n const matrix = curve.matrixClone();\r\n matrix.normalizeColumnsInPlace();\r\n hints.setOrigin(curve.center);\r\n hints.setMatrix(matrix);\r\n hints.setModePolar();\r\n } else if (curve instanceof LineSegment3d) {\r\n hints.setOrigin(pickDetail.fraction > 0.5 ? curve.point0Ref : curve.point1Ref);\r\n hints.setXAxis(Vector3d.createStartEnd(pickDetail.fraction > 0.5 ? curve.point0Ref : curve.point1Ref, pickDetail.fraction > 0.5 ? curve.point1Ref : curve.point0Ref));\r\n hints.setModeRectangular();\r\n } else if (curve instanceof LineString3d) {\r\n if (curve.numPoints() > 1) {\r\n hints.setOrigin(curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 2 : 1));\r\n hints.setXAxis(Vector3d.createStartEnd(curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 2 : 1), curve.packedPoints.getPoint3dAtUncheckedPointIndex(pickDetail.fraction > 0.5 ? curve.numPoints() - 1 : 0)));\r\n }\r\n hints.setModeRectangular();\r\n } else {\r\n const ray = curve.fractionToPointAndUnitTangent(pickDetail.fraction > 0.5 ? 0.0 : 1.0);\r\n hints.setOrigin(ray.origin);\r\n hints.setXAxis(ray.direction);\r\n hints.setModeRectangular();\r\n }\r\n }\r\n hints.sendHints(false);\r\n }\r\n\r\n protected override provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void {\r\n let mainMsg;\r\n if (this.agenda.isEmpty)\r\n mainMsg = EditTools.translate(\"ExtendCurve.Prompts.IdentifyEnd\");\r\n super.provideToolAssistance(mainMsg);\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new ExtendCurveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ModifyElementTool.d.ts","sourceRoot":"","sources":["../../src/ModifyElementTool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,SAAS,EAAa,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjL,OAAO,EAAkC,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,kEAAkE;AAClE,8BAAsB,iBAAkB,SAAQ,cAAc;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,uBAAkC;IAEhE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ;IACjB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO;IAEtG,SAAS,CAAC,uBAAuB,IAAI,IAAI;cAEzB,2BAA2B,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;cAE9D,yBAAyB,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;cAiBlD,0BAA0B,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3G,SAAS,CAAC,aAAa,IAAI,IAAI;cAEZ,2BAA2B,IAAI,IAAI;IAKtD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,wBAAwB,GAAG,SAAS;IACpI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,qBAAqB,GAAG,SAAS;cAExE,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;cAEhE,oBAAoB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBnD,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAItE;AAED,iHAAiH;AACjH,8BAAsB,6BAA8B,SAAQ,iBAAkB,YAAW,uBAAuB;IAC9G,SAAS,CAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IACtD,SAAS,CAAC,YAAY,UAAQ;IAC9B,SAAS,CAAC,wBAAwB,CAAC,EAAE,iBAAiB,CAAC;IACvD,SAAS,CAAC,wBAAwB,CAAC,EAAE,iBAAiB,CAAC;IAEvD,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAC/D,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAE/D,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,iBAAiB;IAclE,SAAS,KAAK,4BAA4B,IAAI,OAAO,CAAkB;IAEhE,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;IAQtF,SAAS,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI;IAe3D,SAAS,CAAC,aAAa,IAAI,IAAI;cAOf,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhD,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAK5D,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAKjD"}
1
+ {"version":3,"file":"ModifyElementTool.d.ts","sourceRoot":"","sources":["../../src/ModifyElementTool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,SAAS,EAAa,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjL,OAAO,EAAkC,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,kEAAkE;AAClE,8BAAsB,iBAAkB,SAAQ,cAAc;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,uBAAkC;IAEhE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ;IACjB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO;IAEtG,SAAS,CAAC,uBAAuB,IAAI,IAAI;cAEzB,2BAA2B,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;cAE9D,yBAAyB,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;cAiBlD,0BAA0B,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3G,SAAS,CAAC,aAAa,IAAI,IAAI;cAEZ,2BAA2B,IAAI,IAAI;IAKtD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,wBAAwB,GAAG,SAAS;IACpI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,qBAAqB,GAAG,SAAS;cAExE,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;cAEhE,oBAAoB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBnD,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAItE;AAED,iHAAiH;AACjH,8BAAsB,6BAA8B,SAAQ,iBAAkB,YAAW,uBAAuB;IAC9G,SAAS,CAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IACtD,SAAS,CAAC,YAAY,UAAQ;IAC9B,SAAS,CAAC,wBAAwB,CAAC,EAAE,iBAAiB,CAAC;IACvD,SAAS,CAAC,wBAAwB,CAAC,EAAE,iBAAiB,CAAC;IAEvD,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAC/D,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAE/D,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,iBAAiB;IAclE,SAAS,KAAK,4BAA4B,IAAI,OAAO,CAAkB;IAEhE,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;IAQtF,SAAS,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI;IAe3D,SAAS,CAAC,aAAa,IAAI,IAAI;cAOf,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BhD,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAK5D,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAKjD"}
@@ -104,11 +104,15 @@ export class ModifyElementWithDynamicsTool extends ModifyElementTool {
104
104
  if (!IModelApp.viewManager.inDynamicsMode)
105
105
  return; // Don't need to create graphic if dynamics aren't yet active...
106
106
  const geometry = this.getGeometryProps(ev, false);
107
- if (undefined === geometry)
107
+ if (undefined === geometry) {
108
+ this.clearGraphics();
108
109
  return;
110
+ }
109
111
  const elemProps = this.getElementProps(ev);
110
- if (undefined === (elemProps === null || elemProps === void 0 ? void 0 : elemProps.placement))
112
+ if (undefined === (elemProps === null || elemProps === void 0 ? void 0 : elemProps.placement)) {
113
+ this.clearGraphics();
111
114
  return;
115
+ }
112
116
  if (undefined === this._graphicsProvider) {
113
117
  if (this._firstResult) {
114
118
  this.updateAgendaAppearanceProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"ModifyElementTool.js","sourceRoot":"","sources":["../../src/ModifyElementTool.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\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { FeatureAppearance, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream } from \"@itwin/core-common\";\r\nimport { BeButtonEvent, DynamicsContext, ElementSetTool, FeatureOverrideProvider, FeatureSymbology, HitDetail, IModelApp, LocateResponse, Viewport } from \"@itwin/core-frontend\";\r\nimport { computeChordToleranceFromPoint, DynamicGraphicsProvider } from \"./CreateElementTool\";\r\n\r\n/** @alpha Edit tool base class for updating existing elements. */\r\nexport abstract class ModifyElementTool extends ElementSetTool {\r\n protected readonly _checkedIds = new Map<Id64String, boolean>();\r\n\r\n protected allowView(_vp: Viewport) { return true; }\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n\r\n protected onGeometryFilterChanged(): void { this._checkedIds.clear(); }\r\n\r\n protected async doAcceptElementForOperation(_id: Id64String): Promise<boolean> { return false; }\r\n\r\n protected async acceptElementForOperation(id: Id64String): Promise<boolean> {\r\n if (Id64.isInvalid(id) || Id64.isTransient(id))\r\n return false;\r\n\r\n let accept = this._checkedIds.get(id);\r\n\r\n if (undefined === accept) {\r\n if (this.agenda.isEmpty && this._checkedIds.size > 1000)\r\n this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...\r\n\r\n accept = await this.doAcceptElementForOperation(id);\r\n this._checkedIds.set(id, accept);\r\n }\r\n\r\n return accept;\r\n }\r\n\r\n protected override async isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean> {\r\n if (!await super.isElementValidForOperation(hit, out))\r\n return false;\r\n\r\n return this.acceptElementForOperation(hit.sourceId);\r\n }\r\n\r\n protected setupAccuDraw(): void { }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n this.setupAccuDraw();\r\n super.setupAndPromptForNextAction();\r\n }\r\n\r\n protected abstract getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined;\r\n protected abstract getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined;\r\n\r\n protected async doUpdateElement(_props: GeometricElementProps): Promise<boolean> { return false; }\r\n\r\n protected async applyAgendaOperation(ev: BeButtonEvent): Promise<boolean> {\r\n const geometry = this.getGeometryProps(ev, true);\r\n if (undefined === geometry)\r\n return false;\r\n\r\n const elemProps = this.getElementProps(ev);\r\n if (undefined === elemProps)\r\n return false;\r\n\r\n if (\"flatbuffer\" === geometry.format)\r\n elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };\r\n else\r\n elemProps.geom = geometry.data;\r\n\r\n return this.doUpdateElement(elemProps);\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n if (await this.applyAgendaOperation(ev))\r\n return this.saveChanges();\r\n }\r\n}\r\n\r\n/** @alpha Edit tool base class for updating existing elements that use dynamics to show intermediate results. */\r\nexport abstract class ModifyElementWithDynamicsTool extends ModifyElementTool implements FeatureOverrideProvider {\r\n protected _graphicsProvider?: DynamicGraphicsProvider;\r\n protected _firstResult = true;\r\n protected _agendaAppearanceDefault?: FeatureAppearance;\r\n protected _agendaAppearanceDynamic?: FeatureAppearance;\r\n\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n\r\n protected agendaAppearance(isDynamics: boolean): FeatureAppearance {\r\n if (isDynamics) {\r\n if (undefined === this._agendaAppearanceDynamic)\r\n this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);\r\n\r\n return this._agendaAppearanceDynamic;\r\n }\r\n\r\n if (undefined === this._agendaAppearanceDefault)\r\n this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);\r\n\r\n return this._agendaAppearanceDefault;\r\n }\r\n\r\n protected get wantAgendaAppearanceOverride(): boolean { return false; }\r\n\r\n public addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void {\r\n if (this.agenda.isEmpty)\r\n return;\r\n\r\n const appearance = this.agendaAppearance(false);\r\n this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));\r\n }\r\n\r\n protected updateAgendaAppearanceProvider(drop?: true): void {\r\n if (!this.wantAgendaAppearanceOverride)\r\n return;\r\n\r\n for (const vp of IModelApp.viewManager) {\r\n if (!this.allowView(vp))\r\n continue;\r\n\r\n if (drop || this.agenda.isEmpty)\r\n vp.dropFeatureOverrideProvider(this);\r\n else if (!vp.addFeatureOverrideProvider(this))\r\n vp.setFeatureOverrideProviderChanged();\r\n }\r\n }\r\n\r\n protected clearGraphics(): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n this._graphicsProvider.cleanupGraphic();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected async createGraphics(ev: BeButtonEvent): Promise<void> {\r\n if (!IModelApp.viewManager.inDynamicsMode)\r\n return; // Don't need to create graphic if dynamics aren't yet active...\r\n\r\n const geometry = this.getGeometryProps(ev, false);\r\n if (undefined === geometry)\r\n return;\r\n\r\n const elemProps = this.getElementProps(ev);\r\n if (undefined === elemProps?.placement)\r\n return;\r\n\r\n if (undefined === this._graphicsProvider) {\r\n if (this._firstResult) {\r\n this.updateAgendaAppearanceProvider();\r\n this._firstResult = false;\r\n }\r\n this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);\r\n }\r\n\r\n // Set chord tolerance for non-linear/non-planar geometry...\r\n if (ev.viewport)\r\n this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);\r\n\r\n await this._graphicsProvider.createGraphic(elemProps.category, elemProps.placement, geometry);\r\n }\r\n\r\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphic(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n return this.createGraphics(ev);\r\n }\r\n\r\n public override async onUnsuspend(): Promise<void> {\r\n if (!this._firstResult)\r\n this.updateAgendaAppearanceProvider();\r\n return super.onUnsuspend();\r\n }\r\n\r\n public override async onSuspend(): Promise<void> {\r\n if (!this._firstResult)\r\n this.updateAgendaAppearanceProvider(true);\r\n return super.onSuspend();\r\n }\r\n\r\n public override async onPostInstall(): Promise<void> {\r\n await super.onPostInstall();\r\n if (this.wantAgendaAppearanceOverride)\r\n this.agenda.manageHiliteState = false;\r\n }\r\n\r\n public override async onCleanup(): Promise<void> {\r\n this.clearGraphics();\r\n this.updateAgendaAppearanceProvider(true);\r\n return super.onCleanup();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ModifyElementTool.js","sourceRoot":"","sources":["../../src/ModifyElementTool.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\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { FeatureAppearance, FlatBufferGeometryStream, GeometricElementProps, JsonGeometryStream } from \"@itwin/core-common\";\r\nimport { BeButtonEvent, DynamicsContext, ElementSetTool, FeatureOverrideProvider, FeatureSymbology, HitDetail, IModelApp, LocateResponse, Viewport } from \"@itwin/core-frontend\";\r\nimport { computeChordToleranceFromPoint, DynamicGraphicsProvider } from \"./CreateElementTool\";\r\n\r\n/** @alpha Edit tool base class for updating existing elements. */\r\nexport abstract class ModifyElementTool extends ElementSetTool {\r\n protected readonly _checkedIds = new Map<Id64String, boolean>();\r\n\r\n protected allowView(_vp: Viewport) { return true; }\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n\r\n protected onGeometryFilterChanged(): void { this._checkedIds.clear(); }\r\n\r\n protected async doAcceptElementForOperation(_id: Id64String): Promise<boolean> { return false; }\r\n\r\n protected async acceptElementForOperation(id: Id64String): Promise<boolean> {\r\n if (Id64.isInvalid(id) || Id64.isTransient(id))\r\n return false;\r\n\r\n let accept = this._checkedIds.get(id);\r\n\r\n if (undefined === accept) {\r\n if (this.agenda.isEmpty && this._checkedIds.size > 1000)\r\n this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...\r\n\r\n accept = await this.doAcceptElementForOperation(id);\r\n this._checkedIds.set(id, accept);\r\n }\r\n\r\n return accept;\r\n }\r\n\r\n protected override async isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean> {\r\n if (!await super.isElementValidForOperation(hit, out))\r\n return false;\r\n\r\n return this.acceptElementForOperation(hit.sourceId);\r\n }\r\n\r\n protected setupAccuDraw(): void { }\r\n\r\n protected override setupAndPromptForNextAction(): void {\r\n this.setupAccuDraw();\r\n super.setupAndPromptForNextAction();\r\n }\r\n\r\n protected abstract getGeometryProps(ev: BeButtonEvent, isAccept: boolean): JsonGeometryStream | FlatBufferGeometryStream | undefined;\r\n protected abstract getElementProps(ev: BeButtonEvent): GeometricElementProps | undefined;\r\n\r\n protected async doUpdateElement(_props: GeometricElementProps): Promise<boolean> { return false; }\r\n\r\n protected async applyAgendaOperation(ev: BeButtonEvent): Promise<boolean> {\r\n const geometry = this.getGeometryProps(ev, true);\r\n if (undefined === geometry)\r\n return false;\r\n\r\n const elemProps = this.getElementProps(ev);\r\n if (undefined === elemProps)\r\n return false;\r\n\r\n if (\"flatbuffer\" === geometry.format)\r\n elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };\r\n else\r\n elemProps.geom = geometry.data;\r\n\r\n return this.doUpdateElement(elemProps);\r\n }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n if (await this.applyAgendaOperation(ev))\r\n return this.saveChanges();\r\n }\r\n}\r\n\r\n/** @alpha Edit tool base class for updating existing elements that use dynamics to show intermediate results. */\r\nexport abstract class ModifyElementWithDynamicsTool extends ModifyElementTool implements FeatureOverrideProvider {\r\n protected _graphicsProvider?: DynamicGraphicsProvider;\r\n protected _firstResult = true;\r\n protected _agendaAppearanceDefault?: FeatureAppearance;\r\n protected _agendaAppearanceDynamic?: FeatureAppearance;\r\n\r\n protected override get wantAccuSnap(): boolean { return true; }\r\n protected override get wantDynamics(): boolean { return true; }\r\n\r\n protected agendaAppearance(isDynamics: boolean): FeatureAppearance {\r\n if (isDynamics) {\r\n if (undefined === this._agendaAppearanceDynamic)\r\n this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);\r\n\r\n return this._agendaAppearanceDynamic;\r\n }\r\n\r\n if (undefined === this._agendaAppearanceDefault)\r\n this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);\r\n\r\n return this._agendaAppearanceDefault;\r\n }\r\n\r\n protected get wantAgendaAppearanceOverride(): boolean { return false; }\r\n\r\n public addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void {\r\n if (this.agenda.isEmpty)\r\n return;\r\n\r\n const appearance = this.agendaAppearance(false);\r\n this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));\r\n }\r\n\r\n protected updateAgendaAppearanceProvider(drop?: true): void {\r\n if (!this.wantAgendaAppearanceOverride)\r\n return;\r\n\r\n for (const vp of IModelApp.viewManager) {\r\n if (!this.allowView(vp))\r\n continue;\r\n\r\n if (drop || this.agenda.isEmpty)\r\n vp.dropFeatureOverrideProvider(this);\r\n else if (!vp.addFeatureOverrideProvider(this))\r\n vp.setFeatureOverrideProviderChanged();\r\n }\r\n }\r\n\r\n protected clearGraphics(): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n this._graphicsProvider.cleanupGraphic();\r\n this._graphicsProvider = undefined;\r\n }\r\n\r\n protected async createGraphics(ev: BeButtonEvent): Promise<void> {\r\n if (!IModelApp.viewManager.inDynamicsMode)\r\n return; // Don't need to create graphic if dynamics aren't yet active...\r\n\r\n const geometry = this.getGeometryProps(ev, false);\r\n if (undefined === geometry) {\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n const elemProps = this.getElementProps(ev);\r\n if (undefined === elemProps?.placement) {\r\n this.clearGraphics();\r\n return;\r\n }\r\n\r\n if (undefined === this._graphicsProvider) {\r\n if (this._firstResult) {\r\n this.updateAgendaAppearanceProvider();\r\n this._firstResult = false;\r\n }\r\n this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);\r\n }\r\n\r\n // Set chord tolerance for non-linear/non-planar geometry...\r\n if (ev.viewport)\r\n this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);\r\n\r\n await this._graphicsProvider.createGraphic(elemProps.category, elemProps.placement, geometry);\r\n }\r\n\r\n public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.addGraphic(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n return this.createGraphics(ev);\r\n }\r\n\r\n public override async onUnsuspend(): Promise<void> {\r\n if (!this._firstResult)\r\n this.updateAgendaAppearanceProvider();\r\n return super.onUnsuspend();\r\n }\r\n\r\n public override async onSuspend(): Promise<void> {\r\n if (!this._firstResult)\r\n this.updateAgendaAppearanceProvider(true);\r\n return super.onSuspend();\r\n }\r\n\r\n public override async onPostInstall(): Promise<void> {\r\n await super.onPostInstall();\r\n if (this.wantAgendaAppearanceOverride)\r\n this.agenda.manageHiliteState = false;\r\n }\r\n\r\n public override async onCleanup(): Promise<void> {\r\n this.clearGraphics();\r\n this.updateAgendaAppearanceProvider(true);\r\n return super.onCleanup();\r\n }\r\n}\r\n"]}