Exemple #1
0
    public void SetCornerTypeFromString(string name)
    {
        switch (name)
        {
        case "Red":
            cornerType = CornerType.Red;
            break;

        case "Green":
            cornerType = CornerType.Green;
            break;

        case "Blue":
            cornerType = CornerType.Blue;
            break;

        case "Purple":
            cornerType = CornerType.Purple;
            break;

        default:
            cornerType = CornerType.Red;
            break;
        }

        AssignOffset();
        SetSandboxAsChild();
    }
 public CornerShape(CornerType type)
 {
     topLeft     = type;
     topRight    = type;
     bottomLeft  = type;
     bottomRight = type;
 }
        //Color edges an RGBA
        public void EdgeCorners(GridContext bgc, byte ri, byte gi, byte bi, byte ai)
        {
            if (bgc == null)
            {
                return;
            }
            Grid grid = bgc.Grid;

            //Inhibit because it would affect ALL drawn pixels

            grid.InhibitCodeTracking();
            for (int z = 0; z < grid.SizeZ; z++)
            {
                for (int y = 0; y < grid.SizeY; y++)
                {
                    for (int x = 0; x < grid.SizeX; x++)
                    {
                        ulong u = grid.GetRgba(x, y, z);
                        if (u > 0)
                        //if ((byte)grid.GetProperty(x, y, z).ShapeId != 0)
                        {
                            /* Logic for detecting smoothing is... (using 6-cell axis formation cells left/right/forward/back/top/bottom)
                             * Blue : 2 units nearby
                             * Red  : 3 units nearby
                             * Green: 4 units nearby
                             */
                            CornerType cornerType = CalculateShape(grid, x, y, z);
                            int        shape      = (int)cornerType;
                            grid.Plot(x, y, z, u, 0, (byte)shape, grid.GetProperty(x, y, z).TextureId, 0, 0);
                        }
                    }
                }
            }
            grid.AllowCodeTracking();
        }
 public void Assign(CornerShape shape)
 {
     TopLeft     = shape.topLeft;
     TopRight    = shape.topRight;
     BottomLeft  = shape.bottomLeft;
     BottomRight = shape.bottomRight;
 }
 public CornerShape()
 {
     topLeft     = CornerType.Round;
     topRight    = CornerType.Round;
     bottomLeft  = CornerType.Round;
     bottomRight = CornerType.Round;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="CornerShape"/>
 /// </summary>
 public CornerShape()
 {
     topLeft = CornerType.Round;
     topRight = CornerType.Round;
     bottomLeft = CornerType.Round;
     bottomRight = CornerType.Round;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="CornerShape"/>
 /// </summary>
 /// <param name="type"><see cref="CornerType"/> for all corners.</param>
 public CornerShape(CornerType type)
 {
     topLeft = type;
     topRight = type;
     bottomLeft = type;
     bottomRight = type;
 }
        /// <summary>
        /// Generates an object from its XML representation.
        /// </summary>
        /// <param name="reader">The <see cref="T:System.Xml.XmlReader"/> stream from which the object is deserialized. </param>
        public void ReadXml(XmlReader reader)
        {
            var doc = new XmlDocument();

            doc.Load(reader);
            if (doc.GetElementsByTagName("BottomLeft").Count > 0)
            {
                BottomLeft =
                    (CornerType)Enum.Parse(typeof(CornerType), doc.GetElementsByTagName("BottomLeft")[0].InnerText);
            }
            if (doc.GetElementsByTagName("BottomRight").Count > 0)
            {
                BottomRight =
                    (CornerType)Enum.Parse(typeof(CornerType), doc.GetElementsByTagName("BottomRight")[0].InnerText);
            }
            if (doc.GetElementsByTagName("TopLeft").Count > 0)
            {
                TopLeft = (CornerType)Enum.Parse(typeof(CornerType), doc.GetElementsByTagName("TopLeft")[0].InnerText);
            }
            if (doc.GetElementsByTagName("TopRight").Count > 0)
            {
                TopRight =
                    (CornerType)Enum.Parse(typeof(CornerType), doc.GetElementsByTagName("TopRight")[0].InnerText);
            }
        }
Exemple #9
0
 public RoundedCornersTransformation(int radius, int margin, CornerType cornerType)
 {
     _radius     = radius;
     _diameter   = radius * 2;
     _margin     = margin;
     _cornerType = cornerType;
 }
        //Color edges an RGBA
        public void ShapeSmoothX(GridContext bgc)
        {
            if (bgc == null)
            {
                return;
            }
            Grid grid = bgc.Grid;

            //Inhibit because it would affect ALL drawn pixels
            grid.InhibitCodeTracking();
            for (int z = 0; z < grid.SizeZ; z++)
            {
                for (int y = 0; y < grid.SizeY; y++)
                {
                    for (int x = 0; x < grid.SizeX; x++)
                    {
                        ulong u = grid.GetRgba(x, y, z);
                        if (u > 0)
                        {
                            CornerType cornerType = CalculateShapeX(grid, x, y, z);
                            int        shape      = (int)cornerType;
                            grid.Plot(x, y, z, u, 0, (byte)shape, grid.GetProperty(x, y, z).TextureId, 0, 0);
                        }
                    }
                }
            }
            grid.AllowCodeTracking();
        }
Exemple #11
0
    private void HandleCorners(PlayerController player)
    {
        Vector3 desiredDirection = Mathf.Sign(right) * player.transform.right;

        CornerType moveType = CheckCorner(player, desiredDirection);

        if (moveType == CornerType.Out)
        {
            player.UseRootMotion = false;
            isOutCornering       = true;
        }
        else if (moveType == CornerType.In)
        {
            player.UseRootMotion = false;
            isInCornering        = true;
        }
        else if (moveType == CornerType.Stop)
        {
            right = 0f;
            player.UseRootMotion = false;
        }
        else
        {
            player.UseRootMotion = true;
        }

        player.Anim.SetBool("isOutCorner", isOutCornering);
        player.Anim.SetBool("isInCorner", isInCornering);
    }
Exemple #12
0
        public static HexPoint HexCorner(float size, CornerType cornerType)
        {
            var innerSize = OuterToInner(size);
            var halfSize  = size * 0.5f;
            var offset    = new HexPoint(0, 0, 0);

            switch (cornerType)
            {
            case CornerType.Corner1:
                offset = new HexPoint(innerSize, -halfSize, 0);
                break;

            case CornerType.Corner2:
                offset = new HexPoint(0, -size, 0);
                break;

            case CornerType.Corner3:
                offset = new HexPoint(-innerSize, -halfSize, 0);
                break;

            case CornerType.Corner4:
                offset = new HexPoint(-innerSize, halfSize, 0);
                break;

            case CornerType.Corner5:
                offset = new HexPoint(0, size, 0);
                break;

            case CornerType.Corner6:
                offset = new HexPoint(innerSize, halfSize, 0);
                break;
            }

            return(offset);
        }
Exemple #13
0
        public static Vector3 GetCorner(this Bounds bounds, CornerType type)
        {
            var center  = bounds.center;
            var extents = bounds.extents;

            switch (type)
            {
            default:
            case CornerType.LeftDownBackward:
                return(center - extents);

            case CornerType.RightUpForward:
                return(center + extents);

            case CornerType.LeftDownForward:
                return(center + new Vector3(-extents.x, -extents.y, extents.z));

            case CornerType.LeftUpBackward:
                return(center + new Vector3(-extents.x, extents.y, -extents.z));

            case CornerType.LeftUpForward:
                return(center + new Vector3(-extents.x, extents.y, extents.z));

            case CornerType.RightDownBackward:
                return(center + new Vector3(extents.x, -extents.y, -extents.z));

            case CornerType.RightUpBackward:
                return(center + new Vector3(extents.x, extents.y, -extents.z));

            case CornerType.RightDownForward:
                return(center + new Vector3(extents.x, -extents.y, extents.z));
            }
        }
Exemple #14
0
    public void MoveToDefendingCornerPosition(CornerType corner)
    {
        int   angle = 90;
        float x     = DefendingCornerPosition.x;
        float y     = DefendingCornerPosition.y;

        switch (corner)
        {
        case CornerType.LowerLeft:
        {
            y = -y;
        }
        break;

        case CornerType.UpperRight:
        {
            angle = 270;
            x     = -x;
        }
        break;

        case CornerType.LowerRight:
        {
            angle = 270;
            x     = -x;
            y     = -y;
        }
        break;
        }

        MoveTo(x, y, angle);
    }
        public static PointF GetCornerPoint(this RectangleF rect, CornerType type)
        {
            switch (type)
            {
            case CornerType.LeftTop:
                return(rect.Location);

            case CornerType.LeftMiddle:
                return(new PointF(rect.X, rect.Y + rect.Height / 2));

            case CornerType.LeftBottom:
                return(new PointF(rect.X, rect.Bottom));

            case CornerType.Top:
                return(new PointF(rect.X + rect.Width / 2, rect.Y));

            case CornerType.Bottom:
                return(new PointF(rect.X + rect.Width / 2, rect.Bottom));

            case CornerType.RightTop:
                return(new PointF(rect.Right, rect.Y));

            case CornerType.RightMiddle:
                return(new PointF(rect.Right, rect.Y + rect.Height / 2));

            case CornerType.RightBottom:
                return(new PointF(rect.Right, rect.Bottom));

            case CornerType.Center:
                return(rect.Location + new SizeF(rect.Width / 2, rect.Height / 2));

            default:
                return(PointF.Empty);
            }
        }
Exemple #16
0
        private static Shape GenerateRoundedCorner(CornerType type)
        {
            float[] verts = new float[92 * 3];

            float rotOffset = 0;
            float xOffset   = 0;
            float yOffset   = 0;

            switch (type)
            {
            case CornerType.TopLeft:
                rotOffset = (float)Math.PI;
                xOffset   = 1;
                yOffset   = 1;
                break;

            case CornerType.TopRight:
                rotOffset = (float)(Math.PI / 2) * 3;
                xOffset   = 0;
                yOffset   = 1;
                break;

            case CornerType.BottomLeft:
                rotOffset = (float)(Math.PI / 2);
                xOffset   = 1;
                break;

            case CornerType.BottomRight:
                rotOffset = 0;
                break;
            }

            for (int i = 0; i < 91; i++)
            {
                float degInRad = MathHelper.DegreesToRadians(i);

                float x = ((float)Math.Cos(degInRad + rotOffset)) + xOffset;
                float y = ((float)Math.Sin(degInRad + rotOffset)) + yOffset;

                verts[i * 3]       = x;
                verts[(i * 3) + 1] = y;
                verts[(i * 3) + 2] = 0f;
            }

            Vector3 corner = new Vector3(-0.5f, -0.5f, 0f);

            corner = Vector3.TransformPosition(corner, Matrix4.CreateRotationZ(rotOffset));

            corner.X += 0.5f;
            corner.Y += 0.5f;

            verts[(91 * 3)]     = corner.X;
            verts[(91 * 3) + 1] = corner.Y;
            verts[(91 * 3) + 2] = 0f;

            Shape shape = new Shape(verts);

            return(shape);
        }
Exemple #17
0
            public static void Draw(Rect rect, DColor dColor, CornerType cornerType = DEFAULT_CORNER_TYPE)
            {
                Color color = GUI.color;

                GUI.color = Colors.BackgroundColor(dColor).WithAlpha(BACKGROUND_ALPHA * color.a);
                GUI.Label(rect, GUIContent.none, Style(cornerType));
                GUI.color = color;
            }
Exemple #18
0
            public static void Draw(DColor dColor, CornerType cornerType, params GUILayoutOption[] options)
            {
                Color color = GUI.color;

                GUI.color = Colors.BackgroundColor(dColor).WithAlpha(BACKGROUND_ALPHA * color.a);
                GUILayout.Label(GUIContent.none, Style(cornerType), options);
                GUI.color = color;
            }
Exemple #19
0
 public Loft()
 {
     _StartCapping      = CappingMode.Flat;
     _EndCapping        = CappingMode.Flat;
     _Thickness         = 1;
     _ThickenDirection  = Direction.Inwards;
     _ThickenCornerType = CornerType.Round;
 }
Exemple #20
0
        private CornerSprite GetCornerSprite(CornerType cornerType)
        {
            var cornerSprite = new CornerSprite();

            cornerSprite.cornerType = cornerType;
            cornerSprite.sprites    = new List <Sprite>();
            cornerSprite.sprites.Insert(0, null);
            return(cornerSprite);
        }
Exemple #21
0
        public override void Resize(CornerType type, PointF targetPoint, bool resizeFixRadio)
        {
            var rect = GetBounds().Resize(type, targetPoint, resizeFixRadio);

            StringSize = new SizeF(rect.Width, rect.Height);
            Location   = rect.Location;

            UpdateBound(rect.Location, rect.Width, rect.Height);
            UpdateResizeHandle();
            IsGraphicsPathChanged = true;
        }
Exemple #22
0
            public static GUIStyle Style(CornerType type)
            {
                switch (type)
                {
                case CornerType.Round:  return(Styles.GetStyle(Styles.StyleName.BackgroundRound));

                case CornerType.Square: return(Styles.GetStyle(Styles.StyleName.BackgroundSquare));

                default:                throw new ArgumentOutOfRangeException("type", type, null);
                }
            }
Exemple #23
0
            public static void Draw(DColor dColor, CornerType cornerType, float height, params GUILayoutOption[] options)
            {
                var list = new List <GUILayoutOption>();

                if (options != null)
                {
                    list.AddRange(options);
                }
                list.Add(GUILayout.Height(height));
                Draw(dColor, cornerType, list.ToArray());
            }
Exemple #24
0
        /// <summary>
        /// calculates values which are defined in the classes which inherits from TrackSegment according to the properties defined in TrackSegment
        /// </summary>
        protected override void CalculateDerivedValues()
        {
            //CornerType
            //c_ = k*a_ + h*b_ = EndPoint-StartPoint
            //if h>0 => right else left
            Vector2 c = EndPoint - PreviousTrackSegment.EndPoint;
            Vector2 a = PreviousTrackSegment.EndDirection;
            Vector2 b = a.Normal();

            if ((a.X * c.Y - c.X) / (b.Y * a.X - b.X - a.Y) > 0)
            {
                _type = CornerType.RightCorner;
            }
            else
            {
                _type = CornerType.LeftCorner;
            }

            if (EndPoint.Equals(PreviousTrackSegment.EndPoint)) //complete circle
            {
                Radius = (TrackWidthEnd + PreviousTrackSegment.TrackWidthEnd) / 2;
                Angle  = Convert.ToSingle(2 * Math.PI);
                //set the radius to the middle radius of the trackwidth of this curve and the previous tracksegment
                _middlePoint = PreviousTrackSegment.EndDirection.Normal().Normalize() * Radius +
                               PreviousTrackSegment.EndPoint;
            }
            else
            {
                //calculate middle point
                //the middle point is where the normal vector of the vector between start and endpoint intercects with the normal vector of the starting direction
                Vector2 connectingVector   = (EndPoint - PreviousTrackSegment.EndPoint) / 2; //2 to get the middle of the distance
                Vector2 normalVectorMiddle = connectingVector.Normal();
                _middlePoint = normalVectorMiddle.GetIntersectionPoint(PreviousTrackSegment.EndDirection.Normal(),
                                                                       PreviousTrackSegment.EndPoint, PreviousTrackSegment.EndPoint + connectingVector);

                //calculate radius
                _radius = (EndPoint - _middlePoint).Magnitude;
                //calculate angle
                if (Type == CornerType.LeftCorner)
                {
                    _angle = normalVectorMiddle.GetEnclosedAngle(_endPoint - _middlePoint) * 2;
                }
                else
                {
                    _angle = normalVectorMiddle.GetEnclosedAngle(_middlePoint - _endPoint) * 2;
                }
            }

            CalculateStartingAngle();
        }
        private CornerView CreateCorner(CornerType type, string normalImageName, string selectedImageName)
        {
            CornerView cv = new CornerView(
                new UIImage(normalImageName),
                new UIImage(selectedImageName)
                );

            cv.CornerType = type;

            corners[(uint)type] = cv;

            AddSubview(cv);

            return(cv);
        }
    private void Corner(CornerType corner, Team attackingTeam, Team defendingTeam)
    {
        Score.Corners[attackingTeam]++;

        Ball.MoveToCorner(corner);

        foreach (var p in Teams[attackingTeam])
        {
            p.MoveToAttackingCornerPosition(corner);
        }

        foreach (var p in Teams[defendingTeam])
        {
            p.MoveToDefendingCornerPosition(corner);
        }
    }
        /// <summary>
        /// 对已有的矩形做缩放
        /// </summary>
        /// <param name="rect">原始矩形</param>
        /// <param name="type">操作类型,左上角、中段、右上角等</param>
        /// <param name="p">当前光标位置</param>
        /// <param name="resizeFixRadio">是否等比例</param>
        /// <returns></returns>
        public static RectangleF Resize(this RectangleF rect, CornerType type, PointF p, bool resizeFixRadio)
        {
            RectangleF result = Rectangle.Empty;

            switch (type)
            {
            case CornerType.LeftTop:
                result = ResizeByLeftTopHandle(rect, p, resizeFixRadio);
                break;

            case CornerType.LeftBottom:
                result = ResizeByLeftBottomHandle(rect, p, resizeFixRadio);
                break;

            case CornerType.RightTop:
                result = ResizeByRightTopHandle(rect, p, resizeFixRadio);
                break;

            case CornerType.RightBottom:
                result = ResizeByRightBottom(rect, p, resizeFixRadio);
                break;

            case CornerType.LeftMiddle:
                result = ResizeByLeftMiddleHandle(rect, p);
                break;

            case CornerType.Top:
                result = ResizeByTopHandle(rect, p);
                break;

            case CornerType.Bottom:
                result = ResizeByBottomHandle(rect, p);
                break;

            case CornerType.RightMiddle:
                result = ResizeByRightMiddleBottom(rect, p);
                break;

            case CornerType.Center:
            default:
                break;
            }
            return(result);
        }
        public override bool OnHitTest(SKPoint location, long fingerId)
        {
            SKPoint hitPoint = GetNewCoordinatedPoint(location);

            //左上角
            SKRect rect = SKRect.Create(_cropRect.Left - _cornerTouchRadius, _cropRect.Top - _cornerTouchRadius, _cornerTouchRadius * 2, _cornerTouchRadius * 2);

            if (rect.Contains(hitPoint))
            {
                _hittedCorner = CornerType.LeftTop;
                return(true);
            }

            //右上角
            rect = SKRect.Create(_cropRect.Right - _cornerTouchRadius, _cropRect.Top - _cornerTouchRadius, _cornerTouchRadius * 2, _cornerTouchRadius * 2);

            if (rect.Contains(hitPoint))
            {
                _hittedCorner = CornerType.RightTop;
                return(true);
            }

            //左下角
            rect = SKRect.Create(_cropRect.Left - _cornerTouchRadius, _cropRect.Bottom - _cornerTouchRadius, _cornerTouchRadius * 2, _cornerTouchRadius * 2);

            if (rect.Contains(hitPoint))
            {
                _hittedCorner = CornerType.LeftBottom;
                return(true);
            }

            //右下角
            rect = SKRect.Create(_cropRect.Right - _cornerTouchRadius, _cropRect.Bottom - _cornerTouchRadius, _cornerTouchRadius * 2, _cornerTouchRadius * 2);

            if (rect.Contains(hitPoint))
            {
                _hittedCorner = CornerType.RightBottom;
                return(true);
            }

            _hittedCorner = CornerType.None;
            return(false);
        }
 public void MoveToCorner(CornerType corner)
 {
     if (corner == CornerType.UpperLeft)
     {
         MoveTo(-3.7f, 2.7f);
     }
     else if (corner == CornerType.LowerLeft)
     {
         MoveTo(-3.7f, -2.7f);
     }
     else if (corner == CornerType.UpperRight)
     {
         MoveTo(3.7f, 2.7f);
     }
     else if (corner == CornerType.LowerRight)
     {
         MoveTo(3.7f, -2.7f);
     }
 }
 private void GenerateCorner(CornerType corner, int amountPerLine)
 {
     if (corner == CornerType.downLeft)
     {
         GenerateTreesAtPos(amountPerLine, -0.5f, 0.5f, 0.0f, 0.5f); // horizontal
         GenerateTreesAtPos(amountPerLine, 0.0f, 0.5f, -0.5f, 0.5f); // vertical
     }
     else if (corner == CornerType.downRight)
     {
         GenerateTreesAtPos(amountPerLine, -0.5f, 0.5f, 0.0f, 0.5f);  // horizontal
         GenerateTreesAtPos(amountPerLine, -0.5f, 0.0f, -0.5f, 0.5f); // vertical
     }
     else if (corner == CornerType.upLeft)
     {
         GenerateTreesAtPos(amountPerLine, -0.5f, 0.5f, -0.5f, 0.0f); // horizontal
         GenerateTreesAtPos(amountPerLine, 0.0f, 0.5f, -0.5f, 0.5f);  // vertical
     }
     else if (corner == CornerType.upRight)
     {
         GenerateTreesAtPos(amountPerLine, -0.5f, 0.5f, -0.5f, 0.0f); // horizontal
         GenerateTreesAtPos(amountPerLine, -0.5f, 0.0f, -0.5f, 0.5f); // vertical
     }
 }
            /// <summary>
            /// returns the 3 corners adjacent to the input corner
            /// </summary>
            /// ![green = input corner , blue = result](GetCorners_AdjacentToCorner.png)
            public static List <Vector3Int> AdjacentToCorner(Vector3Int corner)
            {
                Vector3Int a, b, c;
                CornerType cornerType = HexUtility.GetCornerType(corner);

                //its the same approach like getting adjacent tiles but inverted (and without dividing by 3)
                if (cornerType == CornerType.BottomOfYParallelEdge)
                {
                    a = new Vector3Int((corner.x - 1), (corner.y + 2), (corner.z - 1));
                    b = new Vector3Int((corner.x + 2), (corner.y - 1), (corner.z - 1));
                    c = new Vector3Int((corner.x - 1), (corner.y - 1), (corner.z + 2));
                }

                else
                {
                    a = new Vector3Int((corner.x + 1), (corner.y + 1), (corner.z - 2));
                    b = new Vector3Int((corner.x + 1), (corner.y - 2), (corner.z + 1));
                    c = new Vector3Int((corner.x - 2), (corner.y + 1), (corner.z + 1));
                }
                return(new List <Vector3Int> {
                    a, b, c
                });
            }
Exemple #32
0
        void ChangeCornerPosition(CornerType type, int x, int y)
        {
            if (type == CornerType.LeftTop)
            {
                _points[0] = new Point(x, y);
            }
            if (type == CornerType.RightTop)
            {
                _points[1] = new Point(x, y);
            }

            if (type == CornerType.RightBottom)
            {
                _points[2] = new Point(x, y);
            }

            if (type == CornerType.LeftBottom)
            {
                _points[3] = new Point(x, y);
            }

            this.Invalidate();
        }
Exemple #33
0
        Vector2f GetCenter(CornerType cornerType)
        {
            Vector2f center = new Vector2f();

            switch (cornerType)
            {
                case CornerType.TopLeft: center = Position + new Vector2f(Radius, Radius); break;
                case CornerType.TopRight: center = new Vector2f(Position.X + Dimension.X - Radius, Position.Y + Radius); break;
                case CornerType.BottomRight: center = Position + Dimension - new Vector2f(Radius, Radius); break;
                case CornerType.BottomLeft: center = new Vector2f(Position.X + Radius, Position.Y + Dimension.Y - Radius); break;
            }

            return center;
        }
Exemple #34
0
 private void AddRotatedCell(
     Vector3 north,
     Vector3 east,
     Vector3 south,
     Vector3 west,
     Vector3 center,
     Directions neighbors,
     Directions edges,
     Directions walls,
     CornerType corner)
 {
     switch (neighbors)
     {
         case Directions.NorthWest:
             AddOuterCornerCell(west, north, center, corner, edges, walls);
             break;
         case Directions.North:
             AddStraightCell(west, north, east, center, corner, edges, walls);
             break;
         case Directions.North | Directions.West:
             AddInnerCornerCell(north, east, south, west, center, corner, edges, walls);
             break;
         case Directions.NorthWest | Directions.SouthEast:
             AddSaddleCell(north, east, south, west, center, corner, edges, walls);
             break;
         case Directions.All:
             AddCenterCell(north, east, south, west, center, corner, edges, walls);
             break;
         default:
             break;
     }
 }
 /// <summary>
 /// Resets value of <see cref="TopRight"/> to default value.
 /// </summary>
 protected virtual void ResetTopRight()
 {
     topRight = CornerType.Round;
 }
 /// <summary>
 /// Resets value of <see cref="TopLeft"/> to default value.
 /// </summary>
 protected virtual void ResetTopLeft()
 {
     topLeft = CornerType.Round;
 }
 /// <summary>
 /// Resets value of <see cref="BottomRight"/> to default value.
 /// </summary>
 protected virtual void ResetBottomRight()
 {
     bottomRight = CornerType.Round;
 }
 /// <summary>
 /// Generates an object from its XML representation.
 /// </summary>
 /// <param name="reader">The <see cref="T:System.Xml.XmlReader"/> stream from which the object is deserialized. </param>
 public void ReadXml(XmlReader reader)
 {
     var doc = new XmlDocument();
     doc.Load(reader);
     if (doc.GetElementsByTagName("BottomLeft").Count > 0)
         BottomLeft =
             (CornerType) Enum.Parse(typeof (CornerType), doc.GetElementsByTagName("BottomLeft")[0].InnerText);
     if (doc.GetElementsByTagName("BottomRight").Count > 0)
         BottomRight =
             (CornerType) Enum.Parse(typeof (CornerType), doc.GetElementsByTagName("BottomRight")[0].InnerText);
     if (doc.GetElementsByTagName("TopLeft").Count > 0)
         TopLeft = (CornerType) Enum.Parse(typeof (CornerType), doc.GetElementsByTagName("TopLeft")[0].InnerText);
     if (doc.GetElementsByTagName("TopRight").Count > 0)
         TopRight =
             (CornerType) Enum.Parse(typeof (CornerType), doc.GetElementsByTagName("TopRight")[0].InnerText);
 }
Exemple #39
0
 private void AddCorner(ComplexPoly poly, Vector3 start, Vector3 end, Vector3 center, CornerType type, WallType wallType = WallType.None)
 {
     center = nudge(start, end, center);
     switch (type)
     {
         case CornerType.Diamond:
             break;
         case CornerType.Square:
             poly.AddLineSegment(start, center, end);
             AddWallMesh(wallType, start, center, end);
             return;
         case CornerType.Rounded:
             poly.AddLineSegment(
                 start,
                 (start + center) / 2,
                 (end + center) / 2,
                 end);
             AddWallMesh(wallType,
                 start,
                 (start + center) / 2,
                 (end + center) / 2,
                 end);
             return;
         default:
             break;
     }
     poly.AddLineSegment(start, end);
     AddWallMesh(wallType, start, end);
 }
 private void TabCornerType_CheckedChanged(object sender, EventArgs e)
 {
     if ((((RadioButton)sender).Checked))
     {
         _cornerType = (CornerType)int.Parse((string)(((RadioButton)sender).Tag));
         this.CreateImages();
     }
 }
        private void LoadSettings()
        {
            TabStripSettings settings = new TabStripSettings();

            settings = settings.Deserialize(_outputDirectory + _settingsFileName);

            if (!string.IsNullOrEmpty(settings.SavedTabStripSettings.TabColor))
            {
                _tabColor = ColorTranslator.FromHtml(settings.SavedTabStripSettings.TabColor);
                this.TabColorEntry.Text = settings.SavedTabStripSettings.TabColor;
            }

            if (!string.IsNullOrEmpty(settings.SavedTabStripSettings.BorderColor))
            {
                _borderColor = ColorTranslator.FromHtml(settings.SavedTabStripSettings.BorderColor);
                this.BorderColorEntry.Text = settings.SavedTabStripSettings.BorderColor;
            }

            if (!string.IsNullOrEmpty(settings.SavedTabStripSettings.SelectedTabColor))
            {
                _selectedColor = ColorTranslator.FromHtml(settings.SavedTabStripSettings.SelectedTabColor);
                this.SelectedColorEntry.Text = settings.SavedTabStripSettings.SelectedTabColor;
            }

            _borderWidth = settings.SavedTabStripSettings.BorderWidth;
            this.BorderWidthEntry.Text = _borderWidth.ToString();

            //_pottomPadding = settings.SavedTabStripSettings.BottomPadding;
            _tabWidth = settings.SavedTabStripSettings.TabWidth;
            this.TabWidthEntry.Text = _tabWidth.ToString();

            _tabHeight = settings.SavedTabStripSettings.TabHeight;
            this.TabHeightEntry.Text = _tabHeight.ToString();

            _cornerHeight = settings.SavedTabStripSettings.CornerHeight * 2;
            this.CornerHeightEntry.Text = settings.SavedTabStripSettings.CornerHeight.ToString();

            _cornerWidth = settings.SavedTabStripSettings.CornerWidth * 2;
            this.CornerWidthEntry.Text = settings.SavedTabStripSettings.CornerWidth.ToString();

            if (!string.IsNullOrEmpty(settings.SavedTabStripSettings.TabType))
            {
                _tabType = (TabType)Enum.Parse(typeof(TabType), settings.SavedTabStripSettings.TabType);

                switch (_tabType)
                {
                    case TabType.LeftLean:
                        this.LeanLeftOption.Checked = true;
                        break;

                    case TabType.RightLean:
                        this.LeanRightOption.Checked = true;
                        break;

                    default:
                        this.SymetricalOption.Checked = true;
                        break;
                }
            }

            if (!string.IsNullOrEmpty(settings.SavedTabStripSettings.TabCornerType))
            {
                _cornerType = (CornerType)Enum.Parse(typeof(CornerType), settings.SavedTabStripSettings.TabCornerType);

                switch (_cornerType)
                {
                    case CornerType.Chamfered:
                        this.ChamferedOption.Checked = true;
                        break;

                    default:
                        this.RoundedOption.Checked = true;
                        break;
                }
            }

            if (this.OutputPathEntry.Text.Trim() != settings.SavedTabStripSettings.OutputDirectory.Trim())
            {
                DialogResult result = MessageBox.Show(_overrideOutputDirMessage,
                    this.Text, MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                if (result == DialogResult.Yes)
                {
                    _outputDirectory = settings.SavedTabStripSettings.OutputDirectory;
                    this.OutputPathEntry.Text = _outputDirectory;
                }
            }
        }
Exemple #42
0
 void AddStraightCell(Vector3 west, Vector3 north, Vector3 east, Vector3 center, CornerType corner, Directions edges, Directions walls)
 {
     var eastPoint = nudge(center, center, east);
     var westPoint = nudge(center, center, west);
     var northPoint = nudge(center, center, north);
     switch (edges & Directions.North)
     {
         case Directions.North:
             break;
         case Directions.NorthEast:
             switch (walls)
             {
                 case Directions.NorthWest:
                     if (corner == CornerType.Square)
                         AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                     else
                     {
                         AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, northPoint, westPoint, center, corner, WallType.None);
                         AddCorner(floorPolygons, westPoint, northPoint, center, CornerType.Square, WallType.Floor);
                     }
                     break;
                 case Directions.North:
                     AddCorner(wallPolygons, west, north, center, CornerType.Square, WallType.Both);
                     break;
                 default:
                     AddCorner(floorPolygons, west, north, center, CornerType.Square, WallType.Floor);
                     break;
             }
             break;
         case Directions.NorthWest:
             switch (walls)
             {
                 case Directions.NorthEast:
                     if(corner == CornerType.Square)
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Both);
                     else
                     {
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Both);
                         AddCorner(floorPolygons, eastPoint, northPoint, center, corner, WallType.Both);
                         AddCorner(floorPolygons, northPoint, eastPoint, center, CornerType.Square, WallType.Floor);
                     }
                     break;
                 case Directions.North:
                     AddCorner(wallPolygons, north, east, center, CornerType.Square, WallType.Both);
                     break;
                 default:
                     AddCorner(floorPolygons, north, east, center, CornerType.Square, WallType.Floor);
                     break;
             }
             break;
         default:
             switch (walls)
             {
                 case Directions.North:
                     AddStraight(wallPolygons, west, east, WallType.Both);
                     break;
                 case Directions.NorthWest:
                     //Todo: convert these to simple segments if the corners are square
                     AddStraight(floorPolygons, westPoint, east, WallType.Floor);
                     AddCorner(floorPolygons, north, westPoint, center, corner, WallType.None);
                     AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                     break;
                 case Directions.NorthEast:
                     AddStraight(floorPolygons, west, eastPoint, WallType.Floor);
                     AddCorner(floorPolygons, eastPoint, north, center, corner, WallType.None);
                     AddCorner(wallPolygons, north, east, center, corner, WallType.Wall);
                     break;
                 default:
                     AddStraight(floorPolygons, west, east, WallType.Floor);
                     break;
             }
             break;
     }
 }
Exemple #43
0
    void AddOuterCornerCell(Vector3 west, Vector3 north, Vector3 center, CornerType corner, Directions edges, Directions walls)
    {
        if ((edges & Directions.NorthWest) != Directions.NorthWest)
        {
            if ((walls & Directions.NorthWest) == Directions.NorthWest)
                AddCorner(wallPolygons, west, north, center, corner, WallType.Both);
            else
                AddCorner(floorPolygons, west, north, center, corner, WallType.Floor);

        }
    }
Exemple #44
0
 void AddInnerCornerCell(Vector3 north, Vector3 east, Vector3 south, Vector3 west, Vector3 center, CornerType corner, Directions edges, Directions walls)
 {
     var eastPoint = nudge(center, center, east);
     var westPoint = nudge(center, center, west);
     var northPoint = nudge(center, center, north);
     var southPoint = nudge(center, center, south);
     switch (edges)
     {
         case Directions.East:
             AddStraightCell(south, west, north, center, (walls == Directions.North)? CornerType.Square : corner, RotateCW(edges), RotateCW(walls) & Directions.North);
             break;
         case Directions.South:
             AddStraightCell(west, north, east, center, (walls == Directions.West) ? CornerType.Square : corner, edges, walls & Directions.North);
             break;
         case Directions.North:
             switch (walls)
             {
                 case Directions.SouthWest:
                 case Directions.SouthWest | Directions.NorthEast:
                     if (corner == CornerType.Square)
                     {
                         AddCorner(wallPolygons, south, west, center, corner, WallType.Both);
                     }
                     else
                     {
                         AddCorner(floorPolygons, south, eastPoint, center, corner, WallType.Floor);
                         AddStraight(floorPolygons, eastPoint, westPoint, WallType.Floor);
                         AddCorner(floorPolygons, westPoint, south, center, corner, WallType.None);
                         AddCorner(wallPolygons, south, west, center, corner, WallType.Wall);
                     }
                     break;
                 case Directions.West:
                     if(corner == CornerType.Square)
                     {
                         AddCorner(wallPolygons, south, west, center, corner, WallType.Both);
                     }
                     else
                     {
                         AddCorner(wallPolygons, south, west, center, CornerType.Square, WallType.Both);
                         AddCorner(floorPolygons, eastPoint, southPoint, center, CornerType.Square, WallType.Floor);
                         AddCorner(floorPolygons, southPoint, eastPoint, center, corner, WallType.Floor);
                     }
                     break;
                 case Directions.West | Directions.North:
                     AddCorner(wallPolygons, south, eastPoint, center, corner, WallType.Both);
                     AddStraight(wallPolygons, eastPoint, west, WallType.Both);
                     break;
                 case Directions.NorthWest:
                 case Directions.NorthEast:
                 case Directions.North:
                 default:
                     AddCorner(floorPolygons, south, eastPoint, center, corner, WallType.Floor);
                     AddStraight(floorPolygons, eastPoint, west, WallType.Floor);
                     break;
             }
             break;
         case Directions.West:
             switch (walls)
             {
                 case Directions.NorthEast:
                 case Directions.NorthEast | Directions.SouthWest:
                     if (corner == CornerType.Square)
                     {
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Both);
                     }
                     else
                     {
                         AddStraight(floorPolygons, northPoint, southPoint, WallType.Floor);
                         AddCorner(floorPolygons, southPoint, eastPoint, center, corner, WallType.Floor);
                         AddCorner(floorPolygons, eastPoint, northPoint, center, corner, WallType.None);
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Wall);
                     }
                     break;
                 case Directions.North:
                     if (corner == CornerType.Square)
                     {
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Both);
                     }
                     else
                     {
                         AddCorner(floorPolygons, southPoint, eastPoint, center, corner, WallType.Floor);
                         AddCorner(floorPolygons, eastPoint, southPoint, center, CornerType.Square, WallType.None);
                         AddCorner(wallPolygons, north, east, center, CornerType.Square, WallType.Both);
                     }
                     break;
                 case Directions.North | Directions.West:
                     AddStraight(wallPolygons, north, southPoint, WallType.Both);
                     AddCorner(wallPolygons, southPoint, east, center, corner, WallType.Both);
                     break;
                 case Directions.NorthWest:
                 case Directions.SouthWest:
                 case Directions.West:
                 default:
                     AddStraight(floorPolygons, north, southPoint, WallType.Floor);
                     AddCorner(floorPolygons, southPoint, east, center, corner, WallType.Floor);
                     break;
             }
             break;
         case Directions.North | Directions.West:
             switch (walls)
             {
                 case Directions.North | Directions.West:
                     if (corner != CornerType.Square)
                     {
                         AddCorner(wallPolygons, southPoint, eastPoint, center, corner, WallType.Both);
                         AddCorner(wallPolygons, eastPoint, southPoint, center, CornerType.Square, WallType.Both);
                     }
                     break;
                 case Directions.NorthWest:
                 case Directions.NorthEast:
                 case Directions.SouthWest:
                 case Directions.North:
                 case Directions.West:
                 case Directions.NorthEast | Directions.SouthWest:
                 default:
                     if (corner != CornerType.Square)
                     {
                         AddCorner(floorPolygons, southPoint, eastPoint, center, corner, WallType.Floor);
                         AddCorner(floorPolygons, eastPoint, southPoint, center, CornerType.Square, WallType.Floor);
                     }
                     break;
             }
             break;
         case Directions.North | Directions.East:
             switch (walls)
             {
                 case Directions.West:
                 case Directions.North | Directions.West:
                     AddCorner(wallPolygons, south, west, center, CornerType.Square, WallType.Both);
                     break;
                 case Directions.SouthWest:
                 case Directions.NorthEast | Directions.SouthWest:
                     if (corner == CornerType.Square)
                         AddCorner(wallPolygons, south, west, center, CornerType.Square, WallType.Both);
                     else
                     {
                         AddCorner(wallPolygons, south, west, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, westPoint, southPoint, center, corner, WallType.None);
                         AddCorner(floorPolygons, southPoint, westPoint, center, CornerType.Square, WallType.Floor);
                     }
                     break;
                 case Directions.NorthWest:
                 case Directions.NorthEast:
                 case Directions.North:
                 default:
                     AddCorner(floorPolygons, south, west, center, CornerType.Square, WallType.Floor);
                     break;
             }
             break;
         case Directions.East | Directions.South:
             switch (walls)
             {
                 case Directions.North | Directions.West:
                 case Directions.North:
                 case Directions.West:
                     AddCorner(wallPolygons, west, north, center, CornerType.Square, WallType.Both);
                     break;
                 case Directions.NorthWest:
                     if(corner == CornerType.Square)
                         AddCorner(wallPolygons, west, north, center, CornerType.Square, WallType.Both);
                     else
                     {
                         AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, northPoint, westPoint, center, corner, WallType.None);
                         AddCorner(floorPolygons, westPoint, northPoint, center, CornerType.Square, WallType.Floor);
                     }
                     break;
                 case Directions.NorthEast:
                 case Directions.SouthWest:
                 case Directions.NorthEast | Directions.SouthWest:
                 default:
                     AddCorner(floorPolygons, west, north, center, CornerType.Square, WallType.Floor);
                     break;
             }
             break;
         case Directions.West | Directions.South:
             switch (walls)
             {
                 case Directions.North | Directions.West:
                 case Directions.North:
                     AddCorner(wallPolygons, north, east, center, CornerType.Square, WallType.Both);
                     break;
                 case Directions.NorthEast:
                 case Directions.NorthEast | Directions.SouthWest:
                     if (corner == CornerType.Square)
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Both);
                     else
                     {
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Both);
                         AddCorner(floorPolygons, eastPoint, northPoint, center, corner, WallType.None);
                         AddCorner(floorPolygons, northPoint, eastPoint, center, CornerType.Square, WallType.Floor);
                     }
                     break;
                 case Directions.NorthWest:
                 case Directions.SouthWest:
                 case Directions.West:
                 default:
                     AddCorner(floorPolygons, north, east, center, CornerType.Square, WallType.Floor);
                     break;
             }
             break;
         default:
             {
                 switch (walls)
                 {
                     case Directions.NorthWest:
                         AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, north, west, center, corner, WallType.None);
                         AddCorner(floorPolygons, south, east, center, corner, WallType.Floor);
                         break;
                     case Directions.NorthEast:
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, eastPoint, north, center, corner, WallType.None);
                         AddCorner(floorPolygons, south, eastPoint, center, corner, WallType.Floor);
                         break;
                     case Directions.SouthWest:
                         AddCorner(wallPolygons, south, west, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, west, southPoint, center, corner, WallType.None);
                         AddCorner(floorPolygons, southPoint, east, center, corner, WallType.Floor);
                         break;
                     case Directions.North:
                         AddStraight(wallPolygons, west, east, WallType.Wall);
                         AddStraight(floorPolygons, eastPoint, west, WallType.None);
                         AddCorner(floorPolygons, south, eastPoint, center, corner, WallType.Floor);
                         break;
                     case Directions.West:
                         AddStraight(wallPolygons, south, north, WallType.Wall);
                         AddStraight(floorPolygons, north, southPoint, WallType.None);
                         AddCorner(floorPolygons, southPoint, east, center, corner, WallType.Floor);
                         break;
                     case Directions.NorthEast | Directions.SouthWest:
                         AddCorner(wallPolygons, north, east, center, corner, WallType.Wall);
                         AddCorner(wallPolygons, south, west, center, corner, WallType.Wall);
                         AddCorner(floorPolygons, west, southPoint, center, corner, WallType.None);
                         AddCorner(floorPolygons, southPoint, eastPoint, center, corner, WallType.Floor);
                         AddCorner(floorPolygons, eastPoint, north, center, corner, WallType.None);
                         break;
                     case Directions.North | Directions.West:
                         AddCorner(wallPolygons, south, east, center, corner, WallType.Both);
                         break;
                     default:
                         AddCorner(floorPolygons, south, east, center, corner, WallType.Floor);
                         break;
                 }
             }
             break;
     }
 }
Exemple #45
0
        private void DefineRay(ST sideType, CornerType corner)
        {
            int k = 0;

            //Debug.Log("Corner is " + corner);

            switch (corner)
            {
                case CornerType.Closed:
                    ray[0] = 0;
                    ray[1] = 0;
                    return;
                case CornerType.None:
                    k = 0;
                    break;
                case CornerType.Open:
                    k = 1;
                    break;
            }

            //switch (sideType)
            //{
            //    case ST.Top:
            //        ray[0] = 1 * k;
            //        ray[1] = 1;
            //        break;
            //    case ST.Right:
            //        ray[0] = 1;
            //        ray[1] = -1 * k;
            //        break;
            //    case ST.Down:
            //        ray[0] = -1 * k;
            //        ray[1] = -1;
            //        break;
            //    case ST.Left:
            //        ray[0] = -1;
            //        ray[1] = 1 * k;
            //        break;
            //}

            switch (sideType)
            {
                case ST.Top:
                    ray[0] = 1 * k;
                    ray[1] = -1;
                    break;
                case ST.Right:
                    ray[0] = -1;
                    ray[1] = -1 * k;
                    break;
                case ST.Down:
                    ray[0] = -1 * k;
                    ray[1] = 1;
                    break;
                case ST.Left:
                    ray[0] = 1;
                    ray[1] = 1 * k;
                    break;
            }

            ray[0] *= inCast ? 1 : -1;
            ray[1] *= inCast ? 1 : -1;
        }
Exemple #46
0
    void AddRotatedCenterCell(Vector3 north, Vector3 east, Vector3 south, Vector3 west, Vector3 center, CornerType corner, Directions edges, Directions walls)
    {
        var eastPoint = nudge(center, center, east);
        var westPoint = nudge(center, center, west);
        var northPoint = nudge(center, center, north);
        var southPoint = nudge(center, center, south);

        switch (edges)
        {
            case Directions.North:
                switch (walls)
                {
                    case Directions.West | Directions.North:
                        if (corner == CornerType.Square)
                        {
                            AddCorner(wallPolygons, south, west, center, corner, WallType.Both);
                            AddCorner(floorPolygons, east, south, center, corner, WallType.Floor);
                        }
                        else
                        {
                            AddCorner(wallPolygons, south, eastPoint, center, corner, WallType.Wall);
                            AddStraight(wallPolygons, eastPoint, west, WallType.Both);
                            AddCorner(floorPolygons, east, south, center, corner, WallType.None);
                        }
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                        if (!_filledGaps)
                            corner = CornerType.Diamond;

                        AddCorner(wallPolygons, east, south, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, south, eastPoint, center, corner, WallType.None);
                        AddStraight(floorPolygons, eastPoint, west, WallType.Floor);
                        break;
                    case Directions.All:
                        AddStraight(wallPolygons, east, west, WallType.Both);
                        break;
                    case Directions.North:
                    case Directions.NorthWest:
                    default:
                        AddStraight(floorPolygons, east, west, WallType.Floor);
                        break;
                }
                break;
            case Directions.South:
                switch (walls)
                {
                    case Directions.NorthWest:
                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, north, westPoint, center, corner, WallType.None);
                        AddStraight(floorPolygons, westPoint, east, WallType.Floor);
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                        if (!_filledGaps)
                            corner = CornerType.Diamond;

                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, north, westPoint, center, corner, WallType.None);
                        AddStraight(floorPolygons, westPoint, east, WallType.Floor);
                        break;
                    case Directions.West | Directions.North:
                    case Directions.North:
                    case Directions.All:
                        AddStraight(wallPolygons, west, east, WallType.Both);
                        break;
                    default:
                        AddStraight(floorPolygons, west, east, WallType.Floor);
                        break;
                }
                break;
            case Directions.East:
                switch (walls)
                {
                    case Directions.NorthWest:
                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddStraight(floorPolygons, south, northPoint, WallType.Floor);
                        AddCorner(floorPolygons, northPoint, west, center, corner, WallType.None);
                        break;
                    case Directions.North:
                        AddCorner(wallPolygons, west, north, center, CornerType.Square, WallType.Both);
                        AddCorner(floorPolygons, south, west, center, CornerType.Square, WallType.Floor);
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                        if (!_filledGaps)
                            corner = CornerType.Diamond;

                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddStraight(floorPolygons, south, northPoint, WallType.Floor);
                        AddCorner(floorPolygons, northPoint, west, center, corner, WallType.None);
                        break;
                    case Directions.West | Directions.North:
                    case Directions.All:
                        AddStraight(wallPolygons, south, north, WallType.Both);
                        break;
                    default:
                        AddStraight(floorPolygons, south, north, WallType.Floor);
                        break;
                }
                break;
            case Directions.West:
                switch (walls)
                {
                    case Directions.North:
                        AddCorner(wallPolygons, north, east, center, CornerType.Square, WallType.Both);
                        AddCorner(floorPolygons, east, south, center, CornerType.Square, WallType.Floor);
                        break;
                    case Directions.West | Directions.North:
                        AddStraight(wallPolygons, north, southPoint, WallType.Both);
                        AddCorner(wallPolygons, southPoint, east, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, east, south, center, corner, WallType.None);
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                        if (!_filledGaps)
                            corner = CornerType.Diamond;
                        AddCorner(wallPolygons, east, south, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, south, east, center, corner, WallType.None);
                        AddStraight(floorPolygons, north, south, WallType.Floor);
                        break;
                    case Directions.All:
                        AddStraight(wallPolygons, north, south, WallType.Both);
                        break;
                    case Directions.NorthWest:
                    default:
                        AddStraight(floorPolygons, north, south, WallType.Floor);
                        break;
                }
                break;
            case Directions.West | Directions.North:
                switch (walls)
                {
                    case Directions.West | Directions.North:
                        AddCorner(wallPolygons, eastPoint, southPoint, center, CornerType.Square, WallType.Both);
                        AddCorner(wallPolygons, southPoint, eastPoint, center, corner, WallType.None);
                        AddCorner(floorPolygons, east, south, center, corner, WallType.Floor);
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                        if (corner == CornerType.Square)
                        {
                            AddCorner(wallPolygons, east, south, center, corner, WallType.Wall);
                        }
                        else
                        {
                            AddCorner(floorPolygons, eastPoint, southPoint, center, CornerType.Square, WallType.Floor);
                            AddCorner(floorPolygons, southPoint, eastPoint, center, corner, WallType.None);
                            AddCorner(wallPolygons, east, south, center, corner, WallType.Wall);
                        }
                        break;
                    case Directions.All:
                        AddCorner(wallPolygons, east, south, center, CornerType.Square, WallType.Both);
                        break;
                    case Directions.North:
                    case Directions.NorthWest:
                    default:
                        AddCorner(floorPolygons, east, south, center, CornerType.Square, WallType.Floor);
                        break;
                }
                break;
            case Directions.North | Directions.East:
                switch (walls)
                {
                    case Directions.West | Directions.North:
                    case Directions.All:
                        AddCorner(wallPolygons, south, west, center, CornerType.Square, WallType.Both);
                        break;
                    case Directions.North:
                    case Directions.NorthWest:
                    case Directions.NorthWest | Directions.SouthEast:
                    default:
                        AddCorner(floorPolygons, south, west, center, CornerType.Square, WallType.Floor);
                        break;
                }
                break;
            case Directions.East | Directions.South:
                switch (walls)
                {
                    case Directions.NorthWest | Directions.SouthEast:
                    case Directions.NorthWest:
                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, northPoint, westPoint, center, corner, WallType.None);
                        AddCorner(floorPolygons, westPoint, northPoint, center, CornerType.Square, WallType.Floor);
                        break;
                    case Directions.North:
                    case Directions.West | Directions.North:
                    case Directions.All:
                        AddCorner(wallPolygons, west, north, center, CornerType.Square, WallType.Both);
                        break;
                    default:
                        AddCorner(floorPolygons, west, north, center, CornerType.Square, WallType.Floor);
                        break;
                }
                break;
            case Directions.South | Directions.West:
                switch (walls)
                {
                    case Directions.North:
                    case Directions.West | Directions.North:
                    case Directions.All:
                        AddCorner(wallPolygons, north, east, center, CornerType.Square, WallType.Both);
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                    case Directions.NorthWest:
                    default:
                        AddCorner(floorPolygons, north, east, center, CornerType.Square, WallType.Floor);
                        break;
                }
                break;
            default:
                switch (walls)
                {
                    case Directions.NorthWest:
                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, north, west, center, corner, WallType.None);
                        break;
                    case Directions.North:
                        AddStraight(wallPolygons, west, east, WallType.Wall);
                        AddStraight(floorPolygons, east, west, WallType.None);
                        break;
                    case Directions.West | Directions.North:
                        AddCorner(wallPolygons, south, east, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, east, south, center, corner, WallType.None);
                        break;
                    case Directions.NorthWest | Directions.SouthEast:
                        if (!_filledGaps)
                            corner = CornerType.Diamond;

                        AddCorner(wallPolygons, west, north, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, north, west, center, corner, WallType.None);

                        AddCorner(wallPolygons, east, south, center, corner, WallType.Wall);
                        AddCorner(floorPolygons, south, east, center, corner, WallType.None);
                        break;
                    default:
                        break;
                }
                break;
        }
    }
 /// <summary>
 /// Assigns Values of supplied <see cref="CornerShape"/> to current object.
 /// </summary>
 /// <param name="shape"><see cref="CornerShape"/> object whose value is to be assigned.</param>
 public void Assign(CornerShape shape)
 {
     TopLeft = shape.topLeft;
     TopRight = shape.topRight;
     BottomLeft = shape.bottomLeft;
     BottomRight = shape.bottomRight;
 }
        public static GraphicsPath CreatePath(
            RectangleF rect,
            int cornerRadius,
            int margin,
            CornerType corners
            )
        {
            GraphicsPath graphicsPath = new GraphicsPath() ;

            float xOffset = rect.X + margin ;
            float yOffset = rect.Y + margin ;
            float xExtent = rect.X + rect.Width - margin ;
            float yExtent = rect.Y + rect.Height - margin ;
            int diameter = cornerRadius << 1 ;

            // top arc
            if ((corners & CornerType.TopLeft) != 0) {
                graphicsPath.AddArc(new RectangleF(xOffset, yOffset, diameter, diameter), 180, 90) ;
            } else {
                graphicsPath.AddLine(new PointF(xOffset, yOffset + cornerRadius), new PointF(xOffset, yOffset)) ;
                graphicsPath.AddLine(new PointF(xOffset, yOffset), new PointF(xOffset + cornerRadius, yOffset)) ;
            }

            // top line
            graphicsPath.AddLine(new PointF(xOffset + cornerRadius, yOffset), new PointF(xExtent - cornerRadius, yOffset)) ;

            // top right arc
            if ((corners & CornerType.TopRight) != 0)
                graphicsPath.AddArc(new RectangleF(xExtent - diameter, yOffset, diameter,diameter), 270, 90) ;
            else {
                graphicsPath.AddLine(new PointF(xExtent - cornerRadius, yOffset), new PointF(xExtent, yOffset)) ;
                graphicsPath.AddLine(new PointF(xExtent, yOffset), new PointF(xExtent, yOffset + cornerRadius)) ;
            }

            // right line
            graphicsPath.AddLine(new PointF(xExtent, yOffset + cornerRadius), new PointF(xExtent, yExtent - cornerRadius)) ;

            // bottom right arc
            if ((corners & CornerType.BottomRight) != 0)
                graphicsPath.AddArc(new RectangleF(xExtent - diameter, yExtent - diameter, diameter,diameter), 0, 90) ;
            else {
                graphicsPath.AddLine(new PointF(xExtent, yExtent - cornerRadius),new PointF(xExtent, yExtent)) ;
                graphicsPath.AddLine(new PointF(xExtent, yExtent),new PointF(xExtent - cornerRadius, yExtent)) ;
            }

            // bottom line
            graphicsPath.AddLine(new PointF(xExtent - cornerRadius, yExtent), new PointF(xOffset + cornerRadius, yExtent)) ;

            // bottom left arc
            if ((corners & CornerType.BottomLeft) != 0)
                graphicsPath.AddArc(new RectangleF(xOffset, yExtent - diameter,diameter,diameter), 90, 90) ;
            else {
                 graphicsPath.AddLine(new PointF(xOffset + cornerRadius, yExtent), new PointF(xOffset, yExtent)) ;
                 graphicsPath.AddLine(new PointF(xOffset, yExtent), new PointF(xOffset, yExtent - cornerRadius)) ;
            }

            // left line
            graphicsPath.AddLine(new PointF(xOffset, yExtent - cornerRadius), new PointF(xOffset, yOffset + cornerRadius)) ;

            graphicsPath.CloseFigure() ;
            return graphicsPath ;
        }
Exemple #49
0
 void AddCenterCell(Vector3 north, Vector3 east, Vector3 south, Vector3 west, Vector3 center, CornerType corner, Directions edges, Directions walls)
 {
     switch (walls)
     {
         case Directions.None:
         case Directions.NorthWest:
         case Directions.North:
         case Directions.North | Directions.SouthWest:
         case Directions.NorthWest | Directions.SouthEast:
         case Directions.All:
             AddRotatedCenterCell(north, east, south, west, center, corner, edges, walls);
             break;
         case Directions.NorthEast:
         case Directions.East:
         case Directions.North | Directions.SouthEast:
         case Directions.NorthEast | Directions.SouthWest:
             AddRotatedCenterCell(east, south, west, north, center, corner, RotateCCW(edges), RotateCCW(walls));
             break;
         case Directions.SouthEast:
         case Directions.South:
         case Directions.NorthEast | Directions.South:
             AddRotatedCenterCell(south, west, north, east, center, corner, Rotate180(edges), Rotate180(walls));
             break;
         case Directions.SouthWest:
         case Directions.West:
         case Directions.West | Directions.SouthEast:
             AddRotatedCenterCell(west, north, east, south, center, corner, RotateCW(edges), RotateCW(walls));
             break;
     }
 }
Exemple #50
0
        private void AddCorner(CornerType cornerType)
        {
            Sprite corner = new Sprite(GetCorner().Sprite);

            //corner.Scale = GetScaleFactor();

            corner.Origin = new Vector2f(
                corner.Width / 2F,
                corner.Height / 2F);

            switch (cornerType)
            {
                case CornerType.TopLeft:        corner.Rotation = 90F; break;
                case CornerType.TopRight:       corner.Rotation = 180F; break;
                case CornerType.BottomLeft:     corner.Rotation = 0F;   break;
                case CornerType.BottomRight:    corner.Rotation = 270F;  break;
                default:                                                break;
            }

            Corners[cornerType] = corner;
        }
Exemple #51
0
 private Vector2f GetCornerDimension(CornerType cornerType)
 {
     switch (cornerType)
     {
         case CornerType.TopLeft: return new Vector2f(GetCorner().Dimension.Y, GetCorner().Dimension.X);
         case CornerType.TopRight: return GetCorner().Dimension;
         case CornerType.BottomLeft: return GetCorner().Dimension;
         case CornerType.BottomRight: return new Vector2f(GetCorner().Dimension.Y, GetCorner().Dimension.X);
         default: return GetCorner().Dimension;
     }
 }
Exemple #52
0
        void ChangeCornerPosition(CornerType type, int x, int y)
        {
            if (type == CornerType.LeftTop)
            {
                _points[0] = new Point(x, y);
            }
            if (type == CornerType.RightTop)
            {
                _points[1] = new Point(x, y);
            }

            if (type == CornerType.RightBottom)
            {
                _points[2] = new Point(x, y);
            }

            if (type == CornerType.LeftBottom)
            {
                _points[3] = new Point(x, y);
            }

            this.Invalidate();
        }
Exemple #53
0
 void AddSaddleCell(Vector3 north, Vector3 east, Vector3 south, Vector3 west, Vector3 center, CornerType corner, Directions edges, Directions walls)
 {
     if (!_filledGaps)
         corner = CornerType.Diamond;
     switch (edges)
     {
         case Directions.East | Directions.North:
         case Directions.West | Directions.South:
             break;
         case Directions.North:
         case Directions.West:
         case Directions.North | Directions.West:
             switch (walls)
             {
                 case Directions.NorthWest | Directions.SouthEast:
                 case Directions.SouthEast:
                     AddCorner(wallPolygons, east, south, center, corner, WallType.Both);
                     break;
                 default:
                     AddCorner(floorPolygons, east, south, center, corner, WallType.Floor);
                     break;
             }
             break;
         case Directions.East:
         case Directions.South:
         case Directions.East | Directions.South:
             switch (walls)
             {
                 case Directions.NorthWest | Directions.SouthEast:
                 case Directions.NorthWest:
                     AddCorner(wallPolygons, west, north, center, corner, WallType.Both);
                     break;
                 default:
                     AddCorner(floorPolygons, west, north, center, corner, WallType.Floor);
                     break;
             }
             break;
         default:
             switch (walls)
             {
                 case Directions.NorthWest | Directions.SouthEast:
                     AddCorner(wallPolygons, east, south, center, corner, WallType.Both);
                     AddCorner(wallPolygons, west, north, center, corner, WallType.Both);
                     break;
                 case Directions.NorthWest:
                     AddCorner(floorPolygons, east, south, center, corner, WallType.Floor);
                     AddCorner(wallPolygons, west, north, center, corner, WallType.Both);
                     break;
                 case Directions.SouthEast:
                     AddCorner(wallPolygons, east, south, center, corner, WallType.Both);
                     AddCorner(floorPolygons, west, north, center, corner, WallType.Floor);
                     break;
                 default:
                     AddCorner(floorPolygons, east, south, center, corner, WallType.Floor);
                     AddCorner(floorPolygons, west, north, center, corner, WallType.Floor);
                     break;
             }
             break;
     }
 }