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); }
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])); } }
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); }
// 读取Dxf文件 public void ReadFile(string path) { DxfVersion dxfVersion = DxfDocument.CheckDxfFileVersion(path); if (dxfVersion < DxfVersion.AutoCad2000) { return; } this.Dxf = DxfDocument.Load(path); }
//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); }
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); }
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); }
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); } }
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); } }
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); }
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); }