private void CheckCorrectOrderingAndNoOverlap(LayoutVertexToPointMap vertexCenters) { foreach (var layer in Layers) { for (var i = 0; i < layer.Count - 1; i++) { var vertex1 = layer[i]; var vertex1HalfWidth = vertex1.Width / 2; var vertex1Center = vertexCenters.Get(vertex1).X; var vertex2 = layer[i + 1]; var vertex2HalfWidth = vertex2.Width / 2; var vertex2Center = vertexCenters.Get(vertex2).X; var vertex1RightSide = vertex1Center + vertex1HalfWidth; var vertex2LeftSide = vertex2Center - vertex2HalfWidth; if (vertex1RightSide > vertex2LeftSide) { throw new Exception($"{vertex1} overlaps {vertex2}."); } } } }
private void CheckThatParentsAreCentered(LayoutVertexToPointMap vertexCenters) { foreach (var vertex in ProperLayoutGraph.Vertices) { if (ProperLayoutGraph.HasPrimaryChildren(vertex)) { var childrenBlockRect = ProperLayoutGraph.GetPrimaryChildren(vertex) .Select(i => Rect2D.CreateFromCenterAndSize(vertexCenters.Get(i), i.Size)) .Union(); if (!vertexCenters.Get(vertex).X.IsEqualWithTolerance(childrenBlockRect.Center.X)) { throw new Exception($"{vertex} is not centered to its children."); } } } }