modules/actions/add_midpoint.js (20 lines of code) (raw):
import { geomEdgeEqual } from '@id-sdk/math';
import { utilArrayIntersection } from '@id-sdk/util';
export function actionAddMidpoint(midpoint, node) {
return function(graph) {
graph = graph.replace(node.move(midpoint.loc));
var parents = utilArrayIntersection(
graph.parentWays(graph.entity(midpoint.edge[0])),
graph.parentWays(graph.entity(midpoint.edge[1]))
);
parents.forEach(function(way) {
for (var i = 0; i < way.nodes.length - 1; i++) {
if (geomEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
// Add only one midpoint on doubled-back segments,
// turning them into self-intersections.
return;
}
}
});
return graph;
};
}