public override Rect GetSnappedRect(ref Vector2 snappingOffset, Rect sourceRect, GraphElement selectedElement, float scale, Vector2 mousePanningDelta = default) { if (!IsActive) { throw new InvalidOperationException("SnapStrategy.GetSnappedRect: Snap to borders not active. Call BeginSnap() first."); } if (IsPaused) { // Snapping was paused, we do not return a snapped rect and we clear the snap lines ClearSnapLines(); return(sourceRect); } Rect snappedRect = sourceRect; m_CurrentScale = scale; List <SnapToBordersResult> results = GetClosestSnapElements(sourceRect); m_LineView.lines.Clear(); foreach (SnapToBordersResult result in results) { ApplySnapToBordersResult(ref snappingOffset, sourceRect, ref snappedRect, result); result.IndicatorLine = GetSnapLine(snappedRect, result.SourceReference, result.SnappableRect, result.SnappableReference); m_LineView.lines.Add(result.IndicatorLine); } m_LineView.MarkDirtyRepaint(); m_SnappableRects = GetNotSelectedElementRectsInView(selectedElement); return(snappedRect); }
public override Rect GetSnappedRect(ref Vector2 snappingOffset, Rect sourceRect, GraphElement selectedElement, float scale, Vector2 mousePanningDelta = default) { if (!IsActive) { throw new InvalidOperationException("SnapStrategy.GetSnappedRect: Snap to spacing not active. Call BeginSnap() first."); } if (IsPaused) { // Snapping was paused, we do not return a snapped rect and we clear the snap lines ClearSnapLines(); return(sourceRect); } Rect selectedElementRect = (selectedElement).parent.ChangeCoordinatesTo(m_GraphView.ContentViewContainer, (selectedElement).GetPosition()); UpdateSpacingPositions(selectedElement, selectedElementRect); Rect snappedRect = sourceRect; m_CurrentScale = scale; m_LineView.lines.Clear(); List <SnapToSpacingResult> results = GetClosestSpacingPositions(sourceRect); foreach (var result in results.Where(result => result != null)) { ApplySnapToSpacingResult(ref snappingOffset, sourceRect, ref snappedRect, result); // Make sure the element is snapped before drawing the lines if (IsSnapped(snappedRect, sourceRect, result.ReferenceRects.Orientation)) { foreach (SpacingLine spacingLine in GetSpacingLines(result.ReferenceRects.Rects, result.ReferenceRects.Orientation)) { m_LineView.lines.AddRange(spacingLine.Lines); } } } m_LineView.MarkDirtyRepaint(); return(snappedRect); }