protected LayoutPositions<FGVertex, FGEdge> updateDestinationLocations() {
		Set<FGVertex> ignore = new HashSet<>();
		ignore.addAll(getVerticesToBeRemoved());

		LayoutPositions<FGVertex, FGEdge> positions;
		if (relayout) {

			positions = calculateDefaultLayoutLocations(ignore);

			Map<FGVertex, Point2D> locations = positions.getVertexLocations();
			Point2D groupDestinationPoint = maybeGetGroupDestinationPoint(locations);
			if (groupDestinationPoint != null) {
				locations.put(groupVertex, groupDestinationPoint);
			}
		}
		else {
			//
			// Unusual Code Alert!: when not performing a relayout, we can't know what the
			//                      articulations should be.  So, just clear all articulations. 
			//                      The result is edge/vertex crossing, but it is better than
			//                      having articulations in the middle of nowhere. 
			//             
			//                      If we ever add the ability to refresh articulations by 
			//                      using the layout, then we can change that here (TODO).
			//
			positions = getCurrentLayoutLocations();
			Map<FGVertex, Point2D> currentLocations = positions.getVertexLocations();
			positions = LayoutPositions.createNewPositions(currentLocations,
				new HashMap<FGEdge, List<Point2D>>());
		}

		// update the locations the preferred grouping locations (which may be empty)
		Map<FGVertex, Point2D> layoutLocations = positions.getVertexLocations();
		Point2D groupDestinationPoint = layoutLocations.get(groupVertex);
		Map<FGVertex, Point2D> groupingDestinationLocations =
			getGroupingDestinationLocations(relayout, groupDestinationPoint);

		Set<Entry<FGVertex, Point2D>> entrySet = groupingDestinationLocations.entrySet();
		for (Entry<FGVertex, Point2D> entry : entrySet) {
			FGVertex vertex = entry.getKey();
			Point2D location = entry.getValue();
			layoutLocations.put(vertex, location);
		}

		return positions;
	}
Constructor

@param controller the controller of the graph to be ungrouped
@param groupVertex The group vertex to be ungrouped
@param newVertices the vertices that will remain after the grouping/ungrouping process has
                   completed
@param verticesToRemove the vertices that will be removed from the graph after the 
                        grouping/ungrouping process has completed
@param relayoutOverride a boolean that when true signals to perform a layout <b>
		  	  			   regardless of the user's relayout options</b>.  This is required to
                        perform a manual relayout.
@param useAnimation whether to use animation
Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/util/job/AbstractGroupingFunctionGraphJob.java