triangulates a 2D polyline into a stroke
npm install extrude-polyline
!img
Extrudes a 2D polyline with a given line thickness and the desired join/cap types. Tries to maintain visual consistency with HTML5 2D context stroking.
``js
var polylne = [ [25, 25], [15, 60] ]
var stroke = require('extrude-polyline')({
thickness: 20,
cap: 'square',
join: 'bevel',
miterLimit: 10
})
//builds a triangulated mesh from a polyline
var mesh = stroke.build(polyline)
`
The returned mesh is a simplicial complex.
`js`
{
positions: [ [x,y], [x,y] ],
cells: [ [a,b,c], [a,b,c] ]
}
Currently, to achieve variable thickness you can provide a mapThickness function to the stroke instance before building. By default, it will simply return the current thickness.
`js`
//create a falloff, so the thickness tapers toward the start of the path
stroke.mapThickness = function(point, index, points) {
return this.thickness * index/(points.length-1)
}.bind(stroke)
Git clone, npm install, then npm run test

#### stroke = Extrusion([opt])
Creates a new path builder with the given settings:
- thickness the line thicknessmiterLimit
- the limit before miters turn into bevels; default 10join
- the join type, can be 'miter' or 'bevel' - default 'miter'cap
- the cap type, can be 'butt' or 'square' - defalut 'butt'
#### mesh = stroke.build(points)`
Builds a stroke with the specified list of 2D points. Returns a simplicial complex.
Some features that could be useful to add at a later point. PRs welcome.
- round corners
- round end caps
- use consistent winding order so we don't need to disable gl.CULLING
- connecting start and end points
- optimizations for flat arrays (Float32Array) ?
- optimizations for GC (pooling, etc)
- handling anti-aliasing
- degenerate triangles or some other form of supporting disconnected lines
- unify codebase with polyline-normals
MIT, see LICENSE.md for details.