private static void SetPoint(DxfCodePair pair, DxfPoint point) { switch (pair.Code) { case 10: point.X = pair.DoubleValue; break; case 20: point.Y = pair.DoubleValue; break; case 30: point.Z = pair.DoubleValue; break; default: break; } }
public DxfBoundingBox(DxfPoint minimumPoint, DxfVector size) { MinimumPoint = minimumPoint; Size = size; }
public DxfFile ReadFile(BinaryReader reader) { // swallow next two characters var sub = reader.ReadChar(); Debug.Assert(sub == 0x1A); var nul = reader.ReadChar(); Debug.Assert(nul == 0x00); DxfPoint?blockBase = null; var entities = new List <DxfEntity>(); var stillReading = true; Action <Func <BinaryReader, DxfEntity> > addEntity = (entityReader) => { var entity = entityReader(reader); AssignCommonValues(entity); entities.Add(entity); }; Func <DxfVertex> getLastVertex = () => entities.LastOrDefault() as DxfVertex; while (stillReading) { var itemType = (DxbItemType)reader.ReadByte(); switch (itemType) { case DxbItemType.Line: addEntity(ReadLine); break; case DxbItemType.Point: addEntity(ReadPoint); break; case DxbItemType.Circle: addEntity(ReadCircle); break; case DxbItemType.Arc: addEntity(ReadArc); break; case DxbItemType.Trace: addEntity(ReadTrace); break; case DxbItemType.Solid: addEntity(ReadSolid); break; case DxbItemType.Seqend: addEntity(ReadSeqend); break; case DxbItemType.Polyline: addEntity(ReadPolyline); break; case DxbItemType.Vertex: addEntity(ReadVertex); break; case DxbItemType.Face: addEntity(ReadFace); break; case DxbItemType.ScaleFactor: _scaleFactor = ReadF(reader); break; case DxbItemType.NewLayer: var sb = new StringBuilder(); for (int b = reader.ReadByte(); b != 0; b = reader.ReadByte()) { sb.Append((char)b); } _layerName = sb.ToString(); break; case DxbItemType.LineExtension: addEntity(ReadLineExtension); break; case DxbItemType.TraceExtension: addEntity(ReadTraceExtension); break; case DxbItemType.BlockBase: var x = ReadN(reader); var y = ReadN(reader); if (blockBase == null && entities.Count == 0) { // only if this is the first item encountered blockBase = new DxfPoint(x, y, 0.0); } break; case DxbItemType.Bulge: { var bulge = ReadU(reader); var lastVertex = getLastVertex(); if (lastVertex != null) { lastVertex.Bulge = bulge; } } break; case DxbItemType.Width: { var startWidth = ReadN(reader); var endWidth = ReadN(reader); var lastVertex = getLastVertex(); if (lastVertex != null) { lastVertex.StartingWidth = startWidth; lastVertex.EndingWidth = endWidth; } } break; case DxbItemType.NumberMode: _isIntegerMode = ReadW(reader) == 0; break; case DxbItemType.NewColor: _color = DxfColor.FromRawValue((short)ReadW(reader)); break; case DxbItemType.LineExtension3D: addEntity(ReadLineExtension3D); break; case 0: stillReading = false; break; } } var file = new DxfFile(); foreach (var section in file.Sections) { section.Clear(); } // collect the entities (e.g., polylines, etc.) entities = DxfEntitiesSection.GatherEntities(entities); if (blockBase != null) { // entities are all contained in a block var block = new DxfBlock(); block.BasePoint = blockBase.GetValueOrDefault(); foreach (var entity in entities) { block.Entities.Add(entity); } file.Blocks.Add(block); } else { // just a normal collection of entities foreach (var entity in entities) { file.Entities.Add(entity); } } return(file); }
public DxfFile ReadFile(BinaryReader reader) { // swallow next two characters var sub = reader.ReadChar(); Debug.Assert(sub == 0x1A); var nul = reader.ReadChar(); Debug.Assert(nul == 0x00); DxfPoint blockBase = null; var entities = new List<DxfEntity>(); var stillReading = true; Action<Func<BinaryReader, DxfEntity>> addEntity = (entityReader) => { var entity = entityReader(reader); AssignCommonValues(entity); entities.Add(entity); }; Func<DxfVertex> getLastVertex = () => entities.LastOrDefault() as DxfVertex; while (stillReading) { var itemType = (DxbItemType)reader.ReadByte(); switch (itemType) { case DxbItemType.Line: addEntity(ReadLine); break; case DxbItemType.Point: addEntity(ReadPoint); break; case DxbItemType.Circle: addEntity(ReadCircle); break; case DxbItemType.Arc: addEntity(ReadArc); break; case DxbItemType.Trace: addEntity(ReadTrace); break; case DxbItemType.Solid: addEntity(ReadSolid); break; case DxbItemType.Seqend: addEntity(ReadSeqend); break; case DxbItemType.Polyline: addEntity(ReadPolyline); break; case DxbItemType.Vertex: addEntity(ReadVertex); break; case DxbItemType.Face: addEntity(ReadFace); break; case DxbItemType.ScaleFactor: _scaleFactor = ReadF(reader); break; case DxbItemType.NewLayer: var sb = new StringBuilder(); for (int b = reader.ReadByte(); b != 0; b = reader.ReadByte()) sb.Append((char)b); _layerName = sb.ToString(); break; case DxbItemType.LineExtension: addEntity(ReadLineExtension); break; case DxbItemType.TraceExtension: addEntity(ReadTraceExtension); break; case DxbItemType.BlockBase: var x = ReadN(reader); var y = ReadN(reader); if (blockBase == null && entities.Count == 0) { // only if this is the first item encountered blockBase = new DxfPoint(x, y, 0.0); } break; case DxbItemType.Bulge: { var bulge = ReadU(reader); var lastVertex = getLastVertex(); if (lastVertex != null) { lastVertex.Bulge = bulge; } } break; case DxbItemType.Width: { var startWidth = ReadN(reader); var endWidth = ReadN(reader); var lastVertex = getLastVertex(); if (lastVertex != null) { lastVertex.StartingWidth = startWidth; lastVertex.EndingWidth = endWidth; } } break; case DxbItemType.NumberMode: _isIntegerMode = ReadW(reader) == 0; break; case DxbItemType.NewColor: _color = DxfColor.FromRawValue((short)ReadW(reader)); break; case DxbItemType.LineExtension3D: addEntity(ReadLineExtension3D); break; case 0: stillReading = false; break; } } var file = new DxfFile(); // collect the entities (e.g., polylines, etc.) entities = DxfEntitiesSection.GatherEntities(entities); if (blockBase != null) { // entities are all contained in a block var block = new DxfBlock(); block.BasePoint = blockBase; block.Entities.AddRange(entities); file.Blocks.Add(block); } else { // just a normal collection of entities file.Entities.AddRange(entities); } return file; }
private DxfTrace ReadTraceExtension(BinaryReader reader) { var x3 = ReadN(reader); var y3 = ReadN(reader); var x4 = ReadN(reader); var y4 = ReadN(reader); var trace = new DxfTrace() { FirstCorner = _lastTraceP3, SecondCorner = _lastTraceP4, ThirdCorner = new DxfPoint(x3, y3, 0.0), FourthCorner = new DxfPoint(x4, y4, 0.0) }; _lastTraceP3 = trace.ThirdCorner; _lastTraceP4 = trace.FourthCorner; return trace; }
private DxfTrace ReadTrace(BinaryReader reader) { var x1 = ReadN(reader); var y1 = ReadN(reader); var x2 = ReadN(reader); var y2 = ReadN(reader); var x3 = ReadN(reader); var y3 = ReadN(reader); var x4 = ReadN(reader); var y4 = ReadN(reader); var trace = new DxfTrace() { FirstCorner = new DxfPoint(x1, y1, 0.0), SecondCorner = new DxfPoint(x2, y2, 0.0), ThirdCorner = new DxfPoint(x3, y3, 0.0), FourthCorner = new DxfPoint(x4, y4, 0.0) }; _lastTraceP3 = trace.ThirdCorner; _lastTraceP4 = trace.FourthCorner; return trace; }
private DxfLine ReadLineExtension3D(BinaryReader reader) { var x = ReadN(reader); var y = ReadN(reader); var z = ReadN(reader); var line = new DxfLine(_lastLinePoint, new DxfPoint(x, y, z)); _lastLinePoint = line.P2; return line; }
public DxfXDataWorldDirection(DxfPoint value) { Value = value; }
private DxfLine ReadLine(BinaryReader reader) { var fromX = ReadN(reader); var fromY = ReadN(reader); var fromZ = ReadN(reader); var toX = ReadN(reader); var toY = ReadN(reader); var toZ = ReadN(reader); var from = new DxfPoint(fromX, fromY, fromZ); var to = new DxfPoint(toX, toY, toZ); _lastLinePoint = to; return new DxfLine(from, to); }
public DxfXDataWorldSpaceDisplacement(DxfPoint value) { Value = value; }
public DxfXDataWorldSpacePosition(DxfPoint value) { Value = value; }
public DxfXData3Reals(DxfPoint value) { Value = value; }
public static DxfBoundingBox FromMinMax(DxfPoint minimum, DxfPoint maximum) { var size = maximum - minimum; return(new DxfBoundingBox(minimum, size)); }
private DxfLine ReadLineExtension(BinaryReader reader) { var x = ReadN(reader); var y = ReadN(reader); var to = new DxfPoint(x, y, 0.0); var line = new DxfLine(_lastLinePoint, to); _lastLinePoint = to; return line; }