public void writeDxf(string file, string inputText, double textHeight, Layer layer)
        {
            bool isBinary;

            // this check is optional but recommended before loading a DXF file
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(file, out isBinary);

            // netDxf is only compatible with AutoCad2000 and higher DXF version
            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                return;
            }
            // load file
            dxfDocument = DxfDocument.Load(file);

            // text

            text           = new Text(inputText, textLocation, textHeight);
            text.Layer     = layer;
            text.Alignment = TextAlignment.BottomLeft;
            dxfDocument.AddEntity(text);

            // save to file
            dxfDocument.Save(file);
        }
Esempio n. 2
0
        private IPolygon ReadPolygonFromDXF(string path)
        {
            bool isBinary;

            using (var stream = File.OpenRead(path))
            {
                var dxfVersion = DxfDocument.CheckDxfFileVersion(stream, out isBinary);
                if (dxfVersion < DxfVersion.AutoCad12 && dxfVersion > DxfVersion.AutoCad2010)
                {
                    throw new ApplicationException("系统无法读取当前版本的CAD文件,请提交AutoCAD R12至AutoCAD 2010版本生成的DXF文件。");
                }

                var dxf = DxfDocument.Load(stream, dxfVersion < DxfVersion.AutoCad2000);
                if (dxf == null)
                {
                    throw new ApplicationException("无法识别的dxf文件,上传的dxf文件可能已经损坏。");
                }

                if (dxf.LwPolylines.Count == 0)
                {
                    throw new ApplicationException("CAD文件中无法找到红线。");
                }

                if (dxf.LwPolylines.Count > 1)
                {
                    throw new ApplicationException("CAD文件中红线数量大于一个,请删除不必要的图形。");
                }
                return(GeneratePolygon(dxf.LwPolylines[0]));
            }
        }
Esempio n. 3
0
        public void WriteDxfDocument()
        {
            string file = "bin3.dxf";

            // by default it will create an AutoCad2000 DXF version
            DxfDocument dxf = new DxfDocument();

            // a rectangular wipeout defined by its bottom-left corner and its width and height
            Wipeout wipeout = new Wipeout(0, 0, Bin.Width, Bin.Height);

            dxf.AddEntity(wipeout);

            if (Bin.NestedItems.Count >= 1)
            {
                foreach (Item nestedItem in Bin.NestedItems)
                {
                    wipeout = new Wipeout(nestedItem.BLpPosition, nestedItem.BLqPosition, nestedItem.Width, nestedItem.Height);
                    dxf.AddEntity(wipeout);
                }

                // save to file
                dxf.Save(file);
            }

            // this check is optional but recommended before loading a DXF file
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(file);

            // netDxf is only compatible with AutoCad2000 and higher DXF version
            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                return;
            }
            // load file
            DxfDocument loaded = DxfDocument.Load(file);
        }
Esempio n. 4
0
        // 读取Dxf文件
        public void ReadFile(string path)
        {
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(path);

            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                return;
            }
            this.Dxf = DxfDocument.Load(path);
        }
Esempio n. 5
0
        //needs to go to cadgen exporter with a list of polylines and attributes
        public static MemoryStream Get(string fileName, IExporter cadGenExporter, Action <string> action)
        {
            bool isBinary;
            var  ver = DxfDocument.CheckDxfFileVersion(fileName, out isBinary);


            DxfDocument doc = DxfDocument.Load(fileName);

            var docSector = doc.Texts.FirstOrDefault(x => string.Equals(x.Layer.Name, "Sector", StringComparison.InvariantCultureIgnoreCase));

            var polys = GetPolys(doc);

            var i = 0;
            var c = polys.Count();

            //Parallel.ForEach(polys, p =>
            foreach (var p in polys)
            {
                var cI = Interlocked.Increment(ref i);

                action($"Export DXF: {cI} / {c}; index:{p.index.Value}");



                //CF - INDEX
                int index;
                if (int.TryParse(p.index.Value.Trim(), out index))
                {
                    var points = p.poly.ToPoints();
                    var area   = VectorExtensions.Area(points);
                    p.poly.XData.Clear();
                    var cg = cadGenExporter.Export(index, points, area, p.nrCadGeneral?.Value, docSector?.Value, p.nrCadastral?.Value).Result;

                    if (cg.Length > 0)
                    {
                        var xD = new XData(new ApplicationRegistry("TOPO"));
                        xD.XDataRecord.Add(new XDataRecord(XDataCode.ControlString, "{"));
                        foreach (var line in cg)
                        {
                            var xDR = new XDataRecord(XDataCode.String, line);

                            xD.XDataRecord.Add(xDR);
                        }
                        xD.XDataRecord.Add(new XDataRecord(XDataCode.ControlString, "}"));
                        p.poly.XData.Add(xD);
                    }
                }
            }//);

            var stream = new MemoryStream();

            doc.Save(stream, isBinary);
            stream.Seek(0, SeekOrigin.Begin);
            return(stream);
        }
Esempio n. 6
0
        private static bool IsValid(string dxfFile)
        {
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(dxfFile);

            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public List <string> GetLayerList(string filename)
        {
            //定义文件名
            string        Dxf_filename = null;
            List <string> Result       = new List <string>();

            if (filename == null)
            {
                Dxf_filename = "Sample.dxf";
            }
            else
            {
                Dxf_filename = filename;
            }
            DxfDocument dxfDocument = new DxfDocument();
            //检查文件是否存在
            FileInfo fileInfo = new FileInfo(Dxf_filename);

            if (!fileInfo.Exists)
            {
                LogInfo?.Invoke(Dxf_filename + "  文件不存在!!!" + "\r\n");
                return(null);
            }
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(Dxf_filename, out bool isBinary);

            // 检查Dxf文件版本是否正确
            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                LogInfo?.Invoke(Dxf_filename + "  文件版本不支持" + "\r\n");
                return(null);
            }
            //读取Dxf文件
            dxfDocument = DxfDocument.Load(Dxf_filename);
            // check if there has been any problems loading the file,
            // this might be the case of a corrupt file or a problem in the library
            if (dxfDocument == null)
            {
                LogInfo?.Invoke(Dxf_filename + "  Dxf文件读取失败" + "\r\n");
                return(null);
            }
            //返回读取结果
            foreach (var o in dxfDocument.Layers)
            {
                Result.Add(o.Name);
            }
            return(Result);
        }
Esempio n. 8
0
        public void WriteDxfDocument()
        {
            string file = "binRectangularItems.dxf";

            //// by default it will create an AutoCad2000 DXF version
            DxfDocument dxf = new DxfDocument();

            //un wipeout rettangolare che contiene tutte le altre forme
            Wipeout wipeout = new Wipeout(0, 0, Bin.Width, Bin.Height);

            dxf.AddEntity(wipeout);

            TextStyle style = new TextStyle("MyStyle", "Helvetica", FontStyle.Italic | FontStyle.Bold);

            if (Bin.NestedItems.Count >= 1)
            {
                foreach (var nestedItem in Bin.NestedItems)
                {
                    //un wipeout rettangolare che rapprsenta una forma
                    wipeout = new Wipeout(nestedItem.BLpPosition, nestedItem.BLqPosition, nestedItem.Width, nestedItem.Height);
                    //un id progressivo per il wipeout rettangolare
                    MText text = new MText(nestedItem.Id.ToString())
                    {
                        Position = new Vector3(nestedItem.BLpPosition + 0.3, nestedItem.BLqPosition + 0.5, 0.0),
                        Height   = 0.2,
                        Style    = style
                    };
                    dxf.AddEntity(wipeout);
                    dxf.AddEntity(text);
                }

                // save to file
                dxf.Save(file);
            }

            //// this check is optional but recommended before loading a DXF file
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(file);

            //// netDxf is only compatible with AutoCad2000 and higher DXF version
            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                return;
            }
            //// load file
            DxfDocument loaded = DxfDocument.Load(file);
        }
Esempio n. 9
0
        public void DxfWriterApp()
        {
            // path of dxf file
            Console.Write("Podaj sciezke do plikow *.dxf (np. C:\\Users\\user\\Desktop\\): ");
            filesPath = Directory.GetFiles(Console.ReadLine(), "*.dxf");

            // object of ExcelReader
            excelText = new ExcelReader();
            string readExcelText = excelText.GetChoosenCellValue(excelRow, excelCol);

            bool isBinary;

            foreach (string file in filesPath)
            {
                // this check is optional but recommended before loading a DXF file
                DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(file, out isBinary);
                // netDxf is only compatible with AutoCad2000 and higher DXF version
                if (dxfVersion < DxfVersion.AutoCad2000)
                {
                    return;
                }
                // load file
                dxfDocument = DxfDocument.Load(file);

                entity = new Line(new Vector2(5, 5), new Vector2(10, 5));
                //add an entity here
                dxfDocument.AddEntity(entity);
                // text
                text = new Text(readExcelText, textLocation, 2.0);
                Layer layer = new Layer("text");
                text.Layer     = layer;
                text.Alignment = TextAlignment.BottomLeft;
                dxfDocument.AddEntity(text);
                // save to file
                dxfDocument.Save(file);
            }
        }
Esempio n. 10
0
        static void Main(string[] args)
        {
            try
            {
                if (args.Count() < 1)
                {
                    Console.WriteLine("Usage: DirtyPCB_DXFStats.exe <infile>");
                    return;
                }

                DXFStats TheStats = new DXFStats();

                DxfDocument dxf = DxfDocument.Load(args[0]);
                if (dxf == null)
                {
                    bool bin;
                    var  ver = DxfDocument.CheckDxfFileVersion(args[0], out bin);
                    Console.WriteLine("Error: failed to load {0} - netdxf not happy! Suspected dxf version {1}", args[0], ver);
                    return;
                }

                foreach (var a in dxf.Lines)
                {
                    TheStats.AddSegment(a.StartPoint.X, a.StartPoint.Y, a.EndPoint.X, a.EndPoint.Y);
                }

                foreach (var a in dxf.LwPolylines)
                {
                    for (int i = 0; i < a.Vertexes.Count - 1; i++)
                    {
                        TheStats.AddSegment(a.Vertexes[i].Location.X, a.Vertexes[i].Location.Y, a.Vertexes[i + 1].Location.X, a.Vertexes[i + 1].Location.Y);
                    }
                    if (a.IsClosed)
                    {
                        TheStats.AddSegment(a.Vertexes[0].Location.X, a.Vertexes[0].Location.Y, a.Vertexes[a.Vertexes.Count - 1].Location.X, a.Vertexes[a.Vertexes.Count - 1].Location.Y);
                    }
                }

                foreach (var a in dxf.Polylines)
                {
                    for (int i = 0; i < a.Vertexes.Count - 1; i++)
                    {
                        TheStats.AddSegment(a.Vertexes[i].Location.X, a.Vertexes[i].Location.Y, a.Vertexes[i + 1].Location.X, a.Vertexes[i + 1].Location.Y);
                    }
                }

                foreach (var a in dxf.Circles)
                {
                    double length = 2 * Math.PI * a.Radius;;
                    int    count  = (int)length;
                    for (int i = 0; i < count; i++)
                    {
                        double P1 = (i * Math.PI * 2.0 / (double)count);
                        double P2 = ((i + 1) * Math.PI * 2.0 / (double)count);
                        TheStats.AddSegment(Math.Sin(P1) * a.Radius + a.Center.X, Math.Cos(P1) * a.Radius + a.Center.Y, Math.Sin(P2) * a.Radius + a.Center.X, Math.Cos(P2) * a.Radius + a.Center.Y);
                    }
                }

                foreach (var a in dxf.Ellipses)
                {
                    double R1 = a.MajorAxis;
                    double R2 = a.MinorAxis;

                    // approximate length of curve..
                    double length = 2 * Math.PI * (Math.Sqrt((R1 * R1 + R2 * R2) / 2));;
                    int    count  = (int)length;
                    for (int i = 0; i < count; i++)
                    {
                        double P1 = (i * 360.0 / (double)count);
                        double P2 = ((i + 1) * 360.0 / (double)count);
                        var    C  = a.PolarCoordinateRelativeToCenter(P1);
                        var    C2 = a.PolarCoordinateRelativeToCenter(P2);
                        TheStats.AddSegment(C.X + a.Center.X, C.Y + a.Center.Y, C2.X + a.Center.X, C2.Y + a.Center.Y);
                    }
                }

                foreach (var a in dxf.Splines)
                {
                    var V = a.PolygonalVertexes(a.ControlPoints.Count * 20);
                    for (int i = 0; i < V.Count - 1; i++)
                    {
                        TheStats.AddSegment(V[i].X, V[i].Y, V[i + 1].X, V[i + 1].Y);
                    }
                    if (a.IsClosed)
                    {
                        TheStats.AddSegment(V[0].X, V[0].Y, V[V.Count - 1].X, V[V.Count - 1].Y);
                    }
                }

                foreach (var a in dxf.Arcs)
                {
                    var V = a.ToPolyline((int)(2 + a.Radius * Math.PI * 2));
                    for (int i = 0; i < V.Vertexes.Count - 1; i++)
                    {
                        TheStats.AddSegment(V.Vertexes[i].Location.X, V.Vertexes[i].Location.Y, V.Vertexes[i + 1].Location.X, V.Vertexes[i + 1].Location.Y);
                    }
                }

                foreach (var a in dxf.MLines)
                {
                    for (int i = 0; i < a.Vertexes.Count - 1; i++)
                    {
                        TheStats.AddSegment(a.Vertexes[i].Location.X, a.Vertexes[i].Location.Y, a.Vertexes[i + 1].Location.X, a.Vertexes[i + 1].Location.Y);
                    }
                }

                //Should points be fitted too?
                //foreach (var a in dxf.Points)
                //{
                //   TheStats.Fit(a.Location.X, a.Location.Y);
                //}



                TheStats.Finish();
                var json = new JavaScriptSerializer().Serialize(TheStats);
                Console.WriteLine(json);
            }
            catch (Exception E)
            {
                Console.WriteLine("Error: {0}", E.Message);
            }
        }
Esempio n. 11
0
        public static CadData Import(string path)
        {
            DxfDocument doc;

            try
            {
                PreProcessDxfFile(path);

                var debug_version = DxfDocument.CheckDxfFileVersion(path, out var debug_isBinary);

                // Handle failure to load (with no exception)
                doc = null;
                var innerException = null as Exception;
                ActionExtensions.InvokeWithTimeout(() =>
                {
                    try
                    {
                        doc = DxfDocument.Load(path);
                    }
                    catch (Exception ex)
                    {
                        innerException = ex;
                    }
                }, 1000);

                if (doc == null)
                {
                    throw new LibraryException($@"doc did not load: {innerException?.Message}", innerException);
                }
            }
            catch (Exception ex)
            {
                throw new LibraryException($@"DxfNet could not load the Dxf File: {ex.Message}
{nameof(path)}={path}", ex);
            }

            var inserts       = doc.Inserts.ToList();
            var insertsBlocks = inserts.Select(x => x.Block).ToList();

            var docUnits = doc.DrawingVariables.InsUnits;

            var insertsData        = inserts.Select(x => GetInsertItems(x, docUnits)).ToList();
            var debug_insertsData  = InsertData.Debug_Stats_Header + "\r\n" + insertsData.Select(x => x.Debug_Stats).ConcatString("\r\n");
            var debug_insertsTexts = insertsData.Select(x => x.Debug_Texts).ConcatString("\r\n");
            var debug_textsData    = doc.Texts.Select(x => x.Value).ConcatString("\r\n");
            var debug_mtextsData   = doc.MTexts.Select(x => x.Value).ConcatString("\r\n");
            var debug_docData      = $"{doc.Texts.Count()} {doc.MTexts.Count()} {doc.AttributeDefinitions.Where(x => x.Flags == AttributeFlags.Constant).Count()} {doc.Lines.Count()} {doc.Circles.Count()}";

            var flatData = FlattenInsertsData(insertsData);

            //// TEST: No Inserts
            //var flatData = new FlatData()
            //{
            //    AttributeDefinitions = new List<InsertTransform<AttributeDefinition>>(),
            //    Attributes = new List<InsertTransform<netDxf.Entities.Attribute>>(),
            //    Circles = new List<InsertTransform<Circle>>(),
            //    Debug_Name = "",
            //    Lines = new List<InsertTransform<Line>>(),
            //    MTexts = new List<InsertTransform<MText>>(),
            //    Texts = new List<InsertTransform<Text>>(),
            //};

            flatData.Texts.AddRange(doc.Texts.Select(GetInsertOffset_Root));
            flatData.MTexts.AddRange(doc.MTexts.Select(GetInsertOffset_Root));
            flatData.AttributeDefinitions.AddRange(doc.AttributeDefinitions.Where(x => x.Flags == AttributeFlags.Constant).Select(GetInsertOffset_Root));
            flatData.Lines.AddRange(doc.Lines.Select(GetInsertOffset_Root));
            flatData.Circles.AddRange(doc.Circles.Select(GetInsertOffset_Root));

            var d = new CadData
            {
                Texts = flatData.Texts.Select(x => new CadText
                {
                    Debug_Raw  = x,
                    Bounds     = GetBounds(x),
                    FontHeight = GetFontHeight(x, (float)x.Value.Height),
                    Context    = GetContextPath(x),
                    Text       = x.Value.Value,
                }).Concat(
                    flatData.MTexts.Select(x => new CadText
                {
                    Debug_Raw  = x,
                    Bounds     = GetBounds(x),
                    FontHeight = GetFontHeight(x, (float)x.Value.Height),
                    Context    = GetContextPath(x),
                    Text       = x.Value.PlainText(),
                })
                    ).Concat(
                    flatData.AttributeDefinitions.Select(x => new CadText
                {
                    Debug_Raw  = x,
                    Bounds     = GetBounds(x),
                    FontHeight = GetFontHeight(x, (float)x.Value.Height),
                    Context    = GetContextPath(x),
                    Text       = x.Value.Value + "",
                })
                    ).Concat(
                    flatData.Attributes.Select(x => new CadText
                {
                    Debug_Raw  = x,
                    Bounds     = GetBounds(x.Value),
                    FontHeight = (float)x.Value.Height,
                    Context    = GetContextPath(x),
                    Text       = x.Value.Value + "",
                })
                    ).ToList()
            };

            d.Texts = SplitSpacedOutTexts(d.Texts);
            // Remove Duplicate Texts
            d.Texts = d.Texts.GroupBy(x => new { x.Text, xPos = Math.Round(x.Bounds.Min.X, 2), yPos = Math.Round(x.Bounds.Min.Y, 2) }).Select(g => g.First()).ToList();
            d.Texts.ForEach(x => x.Text = CleanText(x.Text));

            d.Lines = flatData.Lines.Select(x => new CadLine
            {
                Debug_Raw = x,
                Start     = x.Transform(x.Value.StartPoint.ToGeometryVector()),
                End       = x.Transform(x.Value.EndPoint.ToGeometryVector()),
                Context   = GetContextPath(x),
            }).ToList();

            d.Circles = flatData.Circles.Select(x => new CadCircle
            {
                Debug_Raw = x,
                Circle    = new Geometry.Circle(x.Transform(x.Value.Center.ToGeometryVector()).X,
                                                x.Transform(x.Value.Center.ToGeometryVector()).Y,
                                                Math.Abs(x.Transform(new System.Numerics.Vector2((float)x.Value.Radius, (float)x.Value.Radius)).X - x.Transform(new System.Numerics.Vector2(0, 0)).X)),
                Context = GetContextPath(x),
            }).ToList();

            //var debug_item = d.Texts.Where(x => x.Text == "21-21571-00").ToList();
            //var debug_lines = !debug_item.Any() ? null : d.Lines.Where(x => Common.Geometry.MathExt.Intersects(debug_item.First().Bounds, Geometry.Bounds.FromPoints(x.Start, x.End))).ToList();


            return(d);
        }
Esempio n. 12
0
        private ResultPack Process(string content, string mdbFile)
        {
            var pack = new ResultPack();

            if (string.IsNullOrEmpty(content))
            {
                pack.ErrorMessage = "上传的文件内容为空,请提交正确的内容。";
                return(pack);
            }
            try
            {
                var encoding = Encoding.GetEncoding("GB2312");
                var bytes    = encoding.GetBytes(content);
                using (var stream = new MemoryStream(bytes))
                {
                    bool isBinary;
                    var  dxfVersion = DxfDocument.CheckDxfFileVersion(stream, out isBinary);
                    if (dxfVersion < DxfVersion.AutoCad12 && dxfVersion > DxfVersion.AutoCad2010)
                    {
                        pack.ErrorMessage = "系统无法读取当前版本({0})的CAD文件,请提交AutoCAD R12至AutoCAD 2010版本生成的DXF文件。";
                        return(pack);
                    }

                    var dxf = DxfDocument.Load(stream, dxfVersion < DxfVersion.AutoCad2000);
                    if (dxf == null)
                    {
                        pack.ErrorMessage = "无法识别的dxf文件,上传的dxf文件可能已经损坏。";
                        return(pack);
                    }

                    if (dxf.LwPolylines.Count == 0)
                    {
                        pack.ErrorMessage = "CAD文件中无法找到红线。";
                        return(pack);
                    }

                    /*if (dxf.LwPolylines.Count > 1)
                     * {
                     * pack.ErrorMessage = "CAD文件中红线数量大于一个,请删除不必要的图形。";
                     * return pack;
                     * }*/

                    var bmp = ImageGenerator.Generate(dxf.LwPolylines[0], new Size(640, 480));

                    using (var bmpStream = new MemoryStream())
                    {
                        bmp.Save(bmpStream, ImageFormat.Jpeg);
                        pack.ImageContent = Convert.ToBase64String(bmpStream.ToArray());
                    }


                    lock (syncRoot)
                    {
                        var aoInit = new ESRI.ArcGIS.esriSystem.AoInitializeClass();
                        if (aoInit.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeArcEditor) ==
                            esriLicenseStatus.esriLicenseAvailable)
                        {
                            aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcEditor);
                        }
                        else
                        {
                            aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
                        }
                        var factory = new AccessWorkspaceFactoryClass();
                        var ws      = (IFeatureWorkspace)factory.OpenFromFile(mdbFile, 0);

                        var calculator = new CategoryAreaCalculator();

                        calculator.dltbFC = ws.OpenFeatureClass(ConfigurationManager.AppSettings["DLTBLayerName"]);
                        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["XZDWLayerName"]))
                        {
                            calculator.xzdwFC = ws.OpenFeatureClass(ConfigurationManager.AppSettings["XZDWLayerName"]);
                        }

                        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["LXDWLayerName"]))
                        {
                            calculator.xzdwFC = ws.OpenFeatureClass(ConfigurationManager.AppSettings["LXDWLayerName"]);
                        }


                        var pg = calculator.GeneratePolygon(dxf.LwPolylines[0]);
                        try
                        {
                            var result = calculator.Calculate(pg);
                            pack.Details = result;
                        }
                        catch (Exception ex)
                        {
                            pack.ErrorMessage = "空间分析时发生错误:" + ex.ToString();
                            return(pack);
                        }
                        finally
                        {
                            aoInit.Shutdown();
                        }
                    }
                    return(pack);
                }
            }
            catch (Exception ex2)
            {
                pack.ErrorMessage = "进行数据处理时发生错误:" + ex2.ToString();
                return(pack);
            }
        }
        public static DxfDocument Test(string file, string output = null)
        {
            // optionally you can save the information to a text file
            bool       outputLog = !string.IsNullOrEmpty(output);
            TextWriter writer    = null;

            if (outputLog)
            {
                writer = new StreamWriter(File.Create(output));
                Console.SetOut(writer);
            }

            // check if the dxf actually exists
            FileInfo fileInfo = new FileInfo(file);

            if (!fileInfo.Exists)
            {
                Console.WriteLine("THE FILE {0} DOES NOT EXIST", file);
                Console.WriteLine();

                if (outputLog)
                {
                    writer.Flush();
                    writer.Close();
                }
                else
                {
                    Console.WriteLine("Press a key to continue...");
                    Console.ReadLine();
                }
                return(null);
            }
            bool       isBinary;
            DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(file, out isBinary);

            // check if the file is a dxf
            if (dxfVersion == DxfVersion.Unknown)
            {
                Console.WriteLine("THE FILE {0} IS NOT A VALID DXF OR THE DXF DOES NOT INCLUDE VERSION INFORMATION IN THE HEADER SECTION", file);
                Console.WriteLine();

                if (outputLog)
                {
                    writer.Flush();
                    writer.Close();
                }
                else
                {
                    Console.WriteLine("Press a key to continue...");
                    Console.ReadLine();
                }
                return(null);
            }

            // check if the dxf file version is supported
            if (dxfVersion < DxfVersion.AutoCad2000)
            {
                Console.WriteLine("THE FILE {0} IS NOT A SUPPORTED DXF", file);
                Console.WriteLine();

                Console.WriteLine("FILE VERSION: {0}", dxfVersion);
                Console.WriteLine();

                if (outputLog)
                {
                    writer.Flush();
                    writer.Close();
                }
                else
                {
                    Console.WriteLine("Press a key to continue...");
                    Console.ReadLine();
                }
                return(null);
            }

            // DxfDocument dxf = DxfDocument.Load(file, new List<string> { @".\Support" });
            DxfDocument dxf = DxfDocument.Load(file);

            // check if there has been any problems loading the file,
            // this might be the case of a corrupt file or a problem in the library
            if (dxf == null)
            {
                Console.WriteLine("ERROR LOADING {0}", file);
                Console.WriteLine();

                Console.WriteLine("Press a key to continue...");
                Console.ReadLine();

                if (outputLog)
                {
                    writer.Flush();
                    writer.Close();
                }
                else
                {
                    Console.WriteLine("Press a key to continue...");
                    Console.ReadLine();
                }
                return(null);
            }

            // the dxf has been properly loaded, let's show some information about it
            Console.WriteLine("FILE NAME: {0}", file);
            Console.WriteLine("\tbinary dxf: {0}", isBinary);
            Console.WriteLine();
            Console.WriteLine("FILE VERSION: {0}", dxf.DrawingVariables.AcadVer);
            Console.WriteLine();
            Console.WriteLine("FILE COMMENTS: {0}", dxf.Comments.Count);
            foreach (var o in dxf.Comments)
            {
                Console.WriteLine("\t{0}", o);
            }
            Console.WriteLine();
            Console.WriteLine("FILE TIME:");
            Console.WriteLine("\tdrawing created (UTC): {0}.{1}", dxf.DrawingVariables.TduCreate, dxf.DrawingVariables.TduCreate.Millisecond.ToString("000"));
            Console.WriteLine("\tdrawing last update (UTC): {0}.{1}", dxf.DrawingVariables.TduUpdate, dxf.DrawingVariables.TduUpdate.Millisecond.ToString("000"));
            Console.WriteLine("\tdrawing edition time: {0}", dxf.DrawingVariables.TdinDwg);
            Console.WriteLine();
            Console.WriteLine("APPLICATION REGISTRIES: {0}", dxf.ApplicationRegistries.Count);
            foreach (var o in dxf.ApplicationRegistries)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.ApplicationRegistries.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            Console.WriteLine("LAYERS: {0}", dxf.Layers.Count);
            foreach (var o in dxf.Layers)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.Layers.GetReferences(o).Count);
                Debug.Assert(ReferenceEquals(o.Linetype, dxf.Linetypes[o.Linetype.Name]), "Object reference not equal.");
            }
            Console.WriteLine();

            Console.WriteLine("LINE TYPES: {0}", dxf.Linetypes.Count);
            foreach (var o in dxf.Linetypes)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.Linetypes.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            Console.WriteLine("TEXT STYLES: {0}", dxf.TextStyles.Count);
            foreach (var o in dxf.TextStyles)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.TextStyles.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            //Console.WriteLine("SHAPE STYLES: {0}", dxf.ShapeStyles.Count);
            //foreach (var o in dxf.ShapeStyles)
            //{
            //    Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.ShapeStyles.GetReferences(o.Name).Count);
            //}
            //Console.WriteLine();

            Console.WriteLine("DIMENSION STYLES: {0}", dxf.DimensionStyles.Count);
            foreach (var o in dxf.DimensionStyles)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.DimensionStyles.GetReferences(o.Name).Count);
                Debug.Assert(ReferenceEquals(o.TextStyle, dxf.TextStyles[o.TextStyle.Name]), "Object reference not equal.");
                Debug.Assert(ReferenceEquals(o.DimLineLinetype, dxf.Linetypes[o.DimLineLinetype.Name]), "Object reference not equal.");
                Debug.Assert(ReferenceEquals(o.ExtLine1Linetype, dxf.Linetypes[o.ExtLine1Linetype.Name]), "Object reference not equal.");
                Debug.Assert(ReferenceEquals(o.ExtLine2Linetype, dxf.Linetypes[o.ExtLine2Linetype.Name]), "Object reference not equal.");
                if (o.DimArrow1 != null)
                {
                    Debug.Assert(ReferenceEquals(o.DimArrow1, dxf.Blocks[o.DimArrow1.Name]), "Object reference not equal.");
                }
                if (o.DimArrow2 != null)
                {
                    Debug.Assert(ReferenceEquals(o.DimArrow2, dxf.Blocks[o.DimArrow2.Name]), "Object reference not equal.");
                }
            }
            Console.WriteLine();

            Console.WriteLine("MLINE STYLES: {0}", dxf.MlineStyles.Count);
            foreach (var o in dxf.MlineStyles)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.MlineStyles.GetReferences(o.Name).Count);
                foreach (var e in o.Elements)
                {
                    Debug.Assert(ReferenceEquals(e.Linetype, dxf.Linetypes[e.Linetype.Name]), "Object reference not equal.");
                }
            }
            Console.WriteLine();

            Console.WriteLine("UCSs: {0}", dxf.UCSs.Count);
            foreach (var o in dxf.UCSs)
            {
                Console.WriteLine("\t{0}", o.Name);
            }
            Console.WriteLine();

            Console.WriteLine("BLOCKS: {0}", dxf.Blocks.Count);
            foreach (var o in dxf.Blocks)
            {
                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.Blocks.GetReferences(o.Name).Count);
                Debug.Assert(ReferenceEquals(o.Layer, dxf.Layers[o.Layer.Name]), "Object reference not equal.");

                foreach (var e in o.Entities)
                {
                    Debug.Assert(ReferenceEquals(e.Layer, dxf.Layers[e.Layer.Name]), "Object reference not equal.");
                    Debug.Assert(ReferenceEquals(e.Linetype, dxf.Linetypes[e.Linetype.Name]), "Object reference not equal.");
                    Debug.Assert(ReferenceEquals(e.Owner, dxf.Blocks[o.Name]), "Object reference not equal.");
                    foreach (var x in e.XData.Values)
                    {
                        Debug.Assert(ReferenceEquals(x.ApplicationRegistry, dxf.ApplicationRegistries[x.ApplicationRegistry.Name]), "Object reference not equal.");
                    }

                    Text txt = e as Text;
                    if (txt != null)
                    {
                        Debug.Assert(ReferenceEquals(txt.Style, dxf.TextStyles[txt.Style.Name]), "Object reference not equal.");
                    }

                    MText mtxt = e as MText;
                    if (mtxt != null)
                    {
                        Debug.Assert(ReferenceEquals(mtxt.Style, dxf.TextStyles[mtxt.Style.Name]), "Object reference not equal.");
                    }

                    Dimension dim = e as Dimension;
                    if (dim != null)
                    {
                        Debug.Assert(ReferenceEquals(dim.Style, dxf.DimensionStyles[dim.Style.Name]), "Object reference not equal.");
                        Debug.Assert(ReferenceEquals(dim.Block, dxf.Blocks[dim.Block.Name]), "Object reference not equal.");
                    }

                    MLine mline = e as MLine;
                    if (mline != null)
                    {
                        Debug.Assert(ReferenceEquals(mline.Style, dxf.MlineStyles[mline.Style.Name]), "Object reference not equal.");
                    }

                    Image img = e as Image;
                    if (img != null)
                    {
                        Debug.Assert(ReferenceEquals(img.Definition, dxf.ImageDefinitions[img.Definition.Name]), "Object reference not equal.");
                    }

                    Insert ins = e as Insert;
                    if (ins != null)
                    {
                        Debug.Assert(ReferenceEquals(ins.Block, dxf.Blocks[ins.Block.Name]), "Object reference not equal.");
                        foreach (var a in ins.Attributes)
                        {
                            Debug.Assert(ReferenceEquals(a.Layer, dxf.Layers[a.Layer.Name]), "Object reference not equal.");
                            Debug.Assert(ReferenceEquals(a.Linetype, dxf.Linetypes[a.Linetype.Name]), "Object reference not equal.");
                            Debug.Assert(ReferenceEquals(a.Style, dxf.TextStyles[a.Style.Name]), "Object reference not equal.");
                        }
                    }
                }

                foreach (var a in o.AttributeDefinitions.Values)
                {
                    Debug.Assert(ReferenceEquals(a.Layer, dxf.Layers[a.Layer.Name]), "Object reference not equal.");
                    Debug.Assert(ReferenceEquals(a.Linetype, dxf.Linetypes[a.Linetype.Name]), "Object reference not equal.");
                    foreach (var x in a.XData.Values)
                    {
                        Debug.Assert(ReferenceEquals(x.ApplicationRegistry, dxf.ApplicationRegistries[x.ApplicationRegistry.Name]), "Object reference not equal.");
                    }
                }
            }
            Console.WriteLine();

            Console.WriteLine("LAYOUTS: {0}", dxf.Layouts.Count);
            foreach (var o in dxf.Layouts)
            {
                Debug.Assert(ReferenceEquals(o.AssociatedBlock, dxf.Blocks[o.AssociatedBlock.Name]), "Object reference not equal.");

                Console.WriteLine("\t{0}; References count: {1}", o.Name, dxf.Layouts.GetReferences(o.Name).Count);
                List <DxfObject> entities = dxf.Layouts.GetReferences(o.Name);
                foreach (var e in entities)
                {
                    EntityObject entity = e as EntityObject;
                    if (entity != null)
                    {
                        Debug.Assert(ReferenceEquals(entity.Layer, dxf.Layers[entity.Layer.Name]), "Object reference not equal.");
                        Debug.Assert(ReferenceEquals(entity.Linetype, dxf.Linetypes[entity.Linetype.Name]), "Object reference not equal.");
                        Debug.Assert(ReferenceEquals(entity.Owner, dxf.Blocks[o.AssociatedBlock.Name]), "Object reference not equal.");
                        foreach (var x in entity.XData.Values)
                        {
                            Debug.Assert(ReferenceEquals(x.ApplicationRegistry, dxf.ApplicationRegistries[x.ApplicationRegistry.Name]), "Object reference not equal.");
                        }
                    }

                    Text txt = e as Text;
                    if (txt != null)
                    {
                        Debug.Assert(ReferenceEquals(txt.Style, dxf.TextStyles[txt.Style.Name]), "Object reference not equal.");
                    }

                    MText mtxt = e as MText;
                    if (mtxt != null)
                    {
                        Debug.Assert(ReferenceEquals(mtxt.Style, dxf.TextStyles[mtxt.Style.Name]), "Object reference not equal.");
                    }

                    Dimension dim = e as Dimension;
                    if (dim != null)
                    {
                        Debug.Assert(ReferenceEquals(dim.Style, dxf.DimensionStyles[dim.Style.Name]), "Object reference not equal.");
                        Debug.Assert(ReferenceEquals(dim.Block, dxf.Blocks[dim.Block.Name]), "Object reference not equal.");
                    }

                    MLine mline = e as MLine;
                    if (mline != null)
                    {
                        Debug.Assert(ReferenceEquals(mline.Style, dxf.MlineStyles[mline.Style.Name]), "Object reference not equal.");
                    }

                    Image img = e as Image;
                    if (img != null)
                    {
                        Debug.Assert(ReferenceEquals(img.Definition, dxf.ImageDefinitions[img.Definition.Name]), "Object reference not equal.");
                    }

                    Insert ins = e as Insert;
                    if (ins != null)
                    {
                        Debug.Assert(ReferenceEquals(ins.Block, dxf.Blocks[ins.Block.Name]), "Object reference not equal.");
                        foreach (var a in ins.Attributes)
                        {
                            Debug.Assert(ReferenceEquals(a.Layer, dxf.Layers[a.Layer.Name]), "Object reference not equal.");
                            Debug.Assert(ReferenceEquals(a.Linetype, dxf.Linetypes[a.Linetype.Name]), "Object reference not equal.");
                            Debug.Assert(ReferenceEquals(a.Style, dxf.TextStyles[a.Style.Name]), "Object reference not equal.");
                        }
                    }
                }
            }
            Console.WriteLine();

            Console.WriteLine("IMAGE DEFINITIONS: {0}", dxf.ImageDefinitions.Count);
            foreach (var o in dxf.ImageDefinitions)
            {
                Console.WriteLine("\t{0}; File name: {1}; References count: {2}", o.Name, o.FileName, dxf.ImageDefinitions.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            Console.WriteLine("DGN UNDERLAY DEFINITIONS: {0}", dxf.UnderlayDgnDefinitions.Count);
            foreach (var o in dxf.UnderlayDgnDefinitions)
            {
                Console.WriteLine("\t{0}; File name: {1}; References count: {2}", o.Name, o.FileName, dxf.UnderlayDgnDefinitions.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            Console.WriteLine("DWF UNDERLAY DEFINITIONS: {0}", dxf.UnderlayDwfDefinitions.Count);
            foreach (var o in dxf.UnderlayDwfDefinitions)
            {
                Console.WriteLine("\t{0}; File name: {1}; References count: {2}", o.Name, o.FileName, dxf.UnderlayDwfDefinitions.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            Console.WriteLine("PDF UNDERLAY DEFINITIONS: {0}", dxf.UnderlayPdfDefinitions.Count);
            foreach (var o in dxf.UnderlayPdfDefinitions)
            {
                Console.WriteLine("\t{0}; File name: {1}; References count: {2}", o.Name, o.FileName, dxf.UnderlayPdfDefinitions.GetReferences(o.Name).Count);
            }
            Console.WriteLine();

            Console.WriteLine("GROUPS: {0}", dxf.Groups.Count);
            foreach (var o in dxf.Groups)
            {
                Console.WriteLine("\t{0}; Entities count: {1}", o.Name, o.Entities.Count);
            }
            Console.WriteLine();

            Console.WriteLine("ATTRIBUTE DEFINITIONS for the \"Model\" Layout: {0}", dxf.Layouts[Layout.ModelSpaceName].AssociatedBlock.AttributeDefinitions.Count);
            foreach (var o in dxf.Layouts[Layout.ModelSpaceName].AssociatedBlock.AttributeDefinitions)
            {
                Console.WriteLine("\tTag: {0}", o.Value.Tag);
            }
            Console.WriteLine();

            // the entities lists contain the geometry that has a graphical representation in the drawing across all layouts,
            // to get the entities that belongs to a specific layout you can get the references through the Layouts.GetReferences(name)
            // or check the EntityObject.Owner.Record.Layout property
            Console.WriteLine("ENTITIES for the Active Layout = {0}:", dxf.ActiveLayout);
            Console.WriteLine("\t{0}; count: {1}", EntityType.Arc, dxf.Arcs.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Circle, dxf.Circles.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Dimension, dxf.Dimensions.Count());
            foreach (var a in dxf.Dimensions)
            {
                foreach (var styleOverride in a.StyleOverrides.Values)
                {
                    switch (styleOverride.Type)
                    {
                    case DimensionStyleOverrideType.DimLineLinetype:
                        Debug.Assert(ReferenceEquals((Linetype)styleOverride.Value, dxf.Linetypes[((Linetype)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.ExtLine1Linetype:
                        Debug.Assert(ReferenceEquals((Linetype)styleOverride.Value, dxf.Linetypes[((Linetype)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.ExtLine2Linetype:
                        Debug.Assert(ReferenceEquals((Linetype)styleOverride.Value, dxf.Linetypes[((Linetype)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.TextStyle:
                        Debug.Assert(ReferenceEquals((TextStyle)styleOverride.Value, dxf.TextStyles[((TextStyle)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.LeaderArrow:
                        Debug.Assert(ReferenceEquals((Block)styleOverride.Value, dxf.Blocks[((Block)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.DimArrow1:
                        if (styleOverride.Value == null)
                        {
                            break;
                        }
                        Debug.Assert(ReferenceEquals((Block)styleOverride.Value, dxf.Blocks[((Block)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.DimArrow2:
                        if (styleOverride.Value == null)
                        {
                            break;
                        }
                        Debug.Assert(ReferenceEquals((Block)styleOverride.Value, dxf.Blocks[((Block)styleOverride.Value).Name]), "Object reference not equal.");
                        break;
                    }
                }
            }
            Console.WriteLine("\t{0}; count: {1}", EntityType.Ellipse, dxf.Ellipses.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Face3D, dxf.Faces3d.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Hatch, dxf.Hatches.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Image, dxf.Images.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Insert, dxf.Inserts.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Leader, dxf.Leaders.Count());
            foreach (var a in dxf.Leaders)
            {
                foreach (var styleOverride in a.StyleOverrides.Values)
                {
                    switch (styleOverride.Type)
                    {
                    case DimensionStyleOverrideType.DimLineLinetype:
                        Debug.Assert(ReferenceEquals((Linetype)styleOverride.Value, dxf.Linetypes[((Linetype)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.ExtLine1Linetype:
                        Debug.Assert(ReferenceEquals((Linetype)styleOverride.Value, dxf.Linetypes[((Linetype)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.ExtLine2Linetype:
                        Debug.Assert(ReferenceEquals((Linetype)styleOverride.Value, dxf.Linetypes[((Linetype)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.TextStyle:
                        Debug.Assert(ReferenceEquals((TextStyle)styleOverride.Value, dxf.TextStyles[((TextStyle)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.LeaderArrow:
                        Debug.Assert(ReferenceEquals((Block)styleOverride.Value, dxf.Blocks[((Block)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.DimArrow1:
                        Debug.Assert(ReferenceEquals((Block)styleOverride.Value, dxf.Blocks[((Block)styleOverride.Value).Name]), "Object reference not equal.");
                        break;

                    case DimensionStyleOverrideType.DimArrow2:
                        Debug.Assert(ReferenceEquals((Block)styleOverride.Value, dxf.Blocks[((Block)styleOverride.Value).Name]), "Object reference not equal.");
                        break;
                    }
                }
            }
            Console.WriteLine("\t{0}; count: {1}", EntityType.LightWeightPolyline, dxf.LwPolylines.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Line, dxf.Lines.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Mesh, dxf.Meshes.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.MLine, dxf.MLines.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.MText, dxf.MTexts.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Point, dxf.Points.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.PolyfaceMesh, dxf.PolyfaceMeshes.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Polyline, dxf.Polylines.Count());
            // Console.WriteLine("\t{0}; count: {1}", EntityType.Shape, dxf.Shapes.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Solid, dxf.Solids.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Spline, dxf.Splines.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Text, dxf.Texts.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Ray, dxf.Rays.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Underlay, dxf.Underlays.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Viewport, dxf.Viewports.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.Wipeout, dxf.Wipeouts.Count());
            Console.WriteLine("\t{0}; count: {1}", EntityType.XLine, dxf.XLines.Count());
            Console.WriteLine();

            // the dxf version is controlled by the DrawingVariables property of the dxf document,
            // also a HeaderVariables instance or a DxfVersion can be passed to the constructor to initialize a new DxfDocument.
            //  dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2018;
            //  dxf.Save("sample 2018.dxf");
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2013;
            dxf.Save("sample 2013.dxf");
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2010;
            dxf.Save("sample 2010.dxf");
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2007;
            dxf.Save("sample 2007.dxf");
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2004;
            dxf.Save("sample 2004.dxf");
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2000;
            dxf.Save("sample 2000.dxf");

            // saving to binary dxf
            dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2013;
            dxf.Save("binary test.dxf", true);
            // DxfDocument test = DxfDocument.Load("binary test.dxf", new List<string> { @".\Support" });
            DxfDocument test = DxfDocument.Load("binary test.dxf");

            if (outputLog)
            {
                writer.Flush();
                writer.Close();
            }
            else
            {
                Console.WriteLine("Press a key to continue...");
                Console.ReadLine();
            }
            return(dxf);
        }