UNPKG

@flatten-js/polygon-offset

Version:
66 lines (48 loc) 2.45 kB
[![npm version](https://badge.fury.io/js/%40flatten-js%2Fpolygon-offset.svg)](https://badge.fury.io/js/%40flatten-js%2Fpolygon-offset) [![Build Status](https://travis-ci.org/alexbol99/flatten-offset.svg?branch=master)](https://travis-ci.org/alexbol99/flatten-offset) [![Coverage Status](https://coveralls.io/repos/github/alexbol99/flatten-offset/badge.svg?branch=master)](https://coveralls.io/github/alexbol99/flatten-offset?branch=master) # Offset polygon This package implements algorithm of equidistant offset of polygon. It relies on the [flatten-js](<https://github.com/alexbol99/flatten-js>) library and its polygon model. Algorithm based on the idea of morphological offset, when each edge of the polygon is mapped to its offset, and then [boolean operation](https://github.com/alexbol99/flatten-boolean-op) performed between original contour and offset edges. When offset value is positive, offset edges are unified with original contour, when negative - they are subtracted from original contour. ## Contacts Follow me on Twitter [@alex_bol_](https://twitter.com/alex_bol_) ## Installation ```bash npm install --save @flatten-js/polygon-offset ``` The package [@flatten-js/core](<https://github.com/alexbol99/flatten-js>) is peer dependency of this package and have to be installed separately: ```bash npm install --save @flatten-js/core ``` ## Usage ```javascript import offset from "@flatten-js/polygon-offset" let offsetPolygon = offset(polygon, offset_value) ``` ## Example: ```javascript import {segment, point, Polygon} from "@flatten-js/core" import offset from "@flatten-js/polygon-offset" // Create polygon let shapes = [ segment(point(200,100), point(200,300)), segment(point(200,300), point(440,300)), segment(point(440,300), point(300,200)), segment(point(300,200), point(440,150)), segment(point(440,150), point(500,150)), segment(point(500,150), point(640,200)), segment(point(640,200), point(500,300)), segment(point(500,300), point(740,300)), segment(point(740,300), point(740,100)), segment(point(740,100), point(200,100)) ]; let polygon = new Polygon(); polygon.addFace(shapes); // Apply polygon offset let offsetPolygon = offset(polygon, 20); ```