# CanvasTools-for-PowerAi **Repository Path**: baymin_gitee/CanvasTools-for-PowerAi ## Basic Information - **Project Name**: CanvasTools-for-PowerAi - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-12 - **Last Updated**: 2020-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CanvasTools librarary for VoTT `CanvasTools` is one of the UI modules used in the [VoTT project](https://github.com/Microsoft/VoTT/). The library impelements the following core features: * Region (box, point, polyline & polygon) selection & manipulation * Filters pipeline for underlaying canvas element * Toolbar for all available tools ## Dependencies * `CanvasTools` heavily uses the [Snap.Svg](https://github.com/adobe-webplatform/Snap.svg) library. In the webpack-eged version it is bundled with `CanvasTools` into one `ct.js` file, including also styles. * Current version of the library depends on some features (e.g., masks-support in SVG) that are not fully cross-browser, but are targeting Electron (Chromium). ## How to use ### Install npm package Install package from npm: ```node npm i powerai-ct ``` The package structure: ```txt dist/ ct.d.ts -- bundled typings ct.dev.js -- webpack bundle for development (incl source map) ct.js -- webpack bundle for production ({tsc->commonjs, snapsvg, styles} -> umd) ct.js.map -- source map for ct.js ct.min.js -- webpack minimized bundle for production ct.min.js.map -- source map for ct.min.js lib/ css/ canvastools.css icons/ {*.png, *.svg} - collection of icons for toolbar and cursor js/ ct.d.ts -- typings generated by tcs ct.js -- AMD module generated by tcs ct.js.map -- map file generated by tcs snapsvg-cjs.d.ts -- typings for the snapsvg-cjs package CanvasTools/ {*.js, *.d.ts} -- compilied js and typings files ``` ### Add library to the app 1. Add the `ct.js` file to your web-app (e.g., an Electron-based app). ```html ``` 2. Copy toolbar icons from the [`src` folder](https://github.com/microsoft/CanvasTools-for-VOTT/tree/master/src/canvastools/icons) to your project. ### Add Editor to the page 1. Add container elements to host SVG elements for the toolbar and the editor. ```html
``` 2. Initiate the `Editor`-object from the `CanvasTools`. ```js var editorContainer = document.getElementById("editorDiv"); var toolbarContainer = document.getElementById("toolbarDiv"); var editor = new CanvasTools.Editor(editorContainer).api; editor.addToolbar(toolbarContainer, CanvasTools.Editor.FullToolbarSet, "./images/icons/"); ``` The editor will auto-adjust to available space in provided container block. `FullToolbarSet` icons set is used by default and exposes all available tools. The `RectToolbarSet` set contains only box-creation tools. Correct the path to toolbar icons based on the structure of your project. ### Add callbacks to the Editor 1. Add a callback for the `onSelectionEnd` event to define what should happen when a new region is selected (created). Usually at the end of processing the new `regionData` you also want to add it to the screen with some tags applyed. Use the `addRegion` method for that. ```js // Create some ID for regions let incrementalRegionID = 100; // Set callback for onSelectionEnd editor.onSelectionEnd = (regionData) => { let id = (incrementalRegionID++).toString(); let tags = getTagsDescriptor(); editor.addRegion(id, regionData, tags); }; const Color = CanvasTools.Core.Colors.Color; const LABColor = CanvasTools.Core.Colors.LABColor; const Tag = CanvasTools.Core.Tag; const TagsDescriptor = CanvasTools.Core.TagsDescriptor; // Generate tags function getTagsDescriptor() { // Use the Color class to specify color let primaryTag = new Tag("Awesome", new Color("#c48de7")); // Use a string color to specify color let secondaryTag = new Tag("Yes", "#f94c48"); // Use one of the color spaces classes (e.g., LABColor) to specify color let ternaryTag = new Tag("one", new Color(new LABColor(0.62, 0.50, -0.55))); return new TagsDescriptor(primaryTag, [secondaryTag, ternaryTag]); } ``` 2. Add a callback for the `onRegionMove` event to track region changes. ```js editor.onRegionMove = (id, regionData) => { console.log(`Moved ${id}: {${regionData.x}, ${regionData.y}} x {${regionData.width}, ${regionData.height}}`); }; ``` ### Update background Once the background image for tagging task is loaded (or a video element is ready, or a canvas element is created), pass it to the editor as a new content source. ```js let imagePath = "./../images/background-forest-v.jpg"; let image = new Image(); image.addEventListener("load", (e) => { editor.addContentSource(e.target); }); image.src = imagePath; ``` ## Changelog Moved to a new file: [CHANGELOG.md](https://github.com/microsoft/CanvasTools-for-VOTT/blob/master/CHANGELOG.md).