Example #1
0
        public static DwgObjectCache Parse(BitReader reader, DwgVersionId version)
        {
            var objectCache  = new DwgObjectCache(version);
            var lastHandle   = 0;
            var lastLocation = 0;

            reader.StartCrcCheck();
            var sectionSize = reader.ReadShortBigEndian();

            while (sectionSize != 2)
            {
                var sectionStart = reader.Offset;
                var sectionEnd   = sectionStart + sectionSize - 2;
                while (reader.Offset < sectionEnd)
                {
                    // read data
                    var handleOffset   = reader.Read_MC(allowNegation: false);
                    var locationOffset = reader.Read_MC();
                    var handle         = lastHandle + handleOffset;
                    var location       = lastLocation + locationOffset;
                    objectCache._handleToOffset.Add(handle, location);
                    lastHandle   = handle;
                    lastLocation = location;
                }

                reader.ValidateCrc(initialValue: DwgHeaderVariables.InitialCrcValue, readCrcAsMsb: true);
                reader.StartCrcCheck();
                sectionSize = reader.ReadShortBigEndian();
            }

            reader.ValidateCrc(initialValue: DwgHeaderVariables.InitialCrcValue, readCrcAsMsb: true);
            return(objectCache);
        }