Project Name: libdxfrw Version: 0.6.3 License: GNU General Public License v2 (or later) Original Author: José F. Soriano (Rallaz) Maintainers: codelibs, Nicu Tofan, Miguel E. Hernández Cuervo
libdxfrw is a free C++ library for reading and writing DXF (Drawing eXchange Format) files in both ASCII and binary formats. It also supports reading DWG (AutoCAD drawing) files from versions R14 through V2015.
-
DXF File Read/Write
- Read and write DXF files in ASCII format
- Read and write DXF files in binary format
- Support for multiple DXF versions: R12, 2000, 2004, 2007, 2010
-
DWG File Reading
- Supported versions: R14 to V2015
- Version-specific reader implementations:
- dwgReader15: R14 version
- dwgReader18: R2004 version
- dwgReader21: R2007 version
- dwgReader24: R2010 version
- dwgReader27: R2013/R2015 versions
-
Supported CAD Drawing Entities
- Basic shapes: Points, Lines, Rays, XLines
- Curves: Circles, Arcs, Ellipses, Splines
- Polylines: 2D/3D Lightweight Polylines
- 3D shapes: 3D Faces, Traces, Solids
- Text: Single-line text, Multi-line text
- Annotations: Hatches, Dimensions, Leaders
- Others: Block references, Images, Viewports
-
Supported CAD Objects
- Layers
- Line Types
- Text Styles
- Dimension Styles
- Viewports
- Application IDs
- Block Definitions
dxfRW (Main API Class)
├── DRW_Interface (Abstract Interface)
├── dxfReader/dxfWriter (DXF I/O Handlers)
├── dwgReader (DWG Reader Base)
│ ├── dwgReader15 (R14)
│ ├── dwgReader18 (R2004)
│ ├── dwgReader21 (R2007)
│ ├── dwgReader24 (R2010)
│ └── dwgReader27 (R2013-2015)
├── DRW_Header (Header Variables)
├── DRW_Entity (Geometric Entities)
│ ├── DRW_Point
│ ├── DRW_Line
│ ├── DRW_Arc
│ ├── DRW_Circle
│ ├── DRW_Ellipse
│ ├── DRW_LWPolyline
│ ├── DRW_Polyline
│ ├── DRW_Spline
│ ├── DRW_Text
│ ├── DRW_MText
│ ├── DRW_Hatch
│ ├── DRW_Dimension (various dimension types)
│ └── Other entities
└── DRW_Object (Non-geometric Objects)
├── DRW_Layer
├── DRW_LType
├── DRW_Textstyle
├── DRW_Dimstyle
└── Other objects
libdxfrw/
├── src/ # Library source code
│ ├── libdxfrw.h/cpp # Main API class
│ ├── drw_interface.h # Abstract interface
│ ├── drw_entities.h/cpp # Entity definitions
│ ├── drw_objects.h/cpp # Object definitions
│ ├── drw_header.h/cpp # Header variables
│ ├── drw_base.h # Basic data structures
│ └── intern/ # Internal implementation
│ ├── dxfreader.h/cpp # DXF reader
│ ├── dxfwriter.h/cpp # DXF writer
│ ├── dwgreader*.h/cpp # DWG readers
│ ├── dwgbuffer.h/cpp # DWG buffer
│ ├── drw_textcodec.h/cpp # Character encoding
│ └── Other utilities
├── dwg2dxf/ # DWG to DXF converter tool
├── dwg2text/ # DWG to text extractor tool
├── bin/ # Executable scripts
└── vs2013/ # Visual Studio 2013 project
dxfRW(const char* name);- Parameters:
name- File name to process - Description: Creates an instance for processing DXF/DWG files
bool read(DRW_Interface *interface_, bool ext);- Parameters:
interface_: Callback interface implementationext: Apply extrusion to convert to 2D
- Returns: true on success, false on failure
- Description: Reads the file and calls interface methods for each entity
bool write(DRW_Interface *interface_, DRW::Version ver, bool bin);- Parameters:
interface_: Interface implementation providing dataver: DXF version (R12, 2000, 2004, 2007, 2010)bin: Output in binary format
- Returns: true on success, false on failure
bool writePoint(DRW_Point *ent);
bool writeLine(DRW_Line *ent);
bool writeCircle(DRW_Circle *ent);
bool writeArc(DRW_Arc *ent);
bool writeEllipse(DRW_Ellipse *ent);
bool writeLWPolyline(DRW_LWPolyline *ent);
bool writeSpline(DRW_Spline *ent);
bool writeText(DRW_Text *ent);
bool writeMText(DRW_MText *ent);
bool writeHatch(DRW_Hatch *ent);
// ... many morebool writeLayer(DRW_Layer *ent);
bool writeLineType(DRW_LType *ent);
bool writeTextstyle(DRW_Textstyle *ent);
bool writeDimstyle(DRW_Dimstyle *ent);
bool writeVport(DRW_Vport *ent);
bool writeAppId(DRW_AppId *ent);Applications must inherit from this interface and implement callback methods.
virtual void addHeader(const DRW_Header* data) = 0;virtual void addLayer(const DRW_Layer& data) = 0;
virtual void addLType(const DRW_LType& data) = 0;
virtual void addDimStyle(const DRW_Dimstyle& data) = 0;
virtual void addTextStyle(const DRW_Textstyle& data) = 0;
virtual void addVport(const DRW_Vport& data) = 0;
virtual void addAppId(const DRW_AppId& data) = 0;virtual void addBlock(const DRW_Block& data) = 0;
virtual void setBlock(const int handle) = 0;
virtual void endBlock() = 0;virtual void addPoint(const DRW_Point& data) = 0;
virtual void addLine(const DRW_Line& data) = 0;
virtual void addRay(const DRW_Ray& data) = 0;
virtual void addXline(const DRW_Xline& data) = 0;
virtual void addCircle(const DRW_Circle& data) = 0;
virtual void addArc(const DRW_Arc& data) = 0;
virtual void addEllipse(const DRW_Ellipse& data) = 0;
virtual void addLWPolyline(const DRW_LWPolyline& data) = 0;
virtual void addPolyline(const DRW_Polyline& data) = 0;
virtual void addSpline(const DRW_Spline* data) = 0;
virtual void addInsert(const DRW_Insert& data) = 0;
virtual void addTrace(const DRW_Trace& data) = 0;
virtual void add3dFace(const DRW_3Dface& data) = 0;
virtual void addSolid(const DRW_Solid& data) = 0;
virtual void addMText(const DRW_MText& data) = 0;
virtual void addText(const DRW_Text& data) = 0;
virtual void addHatch(const DRW_Hatch *data) = 0;
virtual void addViewport(const DRW_Viewport& data) = 0;
virtual void addImage(const DRW_Image *data) = 0;virtual void addDimAlign(const DRW_DimAligned *data) = 0;
virtual void addDimLinear(const DRW_DimLinear *data) = 0;
virtual void addDimRadial(const DRW_DimRadial *data) = 0;
virtual void addDimDiametric(const DRW_DimDiametric *data) = 0;
virtual void addDimAngular(const DRW_DimAngular *data) = 0;
virtual void addDimAngular3P(const DRW_DimAngular3p *data) = 0;
virtual void addDimOrdinate(const DRW_DimOrdinate *data) = 0;virtual void addLeader(const DRW_Leader *data) = 0;
virtual void linkImage(const DRW_ImageDef *data) = 0;
virtual void addComment(const char* comment) = 0;virtual void writeHeader(DRW_Header& data) = 0;
virtual void writeBlocks() = 0;
virtual void writeBlockRecords() = 0;
virtual void writeEntities() = 0;
virtual void writeLTypes() = 0;
virtual void writeLayers() = 0;
virtual void writeTextstyles() = 0;
virtual void writeVports() = 0;
virtual void writeDimstyles() = 0;
virtual void writeAppId() = 0;autoreconf -vfi
./configure
make
sudo make installconfigure.ac: Autoconf configurationMakefile.am: Automake templates- Library version: 0.6.3 (CURRENT=6, REVISION=3, AGE=0)
- Required: libiconv (character conversion)
- Standard Library: stdlib.h, string.h
- Math Functions: sqrt()
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
sudo cmake --build . --config Release --target install- Minimum CMake version: 3.10
- Build target: Static library
dxfrw - Installation paths:
- Headers:
include/ - Library:
lib/(Linux/macOS),Debug/lib/orRelease/lib/(Windows)
- Headers:
- Solution file:
vs2013/libdxfrw.sln - Project file:
vs2013/libdxfrw.vcxproj - NuGet package: libiconv 1.14.0.11
# Build image
docker build --rm -t codelibs/libdxfrw .
# Build library
docker run -t --rm -v `pwd`:/work codelibs/libdxfrw:latest /work/build.sh- Base image: CentOS 7
- Output:
dxfrw.tar.gz(install location:/opt)
Command-line tool to convert DWG files to DXF format.
dwg2dxf [options] input.dwg [output.dxf]Files:
dwg2dxf/main.cpp: Entry pointdwg2dxf/dx_iface.h/cpp: Interface implementationdwg2dxf/dwg2dxf.1: Man page
Tool to extract text information from DWG files.
dwg2text input.dwgFiles:
dwg2text/main.cpp: Entry pointdwg2text/dx_iface.h/cpp: Interface implementationdwg2text/dwg2text.1: Man page
Python script to dump DXF files in text format.
python bin/dxf2txt.py input.dxfnamespace DRW {
enum Version {
UNKNOWNV, // Unknown
R12, // R12 DXF
R14, // R14 DXF
R2000, // R2000 DXF
R2004, // R2004 DXF
R2007, // R2007 DXF
R2010, // R2010 DXF
R2013, // R2013 DXF
R2015 // R2015 DXF
};
}class DRW_Entity {
public:
enum DRW_EntityType {
POINT, LINE, CIRCLE, ARC, ELLIPSE,
LWPOLYLINE, POLYLINE, SPLINE,
INSERT, TEXT, MTEXT, HATCH,
DIMENSION, LEADER, VIEWPORT, IMAGE,
// ... others
};
DRW_Coord basePoint; // Base point
std::string layer; // Layer name
std::string lineType; // Line type
int color; // Color number
double thickness; // Thickness
double ltypeScale; // Line type scale
int handle; // Handle
// ... other properties
};class DRW_Coord {
public:
double x;
double y;
double z;
};libdxfrw supports multiple character code pages:
- CP932: Japanese (Shift-JIS)
- CP936: Simplified Chinese (GB2312)
- CP949: Korean
- CP950: Traditional Chinese (Big5)
src/intern/drw_textcodec.h/cpp: Character encoding conversion enginesrc/intern/drw_cptable932.h: Japanese code pagesrc/intern/drw_cptable936.h: Simplified Chinesesrc/intern/drw_cptable949.h: Koreansrc/intern/drw_cptable950.h: Traditional Chinesesrc/intern/drw_cptables.h: Code page table integration
void setDebug(DRW::DBG_LEVEL lvl);Debug Levels:
DRW::NONE: No debug outputDRW::DEBUG: Debug information output
src/intern/drw_dbg.h/cpp: Debug output utilities
dwgBuffer: Efficient binary data processing when reading DWG files- Supports bit-level read operations
- Entities and objects are passed by pointer or reference
- Memory management is handled by the interface implementation side
void setEllipseParts(int parts);Set the number of segments when converting ellipses to polylines. Increasing the number of segments improves accuracy.
External test data repository:
Contains sample files of various DXF/DWG file versions, useful for integration testing.
- DWG File Writing Not Supported: Only DWG file reading is supported
- Limited Entity Support: May not support all entities from the latest AutoCAD versions
- Reed-Solomon Decoding: Error correction functionality for DWG files is limited
See the ChangeLog file for details.
Major development milestones:
- 2011: Project started
- 2013: Added DWG R2004 support
- 2014: Added DWG R2010/R2013 support
- 2015: Added DWG R2015 support
- 2020s: Ongoing community maintenance
GNU General Public License v2.0 (or later)
See the COPYING file for details.
- José F. Soriano (Rallaz): Original author
- Nicu Tofan: Contributor
- Miguel E. Hernández Cuervo: Contributor
- codelibs: Maintainer
- Official website: http://sourceforge.net/projects/libdxfrw
- GitHub: https://github.com/codelibs/libdxfrw
- DXF Reference: AutoCAD DXF Specification (Autodesk official documentation)
Report issues and submit pull requests through the GitHub repository: https://github.com/codelibs/libdxfrw/issues
Last Updated: 2025-11-08