internal static DxfEntity FromBuffer(DxfCodePairBufferReader buffer) { var first = buffer.Peek(); buffer.Advance(); DxfEntity entity; switch (first.StringValue) { case "3DFACE": entity = new Dxf3DFace(); break; case "3DSOLID": entity = new Dxf3DSolid(); break; case "ACAD_PROXY_ENTITY": entity = new DxfProxyEntity(); break; case "ARC": entity = new DxfArc(); break; case "ARCALIGNEDTEXT": entity = new DxfArcAlignedText(); break; case "ATTDEF": entity = new DxfAttributeDefinition(); break; case "ATTRIB": entity = new DxfAttribute(); break; case "BODY": entity = new DxfBody(); break; case "CIRCLE": entity = new DxfCircle(); break; case "DIMENSION": entity = new DxfDimensionBase(); break; case "ELLIPSE": entity = new DxfEllipse(); break; case "HELIX": entity = new DxfHelix(); break; case "IMAGE": entity = new DxfImage(); break; case "INSERT": entity = new DxfInsert(); break; case "LEADER": entity = new DxfLeader(); break; case "LIGHT": entity = new DxfLight(); break; case "LINE": case "3DLINE": entity = new DxfLine(); break; case "LWPOLYLINE": entity = new DxfLwPolyline(); break; case "MLINE": entity = new DxfMLine(); break; case "MTEXT": entity = new DxfMText(); break; case "OLEFRAME": entity = new DxfOleFrame(); break; case "OLE2FRAME": entity = new DxfOle2Frame(); break; case "POINT": entity = new DxfModelPoint(); break; case "POLYLINE": entity = new DxfPolyline(); break; case "RAY": entity = new DxfRay(); break; case "REGION": entity = new DxfRegion(); break; case "RTEXT": entity = new DxfRText(); break; case "SECTION": entity = new DxfEntitySection(); break; case "SEQEND": entity = new DxfSeqend(); break; case "SHAPE": entity = new DxfShape(); break; case "SOLID": entity = new DxfSolid(); break; case "SPLINE": entity = new DxfSpline(); break; case "TEXT": entity = new DxfText(); break; case "TOLERANCE": entity = new DxfTolerance(); break; case "TRACE": entity = new DxfTrace(); break; case "UNDERLAY": entity = new DxfUnderlay(); break; case "DGNUNDERLAY": entity = new DxfDgnUnderlay(); break; case "DWFUNDERLAY": entity = new DxfDwfUnderlay(); break; case "PDFUNDERLAY": entity = new DxfPdfUnderlay(); break; case "VERTEX": entity = new DxfVertex(); break; case "WIPEOUT": entity = new DxfWipeout(); break; case "XLINE": entity = new DxfXLine(); break; default: SwallowEntity(buffer); entity = null; break; } if (entity != null) { entity = entity.PopulateFromBuffer(buffer); } return(entity); }
public void AutoCadReadIxMiliaFileCompatTest() { // save a DXF file in all the formats that IxMilia.Dxf and AutoCAD support and try to get AutoCAD to read all of them using (var directory = new ManageTemporaryDirectory()) { var tempDir = directory.DirectoryPath; var versions = new[] { DxfAcadVersion.R9, DxfAcadVersion.R10, DxfAcadVersion.R11, DxfAcadVersion.R12, //DxfAcadVersion.R13, DxfAcadVersion.R14, DxfAcadVersion.R2000, DxfAcadVersion.R2004, DxfAcadVersion.R2007, DxfAcadVersion.R2010, DxfAcadVersion.R2013 }; // save the minimal file with all versions var file = new DxfFile(); var text = new DxfText(DxfPoint.Origin, 2.0, ""); file.Entities.Add(text); foreach (var version in versions) { var fileName = $"file.{version}.dxf"; file.Header.Version = version; text.Value = version.ToString(); var outputPath = Path.Combine(tempDir, fileName); using (var fs = new FileStream(outputPath, FileMode.Create)) { file.Save(fs); } } // open each file in AutoCAD and try to write it back out var lines = new List<string>(); lines.Add("FILEDIA 0"); foreach (var version in versions) { lines.Add("ERASE ALL "); lines.Add($"DXFIN \"{Path.Combine(tempDir, $"file.{version}.dxf")}\""); lines.Add($"DXFOUT \"{Path.Combine(tempDir, $"result.{version}.dxf")}\" V R12 16"); } lines.Add("FILEDIA 1"); lines.Add("QUIT Y"); // create and execute the script var scriptPath = Path.Combine(tempDir, "script.scr"); File.WriteAllLines(scriptPath, lines); ExecuteAutoCadScript(scriptPath); // check each resultant file for the correct version and text foreach (var version in versions) { DxfFile dxf; using (var fs = new FileStream(Path.Combine(tempDir, $"result.{version}.dxf"), FileMode.Open)) { dxf = DxfFile.Load(fs); } Assert.Equal(version.ToString(), ((DxfText)dxf.Entities.Single()).Value); } } }
internal static DxfEntity FromBuffer(DxfCodePairBufferReader buffer) { var first = buffer.Peek(); buffer.Advance(); DxfEntity entity; switch (first.StringValue) { case "3DFACE": entity = new Dxf3DFace(); break; case "3DSOLID": entity = new Dxf3DSolid(); break; case "ACAD_PROXY_ENTITY": entity = new DxfProxyEntity(); break; case "ARC": entity = new DxfArc(); break; case "ARCALIGNEDTEXT": entity = new DxfArcAlignedText(); break; case "ATTDEF": entity = new DxfAttributeDefinition(); break; case "ATTRIB": entity = new DxfAttribute(); break; case "BODY": entity = new DxfBody(); break; case "CIRCLE": entity = new DxfCircle(); break; case "DIMENSION": entity = new DxfDimensionBase(); break; case "ELLIPSE": entity = new DxfEllipse(); break; case "HELIX": entity = new DxfHelix(); break; case "IMAGE": entity = new DxfImage(); break; case "INSERT": entity = new DxfInsert(); break; case "LEADER": entity = new DxfLeader(); break; case "LIGHT": entity = new DxfLight(); break; case "LINE": case "3DLINE": entity = new DxfLine(); break; case "LWPOLYLINE": entity = new DxfLwPolyline(); break; case "MLINE": entity = new DxfMLine(); break; case "MLEADERSTYLE": entity = new DxfMLeaderStyle(); break; case "MTEXT": entity = new DxfMText(); break; case "OLEFRAME": entity = new DxfOleFrame(); break; case "OLE2FRAME": entity = new DxfOle2Frame(); break; case "POINT": entity = new DxfModelPoint(); break; case "POLYLINE": entity = new DxfPolyline(); break; case "RAY": entity = new DxfRay(); break; case "REGION": entity = new DxfRegion(); break; case "RTEXT": entity = new DxfRText(); break; case "SECTION": entity = new DxfEntitySection(); break; case "SEQEND": entity = new DxfSeqend(); break; case "SHAPE": entity = new DxfShape(); break; case "SOLID": entity = new DxfSolid(); break; case "SPLINE": entity = new DxfSpline(); break; case "SUN": entity = new DxfSun(); break; case "TEXT": entity = new DxfText(); break; case "TOLERANCE": entity = new DxfTolerance(); break; case "TRACE": entity = new DxfTrace(); break; case "UNDERLAY": entity = new DxfUnderlay(); break; case "DGNUNDERLAY": entity = new DxfDgnUnderlay(); break; case "DWFUNDERLAY": entity = new DxfDwfUnderlay(); break; case "PDFUNDERLAY": entity = new DxfPdfUnderlay(); break; case "VERTEX": entity = new DxfVertex(); break; case "WIPEOUT": entity = new DxfWipeout(); break; case "XLINE": entity = new DxfXLine(); break; default: SwallowEntity(buffer); entity = null; break; } if (entity != null) { entity = entity.PopulateFromBuffer(buffer); } return entity; }