Пример #1
0
        private void UpdateFormat(ref FormatState state, StringBuilder data)
        {
            char[] trimChars = { ',' };
            switch (state)
            {
            case FormatState.Idle:
            {
                var str = BoardUtil.SplitLine(data, 1);
                switch (str[0].ToLowerInvariant())
                {
                case "board":
                    if (data.ToString().Contains("INCH units"))
                    {
                        InchUnits = true;
                    }
                    break;

                case "user":
                    str = BoardUtil.SplitLine(data, 8);
                    var loc = new Vector2();
                    loc.X          = ParseDouble(str[3].TrimEnd(trimChars));
                    loc.Y          = ParseDouble(str[5].TrimEnd(trimChars));
                    OriginLocation = loc;
                    OriginTurn     = ParseDouble(str[7].TrimEnd(trimChars));
                    break;

                case "x":
                    state = FormatState.ContourVertex;
                    break;
                }
                break;
            }

            case FormatState.ContourVertex:
            {
                // update contour
                var str     = BoardUtil.SplitLine(data, 2);
                var newVert = new Vector2(ParseDouble(str[0]), ParseDouble(str[1]));
                if (TopContour.Count > 0 && TopContour[TopContour.Count - 1] == newVert)
                {
                    break;
                }
                TopContour.Add(newVert);
                break;
            }
            }
        }
Пример #2
0
        private void Update(ref State currentState, ref FormatState fState,
                            ref NailsState nState, ref PinsState pState, StringBuilder data)
        {
            if (data.Length == 0 || data[0] == '\r')
            {
                //currentState = State.Idle;
                return;
            }
            if (data[0] == '<')
            {
                currentState = State.Idle;
            }
            switch (currentState)
            {
            case State.Idle:
                switch (data.ToString())
                {
                case "<<format.asc>>":
                    currentState = State.Format;
                    break;

                case "<<nails.asc>>":
                    currentState = State.Nails;
                    break;

                case "<<pins.asc>>":
                    currentState = State.Pins;
                    break;
                }
                break;

            case State.Format:
                UpdateFormat(ref fState, data);
                break;

            case State.Nails:
                UpdateNails(ref nState, data);
                break;

            case State.Pins:
                UpdatePins(ref pState, data);
                break;
            }
        }