コード例 #1
0
        internal void Write(BitWriter writer, DwgObjectMap objectMap, HashSet <int> writtenHandles, int pointerOffset, DwgVersionId version)
        {
            if (!writtenHandles.Add(Handle.HandleOrOffset))
            {
                // already been written
                return;
            }

            PrepareCommonValues();
            OnBeforeObjectWrite();
            SetCommonValues();
            objectMap.SetOffset(Handle.HandleOrOffset, writer.Position);

            // write object to memory so the size can be computed
            using (var ms = new MemoryStream())
            {
                var tempWriter = new BitWriter(ms);
                tempWriter.Write_BS((short)Type);
                WriteCommonDataStart(tempWriter, objectMap, pointerOffset);
                WriteSpecific(tempWriter, objectMap, pointerOffset, version);
                WriteCommonDataEnd(tempWriter, objectMap, pointerOffset);
                var tempBytes = tempWriter.AsBytes();

                // now output everything
                writer.StartCrcCalculation(initialValue: DwgHeaderVariables.InitialCrcValue);
                writer.Write_MS(tempBytes.Length);
                writer.WriteBytes(tempBytes);
                writer.WriteCrc();
            }

            foreach (var child in ChildItems)
            {
                child.Write(writer, objectMap, writtenHandles, pointerOffset, version);
            }
        }
コード例 #2
0
        public void WriteSimpleFileHeader()
        {
            var expected = new byte[]
            {
                (byte)'A', (byte)'C', (byte)'1', (byte)'0', (byte)'1', (byte)'4',
                0, 0, 0, 0, 0,
                42,                                             // maintver
                1,
                0x78, 0x56, 0x34, 0x12,                         // image seeker
                0, 0,                                           // unknown
                0x00, 0x01,                                     // codepage
                5, 0, 0, 0,                                     // 5 section locators
                0, 0, 0, 0, 0, 0, 0, 0, 0,                      // header locator
                0, 0, 0, 0, 0, 0, 0, 0, 0,                      // class section locator
                0, 0, 0, 0, 0, 0, 0, 0, 0,                      // object map locator
                0, 0, 0, 0, 0, 0, 0, 0, 0,                      // unknown R13C3 and later locator
                0, 0, 0, 0, 0, 0, 0, 0, 0,                      // unknown padding locator
                0x63, 0xF1,                                     // CRC
                0x95, 0xA0, 0x4E, 0x28, 0x99, 0x82, 0x1A, 0xE5, // sentinel
                0x5E, 0x41, 0xE0, 0x5F, 0x9D, 0x3A, 0x4D, 0x00,
            };

            var fileHeader = new DwgFileHeader(DwgVersionId.R14, 42, 0x12345678, 256);

            using (var ms = new MemoryStream())
            {
                var writer = new BitWriter(ms);
                fileHeader.Write(writer);
                var actual = writer.AsBytes();
                Assert.Equal(expected, actual);
            }
        }
コード例 #3
0
        public void RoundTrip()
        {
            foreach (var version in AllVersions)
            {
                using (var ms = new MemoryStream())
                {
                    // write it
                    var writer    = new BitWriter(ms);
                    var variables = new DwgHeaderVariables();
                    variables.Write(writer, version);

                    // read it
                    var reader     = new BitReader(writer.AsBytes());
                    var variables2 = DwgHeaderVariables.Parse(reader, version);

                    // this also verifies the CRC
                }
            }
        }