示例#1
0
        /// <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);
        }