source: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Cell.js

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Added visualizations

  • Property mode set to 100644
File size: 4.4 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.cellHalfedgeEnd = cellHalfedgeEnd;
7exports.cellHalfedgeStart = cellHalfedgeStart;
8exports.clipCells = clipCells;
9exports.createCell = createCell;
10exports.sortCellHalfedges = sortCellHalfedges;
11var _Edge = require("./Edge");
12var _Diagram = require("./Diagram");
13function createCell(site) {
14 return _Diagram.cells[site.index] = {
15 site: site,
16 halfedges: []
17 };
18}
19function cellHalfedgeAngle(cell, edge) {
20 var site = cell.site,
21 va = edge.left,
22 vb = edge.right;
23 if (site === vb) vb = va, va = site;
24 if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
25 if (site === va) va = edge[1], vb = edge[0];else va = edge[0], vb = edge[1];
26 return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
27}
28function cellHalfedgeStart(cell, edge) {
29 return edge[+(edge.left !== cell.site)];
30}
31function cellHalfedgeEnd(cell, edge) {
32 return edge[+(edge.left === cell.site)];
33}
34function sortCellHalfedges() {
35 for (var i = 0, n = _Diagram.cells.length, cell, halfedges, j, m; i < n; ++i) {
36 if ((cell = _Diagram.cells[i]) && (m = (halfedges = cell.halfedges).length)) {
37 var index = new Array(m),
38 array = new Array(m);
39 for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, _Diagram.edges[halfedges[j]]);
40 index.sort(function (i, j) {
41 return array[j] - array[i];
42 });
43 for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
44 for (j = 0; j < m; ++j) halfedges[j] = array[j];
45 }
46 }
47}
48function clipCells(x0, y0, x1, y1) {
49 var nCells = _Diagram.cells.length,
50 iCell,
51 cell,
52 site,
53 iHalfedge,
54 halfedges,
55 nHalfedges,
56 start,
57 startX,
58 startY,
59 end,
60 endX,
61 endY,
62 cover = true;
63 for (iCell = 0; iCell < nCells; ++iCell) {
64 if (cell = _Diagram.cells[iCell]) {
65 site = cell.site;
66 halfedges = cell.halfedges;
67 iHalfedge = halfedges.length;
68
69 // Remove any dangling clipped edges.
70 while (iHalfedge--) {
71 if (!_Diagram.edges[halfedges[iHalfedge]]) {
72 halfedges.splice(iHalfedge, 1);
73 }
74 }
75
76 // Insert any border edges as necessary.
77 iHalfedge = 0, nHalfedges = halfedges.length;
78 while (iHalfedge < nHalfedges) {
79 end = cellHalfedgeEnd(cell, _Diagram.edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
80 start = cellHalfedgeStart(cell, _Diagram.edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
81 if (Math.abs(endX - startX) > _Diagram.epsilon || Math.abs(endY - startY) > _Diagram.epsilon) {
82 halfedges.splice(iHalfedge, 0, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, end, Math.abs(endX - x0) < _Diagram.epsilon && y1 - endY > _Diagram.epsilon ? [x0, Math.abs(startX - x0) < _Diagram.epsilon ? startY : y1] : Math.abs(endY - y1) < _Diagram.epsilon && x1 - endX > _Diagram.epsilon ? [Math.abs(startY - y1) < _Diagram.epsilon ? startX : x1, y1] : Math.abs(endX - x1) < _Diagram.epsilon && endY - y0 > _Diagram.epsilon ? [x1, Math.abs(startX - x1) < _Diagram.epsilon ? startY : y0] : Math.abs(endY - y0) < _Diagram.epsilon && endX - x0 > _Diagram.epsilon ? [Math.abs(startY - y0) < _Diagram.epsilon ? startX : x0, y0] : null)) - 1);
83 ++nHalfedges;
84 }
85 }
86 if (nHalfedges) cover = false;
87 }
88 }
89
90 // If there weren’t any edges, have the closest site cover the extent.
91 // It doesn’t matter which corner of the extent we measure!
92 if (cover) {
93 var dx,
94 dy,
95 d2,
96 dc = Infinity;
97 for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
98 if (cell = _Diagram.cells[iCell]) {
99 site = cell.site;
100 dx = site[0] - x0;
101 dy = site[1] - y0;
102 d2 = dx * dx + dy * dy;
103 if (d2 < dc) dc = d2, cover = cell;
104 }
105 }
106 if (cover) {
107 var v00 = [x0, y0],
108 v01 = [x0, y1],
109 v11 = [x1, y1],
110 v10 = [x1, y0];
111 cover.halfedges.push(_Diagram.edges.push((0, _Edge.createBorderEdge)(site = cover.site, v00, v01)) - 1, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, v01, v11)) - 1, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, v11, v10)) - 1, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, v10, v00)) - 1);
112 }
113 }
114
115 // Lastly delete any cells with no edges; these were entirely clipped.
116 for (iCell = 0; iCell < nCells; ++iCell) {
117 if (cell = _Diagram.cells[iCell]) {
118 if (!cell.halfedges.length) {
119 delete _Diagram.cells[iCell];
120 }
121 }
122 }
123}
Note: See TracBrowser for help on using the repository browser.