Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | function findNextLink(line, lines, contourPoints) { let index = -1; lines.forEach((cell, i) => { if (index >= 0) { return; } if (cell.a == line.b) { index = i; } }); if (index >= 0) { const nextLine = lines[index]; lines.splice(index, 1); contourPoints.push(nextLine.b); if (contourPoints[0] == nextLine.b) { return { remainingLines: lines, contourPoints, type: 'CLOSED_PLANAR', //type: 'CLOSEDPLANAR_XOR', }; } return findNextLink(nextLine, lines, contourPoints); } return { remainingLines: lines, contourPoints, type: 'OPEN_PLANAR', }; } /** * * @param {*} lines */ export function findContours(lines) { if (lines.length == 0) { return []; } const contourPoints = []; const firstCell = lines.shift(); contourPoints.push(firstCell.a); contourPoints.push(firstCell.b); const result = findNextLink(firstCell, lines, contourPoints); if (result.remainingLines.length == 0) { return [ { type: result.type, contourPoints: result.contourPoints, }, ]; } else { const extraContours = findContours(result.remainingLines); extraContours.push({ type: result.type, contourPoints: result.contourPoints, }); return extraContours; } } export function findContoursFromReducedSet(lines) { return findContours(lines); } export default { findContours, findContoursFromReducedSet, }; |