Esempio n. 1
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;
            }
        }
Esempio n. 2
0
        private void UpdateNails(ref NailsState state, StringBuilder data)
        {
            switch (state)
            {
            case NailsState.Idle:
            {
                var str = BoardUtil.SplitLine(data, 1);
                switch (str[0].ToLowerInvariant())
                {
                case "test":
                    state = NailsState.Desc;
                    break;

                case "nail":
                    state = NailsState.NailEntry;
                    break;
                }
            }
            break;

            case NailsState.Desc:
                //if (data.ToString().Contains("INCH units"))
                //    InchUnits = true;
                state = NailsState.Idle;
                break;

            case NailsState.NailEntry:
            {
                var str  = BoardUtil.SplitLine(data, 8);
                var nail = new Nail();
                nail.Id = int.Parse(str[0].Substring(1));
                var loc = new Vector2();
                loc.X         = ParseDouble(str[1]);
                loc.Y         = ParseDouble(str[2]);
                nail.Location = loc;
                nail.Type     = byte.Parse(str[3]);
                nail.Side     = GetSide(str[5]);
                nail.Net      = int.Parse(str[6].Substring(1));
                nail.Name     = str[7];
                Nails.Add(nail);
            }
            break;
            }
        }