Added support for reading the AcDb::Template data section. Also, added section name output when decoding the drawing file header.
Added support for reading the “second file header” section of R13/R14 files.
After 18 months I’ve finally started to code on the DrawGin library again and made the following changes.
- * Refactored project directory structure.
- ** Added VS 2008 solution file (no longer need cmake to build one).
- Some code cleanup.
- Fix bug when decoding class maps with multiple sections and added additional logging to help locate said bug.
In the VS property page for DrawinApp, added the following line to the Debugging/Command Arguments section:
–v=4 –log_dir=$(OutDir)\logs –alsologtostderr=1 –drawing=C:\Users\Paul\Documents\TestDwgs\TestDwg3.dwg
Decoding the Objects section is still a todo item. Once completed the library should be able to read AutoCAD R14 drawing files.
* The CMake projects files have not been updated to reflect the changed directory structure. Then means creating projects/solutions for your favorite IDE is temporarily broken.
The DrawGin library is rapidly taking shape and able to read most sections of an AutoCAD R14 formatted drawing. The next section to code up is the area where AcDbObject and AcDbEntity derived objects are stored (section 6 below). For the purpose of deserializing the bit encoded drawing data, sections 1, 2, 3, 4, 5 are completed.
- Drawing File Header – Defines where key sections are located within the drawing file.
- Preview Image – Bitmap image created when drawing was last saved.
- Header Variables – various setting variables associated with the drawing file.
- Classes Map – Holds information about various application defined classes that are used (instances of) in the drawing.
- Objects Map – Tells the file position of each object stored in the drawing (with AutoCAD object handle)
- Objects – The object instances referenced in the Objects Map (these are AcDbObject and AcDbEntity derived).
Most of the drawing format is defined at the bit level, which require special IO routines found in the OcBs directory (OcBitStream). The OcBsStreamIn class handles reading the various bit level data types and keeps track of the running CRC calculation. The stream also has a 4K memory buffer and handles huge 100 meg files, no problem.
Classes in the OcDb represent the various data types that make up a drawing. Most of the classes will have a one-to-one similarity by name to those found in Autodesk’s ObjectARX SDK. At this time DrawGin is not going for ObjectARX compatibility, so member function names and signatures will not be the same.
Future blog entries will delve into the framework and implementation details. For now just wanted to post a quick status update.
DrawGin is a new open source project to read and write “.dwg” file formats. Current work is focused on the cross platform C++ framework to support reading drawing files in the AutoCAD R14 format, with write support to follow shortly thereafter.
There is lots of source code to view at the project page, and if you are interested in contributing to DrawGin, let me know. The code currently compiles in OS X and Linux using the Codelite IDE, and in Windows using Visual C++ 2008.
The “.dwg” format specification, versions 4.0 and 5.1, published by the Open Design Alliance are the reference documents used to write the DrawGin library.