1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import adder from "../adder";
- import {abs} from "../math";
- import noop from "../noop";
- var areaSum = adder(),
- areaRingSum = adder(),
- x00,
- y00,
- x0,
- y0;
- var areaStream = {
- point: noop,
- lineStart: noop,
- lineEnd: noop,
- polygonStart: function() {
- areaStream.lineStart = areaRingStart;
- areaStream.lineEnd = areaRingEnd;
- },
- polygonEnd: function() {
- areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;
- areaSum.add(abs(areaRingSum));
- areaRingSum.reset();
- },
- result: function() {
- var area = areaSum / 2;
- areaSum.reset();
- return area;
- }
- };
- function areaRingStart() {
- areaStream.point = areaPointFirst;
- }
- function areaPointFirst(x, y) {
- areaStream.point = areaPoint;
- x00 = x0 = x, y00 = y0 = y;
- }
- function areaPoint(x, y) {
- areaRingSum.add(y0 * x - x0 * y);
- x0 = x, y0 = y;
- }
- function areaRingEnd() {
- areaPoint(x00, y00);
- }
- export default areaStream;
|