@itwin/editor-frontend 3.0.0-dev.136 → 3.0.0-dev.138
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/ElementGeometryTool.d.ts +7 -1
- package/lib/cjs/ElementGeometryTool.d.ts.map +1 -1
- package/lib/cjs/ElementGeometryTool.js +43 -5
- package/lib/cjs/ElementGeometryTool.js.map +1 -1
- package/lib/cjs/SolidModelingTools.d.ts +25 -13
- package/lib/cjs/SolidModelingTools.d.ts.map +1 -1
- package/lib/cjs/SolidModelingTools.js +99 -55
- package/lib/cjs/SolidModelingTools.js.map +1 -1
- package/lib/esm/ElementGeometryTool.d.ts +7 -1
- package/lib/esm/ElementGeometryTool.d.ts.map +1 -1
- package/lib/esm/ElementGeometryTool.js +44 -6
- package/lib/esm/ElementGeometryTool.js.map +1 -1
- package/lib/esm/SolidModelingTools.d.ts +25 -13
- package/lib/esm/SolidModelingTools.d.ts.map +1 -1
- package/lib/esm/SolidModelingTools.js +99 -57
- package/lib/esm/SolidModelingTools.js.map +1 -1
- package/package.json +13 -13
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Editing
|
|
3
3
|
*/
|
|
4
4
|
import { Id64Arg, Id64String } from "@itwin/core-bentley";
|
|
5
|
-
import { ElementGeometryCacheFilter, ElementGeometryResultProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from "@itwin/editor-common";
|
|
5
|
+
import { BRepEntityType, ElementGeometryCacheFilter, ElementGeometryResultProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from "@itwin/editor-common";
|
|
6
6
|
import { FeatureAppearance } from "@itwin/core-common";
|
|
7
7
|
import { Point3d, Ray3d, Transform } from "@itwin/core-geometry";
|
|
8
8
|
import { BeButtonEvent, BeModifierKeys, CoordinateLockOverrides, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranchOptions, GraphicType, HitDetail, IModelConnection, LocateResponse, RenderGraphicOwner, SelectionMethod, SelectionSet, Viewport } from "@itwin/core-frontend";
|
|
@@ -86,7 +86,10 @@ export declare abstract class LocateSubEntityTool extends ElementGeometryCacheTo
|
|
|
86
86
|
protected _currentSubEntity?: SubEntityData;
|
|
87
87
|
protected _acceptedSubEntities: SubEntityData[];
|
|
88
88
|
protected _locatedSubEntities?: SubEntityLocationProps[];
|
|
89
|
+
protected readonly _summaryIds: Map<string, BRepEntityType[]>;
|
|
89
90
|
protected get wantAgendaAppearanceOverride(): boolean;
|
|
91
|
+
protected get wantGeometrySummary(): boolean;
|
|
92
|
+
protected get wantSubEntitySnap(): boolean;
|
|
90
93
|
protected wantSubEntityType(type: SubEntityType): boolean;
|
|
91
94
|
protected getMaximumSubEntityHits(type: SubEntityType): number;
|
|
92
95
|
protected get requiredSubEntityCount(): number;
|
|
@@ -95,6 +98,9 @@ export declare abstract class LocateSubEntityTool extends ElementGeometryCacheTo
|
|
|
95
98
|
protected get allowSubEntityControlSelect(): boolean;
|
|
96
99
|
protected get allowSubEntityControlDeselect(): boolean;
|
|
97
100
|
protected get allowSubEntitySelectNext(): boolean;
|
|
101
|
+
protected getBRepEntityTypeForSubEntity(id: Id64String, subEntity: SubEntityProps): BRepEntityType;
|
|
102
|
+
protected createElementGeometrySummary(id: Id64String): Promise<boolean>;
|
|
103
|
+
protected createElementGeometryCache(id: Id64String): Promise<boolean>;
|
|
98
104
|
protected getAcceptedSubEntityData(index?: number): SubEntityData | undefined;
|
|
99
105
|
protected getAcceptedSubEntities(): SubEntityProps[];
|
|
100
106
|
protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAQ,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,0BAA0B,EAAgC,0BAA0B,EAAwB,uBAAuB,EAAE,eAAe,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -202,6 +202,8 @@ class ElementGeometryCacheTool extends core_frontend_1.ElementSetTool {
|
|
|
202
202
|
return false;
|
|
203
203
|
let accept = this._checkedIds.get(id);
|
|
204
204
|
if (undefined === accept) {
|
|
205
|
+
if (this.agenda.isEmpty && this._checkedIds.size > 1000)
|
|
206
|
+
this._checkedIds.clear(); // Limit auto-locate cache size to something reasonable...
|
|
205
207
|
accept = await this.createElementGeometryCache(id);
|
|
206
208
|
this._checkedIds.set(id, accept);
|
|
207
209
|
}
|
|
@@ -305,8 +307,11 @@ class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
305
307
|
constructor() {
|
|
306
308
|
super(...arguments);
|
|
307
309
|
this._acceptedSubEntities = [];
|
|
310
|
+
this._summaryIds = new Map();
|
|
308
311
|
}
|
|
309
312
|
get wantAgendaAppearanceOverride() { return true; }
|
|
313
|
+
get wantGeometrySummary() { return false; }
|
|
314
|
+
get wantSubEntitySnap() { return false; }
|
|
310
315
|
wantSubEntityType(type) { return editor_common_1.SubEntityType.Face === type; }
|
|
311
316
|
getMaximumSubEntityHits(type) { return this.wantSubEntityType(type) ? 25 : 0; }
|
|
312
317
|
get requiredSubEntityCount() { return 1; }
|
|
@@ -315,6 +320,36 @@ class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
315
320
|
get allowSubEntityControlSelect() { return true; }
|
|
316
321
|
get allowSubEntityControlDeselect() { return this.allowSubEntityControlSelect; }
|
|
317
322
|
get allowSubEntitySelectNext() { return !this.isDynamicsStarted; }
|
|
323
|
+
getBRepEntityTypeForSubEntity(id, subEntity) {
|
|
324
|
+
const summary = this._summaryIds.get(id);
|
|
325
|
+
if (undefined === summary)
|
|
326
|
+
return editor_common_1.BRepEntityType.Invalid;
|
|
327
|
+
const index = (undefined !== subEntity.index ? subEntity.index : 0);
|
|
328
|
+
if (index >= summary.length)
|
|
329
|
+
return editor_common_1.BRepEntityType.Invalid;
|
|
330
|
+
return summary[index];
|
|
331
|
+
}
|
|
332
|
+
async createElementGeometrySummary(id) {
|
|
333
|
+
let summary = this._summaryIds.get(id);
|
|
334
|
+
if (undefined === summary) {
|
|
335
|
+
if (this.agenda.isEmpty && this._summaryIds.size > 1000)
|
|
336
|
+
this._summaryIds.clear(); // Limit auto-locate cache size to something reasonable...
|
|
337
|
+
try {
|
|
338
|
+
this._startedCmd = await this.startCommand();
|
|
339
|
+
if (undefined === (summary = await ElementGeometryCacheTool.callCommand("summarizeElementGeometryCache", id)))
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
this._summaryIds.set(id, summary);
|
|
346
|
+
}
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
async createElementGeometryCache(id) {
|
|
350
|
+
const accept = await super.createElementGeometryCache(id);
|
|
351
|
+
return (accept && this.wantGeometrySummary ? this.createElementGeometrySummary(id) : accept);
|
|
352
|
+
}
|
|
318
353
|
getAcceptedSubEntityData(index = -1) {
|
|
319
354
|
if (-1 === index)
|
|
320
355
|
index = this._acceptedSubEntities.length - 1;
|
|
@@ -502,8 +537,10 @@ class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
502
537
|
async gatherInput(ev) {
|
|
503
538
|
if (this.wantAdditionalSubEntities) {
|
|
504
539
|
await this.doLocateSubEntity(ev, true);
|
|
505
|
-
if (this.wantAdditionalSubEntities)
|
|
540
|
+
if (this.wantAdditionalSubEntities) {
|
|
541
|
+
this.setupAndPromptForNextAction();
|
|
506
542
|
return core_frontend_1.EventHandled.No;
|
|
543
|
+
}
|
|
507
544
|
this.clearCurrentSubEntity();
|
|
508
545
|
}
|
|
509
546
|
return super.gatherInput(ev);
|
|
@@ -601,11 +638,12 @@ class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
|
601
638
|
get shouldEnableSnap() {
|
|
602
639
|
if (this.isSelectByPoints || !this.wantAccuSnap)
|
|
603
640
|
return false;
|
|
604
|
-
if (
|
|
605
|
-
return true;
|
|
606
|
-
if (!(this.controlKeyContinuesSelection || this.allowSubEntityControlSelect))
|
|
641
|
+
if (this.isDynamicsStarted)
|
|
607
642
|
return true;
|
|
608
|
-
|
|
643
|
+
const isCtrlSelect = (this.isControlDown && (this.controlKeyContinuesSelection || this.allowSubEntityControlSelect));
|
|
644
|
+
if (isCtrlSelect || this.wantAdditionalElements || this.wantAdditionalSubEntities)
|
|
645
|
+
return this.wantSubEntitySnap;
|
|
646
|
+
return !this.wantSubEntitySnap;
|
|
609
647
|
}
|
|
610
648
|
setupAccuDraw() { }
|
|
611
649
|
setupAndPromptForNextAction() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementGeometryTool.js","sourceRoot":"","sources":["../../src/ElementGeometryTool.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 { Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, LocateSubEntityProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from \"@itwin/editor-common\";\r\nimport { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from \"@itwin/core-common\";\r\nimport { Point3d, Range3d, Ray3d, Transform } from \"@itwin/core-geometry\";\r\nimport { AccuDrawHintBuilder, BeButtonEvent, BeModifierKeys, CoordinateLockOverrides, CoordSource, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranch, GraphicBranchOptions, GraphicType, HitDetail, IModelApp, IModelConnection, InputSource, LocateResponse, readElementGraphics, RenderGraphicOwner, SelectionMethod, SelectionSet, Viewport } from \"@itwin/core-frontend\";\r\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha */\r\nexport class ElementGeometryGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public graphic?: RenderGraphicOwner;\r\n\r\n constructor(iModel: IModelConnection) {\r\n this.iModel = iModel;\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied graphic data.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public async createGraphic(graphicData: Uint8Array): Promise<boolean> {\r\n try {\r\n const graphic = await readElementGraphics(graphicData, this.iModel, Id64.invalid, true, { noFlash: true, noHilite: true });\r\n const graphicOwner = graphic ? IModelApp.renderSystem.createGraphicOwner(graphic) : undefined;\r\n this.cleanupGraphic();\r\n return (undefined !== (this.graphic = graphicOwner));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]].\r\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\r\n */\r\n public cleanupGraphic(): void {\r\n if (undefined === this.graphic)\r\n return;\r\n this.graphic.disposeGraphic();\r\n this.graphic = undefined;\r\n }\r\n\r\n public addGraphic(context: DynamicsContext, transform?: Transform, opts?: GraphicBranchOptions): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n if (undefined === transform && undefined === opts) {\r\n context.addGraphic(this.graphic);\r\n return;\r\n }\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addDecoration(context: DecorateContext, type: GraphicType, transform?: Transform, opts?: GraphicBranchOptions): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\r\n context.addDecoration(type, branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport function isSameSubEntity(a: SubEntityProps, b: SubEntityProps): boolean {\r\n if (a.type !== b.type)\r\n return false;\r\n if (a.id !== b.id)\r\n return false;\r\n if ((undefined !== a.index ? a.index : 0) !== (undefined !== b.index ? b.index : 0))\r\n return false;\r\n return true;\r\n}\r\n\r\n/** @alpha */\r\nexport class SubEntityData {\r\n public toolData?: any;\r\n public chordTolerance?: number;\r\n\r\n private _props: SubEntityProps;\r\n private _geometry?: SubEntityGeometryProps;\r\n private _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n\r\n constructor(props: SubEntityProps) { this._props = props; }\r\n\r\n public get props(): SubEntityProps { return this._props; }\r\n public set props(value: SubEntityProps) { this.cleanupGraphic(); this._props = value; }\r\n\r\n public get geometry(): SubEntityGeometryProps | undefined { return this._geometry; }\r\n public set geometry(value: SubEntityGeometryProps | undefined) { this._geometry = value; }\r\n\r\n public isSame(other: SubEntityProps): boolean { return isSameSubEntity(this._props, other); }\r\n\r\n public getAppearance(vp: Viewport, accepted: boolean): FeatureAppearance {\r\n const color = vp.hilite.color;\r\n const rgb = RgbColor.fromColorDef(accepted ? color.inverse() : color);\r\n const transparency = 0.25;\r\n const emphasized = true; // Necessary for obscured sub-entities w/SceneGraphic...\r\n let weight;\r\n\r\n switch (this.props.type) {\r\n case SubEntityType.Face:\r\n break;\r\n case SubEntityType.Edge:\r\n const edgeWeight = accepted ? 1 : 3;\r\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + edgeWeight, 31) : edgeWeight;\r\n break;\r\n case SubEntityType.Vertex:\r\n const vertexWeight = accepted ? 8 : 10;\r\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + vertexWeight, 31) : vertexWeight;\r\n break;\r\n }\r\n\r\n return FeatureAppearance.fromJSON({ rgb, transparency, weight, emphasized, nonLocatable: true });\r\n }\r\n\r\n public async createGraphic(iModel: IModelConnection): Promise<boolean> {\r\n if (undefined === this._geometry?.graphic)\r\n return false;\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new ElementGeometryGraphicsProvider(iModel);\r\n\r\n return this._graphicsProvider.createGraphic(this._geometry.graphic);\r\n }\r\n\r\n public cleanupGraphic(): 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 public get hasGraphic(): boolean {\r\n return (undefined !== this._graphicsProvider?.graphic);\r\n }\r\n\r\n public display(context: DecorateContext, accepted: boolean): void {\r\n if (undefined === this._graphicsProvider?.graphic)\r\n return;\r\n\r\n const range = (this._geometry?.range ? Range3d.fromJSON(this._geometry.range) : undefined);\r\n const pixelSize = context.viewport.getPixelSizeAtPoint(range ? range.center : undefined);\r\n const offsetDir = context.viewport.view.getZVector();\r\n offsetDir.scaleToLength(3 * pixelSize, offsetDir);\r\n const offsetTrans = Transform.createTranslation(offsetDir);\r\n\r\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.getAppearance(context.viewport, accepted));\r\n });\r\n\r\n this._graphicsProvider.addDecoration(context, GraphicType.Scene, offsetTrans, { appearanceProvider });\r\n }\r\n}\r\n\r\n/** @alpha Base class for tools that want to use the backend geometry cache. */\r\nexport abstract class ElementGeometryCacheTool extends ElementSetTool implements FeatureOverrideProvider {\r\n protected _startedCmd?: string;\r\n protected readonly _checkedIds = new Map<Id64String, boolean>();\r\n protected _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n protected _graphicsPending?: true;\r\n protected _firstResult = true;\r\n protected _agendaAppearanceDefault?: FeatureAppearance;\r\n protected _agendaAppearanceDynamic?: FeatureAppearance;\r\n\r\n protected allowView(vp: Viewport) { return vp.view.is3d(); }\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 async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdSolidModeling, this.iModel.key);\r\n }\r\n\r\n public static callCommand<T extends keyof SolidModelingCommandIpc>(method: T, ...args: Parameters<SolidModelingCommandIpc[T]>): ReturnType<SolidModelingCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<SolidModelingCommandIpc[T]>;\r\n }\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 get geometryCacheFilter(): ElementGeometryCacheFilter | undefined { return undefined; }\r\n protected onGeometryCacheFilterChanged(): void { this._checkedIds.clear(); }\r\n\r\n protected async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n // NOTE: Creates cache if it doesn't already exist then test new or existing cache against filter...\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n return await ElementGeometryCacheTool.callCommand(\"createElementGeometryCache\", id, this.geometryCacheFilter);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\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 accept = await this.createElementGeometryCache(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 public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n if (!this.wantAgendaAppearanceOverride)\r\n return this._graphicsProvider.addGraphic(context);\r\n\r\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.agendaAppearance(true));\r\n });\r\n\r\n this._graphicsProvider.addGraphic(context, undefined, { appearanceProvider });\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n return this.updateGraphic(ev, IModelApp.viewManager.inDynamicsMode);\r\n }\r\n\r\n protected async getGraphicData(_ev: BeButtonEvent): Promise<Uint8Array | undefined> { return undefined; }\r\n\r\n protected async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (!isDynamics || this._graphicsPending)\r\n return; // Continue displaying previous graphic if new graphic is still pending...\r\n\r\n this._graphicsPending = true;\r\n const graphicData = await this.getGraphicData(ev);\r\n this._graphicsPending = undefined;\r\n\r\n if (undefined !== graphicData) {\r\n if (this._firstResult) {\r\n this.updateAgendaAppearanceProvider();\r\n this._firstResult = false;\r\n }\r\n return this.createGraphic(graphicData);\r\n }\r\n\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.cleanupGraphic();\r\n }\r\n\r\n protected async createGraphic(graphicData: Uint8Array): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new ElementGeometryGraphicsProvider(this.iModel);\r\n\r\n await this._graphicsProvider.createGraphic(graphicData);\r\n }\r\n\r\n protected clearGraphic(): 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 clearElementGeometryCache(): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n await ElementGeometryCacheTool.callCommand(\"clearElementGeometryCache\");\r\n } catch (err) { }\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 await super.onCleanup();\r\n await this.clearElementGeometryCache();\r\n this.updateAgendaAppearanceProvider(true);\r\n this.clearGraphic();\r\n }\r\n}\r\n\r\n/** @alpha Base class for tools that need to locate faces, edges, and vertices. */\r\nexport abstract class LocateSubEntityTool extends ElementGeometryCacheTool {\r\n protected _currentSubEntity?: SubEntityData;\r\n protected _acceptedSubEntities: SubEntityData[] = [];\r\n protected _locatedSubEntities?: SubEntityLocationProps[];\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n\r\n protected wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Face === type; }\r\n protected getMaximumSubEntityHits(type: SubEntityType): number { return this.wantSubEntityType(type) ? 25 : 0; }\r\n\r\n protected get requiredSubEntityCount(): number { return 1; }\r\n protected get haveAcceptedSubEntities(): boolean { return (0 !== this._acceptedSubEntities.length); }\r\n protected get inhibitSubEntityDisplay(): boolean { return this.isDynamicsStarted; }\r\n\r\n protected get allowSubEntityControlSelect(): boolean { return true; }\r\n protected get allowSubEntityControlDeselect(): boolean { return this.allowSubEntityControlSelect; }\r\n protected get allowSubEntitySelectNext(): boolean { return !this.isDynamicsStarted; }\r\n\r\n protected getAcceptedSubEntityData(index: number = -1): SubEntityData | undefined {\r\n if (-1 === index)\r\n index = this._acceptedSubEntities.length - 1;\r\n\r\n if (index < 0 || index > this._acceptedSubEntities.length - 1)\r\n return undefined;\r\n\r\n return this._acceptedSubEntities[index];\r\n }\r\n\r\n protected getAcceptedSubEntities(): SubEntityProps[] {\r\n const accepted: SubEntityProps[] = [];\r\n this._acceptedSubEntities.forEach((entry) => { accepted.push(entry.props); });\r\n return accepted;\r\n }\r\n\r\n protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void {\r\n subEntity.display(context, accepted);\r\n }\r\n\r\n protected drawAcceptedSubEntities(context: DecorateContext): void {\r\n this._acceptedSubEntities.forEach((entry) => { this.drawSubEntity(context, entry, true); });\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\r\n return;\r\n\r\n if (this.haveAcceptedSubEntities)\r\n this.drawAcceptedSubEntities(context);\r\n\r\n if (undefined !== this._currentSubEntity)\r\n this.drawSubEntity(context, this._currentSubEntity, false);\r\n }\r\n\r\n public override decorateSuspended(context: DecorateContext): void {\r\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\r\n return;\r\n\r\n if (this.haveAcceptedSubEntities)\r\n this.drawAcceptedSubEntities(context);\r\n }\r\n\r\n protected getLocateAperture(ev: BeButtonEvent): number {\r\n if (undefined === ev.viewport)\r\n return 0.0;\r\n\r\n return ev.viewport.pixelsFromInches(InputSource.Touch === ev.inputSource ? IModelApp.locateManager.touchApertureInches : IModelApp.locateManager.apertureInches);\r\n }\r\n\r\n protected getMaxRayDistance(ev: BeButtonEvent, aperture: number): number {\r\n if (undefined === ev.viewport)\r\n return 0.0;\r\n\r\n // NOTE: Compute a world coordinate radius for ray test, try getting aperature size at point on element...\r\n const hit = IModelApp.accuSnap.currHit;\r\n const vec: Point3d[] = [];\r\n\r\n vec[0] = ev.viewport.worldToView(hit ? hit.hitPoint : ev.point);\r\n vec[1] = vec[0].clone(); vec[1].x += 1;\r\n ev.viewport.viewToWorldArray(vec);\r\n\r\n // The edge and vertex hits get post-filtered on xy distance, so this is fine for perspective views...\r\n return (aperture * vec[0].distance(vec[1]));\r\n }\r\n\r\n protected getRayOrigin(ev: BeButtonEvent): Point3d {\r\n const spacePoint = ev.point.clone();\r\n const vp = ev.viewport;\r\n\r\n if (undefined === vp)\r\n return spacePoint;\r\n\r\n vp.worldToNpc(spacePoint, spacePoint);\r\n spacePoint.z = 1.0;\r\n vp.npcToWorld(spacePoint, spacePoint);\r\n\r\n return spacePoint;\r\n }\r\n\r\n protected wantHiddenEdges(vp: Viewport): boolean {\r\n return vp.viewFlags.hiddenEdgesVisible();\r\n }\r\n\r\n protected getSubEntityFilter(): SubEntityFilter | undefined { return undefined; }\r\n\r\n protected async pickSubEntities(id: Id64String, boresite: Ray3d, maxFace: number, maxEdge: number, maxVertex: number, maxDistance: number, hiddenEdgesVisible: boolean, filter?: SubEntityFilter): Promise<SubEntityLocationProps[] | undefined> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const opts: LocateSubEntityProps = {\r\n maxFace,\r\n maxEdge,\r\n maxVertex,\r\n maxDistance,\r\n hiddenEdgesVisible,\r\n filter,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"locateSubEntities\", id, boresite.origin, boresite.direction, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\r\n const vp = ev.viewport;\r\n if (undefined === vp)\r\n return undefined;\r\n\r\n const maxFace = this.getMaximumSubEntityHits(SubEntityType.Face);\r\n const maxEdge = this.getMaximumSubEntityHits(SubEntityType.Edge);\r\n const maxVertex = this.getMaximumSubEntityHits(SubEntityType.Vertex);\r\n\r\n if (0 === maxFace && 0 === maxEdge && 0 === maxVertex)\r\n return undefined;\r\n\r\n const aperture = this.getLocateAperture(ev);\r\n const maxDistance = this.getMaxRayDistance(ev, aperture);\r\n const spacePoint = this.getRayOrigin(ev);\r\n const boresite = AccuDrawHintBuilder.getBoresite(spacePoint, vp);\r\n const hiddenEdgesVisible = this.wantHiddenEdges(vp);\r\n const filter = this.getSubEntityFilter();\r\n\r\n let hits = await this.pickSubEntities(id, boresite, maxFace, maxEdge, maxVertex, maxDistance, hiddenEdgesVisible, filter);\r\n\r\n // NOTE: Remove erroneous edge/vertex hits in perspective views by checking real xy distance to hit point...\r\n if (undefined === hits || !vp.isCameraOn)\r\n return hits;\r\n\r\n if (maxEdge > 0 && hits.length > 1) {\r\n const edgeApertureSquared = (aperture * aperture);\r\n const vertexApertureSquared = ((aperture * 2.0) * (aperture * 2.0));\r\n\r\n const e2 = Math.pow(aperture, 2);\r\n const v2 = Math.pow(aperture * 2.0, 2);\r\n\r\n if (e2 !== edgeApertureSquared || v2 !== vertexApertureSquared)\r\n return hits;\r\n\r\n const rayOrigin = vp.worldToView(boresite.origin);\r\n\r\n hits = hits.filter((hit) => {\r\n if (SubEntityType.Face === hit.subEntity.type)\r\n return true;\r\n\r\n const hitPoint = vp.worldToView(Point3d.fromJSON(hit.point));\r\n const distance = hitPoint.distanceSquaredXY(rayOrigin);\r\n\r\n return (distance <= (SubEntityType.Edge === hit.subEntity.type ? edgeApertureSquared : vertexApertureSquared));\r\n });\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n protected async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = new SubEntityData(hit.subEntity);\r\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(hit.point)) : undefined);\r\n\r\n await this.createSubEntityGraphic(id, data, chordTolerance);\r\n\r\n return data;\r\n }\r\n\r\n /** Append specified sub-entity to accepted array. */\r\n protected async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\r\n this._acceptedSubEntities.push(await this.createSubEntityData(id, props));\r\n }\r\n\r\n /** Remove specified sub-entity from accepted array, or pop last sub-entity if undefined. */\r\n protected async removeSubEntity(_id: Id64String, props?: SubEntityLocationProps): Promise<void> {\r\n if (undefined !== props)\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isSameSubEntity(entry.props, props.subEntity));\r\n else\r\n this._acceptedSubEntities.pop();\r\n }\r\n\r\n /** Locate sub-entities for the most recently added (last) agenda entry. Tool sub-classes that wish to identity\r\n * sub-entities from multiple elements are responsible for maintaining the sub-entities per-element.\r\n */\r\n protected async doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean> {\r\n if (this.agenda.isEmpty || undefined === ev.viewport)\r\n return false;\r\n\r\n const id = this.agenda.elements[this.agenda.length - 1];\r\n\r\n if (newSearch) {\r\n this._locatedSubEntities = await this.doPickSubEntities(id, ev);\r\n if (undefined === this._locatedSubEntities || 0 === this._locatedSubEntities.length)\r\n return false;\r\n\r\n /** NOTE: Set last button location to point on sub-entity when not snapping.\r\n * If dynamics are enabled on this event, onDynamicFrame is called with this location.\r\n */\r\n if (CoordSource.ElemSnap !== ev.coordsFrom) {\r\n ev.point.setFrom(Point3d.fromJSON(this._locatedSubEntities[0].point));\r\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\r\n }\r\n } else {\r\n await this.removeSubEntity(id);\r\n }\r\n\r\n const hit = this._locatedSubEntities?.shift();\r\n if (undefined !== hit) {\r\n if (undefined === this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, hit.subEntity)))\r\n await this.addSubEntity(id, hit);\r\n else if (this.allowSubEntityControlDeselect)\r\n await this.removeSubEntity(id, hit);\r\n }\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n protected override async chooseNextHit(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (!this.haveAcceptedSubEntities)\r\n return super.chooseNextHit(ev);\r\n\r\n if (!this.allowSubEntitySelectNext) {\r\n await this.onReinitialize(); // Don't cycle through hits after starting dynamics...\r\n } else {\r\n await this.doLocateSubEntity(ev, false);\r\n if (!this.haveAcceptedSubEntities)\r\n await this.onReinitialize();\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n protected get wantAdditionalSubEntities(): boolean {\r\n return (this._acceptedSubEntities.length < this.requiredSubEntityCount || (this.allowSubEntityControlSelect && this.isControlDown));\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n if (this.wantAdditionalSubEntities) {\r\n await this.doLocateSubEntity(ev, true);\r\n\r\n if (this.wantAdditionalSubEntities)\r\n return EventHandled.No;\r\n\r\n this.clearCurrentSubEntity();\r\n }\r\n\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected getCurrentElement(): Id64String | undefined {\r\n if (!this.agenda.isEmpty)\r\n return this.agenda.elements[this.agenda.length - 1];\r\n\r\n const hit = IModelApp.accuSnap.currHit;\r\n return (undefined !== hit && hit.isElementHit ? hit.sourceId : undefined);\r\n }\r\n\r\n protected clearCurrentSubEntity(): void {\r\n if (undefined === this._currentSubEntity)\r\n return;\r\n this._currentSubEntity.cleanupGraphic();\r\n this._currentSubEntity = undefined;\r\n }\r\n\r\n protected async setCurrentSubEntity(id: Id64String, hit: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\r\n if (undefined === this._currentSubEntity)\r\n this._currentSubEntity = new SubEntityData(hit.subEntity);\r\n else\r\n this._currentSubEntity.props = hit.subEntity;\r\n\r\n return this.createSubEntityGraphic(id, this._currentSubEntity, chordTolerance);\r\n }\r\n\r\n protected async changeCurrentSubEntity(id?: Id64String, current?: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\r\n if (undefined === id || undefined === current) {\r\n if (undefined === this._currentSubEntity || !this._currentSubEntity.hasGraphic)\r\n return false;\r\n this._currentSubEntity.cleanupGraphic();\r\n return true;\r\n }\r\n\r\n if (undefined !== this._currentSubEntity && this._currentSubEntity.hasGraphic && this._currentSubEntity.isSame(current.subEntity))\r\n return false;\r\n\r\n return this.setCurrentSubEntity(id, current, chordTolerance);\r\n }\r\n\r\n protected async updateCurrentSubEntity(ev: BeButtonEvent): Promise<boolean> {\r\n if (undefined === ev.viewport)\r\n return false;\r\n\r\n const id = this.wantAdditionalSubEntities ? this.getCurrentElement() : undefined;\r\n if (undefined === id)\r\n return this.changeCurrentSubEntity();\r\n\r\n const current = await this.doPickSubEntities(id, ev);\r\n const chordTolerance = current ? computeChordToleranceFromPoint(ev.viewport, Point3d.fromJSON(current[0].point)) : 0.0;\r\n\r\n if (!await this.changeCurrentSubEntity(id, current ? current[0] : undefined, chordTolerance))\r\n return false;\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n protected async createSubEntityGraphic(id: Id64String, data: SubEntityData, chordTolerance?: number): Promise<boolean> {\r\n try {\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: true,\r\n wantRange: true,\r\n wantAppearance: true,\r\n chordTolerance,\r\n };\r\n\r\n data.chordTolerance = chordTolerance;\r\n data.geometry = await ElementGeometryCacheTool.callCommand(\"getSubEntityGeometry\", id, data.props, opts);\r\n\r\n return await data.createGraphic(this.iModel);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n protected override async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (isDynamics)\r\n return super.updateGraphic(ev, isDynamics);\r\n\r\n await this.updateCurrentSubEntity(ev);\r\n }\r\n\r\n protected override async getGraphicData(ev: BeButtonEvent): Promise<Uint8Array | undefined> {\r\n const result = await this.applyAgendaOperation(ev, false);\r\n return result?.graphic;\r\n }\r\n\r\n protected async applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined> { return undefined; }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation(ev, true);\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public override async onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<EventHandled> {\r\n if (EventHandled.Yes === await super.onModifierKeyTransition(wentDown, modifier, event))\r\n return EventHandled.Yes;\r\n\r\n if (BeModifierKeys.Control !== modifier)\r\n return EventHandled.No;\r\n\r\n if (IModelApp.toolAdmin.isLocateCircleOn === this.wantAdditionalSubEntities)\r\n return EventHandled.No;\r\n\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.Yes;\r\n }\r\n\r\n public override changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void {\r\n super.changeLocateState(enableLocate, enableSnap, cursor, coordLockOvr);\r\n\r\n // Keep showing locate circle when identifing sub-entities even if done locating elements...\r\n if (!IModelApp.toolAdmin.isLocateCircleOn && this.wantAdditionalSubEntities)\r\n IModelApp.toolAdmin.setLocateCircleOn(true);\r\n }\r\n\r\n protected override get shouldEnableSnap(): boolean {\r\n if (this.isSelectByPoints || !this.wantAccuSnap)\r\n return false;\r\n\r\n if (!this.isControlDown)\r\n return true;\r\n\r\n if (!(this.controlKeyContinuesSelection || this.allowSubEntityControlSelect))\r\n return true;\r\n\r\n return (!(this.wantAdditionalElements || this.wantAdditionalSubEntities));\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 clearSubEntityGraphics(): void {\r\n if (undefined !== this._currentSubEntity)\r\n this._currentSubEntity.cleanupGraphic();\r\n this._acceptedSubEntities.forEach((entry) => { entry.cleanupGraphic(); });\r\n }\r\n\r\n public override async onCleanup(): Promise<void> {\r\n this.clearSubEntityGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ElementGeometryTool.js","sourceRoot":"","sources":["../../src/ElementGeometryTool.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 { Id64, Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { BRepEntityType, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, LocateSubEntityProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from \"@itwin/editor-common\";\r\nimport { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from \"@itwin/core-common\";\r\nimport { Point3d, Range3d, Ray3d, Transform } from \"@itwin/core-geometry\";\r\nimport { AccuDrawHintBuilder, BeButtonEvent, BeModifierKeys, CoordinateLockOverrides, CoordSource, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranch, GraphicBranchOptions, GraphicType, HitDetail, IModelApp, IModelConnection, InputSource, LocateResponse, readElementGraphics, RenderGraphicOwner, SelectionMethod, SelectionSet, Viewport } from \"@itwin/core-frontend\";\r\nimport { computeChordToleranceFromPoint } from \"./CreateElementTool\";\r\nimport { EditTools } from \"./EditTool\";\r\n\r\n/** @alpha */\r\nexport class ElementGeometryGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public graphic?: RenderGraphicOwner;\r\n\r\n constructor(iModel: IModelConnection) {\r\n this.iModel = iModel;\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied graphic data.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public async createGraphic(graphicData: Uint8Array): Promise<boolean> {\r\n try {\r\n const graphic = await readElementGraphics(graphicData, this.iModel, Id64.invalid, true, { noFlash: true, noHilite: true });\r\n const graphicOwner = graphic ? IModelApp.renderSystem.createGraphicOwner(graphic) : undefined;\r\n this.cleanupGraphic();\r\n return (undefined !== (this.graphic = graphicOwner));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]].\r\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\r\n */\r\n public cleanupGraphic(): void {\r\n if (undefined === this.graphic)\r\n return;\r\n this.graphic.disposeGraphic();\r\n this.graphic = undefined;\r\n }\r\n\r\n public addGraphic(context: DynamicsContext, transform?: Transform, opts?: GraphicBranchOptions): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n if (undefined === transform && undefined === opts) {\r\n context.addGraphic(this.graphic);\r\n return;\r\n }\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\r\n context.addGraphic(branchGraphic);\r\n }\r\n\r\n public addDecoration(context: DecorateContext, type: GraphicType, transform?: Transform, opts?: GraphicBranchOptions): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(this.graphic);\r\n\r\n const branchGraphic = context.createGraphicBranch(branch, transform ? transform : Transform.createIdentity(), opts);\r\n context.addDecoration(type, branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport function isSameSubEntity(a: SubEntityProps, b: SubEntityProps): boolean {\r\n if (a.type !== b.type)\r\n return false;\r\n if (a.id !== b.id)\r\n return false;\r\n if ((undefined !== a.index ? a.index : 0) !== (undefined !== b.index ? b.index : 0))\r\n return false;\r\n return true;\r\n}\r\n\r\n/** @alpha */\r\nexport class SubEntityData {\r\n public toolData?: any;\r\n public chordTolerance?: number;\r\n\r\n private _props: SubEntityProps;\r\n private _geometry?: SubEntityGeometryProps;\r\n private _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n\r\n constructor(props: SubEntityProps) { this._props = props; }\r\n\r\n public get props(): SubEntityProps { return this._props; }\r\n public set props(value: SubEntityProps) { this.cleanupGraphic(); this._props = value; }\r\n\r\n public get geometry(): SubEntityGeometryProps | undefined { return this._geometry; }\r\n public set geometry(value: SubEntityGeometryProps | undefined) { this._geometry = value; }\r\n\r\n public isSame(other: SubEntityProps): boolean { return isSameSubEntity(this._props, other); }\r\n\r\n public getAppearance(vp: Viewport, accepted: boolean): FeatureAppearance {\r\n const color = vp.hilite.color;\r\n const rgb = RgbColor.fromColorDef(accepted ? color.inverse() : color);\r\n const transparency = 0.25;\r\n const emphasized = true; // Necessary for obscured sub-entities w/SceneGraphic...\r\n let weight;\r\n\r\n switch (this.props.type) {\r\n case SubEntityType.Face:\r\n break;\r\n case SubEntityType.Edge:\r\n const edgeWeight = accepted ? 1 : 3;\r\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + edgeWeight, 31) : edgeWeight;\r\n break;\r\n case SubEntityType.Vertex:\r\n const vertexWeight = accepted ? 8 : 10;\r\n weight = this._geometry?.appearance?.weight ? Math.min(this._geometry.appearance.weight + vertexWeight, 31) : vertexWeight;\r\n break;\r\n }\r\n\r\n return FeatureAppearance.fromJSON({ rgb, transparency, weight, emphasized, nonLocatable: true });\r\n }\r\n\r\n public async createGraphic(iModel: IModelConnection): Promise<boolean> {\r\n if (undefined === this._geometry?.graphic)\r\n return false;\r\n\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new ElementGeometryGraphicsProvider(iModel);\r\n\r\n return this._graphicsProvider.createGraphic(this._geometry.graphic);\r\n }\r\n\r\n public cleanupGraphic(): 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 public get hasGraphic(): boolean {\r\n return (undefined !== this._graphicsProvider?.graphic);\r\n }\r\n\r\n public display(context: DecorateContext, accepted: boolean): void {\r\n if (undefined === this._graphicsProvider?.graphic)\r\n return;\r\n\r\n const range = (this._geometry?.range ? Range3d.fromJSON(this._geometry.range) : undefined);\r\n const pixelSize = context.viewport.getPixelSizeAtPoint(range ? range.center : undefined);\r\n const offsetDir = context.viewport.view.getZVector();\r\n offsetDir.scaleToLength(3 * pixelSize, offsetDir);\r\n const offsetTrans = Transform.createTranslation(offsetDir);\r\n\r\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.getAppearance(context.viewport, accepted));\r\n });\r\n\r\n this._graphicsProvider.addDecoration(context, GraphicType.Scene, offsetTrans, { appearanceProvider });\r\n }\r\n}\r\n\r\n/** @alpha Base class for tools that want to use the backend geometry cache. */\r\nexport abstract class ElementGeometryCacheTool extends ElementSetTool implements FeatureOverrideProvider {\r\n protected _startedCmd?: string;\r\n protected readonly _checkedIds = new Map<Id64String, boolean>();\r\n protected _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n protected _graphicsPending?: true;\r\n protected _firstResult = true;\r\n protected _agendaAppearanceDefault?: FeatureAppearance;\r\n protected _agendaAppearanceDynamic?: FeatureAppearance;\r\n\r\n protected allowView(vp: Viewport) { return vp.view.is3d(); }\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 async startCommand(): Promise<string> {\r\n if (undefined !== this._startedCmd)\r\n return this._startedCmd;\r\n return EditTools.startCommand<string>(editorBuiltInCmdIds.cmdSolidModeling, this.iModel.key);\r\n }\r\n\r\n public static callCommand<T extends keyof SolidModelingCommandIpc>(method: T, ...args: Parameters<SolidModelingCommandIpc[T]>): ReturnType<SolidModelingCommandIpc[T]> {\r\n return EditTools.callCommand(method, ...args) as ReturnType<SolidModelingCommandIpc[T]>;\r\n }\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 get geometryCacheFilter(): ElementGeometryCacheFilter | undefined { return undefined; }\r\n protected onGeometryCacheFilterChanged(): void { this._checkedIds.clear(); }\r\n\r\n protected async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n // NOTE: Creates cache if it doesn't already exist then test new or existing cache against filter...\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n return await ElementGeometryCacheTool.callCommand(\"createElementGeometryCache\", id, this.geometryCacheFilter);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\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.createElementGeometryCache(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 public override onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void {\r\n if (undefined === this._graphicsProvider)\r\n return;\r\n\r\n if (!this.wantAgendaAppearanceOverride)\r\n return this._graphicsProvider.addGraphic(context);\r\n\r\n const appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.agendaAppearance(true));\r\n });\r\n\r\n this._graphicsProvider.addGraphic(context, undefined, { appearanceProvider });\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n return this.updateGraphic(ev, IModelApp.viewManager.inDynamicsMode);\r\n }\r\n\r\n protected async getGraphicData(_ev: BeButtonEvent): Promise<Uint8Array | undefined> { return undefined; }\r\n\r\n protected async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (!isDynamics || this._graphicsPending)\r\n return; // Continue displaying previous graphic if new graphic is still pending...\r\n\r\n this._graphicsPending = true;\r\n const graphicData = await this.getGraphicData(ev);\r\n this._graphicsPending = undefined;\r\n\r\n if (undefined !== graphicData) {\r\n if (this._firstResult) {\r\n this.updateAgendaAppearanceProvider();\r\n this._firstResult = false;\r\n }\r\n return this.createGraphic(graphicData);\r\n }\r\n\r\n if (undefined !== this._graphicsProvider)\r\n this._graphicsProvider.cleanupGraphic();\r\n }\r\n\r\n protected async createGraphic(graphicData: Uint8Array): Promise<void> {\r\n if (undefined === this._graphicsProvider)\r\n this._graphicsProvider = new ElementGeometryGraphicsProvider(this.iModel);\r\n\r\n await this._graphicsProvider.createGraphic(graphicData);\r\n }\r\n\r\n protected clearGraphic(): 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 clearElementGeometryCache(): Promise<void> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n await ElementGeometryCacheTool.callCommand(\"clearElementGeometryCache\");\r\n } catch (err) { }\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 await super.onCleanup();\r\n await this.clearElementGeometryCache();\r\n this.updateAgendaAppearanceProvider(true);\r\n this.clearGraphic();\r\n }\r\n}\r\n\r\n/** @alpha Base class for tools that need to locate faces, edges, and vertices. */\r\nexport abstract class LocateSubEntityTool extends ElementGeometryCacheTool {\r\n protected _currentSubEntity?: SubEntityData;\r\n protected _acceptedSubEntities: SubEntityData[] = [];\r\n protected _locatedSubEntities?: SubEntityLocationProps[];\r\n protected readonly _summaryIds = new Map<Id64String, BRepEntityType[]>();\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n protected get wantGeometrySummary(): boolean { return false; }\r\n protected get wantSubEntitySnap(): boolean { return false; }\r\n\r\n protected wantSubEntityType(type: SubEntityType): boolean { return SubEntityType.Face === type; }\r\n protected getMaximumSubEntityHits(type: SubEntityType): number { return this.wantSubEntityType(type) ? 25 : 0; }\r\n\r\n protected get requiredSubEntityCount(): number { return 1; }\r\n protected get haveAcceptedSubEntities(): boolean { return (0 !== this._acceptedSubEntities.length); }\r\n protected get inhibitSubEntityDisplay(): boolean { return this.isDynamicsStarted; }\r\n\r\n protected get allowSubEntityControlSelect(): boolean { return true; }\r\n protected get allowSubEntityControlDeselect(): boolean { return this.allowSubEntityControlSelect; }\r\n protected get allowSubEntitySelectNext(): boolean { return !this.isDynamicsStarted; }\r\n\r\n protected getBRepEntityTypeForSubEntity(id: Id64String, subEntity: SubEntityProps): BRepEntityType {\r\n const summary = this._summaryIds.get(id);\r\n\r\n if (undefined === summary)\r\n return BRepEntityType.Invalid;\r\n\r\n const index = (undefined !== subEntity.index ? subEntity.index : 0);\r\n\r\n if (index >= summary.length)\r\n return BRepEntityType.Invalid;\r\n\r\n return summary[index];\r\n }\r\n\r\n protected async createElementGeometrySummary(id: Id64String): Promise<boolean> {\r\n let summary = this._summaryIds.get(id);\r\n\r\n if (undefined === summary) {\r\n if (this.agenda.isEmpty && this._summaryIds.size > 1000)\r\n this._summaryIds.clear(); // Limit auto-locate cache size to something reasonable...\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n if (undefined === (summary = await ElementGeometryCacheTool.callCommand(\"summarizeElementGeometryCache\", id)))\r\n return false;\r\n } catch (err) {\r\n return false;\r\n }\r\n\r\n this._summaryIds.set(id, summary);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected override async createElementGeometryCache(id: Id64String): Promise<boolean> {\r\n const accept = await super.createElementGeometryCache(id);\r\n return (accept && this.wantGeometrySummary ? this.createElementGeometrySummary(id) : accept);\r\n }\r\n\r\n protected getAcceptedSubEntityData(index: number = -1): SubEntityData | undefined {\r\n if (-1 === index)\r\n index = this._acceptedSubEntities.length - 1;\r\n\r\n if (index < 0 || index > this._acceptedSubEntities.length - 1)\r\n return undefined;\r\n\r\n return this._acceptedSubEntities[index];\r\n }\r\n\r\n protected getAcceptedSubEntities(): SubEntityProps[] {\r\n const accepted: SubEntityProps[] = [];\r\n this._acceptedSubEntities.forEach((entry) => { accepted.push(entry.props); });\r\n return accepted;\r\n }\r\n\r\n protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void {\r\n subEntity.display(context, accepted);\r\n }\r\n\r\n protected drawAcceptedSubEntities(context: DecorateContext): void {\r\n this._acceptedSubEntities.forEach((entry) => { this.drawSubEntity(context, entry, true); });\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\r\n return;\r\n\r\n if (this.haveAcceptedSubEntities)\r\n this.drawAcceptedSubEntities(context);\r\n\r\n if (undefined !== this._currentSubEntity)\r\n this.drawSubEntity(context, this._currentSubEntity, false);\r\n }\r\n\r\n public override decorateSuspended(context: DecorateContext): void {\r\n if (this.inhibitSubEntityDisplay || !this.allowView(context.viewport))\r\n return;\r\n\r\n if (this.haveAcceptedSubEntities)\r\n this.drawAcceptedSubEntities(context);\r\n }\r\n\r\n protected getLocateAperture(ev: BeButtonEvent): number {\r\n if (undefined === ev.viewport)\r\n return 0.0;\r\n\r\n return ev.viewport.pixelsFromInches(InputSource.Touch === ev.inputSource ? IModelApp.locateManager.touchApertureInches : IModelApp.locateManager.apertureInches);\r\n }\r\n\r\n protected getMaxRayDistance(ev: BeButtonEvent, aperture: number): number {\r\n if (undefined === ev.viewport)\r\n return 0.0;\r\n\r\n // NOTE: Compute a world coordinate radius for ray test, try getting aperature size at point on element...\r\n const hit = IModelApp.accuSnap.currHit;\r\n const vec: Point3d[] = [];\r\n\r\n vec[0] = ev.viewport.worldToView(hit ? hit.hitPoint : ev.point);\r\n vec[1] = vec[0].clone(); vec[1].x += 1;\r\n ev.viewport.viewToWorldArray(vec);\r\n\r\n // The edge and vertex hits get post-filtered on xy distance, so this is fine for perspective views...\r\n return (aperture * vec[0].distance(vec[1]));\r\n }\r\n\r\n protected getRayOrigin(ev: BeButtonEvent): Point3d {\r\n const spacePoint = ev.point.clone();\r\n const vp = ev.viewport;\r\n\r\n if (undefined === vp)\r\n return spacePoint;\r\n\r\n vp.worldToNpc(spacePoint, spacePoint);\r\n spacePoint.z = 1.0;\r\n vp.npcToWorld(spacePoint, spacePoint);\r\n\r\n return spacePoint;\r\n }\r\n\r\n protected wantHiddenEdges(vp: Viewport): boolean {\r\n return vp.viewFlags.hiddenEdgesVisible();\r\n }\r\n\r\n protected getSubEntityFilter(): SubEntityFilter | undefined { return undefined; }\r\n\r\n protected async pickSubEntities(id: Id64String, boresite: Ray3d, maxFace: number, maxEdge: number, maxVertex: number, maxDistance: number, hiddenEdgesVisible: boolean, filter?: SubEntityFilter): Promise<SubEntityLocationProps[] | undefined> {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const opts: LocateSubEntityProps = {\r\n maxFace,\r\n maxEdge,\r\n maxVertex,\r\n maxDistance,\r\n hiddenEdgesVisible,\r\n filter,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"locateSubEntities\", id, boresite.origin, boresite.direction, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined> {\r\n const vp = ev.viewport;\r\n if (undefined === vp)\r\n return undefined;\r\n\r\n const maxFace = this.getMaximumSubEntityHits(SubEntityType.Face);\r\n const maxEdge = this.getMaximumSubEntityHits(SubEntityType.Edge);\r\n const maxVertex = this.getMaximumSubEntityHits(SubEntityType.Vertex);\r\n\r\n if (0 === maxFace && 0 === maxEdge && 0 === maxVertex)\r\n return undefined;\r\n\r\n const aperture = this.getLocateAperture(ev);\r\n const maxDistance = this.getMaxRayDistance(ev, aperture);\r\n const spacePoint = this.getRayOrigin(ev);\r\n const boresite = AccuDrawHintBuilder.getBoresite(spacePoint, vp);\r\n const hiddenEdgesVisible = this.wantHiddenEdges(vp);\r\n const filter = this.getSubEntityFilter();\r\n\r\n let hits = await this.pickSubEntities(id, boresite, maxFace, maxEdge, maxVertex, maxDistance, hiddenEdgesVisible, filter);\r\n\r\n // NOTE: Remove erroneous edge/vertex hits in perspective views by checking real xy distance to hit point...\r\n if (undefined === hits || !vp.isCameraOn)\r\n return hits;\r\n\r\n if (maxEdge > 0 && hits.length > 1) {\r\n const edgeApertureSquared = (aperture * aperture);\r\n const vertexApertureSquared = ((aperture * 2.0) * (aperture * 2.0));\r\n\r\n const e2 = Math.pow(aperture, 2);\r\n const v2 = Math.pow(aperture * 2.0, 2);\r\n\r\n if (e2 !== edgeApertureSquared || v2 !== vertexApertureSquared)\r\n return hits;\r\n\r\n const rayOrigin = vp.worldToView(boresite.origin);\r\n\r\n hits = hits.filter((hit) => {\r\n if (SubEntityType.Face === hit.subEntity.type)\r\n return true;\r\n\r\n const hitPoint = vp.worldToView(Point3d.fromJSON(hit.point));\r\n const distance = hitPoint.distanceSquaredXY(rayOrigin);\r\n\r\n return (distance <= (SubEntityType.Edge === hit.subEntity.type ? edgeApertureSquared : vertexApertureSquared));\r\n });\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n protected async createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData> {\r\n const data = new SubEntityData(hit.subEntity);\r\n const chordTolerance = (this.targetView ? computeChordToleranceFromPoint(this.targetView, Point3d.fromJSON(hit.point)) : undefined);\r\n\r\n await this.createSubEntityGraphic(id, data, chordTolerance);\r\n\r\n return data;\r\n }\r\n\r\n /** Append specified sub-entity to accepted array. */\r\n protected async addSubEntity(id: Id64String, props: SubEntityLocationProps): Promise<void> {\r\n this._acceptedSubEntities.push(await this.createSubEntityData(id, props));\r\n }\r\n\r\n /** Remove specified sub-entity from accepted array, or pop last sub-entity if undefined. */\r\n protected async removeSubEntity(_id: Id64String, props?: SubEntityLocationProps): Promise<void> {\r\n if (undefined !== props)\r\n this._acceptedSubEntities = this._acceptedSubEntities.filter((entry) => !isSameSubEntity(entry.props, props.subEntity));\r\n else\r\n this._acceptedSubEntities.pop();\r\n }\r\n\r\n /** Locate sub-entities for the most recently added (last) agenda entry. Tool sub-classes that wish to identity\r\n * sub-entities from multiple elements are responsible for maintaining the sub-entities per-element.\r\n */\r\n protected async doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean> {\r\n if (this.agenda.isEmpty || undefined === ev.viewport)\r\n return false;\r\n\r\n const id = this.agenda.elements[this.agenda.length - 1];\r\n\r\n if (newSearch) {\r\n this._locatedSubEntities = await this.doPickSubEntities(id, ev);\r\n if (undefined === this._locatedSubEntities || 0 === this._locatedSubEntities.length)\r\n return false;\r\n\r\n /** NOTE: Set last button location to point on sub-entity when not snapping.\r\n * If dynamics are enabled on this event, onDynamicFrame is called with this location.\r\n */\r\n if (CoordSource.ElemSnap !== ev.coordsFrom) {\r\n ev.point.setFrom(Point3d.fromJSON(this._locatedSubEntities[0].point));\r\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\r\n }\r\n } else {\r\n await this.removeSubEntity(id);\r\n }\r\n\r\n const hit = this._locatedSubEntities?.shift();\r\n if (undefined !== hit) {\r\n if (undefined === this._acceptedSubEntities.find((entry) => isSameSubEntity(entry.props, hit.subEntity)))\r\n await this.addSubEntity(id, hit);\r\n else if (this.allowSubEntityControlDeselect)\r\n await this.removeSubEntity(id, hit);\r\n }\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n protected override async chooseNextHit(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (!this.haveAcceptedSubEntities)\r\n return super.chooseNextHit(ev);\r\n\r\n if (!this.allowSubEntitySelectNext) {\r\n await this.onReinitialize(); // Don't cycle through hits after starting dynamics...\r\n } else {\r\n await this.doLocateSubEntity(ev, false);\r\n if (!this.haveAcceptedSubEntities)\r\n await this.onReinitialize();\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n protected get wantAdditionalSubEntities(): boolean {\r\n return (this._acceptedSubEntities.length < this.requiredSubEntityCount || (this.allowSubEntityControlSelect && this.isControlDown));\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n if (this.wantAdditionalSubEntities) {\r\n await this.doLocateSubEntity(ev, true);\r\n\r\n if (this.wantAdditionalSubEntities) {\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.clearCurrentSubEntity();\r\n }\r\n\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected getCurrentElement(): Id64String | undefined {\r\n if (!this.agenda.isEmpty)\r\n return this.agenda.elements[this.agenda.length - 1];\r\n\r\n const hit = IModelApp.accuSnap.currHit;\r\n return (undefined !== hit && hit.isElementHit ? hit.sourceId : undefined);\r\n }\r\n\r\n protected clearCurrentSubEntity(): void {\r\n if (undefined === this._currentSubEntity)\r\n return;\r\n this._currentSubEntity.cleanupGraphic();\r\n this._currentSubEntity = undefined;\r\n }\r\n\r\n protected async setCurrentSubEntity(id: Id64String, hit: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\r\n if (undefined === this._currentSubEntity)\r\n this._currentSubEntity = new SubEntityData(hit.subEntity);\r\n else\r\n this._currentSubEntity.props = hit.subEntity;\r\n\r\n return this.createSubEntityGraphic(id, this._currentSubEntity, chordTolerance);\r\n }\r\n\r\n protected async changeCurrentSubEntity(id?: Id64String, current?: SubEntityLocationProps, chordTolerance?: number): Promise<boolean> {\r\n if (undefined === id || undefined === current) {\r\n if (undefined === this._currentSubEntity || !this._currentSubEntity.hasGraphic)\r\n return false;\r\n this._currentSubEntity.cleanupGraphic();\r\n return true;\r\n }\r\n\r\n if (undefined !== this._currentSubEntity && this._currentSubEntity.hasGraphic && this._currentSubEntity.isSame(current.subEntity))\r\n return false;\r\n\r\n return this.setCurrentSubEntity(id, current, chordTolerance);\r\n }\r\n\r\n protected async updateCurrentSubEntity(ev: BeButtonEvent): Promise<boolean> {\r\n if (undefined === ev.viewport)\r\n return false;\r\n\r\n const id = this.wantAdditionalSubEntities ? this.getCurrentElement() : undefined;\r\n if (undefined === id)\r\n return this.changeCurrentSubEntity();\r\n\r\n const current = await this.doPickSubEntities(id, ev);\r\n const chordTolerance = current ? computeChordToleranceFromPoint(ev.viewport, Point3d.fromJSON(current[0].point)) : 0.0;\r\n\r\n if (!await this.changeCurrentSubEntity(id, current ? current[0] : undefined, chordTolerance))\r\n return false;\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n return true;\r\n }\r\n\r\n protected async createSubEntityGraphic(id: Id64String, data: SubEntityData, chordTolerance?: number): Promise<boolean> {\r\n try {\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: true,\r\n wantRange: true,\r\n wantAppearance: true,\r\n chordTolerance,\r\n };\r\n\r\n data.chordTolerance = chordTolerance;\r\n data.geometry = await ElementGeometryCacheTool.callCommand(\"getSubEntityGeometry\", id, data.props, opts);\r\n\r\n return await data.createGraphic(this.iModel);\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n protected override async updateGraphic(ev: BeButtonEvent, isDynamics: boolean): Promise<void> {\r\n if (isDynamics)\r\n return super.updateGraphic(ev, isDynamics);\r\n\r\n await this.updateCurrentSubEntity(ev);\r\n }\r\n\r\n protected override async getGraphicData(ev: BeButtonEvent): Promise<Uint8Array | undefined> {\r\n const result = await this.applyAgendaOperation(ev, false);\r\n return result?.graphic;\r\n }\r\n\r\n protected async applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined> { return undefined; }\r\n\r\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation(ev, true);\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public override async onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<EventHandled> {\r\n if (EventHandled.Yes === await super.onModifierKeyTransition(wentDown, modifier, event))\r\n return EventHandled.Yes;\r\n\r\n if (BeModifierKeys.Control !== modifier)\r\n return EventHandled.No;\r\n\r\n if (IModelApp.toolAdmin.isLocateCircleOn === this.wantAdditionalSubEntities)\r\n return EventHandled.No;\r\n\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.Yes;\r\n }\r\n\r\n public override changeLocateState(enableLocate: boolean, enableSnap?: boolean, cursor?: string, coordLockOvr?: CoordinateLockOverrides): void {\r\n super.changeLocateState(enableLocate, enableSnap, cursor, coordLockOvr);\r\n\r\n // Keep showing locate circle when identifing sub-entities even if done locating elements...\r\n if (!IModelApp.toolAdmin.isLocateCircleOn && this.wantAdditionalSubEntities)\r\n IModelApp.toolAdmin.setLocateCircleOn(true);\r\n }\r\n\r\n protected override get shouldEnableSnap(): boolean {\r\n if (this.isSelectByPoints || !this.wantAccuSnap)\r\n return false;\r\n\r\n if (this.isDynamicsStarted)\r\n return true;\r\n\r\n const isCtrlSelect = (this.isControlDown && (this.controlKeyContinuesSelection || this.allowSubEntityControlSelect));\r\n\r\n if (isCtrlSelect || this.wantAdditionalElements || this.wantAdditionalSubEntities)\r\n return this.wantSubEntitySnap;\r\n\r\n return !this.wantSubEntitySnap;\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 clearSubEntityGraphics(): void {\r\n if (undefined !== this._currentSubEntity)\r\n this._currentSubEntity.cleanupGraphic();\r\n this._acceptedSubEntities.forEach((entry) => { entry.cleanupGraphic(); });\r\n }\r\n\r\n public override async onCleanup(): Promise<void> {\r\n this.clearSubEntityGraphics();\r\n return super.onCleanup();\r\n }\r\n}\r\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Id64String } from "@itwin/core-bentley";
|
|
5
5
|
import { BooleanMode, ChamferMode, ElementGeometryCacheFilter, ElementGeometryResultProps, SubEntityFilter, SubEntityLocationProps, SubEntityProps, SubEntityType } from "@itwin/editor-common";
|
|
6
|
-
import { Point3d, Vector3d, XYZProps } from "@itwin/core-geometry";
|
|
6
|
+
import { Matrix3d, Point3d, Vector3d, XYZProps } from "@itwin/core-geometry";
|
|
7
7
|
import { BeButtonEvent, DecorateContext, DynamicsContext, EventHandled, HitDetail } from "@itwin/core-frontend";
|
|
8
8
|
import { ElementGeometryCacheTool, LocateSubEntityTool, SubEntityData } from "./ElementGeometryTool";
|
|
9
9
|
/** @alpha Base class for tools that perform boolean operations on a set of elements. */
|
|
@@ -195,7 +195,7 @@ export declare class ImprintSolidElementsTool extends LocateSubEntityTool {
|
|
|
195
195
|
protected setupAccuDraw(): void;
|
|
196
196
|
onRestartTool(): Promise<void>;
|
|
197
197
|
}
|
|
198
|
-
/** @alpha
|
|
198
|
+
/** @alpha Base class for tools to identify edges of solids and surfaces and apply blends. */
|
|
199
199
|
export declare abstract class BlendEdgesTool extends LocateSubEntityTool {
|
|
200
200
|
protected propagateSmooth: boolean;
|
|
201
201
|
protected wantSubEntityType(type: SubEntityType): boolean;
|
|
@@ -225,34 +225,46 @@ export declare class ChamferEdgesTool extends BlendEdgesTool {
|
|
|
225
225
|
protected applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
226
226
|
onRestartTool(): Promise<void>;
|
|
227
227
|
}
|
|
228
|
+
/** @alpha */
|
|
229
|
+
export declare class ProfileLocationData {
|
|
230
|
+
point: Point3d;
|
|
231
|
+
orientation: Vector3d | Matrix3d;
|
|
232
|
+
constructor(point: Point3d, orientation: Vector3d | Matrix3d);
|
|
233
|
+
}
|
|
234
|
+
/** @alpha Base class for picking profiles (open paths and regions) or faces of solids. */
|
|
235
|
+
export declare abstract class LocateFaceOrProfileTool extends LocateSubEntityTool {
|
|
236
|
+
protected get wantGeometrySummary(): boolean;
|
|
237
|
+
protected wantSubEntityType(type: SubEntityType): boolean;
|
|
238
|
+
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
239
|
+
protected doPickSubEntities(id: Id64String, ev: BeButtonEvent): Promise<SubEntityLocationProps[] | undefined>;
|
|
240
|
+
protected createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData>;
|
|
241
|
+
protected drawSubEntity(context: DecorateContext, subEntity: SubEntityData, accepted: boolean): void;
|
|
242
|
+
protected drawAcceptedSubEntities(context: DecorateContext): void;
|
|
243
|
+
}
|
|
228
244
|
/** @alpha Identify faces of solids and surfaces to translate. */
|
|
229
|
-
export declare class SweepFacesTool extends
|
|
245
|
+
export declare class SweepFacesTool extends LocateFaceOrProfileTool {
|
|
230
246
|
static toolId: string;
|
|
231
247
|
static iconSpec: string;
|
|
248
|
+
protected get wantDynamics(): boolean;
|
|
249
|
+
protected get wantAccuSnap(): boolean;
|
|
250
|
+
protected get wantSubEntitySnap(): boolean;
|
|
232
251
|
protected useDistance: boolean;
|
|
233
252
|
protected distance: number;
|
|
234
253
|
protected addSmoothFaces: boolean;
|
|
235
|
-
protected get wantDynamics(): boolean;
|
|
236
|
-
protected get wantAccuSnap(): boolean;
|
|
237
|
-
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
238
|
-
protected createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData>;
|
|
239
|
-
protected drawAcceptedSubEntities(context: DecorateContext): void;
|
|
240
254
|
protected getSmoothFaces(id: Id64String, face: SubEntityProps): Promise<SubEntityProps[] | undefined>;
|
|
241
255
|
protected applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
242
256
|
protected setupAccuDraw(): void;
|
|
243
257
|
onRestartTool(): Promise<void>;
|
|
244
258
|
}
|
|
245
259
|
/** @alpha Identify faces of solids and surfaces to revolve. */
|
|
246
|
-
export declare class SpinFacesTool extends
|
|
260
|
+
export declare class SpinFacesTool extends LocateFaceOrProfileTool {
|
|
247
261
|
static toolId: string;
|
|
248
262
|
static iconSpec: string;
|
|
249
|
-
protected points: Point3d[];
|
|
250
263
|
protected sweep: number;
|
|
264
|
+
protected points: Point3d[];
|
|
251
265
|
protected get wantDynamics(): boolean;
|
|
252
266
|
protected get wantAccuSnap(): boolean;
|
|
253
|
-
protected get
|
|
254
|
-
protected getSubEntityFilter(): SubEntityFilter | undefined;
|
|
255
|
-
protected createSubEntityData(id: Id64String, hit: SubEntityLocationProps): Promise<SubEntityData>;
|
|
267
|
+
protected get wantSubEntitySnap(): boolean;
|
|
256
268
|
protected applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
257
269
|
onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void;
|
|
258
270
|
protected gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidModelingTools.d.ts","sourceRoot":"","sources":["../../src/SolidModelingTools.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAmB,WAAW,
|
|
1
|
+
{"version":3,"file":"SolidModelingTools.d.ts","sourceRoot":"","sources":["../../src/SolidModelingTools.ts"],"names":[],"mappings":"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"}
|