示例#1
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            var subclassMarker = Is3DPolylineVertex || Is3DPolygonMesh ? "AcDb3dPolylineVertex" : "AcDb2dVertex";

            pairs.Add(new DxfCodePair(100, "AcDbVertex"));
            pairs.Add(new DxfCodePair(100, subclassMarker));
            pairs.Add(new DxfCodePair(10, Location.X));
            pairs.Add(new DxfCodePair(20, Location.Y));
            pairs.Add(new DxfCodePair(30, Location.Z));
            if (StartingWidth != 0.0)
            {
                pairs.Add(new DxfCodePair(40, StartingWidth));
            }

            if (EndingWidth != 0.0)
            {
                pairs.Add(new DxfCodePair(41, EndingWidth));
            }

            if (Bulge != 0.0)
            {
                pairs.Add(new DxfCodePair(42, Bulge));
            }

            pairs.Add(new DxfCodePair(70, (short)Flags));
            pairs.Add(new DxfCodePair(50, CurveFitTangentDirection));
            if (version >= DxfAcadVersion.R13)
            {
                if (PolyfaceMeshVertexIndex1 != 0)
                {
                    pairs.Add(new DxfCodePair(71, (short)PolyfaceMeshVertexIndex1));
                }

                if (PolyfaceMeshVertexIndex2 != 0)
                {
                    pairs.Add(new DxfCodePair(72, (short)PolyfaceMeshVertexIndex2));
                }

                if (PolyfaceMeshVertexIndex3 != 0)
                {
                    pairs.Add(new DxfCodePair(73, (short)PolyfaceMeshVertexIndex3));
                }

                if (PolyfaceMeshVertexIndex4 != 0)
                {
                    pairs.Add(new DxfCodePair(74, (short)PolyfaceMeshVertexIndex4));
                }
            }

            if (version >= DxfAcadVersion.R2010 && Identifier != 0)
            {
                pairs.Add(new DxfCodePair(91, Identifier));
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#2
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            pairs.Add(new DxfCodePair(100, "AcDbDictionary"));
            if (version >= DxfAcadVersion.R2000 && this.IsHardOwner != false)
            {
                pairs.Add(new DxfCodePair(280, BoolShort(this.IsHardOwner)));
            }

            if (version >= DxfAcadVersion.R2000)
            {
                pairs.Add(new DxfCodePair(281, (short)(this.DuplicateRecordHandling)));
            }

            var code = IsHardOwner ? 360 : 350;

            foreach (var item in _items.OrderBy(kvp => kvp.Key))
            {
                pairs.Add(new DxfCodePair(3, item.Key));
                pairs.Add(new DxfCodePair(code, HandleString(item.Value.Handle)));
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            pairs.Add(new DxfCodePair(100, "AcDbDictionary"));

            if (version >= DxfAcadVersion.R2000)
            {
                pairs.Add(new DxfCodePair(281, (short)(this.DuplicateRecordHandling)));
            }

            foreach (var item in _items.OrderBy(kvp => kvp.Key))
            {
                pairs.Add(new DxfCodePair(3, item.Key));
                pairs.Add(new DxfCodePair(350, UIntHandle(item.Value.Handle)));
            }


            if (version >= DxfAcadVersion.R2000)
            {
                pairs.Add(new DxfCodePair(100, "AcDbDictionaryWithDefault"));
                if (DefaultObject != null && DefaultObjectPointer.Handle != 0u)
                {
                    pairs.Add(new DxfCodePair(340, UIntHandle(DefaultObjectPointer.Handle)));
                }
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#4
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            pairs.Add(new DxfCodePair(100, "AcDbDataTable"));
            pairs.Add(new DxfCodePair(70, (this.Field)));
            pairs.Add(new DxfCodePair(90, (this.ColumnCount)));
            pairs.Add(new DxfCodePair(91, (this.RowCount)));
            pairs.Add(new DxfCodePair(1, (this.Name)));

            for (int col = 0; col < ColumnCount; col++)
            {
                var columnCode = GetCodeFromColumnType(col);
                pairs.Add(new DxfCodePair(92, columnCode));
                pairs.Add(new DxfCodePair(2, ColumnNames[col]));
                for (int row = 0; row < RowCount; row++)
                {
                    pairs.AddRange(GeneratePairsFromCode(columnCode, Values[row, col]));
                }
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#5
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            pairs.Add(new DxfCodePair(100, "AcDbXrecord"));
            pairs.Add(new DxfCodePair(280, (short)(this.DuplicateRecordHandling)));
            pairs.AddRange(DataPairs);

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#6
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            pairs.Add(new DxfCodePair(100, "AcDbSectionSettings"));
            pairs.Add(new DxfCodePair(90, this.SectionType));
            pairs.Add(new DxfCodePair(91, SectionTypeSettings.Count));
            foreach (var settings in SectionTypeSettings)
            {
                settings.AddCodePairs(pairs);
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#7
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            pairs.Add(new DxfCodePair(100, "AcDbLightList"));
            pairs.Add(new DxfCodePair(90, (this.Version)));
            pairs.Add(new DxfCodePair(90, Lights.Count));
            foreach (var item in LightsPointers.Pointers)
            {
                pairs.Add(new DxfCodePair(5, UIntHandle(item.Handle)));
                pairs.Add(new DxfCodePair(1, ((DxfLight)item.Item).Name));
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#8
0
            public IEnumerable <DxfCodePair> GetValuePairs(DxfAcadVersion version, bool outputHandles)
            {
                var list = new List <DxfCodePair>();

                list.Add(new DxfCodePair(0, EndBlockText));
                if (outputHandles && ((IDxfItemInternal)this).Handle != 0u)
                {
                    list.Add(new DxfCodePair(5, DxfCommonConverters.UIntHandle(((IDxfItemInternal)this).Handle)));
                }

                DxfXData.AddValuePairs(Parent.XData, list, version, outputHandles);

                if (version >= DxfAcadVersion.R14)
                {
                    foreach (var group in ExtensionDataGroups)
                    {
                        group.AddValuePairs(list, version, outputHandles);
                    }
                }

                if (version >= DxfAcadVersion.R2000)
                {
                    list.Add(new DxfCodePair(330, DxfCommonConverters.UIntHandle(((IDxfItemInternal)Parent).OwnerHandle)));
                }

                if (version >= DxfAcadVersion.R13)
                {
                    list.Add(new DxfCodePair(100, AcDbEntityText));
                }

                if (Parent.IsInPaperSpace)
                {
                    list.Add(new DxfCodePair(67, DxfCommonConverters.BoolShort(Parent.IsInPaperSpace)));
                }

                list.Add(new DxfCodePair(8, Parent.Layer));

                if (version >= DxfAcadVersion.R13)
                {
                    list.Add(new DxfCodePair(100, AcDbBlockEndText));
                }
                return(list);
            }
示例#9
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;
        }
示例#10
0
        protected override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles, bool writeXData)
        {
            base.AddValuePairs(pairs, version, outputHandles, writeXData: false);
            var subclassMarker = Is3DPolyline || Is3DPolygonMesh ? "AcDb3dPolyline" : "AcDb2dPolyline";

            pairs.Add(new DxfCodePair(100, subclassMarker));
            if (version <= DxfAcadVersion.R13)
            {
                pairs.Add(new DxfCodePair(66, BoolShort(ContainsVertices)));
            }

            if (version >= DxfAcadVersion.R12)
            {
                pairs.Add(new DxfCodePair(10, Location.X));
                pairs.Add(new DxfCodePair(20, Location.Y));
                pairs.Add(new DxfCodePair(30, Location.Z));
            }

            if (Thickness != 0.0)
            {
                pairs.Add(new DxfCodePair(39, Thickness));
            }

            if (Flags != 0)
            {
                pairs.Add(new DxfCodePair(70, (short)Flags));
            }

            if (DefaultStartingWidth != 0.0)
            {
                pairs.Add(new DxfCodePair(40, DefaultStartingWidth));
            }

            if (DefaultEndingWidth != 0.0)
            {
                pairs.Add(new DxfCodePair(41, DefaultEndingWidth));
            }

            if (PolygonMeshMVertexCount != 0)
            {
                pairs.Add(new DxfCodePair(71, (short)PolygonMeshMVertexCount));
            }

            if (PolygonMeshNVertexCount != 0)
            {
                pairs.Add(new DxfCodePair(72, (short)PolygonMeshNVertexCount));
            }

            if (SmoothSurfaceMDensity != 0)
            {
                pairs.Add(new DxfCodePair(73, (short)SmoothSurfaceMDensity));
            }

            if (SmoothSurfaceNDensity != 0)
            {
                pairs.Add(new DxfCodePair(74, (short)SmoothSurfaceNDensity));
            }

            if (SurfaceType != DxfPolylineCurvedAndSmoothSurfaceType.None)
            {
                pairs.Add(new DxfCodePair(75, (short)SurfaceType));
            }

            if (Normal != DxfVector.ZAxis)
            {
                pairs.Add(new DxfCodePair(210, Normal.X));
                pairs.Add(new DxfCodePair(220, Normal.Y));
                pairs.Add(new DxfCodePair(230, Normal.Z));
            }

            if (writeXData)
            {
                DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
            }
        }
示例#11
0
文件: DxfEntity.cs 项目: nakijun/Dxf
        internal virtual bool TrySetExtensionData(DxfCodePair pair, DxfCodePairBufferReader buffer)
        {
            if (pair.Code == DxfCodePairGroup.GroupCodeNumber)
            {
                buffer.Advance();
                var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                return true;
            }
            else if (pair.Code == (int)DxfXDataType.ApplicationName)
            {
                XDataProtected = DxfXData.FromBuffer(buffer, pair.StringValue);
                return true;
            }

            return false;
        }
示例#12
0
文件: DxfEntity.cs 项目: atph/Dxf
        internal virtual DxfEntity PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }
                else if (pair.Code == DxfCodePairGroup.GroupCodeNumber)
                {
                    buffer.Advance();
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                }
                else if (pair.Code == (int)DxfXDataType.ApplicationName)
                {
                    XDataProtected = DxfXData.FromBuffer(buffer, pair.StringValue);
                }

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

                buffer.Advance();
            }

            return PostParse();
        }