GithubHelp home page GithubHelp logo

drahkrub / vue-annotator Goto Github PK

View Code? Open in Web Editor NEW

This project forked from drsensor/vue-annotator

0.0 0.0 0.0 97 KB

Vue Component for drawing annotation (rect, polygon, etc) using SVG element

Home Page: http://vue-annotator.surge.sh

License: MIT License

JavaScript 53.52% Vue 46.48%

vue-annotator's Introduction

vue-annotator CircleCI

npm npm donate

Create annotation using SVG and HTML element.

Usage

For complete example see src/stories/*/*.vue

<v-annotator inertia
  :drawing="enableDrawingMode"
  @select="openDialog"
  :minSize="[50, 50]"
  :grid="[5, 5]"
  :multipleSelect="keyIsDown.Ctrl"
>

    <img draggable="false" src="background.png" />

    <rect slot="annotation" stroke="green" x="300" y="150" width="170" height="100" />
    <polygon slot="annotation" stroke="purple" points="200,10 250,190 160,210" />

    <rect slot="drawing" stroke="red" />

</v-annotator>
<style scoped>
@import '~vue-annotator/style.css';

/* Your beloved style */
</style>
Enable --skipLibCheck if using typescript

Due to taye/interact.js#623

In tsconfig.json

{
  compilerOptions: {
    skipLibCheck: true
  }
}

Now it should work fine

import { Vue, Component } from 'vue-property-decorator'
import VAnnotator from 'vue-annotator'

@Component({ components: { VAnnotator } })
export class MyCanvas extends Vue {
  /** Your beloved logic */
}

API References

Props

* : must be set if no background

Parameters Description Type Must Specify Default value
width width of drawing canvas Number *optional width of background
height width of drawing canvas Number *optional height of background
grid set grid for snapping. :grid="[w,h]" for setting width and height. :grid="w" for setting grid in square Array[2] or Number optional null
min-size set minimum size of annotation. :minSize="[w,h]" for set minimum width and height of annotation size. :grid="w" for set minimum width and height of annotation size equal to w Array[2] or Number optional false
drawing switch to drawing mode Boolean optional false
inertia enable inertia moment animation when interacting Boolean optional false
multiple-select enable multiple select Boolean optional false
mouse-select restrict select only for specific mouse button String of left|right|middle optional
delete.sync delete selected element when set to true Boolean optional

Slots

* : will error when more than 1 element to be provided

Method name Description Accepted Element
default background element of annotation Any HTML element
annotation annotation element (accept SVG element) <rect>, <ellipse>, <circle>, <polygon>, <path>, <foreignObject>
drawing *draw element via mouse click&drag <rect>, <ellipse>, <circle>

Events

Event name Description Parameters
select emit when element is click/select element: SVG.Element
select-left emit when element is clicked with left mouse button element: SVG.Element
select-middle emit when element is clicked with middle mouse button element: SVG.Element
select-right emit when element is clicked with right mouse button element: SVG.Element
unselect emit when element is unselected (by clicking the background) element: SVG.Element
move emit when element is moved element: SVG.Element
move-end emit after the element is moved element: SVG.Element
resize emit when element is resized element: SVG.Element
resize-end emit after the element is resized element: SVG.Element
draw emit when drawing an element element: SVG.Element
draw-end emit when drawing element is finish element: SVG.Element
draw-cancel emit when drawing element is canceled (via right click)
update:delete emit when shape was successfully deleted

Tips: use element.node.isSameNode(this.$refs.myAnnotation) for identifying the element.

Style CSS

Vue-Annotator use svg.select.js

Class name Description Notes
.svg_select_boundingRect define style of rectangle in selected element only applicable on <rect>, <circle>, <ellipse>
.svg_select_points define style of edge circles in selected element

default style

.svg_select_points {
  stroke-width: 1;
  fill: black;
  stroke-dasharray: 10 10;
  stroke: black;
  stroke-opacity: 0.8;
  pointer-events: none; /* This ons is needed if you want to deselect or drag the shape*/
}

.svg_select_boundingRect {
  display: none;
}

Support

See CONTRIBUTING.md for contributing directly via:

License

MIT License

vue-annotator's People

Contributors

drsensor avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.