A portable .NET library for reading and writing DXF and DXB files. Clone and build locally or directly consume the NuGet package.
Open a DXF file:
using System.IO;
using IxMilia.Dxf;
using IxMilia.Dxf.Entities;
// ...
DxfFile dxfFile;
using (FileStream fs = new FileStream(@"C:\Path\To\File.dxf", FileMode.Open))
{
dxfFile = DxfFile.Load(fs);
}
// if on >= .NETFrameworkv3.5 or >= NETStandard1.3 you can use:
// DxfFile dxfFile = DxfFile.Load(@"C:\Path\To\File.dxf");
foreach (DxfEntity entity in dxfFile.Entities)
{
switch (entity.EntityType)
{
case DxfEntityType.Line:
DxfLine line = (DxfLine)entity;
// ...
break;
// ...
}
}
Save a DXF file:
using System.IO;
using IxMilia.Dxf;
using IxMilia.Dxf.Entities;
// ...
DxfFile dxfFile = new DxfFile();
dxfFile.Entities.Add(new DxfLine(new DxfPoint(0, 0, 0), new DxfPoint(50, 50, 0)));
// ...
using (FileStream fs = new FileStream(@"C:\Path\To\File.dxf", FileMode.Create))
{
dxfFile.Save(fs);
}
// if on >= .NETFrameworkv3.5 or >= NETStandard1.3 you can use:
// dxfFile.Save(@"C:\Path\To\File.dxf");
This library should be able to open any valid DXF file, including files produced by AutoCAD or anything using the Teigha libraries from the Open Design Alliance, including Microsoft Visio which uses older Open Design libraries.
The Teigha libraries should be able to open anything produced by this library.
AutoCAD is rather fussy with what it will accept as valid DXF, even though the official spec is rather loose. If you use this library to write a file that AutoCAD can't open, file an issue with the drawing (or a sample) that was produced by this library. I've found that AutoCAD compatibility can be greatly improved by doing the following:
// assuming `dxfFile` is a valid `DxfFile` object
dxfFile.Header.SetDefaults();
dxfFile.ViewPorts.Clear();
dxfFile.Save(...);
There are also some entity types that AutoCAD might not open when written by this library, specifically:
- 3DSOLID (
Dxf3DSolid
) - ACAD_PROXY_ENTITY (
DxfProxyEntity
) - ATTRIB (
DxfAttribute
) - ATTDEF (
DxfAttributeDefinition
) - BODY (
DxfBody
) - DIMENSION (
DxfAlignedDimension
,DxfAngularThreePointDimension
,DxfDiameterDimension
,DxfOrdinateDimension
,DxfRadialDimension
,DxfRotatedDimension
) - HELIX (
DxfHelix
) - LIGHT (
DxfLight
) - MTEXT (
DxfMText
) - REGION (
DxfRegion
) - SHAPE (
DxfShape
) - TOLERANCE (
DxfTolerance
)
And the following entities might not open in AutoCAD if written with missing information, e.g., a LEADER (DxfLeader
)
requires at least 2 vertices.
- INSERT (
DxfInsert
) - LEADER (
DxfLeader
) - MLINE (
DxfMLine
) - DGNUNDERLAY (
DxfDgnUnderlay
) - DWFUNDERLAY (
DxfDwfUnderlay
) - PDFUNDERLAY (
DxfPdfUnderlay
) - SPLINE (
DxfSpline
) - VERTEX (
DxfVertex
)
Also note that AutoCAD doesn't seem to like R13 files written by IxMilia. For the greatest chance of compatibility, save the file as either R12 or the newest version possible (e.g., R2013 or R2010.)
Support for DXF files is complete from versions R10 through R2014 EXCEPT for the following entities:
- HATCH
- MESH
- MLEADER
- SURFACE
- TABLE
- VIEWPORT
To build locally, install the latest .NET Core 3.0 SDK.
Since I don't want to fall afoul of Autodesk's lawyers, this repo can't include the actual DXF documentation. It can, however contain links to the official documents that I've been able to scrape together. For most scenarios the latest documentation should suffice, but all other versions are included here for backwards compatibility and reference between versions.
2007 (Autodesk's link erroneously points to the R2008 documentation)
R13 (self-extracting 16-bit executable)
R11 (differences between R10 and R11)
The 2015-2020 spec can be downloaded for offline use via the ReferenceCollector.
Many earlier links were compiled from an archive.org May 9, 2013 snapshot