UNPKG

@itwin/core-markup

Version:
90 lines 4.28 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module MarkupTools */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MarkupTool = void 0; const core_frontend_1 = require("@itwin/core-frontend"); const Markup_1 = require("./Markup"); /** Base class for all tools that operate on Markup elements. * @public */ class MarkupTool extends core_frontend_1.PrimitiveTool { markup; static toolKey = "MarkupTools:tools.Markup."; requireWriteableTarget() { return false; } isCompatibleViewport(vp, isSelectedViewChange) { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp === core_frontend_1.IModelApp.toolAdmin.markupView); } async onInstall() { if (undefined === Markup_1.MarkupApp.markup) return false; this.markup = Markup_1.MarkupApp.markup; return super.onInstall(); } async onPostInstall() { await super.onPostInstall(); this.setupAndPromptForNextAction(); } async onUnsuspend() { this.showPrompt(); } async onRestartTool() { return this.exitTool(); } showPrompt() { } setupAndPromptForNextAction() { core_frontend_1.IModelApp.toolAdmin.toolState.coordLockOvr = core_frontend_1.CoordinateLockOverrides.All; // Don't adjust point to ACS or grid... this.showPrompt(); } outputMarkupPrompt(msg) { core_frontend_1.IModelApp.notifications.outputPromptByKey(MarkupTool.toolKey + msg); } async onTouchMoveStart(ev, startEv) { if (startEv.isSingleTouch) await core_frontend_1.IModelApp.toolAdmin.convertTouchMoveStartToButtonDownAndMotion(startEv, ev); return core_frontend_1.EventHandled.Yes; // View tools are not allowed during redlining; use touch events to create markup and don't pass event to IdleTool... } async onTouchMove(ev) { return core_frontend_1.IModelApp.toolAdmin.convertTouchMoveToMotion(ev); } async onTouchComplete(ev) { return core_frontend_1.IModelApp.toolAdmin.convertTouchEndToButtonUp(ev); } async onTouchCancel(ev) { return core_frontend_1.IModelApp.toolAdmin.convertTouchEndToButtonUp(ev, core_frontend_1.BeButton.Reset); } async undoPreviousStep() { if (await this.onUndoPreviousStep()) // first see if this tool has an "oops" operation. return true; // yes, we're done this.markup.undo.doUndo(); // otherwise undo the last change by previous tools return true; } async redoPreviousStep() { if (await this.onRedoPreviousStep()) return true; this.markup.undo.doRedo(); return true; } /** Find the topmost MarkupElement at the specified point in the markup view. * @param pt the point in view coordinates * @returns The topmost element, or undefined if no elements under pt. */ pickElement(pt) { const markup = this.markup; const rect = markup.markupDiv.getBoundingClientRect(); const node = document.elementFromPoint(pt.x + rect.left, pt.y + rect.top); if (!node || !node.instance) return undefined; const el = node.instance; return el.getChildOrGroupOf(markup.svgMarkup); } setCurrentStyle(element, canBeFilled) { element.css(Markup_1.MarkupApp.props.active.element); if (!canBeFilled) element.css({ fill: "none" }); } setCurrentTextStyle(element) { element.css(Markup_1.MarkupApp.props.active.text); } /** @internal */ createBoxedText(g, text) { const boxedText = g.group().addClass(Markup_1.MarkupApp.boxedTextClass); const outline = text.getOutline(3); this.setCurrentStyle(outline, true); outline.css({ "stroke-width": 1 }); outline.addTo(boxedText); text.addTo(boxedText); // make sure the text is on top return boxedText; } } exports.MarkupTool = MarkupTool; //# sourceMappingURL=MarkupTool.js.map