symbol-loader
Version:
Webpack loader for SVG symbols
37 lines (34 loc) • 1.22 kB
JavaScript
function adaptiveLinearization(x1, y1, x2, y2, x3, y3, x4, y4, threshold, lineConsumer)
{
if(Math.abs(x1 + x3 - x2 - x2) +
Math.abs(y1 + y3 - y2 - y2) +
Math.abs(x2 + x4 - x3 - x3) +
Math.abs(y2 + y4 - y3 - y3) <= threshold)
{
// Draw and stop
//----------------------
lineConsumer(x1, y1, x4, y4);
}
else
{
// Calculate all the mid-points of the line segments
//----------------------
var x12 = (x1 + x2) / 2;
var y12 = (y1 + y2) / 2;
var x23 = (x2 + x3) / 2;
var y23 = (y2 + y3) / 2;
var x34 = (x3 + x4) / 2;
var y34 = (y3 + y4) / 2;
var x123 = (x12 + x23) / 2;
var y123 = (y12 + y23) / 2;
var x234 = (x23 + x34) / 2;
var y234 = (y23 + y34) / 2;
var x1234 = (x123 + x234) / 2;
var y1234 = (y123 + y234) / 2;
// Continue subdivision
//----------------------
adaptiveLinearization(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, lineConsumer);
adaptiveLinearization(x1234, y1234, x234, y234, x34, y34, x4, y4, threshold, lineConsumer);
}
}
module.exports = adaptiveLinearization;