snapConnectionPoint method

ResolvedConnectionPoint? snapConnectionPoint(
  1. DiagramPoint point, {
  2. required double radius,
  3. bool portsOnly = false,
})

Nearest visible magnet within a caller-supplied world-space radius. Convert a screen-pixel configuration by dividing by camera zoom.

Implementation

ResolvedConnectionPoint? snapConnectionPoint(
  DiagramPoint point, {
  required double radius,
  bool portsOnly = false,
}) {
  if (!radius.isFinite || radius < 0) {
    throw ArgumentError.value(radius, 'radius');
  }
  if (radius == 0) return null;
  final candidates = spatialIndex._query(
    DiagramRect.fromCenter(
      center: point,
      size: DiagramSize(radius * 2, radius * 2),
    ),
  );
  ResolvedConnectionPoint? nearest;
  var distance = radius;
  for (final element in candidates.reversed) {
    if (element is! ResolvedFramedElement ||
        element.isLocked ||
        !_insideClippingAncestors(element, point)) {
      continue;
    }
    for (final target in element.connectionPoints) {
      if (portsOnly && target.endpoint.portId == null) continue;
      if (!_insideClippingAncestors(element, target.worldPosition)) continue;
      final candidateDistance = (point - target.worldPosition).magnitude;
      if (candidateDistance <= radius &&
          (nearest == null || candidateDistance < distance)) {
        nearest = target;
        distance = candidateDistance;
      }
    }
  }
  return nearest;
}