@itwin/core-markup
Version:
iTwin.js markup package
90 lines • 4.28 kB
JavaScript
;
/*---------------------------------------------------------------------------------------------
* 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