/****************************************************************************** ** libDXFrw - Library to read/write DXF files (ascii & binary) ** ** ** ** Copyright (C) 2011 Rallaz, rallazz@gmail.com ** ** ** ** This library is free software, licensed under the terms of the GNU ** ** General Public License as published by the Free Software Foundation, ** ** either version 2 of the License, or (at your option) any later version. ** ** You should have received a copy of the GNU General Public License ** ** along with this program. If not, see . ** ******************************************************************************/ #ifndef LIBDXFRW_H #define LIBDXFRW_H #include #include "drw_entities.h" #include "drw_objects.h" #include "drw_interface.h" class dxfReader; class dxfWriter; class dxfRW { public: dxfRW( const char* name ); ~dxfRW(); /// reads the file specified in constructor /*! * An interface must be provided. It is used by the class to signal various * components being added. * @param interface_ the interface to use * @param ext should the extrusion be applied to convert in 2D? * @return true for success */ bool read( DRW_Interface* interface_, bool ext ); void setBinary( bool b ) { binary = b; } bool write( DRW_Interface* interface_, DRW::Version ver, bool bin ); bool writeLineType( DRW_LType* ent ); bool writeLayer( DRW_Layer* ent ); bool writeDimstyle( DRW_Dimstyle* ent ); bool writeTextstyle( DRW_Textstyle* ent ); bool writeVport( DRW_Vport* ent ); bool writeAppId( DRW_AppId* ent ); bool writePoint( DRW_Point* ent ); bool writeLine( DRW_Line* ent ); bool writeRay( DRW_Ray* ent ); bool writeXline( DRW_Xline* ent ); bool writeCircle( DRW_Circle* ent ); bool writeArc( DRW_Arc* ent ); bool writeEllipse( DRW_Ellipse* ent ); bool writeTrace( DRW_Trace* ent ); bool writeSolid( DRW_Solid* ent ); bool write3dface( DRW_3Dface* ent ); bool writeLWPolyline( DRW_LWPolyline* ent ); bool writePolyline( DRW_Polyline* ent ); bool writeSpline( DRW_Spline* ent ); bool writeBlockRecord( std::string name ); bool writeBlock( DRW_Block* ent ); bool writeInsert( DRW_Insert* ent ); bool writeMText( DRW_MText* ent ); bool writeText( DRW_Text* ent ); bool writeHatch( DRW_Hatch* ent ); bool writeViewport( DRW_Viewport* ent ); DRW_ImageDef* writeImage( DRW_Image* ent, std::string name ); bool writeLeader( DRW_Leader* ent ); bool writeDimension( DRW_Dimension* ent ); void setEllipseParts( int parts ) { elParts = parts; } /*!< set parts munber when convert ellipse to polyline */ private: /// used by read() to parse the content of the file bool processDxf(); bool processHeader(); bool processTables(); bool processBlocks(); bool processBlock(); bool processEntities( bool isblock ); bool processObjects(); bool processLType(); bool processLayer(); bool processDimStyle(); bool processTextStyle(); bool processVports(); bool processAppId(); bool processPoint(); bool processLine(); bool processRay(); bool processXline(); bool processCircle(); bool processArc(); bool processEllipse(); bool processTrace(); bool processSolid(); bool processInsert(); bool processLWPolyline(); bool processPolyline(); bool processVertex( DRW_Polyline* pl ); bool processText(); bool processMText(); bool processHatch(); bool processSpline(); bool process3dface(); bool processViewport(); bool processImage(); bool processImageDef(); bool processDimension(); bool processLeader(); // bool writeHeader(); bool writeEntity( DRW_Entity* ent ); bool writeTables(); bool writeBlocks(); bool writeObjects(); bool writeExtData( const std::vector& ed ); std::string toHexStr( int n ); private: DRW::Version version; std::string fileName; std::string codePage; bool binary; dxfReader* reader; dxfWriter* writer; DRW_Interface* iface; DRW_Header header; // int section; std::string nextentity; int entCount; bool wlayer0; bool dimstyleStd; bool applyExt; bool writingBlock; int elParts; /*!< parts munber when convert ellipse to polyline */ std::map blockMap; std::vector imageDef; /*!< imageDef list */ int currHandle; }; #endif // LIBDXFRW_H