| import {Adder} from "d3-array"; |
| import {sqrt} from "../math.js"; |
| import noop from "../noop.js"; |
|
|
| var lengthSum = new Adder(), |
| lengthRing, |
| x00, |
| y00, |
| x0, |
| y0; |
|
|
| var lengthStream = { |
| point: noop, |
| lineStart: function() { |
| lengthStream.point = lengthPointFirst; |
| }, |
| lineEnd: function() { |
| if (lengthRing) lengthPoint(x00, y00); |
| lengthStream.point = noop; |
| }, |
| polygonStart: function() { |
| lengthRing = true; |
| }, |
| polygonEnd: function() { |
| lengthRing = null; |
| }, |
| result: function() { |
| var length = +lengthSum; |
| lengthSum = new Adder(); |
| return length; |
| } |
| }; |
|
|
| function lengthPointFirst(x, y) { |
| lengthStream.point = lengthPoint; |
| x00 = x0 = x, y00 = y0 = y; |
| } |
|
|
| function lengthPoint(x, y) { |
| x0 -= x, y0 -= y; |
| lengthSum.add(sqrt(x0 * x0 + y0 * y0)); |
| x0 = x, y0 = y; |
| } |
|
|
| export default lengthStream; |
|
|