Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/brunoimbrizi/svg-to-poly
Converts an SVG into a Planar Straight Line Graph in the .poly format
https://github.com/brunoimbrizi/svg-to-poly
Last synced: 21 days ago
JSON representation
Converts an SVG into a Planar Straight Line Graph in the .poly format
- Host: GitHub
- URL: https://github.com/brunoimbrizi/svg-to-poly
- Owner: brunoimbrizi
- License: mit
- Created: 2020-11-08T00:11:04.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2020-11-13T23:03:46.000Z (about 4 years ago)
- Last Synced: 2024-10-20T04:53:44.966Z (29 days ago)
- Language: JavaScript
- Homepage:
- Size: 303 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
svg-to-poly
===========Converts an SVG into a Planar Straight Line Graph in the .poly format from [Triangle](https://www.cs.cmu.edu/~quake/triangle.html).
The default output is a JSON with the same property names as `struct triangulateio` defined in `triangle.h` from [Triangle](https://www.cs.cmu.edu/~quake/triangle.html).
An alternative output is a formatted string which could be written onto a .poly file.
> A .poly file represents a PSLG, as well as some additional information. PSLG stands for Planar Straight Line Graph, a term familiar to computational geometers. By definition, a PSLG is just a list of vertices and segments. A .poly file can also contain information about holes and concavities, as well as regional attributes and constraints on the areas of triangles.
Full description of the [.poly file format](https://www.cs.cmu.edu/~quake/triangle.poly.html).
[![demo](https://user-images.githubusercontent.com/880280/98481549-f029b700-21f2-11eb-81b6-94ff71e32ae0.png)](https://brunoimbrizi.github.io/svg-to-poly/demo/)
## Install
```
npm install svg-to-poly
```## Example
```js
const svgToPoly = require('svg-to-poly');
const loadSvg = require('load-svg');loadSvg('./arrow460.svg', (err, svg) => {
console.log(svgToPoly(svg));
});
```
Output:
```js
{
pointlist: [[0.86, -0.50], [0.83, -0.55] ...],
segmentlist: [[0, 1], [1, 2] ...],
holelist: [[0.23, -0.40]],
numberofpoints: 115,
numberofsegments: 115,
numberofholes: 1
}
```Alternative with `format()` to get a string in the .poly format:
```js
const svgToPoly = require('svg-to-poly');
const loadSvg = require('load-svg');loadSvg('./arrow460.svg', (err, svg) => {
console.log(svgToPoly.format(svg));
});
```
Output:
```
# points
115 2 0 0
0 0.86 -0.50
1 0.83 -0.55
...
# segments
115 0
0 0 1
1 1 2
...
# holes
1
0 0.23 -0.40
```## Demo
[svg-to-poly demo](https://brunoimbrizi.github.io/svg-to-poly/demo/)
## Usage
### `svgToPoly(svg, options)`
- `svg` an SVG element
- `options`
- `flat` (default `false`) flatten nested arrays i.e. `[[x, y], [x, y]]` into `[x, y, x, y]`
- `normalize` (default `false`) normalizes path to its bounding box, returns points in the `-1.0 ... 1.0` range
- `threshold` (default `0.2`) threshold passed to [simplify-js](https://github.com/mourner/simplify-js)**Returns** an object with the parsed properties.
### `svgToPoly.format(svg, options)`
Same as above.**Returns** a string in the .poly format.
## Thanks
**svg-to-poly** benefits from the groundwork laid by some other great packages:
- [extract-svg-path](https://github.com/mattdesl/extract-svg-path) concatenates all `` data from an SVG
- [parse-svg-path](https://github.com/jkroso/parse-svg-path) splits paths into groups of instructions and values
- [svg-path-contours](https://github.com/mattdesl/svg-path-contours/) converts paths into polylines
- [simplify-path](https://github.com/mattdesl/simplify-path) simplifies polylines
- [point-in-polygon](https://github.com/substack/point-in-polygon) checks if a point is inside a polygon
- [polylabel](https://github.com/mapbox/polylabel) finds an optimal position inside a polygon## See Also
- [Triangle - A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator](https://www.cs.cmu.edu/~quake/triangle.html) - Jonathan Shewchuk
- [poly-parse](https://github.com/brunoimbrizi/poly-parse) - parse .poly into JSON## License
MIT, see [LICENSE](LICENSE) for details.