@itwin/editor-frontend 3.0.0-dev.94 → 3.0.0-extension.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/CreateElementTool.js +1 -1
- package/lib/cjs/CreateElementTool.js.map +1 -1
- package/lib/cjs/EditTool.d.ts.map +1 -1
- package/lib/cjs/EditTool.js +5 -0
- package/lib/cjs/EditTool.js.map +1 -1
- package/lib/cjs/ElementGeometryTool.d.ts +64 -5
- package/lib/cjs/ElementGeometryTool.d.ts.map +1 -1
- package/lib/cjs/ElementGeometryTool.js +173 -8
- package/lib/cjs/ElementGeometryTool.js.map +1 -1
- package/lib/esm/CreateElementTool.js +1 -1
- package/lib/esm/CreateElementTool.js.map +1 -1
- package/lib/esm/EditTool.d.ts.map +1 -1
- package/lib/esm/EditTool.js +6 -1
- package/lib/esm/EditTool.js.map +1 -1
- package/lib/esm/ElementGeometryTool.d.ts +64 -5
- package/lib/esm/ElementGeometryTool.d.ts.map +1 -1
- package/lib/esm/ElementGeometryTool.js +167 -8
- package/lib/esm/ElementGeometryTool.js.map +1 -1
- package/lib/public/locales/en/Editor.json +20 -0
- package/package.json +12 -12
|
@@ -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, Id64String } from \"@itwin/core-bentley\";\r\nimport { editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, LocateSubEntityProps, OffsetFacesProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from \"@itwin/editor-common\";\r\nimport { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from \"@itwin/core-common\";\r\nimport { Geometry, Point3d, Range3d, Ray3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { AccuDrawHintBuilder, BeButtonEvent, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranch, GraphicBranchOptions, GraphicType, HitDetail, IModelApp, IModelConnection, InputSource, LocateResponse, readElementGraphics, RenderGraphicOwner, 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 class SubEntityData {\r\n public info?: SubEntityProps;\r\n public geom?: SubEntityGeometryProps;\r\n\r\n protected _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n\r\n public isSame(other: SubEntityProps): boolean {\r\n if (undefined === this.info)\r\n return false;\r\n if (this.info.index !== other.index)\r\n return false;\r\n if (this.info.type !== other.type)\r\n return false;\r\n if (this.info.id !== other.id)\r\n return false;\r\n return true;\r\n }\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.info?.type) {\r\n case SubEntityType.Face:\r\n break;\r\n case SubEntityType.Edge:\r\n const edgeWeight = accepted ? 5 : 3;\r\n weight = this.geom?.appearance?.weight ? Math.min(this.geom.appearance.weight + edgeWeight, 31) : edgeWeight;\r\n break;\r\n case SubEntityType.Vertex:\r\n const vertexWeight = accepted ? 12 : 10;\r\n weight = this.geom?.appearance?.weight ? Math.min(this.geom.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.geom?.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.geom.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 appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.getAppearance(context.viewport, accepted));\r\n });\r\n\r\n const opts: GraphicBranchOptions = { appearanceProvider };\r\n\r\n const range = (this.geom?.range ? Range3d.fromJSON(this.geom.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 this._graphicsProvider.addDecoration(context, GraphicType.Scene, offsetTrans, opts);\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 | undefined;\r\n protected _firstResult = true;\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 // TODO: This looks nice as long as ViewFlags.transparency is on...\r\n protected get agendaAppearance(): FeatureAppearance { return FeatureAppearance.fromTransparency(0.90); }\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 app = this.agendaAppearance;\r\n this.agenda.elements.forEach((id) => { overrides.overrideElement(id, app); });\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\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 if (!hit.isElementHit)\r\n return false;\r\n\r\n let accept = this._checkedIds.get(hit.sourceId);\r\n\r\n if (undefined === accept) {\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n accept = await ElementGeometryCacheTool.callCommand(\"createElementGeometryCache\", hit.sourceId, this.geometryCacheFilter);\r\n } catch (err) {\r\n accept = false;\r\n }\r\n\r\n this._checkedIds.set(hit.sourceId, accept);\r\n }\r\n\r\n return accept;\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.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 _acceptedSubEntity?: SubEntityLocationProps;\r\n\r\n protected wantSubEntityType(type: SubEntityType) { return SubEntityType.Face === type; }\r\n protected getMaximumSubEntityHits(type: SubEntityType) { return this.wantSubEntityType(type) ? 25 : 0; }\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (!this.allowView(context.viewport))\r\n return;\r\n\r\n if (undefined !== this._currentSubEntity)\r\n this._currentSubEntity.display(context, false);\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 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 boresite = AccuDrawHintBuilder.getBoresite(ev.point, vp);\r\n const hiddenEdgesVisible = vp.viewFlags.hiddenEdgesVisible();\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 doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean> {\r\n if (this.agenda.isEmpty || undefined === ev.viewport)\r\n return false;\r\n\r\n if (newSearch) {\r\n const info = await this.doPickSubEntities(this.agenda.elements[this.agenda.length - 1], ev);\r\n\r\n if (undefined === info)\r\n return false;\r\n\r\n this._acceptedSubEntity = info[0]; // TODO: Save array for reset cyling. Do we need to support multiple elements?\r\n this.clearSubEntityGraphic();\r\n\r\n return true;\r\n }\r\n\r\n this._acceptedSubEntity = undefined;\r\n return true;\r\n }\r\n\r\n protected override async chooseNextHit(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this._acceptedSubEntity)\r\n return super.chooseNextHit(ev);\r\n\r\n await this.doLocateSubEntity(ev, false);\r\n if (undefined === this._acceptedSubEntity)\r\n await this.onReinitialize();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n if (undefined === this._acceptedSubEntity)\r\n await this.doLocateSubEntity(ev, true);\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n if (undefined === this._acceptedSubEntity)\r\n return true;\r\n return super.wantAdditionalInput;\r\n }\r\n\r\n protected async setCurrentSubEntity(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 if (undefined === this._currentSubEntity)\r\n this._currentSubEntity = new SubEntityData();\r\n else\r\n this._currentSubEntity.cleanupGraphic();\r\n\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 this._currentSubEntity.info = current.subEntity;\r\n this._currentSubEntity.geom = await ElementGeometryCacheTool.callCommand(\"getSubEntityGeometry\", id, current.subEntity, opts);\r\n\r\n return this._currentSubEntity.createGraphic(this.iModel);\r\n }\r\n\r\n protected clearSubEntityGraphic(): 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 updateSubEntityGraphic(ev: BeButtonEvent): Promise<boolean> {\r\n if (undefined === ev.viewport)\r\n return false;\r\n\r\n const hit = IModelApp.accuSnap.currHit;\r\n if (undefined === hit || !hit.isElementHit)\r\n return this.setCurrentSubEntity();\r\n\r\n const current = await this.doPickSubEntities(hit.sourceId, ev);\r\n const chordTolerance = current ? computeChordToleranceFromPoint(ev.viewport, Point3d.fromJSON(current[0].point)) : 0.0;\r\n\r\n if (!await this.setCurrentSubEntity(hit.sourceId, 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 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.updateSubEntityGraphic(ev);\r\n }\r\n\r\n protected async applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined> { return undefined; }\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 public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === this._acceptedSubEntity)\r\n return;\r\n\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 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 public override async onCleanup(): Promise<void> {\r\n this.clearSubEntityGraphic();\r\n return super.onCleanup();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces of solids and surfaces to offset. */\r\nexport class OffsetFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"OffsetFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n public override requireWriteableTarget(): boolean { return false; } // TODO: Testing...\r\n\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return undefined !== this._acceptedSubEntity; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || undefined === this._acceptedSubEntity?.point || undefined === this._acceptedSubEntity?.normal)\r\n return undefined;\r\n\r\n const facePt = Point3d.fromJSON(this._acceptedSubEntity.point);\r\n const faceNormal = Vector3d.fromJSON(this._acceptedSubEntity.normal);\r\n const projPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, facePt, faceNormal, ev.viewport);\r\n\r\n if (undefined === projPt)\r\n return undefined;\r\n\r\n const offsetDir = Vector3d.createStartEnd(facePt, projPt);\r\n let offset = offsetDir.magnitude();\r\n\r\n if (offset < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offsetDir.dotProduct(faceNormal) < 0.0)\r\n offset = -offset;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: OffsetFacesProps = { faces: this._acceptedSubEntity.subEntity, distances: offset };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"offsetFaces\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (undefined === this._acceptedSubEntity?.point || undefined === this._acceptedSubEntity?.normal)\r\n return;\r\n\r\n const facePt = Point3d.fromJSON(this._acceptedSubEntity.point);\r\n const faceNormal = Vector3d.fromJSON(this._acceptedSubEntity.normal);\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOriginFixed = true;\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n hints.setModeRectangular();\r\n hints.setOrigin(facePt);\r\n hints.setXAxis2(faceNormal);\r\n hints.sendHints();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\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 { BooleanMode, BooleanOperationProps, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, HollowFacesProps, LocateSubEntityProps, OffsetFacesProps, SewSheetProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from \"@itwin/editor-common\";\r\nimport { FeatureAppearance, FeatureAppearanceProvider, RgbColor } from \"@itwin/core-common\";\r\nimport { Geometry, Point3d, Range3d, Ray3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { AccuDrawHintBuilder, BeButtonEvent, 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 class SubEntityData {\r\n public info?: SubEntityProps;\r\n public geom?: SubEntityGeometryProps;\r\n\r\n protected _graphicsProvider?: ElementGeometryGraphicsProvider;\r\n\r\n public isSame(other: SubEntityProps): boolean {\r\n if (undefined === this.info)\r\n return false;\r\n if (this.info.index !== other.index)\r\n return false;\r\n if (this.info.type !== other.type)\r\n return false;\r\n if (this.info.id !== other.id)\r\n return false;\r\n return true;\r\n }\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.info?.type) {\r\n case SubEntityType.Face:\r\n break;\r\n case SubEntityType.Edge:\r\n const edgeWeight = accepted ? 5 : 3;\r\n weight = this.geom?.appearance?.weight ? Math.min(this.geom.appearance.weight + edgeWeight, 31) : edgeWeight;\r\n break;\r\n case SubEntityType.Vertex:\r\n const vertexWeight = accepted ? 12 : 10;\r\n weight = this.geom?.appearance?.weight ? Math.min(this.geom.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.geom?.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.geom.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 appearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n return app.extendAppearance(this.getAppearance(context.viewport, accepted));\r\n });\r\n\r\n const opts: GraphicBranchOptions = { appearanceProvider };\r\n\r\n const range = (this.geom?.range ? Range3d.fromJSON(this.geom.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 this._graphicsProvider.addDecoration(context, GraphicType.Scene, offsetTrans, opts);\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\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 // TODO: This looks nice as long as ViewFlags.transparency is on...\r\n protected get agendaAppearance(): FeatureAppearance { return FeatureAppearance.fromTransparency(0.90); }\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 app = this.agendaAppearance;\r\n this.agenda.elements.forEach((id) => { overrides.overrideElement(id, app); });\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\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 try {\r\n this._startedCmd = await this.startCommand();\r\n accept = await ElementGeometryCacheTool.callCommand(\"createElementGeometryCache\", id, this.geometryCacheFilter);\r\n } catch (err) {\r\n accept = false;\r\n }\r\n\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 this._graphicsProvider.addGraphic(context);\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 perform boolean operations on a set of elements. */\r\nexport abstract class BooleanOperationTool extends ElementGeometryCacheTool {\r\n protected abstract get mode(): BooleanMode;\r\n protected override get allowSelectionSet(): boolean { return BooleanMode.Subtract !== this.mode; }\r\n protected override get allowDragSelect(): boolean { return BooleanMode.Subtract !== this.mode; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: BooleanMode.Subtract === this.mode && !this.agenda.isEmpty, solids: true, other: false };\r\n }\r\n\r\n protected override async onAgendaModified(): Promise<void> {\r\n // Filter changes to allow surfaces as tools, invalidate cached accept status...\r\n if (BooleanMode.Subtract === this.mode && (this.agenda.isEmpty || 1 === this.agenda.length))\r\n this._checkedIds.clear();\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools: Id64Array = this.agenda.elements.slice(1);\r\n const params: BooleanOperationProps = { mode: this.mode, tools };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"booleanOperation\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean union of solid geometry. */\r\nexport class UniteSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"UniteSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Unite; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new UniteSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean subtract of solid geometry. */\r\nexport class SubtractSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"SubtractSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Subtract; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SubtractSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform boolean intersection of solid geometry. */\r\nexport class IntersectSolidElementsTool extends BooleanOperationTool {\r\n public static override toolId = \"IntersectSolids\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get mode(): BooleanMode { return BooleanMode.Intersect; }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new IntersectSolidElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Perform sew operation on surface geometry. */\r\nexport class SewSheetElementsTool extends ElementGeometryCacheTool {\r\n public static override toolId = \"SewSheets\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get allowSelectionSet(): boolean { return true; }\r\n protected override get allowDragSelect(): boolean { return true; }\r\n protected override get controlKeyContinuesSelection(): boolean { return true; }\r\n protected override get requiredElementCount(): number { return 2; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { parts: true, curves: false, surfaces: true, solids: false, other: false };\r\n }\r\n\r\n protected async applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined> {\r\n if (this.agenda.length < this.requiredElementCount)\r\n return undefined;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const target = this.agenda.elements[0];\r\n const tools: Id64Array = this.agenda.elements.slice(1);\r\n const params: SewSheetProps = { tools };\r\n const opts: ElementGeometryResultOptions = { writeChanges: true };\r\n return await ElementGeometryCacheTool.callCommand(\"sewSheets\", target, params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async processAgenda(_ev: BeButtonEvent): Promise<void> {\r\n const result = await this.applyAgendaOperation();\r\n if (result?.elementId)\r\n await this.saveChanges();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new SewSheetElementsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\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 _acceptedSubEntity?: SubEntityLocationProps;\r\n\r\n protected wantSubEntityType(type: SubEntityType) { return SubEntityType.Face === type; }\r\n protected getMaximumSubEntityHits(type: SubEntityType) { return this.wantSubEntityType(type) ? 25 : 0; }\r\n\r\n protected override get wantAgendaAppearanceOverride(): boolean { return true; }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (!this.allowView(context.viewport))\r\n return;\r\n\r\n if (undefined !== this._currentSubEntity)\r\n this._currentSubEntity.display(context, false);\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 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 boresite = AccuDrawHintBuilder.getBoresite(ev.point, vp);\r\n const hiddenEdgesVisible = vp.viewFlags.hiddenEdgesVisible();\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 doLocateSubEntity(ev: BeButtonEvent, newSearch: boolean): Promise<boolean> {\r\n if (this.agenda.isEmpty || undefined === ev.viewport)\r\n return false;\r\n\r\n if (newSearch) {\r\n const info = await this.doPickSubEntities(this.agenda.elements[this.agenda.length - 1], ev);\r\n\r\n if (undefined === info)\r\n return false;\r\n\r\n this._acceptedSubEntity = info[0]; // TODO: Save array for reset cyling. Do we need to support multiple elements?\r\n this.clearSubEntityGraphic();\r\n\r\n return true;\r\n }\r\n\r\n this._acceptedSubEntity = undefined;\r\n return true;\r\n }\r\n\r\n protected override async chooseNextHit(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this._acceptedSubEntity)\r\n return super.chooseNextHit(ev);\r\n\r\n await this.doLocateSubEntity(ev, false);\r\n if (undefined === this._acceptedSubEntity)\r\n await this.onReinitialize();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n protected override async gatherInput(ev: BeButtonEvent): Promise<EventHandled | undefined> {\r\n if (undefined === this._acceptedSubEntity)\r\n await this.doLocateSubEntity(ev, true);\r\n return super.gatherInput(ev);\r\n }\r\n\r\n protected override get wantAdditionalInput(): boolean {\r\n if (undefined === this._acceptedSubEntity)\r\n return true;\r\n return super.wantAdditionalInput;\r\n }\r\n\r\n protected async setCurrentSubEntity(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 if (undefined === this._currentSubEntity)\r\n this._currentSubEntity = new SubEntityData();\r\n else\r\n this._currentSubEntity.cleanupGraphic();\r\n\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 this._currentSubEntity.info = current.subEntity;\r\n this._currentSubEntity.geom = await ElementGeometryCacheTool.callCommand(\"getSubEntityGeometry\", id, current.subEntity, opts);\r\n\r\n return this._currentSubEntity.createGraphic(this.iModel);\r\n }\r\n\r\n protected clearSubEntityGraphic(): 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 updateSubEntityGraphic(ev: BeButtonEvent): Promise<boolean> {\r\n if (undefined === ev.viewport)\r\n return false;\r\n\r\n const hit = IModelApp.accuSnap.currHit;\r\n if (undefined === hit || !hit.isElementHit)\r\n return this.setCurrentSubEntity();\r\n\r\n const current = await this.doPickSubEntities(hit.sourceId, ev);\r\n const chordTolerance = current ? computeChordToleranceFromPoint(ev.viewport, Point3d.fromJSON(current[0].point)) : 0.0;\r\n\r\n if (!await this.setCurrentSubEntity(hit.sourceId, 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 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.updateSubEntityGraphic(ev);\r\n }\r\n\r\n protected async applyAgendaOperation(_ev: BeButtonEvent, _isAccept: boolean): Promise<ElementGeometryResultProps | undefined> { return undefined; }\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 public override async processAgenda(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === this._acceptedSubEntity)\r\n return;\r\n\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 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 public override async onCleanup(): Promise<void> {\r\n this.clearSubEntityGraphic();\r\n return super.onCleanup();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces of solids and surfaces to offset. */\r\nexport class OffsetFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"OffsetFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n public override requireWriteableTarget(): boolean { return false; } // TODO: Testing...\r\n\r\n protected override get wantDynamics(): boolean { return true; }\r\n protected override get wantAccuSnap(): boolean { return undefined !== this._acceptedSubEntity; }\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: false, surfaces: true, solids: true, other: false };\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || undefined === this._acceptedSubEntity?.point || undefined === this._acceptedSubEntity?.normal)\r\n return undefined;\r\n\r\n const facePt = Point3d.fromJSON(this._acceptedSubEntity.point);\r\n const faceNormal = Vector3d.fromJSON(this._acceptedSubEntity.normal);\r\n const projPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, facePt, faceNormal, ev.viewport);\r\n\r\n if (undefined === projPt)\r\n return undefined;\r\n\r\n const offsetDir = Vector3d.createStartEnd(facePt, projPt);\r\n let offset = offsetDir.magnitude();\r\n\r\n if (offset < Geometry.smallMetricDistance)\r\n return undefined;\r\n\r\n if (offsetDir.dotProduct(faceNormal) < 0.0)\r\n offset = -offset;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: OffsetFacesProps = { faces: this._acceptedSubEntity.subEntity, distances: offset };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"offsetFaces\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override setupAccuDraw(): void {\r\n if (undefined === this._acceptedSubEntity?.point || undefined === this._acceptedSubEntity?.normal)\r\n return;\r\n\r\n const facePt = Point3d.fromJSON(this._acceptedSubEntity.point);\r\n const faceNormal = Vector3d.fromJSON(this._acceptedSubEntity.normal);\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOriginFixed = true;\r\n hints.setLockY = true;\r\n hints.setLockZ = true;\r\n hints.setModeRectangular();\r\n hints.setOrigin(facePt);\r\n hints.setXAxis2(faceNormal);\r\n hints.sendHints();\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new OffsetFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** @alpha Identify faces to offset to hollow solids. */\r\nexport class HollowFacesTool extends LocateSubEntityTool {\r\n public static override toolId = \"HollowFaces\";\r\n public static override iconSpec = \"icon-move\"; // TODO: Need better icon...\r\n\r\n protected override get geometryCacheFilter(): ElementGeometryCacheFilter | undefined {\r\n return { minGeom: 1, maxGeom: 1, parts: true, curves: false, surfaces: false, solids: true, other: false };\r\n }\r\n\r\n protected override async applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined> {\r\n if (undefined === ev.viewport || this.agenda.isEmpty || undefined === this._acceptedSubEntity)\r\n return undefined;\r\n\r\n // TODO: Tool settings for shell thickness and face thickness...\r\n const shellThickness = 0.1;\r\n const faceThickness = 0.0;\r\n\r\n try {\r\n this._startedCmd = await this.startCommand();\r\n const params: HollowFacesProps = { faces: this._acceptedSubEntity.subEntity, distances: faceThickness, defaultDistance: shellThickness };\r\n const opts: ElementGeometryResultOptions = {\r\n wantGraphic: isAccept ? undefined : true,\r\n chordTolerance: computeChordToleranceFromPoint(ev.viewport, ev.point),\r\n requestId: `${this.toolId}:${this.agenda.elements[0]}`,\r\n writeChanges: isAccept ? true : undefined,\r\n };\r\n return await ElementGeometryCacheTool.callCommand(\"hollowFaces\", this.agenda.elements[0], params, opts);\r\n } catch (err) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new HollowFacesTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
|
|
@@ -7,7 +7,7 @@ import { Constant, Point3d, Vector3d } from "@itwin/core-geometry";
|
|
|
7
7
|
import { IModelError, isPlacement3dProps, } from "@itwin/core-common";
|
|
8
8
|
import { CoordSystem, CoreTools, EventHandled, GraphicBranch, IModelApp, PrimitiveTool, readElementGraphics, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, } from "@itwin/core-frontend";
|
|
9
9
|
function computeChordToleranceFromPointAndRadius(vp, center, radius) {
|
|
10
|
-
if (vp.view.
|
|
10
|
+
if (vp.view.is3d() && vp.view.isCameraOn) {
|
|
11
11
|
const nearFrontCenter = vp.getFrustum(CoordSystem.World).frontCenter;
|
|
12
12
|
const toFront = Vector3d.createStartEnd(center, nearFrontCenter);
|
|
13
13
|
const viewZ = vp.rotation.rowZ();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateElementTool.js","sourceRoot":"","sources":["../../src/CreateElementTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Constant, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n DynamicGraphicsRequest2dProps, DynamicGraphicsRequest3dProps, FlatBufferGeometryStream, IModelError, isPlacement3dProps, JsonGeometryStream,\r\n PlacementProps,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n BeButtonEvent, CoordSystem, CoreTools, DynamicsContext, EventHandled, GraphicBranch, IModelApp, IModelConnection, PrimitiveTool,\r\n readElementGraphics, RenderGraphicOwner, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction,\r\n ToolAssistanceSection, Viewport,\r\n} from \"@itwin/core-frontend\";\r\n\r\nfunction computeChordToleranceFromPointAndRadius(vp: Viewport, center: Point3d, radius: number): number {\r\n if (vp.view.isCameraEnabled()) {\r\n const nearFrontCenter = vp.getFrustum(CoordSystem.World).frontCenter;\r\n const toFront = Vector3d.createStartEnd(center, nearFrontCenter);\r\n const viewZ = vp.rotation.rowZ();\r\n\r\n // If the sphere overlaps the near front plane just use near front point. This also handles behind eye conditions.\r\n if (viewZ.dotProduct(toFront) < radius) {\r\n center = nearFrontCenter;\r\n } else {\r\n // Find point on sphere closest to eye.\r\n const toEye = center.unitVectorTo(vp.view.camera.eye);\r\n\r\n // Only if not already behind the eye.\r\n if (toEye) {\r\n toEye.scaleInPlace(radius);\r\n center.addInPlace(toEye);\r\n }\r\n }\r\n }\r\n\r\n const viewPt = vp.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\r\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\r\n const pixelSize = vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\r\n\r\n // Return size of a physical pixel in meters.\r\n return (0.0 !== pixelSize ? vp.target.adjustPixelSizeForLOD(pixelSize) : 0.001);\r\n}\r\n\r\n/** @alpha */\r\nexport function computeChordToleranceFromPoint(vp: Viewport, pt: Point3d, radius?: number): number {\r\n return computeChordToleranceFromPointAndRadius(vp, pt, radius ? radius : Constant.oneCentimeter);\r\n}\r\n\r\n/** @alpha */\r\nexport function computeChordToleranceFromRange(vp: Viewport, range: Range3d): number {\r\n return computeChordToleranceFromPointAndRadius(vp, range.center, 0.5 * range.low.distance(range.high));\r\n}\r\n\r\n/** @alpha */\r\nexport class DynamicGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly prefix: string;\r\n public graphic?: RenderGraphicOwner;\r\n /** Current request for graphic */\r\n private _graphicPromise?: Promise<boolean>;\r\n /** Optional element id generated graphics will be associated to */\r\n public elementId?: Id64String;\r\n /** Optional model id generated graphics will be associated to */\r\n public modelId?: Id64String;\r\n /** Chord tolerance to use to stroke the element's geometry in meters */\r\n public chordTolerance = 0.001;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n }\r\n\r\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\r\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\r\n\r\n private async createRequest(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<RenderGraphicOwner | undefined> {\r\n let graphicData;\r\n let is3d;\r\n\r\n if (is3d = isPlacement3dProps(placement)) {\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\r\n elementId: this.elementId,\r\n modelId: this.modelId,\r\n toleranceLog10: this.getToleranceLog10(),\r\n type: \"3d\",\r\n placement,\r\n categoryId,\r\n geometry,\r\n };\r\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n is3d = true;\r\n } else {\r\n const requestProps: DynamicGraphicsRequest2dProps = {\r\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\r\n elementId: this.elementId,\r\n modelId: this.modelId,\r\n toleranceLog10: this.getToleranceLog10(),\r\n type: \"2d\",\r\n placement,\r\n categoryId,\r\n geometry,\r\n };\r\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n }\r\n\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, this.modelId ? this.modelId : Id64.invalid, is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return IModelApp.renderSystem.createGraphicOwner(graphic);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied geometry and placement.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public async createGraphic(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<boolean> {\r\n try {\r\n const graphic = await this.createRequest(categoryId, placement, geometry);\r\n this.cleanupGraphic();\r\n return (undefined !== (this.graphic = graphic));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied geometry and trigger a dynamic update upon fulfillment.\r\n * @note May be useful to update a dynamic preview outside of normal button and motion events, ex. modifier key change.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public createGraphicAndUpdateDynamics(ev: BeButtonEvent, categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): void {\r\n const promise = this._graphicPromise = this.createGraphic(categoryId, placement, geometry);\r\n\r\n promise.then(() => {\r\n if (promise !== this._graphicPromise)\r\n return; // abandoned this request...\r\n\r\n IModelApp.toolAdmin.updateDynamics(ev);\r\n }).catch((_) => { });\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): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n if (undefined === transform) {\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.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha Placement tool base class for creating new elements. */\r\nexport abstract class CreateElementTool extends PrimitiveTool {\r\n public get targetCategory(): Id64String {\r\n if (IModelApp.toolAdmin.activeSettings.category === undefined)\r\n throw new IModelError(IModelStatus.InvalidCategory, \"\");\r\n return IModelApp.toolAdmin.activeSettings.category;\r\n }\r\n\r\n public override get targetModelId(): Id64String {\r\n if (IModelApp.toolAdmin.activeSettings.model === undefined)\r\n throw new IModelError(IModelStatus.BadModel, \"\");\r\n return IModelApp.toolAdmin.activeSettings.model;\r\n }\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean {\r\n if (IModelApp.toolAdmin.activeSettings.model === undefined)\r\n return false;\r\n return super.isCompatibleViewport(vp, isSelectedViewChange);\r\n }\r\n\r\n /** Whether [[setupAndPromptForNextAction]] should call [[AccuSnap.enableSnap]] for current tool phase.\r\n * @return true to enable snapping to elements.\r\n */\r\n protected get wantAccuSnap(): boolean { return false; }\r\n\r\n /** Whether to automatically start element dynamics on button event.\r\n * @return true if tool will implement [[InteractiveTool.onDynamicFrame]] to show element dynamics.\r\n */\r\n protected get wantDynamics(): boolean { return false; }\r\n\r\n /** Whether tool is ready to insert the new element.\r\n * @return true to call [[createElement]].\r\n */\r\n protected isComplete(_ev: BeButtonEvent): boolean { return false; }\r\n\r\n /** Insert new element and call [[saveChanges]] */\r\n protected abstract createElement(): Promise<void>;\r\n\r\n /** Orchestrates advancing the internal state of the tool on a data button event.\r\n * - Gather input: Initiates element dynamics and accepts additional points as required.\r\n * - Complete operation: Create new element, restart or exit tool.\r\n * @returns EventHandled.Yes if onReinitialize was called to restart or exit tool.\r\n */\r\n protected async processDataButton(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this.isComplete(ev)) {\r\n await this.createElement();\r\n await this.onReinitialize();\r\n\r\n return EventHandled.Yes;\r\n }\r\n\r\n this.setupAndPromptForNextAction();\r\n\r\n if (!this.isDynamicsStarted && this.wantDynamics)\r\n this.beginDynamics();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n return this.processDataButton(ev);\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** Setup initial tool state, prompts, etc. */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** Restore tool assistance after no longer being suspended by either a [[ViewTool]] or [[InputCollector]]. */\r\n public override async onUnsuspend() {\r\n this.provideToolAssistance();\r\n }\r\n\r\n /** Setup auto-locate, AccuSnap, AccuDraw, and supply tool assistance. */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(this.wantAccuSnap);\r\n this.provideToolAssistance();\r\n }\r\n\r\n /** Sub-classes should override to provide tool specific instructions. */\r\n protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n const mainMsg = \"ElementSet.Prompts.IdentifyPoint\";\r\n const leftMsg = \"ElementSet.Inputs.AcceptPoint\";\r\n const rightMsg = \"ElementSet.Inputs.Cancel\";\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (undefined !== additionalInstr) {\r\n for (const instr of additionalInstr) {\r\n if (ToolAssistanceInputMethod.Touch === instr.inputMethod)\r\n touchInstructions.push(instr);\r\n else\r\n mouseInstructions.push(instr);\r\n }\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, undefined !== mainInstrText ? mainInstrText : CoreTools.translate(mainMsg));\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CreateElementTool.js","sourceRoot":"","sources":["../../src/CreateElementTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Constant, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n DynamicGraphicsRequest2dProps, DynamicGraphicsRequest3dProps, FlatBufferGeometryStream, IModelError, isPlacement3dProps, JsonGeometryStream,\r\n PlacementProps,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n BeButtonEvent, CoordSystem, CoreTools, DynamicsContext, EventHandled, GraphicBranch, IModelApp, IModelConnection, PrimitiveTool,\r\n readElementGraphics, RenderGraphicOwner, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction,\r\n ToolAssistanceSection, Viewport,\r\n} from \"@itwin/core-frontend\";\r\n\r\nfunction computeChordToleranceFromPointAndRadius(vp: Viewport, center: Point3d, radius: number): number {\r\n if (vp.view.is3d() && vp.view.isCameraOn) {\r\n const nearFrontCenter = vp.getFrustum(CoordSystem.World).frontCenter;\r\n const toFront = Vector3d.createStartEnd(center, nearFrontCenter);\r\n const viewZ = vp.rotation.rowZ();\r\n\r\n // If the sphere overlaps the near front plane just use near front point. This also handles behind eye conditions.\r\n if (viewZ.dotProduct(toFront) < radius) {\r\n center = nearFrontCenter;\r\n } else {\r\n // Find point on sphere closest to eye.\r\n const toEye = center.unitVectorTo(vp.view.camera.eye);\r\n\r\n // Only if not already behind the eye.\r\n if (toEye) {\r\n toEye.scaleInPlace(radius);\r\n center.addInPlace(toEye);\r\n }\r\n }\r\n }\r\n\r\n const viewPt = vp.worldToViewMap.transform0.multiplyPoint3dQuietNormalize(center);\r\n const viewPt2 = new Point3d(viewPt.x + 1.0, viewPt.y, viewPt.z);\r\n const pixelSize = vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt).distance(vp.worldToViewMap.transform1.multiplyPoint3dQuietNormalize(viewPt2));\r\n\r\n // Return size of a physical pixel in meters.\r\n return (0.0 !== pixelSize ? vp.target.adjustPixelSizeForLOD(pixelSize) : 0.001);\r\n}\r\n\r\n/** @alpha */\r\nexport function computeChordToleranceFromPoint(vp: Viewport, pt: Point3d, radius?: number): number {\r\n return computeChordToleranceFromPointAndRadius(vp, pt, radius ? radius : Constant.oneCentimeter);\r\n}\r\n\r\n/** @alpha */\r\nexport function computeChordToleranceFromRange(vp: Viewport, range: Range3d): number {\r\n return computeChordToleranceFromPointAndRadius(vp, range.center, 0.5 * range.low.distance(range.high));\r\n}\r\n\r\n/** @alpha */\r\nexport class DynamicGraphicsProvider {\r\n public readonly iModel: IModelConnection;\r\n public readonly prefix: string;\r\n public graphic?: RenderGraphicOwner;\r\n /** Current request for graphic */\r\n private _graphicPromise?: Promise<boolean>;\r\n /** Optional element id generated graphics will be associated to */\r\n public elementId?: Id64String;\r\n /** Optional model id generated graphics will be associated to */\r\n public modelId?: Id64String;\r\n /** Chord tolerance to use to stroke the element's geometry in meters */\r\n public chordTolerance = 0.001;\r\n\r\n constructor(iModel: IModelConnection, prefix: string) {\r\n this.iModel = iModel;\r\n this.prefix = prefix;\r\n }\r\n\r\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\r\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\r\n\r\n private async createRequest(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<RenderGraphicOwner | undefined> {\r\n let graphicData;\r\n let is3d;\r\n\r\n if (is3d = isPlacement3dProps(placement)) {\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\r\n elementId: this.elementId,\r\n modelId: this.modelId,\r\n toleranceLog10: this.getToleranceLog10(),\r\n type: \"3d\",\r\n placement,\r\n categoryId,\r\n geometry,\r\n };\r\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n is3d = true;\r\n } else {\r\n const requestProps: DynamicGraphicsRequest2dProps = {\r\n id: this.getRequestId(this.elementId ? this.elementId : Id64.invalid),\r\n elementId: this.elementId,\r\n modelId: this.modelId,\r\n toleranceLog10: this.getToleranceLog10(),\r\n type: \"2d\",\r\n placement,\r\n categoryId,\r\n geometry,\r\n };\r\n graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\r\n }\r\n\r\n if (undefined === graphicData)\r\n return;\r\n\r\n const graphic = await readElementGraphics(graphicData, this.iModel, this.modelId ? this.modelId : Id64.invalid, is3d, { noFlash: true, noHilite: true });\r\n if (undefined === graphic)\r\n return;\r\n\r\n return IModelApp.renderSystem.createGraphicOwner(graphic);\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied geometry and placement.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public async createGraphic(categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): Promise<boolean> {\r\n try {\r\n const graphic = await this.createRequest(categoryId, placement, geometry);\r\n this.cleanupGraphic();\r\n return (undefined !== (this.graphic = graphic));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Call to request a RenderGraphic for the supplied geometry and trigger a dynamic update upon fulfillment.\r\n * @note May be useful to update a dynamic preview outside of normal button and motion events, ex. modifier key change.\r\n * @see [[cleanupGraphic]] Must be called when the tool exits.\r\n */\r\n public createGraphicAndUpdateDynamics(ev: BeButtonEvent, categoryId: Id64String, placement: PlacementProps, geometry: JsonGeometryStream | FlatBufferGeometryStream): void {\r\n const promise = this._graphicPromise = this.createGraphic(categoryId, placement, geometry);\r\n\r\n promise.then(() => {\r\n if (promise !== this._graphicPromise)\r\n return; // abandoned this request...\r\n\r\n IModelApp.toolAdmin.updateDynamics(ev);\r\n }).catch((_) => { });\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): void {\r\n if (undefined === this.graphic)\r\n return;\r\n\r\n if (undefined === transform) {\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.createBranch(branch, transform);\r\n context.addGraphic(branchGraphic);\r\n }\r\n}\r\n\r\n/** @alpha Placement tool base class for creating new elements. */\r\nexport abstract class CreateElementTool extends PrimitiveTool {\r\n public get targetCategory(): Id64String {\r\n if (IModelApp.toolAdmin.activeSettings.category === undefined)\r\n throw new IModelError(IModelStatus.InvalidCategory, \"\");\r\n return IModelApp.toolAdmin.activeSettings.category;\r\n }\r\n\r\n public override get targetModelId(): Id64String {\r\n if (IModelApp.toolAdmin.activeSettings.model === undefined)\r\n throw new IModelError(IModelStatus.BadModel, \"\");\r\n return IModelApp.toolAdmin.activeSettings.model;\r\n }\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean {\r\n if (IModelApp.toolAdmin.activeSettings.model === undefined)\r\n return false;\r\n return super.isCompatibleViewport(vp, isSelectedViewChange);\r\n }\r\n\r\n /** Whether [[setupAndPromptForNextAction]] should call [[AccuSnap.enableSnap]] for current tool phase.\r\n * @return true to enable snapping to elements.\r\n */\r\n protected get wantAccuSnap(): boolean { return false; }\r\n\r\n /** Whether to automatically start element dynamics on button event.\r\n * @return true if tool will implement [[InteractiveTool.onDynamicFrame]] to show element dynamics.\r\n */\r\n protected get wantDynamics(): boolean { return false; }\r\n\r\n /** Whether tool is ready to insert the new element.\r\n * @return true to call [[createElement]].\r\n */\r\n protected isComplete(_ev: BeButtonEvent): boolean { return false; }\r\n\r\n /** Insert new element and call [[saveChanges]] */\r\n protected abstract createElement(): Promise<void>;\r\n\r\n /** Orchestrates advancing the internal state of the tool on a data button event.\r\n * - Gather input: Initiates element dynamics and accepts additional points as required.\r\n * - Complete operation: Create new element, restart or exit tool.\r\n * @returns EventHandled.Yes if onReinitialize was called to restart or exit tool.\r\n */\r\n protected async processDataButton(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this.isComplete(ev)) {\r\n await this.createElement();\r\n await this.onReinitialize();\r\n\r\n return EventHandled.Yes;\r\n }\r\n\r\n this.setupAndPromptForNextAction();\r\n\r\n if (!this.isDynamicsStarted && this.wantDynamics)\r\n this.beginDynamics();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n return this.processDataButton(ev);\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** Setup initial tool state, prompts, etc. */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** Restore tool assistance after no longer being suspended by either a [[ViewTool]] or [[InputCollector]]. */\r\n public override async onUnsuspend() {\r\n this.provideToolAssistance();\r\n }\r\n\r\n /** Setup auto-locate, AccuSnap, AccuDraw, and supply tool assistance. */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(this.wantAccuSnap);\r\n this.provideToolAssistance();\r\n }\r\n\r\n /** Sub-classes should override to provide tool specific instructions. */\r\n protected provideToolAssistance(mainInstrText?: string, additionalInstr?: ToolAssistanceInstruction[]): void {\r\n const mainMsg = \"ElementSet.Prompts.IdentifyPoint\";\r\n const leftMsg = \"ElementSet.Inputs.AcceptPoint\";\r\n const rightMsg = \"ElementSet.Inputs.Cancel\";\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(leftMsg), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(rightMsg), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (undefined !== additionalInstr) {\r\n for (const instr of additionalInstr) {\r\n if (ToolAssistanceInputMethod.Touch === instr.inputMethod)\r\n touchInstructions.push(instr);\r\n else\r\n mouseInstructions.push(instr);\r\n }\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, undefined !== mainInstrText ? mainInstrText : CoreTools.translate(mainMsg));\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,0FAA0F;IAC1F,4BAA4B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAChD,gEAAgE;IAChE,8BAA8B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,4DAA4D;IAC5D,0BAA0B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/C;AAED,uGAAuG;AACvG,qBAAa,SAAS;IACpB,OAAc,SAAS,SAAY;IACnC,OAAc,KAAK,SAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;WAIjF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"EditTool.d.ts","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,0FAA0F;IAC1F,4BAA4B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAChD,gEAAgE;IAChE,8BAA8B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC,4DAA4D;IAC5D,0BAA0B,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC/C;AAED,uGAAuG;AACvG,qBAAa,SAAS;IACpB,OAAc,SAAS,SAAY;IACnC,OAAc,KAAK,SAAmB;IACtC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;WAEhB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;WAIjF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF,gBAAgB;WACF,SAAS,CAAC,MAAM,EAAE,MAAM;IAEtC;;;;;;OAMG;WACiB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAgFvE"}
|
package/lib/esm/EditTool.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { editorChannel } from "@itwin/editor-common";
|
|
9
9
|
import { IModelApp, IpcApp } from "@itwin/core-frontend";
|
|
10
10
|
import { DeleteElementsTool } from "./DeleteElementsTool";
|
|
11
|
-
import { OffsetFacesTool } from "./ElementGeometryTool";
|
|
11
|
+
import { HollowFacesTool, IntersectSolidElementsTool, OffsetFacesTool, SewSheetElementsTool, SubtractSolidElementsTool, UniteSolidElementsTool } from "./ElementGeometryTool";
|
|
12
12
|
import { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool } from "./ProjectLocation/ProjectExtentsDecoration";
|
|
13
13
|
import { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from "./ProjectLocation/ProjectGeolocation";
|
|
14
14
|
import { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from "./SketchTools";
|
|
@@ -87,6 +87,11 @@ export class EditTools {
|
|
|
87
87
|
if (registerAllTools || (options === null || options === void 0 ? void 0 : options.registerSolidModelingTools)) {
|
|
88
88
|
const tools = [
|
|
89
89
|
OffsetFacesTool,
|
|
90
|
+
HollowFacesTool,
|
|
91
|
+
UniteSolidElementsTool,
|
|
92
|
+
SubtractSolidElementsTool,
|
|
93
|
+
IntersectSolidElementsTool,
|
|
94
|
+
SewSheetElementsTool,
|
|
90
95
|
];
|
|
91
96
|
for (const tool of tools)
|
|
92
97
|
tool.register(this.namespace);
|
package/lib/esm/EditTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { editorChannel } from \"@itwin/editor-common\";\r\nimport { IModelApp, IpcApp } from \"@itwin/core-frontend\";\r\nimport { DeleteElementsTool } from \"./DeleteElementsTool\";\r\nimport { HollowFacesTool, IntersectSolidElementsTool, OffsetFacesTool, SewSheetElementsTool, SubtractSolidElementsTool, UniteSolidElementsTool } from \"./ElementGeometryTool\";\r\nimport { ProjectLocationCancelTool, ProjectLocationHideTool, ProjectLocationSaveTool, ProjectLocationShowTool } from \"./ProjectLocation/ProjectExtentsDecoration\";\r\nimport { ProjectGeolocationMoveTool, ProjectGeolocationNorthTool, ProjectGeolocationPointTool } from \"./ProjectLocation/ProjectGeolocation\";\r\nimport { CreateArcTool, CreateBCurveTool, CreateCircleTool, CreateEllipseTool, CreateLineStringTool, CreateRectangleTool } from \"./SketchTools\";\r\nimport { MoveElementsTool, RotateElementsTool } from \"./TransformElementsTool\";\r\nimport { RedoTool, UndoAllTool, UndoTool } from \"./UndoRedoTool\";\r\n\r\n/** @alpha Options for [[EditTools.initialize]]. */\r\nexport interface EditorOptions {\r\n /** If true, all tools will be registered. */\r\n registerAllTools?: true | undefined;\r\n /** If true, tools for undo/redo will be registered. */\r\n registerUndoRedoTools?: true | undefined;\r\n /** If true, tools for updating the project extents and geolocation will be registered. */\r\n registerProjectLocationTools?: true | undefined;\r\n /** If true, tools for basic manipulation will be registered. */\r\n registerBasicManipulationTools?: true | undefined;\r\n /** If true, tools for sketching will be registered. */\r\n registerSketchTools?: true | undefined;\r\n /** If true, tools for solid modeling will be registered. */\r\n registerSolidModelingTools?: true | undefined;\r\n}\r\n\r\n/** @alpha functions to support PrimitiveTool and InputCollector sub-classes with using EditCommand. */\r\nexport class EditTools {\r\n public static namespace = \"Editor\";\r\n public static tools = \"Editor:tools.\";\r\n private static _initialized = false;\r\n\r\n public static async startCommand<T>(commandId: string, iModelKey: string, ...args: any[]): Promise<T> {\r\n return IpcApp.callIpcChannel(editorChannel, \"startCommand\", commandId, iModelKey, ...args) as Promise<T>;\r\n }\r\n\r\n public static async callCommand(methodName: string, ...args: any[]): Promise<any> {\r\n return IpcApp.callIpcChannel(editorChannel, \"callMethod\", methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static translate(prompt: string) { return IModelApp.localization.getLocalizedString(this.tools + prompt); }\r\n\r\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await EditorTools.initialize();\r\n * ```\r\n */\r\n public static async initialize(options?: EditorOptions): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n // NOTE: We should clear the active command whenever a new PrimitiveTool is installed.\r\n // As tool run/install isn't currently async ToolAdmin.activeToolChanged can't be used at this time.\r\n // The active command will be cleared whenever another edit tool calls startCommand.\r\n this._initialized = true;\r\n\r\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\r\n const registerAllTools = options?.registerAllTools;\r\n\r\n // Register requested tools...\r\n if (registerAllTools || options?.registerUndoRedoTools) {\r\n const tools = [\r\n UndoAllTool,\r\n UndoTool,\r\n RedoTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerProjectLocationTools) {\r\n const tools = [\r\n ProjectLocationShowTool,\r\n ProjectLocationHideTool,\r\n ProjectLocationCancelTool,\r\n ProjectLocationSaveTool,\r\n ProjectGeolocationMoveTool,\r\n ProjectGeolocationPointTool,\r\n ProjectGeolocationNorthTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerBasicManipulationTools) {\r\n const tools = [\r\n DeleteElementsTool,\r\n MoveElementsTool,\r\n RotateElementsTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSketchTools) {\r\n const tools = [\r\n CreateArcTool,\r\n CreateBCurveTool,\r\n CreateCircleTool,\r\n CreateEllipseTool,\r\n CreateLineStringTool,\r\n CreateRectangleTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n if (registerAllTools || options?.registerSolidModelingTools) {\r\n const tools = [\r\n OffsetFacesTool,\r\n HollowFacesTool,\r\n UniteSolidElementsTool,\r\n SubtractSolidElementsTool,\r\n IntersectSolidElementsTool,\r\n SewSheetElementsTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(this.namespace);\r\n }\r\n\r\n return namespacePromise;\r\n }\r\n}\r\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module Editing
|
|
3
3
|
*/
|
|
4
|
-
import { Id64String } from "@itwin/core-bentley";
|
|
5
|
-
import { ElementGeometryCacheFilter, ElementGeometryResultProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from "@itwin/editor-common";
|
|
4
|
+
import { Id64Arg, Id64String } from "@itwin/core-bentley";
|
|
5
|
+
import { BooleanMode, ElementGeometryCacheFilter, ElementGeometryResultProps, SolidModelingCommandIpc, SubEntityFilter, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType } from "@itwin/editor-common";
|
|
6
6
|
import { FeatureAppearance } from "@itwin/core-common";
|
|
7
|
-
import { Ray3d, Transform } from "@itwin/core-geometry";
|
|
8
|
-
import { BeButtonEvent, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranchOptions, GraphicType, HitDetail, IModelConnection, LocateResponse, RenderGraphicOwner, Viewport } from "@itwin/core-frontend";
|
|
7
|
+
import { Point3d, Ray3d, Transform } from "@itwin/core-geometry";
|
|
8
|
+
import { BeButtonEvent, DecorateContext, DynamicsContext, ElementSetTool, EventHandled, FeatureOverrideProvider, FeatureSymbology, GraphicBranchOptions, GraphicType, HitDetail, IModelConnection, LocateResponse, RenderGraphicOwner, SelectionMethod, SelectionSet, Viewport } from "@itwin/core-frontend";
|
|
9
9
|
/** @alpha */
|
|
10
10
|
export declare class ElementGeometryGraphicsProvider {
|
|
11
11
|
readonly iModel: IModelConnection;
|
|
@@ -39,7 +39,7 @@ export declare abstract class ElementGeometryCacheTool extends ElementSetTool im
|
|
|
39
39
|
protected _startedCmd?: string;
|
|
40
40
|
protected readonly _checkedIds: Map<string, boolean>;
|
|
41
41
|
protected _graphicsProvider?: ElementGeometryGraphicsProvider;
|
|
42
|
-
protected _graphicsPending?: true
|
|
42
|
+
protected _graphicsPending?: true;
|
|
43
43
|
protected _firstResult: boolean;
|
|
44
44
|
protected allowView(vp: Viewport): boolean;
|
|
45
45
|
isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean;
|
|
@@ -50,7 +50,12 @@ export declare abstract class ElementGeometryCacheTool extends ElementSetTool im
|
|
|
50
50
|
addFeatureOverrides(overrides: FeatureSymbology.Overrides, _vp: Viewport): void;
|
|
51
51
|
protected updateAgendaAppearanceProvider(drop?: true): void;
|
|
52
52
|
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
53
|
+
protected acceptElementForOperation(id: Id64String): Promise<boolean>;
|
|
53
54
|
protected isElementValidForOperation(hit: HitDetail, out?: LocateResponse): Promise<boolean>;
|
|
55
|
+
protected postFilterIds(arg: Id64Arg): Promise<Id64Arg>;
|
|
56
|
+
protected getGroupIds(id: Id64String): Promise<Id64Arg>;
|
|
57
|
+
protected getSelectionSetCandidates(ss: SelectionSet): Promise<Id64Arg>;
|
|
58
|
+
protected getDragSelectCandidates(vp: Viewport, origin: Point3d, corner: Point3d, method: SelectionMethod, overlap: boolean): Promise<Id64Arg>;
|
|
54
59
|
onDynamicFrame(_ev: BeButtonEvent, context: DynamicsContext): void;
|
|
55
60
|
onMouseMotion(ev: BeButtonEvent): Promise<void>;
|
|
56
61
|
protected getGraphicData(_ev: BeButtonEvent): Promise<Uint8Array | undefined>;
|
|
@@ -63,6 +68,52 @@ export declare abstract class ElementGeometryCacheTool extends ElementSetTool im
|
|
|
63
68
|
onPostInstall(): Promise<void>;
|
|
64
69
|
onCleanup(): Promise<void>;
|
|
65
70
|
}
|
|
71
|
+
/** @alpha Base class for tools that perform boolean operations on a set of elements. */
|
|
72
|
+
export declare abstract class BooleanOperationTool extends ElementGeometryCacheTool {
|
|
73
|
+
protected abstract get mode(): BooleanMode;
|
|
74
|
+
protected get allowSelectionSet(): boolean;
|
|
75
|
+
protected get allowDragSelect(): boolean;
|
|
76
|
+
protected get controlKeyContinuesSelection(): boolean;
|
|
77
|
+
protected get requiredElementCount(): number;
|
|
78
|
+
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
79
|
+
protected onAgendaModified(): Promise<void>;
|
|
80
|
+
protected applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined>;
|
|
81
|
+
processAgenda(_ev: BeButtonEvent): Promise<void>;
|
|
82
|
+
}
|
|
83
|
+
/** @alpha Perform boolean union of solid geometry. */
|
|
84
|
+
export declare class UniteSolidElementsTool extends BooleanOperationTool {
|
|
85
|
+
static toolId: string;
|
|
86
|
+
static iconSpec: string;
|
|
87
|
+
protected get mode(): BooleanMode;
|
|
88
|
+
onRestartTool(): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
/** @alpha Perform boolean subtract of solid geometry. */
|
|
91
|
+
export declare class SubtractSolidElementsTool extends BooleanOperationTool {
|
|
92
|
+
static toolId: string;
|
|
93
|
+
static iconSpec: string;
|
|
94
|
+
protected get mode(): BooleanMode;
|
|
95
|
+
onRestartTool(): Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
/** @alpha Perform boolean intersection of solid geometry. */
|
|
98
|
+
export declare class IntersectSolidElementsTool extends BooleanOperationTool {
|
|
99
|
+
static toolId: string;
|
|
100
|
+
static iconSpec: string;
|
|
101
|
+
protected get mode(): BooleanMode;
|
|
102
|
+
onRestartTool(): Promise<void>;
|
|
103
|
+
}
|
|
104
|
+
/** @alpha Perform sew operation on surface geometry. */
|
|
105
|
+
export declare class SewSheetElementsTool extends ElementGeometryCacheTool {
|
|
106
|
+
static toolId: string;
|
|
107
|
+
static iconSpec: string;
|
|
108
|
+
protected get allowSelectionSet(): boolean;
|
|
109
|
+
protected get allowDragSelect(): boolean;
|
|
110
|
+
protected get controlKeyContinuesSelection(): boolean;
|
|
111
|
+
protected get requiredElementCount(): number;
|
|
112
|
+
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
113
|
+
protected applyAgendaOperation(): Promise<ElementGeometryResultProps | undefined>;
|
|
114
|
+
processAgenda(_ev: BeButtonEvent): Promise<void>;
|
|
115
|
+
onRestartTool(): Promise<void>;
|
|
116
|
+
}
|
|
66
117
|
/** @alpha Base class for tools that need to locate faces, edges, and vertices. */
|
|
67
118
|
export declare abstract class LocateSubEntityTool extends ElementGeometryCacheTool {
|
|
68
119
|
protected _currentSubEntity?: SubEntityData;
|
|
@@ -103,4 +154,12 @@ export declare class OffsetFacesTool extends LocateSubEntityTool {
|
|
|
103
154
|
protected setupAccuDraw(): void;
|
|
104
155
|
onRestartTool(): Promise<void>;
|
|
105
156
|
}
|
|
157
|
+
/** @alpha Identify faces to offset to hollow solids. */
|
|
158
|
+
export declare class HollowFacesTool extends LocateSubEntityTool {
|
|
159
|
+
static toolId: string;
|
|
160
|
+
static iconSpec: string;
|
|
161
|
+
protected get geometryCacheFilter(): ElementGeometryCacheFilter | undefined;
|
|
162
|
+
protected applyAgendaOperation(ev: BeButtonEvent, isAccept: boolean): Promise<ElementGeometryResultProps | undefined>;
|
|
163
|
+
onRestartTool(): Promise<void>;
|
|
164
|
+
}
|
|
106
165
|
//# sourceMappingURL=ElementGeometryTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ElementGeometryTool.d.ts","sourceRoot":"","sources":["../../src/ElementGeometryTool.ts"],"names":[],"mappings":"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"}
|