Пример #1
0
        //--------------------------------------------------------------------------------------------------

        public double ReadDouble()
        {
            Debug.Assert(DxfUtils.GetTypeForGroupCode(_GroupCode) == DxfUtils.Types.Double);

            double value = 0.0;

            if (_IsBinary)
            {
                var buffer = new byte[DxfUtils.GetBinarySize(DxfUtils.Types.Double)];
                if (_Stream.Read(buffer, 0, buffer.Length) != buffer.Length)
                {
                    Messages.Error($"Binary DXF is invalid/not complete.");
                    _GroupCode = -1;
                }
                else
                {
                    value = BitConverter.ToDouble(buffer, 0);
                }
            }
            else
            {
                if (!_Reader.EndOfStream)
                {
                    var s = _Reader.ReadLine()?.Trim();
                    if (!s.IsNullOrEmpty())
                    {
                        double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out value);
                    }
                }
            }

            _ReadGroupCode();
            return(value);
        }
Пример #2
0
        //--------------------------------------------------------------------------------------------------

        public void Skip()
        {
            if (_IsBinary)
            {
                var type = DxfUtils.GetTypeForGroupCode(_GroupCode);
                switch (type)
                {
                case DxfUtils.Types.String:
                {
                    int readByte;
                    do
                    {
                        readByte = _Stream.ReadByte();
                    } while (readByte > 0);

                    break;
                }

                case DxfUtils.Types.ByteChunk:
                {
                    int readByte = _Stream.ReadByte();
                    if (readByte == -1)
                    {
                        Messages.Error($"Binary DXF is invalid/not complete.");
                        _GroupCode = -1;
                        return;
                    }

                    _Stream.Seek(readByte, SeekOrigin.Current);
                    break;
                }

                default:
                {
                    int typeSize = DxfUtils.GetBinarySize(type);
                    if (typeSize == 0)
                    {
                        Messages.Error($"Binary DXF has group code {_GroupCode} of unknown type, the file cannot correctly parsed, in line {_Line}");
                        _GroupCode = -1;
                        return;
                    }

                    _Stream.Seek(typeSize, SeekOrigin.Current);
                    break;
                }
                }
            }
            else
            {
                if (_Reader.EndOfStream)
                {
                    return;
                }

                _Reader.ReadLine();
            }
            _ReadGroupCode();
        }