rabbit-ear
Version:
origami design library
68 lines (64 loc) • 1.86 kB
JavaScript
/* Rabbit Ear 0.9.4 alpha 2024-04-20 (c) Kraft, GNU GPLv3 License */
import { remove } from '../remove.js';
const edgeIsolatedVertices = ({ vertices_coords, edges_vertices }) => {
if (!vertices_coords || !edges_vertices) { return []; }
let count = vertices_coords.length;
const seen = Array(count).fill(false);
edges_vertices.forEach((ev) => {
ev.filter(v => !seen[v]).forEach((v) => {
seen[v] = true;
count -= 1;
});
});
return seen
.map((s, i) => (s ? undefined : i))
.filter(a => a !== undefined);
};
const faceIsolatedVertices = ({ vertices_coords, faces_vertices }) => {
if (!vertices_coords || !faces_vertices) { return []; }
let count = vertices_coords.length;
const seen = Array(count).fill(false);
faces_vertices.forEach((fv) => {
fv.filter(v => !seen[v]).forEach((v) => {
seen[v] = true;
count -= 1;
});
});
return seen
.map((s, i) => (s ? undefined : i))
.filter(a => a !== undefined);
};
const isolatedVertices = ({ vertices_coords, edges_vertices, faces_vertices }) => {
if (!vertices_coords) { return []; }
let count = vertices_coords.length;
const seen = Array(count).fill(false);
if (edges_vertices) {
edges_vertices.forEach((ev) => {
ev.filter(v => !seen[v]).forEach((v) => {
seen[v] = true;
count -= 1;
});
});
}
if (faces_vertices) {
faces_vertices.forEach((fv) => {
fv.filter(v => !seen[v]).forEach((v) => {
seen[v] = true;
count -= 1;
});
});
}
return seen
.map((s, i) => (s ? undefined : i))
.filter(a => a !== undefined);
};
const removeIsolatedVertices = (graph, remove_indices) => {
if (!remove_indices) {
remove_indices = isolatedVertices(graph);
}
return {
map: remove(graph, "vertices", remove_indices),
remove: remove_indices,
};
};
export { edgeIsolatedVertices, faceIsolatedVertices, isolatedVertices, removeIsolatedVertices };