コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }