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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); }
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; }
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); } }
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; }
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(); }