public static AABBProjectionSegmentEnum[] GetAdjacentSegments(AABBProjectionSegmentEnum segment)
        {
            switch (segment)
            {
            case AABBProjectionSegmentEnum.enTopLeft:
            {
                return(new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopRight, AABBProjectionSegmentEnum.enBottomLeft });
            }

            case AABBProjectionSegmentEnum.enTopRight:
            {
                return(new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopLeft, AABBProjectionSegmentEnum.enBottomRight });
            }

            case AABBProjectionSegmentEnum.enBottomLeft:
            {
                return(new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopLeft, AABBProjectionSegmentEnum.enBottomRight });
            }

            case AABBProjectionSegmentEnum.enBottomRight:
            {
                return(new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopRight, AABBProjectionSegmentEnum.enBottomLeft });
            }
            }

            return(null);
        }
        public static AABB.AABBSide GetSideFromProjectionSegments(AABBProjectionSegmentEnum segment1, AABBProjectionSegmentEnum segment2)
        {
            switch (segment1)
            {
            case AABBProjectionSegmentEnum.enTopLeft:
            {
                switch (segment2)
                {
                case AABBProjectionSegmentEnum.enTopRight:
                    return(AABB.AABBSide.enTop);

                case AABBProjectionSegmentEnum.enBottomLeft:
                    return(AABB.AABBSide.enLeft);
                }
                break;
            }

            case AABBProjectionSegmentEnum.enTopRight:
            {
                switch (segment2)
                {
                case AABBProjectionSegmentEnum.enTopLeft:
                    return(AABB.AABBSide.enTop);

                case AABBProjectionSegmentEnum.enBottomRight:
                    return(AABB.AABBSide.enRight);
                }
                break;
            }

            case AABBProjectionSegmentEnum.enBottomLeft:
            {
                switch (segment2)
                {
                case AABBProjectionSegmentEnum.enBottomRight:
                    return(AABB.AABBSide.enBottom);

                case AABBProjectionSegmentEnum.enTopLeft:
                    return(AABB.AABBSide.enLeft);
                }
                break;
            }

            case AABBProjectionSegmentEnum.enBottomRight:
            {
                switch (segment2)
                {
                case AABBProjectionSegmentEnum.enTopRight:
                    return(AABB.AABBSide.enRight);

                case AABBProjectionSegmentEnum.enBottomLeft:
                    return(AABB.AABBSide.enBottom);
                }
                break;
            }
            }

            throw new Exception("Segments do not form a side!");
        }
        public static AABBProjectionSegmentEnum[] GetAdjacentSegments(AABBProjectionSegmentEnum segment)
        {
            switch(segment)
            {
                case AABBProjectionSegmentEnum.enTopLeft:
                    {
                        return new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopRight, AABBProjectionSegmentEnum.enBottomLeft };
                    }
                case AABBProjectionSegmentEnum.enTopRight:
                    {
                        return new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopLeft, AABBProjectionSegmentEnum.enBottomRight };
                    }
                case AABBProjectionSegmentEnum.enBottomLeft:
                    {
                        return new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopLeft, AABBProjectionSegmentEnum.enBottomRight };
                    }
                case AABBProjectionSegmentEnum.enBottomRight:
                    {
                        return new AABBProjectionSegmentEnum[] { AABBProjectionSegmentEnum.enTopRight, AABBProjectionSegmentEnum.enBottomLeft };
                    }
            }

            return null;
        }
 public AABBProjectionSegment(LineSegment path, AABBProjectionSegmentEnum segmentEnum)
 {
     Path = path;
     SegmentEnum = segmentEnum;
 }
        public static AABB.AABBSide GetSideFromProjectionSegments(AABBProjectionSegmentEnum segment1, AABBProjectionSegmentEnum segment2)
        {
            switch (segment1)
            {
                case AABBProjectionSegmentEnum.enTopLeft:
                    {
                        switch (segment2)
                        {
                            case AABBProjectionSegmentEnum.enTopRight:
                                return AABB.AABBSide.enTop;
                            case AABBProjectionSegmentEnum.enBottomLeft:
                                return AABB.AABBSide.enLeft;
                        }
                        break;
                    }
                case AABBProjectionSegmentEnum.enTopRight:
                    {
                        switch (segment2)
                        {
                            case AABBProjectionSegmentEnum.enTopLeft:
                                return AABB.AABBSide.enTop;
                            case AABBProjectionSegmentEnum.enBottomRight:
                                return AABB.AABBSide.enRight;
                        }
                        break;
                    }
                case AABBProjectionSegmentEnum.enBottomLeft:
                    {
                        switch (segment2)
                        {
                            case AABBProjectionSegmentEnum.enBottomRight:
                                return AABB.AABBSide.enBottom;
                            case AABBProjectionSegmentEnum.enTopLeft:
                                return AABB.AABBSide.enLeft;
                        }
                        break;
                    }
                case AABBProjectionSegmentEnum.enBottomRight:
                    {
                        switch (segment2)
                        {
                            case AABBProjectionSegmentEnum.enTopRight:
                                return AABB.AABBSide.enRight;
                            case AABBProjectionSegmentEnum.enBottomLeft:
                                return AABB.AABBSide.enBottom;
                        }
                        break;
                    }
            }

            throw new Exception("Segments do not form a side!");
        }
 public AABBProjectionSegment(LineSegment path, AABBProjectionSegmentEnum segmentEnum)
 {
     Path        = path;
     SegmentEnum = segmentEnum;
 }