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.