stepFour method

void stepFour(
  1. List<LayerElement> layer,
  2. int layerIndex
)

Implementation

void stepFour(List<LayerElement> layer, int layerIndex) {
  var segmentVertices = <NodeElement>[];

  // Find segment vertices in this layer
  for (var element in List.from(layer)) {
    if (element is NodeElement) {
      var data = nodeData[element.node];
      if (data?.isSegmentVertex ?? false) {
        segmentVertices.add(element);
        layer.remove(element);
      }
    }
  }

  // Place each segment vertex
  for (var segmentElement in segmentVertices) {
    var segmentNode = segmentElement.node;
    var data = nodeData[segmentNode];
    var segment = data?.segment;

    if (segment != null) {
      // Find container containing this segment
      ContainerElement? containerElement;
      for (var element in layer) {
        if (element is ContainerElement && element.container.contains(segment)) {
          containerElement = element;
          break;
        }
      }

      if (containerElement != null) {
        var containerIndex = layer.indexOf(containerElement);
        var split = ContainerX.split(containerElement.container, segment);

        layer.removeAt(containerIndex);

        if (split.left.size() > 0) {
          layer.insert(containerIndex, ContainerElement(split.left));
          containerIndex++;
        }

        layer.insert(containerIndex, segmentElement);
        containerIndex++;

        if (split.right.size() > 0) {
          layer.insert(containerIndex, ContainerElement(split.right));
        }
      } else {
        // No container found, just add the segment vertex
        layer.add(segmentElement);
      }
    }
  }

  updateIndices(layer);
}