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); }
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); }
public bool IsNewSegment(SegmentNeighbourhoodCorner queryCorner) { return(queryCorner == _cornerOfNewSegment); }
public SegmentSlotState GetSegment(SegmentNeighbourhoodCorner corner) { return(_segmentsInIntersegment[corner]); }
public IntersegmentInGrid(Dictionary <SegmentNeighbourhoodCorner, SegmentSlotState> segmentsInIntersegment, SegmentNeighbourhoodCorner cornerOfNewSegment) { _segmentsInIntersegment = segmentsInIntersegment; _cornerOfNewSegment = cornerOfNewSegment; }
public void SetCornerWelded(SegmentNeighbourhoodCorner corner) { _cornerWasWelded[corner] = true; }
public bool WasCornerWelded(SegmentNeighbourhoodCorner corner) { return(_cornerWasWelded[corner]); }
private bool IsSegmentPresentInGrid(IntVector2 segmentAlignedPosition, IntersegmentInGrid intersegment, SegmentNeighbourhoodCorner cornerInIntersegment) { return(intersegment.IsNewSegment(cornerInIntersegment) || NeighbourHasAdjacentSegment(intersegment.GetSegment(cornerInIntersegment), segmentAlignedPosition, intersegment.GetDiregmentOf(cornerInIntersegment))); }
private bool SegmentHasPresentIntersectingCorner(IntersegmentInGrid intersegment, SegmentNeighbourhoodCorner corner) { var segment = intersegment.GetSegment(corner); return(segment.WasCornerWelded(corner.Opposite)); }