/******************************************************************************
** libDXFrw - Library to read/write DXF files (ascii & binary) **
** **
** Copyright (C) 2011-2015 José F. Soriano, 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 "drw_entities.h"
#include "drw_header.h"
#include "drw_interface.h"
#include "drw_objects.h"
#include "intern/dxfreader.h"
#include "intern/dxfwriter.h"
#include
#include
// Header is removed in C++20.
#if __cplusplus <= 201703L
#include // and, not, or
#endif
class dxfRW
{
public:
explicit dxfRW(const char *name);
~dxfRW();
static void setDebug(DRW::DebugLevel lvl);
/// 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
*/
auto read(DRW_Interface *interface_, bool ext) -> bool;
void setBinary(bool b) { binFile = b; }
void AddXSpaceBlock(bool add) { m_xSpaceBlock = add; }
auto write(DRW_Interface *interface_, DRW::Version ver, bool bin) -> bool;
auto writeLineType(DRW_LType *ent) -> bool;
auto writeLayer(DRW_Layer *ent) -> bool;
auto writeDimstyle(DRW_Dimstyle *ent) -> bool;
auto writeTextstyle(DRW_Textstyle *ent) -> bool;
auto writeVport(DRW_Vport *ent) -> bool;
auto writeAppId(DRW_AppId *ent) -> bool;
auto writePoint(DRW_Point *ent) -> bool;
auto writeASTMNotch(DRW_ASTMNotch *ent) -> bool;
auto writeATTDEF(DRW_ATTDEF *ent) -> bool;
auto writeLine(DRW_Line *ent) -> bool;
auto writeRay(DRW_Ray *ent) -> bool;
auto writeXline(DRW_Xline *ent) -> bool;
auto writeCircle(DRW_Circle *ent) -> bool;
auto writeArc(DRW_Arc *ent) -> bool;
auto writeEllipse(DRW_Ellipse *ent) -> bool;
auto writeTrace(DRW_Trace *ent) -> bool;
auto writeSolid(DRW_Solid *ent) -> bool;
auto write3dface(DRW_3Dface *ent) -> bool;
auto writeLWPolyline(DRW_LWPolyline *ent) -> bool;
auto writePolyline(DRW_Polyline *ent) -> bool;
auto writeSpline(DRW_Spline *ent) -> bool;
auto writeBlockRecord(const std::string &name) -> bool;
auto writeBlock(DRW_Block *bk) -> bool;
auto writeInsert(DRW_Insert *ent) -> bool;
auto writeMText(DRW_MText *ent) -> bool;
auto writeText(DRW_Text *ent) -> bool;
auto writeHatch(DRW_Hatch *ent) -> bool;
auto writeViewport(DRW_Viewport *ent) -> bool;
auto writeImage(DRW_Image *ent, const std::string &name) -> DRW_ImageDef *;
auto writeLeader(DRW_Leader *ent) -> bool;
auto writeDimension(DRW_Dimension *ent) -> bool;
void setEllipseParts(int parts) { elParts = parts; } /*!< set parts number when convert ellipse to polyline */
auto writePlotSettings(DRW_PlotSettings *ent) -> bool;
auto ErrorString() const -> std::string;
auto getVersion() const -> DRW::Version;
auto getError() const -> DRW::error;
private:
Q_DISABLE_COPY_MOVE(dxfRW) // NOLINT
/// used by read() to parse the content of the file
auto processDxf() -> bool;
auto processHeader() -> bool;
auto processTables() -> bool;
auto processBlocks() -> bool;
auto processBlock() -> bool;
auto processEntities(bool isblock) -> bool;
auto processObjects() -> bool;
auto processLType() -> bool;
auto processLayer() -> bool;
auto processDimStyle() -> bool;
auto processTextStyle() -> bool;
auto processVports() -> bool;
auto processAppId() -> bool;
auto processPoint() -> bool;
auto processLine() -> bool;
auto processRay() -> bool;
auto processXline() -> bool;
auto processCircle() -> bool;
auto processArc() -> bool;
auto processEllipse() -> bool;
auto processTrace() -> bool;
auto processSolid() -> bool;
auto processInsert() -> bool;
auto processLWPolyline() -> bool;
auto processPolyline() -> bool;
auto processVertex(DRW_Polyline *pl) -> bool;
auto processText() -> bool;
auto processMText() -> bool;
auto processHatch() -> bool;
auto processSpline() -> bool;
auto process3dface() -> bool;
auto processViewport() -> bool;
auto processImage() -> bool;
auto processImageDef() -> bool;
auto processDimension() -> bool;
auto processLeader() -> bool;
auto processPlotSettings() -> bool;
// bool writeHeader();
auto writeEntity(DRW_Entity *ent) -> bool;
auto writeTables() -> bool;
auto writeBlocks() -> bool;
auto writeObjects() -> bool;
auto writeExtData(const std::vector &ed) -> bool;
static auto toHexStr(int n) -> std::string; // RLZ removeme
auto writeAppData(const std::list> &appData) -> bool;
auto setError(DRW::error lastError) -> bool;
private:
DRW::Version version{};
DRW::error error{DRW::BAD_NONE};
std::string fileName;
std::string codePage{};
bool binFile{false};
bool m_xSpaceBlock{true};
std::unique_ptr reader{};
std::unique_ptr writer{};
DRW_Interface *iface{nullptr};
DRW_Header header{};
// int section;
std::string nextentity{};
int entCount{};
bool wlayer0{};
bool dimstyleStd{};
bool applyExt{false};
bool writingBlock{};
int elParts{128}; /*!< parts number when convert ellipse to polyline */
std::unordered_map blockMap{};
std::unordered_map textStyleMap{};
std::vector imageDef{}; /*!< imageDef list */
int currHandle{};
std::string errorString{};
};
#endif // LIBDXFRW_H