protected Map<E, List<Point2D>> positionEdgeArticulationsInLayoutSpace(
			VisualGraphVertexShapeTransformer<V> transformer, Map<V, Point2D> vertexLayoutLocations,
			Collection<E> edges, LayoutLocationMap<V, E> layoutLocations)
			throws CancelledException {

		Map<E, List<Point2D>> newEdgeArticulations = new HashMap<>();
		for (E edge : edges) {
			monitor.checkCancelled();

			List<Point2D> newArticulations = new ArrayList<>();
			for (GridPoint gridPoint : layoutLocations.articulations(edge)) {
				Row<V> row = layoutLocations.row(gridPoint.row);
				Column<V> column = layoutLocations.col(gridPoint.col);

				Point2D location = getEdgeLocation(column, row);
				newArticulations.add(location);
			}
			newEdgeArticulations.put(edge, newArticulations);
		}
		return newEdgeArticulations;
	}
Returns a location for the given vertex that is centered within its cell

@param v the vertex
@param col the vertex's column in the grid
@param row the vertex's row in the grid
@param bounds the bounds of the vertex in the layout space
@return the centered location
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/layout/AbstractVisualGraphLayout.java