Ejemplo n.º 1
0
        internal static DxfClassesSection ClassesSectionFromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            var section = new DxfClassesSection();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading classes
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new class.", pair);
                }

                var cls = DxfClass.FromBuffer(buffer, version);
                if (cls != null)
                {
                    section.Classes.Add(cls);
                }
            }

            return section;
        }
Ejemplo n.º 2
0
        internal static DxfObjectsSection ObjectsSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var objects = new List <DxfObject>();

            objects.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading objects
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new object.", pair);
                }

                var obj = DxfObject.FromBuffer(buffer);
                if (obj != null)
                {
                    objects.Add(obj);
                }
            }

            var section = new DxfObjectsSection();

            section.Objects.AddRange(objects);
            return(section);
        }
Ejemplo n.º 3
0
        internal static DxfHeaderSection HeaderSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var                section     = new DxfHeaderSection();
            string             keyName     = null;
            Func <short, bool> shortToBool = value => value != 0;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                buffer.Advance();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading settings
                    break;
                }

                if (pair.Code == 9)
                {
                    // what setting to get
                    keyName = pair.StringValue;
                }
                else
                {
                    section.Header.SetHeaderVariable(keyName, pair);
                    if (string.Compare(keyName, "$ACADVER", StringComparison.OrdinalIgnoreCase) == 0 && section.Header.Version >= DxfAcadVersion.R2007)
                    {
                        // R2007 and up should switch to a UTF8 reader
                        buffer.SetUtf8Reader();
                    }
                }
            }

            return(section);
        }
Ejemplo n.º 4
0
        internal static DxfHeaderSection HeaderSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var                section     = new DxfHeaderSection();
            string             keyName     = null;
            Func <short, bool> shortToBool = value => value != 0;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                buffer.Advance();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading settings
                    break;
                }

                if (pair.Code == 9)
                {
                    // what setting to get
                    keyName = pair.StringValue;
                }
                else
                {
                    section.Header.SetHeaderVariable(keyName, pair);
                }
            }

            return(section);
        }
Ejemplo n.º 5
0
        internal static DxfEntitiesSection EntitiesSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var entities = new List <DxfEntity>();

            entities.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading entities
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new entity.", pair);
                }

                var entity = DxfEntity.FromBuffer(buffer);
                if (entity != null)
                {
                    entities.Add(entity);
                }
            }

            var section   = new DxfEntitiesSection();
            var collected = GatherEntities(entities);

            section.Entities.AddRange(collected);
            return(section);
        }
Ejemplo n.º 6
0
        internal virtual DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (pair.Code == 0)
                {
                    break;
                }

                if (!TrySetPair(pair))
                {
                    ExcessCodePairs.Add(pair);
                }

                buffer.Advance();
            }

            return(PostParse());
        }
Ejemplo n.º 7
0
        internal static DxfThumbnailImageSection ThumbnailImageSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            if (buffer.ItemsRemain)
            {
                var lengthPair = buffer.Peek();
                buffer.Advance();

                if (lengthPair.Code != 90)
                {
                    return null;
                }

                var length = lengthPair.IntegerValue;
                var lines = new List<string>();
                while (buffer.ItemsRemain)
                {
                    var pair = buffer.Peek();
                    buffer.Advance();

                    if (DxfCodePair.IsSectionEnd(pair))
                    {
                        break;
                    }

                    Debug.Assert(pair.Code == 310);
                    lines.Add(pair.StringValue);
                }

                var section = new DxfThumbnailImageSection();
                section.RawData = DxfCommonConverters.HexBytes(string.Join(string.Empty, lines));
                return section;
            }

            return null;
        }
Ejemplo n.º 8
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readingData = false;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                if (readingData)
                {
                    DataPairs.Add(pair);
                }
                else
                {
                    if (pair.Code == 280)
                    {
                        DuplicateRecordHandling = (DxfDictionaryDuplicateRecordHandling)pair.ShortValue;
                        buffer.Advance();
                        readingData = true;
                        continue;
                    }

                    if (base.TrySetPair(pair))
                    {
                        buffer.Advance();
                        continue;
                    }

                    if (this.TrySetExtensionData(pair, buffer))
                    {
                        continue;
                    }

                    if (pair.Code == 100)
                    {
                        Debug.Assert(pair.StringValue == "AcDbXrecord");
                        buffer.Advance();
                        continue;
                    }
                    else if (pair.Code == 5 || pair.Code == 105)
                    {
                        // these codes aren't allowed here
                        ExcessCodePairs.Add(pair);
                    }
                    else
                    {
                        DataPairs.Add(pair);
                        readingData = true;
                    }
                }

                buffer.Advance();
            }

            return(PostParse());
        }
Ejemplo n.º 9
0
        internal static DxfEntitiesSection EntitiesSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var entities = new List<DxfEntity>();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading entities
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new entity.", pair);
                }

                var entity = DxfEntity.FromBuffer(buffer);
                if (entity != null)
                {
                    entities.Add(entity);
                }
            }

            var section = new DxfEntitiesSection();
            var collected = GatherEntities(entities);
            section.Entities.AddRange(collected);
            return section;
        }
Ejemplo n.º 10
0
        internal static DxfClassesSection ClassesSectionFromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            var section = new DxfClassesSection();

            section.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading classes
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new class.", pair);
                }

                var cls = DxfClass.FromBuffer(buffer, version);
                if (cls != null)
                {
                    section.Classes.Add(cls);
                }
            }

            return(section);
        }
Ejemplo n.º 11
0
        internal static DxfBlocksSection BlocksSectionFromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            var section = new DxfBlocksSection();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionStart(pair))
                {
                    // done reading blocks, onto the next section
                    break;
                }
                else if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading blocks
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new block.", pair);
                }

                buffer.Advance(); // swallow (0, CLASS)
                var block = DxfBlock.FromBuffer(buffer, version);
                if (block != null)
                {
                    section.Blocks.Add(block);
                }
            }

            return section;
        }
Ejemplo n.º 12
0
        internal static DxfBlocksSection BlocksSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var section = new DxfBlocksSection();

            section.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionStart(pair))
                {
                    // done reading blocks, onto the next section
                    break;
                }
                else if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading blocks
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new block.", pair);
                }

                buffer.Advance(); // swallow (0, CLASS)
                var block = DxfBlock.FromBuffer(buffer);
                if (block != null)
                {
                    section.Blocks.Add(block);
                }
            }

            return(section);
        }
Ejemplo n.º 13
0
        internal static DxfAppId FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfAppId();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 14
0
        internal virtual DxfEntity PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                if (TrySetPair(pair))
                {
                    // pair was successfully applied; consume it
                    buffer.Advance();
                }
                else if (this.TrySetExtensionData(pair, buffer))
                {
                    // do nothing as TrySetExtensionData consumes as necessary
                }
                else
                {
                    // track it for later use and consume it
                    ExcessCodePairs.Add(pair);
                    buffer.Advance();
                }
            }

            return PostParse();
        }
Ejemplo n.º 15
0
        private static DxfPoint ReadPoint(DxfCodePair xCoord, DxfCodePairBufferReader buffer, int expectedFirstCode)
        {
            // first value
            var pair = xCoord;

            Debug.Assert(pair.Code == expectedFirstCode);
            var x = pair.DoubleValue;

            // second value
            Debug.Assert(buffer.ItemsRemain);
            pair = buffer.Peek();
            Debug.Assert(pair.Code == expectedFirstCode + 10);
            var y = pair.DoubleValue;

            buffer.Advance();

            // third value
            Debug.Assert(buffer.ItemsRemain);
            pair = buffer.Peek();
            Debug.Assert(pair.Code == expectedFirstCode + 20);
            var z = pair.DoubleValue;

            buffer.Advance();

            return(new DxfPoint(x, y, z));
        }
Ejemplo n.º 16
0
        internal static DxfObjectsSection ObjectsSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var objects = new List<DxfObject>();
            objects.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading objects
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }

                if (pair.Code != 0)
                {
                    throw new DxfReadException("Expected new object.", pair);
                }

                var obj = DxfObject.FromBuffer(buffer);
                if (obj != null)
                {
                    objects.Add(obj);
                }
            }

            var section = new DxfObjectsSection();
            section.Objects.AddRange(objects);
            return section;
        }
Ejemplo n.º 17
0
            public void ApplyCodePairs(DxfCodePairBufferReader buffer)
            {
                var pair = buffer.Peek();

                buffer.Advance();
                switch (pair.Code)
                {
                case 5:
                    ((IDxfItemInternal)this).Handle = DxfCommonConverters.UIntHandle(pair.StringValue);
                    break;

                case 8:
                    // just a re-iteration of the layer
                    break;

                case 67:
                    // just a re-iteration of the paper space setting
                    break;

                case 100:
                    Debug.Assert(pair.StringValue == AcDbEntityText || pair.StringValue == AcDbBlockEndText);
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;
                }
            }
Ejemplo n.º 18
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readingData = false;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                if (readingData)
                {
                    DataPairs.Add(pair);
                }
                else
                {
                    if (pair.Code == 280)
                    {
                        DuplicateRecordHandling = (DxfDictionaryDuplicateRecordHandling)pair.ShortValue;
                        buffer.Advance();
                        readingData = true;
                        continue;
                    }

                    if (base.TrySetPair(pair))
                    {
                        buffer.Advance();
                        continue;
                    }

                    if (this.TrySetExtensionData(pair, buffer))
                    {
                        continue;
                    }

                    if (pair.Code == 100)
                    {
                        Debug.Assert(pair.StringValue == "AcDbXrecord");
                        buffer.Advance();
                        continue;
                    }
                    else if (pair.Code == 5 || pair.Code == 105)
                    {
                        // these codes aren't allowed here
                        ExcessCodePairs.Add(pair);
                    }
                    else
                    {
                        DataPairs.Add(pair);
                        readingData = true;
                    }
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 19
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            var isReadyForSortHandles = false;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 5:
                    if (isReadyForSortHandles)
                    {
                        SortItemsPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.HandleString(pair.StringValue)));
                    }
                    else
                    {
                        ((IDxfItemInternal)this).Handle = DxfCommonConverters.HandleString(pair.StringValue);
                        isReadyForSortHandles           = true;
                    }
                    break;

                case 100:
                    isReadyForSortHandles = true;
                    break;

                case 330:
                    ((IDxfItemInternal)this).OwnerHandle = DxfCommonConverters.HandleString(pair.StringValue);
                    isReadyForSortHandles = true;
                    break;

                case 331:
                    EntitiesPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.HandleString(pair.StringValue)));
                    isReadyForSortHandles = true;
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
Ejemplo n.º 20
0
        internal override DxfEntity PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 10:
                    // start a new vertex
                    Vertices.Add(new DxfLwPolylineVertex());
                    Vertices.Last().X = pair.DoubleValue;
                    break;

                case 20:
                    Vertices.Last().Y = pair.DoubleValue;
                    break;

                case 40:
                    Vertices.Last().StartingWidth = pair.DoubleValue;
                    break;

                case 41:
                    Vertices.Last().EndingWidth = pair.DoubleValue;
                    break;

                case 42:
                    Vertices.Last().Bulge = pair.DoubleValue;
                    break;

                case 91:
                    Vertices.Last().Identifier = pair.IntegerValue;
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
Ejemplo n.º 21
0
 private static void SwallowEntity(DxfCodePairBufferReader buffer)
 {
     while (buffer.ItemsRemain)
     {
         var pair = buffer.Peek();
         if (pair.Code == 0)
             break;
         buffer.Advance();
     }
 }
Ejemplo n.º 22
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (pair.Code == 0)
                {
                    break;
                }

                switch (pair.Code)
                {
                case 1:
                    Debug.Assert(pair.StringValue == "SectionTypeSettings");
                    buffer.Advance();
                    for (var sectionSettings = DxfSectionTypeSettings.FromBuffer(buffer); sectionSettings != null; sectionSettings = DxfSectionTypeSettings.FromBuffer(buffer))
                    {
                        SectionTypeSettings.Add(sectionSettings);
                    }
                    break;

                case 90:
                    SectionType = pair.IntegerValue;
                    buffer.Advance();
                    break;

                case 91:
                    var generationSettingsCount = pair.IntegerValue;
                    buffer.Advance();
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }

                    buffer.Advance();
                    break;
                }
            }

            return(PostParse());
        }
Ejemplo n.º 23
0
 internal static void SwallowSection(DxfCodePairBufferReader buffer)
 {
     while (buffer.ItemsRemain)
     {
         var pair = buffer.Peek();
         buffer.Advance();
         if (DxfCodePair.IsSectionEnd(pair))
         {
             break;
         }
     }
 }
Ejemplo n.º 24
0
        internal static DxfXDataItem FromBuffer(DxfCodePairBufferReader buffer)
        {
            var pair = buffer.Peek();

            buffer.Advance();
            switch ((DxfXDataType)pair.Code)
            {
            case DxfXDataType.String:
                return(new DxfXDataString(pair.StringValue));

            case DxfXDataType.ControlString:
                return(DxfXDataItemList.ListFromBuffer(buffer));

            case DxfXDataType.Layer:
                return(new DxfXDataLayerName(pair.StringValue));

            case DxfXDataType.BinaryData:
                return(new DxfXDataBinaryData(DxfCommonConverters.HexBytes(pair.StringValue)));

            case DxfXDataType.Handle:
                return(new DxfXDataHandle(DxfCommonConverters.UIntHandle(pair.StringValue)));

            case DxfXDataType.RealTriple:
                return(new DxfXData3Reals(ReadPoint(pair, buffer, pair.Code)));

            case DxfXDataType.WorldSpacePosition:
                return(new DxfXDataWorldSpacePosition(ReadPoint(pair, buffer, pair.Code)));

            case DxfXDataType.WorldSpaceDisplacement:
                return(new DxfXDataWorldSpaceDisplacement(ReadPoint(pair, buffer, pair.Code)));

            case DxfXDataType.WorldDirection:
                return(new DxfXDataWorldDirection(ReadPoint(pair, buffer, pair.Code)));

            case DxfXDataType.Real:
                return(new DxfXDataReal(pair.DoubleValue));

            case DxfXDataType.Distance:
                return(new DxfXDataDistance(pair.DoubleValue));

            case DxfXDataType.ScaleFactor:
                return(new DxfXDataScaleFactor(pair.DoubleValue));

            case DxfXDataType.Integer:
                return(new DxfXDataInteger(pair.ShortValue));

            case DxfXDataType.Long:
                return(new DxfXDataLong(pair.IntegerValue));

            default:
                return(null);    // unexpected XDATA code pair
            }
        }
Ejemplo n.º 25
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readVersionNumber = false;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 5:
                    // pointer to a new light
                    LightsPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.UIntHandle(pair.StringValue)));
                    break;

                case 1:
                    // don't worry about the name; it'll be read from the light entity directly
                    break;

                case 90:
                    if (readVersionNumber)
                    {
                        // count of lights is ignored since it's implicitly set by reading the values
                    }
                    else
                    {
                        Version           = pair.IntegerValue;
                        readVersionNumber = true;
                    }
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
Ejemplo n.º 26
0
        internal static DxfSection FromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            Debug.Assert(buffer.ItemsRemain);
            var sectionType = buffer.Peek();

            buffer.Advance();
            if (sectionType.Code != 2)
            {
                throw new DxfReadException($"Expected code 2, got {sectionType.Code}", sectionType);
            }

            DxfSection section;

            switch (sectionType.StringValue)
            {
            case BlocksSectionText:
                section = DxfBlocksSection.BlocksSectionFromBuffer(buffer, version);
                break;

            case ClassesSectionText:
                section = DxfClassesSection.ClassesSectionFromBuffer(buffer, version);
                break;

            case EntitiesSectionText:
                section = DxfEntitiesSection.EntitiesSectionFromBuffer(buffer);
                break;

            case HeaderSectionText:
                section = DxfHeaderSection.HeaderSectionFromBuffer(buffer);
                break;

            case ObjectsSectionText:
                section = DxfObjectsSection.ObjectsSectionFromBuffer(buffer);
                break;

            case TablesSectionText:
                section = DxfTablesSection.TablesSectionFromBuffer(buffer);
                break;

            case ThumbnailImageSectionText:
                section = DxfThumbnailImageSection.ThumbnailImageSectionFromBuffer(buffer);
                break;

            default:
                SwallowSection(buffer);
                section = null;
                break;
            }

            return(section);
        }
Ejemplo n.º 27
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            var isReadyForSortHandles = false;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                    case 5:
                        if (isReadyForSortHandles)
                        {
                            SortItemsPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.UIntHandle(pair.StringValue)));
                        }
                        else
                        {
                            ((IDxfItemInternal)this).Handle = DxfCommonConverters.UIntHandle(pair.StringValue);
                            isReadyForSortHandles = true;
                        }
                        break;
                    case 100:
                        isReadyForSortHandles = true;
                        break;
                    case 330:
                        ((IDxfItemInternal)this).OwnerHandle = DxfCommonConverters.UIntHandle(pair.StringValue);
                        isReadyForSortHandles = true;
                        break;
                    case 331:
                        EntitiesPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.UIntHandle(pair.StringValue)));
                        isReadyForSortHandles = true;
                        break;
                    default:
                        ExcessCodePairs.Add(pair);
                        break;
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 28
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readVersionNumber = false;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                if (TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                    case 5:
                        // start a new light item
                        Lights.Add(new DxfLightListItem());
                        Lights.Last().Handle = UIntHandle(pair.StringValue);
                        break;
                    case 1:
                        Lights.Last().Name = pair.StringValue;
                        break;
                    case 90:
                        if (readVersionNumber)
                        {
                            // count of lights is ignored since it's implicitly set by reading the values
                        }
                        else
                        {
                            Version = pair.IntegerValue;
                            readVersionNumber = true;
                        }
                        break;
                    default:
                        if (!base.TrySetPair(pair))
                        {
                            ExcessCodePairs.Add(pair);
                        }
                        break;
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 29
0
        internal override DxfEntity PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                    case 10:
                        // start a new vertex
                        Vertices.Add(new DxfLwPolylineVertex());
                        Vertices.Last().X = pair.DoubleValue;
                        break;
                    case 20:
                        Vertices.Last().Y = pair.DoubleValue;
                        break;
                    case 40:
                        Vertices.Last().StartingWidth = pair.DoubleValue;
                        break;
                    case 41:
                        Vertices.Last().EndingWidth = pair.DoubleValue;
                        break;
                    case 42:
                        Vertices.Last().Bulge = pair.DoubleValue;
                        break;
                    case 91:
                        Vertices.Last().Identifier = pair.IntegerValue;
                        break;
                    default:
                        if (!base.TrySetPair(pair))
                        {
                            ExcessCodePairs.Add(pair);
                        }
                        break;
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 30
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readVersionNumber = false;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                    case 5:
                        // pointer to a new light
                        LightsPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.UIntHandle(pair.StringValue)));
                        break;
                    case 1:
                        // don't worry about the name; it'll be read from the light entity directly
                        break;
                    case 90:
                        if (readVersionNumber)
                        {
                            // count of lights is ignored since it's implicitly set by reading the values
                        }
                        else
                        {
                            Version = pair.IntegerValue;
                            readVersionNumber = true;
                        }
                        break;
                    default:
                        if (!base.TrySetPair(pair))
                        {
                            ExcessCodePairs.Add(pair);
                        }
                        break;
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 31
0
        internal static DxfXData FromBuffer(DxfCodePairBufferReader buffer, string applicationName)
        {
            var items = new List<DxfXDataItem>();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == (int)DxfXDataType.ApplicationName || pair.Code < 1000)
                {
                    // new xdata or non-xdata
                    break;
                }

                items.Add(DxfXDataItem.FromBuffer(buffer));
            }

            return new DxfXData(applicationName, items);
        }
Ejemplo n.º 32
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool isReadingPlotSettings = true;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (isReadingPlotSettings)
                {
                    if (pair.Code == 100 && pair.StringValue == "AcDbLayout")
                    {
                        isReadingPlotSettings = false;
                    }
                    else
                    {
                        if (!base.TrySetPair(pair))
                        {
                            ExcessCodePairs.Add(pair);
                        }
                    }
                }
                else
                {
                    if (!TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                }

                buffer.Advance();
            }

            return(PostParse());
        }
Ejemplo n.º 33
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool isReadingPlotSettings = true;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                if (TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (isReadingPlotSettings)
                {
                    if (pair.Code == 100 && pair.StringValue == "AcDbLayout")
                    {
                        isReadingPlotSettings = false;
                    }
                    else
                    {
                        if (!base.TrySetPair(pair))
                        {
                            ExcessCodePairs.Add(pair);
                        }
                    }
                }
                else
                {
                    if (!TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 34
0
        internal static DxfHeaderSection HeaderSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            var                section     = new DxfHeaderSection();
            string             keyName     = null;
            Func <short, bool> shortToBool = value => value != 0;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                buffer.Advance();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading settings
                    break;
                }

                if (pair.Code == 9)
                {
                    // what setting to get
                    keyName = pair.StringValue;
                }
                else
                {
                    section.Header.SetHeaderVariable(keyName, pair);
                    if (string.Compare(keyName, "$DWGCODEPAGE", StringComparison.OrdinalIgnoreCase) == 0 && section.Header.Version <= DxfAcadVersion.R2004)
                    {
                        // R2004 and before should honor the specified code page
                        if (DxfEncodingHelper.TryParseEncoding(pair.StringValue, out var codePage))
                        {
                            var encoding = Encoding.GetEncoding(codePage);
                            buffer.SetReaderEncoding(encoding);
                        }
                    }
                    else if (string.Compare(keyName, "$ACADVER", StringComparison.OrdinalIgnoreCase) == 0 && section.Header.Version >= DxfAcadVersion.R2007)
                    {
                        // R2007 and up should switch to a UTF8 reader
                        buffer.SetReaderEncoding(Encoding.UTF8);
                    }
                }
            }

            return(section);
        }
Ejemplo n.º 35
0
        internal static DxfSection FromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            Debug.Assert(buffer.ItemsRemain);
            var sectionType = buffer.Peek();
            buffer.Advance();
            if (sectionType.Code != 2)
            {
                throw new DxfReadException($"Expected code 2, got {sectionType.Code}", sectionType);
            }

            DxfSection section;
            switch (sectionType.StringValue)
            {
                case BlocksSectionText:
                    section = DxfBlocksSection.BlocksSectionFromBuffer(buffer, version);
                    break;
                case ClassesSectionText:
                    section = DxfClassesSection.ClassesSectionFromBuffer(buffer, version);
                    break;
                case EntitiesSectionText:
                    section = DxfEntitiesSection.EntitiesSectionFromBuffer(buffer);
                    break;
                case HeaderSectionText:
                    section = DxfHeaderSection.HeaderSectionFromBuffer(buffer);
                    break;
                case ObjectsSectionText:
                    section = DxfObjectsSection.ObjectsSectionFromBuffer(buffer);
                    break;
                case TablesSectionText:
                    section = DxfTablesSection.TablesSectionFromBuffer(buffer);
                    break;
                case ThumbnailImageSectionText:
                    section = DxfThumbnailImageSection.ThumbnailImageSectionFromBuffer(buffer);
                    break;
                default:
                    SwallowSection(buffer);
                    section = null;
                    break;
            }

            return section;
        }
Ejemplo n.º 36
0
 public void ApplyCodePairs(DxfCodePairBufferReader buffer, DxfAcadVersion version)
 {
     var pair = buffer.Peek();
     buffer.Advance();
     switch (pair.Code)
     {
         case 5:
             Handle = DxfCommonConverters.UIntHandle(pair.StringValue);
             break;
         case 8:
             Debug.Assert(version >= DxfAcadVersion.R13);
             break;
         case 100:
             Debug.Assert(pair.StringValue == AcDbEntityText || pair.StringValue == AcDbBlockEndText);
             break;
         case DxfCodePairGroup.GroupCodeNumber:
             var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
             ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
             break;
     }
 }
Ejemplo n.º 37
0
        internal static DxfCodePairGroup FromBuffer(DxfCodePairBufferReader buffer, string groupName)
        {
            var items = new List<IDxfCodePairOrGroup>();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    Debug.Assert(false, "Unexpected end of section/file while parsing group.");
                    break;
                }

                buffer.Advance();
                if (pair.Code == GroupCodeNumber)
                {
                    if (pair.StringValue == "}")
                    {
                        // end of group
                        break;
                    }
                    else if (pair.StringValue.StartsWith("{"))
                    {
                        // nested group
                        var subGroupName = GetGroupName(pair.StringValue);
                        var subGroup = FromBuffer(buffer, subGroupName);
                        items.Add(subGroup);
                    }
                    else
                    {
                        throw new DxfReadException("Unexpected code pair group text", pair);
                    }
                }
                else
                {
                    items.Add(pair);
                }
            }

            return new DxfCodePairGroup(groupName, items);
        }
Ejemplo n.º 38
0
        internal static DxfTable ReadFromBuffer(DxfCodePairBufferReader buffer)
        {
            var table = new DxfStyleTable();

            table.Items.Clear();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                buffer.Advance();
                if (DxfTablesSection.IsTableEnd(pair))
                {
                    break;
                }

                if (pair.Code == 0 && pair.StringValue == DxfTable.StyleText)
                {
                    var item = DxfStyle.FromBuffer(buffer);
                    table.Items.Add(item);
                }
            }

            return(table);
        }
Ejemplo n.º 39
0
        internal static DxfXDataItemList ListFromBuffer(DxfCodePairBufferReader buffer)
        {
            Debug.Assert(buffer.ItemsRemain);
            DxfCodePair pair;
            var         items = new List <DxfXDataItem>();

            while (buffer.ItemsRemain)
            {
                pair = buffer.Peek();
                if (pair.Code == (int)DxfXDataType.ControlString && pair.StringValue == "}")
                {
                    buffer.Advance();
                    break;
                }

                var item = DxfXDataItem.FromBuffer(buffer);
                if (item != null)
                {
                    items.Add(item);
                }
            }

            return(new DxfXDataItemList(items));
        }
        internal static DxfThumbnailImageSection ThumbnailImageSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            if (buffer.ItemsRemain)
            {
                var lengthPair = buffer.Peek();
                buffer.Advance();

                if (lengthPair.Code != 90)
                {
                    return(null);
                }

                var length = lengthPair.IntegerValue;
                var lines  = new List <string>();
                while (buffer.ItemsRemain)
                {
                    var pair = buffer.Peek();
                    buffer.Advance();

                    if (DxfCodePair.IsSectionEnd(pair))
                    {
                        break;
                    }

                    Debug.Assert(pair.Code == 310);
                    lines.Add(pair.StringValue);
                }

                var section = new DxfThumbnailImageSection();
                section.Clear();
                section.RawData = DxfCommonConverters.HexBytes(string.Join(string.Empty, lines.ToArray()));
                return(section);
            }

            return(null);
        }
Ejemplo n.º 41
0
        internal static DxfThumbnailImageSection ThumbnailImageSectionFromBuffer(DxfCodePairBufferReader buffer)
        {
            if (buffer.ItemsRemain)
            {
                var lengthPair = buffer.Peek();
                buffer.Advance();

                if (lengthPair.Code != 90)
                {
                    return(null);
                }

                var length  = lengthPair.IntegerValue;
                var rawData = new List <byte>();
                while (buffer.ItemsRemain)
                {
                    var pair = buffer.Peek();
                    buffer.Advance();

                    if (DxfCodePair.IsSectionEnd(pair))
                    {
                        break;
                    }

                    Debug.Assert(pair.Code == 310);
                    rawData.AddRange(pair.BinaryValue);
                }

                var section = new DxfThumbnailImageSection();
                section.Clear();
                section.RawData = rawData.ToArray();
                return(section);
            }

            return(null);
        }
Ejemplo n.º 42
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readDuplicateFlag = false;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                if (TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (pair.Code == 280 && !readDuplicateFlag)
                {
                    DuplicateRecordHandling = (DxfDictionaryDuplicateRecordHandling)pair.ShortValue;
                    readDuplicateFlag = true;
                }
                else if (pair.Code == 5 || pair.Code == 105)
                {
                    // these codes aren't allowed here
                    ExcessCodePairs.Add(pair);
                }
                else
                {
                    DataPairs.Add(pair);
                }

                buffer.Advance();
            }

            return PostParse();
        }
Ejemplo n.º 43
0
        internal static DxfStyle FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfStyle();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 40:
                        item.TextHeight = (pair.DoubleValue);
                        break;
                    case 41:
                        item.WidthFactor = (pair.DoubleValue);
                        break;
                    case 50:
                        item.ObliqueAngle = (pair.DoubleValue);
                        break;
                    case 71:
                        item.TextGenerationFlags = (int)(pair.ShortValue);
                        break;
                    case 42:
                        item.LastHeightUsed = (pair.DoubleValue);
                        break;
                    case 3:
                        item.PrimaryFontFileName = (pair.StringValue);
                        break;
                    case 4:
                        item.BigFontFileName = (pair.StringValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 44
0
        internal static DxfBlock FromBuffer(DxfCodePairBufferReader buffer)
        {
            if (!buffer.ItemsRemain)
            {
                return null;
            }

            var block = new DxfBlock();
            var readingBlockStart = true;
            var readingBlockEnd = false;
            var entities = new List<DxfEntity>();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading blocks
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }
                else if (IsBlockStart(pair))
                {
                    if (readingBlockStart)
                    {
                        // if another block is found, stop reading this one because some blocks don't specify (0, ENDBLK)
                        break;
                    }

                    break;
                }
                else if (IsBlockEnd(pair))
                {
                    if (!readingBlockStart) throw new DxfReadException("Unexpected block end", pair);
                    readingBlockStart = false;
                    readingBlockEnd = true;
                    buffer.Advance(); // swallow (0, ENDBLK)
                }
                else if (pair.Code == 0)
                {
                    // should be an entity
                    var entity = DxfEntity.FromBuffer(buffer);
                    if (entity != null)
                    {
                        // entity could be null if it's unsupported
                        entities.Add(entity);
                    }
                }
                else
                {
                    // read value pair
                    if (readingBlockStart)
                    {
                        buffer.Advance();
                        switch (pair.Code)
                        {
                            case 1:
                                block.XrefName = pair.StringValue;
                                break;
                            case 2:
                                block.Name = pair.StringValue;
                                break;
                            case 3:
                                break;
                            case 4:
                                block.Description = pair.StringValue;
                                break;
                            case 5:
                                ((IDxfItemInternal)block).Handle = DxfCommonConverters.UIntHandle(pair.StringValue);
                                break;
                            case 8:
                                block.Layer = pair.StringValue;
                                break;
                            case 10:
                                block.BasePoint = block.BasePoint.WithUpdatedX(pair.DoubleValue);
                                break;
                            case 20:
                                block.BasePoint = block.BasePoint.WithUpdatedY(pair.DoubleValue);
                                break;
                            case 30:
                                block.BasePoint = block.BasePoint.WithUpdatedZ(pair.DoubleValue);
                                break;
                            case 67:
                                block.IsInPaperSpace = DxfCommonConverters.BoolShort(pair.ShortValue);
                                break;
                            case 70:
                                block.Flags = pair.ShortValue;
                                break;
                            case 330:
                                ((IDxfItemInternal)block).OwnerHandle = DxfCommonConverters.UIntHandle(pair.StringValue);
                                break;
                            case DxfCodePairGroup.GroupCodeNumber:
                                var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                                block.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                                break;
                            case (int)DxfXDataType.ApplicationName:
                                block.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                                break;
                        }
                    }
                    else if (readingBlockEnd)
                    {
                        block.EndBlock.ApplyCodePairs(buffer);
                    }
                    else
                    {
                        throw new DxfReadException("Unexpected pair in block", pair);
                    }
                }
            }

            var collected = DxfEntitiesSection.GatherEntities(entities);
            foreach (var entity in collected)
            {
                block.Entities.Add(entity);
            }

            return block;
        }
Ejemplo n.º 45
0
        internal static DxfSectionTypeSettings FromBuffer(DxfCodePairBufferReader buffer)
        {
            if (buffer.Peek()?.Code == 0)
            {
                return(null);
            }

            var settings = new DxfSectionTypeSettings();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                switch (pair.Code)
                {
                case 1:
                    settings.DestinationFileName = pair.StringValue;
                    buffer.Advance();
                    break;

                case 2:
                    Debug.Assert(pair.StringValue == "SectionGeometrySettings");
                    buffer.Advance();
                    for (var geometry = DxfSectionGeometrySettings.FromBuffer(buffer); geometry != null; geometry = DxfSectionGeometrySettings.FromBuffer(buffer))
                    {
                        settings.GeometrySettings.Add(geometry);
                    }
                    break;

                case 3:
                    Debug.Assert(pair.StringValue == "SectionTypeSettingsEnd");
                    buffer.Advance();
                    break;

                case 90:
                    settings.SectionType = pair.IntegerValue;
                    buffer.Advance();
                    break;

                case 91:
                    settings.IsGenerationOption = pair.IntegerValue != 0;
                    buffer.Advance();
                    break;

                case 92:
                    var sourceObjectsCount = pair.IntegerValue;
                    buffer.Advance();
                    break;

                case 93:
                    var generationSettingsCount = pair.IntegerValue;
                    buffer.Advance();
                    break;

                case 330:
                    settings.SourceObjectHandles.Add(DxfCommonConverters.UIntHandle(pair.StringValue));
                    buffer.Advance();
                    break;

                case 331:
                    settings.DestinationObjectHandle = DxfCommonConverters.UIntHandle(pair.StringValue);
                    buffer.Advance();
                    break;

                default:
                    return(settings);
                }
            }

            return(settings);
        }
Ejemplo n.º 46
0
        internal static DxfSectionGeometrySettings FromBuffer(DxfCodePairBufferReader buffer)
        {
            var stillReading = true;
            var settings     = new DxfSectionGeometrySettings();

            if (buffer.Peek()?.Code != 90)
            {
                // only code 90 can start one of these
                return(null);
            }

            while (buffer.ItemsRemain && stillReading)
            {
                var pair = buffer.Peek();
                switch (pair.Code)
                {
                case 1:
                    settings.PlotstyleName = pair.StringValue;
                    break;

                case 2:
                    settings.HatchPatternName = pair.StringValue;
                    break;

                case 3:
                    Debug.Assert(pair.StringValue == "SectionGeometrySettingsEnd");
                    stillReading = false;
                    break;

                case 6:
                    settings.LinetypeName = pair.StringValue;
                    break;

                case 8:
                    settings.LayerName = pair.StringValue;
                    break;

                case 40:
                    settings.LinetypeScale = pair.DoubleValue;
                    break;

                case 41:
                    settings.HatchAngle = pair.DoubleValue;
                    break;

                case 42:
                    settings.HatchScale = pair.DoubleValue;
                    break;

                case 43:
                    settings.HatchSpacing = pair.DoubleValue;
                    break;

                case 63:
                    settings.Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 70:
                    settings.FaceTransparency = pair.ShortValue;
                    break;

                case 71:
                    settings.EdgeTransparency = pair.ShortValue;
                    break;

                case 72:
                    settings.HatchPatternType = pair.ShortValue;
                    break;

                case 90:
                    settings.SectionType = pair.IntegerValue;
                    break;

                case 91:
                    settings.GeometryCount = pair.IntegerValue;
                    break;

                case 92:
                    settings.BitFlags = pair.IntegerValue;
                    break;

                case 370:
                    settings.LineWeight = pair.ShortValue;
                    break;

                default:
                    // unexpected end, return immediately without consuming the code pair
                    return(settings);
                }

                buffer.Advance();
            }

            return(settings);
        }
Ejemplo n.º 47
0
        internal static DxfTable ReadFromBuffer(DxfCodePairBufferReader buffer)
        {
            var table = new DxfViewTable();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                buffer.Advance();
                if (DxfTablesSection.IsTableEnd(pair))
                {
                    break;
                }

                if (pair.Code == 0 && pair.StringValue == DxfTable.ViewText)
                {
                    var item = DxfView.FromBuffer(buffer);
                    table.Items.Add(item);
                }
            }

            return table;
        }
Ejemplo n.º 48
0
        internal static DxfUcs FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfUcs();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 10:
                        item.Origin.X = (pair.DoubleValue);
                        break;
                    case 20:
                        item.Origin.Y = (pair.DoubleValue);
                        break;
                    case 30:
                        item.Origin.Z = (pair.DoubleValue);
                        break;
                    case 11:
                        item.XAxis.X = (pair.DoubleValue);
                        break;
                    case 21:
                        item.XAxis.Y = (pair.DoubleValue);
                        break;
                    case 31:
                        item.XAxis.Z = (pair.DoubleValue);
                        break;
                    case 12:
                        item.YAxis.X = (pair.DoubleValue);
                        break;
                    case 22:
                        item.YAxis.Y = (pair.DoubleValue);
                        break;
                    case 32:
                        item.YAxis.Z = (pair.DoubleValue);
                        break;
                    case 79:
                        item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                        break;
                    case 146:
                        item.Elevation = (pair.DoubleValue);
                        break;
                    case 346:
                        item.BaseUcsHandle = UIntHandle(pair.StringValue);
                        break;
                    case 71:
                        item.OrthographicType = (DxfOrthographicViewType)(pair.ShortValue);
                        break;
                    case 13:
                        item.OrthographicOrigin.X = (pair.DoubleValue);
                        break;
                    case 23:
                        item.OrthographicOrigin.Y = (pair.DoubleValue);
                        break;
                    case 33:
                        item.OrthographicOrigin.Z = (pair.DoubleValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 49
0
        internal static DxfViewPort FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfViewPort();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 10:
                        item.LowerLeft.X = (pair.DoubleValue);
                        break;
                    case 20:
                        item.LowerLeft.Y = (pair.DoubleValue);
                        break;
                    case 11:
                        item.UpperRight.X = (pair.DoubleValue);
                        break;
                    case 21:
                        item.UpperRight.Y = (pair.DoubleValue);
                        break;
                    case 12:
                        item.ViewCenter.X = (pair.DoubleValue);
                        break;
                    case 22:
                        item.ViewCenter.Y = (pair.DoubleValue);
                        break;
                    case 13:
                        item.SnapBasePoint.X = (pair.DoubleValue);
                        break;
                    case 23:
                        item.SnapBasePoint.Y = (pair.DoubleValue);
                        break;
                    case 14:
                        item.SnapSpacing.X = (pair.DoubleValue);
                        break;
                    case 24:
                        item.SnapSpacing.Y = (pair.DoubleValue);
                        break;
                    case 15:
                        item.GridSpacing.X = (pair.DoubleValue);
                        break;
                    case 25:
                        item.GridSpacing.Y = (pair.DoubleValue);
                        break;
                    case 16:
                        item.ViewDirection.X = (pair.DoubleValue);
                        break;
                    case 26:
                        item.ViewDirection.Y = (pair.DoubleValue);
                        break;
                    case 36:
                        item.ViewDirection.Z = (pair.DoubleValue);
                        break;
                    case 17:
                        item.TargetViewPoint.X = (pair.DoubleValue);
                        break;
                    case 27:
                        item.TargetViewPoint.Y = (pair.DoubleValue);
                        break;
                    case 37:
                        item.TargetViewPoint.Z = (pair.DoubleValue);
                        break;
                    case 40:
                        item.ViewHeight = (pair.DoubleValue);
                        break;
                    case 41:
                        item.ViewPortAspectRatio = (pair.DoubleValue);
                        break;
                    case 42:
                        item.LensLength = (pair.DoubleValue);
                        break;
                    case 43:
                        item.FrontClippingPlane = (pair.DoubleValue);
                        break;
                    case 44:
                        item.BackClippingPlane = (pair.DoubleValue);
                        break;
                    case 45:
                        item.ViewHeight = (pair.DoubleValue);
                        break;
                    case 50:
                        item.SnapRotationAngle = (pair.DoubleValue);
                        break;
                    case 51:
                        item.ViewTwistAngle = (pair.DoubleValue);
                        break;
                    case 68:
                        item.Status = (pair.ShortValue);
                        break;
                    case 69:
                        item.ID = (pair.ShortValue);
                        break;
                    case 71:
                        item.ViewMode = (DxfViewMode)(pair.ShortValue);
                        break;
                    case 72:
                        item.CircleZoomPercent = (int)(pair.ShortValue);
                        break;
                    case 73:
                        item.FastZoom = BoolShort(pair.ShortValue);
                        break;
                    case 74:
                        item.UCSIcon = BoolShort(pair.ShortValue);
                        break;
                    case 75:
                        item.SnapOn = BoolShort(pair.ShortValue);
                        break;
                    case 76:
                        item.GridOn = BoolShort(pair.ShortValue);
                        break;
                    case 77:
                        item.SnapStyle = (pair.ShortValue);
                        break;
                    case 78:
                        item.SnapIsoPair = (pair.ShortValue);
                        break;
                    case 1:
                        item.PlotStyleSheet = (pair.StringValue);
                        break;
                    case 281:
                        item.RenderMode = (DxfViewRenderMode)(pair.ShortValue);
                        break;
                    case 65:
                        item.HasOwnUCS = BoolShort(pair.ShortValue);
                        break;
                    case 110:
                        item.UCSOrigin.X = (pair.DoubleValue);
                        break;
                    case 120:
                        item.UCSOrigin.Y = (pair.DoubleValue);
                        break;
                    case 130:
                        item.UCSOrigin.Z = (pair.DoubleValue);
                        break;
                    case 111:
                        item.UCSXAxis.X = (pair.DoubleValue);
                        break;
                    case 121:
                        item.UCSXAxis.Y = (pair.DoubleValue);
                        break;
                    case 131:
                        item.UCSXAxis.Z = (pair.DoubleValue);
                        break;
                    case 112:
                        item.UCSYAxis.X = (pair.DoubleValue);
                        break;
                    case 122:
                        item.UCSYAxis.Y = (pair.DoubleValue);
                        break;
                    case 132:
                        item.UCSYAxis.Z = (pair.DoubleValue);
                        break;
                    case 79:
                        item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                        break;
                    case 146:
                        item.UCSElevation = (pair.DoubleValue);
                        break;
                    case 345:
                        item.UCSHandle = UIntHandle(pair.StringValue);
                        break;
                    case 346:
                        item.BaseUCSHandle = UIntHandle(pair.StringValue);
                        break;
                    case 170:
                        item.ShadePlotSetting = (DxfShadeEdgeMode)(pair.ShortValue);
                        break;
                    case 61:
                        item.MajorGridLines = BoolShort(pair.ShortValue);
                        break;
                    case 332:
                        item.BackgroundObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 333:
                        item.ShadePlotObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 348:
                        item.VisualStyleObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 292:
                        item.IsDefaultLightingOn = (pair.BoolValue);
                        break;
                    case 282:
                        item.DefaultLightingType = (DxfDefaultLightingType)(pair.ShortValue);
                        break;
                    case 141:
                        item.Brightness = (pair.DoubleValue);
                        break;
                    case 142:
                        item.Contrast = (pair.DoubleValue);
                        break;
                    case 62:
                        item.AmbientColor = DxfColor.FromRawValue(pair.ShortValue);
                        break;
                    case 421:
                        item.AmbientColorInt = (pair.IntegerValue);
                        break;
                    case 431:
                        item.AmbientColorName = (pair.StringValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 50
0
 internal static void SwallowTable(DxfCodePairBufferReader buffer)
 {
     while (buffer.ItemsRemain)
     {
         var pair = buffer.Peek();
         buffer.Advance();
         if (DxfTablesSection.IsTableEnd(pair))
             break;
     }
 }
Ejemplo n.º 51
0
        internal static DxfTable FromBuffer(DxfCodePairBufferReader buffer)
        {
            var pair = buffer.Peek();
            buffer.Advance();
            if (pair.Code != 2)
            {
                throw new DxfReadException("Expected table type.", pair);
            }

            var tableType = pair.StringValue;

            // read common table values
            var commonValues = new List<DxfCodePair>();
            var groups = new List<DxfCodePairGroup>();
            pair = buffer.Peek();
            while (pair != null && pair.Code != 0)
            {
                buffer.Advance();
                if (pair.Code == DxfCodePairGroup.GroupCodeNumber)
                {
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    groups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                }
                else
                {
                    commonValues.Add(pair);
                }

                pair = buffer.Peek();
            }

            DxfTable result;
            switch (tableType)
            {
                case DxfTable.AppIdText:
                    result = DxfAppIdTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.BlockRecordText:
                    result = DxfBlockRecordTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.DimStyleText:
                    result = DxfDimStyleTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.LayerText:
                    result = DxfLayerTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.LTypeText:
                    result = DxfLTypeTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.StyleText:
                    result = DxfStyleTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.UcsText:
                    result = DxfUcsTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.ViewText:
                    result = DxfViewTable.ReadFromBuffer(buffer);
                    break;
                case DxfTable.ViewPortText:
                    result = DxfViewPortTable.ReadFromBuffer(buffer);
                    break;
                default:
                    SwallowTable(buffer);
                    result = null;
                    break;
            }

            if (result != null)
            {
                // set common values
                foreach (var common in commonValues)
                {
                    switch (common.Code)
                    {
                        case 5:
                            result.Handle = DxfCommonConverters.UIntHandle(common.StringValue);
                            break;
                        case 70:
                            result.MaxEntries = common.ShortValue;
                            break;
                        case 330:
                            result.OwnerHandle = DxfCommonConverters.UIntHandle(common.StringValue);
                            break;
                    }
                }

                result.ExtensionDataGroups.AddRange(groups);
                result.AfterRead();
            }

            return result;
        }
Ejemplo n.º 52
0
        internal static DxfBlockRecord FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfBlockRecord();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 340:
                        item.LayoutHandle = UIntHandle(pair.StringValue);
                        break;
                    case 70:
                        item.InsertionUnits = (DxfUnits)(pair.ShortValue);
                        break;
                    case 280:
                        item.Explodability = BoolShort(pair.ShortValue);
                        break;
                    case 281:
                        item.Scalability = BoolShort(pair.ShortValue);
                        break;
                    case 310:
                        item._bitmapPreviewData.Add((pair.StringValue));
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 53
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            int code_280_index = 0;

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 3:
                    this.Description = (pair.StringValue);
                    buffer.Advance();
                    break;

                case 7:
                    var style = DxfTableCellStyle.FromBuffer(buffer);
                    CellStyles.Add(style);
                    break;

                case 40:
                    this.HorizontalCellMargin = (pair.DoubleValue);
                    buffer.Advance();
                    break;

                case 41:
                    this.VerticalCellMargin = (pair.DoubleValue);
                    buffer.Advance();
                    break;

                case 70:
                    this.FlowDirection = (DxfFlowDirection)(pair.ShortValue);
                    buffer.Advance();
                    break;

                case 71:
                    this.Flags = (pair.ShortValue);
                    buffer.Advance();
                    break;

                case 280:
                    switch (code_280_index)
                    {
                    case 0:
                        this.Version = (DxfVersion)(pair.ShortValue);
                        code_280_index++;
                        break;

                    case 1:
                        this.IsTitleSuppressed = BoolShort(pair.ShortValue);
                        code_280_index++;
                        break;

                    default:
                        Debug.Assert(false, "Unexpected extra values for code 280");
                        break;
                    }

                    buffer.Advance();
                    break;

                case 281:
                    this.IsColumnHeadingSuppressed = BoolShort(pair.ShortValue);
                    buffer.Advance();
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }

                    buffer.Advance();
                    break;
                }
            }

            return(PostParse());
        }
Ejemplo n.º 54
0
        internal static DxfDimStyle FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfDimStyle();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 3:
                        item.DimensioningSuffix = (pair.StringValue);
                        break;
                    case 4:
                        item.AlternateDimensioningSuffix = (pair.StringValue);
                        break;
                    case 5:
                        item.ArrowBlockName = (pair.StringValue);
                        break;
                    case 6:
                        item.FirstArrowBlockName = (pair.StringValue);
                        break;
                    case 7:
                        item.SecondArrowBlockName = (pair.StringValue);
                        break;
                    case 40:
                        item.DimensioningScaleFactor = (pair.DoubleValue);
                        break;
                    case 41:
                        item.DimensioningArrowSize = (pair.DoubleValue);
                        break;
                    case 42:
                        item.DimensionExtensionLineOffset = (pair.DoubleValue);
                        break;
                    case 43:
                        item.DimensionLineIncrement = (pair.DoubleValue);
                        break;
                    case 44:
                        item.DimensionExtensionLineExtension = (pair.DoubleValue);
                        break;
                    case 45:
                        item.DimensionDistanceRoundingValue = (pair.DoubleValue);
                        break;
                    case 46:
                        item.DimensionLineExtension = (pair.DoubleValue);
                        break;
                    case 47:
                        item.DimensionPlusTolerance = (pair.DoubleValue);
                        break;
                    case 48:
                        item.DimensionMinusTolerance = (pair.DoubleValue);
                        break;
                    case 140:
                        item.DimensioningTextHeight = (pair.DoubleValue);
                        break;
                    case 141:
                        item.CenterMarkSize = (pair.DoubleValue);
                        break;
                    case 142:
                        item.DimensioningTickSize = (pair.DoubleValue);
                        break;
                    case 143:
                        item.AlternateDimensioningScaleFactor = (pair.DoubleValue);
                        break;
                    case 144:
                        item.DimensionLinearMeasurementScaleFactor = (pair.DoubleValue);
                        break;
                    case 145:
                        item.DimensionVerticalTextPosition = (pair.DoubleValue);
                        break;
                    case 146:
                        item.DimensionToleranceDisplacScaleFactor = (pair.DoubleValue);
                        break;
                    case 147:
                        item.DimensionLineGap = (pair.DoubleValue);
                        break;
                    case 148:
                        item.AlternateDimensioningUnitRounding = (pair.DoubleValue);
                        break;
                    case 71:
                        item.GenerateDimensionTolerances = BoolShort(pair.ShortValue);
                        break;
                    case 72:
                        item.GenerateDimensionLimits = BoolShort(pair.ShortValue);
                        break;
                    case 73:
                        item.DimensionTextInsideHorizontal = BoolShort(pair.ShortValue);
                        break;
                    case 74:
                        item.DimensionTextOutsideHorizontal = BoolShort(pair.ShortValue);
                        break;
                    case 75:
                        item.SuppressFirstDimensionExtensionLine = BoolShort(pair.ShortValue);
                        break;
                    case 76:
                        item.SuppressSecondDimensionExtensionLine = BoolShort(pair.ShortValue);
                        break;
                    case 77:
                        item.TextAboveDimensionLine = BoolShort(pair.ShortValue);
                        break;
                    case 78:
                        item.DimensionUnitZeroSuppression = (DxfUnitZeroSuppression)(pair.ShortValue);
                        break;
                    case 79:
                        item.DimensionAngleZeroSuppression = (DxfUnitZeroSuppression)(pair.ShortValue);
                        break;
                    case 170:
                        item.UseAlternateDimensioning = BoolShort(pair.ShortValue);
                        break;
                    case 171:
                        item.AlternateDimensioningDecimalPlaces = (pair.ShortValue);
                        break;
                    case 172:
                        item.ForceDimensionLineExtensionsOutsideIfTextExists = BoolShort(pair.ShortValue);
                        break;
                    case 173:
                        item.UseSeparateArrowBlocksForDimensions = BoolShort(pair.ShortValue);
                        break;
                    case 174:
                        item.ForceDimensionTextInsideExtensions = BoolShort(pair.ShortValue);
                        break;
                    case 175:
                        item.SuppressOutsideExtensionDimensionLines = BoolShort(pair.ShortValue);
                        break;
                    case 176:
                        item.DimensionLineColor = DxfColor.FromRawValue(pair.ShortValue);
                        break;
                    case 177:
                        item.DimensionExtensionLineColor = DxfColor.FromRawValue(pair.ShortValue);
                        break;
                    case 178:
                        item.DimensionTextColor = DxfColor.FromRawValue(pair.ShortValue);
                        break;
                    case 179:
                        item.AngularDimensionPrecision = (pair.ShortValue);
                        break;
                    case 270:
                        item.DimensionUnitFormat = (DxfUnitFormat)(pair.ShortValue);
                        break;
                    case 271:
                        item.DimensionUnitToleranceDecimalPlaces = (pair.ShortValue);
                        break;
                    case 272:
                        item.DimensionToleranceDecimalPlaces = (pair.ShortValue);
                        break;
                    case 273:
                        item.AlternateDimensioningUnits = (DxfUnitFormat)(pair.ShortValue);
                        break;
                    case 274:
                        item.AlternateDimensioningToleranceDecimalPlaces = (pair.ShortValue);
                        break;
                    case 275:
                        item.DimensioningAngleFormat = (DxfAngleFormat)(pair.ShortValue);
                        break;
                    case 276:
                        item.DimensionPrecision = (pair.ShortValue);
                        break;
                    case 277:
                        item.DimensionNonAngularUnits = (DxfNonAngularUnits)(pair.ShortValue);
                        break;
                    case 278:
                        item.DimensionDecimalSeparatorChar = (char)(pair.ShortValue);
                        break;
                    case 279:
                        item.DimensionTextMovementRule = (DxfDimensionTextMovementRule)(pair.ShortValue);
                        break;
                    case 280:
                        item.DimensionTextJustification = (DxfDimensionTextJustification)(pair.ShortValue);
                        break;
                    case 283:
                        item.DimensionToleranceVerticalJustification = (DxfJustification)(pair.ShortValue);
                        break;
                    case 284:
                        item.DimensionToleranceZeroSuppression = (DxfUnitZeroSuppression)(pair.ShortValue);
                        break;
                    case 285:
                        item.AlternateDimensioningZeroSupression = (DxfUnitZeroSuppression)(pair.ShortValue);
                        break;
                    case 286:
                        item.AlternateDimensioningToleranceZeroSupression = (DxfUnitZeroSuppression)(pair.ShortValue);
                        break;
                    case 287:
                        item.DimensionTextAndArrowPlacement = (DxfDimensionFit)(pair.ShortValue);
                        break;
                    case 288:
                        item.DimensionCursorControlsTextPosition = BoolShort(pair.ShortValue);
                        break;
                    case 289:
                        item.DimensionTextAndArrowPlacement = (DxfDimensionFit)(pair.ShortValue);
                        break;
                    case 340:
                        item.DimensionTextStyle = (pair.StringValue);
                        break;
                    case 341:
                        item.DimensionLeaderBlockName = (pair.StringValue);
                        break;
                    case 342:
                        item.ArrowBlockName = (pair.StringValue);
                        break;
                    case 343:
                        item.FirstArrowBlockName = (pair.StringValue);
                        break;
                    case 344:
                        item.SecondArrowBlockName = (pair.StringValue);
                        break;
                    case 371:
                        item.DimensionLineWeight = DxfLineWeight.FromRawValue(pair.ShortValue);
                        break;
                    case 372:
                        item.DimensionExtensionLineWeight = DxfLineWeight.FromRawValue(pair.ShortValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 55
0
        internal static DxfLineType FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfLineType();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 3:
                        item.Description = (pair.StringValue);
                        break;
                    case 72:
                        item.AlignmentCode = (pair.ShortValue);
                        break;
                    case 73:
                        item.ElementCount = (pair.ShortValue);
                        break;
                    case 40:
                        item.TotalPatternLength = (pair.DoubleValue);
                        break;
                    case 49:
                        item.DashDotSpaceLengths.Add((pair.DoubleValue));
                        break;
                    case 74:
                        item.ComplexLinetypeElementTypes.Add((pair.ShortValue));
                        break;
                    case 75:
                        item.ShapeNumbers.Add((pair.ShortValue));
                        break;
                    case 340:
                        item.StylePointers.Add((pair.StringValue));
                        break;
                    case 46:
                        item.ScaleValues.Add((pair.DoubleValue));
                        break;
                    case 50:
                        item.RotationAngles.Add((pair.DoubleValue));
                        break;
                    case 44:
                        item.XOffsets.Add((pair.DoubleValue));
                        break;
                    case 45:
                        item.YOffsets.Add((pair.DoubleValue));
                        break;
                    case 9:
                        item.TextStrings.Add((pair.StringValue));
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 56
0
        internal static DxfBlock FromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            if (!buffer.ItemsRemain)
            {
                return null;
            }

            var block = new DxfBlock();
            var readingBlockStart = true;
            var readingBlockEnd = false;
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (DxfCodePair.IsSectionEnd(pair))
                {
                    // done reading blocks
                    buffer.Advance(); // swallow (0, ENDSEC)
                    break;
                }
                else if (IsBlockStart(pair))
                {
                    if (readingBlockStart)
                    {
                        // if another block is found, stop reading this one because some blocks don't specify (0, ENDBLK)
                        break;
                    }

                    break;
                }
                else if (IsBlockEnd(pair))
                {
                    if (!readingBlockStart) throw new DxfReadException("Unexpected block end", pair);
                    readingBlockStart = false;
                    readingBlockEnd = true;
                    buffer.Advance(); // swallow (0, ENDBLK)
                }
                else if (pair.Code == 0)
                {
                    // should be an entity
                    var entity = DxfEntity.FromBuffer(buffer);
                    Debug.Assert(entity != null);
                    if (entity != null)
                        block.Entities.Add(entity);
                }
                else
                {
                    // read value pair
                    if (readingBlockStart)
                    {
                        buffer.Advance();
                        switch (pair.Code)
                        {
                            case 1:
                                block.XrefName = pair.StringValue;
                                break;
                            case 2:
                                block.Name = pair.StringValue;
                                break;
                            case 3:
                                break;
                            case 4:
                                block.Description = pair.StringValue;
                                break;
                            case 5:
                                ((IDxfItemInternal)block).Handle = DxfCommonConverters.UIntHandle(pair.StringValue);
                                break;
                            case 8:
                                block.Layer = pair.StringValue;
                                break;
                            case 10:
                                block.BasePoint.X = pair.DoubleValue;
                                break;
                            case 20:
                                block.BasePoint.Y = pair.DoubleValue;
                                break;
                            case 30:
                                block.BasePoint.Z = pair.DoubleValue;
                                break;
                            case 67:
                                block.IsInPaperSpace = DxfCommonConverters.BoolShort(pair.ShortValue);
                                break;
                            case 70:
                                block.Flags = pair.ShortValue;
                                break;
                            case 330:
                                ((IDxfItemInternal)block).OwnerHandle = DxfCommonConverters.UIntHandle(pair.StringValue);
                                break;
                            case DxfCodePairGroup.GroupCodeNumber:
                                var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                                block.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                                break;
                            case (int)DxfXDataType.ApplicationName:
                                block.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                                break;
                        }
                    }
                    else if (readingBlockEnd)
                    {
                        block.EndBlock.ApplyCodePairs(buffer, version);
                    }
                    else
                    {
                        throw new DxfReadException("Unexpected pair in block", pair);
                    }
                }
            }

            return block;
        }
Ejemplo n.º 57
0
        internal static DxfTableCellStyle FromBuffer(DxfCodePairBufferReader buffer)
        {
            var seenName = false;
            var style    = new DxfTableCellStyle();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                switch (pair.Code)
                {
                case 7:
                    if (seenName)
                    {
                        // found another cell style; return without consuming
                        return(style);
                    }
                    else
                    {
                        style.Name = pair.StringValue;
                        seenName   = true;
                    }
                    break;

                case 62:
                    style.TextColor = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 63:
                    style.CellFillColor = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 64:
                    style.Border1Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 65:
                    style.Border2Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 66:
                    style.Border3Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 67:
                    style.Border4Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 68:
                    style.Border5Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 69:
                    style.Border6Color = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 90:
                    style.CellDataType = pair.IntegerValue;
                    break;

                case 91:
                    style.CellUnitType = pair.IntegerValue;
                    break;

                case 140:
                    style.TextHeight = pair.DoubleValue;
                    break;

                case 170:
                    style.CellAlignment = pair.ShortValue;
                    break;

                case 274:
                    style.BorderLineweight1 = pair.ShortValue;
                    break;

                case 275:
                    style.BorderLineweight2 = pair.ShortValue;
                    break;

                case 276:
                    style.BorderLineweight3 = pair.ShortValue;
                    break;

                case 277:
                    style.BorderLineweight4 = pair.ShortValue;
                    break;

                case 278:
                    style.BorderLineweight5 = pair.ShortValue;
                    break;

                case 279:
                    style.BorderLineweight6 = pair.ShortValue;
                    break;

                case 283:
                    style.IsBackgroundColorEnabled = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                case 284:
                    style.IsBorder1Visible = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                case 285:
                    style.IsBorder2Visible = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                case 286:
                    style.IsBorder3Visible = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                case 287:
                    style.IsBorder4Visible = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                case 288:
                    style.IsBorder5Visible = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                case 289:
                    style.IsBorder6Visible = DxfCommonConverters.BoolShort(pair.ShortValue);
                    break;

                default:
                    // unknown code, return without consuming the pair
                    return(style);
                }

                buffer.Advance();
            }

            return(style);
        }
Ejemplo n.º 58
0
        internal static DxfView FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfView();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 40:
                        item.ViewHeight = (pair.DoubleValue);
                        break;
                    case 10:
                        item.ViewCenterPoint.X = (pair.DoubleValue);
                        break;
                    case 20:
                        item.ViewCenterPoint.Y = (pair.DoubleValue);
                        break;
                    case 41:
                        item.ViewWidth = (pair.DoubleValue);
                        break;
                    case 11:
                        item.ViewDirection.X = (pair.DoubleValue);
                        break;
                    case 21:
                        item.ViewDirection.Y = (pair.DoubleValue);
                        break;
                    case 31:
                        item.ViewDirection.Z = (pair.DoubleValue);
                        break;
                    case 12:
                        item.TargetPoint.X = (pair.DoubleValue);
                        break;
                    case 22:
                        item.TargetPoint.Y = (pair.DoubleValue);
                        break;
                    case 32:
                        item.TargetPoint.Z = (pair.DoubleValue);
                        break;
                    case 42:
                        item.LensLength = (pair.DoubleValue);
                        break;
                    case 43:
                        item.FrontClippingPlane = (pair.DoubleValue);
                        break;
                    case 44:
                        item.BackClippingPlane = (pair.DoubleValue);
                        break;
                    case 50:
                        item.TwistAngle = (pair.DoubleValue);
                        break;
                    case 71:
                        item.ViewMode = (pair.ShortValue);
                        break;
                    case 281:
                        item.RenderMode = (DxfViewRenderMode)(pair.ShortValue);
                        break;
                    case 72:
                        item.IsAssociatedUCSPresent = BoolShort(pair.ShortValue);
                        break;
                    case 73:
                        item.IsCameraPlottable = BoolShort(pair.ShortValue);
                        break;
                    case 332:
                        item.BackgroundObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 334:
                        item.SelectionObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 348:
                        item.VisualStyleObjectPointer = UIntHandle(pair.StringValue);
                        break;
                    case 361:
                        item.SunOwnershipPointer = UIntHandle(pair.StringValue);
                        break;
                    case 110:
                        item.UCSOrigin.X = (pair.DoubleValue);
                        break;
                    case 120:
                        item.UCSOrigin.Y = (pair.DoubleValue);
                        break;
                    case 130:
                        item.UCSOrigin.Z = (pair.DoubleValue);
                        break;
                    case 111:
                        item.UCSXAxis.X = (pair.DoubleValue);
                        break;
                    case 121:
                        item.UCSXAxis.Y = (pair.DoubleValue);
                        break;
                    case 131:
                        item.UCSXAxis.Z = (pair.DoubleValue);
                        break;
                    case 112:
                        item.UCSYAxis.X = (pair.DoubleValue);
                        break;
                    case 122:
                        item.UCSYAxis.Y = (pair.DoubleValue);
                        break;
                    case 132:
                        item.UCSYAxis.Z = (pair.DoubleValue);
                        break;
                    case 79:
                        item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                        break;
                    case 146:
                        item.UCSElevation = (pair.DoubleValue);
                        break;
                    case 345:
                        item.UCSHandle = UIntHandle(pair.StringValue);
                        break;
                    case 346:
                        item.BaseUCSHandle = UIntHandle(pair.StringValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 59
0
        internal static DxfLayer FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfLayer();
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 70:
                        item.StandardFlags = (int)pair.ShortValue;
                        break;
                    case DxfCodePairGroup.GroupCodeNumber:
                        var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                        item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                        break;
                    case 62:
                        item.Color = DxfColor.FromRawValue(pair.ShortValue);
                        break;
                    case 6:
                        item.LinetypeName = (pair.StringValue);
                        break;
                    case 290:
                        item.IsLayerPlotted = (pair.BoolValue);
                        break;
                    case 370:
                        item.LineWeight = DxfLineWeight.FromRawValue(pair.ShortValue);
                        break;
                    case 390:
                        item.PlotStylePointer = UIntHandle(pair.StringValue);
                        break;
                    case 347:
                        item.MaterialHandle = UIntHandle(pair.StringValue);
                        break;
                    case (int)DxfXDataType.ApplicationName:
                        item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                        break;
                    default:
                        item.TrySetPair(pair);
                        break;
                }
            }

            return item;
        }
Ejemplo n.º 60
0
        internal static DxfClass FromBuffer(DxfCodePairBufferReader buffer, DxfAcadVersion version)
        {
            var cls = new DxfClass();

            // version R13 has varying values for the leading 0 code pair
            var pair = buffer.Peek();
            Debug.Assert(pair.Code == 0);
            if (version <= DxfAcadVersion.R13)
            {
                cls.ClassDxfRecordName = pair.StringValue;
            }
            else
            {
                // swallow (0, CLASS)
                Debug.Assert(pair.StringValue == ClassText);
            }

            buffer.Advance();
            while (buffer.ItemsRemain)
            {
                pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                    case 1:
                        if (version <= DxfAcadVersion.R13)
                            cls.CppClassName = pair.StringValue;
                        else
                            cls.ClassDxfRecordName = pair.StringValue;
                        break;
                    case 2:
                        if (version <= DxfAcadVersion.R13)
                            cls.ApplicationName = pair.StringValue;
                        else
                            cls.CppClassName = pair.StringValue;
                        break;
                    case 3:
                        if (version >= DxfAcadVersion.R14)
                            cls.ApplicationName = pair.StringValue;
                        break;
                    case 90:
                        if (version <= DxfAcadVersion.R13)
                            cls.ClassVersionNumber = pair.IntegerValue;
                        else
                            cls.ProxyCapabilities = new DxfProxyCapabilities(pair.IntegerValue);
                        break;
                    case 91:
                        cls.InstanceCount = pair.IntegerValue;
                        break;
                    case 280:
                        cls.WasClassLoadedWithFile = !DxfCommonConverters.BoolShort(pair.ShortValue);
                        break;
                    case 281:
                        cls.IsEntity = DxfCommonConverters.BoolShort(pair.ShortValue);
                        break;
                }
            }

            return cls;
        }