Example #1
0
 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;
     }
 }
Example #2
0
 public DxfBoundingBox(DxfPoint minimumPoint, DxfVector size)
 {
     MinimumPoint = minimumPoint;
     Size         = size;
 }
Example #3
0
        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);
        }
Example #4
0
        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;
        }
Example #5
0
 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;
 }
Example #6
0
 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;
 }
Example #7
0
 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;
 }
Example #8
0
 public DxfXDataWorldDirection(DxfPoint value)
 {
     Value = value;
 }
Example #9
0
 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);
 }
Example #10
0
 public DxfXDataWorldDirection(DxfPoint value)
 {
     Value = value;
 }
Example #11
0
 public DxfXDataWorldSpaceDisplacement(DxfPoint value)
 {
     Value = value;
 }
Example #12
0
 public DxfXDataWorldSpacePosition(DxfPoint value)
 {
     Value = value;
 }
Example #13
0
 public DxfXData3Reals(DxfPoint value)
 {
     Value = value;
 }
Example #14
0
 public DxfXDataWorldSpacePosition(DxfPoint value)
 {
     Value = value;
 }
Example #15
0
 public DxfXDataWorldSpaceDisplacement(DxfPoint value)
 {
     Value = value;
 }
Example #16
0
        public static DxfBoundingBox FromMinMax(DxfPoint minimum, DxfPoint maximum)
        {
            var size = maximum - minimum;

            return(new DxfBoundingBox(minimum, size));
        }
Example #17
0
 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;
 }
Example #18
0
 public DxfXData3Reals(DxfPoint value)
 {
     Value = value;
 }