@itwin/editor-frontend 4.0.0-dev.8 → 4.0.0-dev.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -1
- package/lib/cjs/CreateElementTool.d.ts +100 -100
- package/lib/cjs/CreateElementTool.js +325 -327
- package/lib/cjs/CreateElementTool.js.map +1 -1
- package/lib/cjs/DeleteElementsTool.d.ts +13 -13
- package/lib/cjs/DeleteElementsTool.js +38 -38
- package/lib/cjs/DeleteElementsTool.js.map +1 -1
- package/lib/cjs/EditTool.d.ts +38 -38
- package/lib/cjs/EditTool.js +80 -81
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/EditToolIpc.d.ts +18 -18
- package/lib/cjs/EditToolIpc.js +28 -28
- package/lib/cjs/ElementGeometryTool.d.ts +147 -147
- package/lib/cjs/ElementGeometryTool.js +704 -709
- package/lib/cjs/ElementGeometryTool.js.map +1 -1
- package/lib/cjs/ModifyCurveTools.d.ts +139 -139
- package/lib/cjs/ModifyCurveTools.js +776 -784
- package/lib/cjs/ModifyCurveTools.js.map +1 -1
- package/lib/cjs/ModifyElementTool.d.ts +47 -47
- package/lib/cjs/ModifyElementTool.js +177 -177
- package/lib/cjs/ModifyElementTool.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.d.ts +135 -135
- package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js +822 -822
- package/lib/cjs/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.d.ts +135 -135
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js +532 -532
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/cjs/SketchTools.d.ts +304 -304
- package/lib/cjs/SketchTools.js +1704 -1705
- package/lib/cjs/SketchTools.js.map +1 -1
- package/lib/cjs/SolidModelingTools.d.ts +380 -380
- package/lib/cjs/SolidModelingTools.js +1452 -1462
- package/lib/cjs/SolidModelingTools.js.map +1 -1
- package/lib/cjs/SolidPrimitiveTools.d.ts +318 -318
- package/lib/cjs/SolidPrimitiveTools.js +1372 -1378
- package/lib/cjs/SolidPrimitiveTools.js.map +1 -1
- package/lib/cjs/TransformElementsTool.d.ts +164 -164
- package/lib/cjs/TransformElementsTool.js +652 -652
- package/lib/cjs/TransformElementsTool.js.map +1 -1
- package/lib/cjs/UndoRedoTool.d.ts +16 -16
- package/lib/cjs/UndoRedoTool.js +41 -42
- package/lib/cjs/UndoRedoTool.js.map +1 -1
- package/lib/cjs/editor-frontend.d.ts +17 -17
- package/lib/cjs/editor-frontend.js +37 -33
- package/lib/cjs/editor-frontend.js.map +1 -1
- package/lib/esm/CreateElementTool.d.ts +100 -100
- package/lib/esm/CreateElementTool.js +317 -319
- package/lib/esm/CreateElementTool.js.map +1 -1
- package/lib/esm/DeleteElementsTool.d.ts +13 -13
- package/lib/esm/DeleteElementsTool.js +35 -34
- package/lib/esm/DeleteElementsTool.js.map +1 -1
- package/lib/esm/EditTool.d.ts +38 -38
- package/lib/esm/EditTool.js +77 -77
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/EditToolIpc.d.ts +18 -18
- package/lib/esm/EditToolIpc.js +24 -24
- package/lib/esm/ElementGeometryTool.d.ts +147 -147
- package/lib/esm/ElementGeometryTool.js +696 -701
- package/lib/esm/ElementGeometryTool.js.map +1 -1
- package/lib/esm/ModifyCurveTools.d.ts +139 -139
- package/lib/esm/ModifyCurveTools.js +771 -775
- package/lib/esm/ModifyCurveTools.js.map +1 -1
- package/lib/esm/ModifyElementTool.d.ts +47 -47
- package/lib/esm/ModifyElementTool.js +172 -172
- package/lib/esm/ModifyElementTool.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectExtentsDecoration.d.ts +135 -135
- package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js +818 -814
- package/lib/esm/ProjectLocation/ProjectExtentsDecoration.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.d.ts +135 -135
- package/lib/esm/ProjectLocation/ProjectGeolocation.js +529 -526
- package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/esm/SketchTools.d.ts +304 -304
- package/lib/esm/SketchTools.js +1700 -1695
- package/lib/esm/SketchTools.js.map +1 -1
- package/lib/esm/SolidModelingTools.d.ts +380 -380
- package/lib/esm/SolidModelingTools.js +1444 -1437
- package/lib/esm/SolidModelingTools.js.map +1 -1
- package/lib/esm/SolidPrimitiveTools.d.ts +318 -318
- package/lib/esm/SolidPrimitiveTools.js +1368 -1367
- package/lib/esm/SolidPrimitiveTools.js.map +1 -1
- package/lib/esm/TransformElementsTool.d.ts +164 -164
- package/lib/esm/TransformElementsTool.js +647 -644
- package/lib/esm/TransformElementsTool.js.map +1 -1
- package/lib/esm/UndoRedoTool.d.ts +16 -16
- package/lib/esm/UndoRedoTool.js +38 -36
- package/lib/esm/UndoRedoTool.js.map +1 -1
- package/lib/esm/editor-frontend.d.ts +17 -17
- package/lib/esm/editor-frontend.js +21 -21
- package/package.json +20 -20
|
@@ -1,173 +1,173 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { Id64 } from "@itwin/core-bentley";
|
|
6
|
-
import { FeatureAppearance } from "@itwin/core-common";
|
|
7
|
-
import { ElementSetTool, IModelApp } from "@itwin/core-frontend";
|
|
8
|
-
import { computeChordToleranceFromPoint, DynamicGraphicsProvider } from "./CreateElementTool";
|
|
9
|
-
/** @alpha Edit tool base class for updating existing elements. */
|
|
10
|
-
export class ModifyElementTool extends ElementSetTool {
|
|
11
|
-
constructor() {
|
|
12
|
-
super(...arguments);
|
|
13
|
-
this._checkedIds = new Map();
|
|
14
|
-
}
|
|
15
|
-
allowView(_vp) { return true; }
|
|
16
|
-
isCompatibleViewport(vp, isSelectedViewChange) { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }
|
|
17
|
-
onGeometryFilterChanged() { this._checkedIds.clear(); }
|
|
18
|
-
async doAcceptElementForOperation(_id) { return false; }
|
|
19
|
-
async acceptElementForOperation(id) {
|
|
20
|
-
if (Id64.isInvalid(id) || Id64.isTransient(id))
|
|
21
|
-
return false;
|
|
22
|
-
let accept = this._checkedIds.get(id);
|
|
23
|
-
if (undefined === accept) {
|
|
24
|
-
if (this.agenda.isEmpty && this._checkedIds.size > 1000)
|
|
25
|
-
this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...
|
|
26
|
-
accept = await this.doAcceptElementForOperation(id);
|
|
27
|
-
this._checkedIds.set(id, accept);
|
|
28
|
-
}
|
|
29
|
-
return accept;
|
|
30
|
-
}
|
|
31
|
-
async isElementValidForOperation(hit, out) {
|
|
32
|
-
if (!await super.isElementValidForOperation(hit, out))
|
|
33
|
-
return false;
|
|
34
|
-
return this.acceptElementForOperation(hit.sourceId);
|
|
35
|
-
}
|
|
36
|
-
async postFilterIds(arg) {
|
|
37
|
-
const ids = [];
|
|
38
|
-
for (const id of Id64.iterable(arg)) {
|
|
39
|
-
if (await this.acceptElementForOperation(id))
|
|
40
|
-
ids.push(id);
|
|
41
|
-
}
|
|
42
|
-
return ids;
|
|
43
|
-
}
|
|
44
|
-
async getGroupIds(id) {
|
|
45
|
-
return this.postFilterIds(await super.getGroupIds(id));
|
|
46
|
-
}
|
|
47
|
-
async getSelectionSetCandidates(ss) {
|
|
48
|
-
return this.postFilterIds(await super.getSelectionSetCandidates(ss));
|
|
49
|
-
}
|
|
50
|
-
async getDragSelectCandidates(vp, origin, corner, method, overlap) {
|
|
51
|
-
return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));
|
|
52
|
-
}
|
|
53
|
-
setupAccuDraw() { }
|
|
54
|
-
setupAndPromptForNextAction() {
|
|
55
|
-
this.setupAccuDraw();
|
|
56
|
-
super.setupAndPromptForNextAction();
|
|
57
|
-
}
|
|
58
|
-
async doUpdateElement(_props) { return false; }
|
|
59
|
-
async applyAgendaOperation(ev) {
|
|
60
|
-
const geometry = this.getGeometryProps(ev, true);
|
|
61
|
-
if (undefined === geometry)
|
|
62
|
-
return false;
|
|
63
|
-
const elemProps = this.getElementProps(ev);
|
|
64
|
-
if (undefined === elemProps)
|
|
65
|
-
return false;
|
|
66
|
-
if ("flatbuffer" === geometry.format)
|
|
67
|
-
elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };
|
|
68
|
-
else
|
|
69
|
-
elemProps.geom = geometry.data;
|
|
70
|
-
return this.doUpdateElement(elemProps);
|
|
71
|
-
}
|
|
72
|
-
async processAgenda(ev) {
|
|
73
|
-
if (await this.applyAgendaOperation(ev))
|
|
74
|
-
return this.saveChanges();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/** @alpha Edit tool base class for updating existing elements that use dynamics to show intermediate results. */
|
|
78
|
-
export class ModifyElementWithDynamicsTool extends ModifyElementTool {
|
|
79
|
-
constructor() {
|
|
80
|
-
super(...arguments);
|
|
81
|
-
this._firstResult = true;
|
|
82
|
-
}
|
|
83
|
-
get wantAccuSnap() { return true; }
|
|
84
|
-
get wantDynamics() { return true; }
|
|
85
|
-
agendaAppearance(isDynamics) {
|
|
86
|
-
if (isDynamics) {
|
|
87
|
-
if (undefined === this._agendaAppearanceDynamic)
|
|
88
|
-
this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);
|
|
89
|
-
return this._agendaAppearanceDynamic;
|
|
90
|
-
}
|
|
91
|
-
if (undefined === this._agendaAppearanceDefault)
|
|
92
|
-
this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);
|
|
93
|
-
return this._agendaAppearanceDefault;
|
|
94
|
-
}
|
|
95
|
-
get wantAgendaAppearanceOverride() { return false; }
|
|
96
|
-
addFeatureOverrides(overrides, _vp) {
|
|
97
|
-
if (this.agenda.isEmpty)
|
|
98
|
-
return;
|
|
99
|
-
const appearance = this.agendaAppearance(false);
|
|
100
|
-
this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));
|
|
101
|
-
}
|
|
102
|
-
updateAgendaAppearanceProvider(drop) {
|
|
103
|
-
if (!this.wantAgendaAppearanceOverride)
|
|
104
|
-
return;
|
|
105
|
-
for (const vp of IModelApp.viewManager) {
|
|
106
|
-
if (!this.allowView(vp))
|
|
107
|
-
continue;
|
|
108
|
-
if (drop || this.agenda.isEmpty)
|
|
109
|
-
vp.dropFeatureOverrideProvider(this);
|
|
110
|
-
else if (!vp.addFeatureOverrideProvider(this))
|
|
111
|
-
vp.setFeatureOverrideProviderChanged();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
clearGraphics() {
|
|
115
|
-
if (undefined === this._graphicsProvider)
|
|
116
|
-
return;
|
|
117
|
-
this._graphicsProvider.cleanupGraphic();
|
|
118
|
-
this._graphicsProvider = undefined;
|
|
119
|
-
}
|
|
120
|
-
async createGraphics(ev) {
|
|
121
|
-
if (!IModelApp.viewManager.inDynamicsMode)
|
|
122
|
-
return; // Don't need to create graphic if dynamics aren't yet active...
|
|
123
|
-
const geometry = this.getGeometryProps(ev, false);
|
|
124
|
-
if (undefined === geometry) {
|
|
125
|
-
this.clearGraphics();
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
const elemProps = this.getElementProps(ev);
|
|
129
|
-
if (undefined ===
|
|
130
|
-
this.clearGraphics();
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (undefined === this._graphicsProvider) {
|
|
134
|
-
if (this._firstResult) {
|
|
135
|
-
this.updateAgendaAppearanceProvider();
|
|
136
|
-
this._firstResult = false;
|
|
137
|
-
}
|
|
138
|
-
this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);
|
|
139
|
-
}
|
|
140
|
-
// Set chord tolerance for non-linear/non-planar geometry...
|
|
141
|
-
if (ev.viewport)
|
|
142
|
-
this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);
|
|
143
|
-
await this._graphicsProvider.createGraphic(elemProps.category, elemProps.placement, geometry);
|
|
144
|
-
}
|
|
145
|
-
onDynamicFrame(_ev, context) {
|
|
146
|
-
if (undefined !== this._graphicsProvider)
|
|
147
|
-
this._graphicsProvider.addGraphic(context);
|
|
148
|
-
}
|
|
149
|
-
async onMouseMotion(ev) {
|
|
150
|
-
return this.createGraphics(ev);
|
|
151
|
-
}
|
|
152
|
-
async onUnsuspend() {
|
|
153
|
-
if (!this._firstResult)
|
|
154
|
-
this.updateAgendaAppearanceProvider();
|
|
155
|
-
return super.onUnsuspend();
|
|
156
|
-
}
|
|
157
|
-
async onSuspend() {
|
|
158
|
-
if (!this._firstResult)
|
|
159
|
-
this.updateAgendaAppearanceProvider(true);
|
|
160
|
-
return super.onSuspend();
|
|
161
|
-
}
|
|
162
|
-
async onPostInstall() {
|
|
163
|
-
await super.onPostInstall();
|
|
164
|
-
if (this.wantAgendaAppearanceOverride)
|
|
165
|
-
this.agenda.manageHiliteState = false;
|
|
166
|
-
}
|
|
167
|
-
async onCleanup() {
|
|
168
|
-
this.clearGraphics();
|
|
169
|
-
this.updateAgendaAppearanceProvider(true);
|
|
170
|
-
return super.onCleanup();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { Id64 } from "@itwin/core-bentley";
|
|
6
|
+
import { FeatureAppearance } from "@itwin/core-common";
|
|
7
|
+
import { ElementSetTool, IModelApp } from "@itwin/core-frontend";
|
|
8
|
+
import { computeChordToleranceFromPoint, DynamicGraphicsProvider } from "./CreateElementTool";
|
|
9
|
+
/** @alpha Edit tool base class for updating existing elements. */
|
|
10
|
+
export class ModifyElementTool extends ElementSetTool {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this._checkedIds = new Map();
|
|
14
|
+
}
|
|
15
|
+
allowView(_vp) { return true; }
|
|
16
|
+
isCompatibleViewport(vp, isSelectedViewChange) { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }
|
|
17
|
+
onGeometryFilterChanged() { this._checkedIds.clear(); }
|
|
18
|
+
async doAcceptElementForOperation(_id) { return false; }
|
|
19
|
+
async acceptElementForOperation(id) {
|
|
20
|
+
if (Id64.isInvalid(id) || Id64.isTransient(id))
|
|
21
|
+
return false;
|
|
22
|
+
let accept = this._checkedIds.get(id);
|
|
23
|
+
if (undefined === accept) {
|
|
24
|
+
if (this.agenda.isEmpty && this._checkedIds.size > 1000)
|
|
25
|
+
this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...
|
|
26
|
+
accept = await this.doAcceptElementForOperation(id);
|
|
27
|
+
this._checkedIds.set(id, accept);
|
|
28
|
+
}
|
|
29
|
+
return accept;
|
|
30
|
+
}
|
|
31
|
+
async isElementValidForOperation(hit, out) {
|
|
32
|
+
if (!await super.isElementValidForOperation(hit, out))
|
|
33
|
+
return false;
|
|
34
|
+
return this.acceptElementForOperation(hit.sourceId);
|
|
35
|
+
}
|
|
36
|
+
async postFilterIds(arg) {
|
|
37
|
+
const ids = [];
|
|
38
|
+
for (const id of Id64.iterable(arg)) {
|
|
39
|
+
if (await this.acceptElementForOperation(id))
|
|
40
|
+
ids.push(id);
|
|
41
|
+
}
|
|
42
|
+
return ids;
|
|
43
|
+
}
|
|
44
|
+
async getGroupIds(id) {
|
|
45
|
+
return this.postFilterIds(await super.getGroupIds(id));
|
|
46
|
+
}
|
|
47
|
+
async getSelectionSetCandidates(ss) {
|
|
48
|
+
return this.postFilterIds(await super.getSelectionSetCandidates(ss));
|
|
49
|
+
}
|
|
50
|
+
async getDragSelectCandidates(vp, origin, corner, method, overlap) {
|
|
51
|
+
return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));
|
|
52
|
+
}
|
|
53
|
+
setupAccuDraw() { }
|
|
54
|
+
setupAndPromptForNextAction() {
|
|
55
|
+
this.setupAccuDraw();
|
|
56
|
+
super.setupAndPromptForNextAction();
|
|
57
|
+
}
|
|
58
|
+
async doUpdateElement(_props) { return false; }
|
|
59
|
+
async applyAgendaOperation(ev) {
|
|
60
|
+
const geometry = this.getGeometryProps(ev, true);
|
|
61
|
+
if (undefined === geometry)
|
|
62
|
+
return false;
|
|
63
|
+
const elemProps = this.getElementProps(ev);
|
|
64
|
+
if (undefined === elemProps)
|
|
65
|
+
return false;
|
|
66
|
+
if ("flatbuffer" === geometry.format)
|
|
67
|
+
elemProps.elementGeometryBuilderParams = { entryArray: geometry.data };
|
|
68
|
+
else
|
|
69
|
+
elemProps.geom = geometry.data;
|
|
70
|
+
return this.doUpdateElement(elemProps);
|
|
71
|
+
}
|
|
72
|
+
async processAgenda(ev) {
|
|
73
|
+
if (await this.applyAgendaOperation(ev))
|
|
74
|
+
return this.saveChanges();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** @alpha Edit tool base class for updating existing elements that use dynamics to show intermediate results. */
|
|
78
|
+
export class ModifyElementWithDynamicsTool extends ModifyElementTool {
|
|
79
|
+
constructor() {
|
|
80
|
+
super(...arguments);
|
|
81
|
+
this._firstResult = true;
|
|
82
|
+
}
|
|
83
|
+
get wantAccuSnap() { return true; }
|
|
84
|
+
get wantDynamics() { return true; }
|
|
85
|
+
agendaAppearance(isDynamics) {
|
|
86
|
+
if (isDynamics) {
|
|
87
|
+
if (undefined === this._agendaAppearanceDynamic)
|
|
88
|
+
this._agendaAppearanceDynamic = FeatureAppearance.fromTransparency(0.0);
|
|
89
|
+
return this._agendaAppearanceDynamic;
|
|
90
|
+
}
|
|
91
|
+
if (undefined === this._agendaAppearanceDefault)
|
|
92
|
+
this._agendaAppearanceDefault = FeatureAppearance.fromTransparency(0.9);
|
|
93
|
+
return this._agendaAppearanceDefault;
|
|
94
|
+
}
|
|
95
|
+
get wantAgendaAppearanceOverride() { return false; }
|
|
96
|
+
addFeatureOverrides(overrides, _vp) {
|
|
97
|
+
if (this.agenda.isEmpty)
|
|
98
|
+
return;
|
|
99
|
+
const appearance = this.agendaAppearance(false);
|
|
100
|
+
this.agenda.elements.forEach((elementId) => overrides.override({ elementId, appearance }));
|
|
101
|
+
}
|
|
102
|
+
updateAgendaAppearanceProvider(drop) {
|
|
103
|
+
if (!this.wantAgendaAppearanceOverride)
|
|
104
|
+
return;
|
|
105
|
+
for (const vp of IModelApp.viewManager) {
|
|
106
|
+
if (!this.allowView(vp))
|
|
107
|
+
continue;
|
|
108
|
+
if (drop || this.agenda.isEmpty)
|
|
109
|
+
vp.dropFeatureOverrideProvider(this);
|
|
110
|
+
else if (!vp.addFeatureOverrideProvider(this))
|
|
111
|
+
vp.setFeatureOverrideProviderChanged();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
clearGraphics() {
|
|
115
|
+
if (undefined === this._graphicsProvider)
|
|
116
|
+
return;
|
|
117
|
+
this._graphicsProvider.cleanupGraphic();
|
|
118
|
+
this._graphicsProvider = undefined;
|
|
119
|
+
}
|
|
120
|
+
async createGraphics(ev) {
|
|
121
|
+
if (!IModelApp.viewManager.inDynamicsMode)
|
|
122
|
+
return; // Don't need to create graphic if dynamics aren't yet active...
|
|
123
|
+
const geometry = this.getGeometryProps(ev, false);
|
|
124
|
+
if (undefined === geometry) {
|
|
125
|
+
this.clearGraphics();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const elemProps = this.getElementProps(ev);
|
|
129
|
+
if (undefined === elemProps?.placement) {
|
|
130
|
+
this.clearGraphics();
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (undefined === this._graphicsProvider) {
|
|
134
|
+
if (this._firstResult) {
|
|
135
|
+
this.updateAgendaAppearanceProvider();
|
|
136
|
+
this._firstResult = false;
|
|
137
|
+
}
|
|
138
|
+
this._graphicsProvider = new DynamicGraphicsProvider(this.iModel, this.toolId);
|
|
139
|
+
}
|
|
140
|
+
// Set chord tolerance for non-linear/non-planar geometry...
|
|
141
|
+
if (ev.viewport)
|
|
142
|
+
this._graphicsProvider.chordTolerance = computeChordToleranceFromPoint(ev.viewport, ev.point);
|
|
143
|
+
await this._graphicsProvider.createGraphic(elemProps.category, elemProps.placement, geometry);
|
|
144
|
+
}
|
|
145
|
+
onDynamicFrame(_ev, context) {
|
|
146
|
+
if (undefined !== this._graphicsProvider)
|
|
147
|
+
this._graphicsProvider.addGraphic(context);
|
|
148
|
+
}
|
|
149
|
+
async onMouseMotion(ev) {
|
|
150
|
+
return this.createGraphics(ev);
|
|
151
|
+
}
|
|
152
|
+
async onUnsuspend() {
|
|
153
|
+
if (!this._firstResult)
|
|
154
|
+
this.updateAgendaAppearanceProvider();
|
|
155
|
+
return super.onUnsuspend();
|
|
156
|
+
}
|
|
157
|
+
async onSuspend() {
|
|
158
|
+
if (!this._firstResult)
|
|
159
|
+
this.updateAgendaAppearanceProvider(true);
|
|
160
|
+
return super.onSuspend();
|
|
161
|
+
}
|
|
162
|
+
async onPostInstall() {
|
|
163
|
+
await super.onPostInstall();
|
|
164
|
+
if (this.wantAgendaAppearanceOverride)
|
|
165
|
+
this.agenda.manageHiliteState = false;
|
|
166
|
+
}
|
|
167
|
+
async onCleanup() {
|
|
168
|
+
this.clearGraphics();
|
|
169
|
+
this.updateAgendaAppearanceProvider(true);
|
|
170
|
+
return super.onCleanup();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
173
|
//# sourceMappingURL=ModifyElementTool.js.map
|
|
@@ -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, Id64Arg, Id64Array, 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, SelectionMethod, SelectionSet, Viewport } from \"@itwin/core-frontend\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\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 async postFilterIds(arg: Id64Arg): Promise<Id64Arg> {\r\n const ids: Id64Array = [];\r\n\r\n for (const id of Id64.iterable(arg)) {\r\n if (await this.acceptElementForOperation(id))\r\n ids.push(id);\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n protected override async getGroupIds(id: Id64String): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getGroupIds(id));\r\n }\r\n\r\n protected override async getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getSelectionSetCandidates(ss));\r\n }\r\n\r\n protected override async getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));\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"]}
|
|
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, Id64Arg, Id64Array, 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, SelectionMethod, SelectionSet, Viewport } from \"@itwin/core-frontend\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\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 async postFilterIds(arg: Id64Arg): Promise<Id64Arg> {\r\n const ids: Id64Array = [];\r\n\r\n for (const id of Id64.iterable(arg)) {\r\n if (await this.acceptElementForOperation(id))\r\n ids.push(id);\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n protected override async getGroupIds(id: Id64String): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getGroupIds(id));\r\n }\r\n\r\n protected override async getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getSelectionSetCandidates(ss));\r\n }\r\n\r\n protected override async getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg> {\r\n return this.postFilterIds(await super.getDragSelectCandidates(vp, origin, corner, method, overlap));\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"]}
|