Пример #1
0
 private void AddSegmentsCornerWelding(IntersegmentInGrid intersegment, SegmentNeighbourhoodCorner cornerInIntersegment, List <SegmentCornerToModify> cornersToRegenerate)
 {
     cornersToRegenerate.Add(new SegmentCornerToModify()
     {
         Corner = cornerInIntersegment.Opposite,
         ModuledPositionOfSegment = intersegment.GetSegment(cornerInIntersegment).ModuledSegmentPosition.ModuledPosition
     });
     intersegment.GetSegment(cornerInIntersegment).SetCornerWelded(cornerInIntersegment.Opposite);
 }
Пример #2
0
            public SegmentNeighbourhoodDiregment GetDiregmentOf(SegmentNeighbourhoodCorner cornerInIntersegment)
            {
                Preconditions.Assert(_cornerOfNewSegment != cornerInIntersegment, "E193 This is corner of new segment!");
                if (_cornerOfNewSegment == SegmentNeighbourhoodCorner.BottomLeft)
                {
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomLeft)
                    {
                        Preconditions.Fail("Unexpected");
                        return(null);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomRight)
                    {
                        return(SegmentNeighbourhoodDiregment.Right);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopLeft)
                    {
                        return(SegmentNeighbourhoodDiregment.Top);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopRight)
                    {
                        return(SegmentNeighbourhoodDiregment.TopRight);
                    }
                }

                if (_cornerOfNewSegment == SegmentNeighbourhoodCorner.BottomRight)
                {
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomRight)
                    {
                        Preconditions.Fail("Unexpected");
                        return(null);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomLeft)
                    {
                        return(SegmentNeighbourhoodDiregment.Left);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopLeft)
                    {
                        return(SegmentNeighbourhoodDiregment.TopLeft);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopRight)
                    {
                        return(SegmentNeighbourhoodDiregment.Top);
                    }
                }

                if (_cornerOfNewSegment == SegmentNeighbourhoodCorner.TopRight)
                {
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopRight)
                    {
                        Preconditions.Fail("Unexpected");
                        return(null);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomRight)
                    {
                        return(SegmentNeighbourhoodDiregment.Bottom);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopLeft)
                    {
                        return(SegmentNeighbourhoodDiregment.Left);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomLeft)
                    {
                        return(SegmentNeighbourhoodDiregment.BottomLeft);
                    }
                }

                if (_cornerOfNewSegment == SegmentNeighbourhoodCorner.TopLeft)
                {
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopLeft)
                    {
                        Preconditions.Fail("Unexpected");
                        return(null);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomRight)
                    {
                        return(SegmentNeighbourhoodDiregment.BottomRight);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.BottomLeft)
                    {
                        return(SegmentNeighbourhoodDiregment.Bottom);
                    }
                    if (cornerInIntersegment == SegmentNeighbourhoodCorner.TopRight)
                    {
                        return(SegmentNeighbourhoodDiregment.Right);
                    }
                }
                Preconditions.Fail("Not expected");
                return(null);
            }
Пример #3
0
 public bool IsNewSegment(SegmentNeighbourhoodCorner queryCorner)
 {
     return(queryCorner == _cornerOfNewSegment);
 }
Пример #4
0
 public SegmentSlotState GetSegment(SegmentNeighbourhoodCorner corner)
 {
     return(_segmentsInIntersegment[corner]);
 }
Пример #5
0
 public IntersegmentInGrid(Dictionary <SegmentNeighbourhoodCorner, SegmentSlotState> segmentsInIntersegment, SegmentNeighbourhoodCorner cornerOfNewSegment)
 {
     _segmentsInIntersegment = segmentsInIntersegment;
     _cornerOfNewSegment     = cornerOfNewSegment;
 }
Пример #6
0
 public void SetCornerWelded(SegmentNeighbourhoodCorner corner)
 {
     _cornerWasWelded[corner] = true;
 }
Пример #7
0
 public bool WasCornerWelded(SegmentNeighbourhoodCorner corner)
 {
     return(_cornerWasWelded[corner]);
 }
Пример #8
0
 private bool IsSegmentPresentInGrid(IntVector2 segmentAlignedPosition, IntersegmentInGrid intersegment, SegmentNeighbourhoodCorner cornerInIntersegment)
 {
     return(intersegment.IsNewSegment(cornerInIntersegment) ||
            NeighbourHasAdjacentSegment(intersegment.GetSegment(cornerInIntersegment), segmentAlignedPosition, intersegment.GetDiregmentOf(cornerInIntersegment)));
 }
Пример #9
0
        private bool SegmentHasPresentIntersectingCorner(IntersegmentInGrid intersegment, SegmentNeighbourhoodCorner corner)
        {
            var segment = intersegment.GetSegment(corner);

            return(segment.WasCornerWelded(corner.Opposite));
        }