UNPKG

react-planner-viewer

Version:

react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode

78 lines (56 loc) 6.47 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = calculateInnerCycles; exports.isClockWiseOrder = isClockWiseOrder; var _graph = require('./graph'); var _graph2 = _interopRequireDefault(_graph); var _getEdgesOfSubgraphs = require('./get-edges-of-subgraphs'); var _getEdgesOfSubgraphs2 = _interopRequireDefault(_getEdgesOfSubgraphs); var _graphCycles = require('./graph-cycles'); var _graphCycles2 = _interopRequireDefault(_graphCycles); var _immutable = require('immutable'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function calculateInnerCycles(verticesArray, edgesArray) { var innerCycles = new _immutable.List(); var graph = new _graph2.default(verticesArray.length); edgesArray.forEach(function (line) { graph.addEdge(line[0], line[1]); graph.addEdge(line[1], line[0]); }); graph.BCC(); var subgraphs = graph.subgraphs.filter(function (subgraph) { return subgraph.length >= 3; }); var edgesOfSubgraphsArray = (0, _getEdgesOfSubgraphs2.default)(subgraphs, graph); var edges = []; edgesOfSubgraphsArray.forEach(function (es) { es.forEach(function (edge) { return edges.push(edge); }); }); var cycles = (0, _graphCycles2.default)(verticesArray, edges); cycles.v_cycles.forEach(function (cycle) { cycle.shift(); innerCycles = innerCycles.push(cycle); }); return innerCycles; } function isClockWiseOrder(innerCycleWithCoords) { // See: https://stackoverflow.com/a/1165943 and http://blog.element84.com/polygon-winding.html var i = 0; var twiceEnclosedArea = 0; var size = innerCycleWithCoords.size; for (i = 0; i < size; i++) { var _innerCycleWithCoords = innerCycleWithCoords.get(i), x1 = _innerCycleWithCoords.x, y1 = _innerCycleWithCoords.y; var _innerCycleWithCoords2 = innerCycleWithCoords.get((i + 1) % size), x2 = _innerCycleWithCoords2.x, y2 = _innerCycleWithCoords2.y; twiceEnclosedArea += (x2 - x1) * (y2 + y1); } return twiceEnclosedArea > 0; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ncmFwaC1pbm5lci1jeWNsZXMuanMiXSwibmFtZXMiOlsiY2FsY3VsYXRlSW5uZXJDeWNsZXMiLCJpc0Nsb2NrV2lzZU9yZGVyIiwidmVydGljZXNBcnJheSIsImVkZ2VzQXJyYXkiLCJpbm5lckN5Y2xlcyIsImdyYXBoIiwibGVuZ3RoIiwiZm9yRWFjaCIsImFkZEVkZ2UiLCJsaW5lIiwiQkNDIiwic3ViZ3JhcGhzIiwiZmlsdGVyIiwic3ViZ3JhcGgiLCJlZGdlc09mU3ViZ3JhcGhzQXJyYXkiLCJlZGdlcyIsImVzIiwicHVzaCIsImVkZ2UiLCJjeWNsZXMiLCJ2X2N5Y2xlcyIsImN5Y2xlIiwic2hpZnQiLCJpbm5lckN5Y2xlV2l0aENvb3JkcyIsImkiLCJ0d2ljZUVuY2xvc2VkQXJlYSIsInNpemUiLCJnZXQiLCJ4MSIsIngiLCJ5MSIsInkiLCJ4MiIsInkyIl0sIm1hcHBpbmdzIjoiOzs7OztrQkFLd0JBLG9CO1FBNEJSQyxnQixHQUFBQSxnQjs7QUFqQ2hCOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRWUsU0FBU0Qsb0JBQVQsQ0FBOEJFLGFBQTlCLEVBQTZDQyxVQUE3QyxFQUF5RDtBQUN0RSxNQUFJQyxjQUFjLHFCQUFsQjs7QUFFQSxNQUFJQyxRQUFRLG9CQUFVSCxjQUFjSSxNQUF4QixDQUFaO0FBQ0FILGFBQVdJLE9BQVgsQ0FBbUIsZ0JBQVE7QUFDekJGLFVBQU1HLE9BQU4sQ0FBY0MsS0FBSyxDQUFMLENBQWQsRUFBdUJBLEtBQUssQ0FBTCxDQUF2QjtBQUNBSixVQUFNRyxPQUFOLENBQWNDLEtBQUssQ0FBTCxDQUFkLEVBQXVCQSxLQUFLLENBQUwsQ0FBdkI7QUFDRCxHQUhEOztBQUtBSixRQUFNSyxHQUFOOztBQUVBLE1BQUlDLFlBQVlOLE1BQU1NLFNBQU4sQ0FBZ0JDLE1BQWhCLENBQXVCO0FBQUEsV0FBWUMsU0FBU1AsTUFBVCxJQUFtQixDQUEvQjtBQUFBLEdBQXZCLENBQWhCO0FBQ0EsTUFBSVEsd0JBQXdCLG1DQUFvQkgsU0FBcEIsRUFBK0JOLEtBQS9CLENBQTVCOztBQUVBLE1BQUlVLFFBQVEsRUFBWjtBQUNBRCx3QkFBc0JQLE9BQXRCLENBQThCLGNBQU07QUFDbENTLE9BQUdULE9BQUgsQ0FBVztBQUFBLGFBQVFRLE1BQU1FLElBQU4sQ0FBV0MsSUFBWCxDQUFSO0FBQUEsS0FBWDtBQUNELEdBRkQ7O0FBSUEsTUFBSUMsU0FBUywyQkFBWWpCLGFBQVosRUFBMkJhLEtBQTNCLENBQWI7QUFDQUksU0FBT0MsUUFBUCxDQUFnQmIsT0FBaEIsQ0FBd0IsaUJBQVM7QUFDL0JjLFVBQU1DLEtBQU47QUFDQWxCLGtCQUFjQSxZQUFZYSxJQUFaLENBQWlCSSxLQUFqQixDQUFkO0FBQ0QsR0FIRDs7QUFLQSxTQUFPakIsV0FBUDtBQUNEOztBQUVNLFNBQVNILGdCQUFULENBQTBCc0Isb0JBQTFCLEVBQWdEO0FBQ3JEOztBQUVBLE1BQUlDLElBQUksQ0FBUjtBQUNBLE1BQUlDLG9CQUFvQixDQUF4QjtBQUNBLE1BQUlDLE9BQU9ILHFCQUFxQkcsSUFBaEM7O0FBRUEsT0FBS0YsSUFBSSxDQUFULEVBQVlBLElBQUlFLElBQWhCLEVBQXNCRixHQUF0QixFQUEyQjtBQUFBLGdDQUVGRCxxQkFBcUJJLEdBQXJCLENBQXlCSCxDQUF6QixDQUZFO0FBQUEsUUFFaEJJLEVBRmdCLHlCQUVuQkMsQ0FGbUI7QUFBQSxRQUVUQyxFQUZTLHlCQUVaQyxDQUZZOztBQUFBLGlDQUdGUixxQkFBcUJJLEdBQXJCLENBQXlCLENBQUNILElBQUksQ0FBTCxJQUFVRSxJQUFuQyxDQUhFO0FBQUEsUUFHaEJNLEVBSGdCLDBCQUduQkgsQ0FIbUI7QUFBQSxRQUdUSSxFQUhTLDBCQUdaRixDQUhZOztBQUt6Qk4seUJBQXFCLENBQUNPLEtBQUtKLEVBQU4sS0FBYUssS0FBS0gsRUFBbEIsQ0FBckI7QUFDRDs7QUFFRCxTQUFPTCxvQkFBb0IsQ0FBM0I7QUFDRCIsImZpbGUiOiJncmFwaC1pbm5lci1jeWNsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JhcGggZnJvbSAnLi9ncmFwaCc7XG5pbXBvcnQgZ2V0RWRnZXNPZlN1YmdyYXBocyBmcm9tICcuL2dldC1lZGdlcy1vZi1zdWJncmFwaHMnO1xuaW1wb3J0IGdyYXBoQ3ljbGVzIGZyb20gJy4vZ3JhcGgtY3ljbGVzJztcbmltcG9ydCB7TGlzdH0gZnJvbSAnaW1tdXRhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2FsY3VsYXRlSW5uZXJDeWNsZXModmVydGljZXNBcnJheSwgZWRnZXNBcnJheSkge1xuICBsZXQgaW5uZXJDeWNsZXMgPSBuZXcgTGlzdCgpO1xuXG4gIGxldCBncmFwaCA9IG5ldyBHcmFwaCh2ZXJ0aWNlc0FycmF5Lmxlbmd0aCk7XG4gIGVkZ2VzQXJyYXkuZm9yRWFjaChsaW5lID0+IHtcbiAgICBncmFwaC5hZGRFZGdlKGxpbmVbMF0sIGxpbmVbMV0pO1xuICAgIGdyYXBoLmFkZEVkZ2UobGluZVsxXSwgbGluZVswXSk7XG4gIH0pO1xuXG4gIGdyYXBoLkJDQygpO1xuXG4gIGxldCBzdWJncmFwaHMgPSBncmFwaC5zdWJncmFwaHMuZmlsdGVyKHN1YmdyYXBoID0+IHN1YmdyYXBoLmxlbmd0aCA+PSAzKTtcbiAgbGV0IGVkZ2VzT2ZTdWJncmFwaHNBcnJheSA9IGdldEVkZ2VzT2ZTdWJncmFwaHMoc3ViZ3JhcGhzLCBncmFwaCk7XG5cbiAgbGV0IGVkZ2VzID0gW107XG4gIGVkZ2VzT2ZTdWJncmFwaHNBcnJheS5mb3JFYWNoKGVzID0+IHtcbiAgICBlcy5mb3JFYWNoKGVkZ2UgPT4gZWRnZXMucHVzaChlZGdlKSlcbiAgfSk7XG5cbiAgbGV0IGN5Y2xlcyA9IGdyYXBoQ3ljbGVzKHZlcnRpY2VzQXJyYXksIGVkZ2VzKTtcbiAgY3ljbGVzLnZfY3ljbGVzLmZvckVhY2goY3ljbGUgPT4ge1xuICAgIGN5Y2xlLnNoaWZ0KCk7XG4gICAgaW5uZXJDeWNsZXMgPSBpbm5lckN5Y2xlcy5wdXNoKGN5Y2xlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGlubmVyQ3ljbGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDbG9ja1dpc2VPcmRlcihpbm5lckN5Y2xlV2l0aENvb3Jkcykge1xuICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMTY1OTQzIGFuZCBodHRwOi8vYmxvZy5lbGVtZW50ODQuY29tL3BvbHlnb24td2luZGluZy5odG1sXG5cbiAgbGV0IGkgPSAwO1xuICBsZXQgdHdpY2VFbmNsb3NlZEFyZWEgPSAwO1xuICBsZXQgc2l6ZSA9IGlubmVyQ3ljbGVXaXRoQ29vcmRzLnNpemU7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykge1xuXG4gICAgbGV0IHsgeDogeDEsIHk6IHkxIH0gPSBpbm5lckN5Y2xlV2l0aENvb3Jkcy5nZXQoaSk7XG4gICAgbGV0IHsgeDogeDIsIHk6IHkyIH0gPSBpbm5lckN5Y2xlV2l0aENvb3Jkcy5nZXQoKGkgKyAxKSAlIHNpemUpO1xuXG4gICAgdHdpY2VFbmNsb3NlZEFyZWEgKz0gKHgyIC0geDEpICogKHkyICsgeTEpO1xuICB9XG5cbiAgcmV0dXJuIHR3aWNlRW5jbG9zZWRBcmVhID4gMDtcbn1cbiJdfQ==