Example #1
0
        internal override bool TrySetPair(DxfCodePair pair)
        {
            switch (pair.Code)
            {
            case 1:
                this.Name = (pair.StringValue);
                break;

            case 70:
                this.Field = (pair.ShortValue);
                break;

            case 90:
                this.ColumnCount = (pair.IntegerValue);
                _readColumnCount = true;
                break;

            case 91:
                this.RowCount = (pair.IntegerValue);
                _readRowCount = true;
                break;

            // column headers
            case 92:
                _currentColumnCode = pair.IntegerValue;
                _currentColumn++;
                _currentRow = 0;
                break;

            case 2:
                this.ColumnNames.Add(pair.StringValue);
                break;

            // column values
            case 71:
                SetValue(BoolShort(pair.ShortValue));
                break;

            case 93:
                SetValue(pair.IntegerValue);
                break;

            case 40:
                SetValue(pair.DoubleValue);
                break;

            case 3:
                SetValue(pair.StringValue);
                break;

            case 10:
                _current2DPoint = new DxfPoint(pair.DoubleValue, 0.0, 0.0);
                break;

            case 20:
                _current2DPoint = _current2DPoint.WithUpdatedY(pair.DoubleValue);
                break;

            case 30:
                _current2DPoint = _current2DPoint.WithUpdatedZ(pair.DoubleValue);
                SetValue(_current2DPoint);
                _current2DPoint = default(DxfPoint);
                break;

            case 11:
                _current3DPoint = new DxfPoint(pair.DoubleValue, 0.0, 0.0);
                break;

            case 21:
                _current3DPoint = _current3DPoint.WithUpdatedY(pair.DoubleValue);
                break;

            case 31:
                _current3DPoint = _current3DPoint.WithUpdatedZ(pair.DoubleValue);
                SetValue(_current3DPoint);
                _current3DPoint = default(DxfPoint);
                break;

            case 331:
            case 360:
            case 350:
            case 340:
            case 330:
                if (_readRowCount || _readColumnCount)
                {
                    // TODO: differentiate between handle types
                    SetValue(HandleString(pair.StringValue));
                }
                else
                {
                    // still reading AcDbObject values
                    goto default;
                }
                break;

            default:
                return(base.TrySetPair(pair));
            }

            if (_readRowCount && _readColumnCount && !_createdTable)
            {
                Values        = new object[RowCount, ColumnCount];
                _createdTable = true;
            }

            return(true);
        }