public Map<E, List<Point2D>> getEdgeLocations(Map<V, Point2D> vertexLocations) {
		Map<E, List<Point2D>> edgeLocations = new HashMap<>();
		for (E edge : grid.edges()) {

			List<GridPoint> gridPoints = grid.getArticulations(edge);
			List<Point2D> points = new ArrayList<>(gridPoints.size());

			GridPoint gp = gridPoints.get(0);
			EdgeSegment<E> edgeSegment = segmentMap.getColumnSegment(edge, gp);

			int offset = edgeSegment.getOffset();
			double x = gridCoordinates.x(gp.col) + offset * edgeSpacing;
			double y = vertexLocations.get(edge.getStart()).getY();
			points.add(new Point2D.Double(x, y));

			for (int i = 1; i < gridPoints.size() - 1; i++) {
				edgeSegment = edgeSegment.nextSegment();
				gp = gridPoints.get(i);
				if (i % 2 == 0) {
					offset = edgeSegment.getOffset();
					x = gridCoordinates.x(gp.col) + offset * edgeSpacing;
					points.add(new Point2D.Double(x, y));

				}
				else {
					offset = edgeSegment.getOffset();
					y = gridCoordinates.y(gp.row) + offset * edgeSpacing;
					points.add(new Point2D.Double(x, y));
				}
			}
			gp = gridPoints.get(gridPoints.size() - 1);
			y = vertexLocations.get(edge.getEnd()).getY();
			points.add(new Point2D.Double(x, y));
			edgeLocations.put(edge, points);
		}

		return edgeLocations;
	}
Returns a map of edges to lists of articulation points in layout space.
@param vertexLocations the locations of vertices already mapped in layout space.
@return  a map of edges to lists of articulation points in layout space
Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/flowchart/OrthogonalGridToLayoutMapper.java