/// <inheritdoc/> public EdgeWrap GetEdgeWrap(int faceIndex, int neighborIndex) { if (faceIndex < 0 || faceIndex >= _internalFaceCount) { throw new ArgumentOutOfRangeException("faceIndex"); } if (!_wrapRows && !_wrapCols) { return(EdgeWrap.None); } EdgeWrap wrap; switch (!_reverseWindingOrder ? neighborIndex : (6 - neighborIndex) % 6) { case 0: wrap = (WrapsOnSidePosRow(faceIndex) && !IsBackIndentedLower(faceIndex) ? EdgeWrap.NegVertToEdgeAxis0 : EdgeWrap.None); break; case 1: wrap = (WrapsOnSidePosCol(faceIndex) ? EdgeWrap.PosEdgeToVertAxis1 : EdgeWrap.None); break; case 2: wrap = (WrapsOnSidePosCol(faceIndex) ? EdgeWrap.PosFaceToEdgeAxis1 : EdgeWrap.None) | (WrapsOnSidePosRow(faceIndex) && !IsBackIndentedUpper(faceIndex) ? EdgeWrap.PosEdgeToVertAxis0 : EdgeWrap.None); break; case 3: wrap = (WrapsOnSidePosCol(faceIndex) ? EdgeWrap.PosFaceToEdgeAxis1 : EdgeWrap.None) | (WrapsOnSidePosRow(faceIndex) && !IsBackIndentedUpper(faceIndex) ? EdgeWrap.PosFaceToEdgeAxis0 : EdgeWrap.None) | (WrapsOnSidePosRow(faceIndex) && IsBackIndentedUpper(faceIndex) ? EdgeWrap.PosEdgeToVertAxis0 : EdgeWrap.None); break; case 4: wrap = (WrapsOnSidePosRow(faceIndex) ? EdgeWrap.PosFaceToEdgeAxis0 : EdgeWrap.None) | (WrapsOnSidePosCol(faceIndex) ? EdgeWrap.NegVertToEdgeAxis1 : EdgeWrap.None); break; case 5: wrap = (WrapsOnSidePosRow(faceIndex) && !IsBackIndentedLower(faceIndex) ? EdgeWrap.PosFaceToEdgeAxis0 : EdgeWrap.None) | (WrapsOnSidePosRow(faceIndex) && IsBackIndentedLower(faceIndex) ? EdgeWrap.NegVertToEdgeAxis0 : EdgeWrap.None); break; default: throw new ArgumentOutOfRangeException("neighborIndex"); } if (_reverseWindingOrder) { wrap = EdgeWrapUtility.InvertVertexEdgeRelations(wrap); } if (_reverseColumnsRows) { wrap = EdgeWrapUtility.SwapAxes(wrap); } return(wrap); }