This is a plugin for the SVG.js library to convert paths to polygons or polylines.
svg.topoly.js is licensed under the terms of the MIT License.
npm install @svgdotjs/svg.topoly.jsInclude this plugin after including SVG.js in your html document or require / import it.
To convert a path to a polygon:
const data = 'M82.3,160.4c6.5,5.2,13.6,9.5,21.2,12.8c7.6,3.3,14.7,4.9,21.5,4.9c7.3,0,12.6-1.1,15.9-3.4c3.3-2.2,4.9-5.4,4.9-9.5 c0-2.2-0.6-4.1-1.7-5.6c-1.1-1.5-2.8-2.9-4.9-4.2c-2.2-1.3-4.7-2.6-7.7-3.8c-3-1.2-6.5-2.6-10.4-4.1l-22.7-9.5 c-4.9-1.9-9.5-4.3-14-7.4c-4.5-3.1-8.4-6.7-11.8-10.9c-3.4-4.2-6-9-8-14.5c-2-5.4-2.9-11.4-2.9-18c0-7.9,1.7-15.2,5.1-22 c3.4-6.8,8-12.8,14-18c6-5.1,13.1-9.2,21.5-12.2c8.3-3,17.4-4.5,27.4-4.5c10.5,0,21.1,2,31.9,5.9c10.8,3.9,20.3,10.1,28.8,18.5 L166,85.1c-6.2-4.3-12.1-7.6-17.8-9.8c-5.7-2.2-11.9-3.4-18.7-3.4c-6,0-10.7,1-14,3.1c-3.4,2.1-5.1,5.1-5.1,9.3 c0,4.3,2.4,7.6,7.2,10c4.8,2.3,11.4,5.1,19.8,8.3l22.2,8.7c11.4,4.5,20.2,10.8,26.4,18.8c6.2,8,9.3,18.4,9.3,31.2 c0,7.7-1.6,15.1-4.8,22.2c-3.2,7.1-7.8,13.3-13.9,18.7c-6.1,5.3-13.5,9.6-22.3,12.8c-8.8,3.2-18.9,4.8-30.3,4.8 c-11.6,0-23.5-2.1-35.8-6.3c-12.3-4.2-23.3-10.8-33.3-19.8L82.3,160.4z'
const canvas = SVG().addTo('body')
var path = canvas.path(data)
var polygon = path.toPoly()The newly created path will replace the original shape by default.
If you don't want your shape to be replaced, use toPath(false).
The new path is given back and can be added to the document later:
rect = rect.toPath(false).insertAfter(rect)The default sample value is '1%'. This means that every 1% of the total length of the path, a point will be registered. Please note, that the fixpoints of the path commands are always added as extra points. This means, that '1%' will not always result in 100 points. Instead it will be more like 100 + number of path commands.
There are three ways to approach the sample value.
This will insert a point every x% of the total length.
Example:
path.toPoly('0.5%')This will add points on a fixed distance until the total length is reached.
Example:
path.toPoly('3px')This will equally spread a given amount of samples over the total length.
Example:
path.toPoly(400)If a path is closed (ending with a z) a SVG.Polygon will be generated, otherwise a SVG.Polyline.
The toPoly() method on a SVG.Path is a proxy to the same method on SVG.PathArray. This makes it possible to convert path data to point data, even without ever drawing a shape:
var pathArray = new SVG.PathArray(data)
var pointArray = path.toPoly('1%')
// -> returns an instance of SVG.PointArray