'use strict' module.exports = planarGraphToPolyline var e2a = require('edges-to-adjacency-list') var planarDual = require('planar-dual') var preprocessPolygon = require('point-in-big-polygon') var twoProduct = require('two-product') var robustSum = require('robust-sum') var uniq = require('uniq') var trimLeaves = require('./lib/trim-leaves') function makeArray(length, fill) { var result = new Array(length) for(var i=0; i 0 } //Extract all clockwise faces faces = faces.filter(ccw) //Detect which loops are contained in one another to handle parent-of relation var numFaces = faces.length var parent = new Array(numFaces) var containment = new Array(numFaces) for(var i=0; i 0) { var top = toVisit.pop() var nbhd = fadj[top] uniq(nbhd, function(a,b) { return a-b }) var nnbhr = nbhd.length var p = parity[top] var polyline if(p === 0) { var c = faces[top] polyline = [c] } for(var i=0; i= 0) { continue } parity[f] = p^1 toVisit.push(f) if(p === 0) { var c = faces[f] if(!sharedBoundary(c)) { c.reverse() polyline.push(c) } } } if(p === 0) { result.push(polyline) } } return result }