snapConnectionPoint method
ResolvedConnectionPoint?
snapConnectionPoint(
- DiagramPoint point, {
- required double radius,
- 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;
}