@itwin/editor-frontend 3.6.0-dev.1 → 3.6.0-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/EditTool.d.ts.map +1 -1
- package/lib/cjs/EditTool.js +1 -0
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/ModifyCurveTools.d.ts +46 -1
- package/lib/cjs/ModifyCurveTools.d.ts.map +1 -1
- package/lib/cjs/ModifyCurveTools.js +193 -16
- package/lib/cjs/ModifyCurveTools.js.map +1 -1
- package/lib/cjs/ModifyElementTool.d.ts +7 -2
- package/lib/cjs/ModifyElementTool.d.ts.map +1 -1
- package/lib/cjs/ModifyElementTool.js +17 -0
- package/lib/cjs/ModifyElementTool.js.map +1 -1
- package/lib/esm/EditTool.d.ts.map +1 -1
- package/lib/esm/EditTool.js +2 -1
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/ModifyCurveTools.d.ts +46 -1
- package/lib/esm/ModifyCurveTools.d.ts.map +1 -1
- package/lib/esm/ModifyCurveTools.js +192 -16
- package/lib/esm/ModifyCurveTools.js.map +1 -1
- package/lib/esm/ModifyElementTool.d.ts +7 -2
- package/lib/esm/ModifyElementTool.d.ts.map +1 -1
- package/lib/esm/ModifyElementTool.js +17 -0
- package/lib/esm/ModifyElementTool.js.map +1 -1
- package/lib/public/locales/en/Editor.json +16 -0
- package/package.json +15 -15
|
@@ -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;
|
|
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;IA2GtE,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
|
package/lib/cjs/EditTool.js
CHANGED
|
@@ -101,6 +101,7 @@ class EditTools {
|
|
|
101
101
|
SolidPrimitiveTools_1.CreateTorusTool,
|
|
102
102
|
SolidPrimitiveTools_1.ExtrudeCurveTool,
|
|
103
103
|
SolidPrimitiveTools_1.RevolveCurveTool,
|
|
104
|
+
ModifyCurveTools_1.RegionBooleanTool,
|
|
104
105
|
SolidModelingTools_1.UniteSolidElementsTool,
|
|
105
106
|
SolidModelingTools_1.SubtractSolidElementsTool,
|
|
106
107
|
SolidModelingTools_1.IntersectSolidElementsTool,
|
package/lib/cjs/EditTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAyD;AACzD,wDAAqD;AACrD,6DAA0D;AAC1D,
|
|
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, RegionBooleanTool } 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 RegionBooleanTool,\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, GeometryQuery, Path, Point3d } from "@itwin/core-geometry";
|
|
5
|
+
import { CurveCollection, CurveLocationDetail, CurvePrimitive, GeometryQuery, Path, Plane3dByOriginAndUnitNormal, Point3d } from "@itwin/core-geometry";
|
|
6
6
|
import { ModifyElementWithDynamicsTool } from "./ModifyElementTool";
|
|
7
7
|
/** @alpha */
|
|
8
8
|
export declare class CurveData {
|
|
@@ -20,6 +20,7 @@ export declare abstract class ModifyCurveTool extends ModifyElementWithDynamicsT
|
|
|
20
20
|
curve: CurveCollection | CurvePrimitive;
|
|
21
21
|
params: GeometryParams;
|
|
22
22
|
} | undefined;
|
|
23
|
+
static isInPlane(curve: CurveCollection | CurvePrimitive, plane: Plane3dByOriginAndUnitNormal): boolean;
|
|
23
24
|
protected acceptCurve(_curve: CurveCollection | CurvePrimitive): boolean;
|
|
24
25
|
protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined;
|
|
25
26
|
protected getCurveData(id: Id64String): Promise<CurveData | undefined>;
|
|
@@ -92,4 +93,48 @@ export declare class ExtendCurveTool extends ModifyCurveTool {
|
|
|
92
93
|
protected provideToolAssistance(_mainInstrText?: string, _additionalInstr?: ToolAssistanceInstruction[]): void;
|
|
93
94
|
onRestartTool(): Promise<void>;
|
|
94
95
|
}
|
|
96
|
+
/** @alpha */
|
|
97
|
+
export declare enum RegionBooleanMode {
|
|
98
|
+
/** Create region from union of all input regions */
|
|
99
|
+
Unite = 0,
|
|
100
|
+
/** Create region from subtraction from the first input region */
|
|
101
|
+
Subtract = 1,
|
|
102
|
+
/** Create region from intersection of all input regions */
|
|
103
|
+
Intersect = 2
|
|
104
|
+
}
|
|
105
|
+
/** @alpha Tool to unite, subtract, or intersect planar regions. */
|
|
106
|
+
export declare class RegionBooleanTool extends ModifyCurveTool {
|
|
107
|
+
static toolId: string;
|
|
108
|
+
static iconSpec: string;
|
|
109
|
+
private _makeCopyProperty;
|
|
110
|
+
get makeCopyProperty(): DialogProperty<boolean>;
|
|
111
|
+
get makeCopy(): boolean;
|
|
112
|
+
set makeCopy(value: boolean);
|
|
113
|
+
private static modeMessage;
|
|
114
|
+
private static getModeChoices;
|
|
115
|
+
private _modeProperty;
|
|
116
|
+
get modeProperty(): DialogProperty<number>;
|
|
117
|
+
get mode(): RegionBooleanMode;
|
|
118
|
+
set mode(mode: RegionBooleanMode);
|
|
119
|
+
protected get clearSelectionSet(): boolean;
|
|
120
|
+
protected get allowSelectionSet(): boolean;
|
|
121
|
+
protected get allowDragSelect(): boolean;
|
|
122
|
+
protected get controlKeyContinuesSelection(): boolean;
|
|
123
|
+
protected get requiredElementCount(): number;
|
|
124
|
+
protected get wantAccuSnap(): boolean;
|
|
125
|
+
protected get wantDynamics(): boolean;
|
|
126
|
+
protected get wantModifyOriginal(): boolean;
|
|
127
|
+
protected onAgendaModified(): Promise<void>;
|
|
128
|
+
protected acceptCurve(curve: CurveCollection | CurvePrimitive): boolean;
|
|
129
|
+
private regionBinaryOp;
|
|
130
|
+
private regionFromSignedLoops;
|
|
131
|
+
private regionBooleanXY;
|
|
132
|
+
protected doRegionBoolean(_ev: BeButtonEvent): Promise<void>;
|
|
133
|
+
protected modifyCurve(_ev: BeButtonEvent, _isAccept: boolean): GeometryQuery | undefined;
|
|
134
|
+
protected applyAgendaOperation(ev: BeButtonEvent): Promise<boolean>;
|
|
135
|
+
processAgenda(ev: BeButtonEvent): Promise<void>;
|
|
136
|
+
onRestartTool(): Promise<void>;
|
|
137
|
+
applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
|
|
138
|
+
supplyToolSettingsProperties(): DialogItem[] | undefined;
|
|
139
|
+
}
|
|
95
140
|
//# sourceMappingURL=ModifyCurveTools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModifyCurveTools.d.ts","sourceRoot":"","sources":["../../src/ModifyCurveTools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ModifyCurveTools.d.ts","sourceRoot":"","sources":["../../src/ModifyCurveTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ExtendCurveTool = exports.BreakCurveTool = exports.OffsetCurveTool = exports.ModifyCurveTool = exports.CurveData = void 0;
|
|
7
|
+
exports.RegionBooleanTool = exports.RegionBooleanMode = exports.ExtendCurveTool = exports.BreakCurveTool = exports.OffsetCurveTool = exports.ModifyCurveTool = exports.CurveData = void 0;
|
|
8
8
|
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
9
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
10
|
const core_common_1 = require("@itwin/core-common");
|
|
10
11
|
const core_frontend_1 = require("@itwin/core-frontend");
|
|
11
12
|
const core_geometry_1 = require("@itwin/core-geometry");
|
|
@@ -46,6 +47,23 @@ class ModifyCurveTool extends ModifyElementTool_1.ModifyElementWithDynamicsTool
|
|
|
46
47
|
}
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
50
|
+
static isInPlane(curve, plane) {
|
|
51
|
+
if ("curvePrimitive" === curve.geometryCategory)
|
|
52
|
+
return curve.isInPlane(plane);
|
|
53
|
+
if (!curve.children)
|
|
54
|
+
return false;
|
|
55
|
+
for (const child of curve.children) {
|
|
56
|
+
if (child instanceof core_geometry_1.CurvePrimitive) {
|
|
57
|
+
if (!child.isInPlane(plane))
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
else if (child instanceof core_geometry_1.CurveCollection) {
|
|
61
|
+
if (!this.isInPlane(child, plane))
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
49
67
|
acceptCurve(_curve) { return true; }
|
|
50
68
|
modifyCurve(_ev, _isAccept) { return undefined; }
|
|
51
69
|
async getCurveData(id) {
|
|
@@ -183,13 +201,7 @@ class OffsetCurveTool extends ModifyCurveTool {
|
|
|
183
201
|
acceptCurve(curve) {
|
|
184
202
|
if ("curvePrimitive" === curve.geometryCategory)
|
|
185
203
|
return true;
|
|
186
|
-
|
|
187
|
-
case "path":
|
|
188
|
-
case "loop":
|
|
189
|
-
return true;
|
|
190
|
-
default:
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
204
|
+
return (curve.isOpenPath || curve.isClosedPath);
|
|
193
205
|
}
|
|
194
206
|
modifyCurve(ev, isAccept) {
|
|
195
207
|
var _a;
|
|
@@ -312,13 +324,7 @@ class BreakCurveTool extends ModifyCurveTool {
|
|
|
312
324
|
acceptCurve(curve) {
|
|
313
325
|
if ("curvePrimitive" === curve.geometryCategory)
|
|
314
326
|
return true;
|
|
315
|
-
|
|
316
|
-
case "path":
|
|
317
|
-
case "loop":
|
|
318
|
-
return true;
|
|
319
|
-
default:
|
|
320
|
-
return false;
|
|
321
|
-
}
|
|
327
|
+
return (curve.isOpenPath || curve.isClosedPath);
|
|
322
328
|
}
|
|
323
329
|
doBreakCurve(ev) {
|
|
324
330
|
var _a;
|
|
@@ -441,7 +447,7 @@ class ExtendCurveTool extends ModifyCurveTool {
|
|
|
441
447
|
acceptCurve(curve) {
|
|
442
448
|
if ("curvePrimitive" === curve.geometryCategory)
|
|
443
449
|
return curve.isExtensibleFractionSpace;
|
|
444
|
-
return
|
|
450
|
+
return curve.isOpenPath;
|
|
445
451
|
}
|
|
446
452
|
extendCurve(geom, pickPoint, spacePoint) {
|
|
447
453
|
const pickDetail = geom.closestPoint(pickPoint, false);
|
|
@@ -605,4 +611,175 @@ class ExtendCurveTool extends ModifyCurveTool {
|
|
|
605
611
|
exports.ExtendCurveTool = ExtendCurveTool;
|
|
606
612
|
ExtendCurveTool.toolId = "ExtendCurve";
|
|
607
613
|
ExtendCurveTool.iconSpec = "icon-scale"; // Need better icon...
|
|
614
|
+
/** @alpha */
|
|
615
|
+
var RegionBooleanMode;
|
|
616
|
+
(function (RegionBooleanMode) {
|
|
617
|
+
/** Create region from union of all input regions */
|
|
618
|
+
RegionBooleanMode[RegionBooleanMode["Unite"] = 0] = "Unite";
|
|
619
|
+
/** Create region from subtraction from the first input region */
|
|
620
|
+
RegionBooleanMode[RegionBooleanMode["Subtract"] = 1] = "Subtract";
|
|
621
|
+
/** Create region from intersection of all input regions */
|
|
622
|
+
RegionBooleanMode[RegionBooleanMode["Intersect"] = 2] = "Intersect";
|
|
623
|
+
})(RegionBooleanMode = exports.RegionBooleanMode || (exports.RegionBooleanMode = {}));
|
|
624
|
+
/** @alpha Tool to unite, subtract, or intersect planar regions. */
|
|
625
|
+
class RegionBooleanTool extends ModifyCurveTool {
|
|
626
|
+
get makeCopyProperty() {
|
|
627
|
+
if (!this._makeCopyProperty)
|
|
628
|
+
this._makeCopyProperty = new appui_abstract_1.DialogProperty(appui_abstract_1.PropertyDescriptionHelper.buildToggleDescription("regionBooleanKeep", EditTool_1.EditTools.translate("RegionBoolean.Label.KeepOriginal")), false);
|
|
629
|
+
return this._makeCopyProperty;
|
|
630
|
+
}
|
|
631
|
+
get makeCopy() { return this.makeCopyProperty.value; }
|
|
632
|
+
set makeCopy(value) { this.makeCopyProperty.value = value; }
|
|
633
|
+
static modeMessage(str) { return EditTool_1.EditTools.translate(`RegionBoolean.Mode.${str}`); }
|
|
634
|
+
get modeProperty() {
|
|
635
|
+
if (!this._modeProperty)
|
|
636
|
+
this._modeProperty = new appui_abstract_1.DialogProperty(appui_abstract_1.PropertyDescriptionHelper.buildEnumPicklistEditorDescription("regionBooleanMode", EditTool_1.EditTools.translate("RegionBoolean.Label.Mode"), RegionBooleanTool.getModeChoices()), RegionBooleanMode.Unite);
|
|
637
|
+
return this._modeProperty;
|
|
638
|
+
}
|
|
639
|
+
get mode() { return this.modeProperty.value; }
|
|
640
|
+
set mode(mode) { this.modeProperty.value = mode; }
|
|
641
|
+
get clearSelectionSet() { return false; } // Don't clear for subtract so that mode can be changed...
|
|
642
|
+
get allowSelectionSet() { return RegionBooleanMode.Subtract !== this.mode; }
|
|
643
|
+
get allowDragSelect() { return RegionBooleanMode.Subtract !== this.mode; }
|
|
644
|
+
get controlKeyContinuesSelection() { return true; }
|
|
645
|
+
get requiredElementCount() { return 2; }
|
|
646
|
+
get wantAccuSnap() { return false; }
|
|
647
|
+
get wantDynamics() { return false; }
|
|
648
|
+
get wantModifyOriginal() { return !this.makeCopy; }
|
|
649
|
+
async onAgendaModified() { } // No intermediate result preview, defer to processAgenda...
|
|
650
|
+
acceptCurve(curve) {
|
|
651
|
+
if ("curvePrimitive" === curve.geometryCategory)
|
|
652
|
+
return false;
|
|
653
|
+
return curve.isAnyRegionType;
|
|
654
|
+
}
|
|
655
|
+
regionBinaryOp() {
|
|
656
|
+
switch (this.mode) {
|
|
657
|
+
case RegionBooleanMode.Subtract:
|
|
658
|
+
return core_geometry_1.RegionBinaryOpType.AMinusB;
|
|
659
|
+
case RegionBooleanMode.Intersect:
|
|
660
|
+
return core_geometry_1.RegionBinaryOpType.Intersection;
|
|
661
|
+
default:
|
|
662
|
+
return core_geometry_1.RegionBinaryOpType.Union;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
regionFromSignedLoops(loops) {
|
|
666
|
+
switch (loops.negativeAreaLoops.length) {
|
|
667
|
+
case 0:
|
|
668
|
+
return undefined;
|
|
669
|
+
case 1:
|
|
670
|
+
return loops.negativeAreaLoops[0];
|
|
671
|
+
default:
|
|
672
|
+
return core_geometry_1.RegionOps.sortOuterAndHoleLoopsXY(loops.negativeAreaLoops);
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
regionBooleanXY(tools, op) {
|
|
676
|
+
if (tools.length < 2)
|
|
677
|
+
return undefined;
|
|
678
|
+
const loopsA = (core_geometry_1.RegionBinaryOpType.Union !== op ? tools[0] : tools);
|
|
679
|
+
const loopsB = (core_geometry_1.RegionBinaryOpType.Union !== op ? tools.slice(1) : undefined);
|
|
680
|
+
// TODO: Need to be able to specify group operation for loopsB to correctly support intersect w/o doing 2 at time...
|
|
681
|
+
const areas = core_geometry_1.RegionOps.regionBooleanXY(loopsA, loopsB, op);
|
|
682
|
+
if (undefined === areas)
|
|
683
|
+
return undefined;
|
|
684
|
+
// TODO: Holes are expected to be returned as negative area loops but currently are not...
|
|
685
|
+
const loops = core_geometry_1.RegionOps.constructAllXYRegionLoops(areas);
|
|
686
|
+
if (1 === loops.length)
|
|
687
|
+
return this.regionFromSignedLoops(loops[0]);
|
|
688
|
+
if (loops.length > 1) {
|
|
689
|
+
const unionRegion = core_geometry_1.UnionRegion.create();
|
|
690
|
+
for (const loop of loops) {
|
|
691
|
+
const child = this.regionFromSignedLoops(loop);
|
|
692
|
+
if (undefined === child)
|
|
693
|
+
continue;
|
|
694
|
+
unionRegion.tryAddChild(child);
|
|
695
|
+
}
|
|
696
|
+
if (unionRegion.children.length > 1)
|
|
697
|
+
return unionRegion;
|
|
698
|
+
}
|
|
699
|
+
return undefined;
|
|
700
|
+
}
|
|
701
|
+
async doRegionBoolean(_ev) {
|
|
702
|
+
this.curveData = undefined;
|
|
703
|
+
if (this.agenda.length < this.requiredElementCount)
|
|
704
|
+
return;
|
|
705
|
+
const targetData = await this.getCurveData(this.agenda.elements[0]);
|
|
706
|
+
if (undefined === (targetData === null || targetData === void 0 ? void 0 : targetData.geom))
|
|
707
|
+
return;
|
|
708
|
+
const targetLocalToWorld = core_geometry_1.FrameBuilder.createRightHandedFrame(undefined, targetData.geom);
|
|
709
|
+
if (undefined === targetLocalToWorld)
|
|
710
|
+
return;
|
|
711
|
+
const targetWorldToLocal = targetLocalToWorld.inverse();
|
|
712
|
+
if (undefined === targetWorldToLocal)
|
|
713
|
+
return;
|
|
714
|
+
const targetPlane = core_geometry_1.Plane3dByOriginAndUnitNormal.create(targetLocalToWorld.getOrigin(), targetLocalToWorld.matrix.getColumn(2));
|
|
715
|
+
if (undefined === targetPlane)
|
|
716
|
+
return;
|
|
717
|
+
if (!targetData.geom.tryTransformInPlace(targetWorldToLocal))
|
|
718
|
+
return;
|
|
719
|
+
const tools = [targetData.geom];
|
|
720
|
+
for (const id of this.agenda.elements) {
|
|
721
|
+
if (id === targetData.props.id)
|
|
722
|
+
continue;
|
|
723
|
+
const curveData = await this.getCurveData(id);
|
|
724
|
+
if (undefined === (curveData === null || curveData === void 0 ? void 0 : curveData.geom))
|
|
725
|
+
return;
|
|
726
|
+
if (!ModifyCurveTool.isInPlane(curveData.geom, targetPlane)) {
|
|
727
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Info, EditTool_1.EditTools.translate("RegionBoolean.Error.NonCoplanar")));
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
if (!curveData.geom.tryTransformInPlace(targetWorldToLocal))
|
|
731
|
+
return;
|
|
732
|
+
tools.push(curveData.geom);
|
|
733
|
+
}
|
|
734
|
+
const result = this.regionBooleanXY(tools, this.regionBinaryOp());
|
|
735
|
+
if (undefined === result || !result.tryTransformInPlace(targetLocalToWorld))
|
|
736
|
+
return;
|
|
737
|
+
this.curveData = targetData;
|
|
738
|
+
this.curveData.geom = result;
|
|
739
|
+
}
|
|
740
|
+
modifyCurve(_ev, _isAccept) {
|
|
741
|
+
var _a;
|
|
742
|
+
return (_a = this.curveData) === null || _a === void 0 ? void 0 : _a.geom;
|
|
743
|
+
}
|
|
744
|
+
async applyAgendaOperation(ev) {
|
|
745
|
+
if (!await super.applyAgendaOperation(ev))
|
|
746
|
+
return false;
|
|
747
|
+
if (this.wantModifyOriginal && this.agenda.length > 1)
|
|
748
|
+
await EditToolIpc_1.basicManipulationIpc.deleteElements(core_bentley_1.CompressedId64Set.sortAndCompress(this.agenda.elements.slice(1)));
|
|
749
|
+
return true;
|
|
750
|
+
}
|
|
751
|
+
async processAgenda(ev) {
|
|
752
|
+
await this.doRegionBoolean(ev);
|
|
753
|
+
return super.processAgenda(ev);
|
|
754
|
+
}
|
|
755
|
+
async onRestartTool() {
|
|
756
|
+
const tool = new RegionBooleanTool();
|
|
757
|
+
if (!await tool.run())
|
|
758
|
+
return this.exitTool();
|
|
759
|
+
}
|
|
760
|
+
async applyToolSettingPropertyChange(updatedValue) {
|
|
761
|
+
if (!this.changeToolSettingPropertyValue(updatedValue))
|
|
762
|
+
return false;
|
|
763
|
+
if (this.modeProperty.name === updatedValue.propertyName)
|
|
764
|
+
await this.onReinitialize();
|
|
765
|
+
return true;
|
|
766
|
+
}
|
|
767
|
+
supplyToolSettingsProperties() {
|
|
768
|
+
this.initializeToolSettingPropertyValues([this.makeCopyProperty, this.modeProperty]);
|
|
769
|
+
const toolSettings = new Array();
|
|
770
|
+
toolSettings.push(this.modeProperty.toDialogItem({ rowPriority: 1, columnIndex: 0 }));
|
|
771
|
+
toolSettings.push(this.makeCopyProperty.toDialogItem({ rowPriority: 2, columnIndex: 0 }));
|
|
772
|
+
return toolSettings;
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
exports.RegionBooleanTool = RegionBooleanTool;
|
|
776
|
+
RegionBooleanTool.toolId = "RegionBoolean";
|
|
777
|
+
RegionBooleanTool.iconSpec = "icon-scale"; // Need better icon...
|
|
778
|
+
RegionBooleanTool.getModeChoices = () => {
|
|
779
|
+
return [
|
|
780
|
+
{ label: RegionBooleanTool.modeMessage("Unite"), value: RegionBooleanMode.Unite },
|
|
781
|
+
{ label: RegionBooleanTool.modeMessage("Subtract"), value: RegionBooleanMode.Subtract },
|
|
782
|
+
{ label: RegionBooleanTool.modeMessage("Intersect"), value: RegionBooleanMode.Intersect },
|
|
783
|
+
];
|
|
784
|
+
};
|
|
608
785
|
//# sourceMappingURL=ModifyCurveTools.js.map
|