2013-10-24 16:44:38 +00:00
|
|
|
/******************************************************************************
|
|
|
|
** 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 <http://www.gnu.org/licenses/>. **
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
#ifndef DRW_OBJECTS_H
|
|
|
|
#define DRW_OBJECTS_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <map>
|
|
|
|
#include "drw_base.h"
|
|
|
|
|
|
|
|
class dxfReader;
|
|
|
|
class dxfWriter;
|
|
|
|
|
|
|
|
namespace DRW {
|
|
|
|
// ! Table entries type.
|
2015-02-24 09:07:40 +00:00
|
|
|
enum TTYPE
|
|
|
|
{
|
2013-10-24 16:44:38 +00:00
|
|
|
UNKNOWNT,
|
|
|
|
LTYPE,
|
|
|
|
LAYER,
|
|
|
|
STYLE,
|
|
|
|
DIMSTYLE,
|
|
|
|
VPORT,
|
2015-02-24 09:07:40 +00:00
|
|
|
BLOCK_RECORD,
|
|
|
|
APPID
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// ! Base class for tables entries
|
|
|
|
/*!
|
|
|
|
* Base class for tables entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// initializes default values
|
|
|
|
DRW_TableEntry()
|
|
|
|
{
|
|
|
|
tType = DRW::UNKNOWNT;
|
|
|
|
flags = 0;
|
2015-02-24 09:07:40 +00:00
|
|
|
curr = NULL;
|
|
|
|
handle = 0;
|
|
|
|
handleBlock = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual ~DRW_TableEntry()
|
|
|
|
{
|
|
|
|
for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
|
|
|
|
delete *it;
|
|
|
|
|
|
|
|
extData.clear();
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
|
2015-02-24 09:07:40 +00:00
|
|
|
void reset()
|
|
|
|
{
|
|
|
|
flags = 0;
|
|
|
|
|
|
|
|
for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
|
|
|
|
delete *it;
|
|
|
|
|
|
|
|
extData.clear();
|
|
|
|
}
|
|
|
|
|
2013-10-24 16:44:38 +00:00
|
|
|
public:
|
2015-02-24 09:07:40 +00:00
|
|
|
enum DRW::TTYPE tType; /*!< enum: entity type, code 0 */
|
|
|
|
int handle; /*!< entity identifier, code 5 */
|
|
|
|
int handleBlock; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */
|
|
|
|
UTF8STRING name; /*!< entry name, code 2 */
|
|
|
|
int flags; /*!< Flags relevant to entry, code 70 */
|
|
|
|
std::vector<DRW_Variant*> extData; /*!< FIFO list of extended data, codes 1000 to 1071*/
|
|
|
|
|
|
|
|
private:
|
|
|
|
DRW_Variant* curr;
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ! Class to handle dimstyle entries
|
|
|
|
/*!
|
|
|
|
* Class to handle dim style symbol table entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_Dimstyle : public DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_Dimstyle() { reset(); }
|
|
|
|
|
|
|
|
void reset()
|
|
|
|
{
|
2015-02-24 09:07:40 +00:00
|
|
|
tType = DRW::DIMSTYLE;
|
|
|
|
dimasz = dimtxt = dimexe = 0.18;
|
|
|
|
dimexo = 0.0625;
|
|
|
|
dimgap = dimcen = 0.09;
|
2013-10-24 16:44:38 +00:00
|
|
|
dimtxsty = "Standard";
|
|
|
|
dimscale = dimlfac = dimtfac = 1.0;
|
2015-02-24 09:07:40 +00:00
|
|
|
dimdli = 0.38;
|
|
|
|
dimrnd = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0;
|
|
|
|
dimaltf = 25.4;
|
|
|
|
dimtol = dimlim = dimse1 = dimse2 = dimtad = dimzin = 0;
|
|
|
|
dimtoh = dimtolj = 1;
|
|
|
|
dimalt = dimtofl = dimsah = dimtix = dimsoxd = 0;
|
|
|
|
dimaltd = dimunit = dimaltu = dimalttd = dimlunit = 2;
|
|
|
|
dimclrd = dimclre = dimclrt = dimjust = dimupt = 0;
|
|
|
|
dimazin = dimaltz = dimaltttz = dimtzin = dimfrac = 0;
|
|
|
|
dimtih = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0;
|
|
|
|
dimaltrnd = 0.0;
|
|
|
|
dimdec = dimtdec = 4;
|
|
|
|
dimfit = dimatfit = 3;
|
|
|
|
dimdsep = '.';
|
|
|
|
dimlwd = dimlwe = -2;
|
|
|
|
DRW_TableEntry::reset();
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
|
|
|
|
public:
|
|
|
|
// V12
|
|
|
|
UTF8STRING dimpost; /*!< code 3 */
|
|
|
|
UTF8STRING dimapost; /*!< code 4 */
|
|
|
|
/* handle are code 105 */
|
|
|
|
UTF8STRING dimblk; /*!< code 5, code 342 V2000+ */
|
|
|
|
UTF8STRING dimblk1; /*!< code 6, code 343 V2000+ */
|
|
|
|
UTF8STRING dimblk2; /*!< code 7, code 344 V2000+ */
|
2015-02-24 09:07:40 +00:00
|
|
|
double dimscale; /*!< code 40 */
|
|
|
|
double dimasz; /*!< code 41 */
|
|
|
|
double dimexo; /*!< code 42 */
|
|
|
|
double dimdli; /*!< code 43 */
|
|
|
|
double dimexe; /*!< code 44 */
|
|
|
|
double dimrnd; /*!< code 45 */
|
|
|
|
double dimdle; /*!< code 46 */
|
|
|
|
double dimtp; /*!< code 47 */
|
|
|
|
double dimtm; /*!< code 48 */
|
|
|
|
double dimtxt; /*!< code 140 */
|
|
|
|
double dimcen; /*!< code 141 */
|
|
|
|
double dimtsz; /*!< code 142 */
|
|
|
|
double dimaltf; /*!< code 143 */
|
|
|
|
double dimlfac; /*!< code 144 */
|
|
|
|
double dimtvp; /*!< code 145 */
|
|
|
|
double dimtfac; /*!< code 146 */
|
|
|
|
double dimgap; /*!< code 147 */
|
|
|
|
double dimaltrnd; /*!< code 148 V2000+ */
|
|
|
|
int dimtol; /*!< code 71 */
|
|
|
|
int dimlim; /*!< code 72 */
|
|
|
|
int dimtih; /*!< code 73 */
|
|
|
|
int dimtoh; /*!< code 74 */
|
|
|
|
int dimse1; /*!< code 75 */
|
|
|
|
int dimse2; /*!< code 76 */
|
|
|
|
int dimtad; /*!< code 77 */
|
|
|
|
int dimzin; /*!< code 78 */
|
|
|
|
int dimazin; /*!< code 79 V2000+ */
|
|
|
|
int dimalt; /*!< code 170 */
|
|
|
|
int dimaltd; /*!< code 171 */
|
|
|
|
int dimtofl; /*!< code 172 */
|
|
|
|
int dimsah; /*!< code 173 */
|
|
|
|
int dimtix; /*!< code 174 */
|
|
|
|
int dimsoxd; /*!< code 175 */
|
|
|
|
int dimclrd; /*!< code 176 */
|
|
|
|
int dimclre; /*!< code 177 */
|
|
|
|
int dimclrt; /*!< code 178 */
|
|
|
|
int dimadec; /*!< code 179 V2000+ */
|
|
|
|
int dimunit; /*!< code 270 R13+ (obsolete 2000+, use dimlunit & dimfrac) */
|
|
|
|
int dimdec; /*!< code 271 R13+ */
|
|
|
|
int dimtdec; /*!< code 272 R13+ */
|
|
|
|
int dimaltu; /*!< code 273 R13+ */
|
|
|
|
int dimalttd; /*!< code 274 R13+ */
|
|
|
|
int dimaunit; /*!< code 275 R13+ */
|
|
|
|
int dimfrac; /*!< code 276 V2000+ */
|
|
|
|
int dimlunit; /*!< code 277 V2000+ */
|
|
|
|
int dimdsep; /*!< code 278 V2000+ */
|
|
|
|
int dimtmove; /*!< code 279 V2000+ */
|
|
|
|
int dimjust; /*!< code 280 R13+ */
|
|
|
|
int dimsd1; /*!< code 281 R13+ */
|
|
|
|
int dimsd2; /*!< code 282 R13+ */
|
|
|
|
int dimtolj; /*!< code 283 R13+ */
|
|
|
|
int dimtzin; /*!< code 284 R13+ */
|
|
|
|
int dimaltz; /*!< code 285 R13+ */
|
|
|
|
int dimaltttz; /*!< code 286 R13+ */
|
|
|
|
int dimfit; /*!< code 287 R13+ (obsolete 2000+, use dimatfit & dimtmove)*/
|
|
|
|
int dimupt; /*!< code 288 R13+ */
|
|
|
|
int dimatfit; /*!< code 289 V2000+ */
|
2013-10-24 16:44:38 +00:00
|
|
|
UTF8STRING dimtxsty; /*!< code 340 R13+ */
|
|
|
|
UTF8STRING dimldrblk; /*!< code 341 V2000+ */
|
2015-02-24 09:07:40 +00:00
|
|
|
int dimlwd; /*!< code 371 V2000+ */
|
|
|
|
int dimlwe; /*!< code 372 V2000+ */
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ! Class to handle line type entries
|
|
|
|
/*!
|
|
|
|
* Class to handle line type symbol table entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
/*TODO: handle complex lineType*/
|
|
|
|
class DRW_LType : public DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_LType() { reset(); }
|
|
|
|
|
|
|
|
void reset()
|
|
|
|
{
|
|
|
|
tType = DRW::LTYPE;
|
|
|
|
desc = "";
|
|
|
|
size = 0;
|
|
|
|
length = 0.0;
|
|
|
|
pathIdx = 0;
|
2015-02-24 09:07:40 +00:00
|
|
|
DRW_TableEntry::reset();
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
void update();
|
|
|
|
|
|
|
|
public:
|
2015-02-24 09:07:40 +00:00
|
|
|
UTF8STRING desc; /*!< descriptive string, code 3 */
|
2013-10-24 16:44:38 +00:00
|
|
|
// int align; /*!< align code, always 65 ('A') code 72 */
|
2015-02-24 09:07:40 +00:00
|
|
|
int size; /*!< element number, code 73 */
|
|
|
|
double length; /*!< total length of pattern, code 40 */
|
2013-10-24 16:44:38 +00:00
|
|
|
// int haveShape; /*!< complex linetype type, code 74 */
|
|
|
|
std::vector<double> path; /*!< trace, point or space length sequence, code 49 */
|
2015-02-24 09:07:40 +00:00
|
|
|
|
2013-10-24 16:44:38 +00:00
|
|
|
private:
|
2015-02-24 09:07:40 +00:00
|
|
|
int pathIdx;
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ! Class to handle layer entries
|
|
|
|
/*!
|
|
|
|
* Class to handle layer symbol table entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_Layer : public DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_Layer() { reset(); }
|
|
|
|
|
|
|
|
void reset()
|
|
|
|
{
|
2015-02-24 09:07:40 +00:00
|
|
|
tType = DRW::LAYER;
|
|
|
|
lineType = "CONTINUOUS";
|
|
|
|
color = 7; // default BYLAYER (256)
|
|
|
|
plotF = true; // default TRUE (plot yes)
|
|
|
|
lWeight = DRW_LW_Conv::widthDefault; // default BYDEFAULT (dxf -3, dwg 31)
|
|
|
|
color24 = -1; // default -1 not set
|
|
|
|
DRW_TableEntry::reset();
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
|
|
|
|
public:
|
2015-02-24 09:07:40 +00:00
|
|
|
UTF8STRING lineType; /*!< line type, code 6 */
|
|
|
|
int color; /*!< layer color, code 62 */
|
|
|
|
int color24; /*!< 24-bit color, code 420 */
|
|
|
|
bool plotF; /*!< Plot flag, code 290 */
|
2013-10-24 16:44:38 +00:00
|
|
|
enum DRW_LW_Conv::lineWidth lWeight; /*!< layer lineweight, code 370 */
|
2013-10-28 08:06:38 +00:00
|
|
|
std::string handlePlotS; /*!< Hard-pointer ID/handle of plotstyle, code 390 */
|
|
|
|
std::string handlePlotM; /*!< Hard-pointer ID/handle of materialstyle, code 347 */
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// ! Class to handle text style entries
|
|
|
|
/*!
|
|
|
|
* Class to handle text style symbol table entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_Textstyle : public DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_Textstyle() { reset(); }
|
|
|
|
|
|
|
|
void reset()
|
|
|
|
{
|
2015-02-24 09:07:40 +00:00
|
|
|
tType = DRW::STYLE;
|
|
|
|
height = oblique = 0.0;
|
|
|
|
width = lastHeight = 1.0;
|
|
|
|
font = "txt";
|
|
|
|
genFlag = 0; // 2= X mirror, 4= Y mirror
|
|
|
|
fontFamily = 0;
|
|
|
|
DRW_TableEntry::reset();
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
|
|
|
|
public:
|
2015-02-24 09:07:40 +00:00
|
|
|
double height; /*!< Fixed text height (0 not set), code 40 */
|
|
|
|
double width; /*!< Width factor, code 41 */
|
|
|
|
double oblique; /*!< Oblique angle, code 50 */
|
|
|
|
int genFlag; /*!< Text generation flags, code 71 */
|
|
|
|
double lastHeight; /*!< Last height used, code 42 */
|
2013-10-24 16:44:38 +00:00
|
|
|
UTF8STRING font; /*!< primary font file name, code 3 */
|
|
|
|
UTF8STRING bigFont; /*!< bigfont file name or blank if none, code 4 */
|
2015-02-24 09:07:40 +00:00
|
|
|
int fontFamily; /*!< ttf font family, italic and bold flags, code 1071 */
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// ! Class to handle vport entries
|
|
|
|
/*!
|
|
|
|
* Class to handle vport symbol table entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_Vport : public DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_Vport() { reset(); }
|
|
|
|
|
|
|
|
void reset()
|
|
|
|
{
|
|
|
|
UpperRight.x = UpperRight.y = 1.0;
|
|
|
|
snapSpacing.x = snapSpacing.y = 10.0;
|
2015-02-24 09:07:40 +00:00
|
|
|
gridSpacing = snapSpacing;
|
|
|
|
center.x = 0.651828;
|
|
|
|
center.y = -0.16;
|
|
|
|
viewDir.z = 1;
|
|
|
|
height = 5.13732;
|
|
|
|
ratio = 2.4426877;
|
|
|
|
lensHeight = 50;
|
|
|
|
frontClip = backClip = snapAngle = twistAngle = 0.0;
|
|
|
|
viewMode = snap = grid = snapStyle = snapIsopair = 0;
|
|
|
|
fastZoom = 1;
|
|
|
|
circleZoom = 100;
|
|
|
|
ucsIcon = 3;
|
|
|
|
gridBehavior = 7;
|
|
|
|
DRW_TableEntry::reset();
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
|
|
|
|
public:
|
|
|
|
DRW_Coord lowerLeft; /*!< Lower left corner, code 10 & 20 */
|
|
|
|
DRW_Coord UpperRight; /*!< Upper right corner, code 11 & 21 */
|
|
|
|
DRW_Coord center; /*!< center point in WCS, code 12 & 22 */
|
|
|
|
DRW_Coord snapBase; /*!< snap base point in DCS, code 13 & 23 */
|
|
|
|
DRW_Coord snapSpacing; /*!< snap Spacing, code 14 & 24 */
|
|
|
|
DRW_Coord gridSpacing; /*!< grid Spacing, code 15 & 25 */
|
|
|
|
DRW_Coord viewDir; /*!< view direction from target point, code 16, 26 & 36 */
|
|
|
|
DRW_Coord viewTarget; /*!< view target point, code 17, 27 & 37 */
|
2015-02-24 09:07:40 +00:00
|
|
|
double height; /*!< view height, code 40 */
|
|
|
|
double ratio; /*!< viewport aspect ratio, code 41 */
|
|
|
|
double lensHeight; /*!< lens height, code 42 */
|
|
|
|
double frontClip; /*!< front clipping plane, code 43 */
|
|
|
|
double backClip; /*!< back clipping plane, code 44 */
|
|
|
|
double snapAngle; /*!< snap rotation angle, code 50 */
|
|
|
|
double twistAngle; /*!< view twist angle, code 51 */
|
|
|
|
int viewMode; /*!< view mode, code 71 */
|
|
|
|
int circleZoom; /*!< circle zoom percent, code 72 */
|
|
|
|
int fastZoom; /*!< fast zoom setting, code 73 */
|
|
|
|
int ucsIcon; /*!< UCSICON setting, code 74 */
|
|
|
|
int snap; /*!< snap on/off, code 75 */
|
|
|
|
int grid; /*!< grid on/off, code 76 */
|
|
|
|
int snapStyle; /*!< snap style, code 77 */
|
|
|
|
int snapIsopair; /*!< snap isopair, code 78 */
|
|
|
|
int gridBehavior; /*!< grid behavior, code 60, undocummented */
|
2013-10-24 16:44:38 +00:00
|
|
|
/** code 60, bit coded possible value are
|
|
|
|
* bit 1 (1) show out of limits
|
|
|
|
* bit 2 (2) adaptive grid
|
|
|
|
* bit 3 (4) allow subdivision
|
|
|
|
* bit 4 (8) follow dinamic SCP
|
|
|
|
**/
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ! Class to handle imagedef entries
|
|
|
|
/*!
|
|
|
|
* Class to handle image definitions object entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_ImageDef
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_ImageDef()
|
|
|
|
{
|
|
|
|
version = 0;
|
2015-02-24 09:07:40 +00:00
|
|
|
u = v = up = vp = 0.0;
|
|
|
|
loaded = 0;
|
|
|
|
resolution = 0;
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
|
|
|
|
public:
|
2013-10-28 08:06:38 +00:00
|
|
|
std::string handle; /*!< entity identifier, code 5 */
|
2013-10-24 16:44:38 +00:00
|
|
|
UTF8STRING name; /*!< File name of image, code 1 */
|
2015-02-24 09:07:40 +00:00
|
|
|
int version; /*!< class version, code 90, 0=R14 version */
|
|
|
|
double u; /*!< image size in pixels U value, code 10 */
|
|
|
|
double v; /*!< image size in pixels V value, code 20 */
|
|
|
|
double up; /*!< default size of one pixel U value, code 11 */
|
|
|
|
double vp; /*!< default size of one pixel V value, code 12 really is 21*/
|
|
|
|
int loaded; /*!< image is loaded flag, code 280, 0=unloaded, 1=loaded */
|
|
|
|
int resolution; /*!< resolution units, code 281, 0=no, 2=centimeters, 5=inch */
|
2013-10-24 16:44:38 +00:00
|
|
|
|
2013-10-28 08:06:38 +00:00
|
|
|
std::map<std::string, std::string> reactors;
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ! Class to handle header entries
|
|
|
|
/*!
|
2015-02-24 09:07:40 +00:00
|
|
|
* Class to handle header vars, to read iterate over "std::map vars"
|
|
|
|
* to write add a DRW_Variant* into "std::map vars" (do not delete it, are cleared in dtor)
|
|
|
|
* or use add* helper functions.
|
2013-10-24 16:44:38 +00:00
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_Header
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_Header()
|
|
|
|
{
|
2015-02-24 09:07:40 +00:00
|
|
|
version = 0;
|
|
|
|
curr = 0;
|
2013-10-24 16:44:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
~DRW_Header()
|
|
|
|
{
|
2015-02-24 09:07:40 +00:00
|
|
|
for( std::map<std::string, DRW_Variant*>::iterator it = vars.begin(); it!=vars.end(); ++it )
|
|
|
|
delete it->second;
|
|
|
|
|
2013-10-24 16:44:38 +00:00
|
|
|
vars.clear();
|
|
|
|
}
|
|
|
|
|
2015-02-24 09:07:40 +00:00
|
|
|
void addDouble( std::string key, double value, int code );
|
|
|
|
void addInt( std::string key, int value, int code );
|
|
|
|
void addStr( std::string key, std::string value, int code );
|
|
|
|
void addCoord( std::string key, DRW_Coord value, int code );
|
|
|
|
|
|
|
|
std::string getComments() const { return comments; }
|
|
|
|
|
2013-10-24 16:44:38 +00:00
|
|
|
void parseCode( int code, dxfReader* reader );
|
|
|
|
void write( dxfWriter* writer, DRW::Version ver );
|
2013-10-28 08:06:38 +00:00
|
|
|
void addComment( std::string c );
|
2013-10-24 16:44:38 +00:00
|
|
|
|
|
|
|
private:
|
2013-10-28 08:06:38 +00:00
|
|
|
bool getDouble( std::string key, double* varDouble );
|
|
|
|
bool getInt( std::string key, int* varInt );
|
|
|
|
bool getStr( std::string key, std::string* varStr );
|
|
|
|
bool getCoord( std::string key, DRW_Coord* varStr );
|
2013-10-24 16:44:38 +00:00
|
|
|
|
|
|
|
public:
|
2013-10-28 08:06:38 +00:00
|
|
|
std::map<std::string, DRW_Variant*> vars;
|
2015-02-24 09:07:40 +00:00
|
|
|
|
2013-10-24 16:44:38 +00:00
|
|
|
private:
|
2015-02-24 09:07:40 +00:00
|
|
|
std::string comments;
|
|
|
|
std::string name;
|
|
|
|
DRW_Variant* curr;
|
|
|
|
int version; // to use on read
|
|
|
|
};
|
|
|
|
|
|
|
|
// ! Class to handle AppId entries
|
|
|
|
/*!
|
|
|
|
* Class to handle AppId symbol table entries
|
|
|
|
* @author Rallaz
|
|
|
|
*/
|
|
|
|
class DRW_AppId : public DRW_TableEntry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DRW_AppId() { reset(); }
|
|
|
|
|
|
|
|
void reset()
|
|
|
|
{
|
|
|
|
tType = DRW::APPID;
|
|
|
|
flags = 0;
|
|
|
|
name = "";
|
|
|
|
}
|
|
|
|
|
|
|
|
void parseCode( int code, dxfReader* reader ) { DRW_TableEntry::parseCode( code, reader ); }
|
2013-10-24 16:44:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
namespace DRW {
|
|
|
|
// Extended color palette:
|
|
|
|
// The first entry is only for direct indexing starting with [1]
|
|
|
|
// Color 1 is red (1,0,0)
|
|
|
|
const unsigned char dxfColors[][3] =
|
|
|
|
{
|
|
|
|
{ 0, 0, 0 }, // unused
|
|
|
|
{ 255, 0, 0 }, // 1 red
|
|
|
|
{ 255, 255, 0 }, // 2 yellow
|
|
|
|
{ 0, 255, 0 }, // 3 green
|
|
|
|
{ 0, 255, 255 }, // 4 cyan
|
|
|
|
{ 0, 0, 255 }, // 5 blue
|
|
|
|
{ 255, 0, 255 }, // 6 magenta
|
|
|
|
{ 0, 0, 0 }, // 7 black or white
|
|
|
|
{ 128, 128, 128 }, // 8 50% gray
|
|
|
|
{ 192, 192, 192 }, // 9 75% gray
|
|
|
|
{ 255, 0, 0 }, // 10
|
|
|
|
{ 255, 127, 127 },
|
|
|
|
{ 204, 0, 0 },
|
|
|
|
{ 204, 102, 102 },
|
|
|
|
{ 153, 0, 0 },
|
|
|
|
{ 153, 76, 76 }, // 15
|
|
|
|
{ 127, 0, 0 },
|
|
|
|
{ 127, 63, 63 },
|
|
|
|
{ 76, 0, 0 },
|
|
|
|
{ 76, 38, 38 },
|
|
|
|
{ 255, 63, 0 }, // 20
|
|
|
|
{ 255, 159, 127 },
|
|
|
|
{ 204, 51, 0 },
|
|
|
|
{ 204, 127, 102 },
|
|
|
|
{ 153, 38, 0 },
|
|
|
|
{ 153, 95, 76 }, // 25
|
|
|
|
{ 127, 31, 0 },
|
|
|
|
{ 127, 79, 63 },
|
|
|
|
{ 76, 19, 0 },
|
|
|
|
{ 76, 47, 38 },
|
|
|
|
{ 255, 127, 0 }, // 30
|
|
|
|
{ 255, 191, 127 },
|
|
|
|
{ 204, 102, 0 },
|
|
|
|
{ 204, 153, 102 },
|
|
|
|
{ 153, 76, 0 },
|
|
|
|
{ 153, 114, 76 }, // 35
|
|
|
|
{ 127, 63, 0 },
|
|
|
|
{ 127, 95, 63 },
|
|
|
|
{ 76, 38, 0 },
|
|
|
|
{ 76, 57, 38 },
|
|
|
|
{ 255, 191, 0 }, // 40
|
|
|
|
{ 255, 223, 127 },
|
|
|
|
{ 204, 153, 0 },
|
|
|
|
{ 204, 178, 102 },
|
|
|
|
{ 153, 114, 0 },
|
|
|
|
{ 153, 133, 76 }, // 45
|
|
|
|
{ 127, 95, 0 },
|
|
|
|
{ 127, 111, 63 },
|
|
|
|
{ 76, 57, 0 },
|
|
|
|
{ 76, 66, 38 },
|
|
|
|
{ 255, 255, 0 }, // 50
|
|
|
|
{ 255, 255, 127 },
|
|
|
|
{ 204, 204, 0 },
|
|
|
|
{ 204, 204, 102 },
|
|
|
|
{ 153, 153, 0 },
|
|
|
|
{ 153, 153, 76 }, // 55
|
|
|
|
{ 127, 127, 0 },
|
|
|
|
{ 127, 127, 63 },
|
|
|
|
{ 76, 76, 0 },
|
|
|
|
{ 76, 76, 38 },
|
|
|
|
{ 191, 255, 0 }, // 60
|
|
|
|
{ 223, 255, 127 },
|
|
|
|
{ 153, 204, 0 },
|
|
|
|
{ 178, 204, 102 },
|
|
|
|
{ 114, 153, 0 },
|
|
|
|
{ 133, 153, 76 }, // 65
|
|
|
|
{ 95, 127, 0 },
|
|
|
|
{ 111, 127, 63 },
|
|
|
|
{ 57, 76, 0 },
|
|
|
|
{ 66, 76, 38 },
|
|
|
|
{ 127, 255, 0 }, // 70
|
|
|
|
{ 191, 255, 127 },
|
|
|
|
{ 102, 204, 0 },
|
|
|
|
{ 153, 204, 102 },
|
|
|
|
{ 76, 153, 0 },
|
|
|
|
{ 114, 153, 76 }, // 75
|
|
|
|
{ 63, 127, 0 },
|
|
|
|
{ 95, 127, 63 },
|
|
|
|
{ 38, 76, 0 },
|
|
|
|
{ 57, 76, 38 },
|
|
|
|
{ 63, 255, 0 }, // 80
|
|
|
|
{ 159, 255, 127 },
|
|
|
|
{ 51, 204, 0 },
|
|
|
|
{ 127, 204, 102 },
|
|
|
|
{ 38, 153, 0 },
|
|
|
|
{ 95, 153, 76 }, // 85
|
|
|
|
{ 31, 127, 0 },
|
|
|
|
{ 79, 127, 63 },
|
|
|
|
{ 19, 76, 0 },
|
|
|
|
{ 47, 76, 38 },
|
|
|
|
{ 0, 255, 0 }, // 90
|
|
|
|
{ 127, 255, 127 },
|
|
|
|
{ 0, 204, 0 },
|
|
|
|
{ 102, 204, 102 },
|
|
|
|
{ 0, 153, 0 },
|
|
|
|
{ 76, 153, 76 }, // 95
|
|
|
|
{ 0, 127, 0 },
|
|
|
|
{ 63, 127, 63 },
|
|
|
|
{ 0, 76, 0 },
|
|
|
|
{ 38, 76, 38 },
|
|
|
|
{ 0, 255, 63 }, // 100
|
|
|
|
{ 127, 255, 159 },
|
|
|
|
{ 0, 204, 51 },
|
|
|
|
{ 102, 204, 127 },
|
|
|
|
{ 0, 153, 38 },
|
|
|
|
{ 76, 153, 95 }, // 105
|
|
|
|
{ 0, 127, 31 },
|
|
|
|
{ 63, 127, 79 },
|
|
|
|
{ 0, 76, 19 },
|
|
|
|
{ 38, 76, 47 },
|
|
|
|
{ 0, 255, 127 }, // 110
|
|
|
|
{ 127, 255, 191 },
|
|
|
|
{ 0, 204, 102 },
|
|
|
|
{ 102, 204, 153 },
|
|
|
|
{ 0, 153, 76 },
|
|
|
|
{ 76, 153, 114 }, // 115
|
|
|
|
{ 0, 127, 63 },
|
|
|
|
{ 63, 127, 95 },
|
|
|
|
{ 0, 76, 38 },
|
|
|
|
{ 38, 76, 57 },
|
|
|
|
{ 0, 255, 191 }, // 120
|
|
|
|
{ 127, 255, 223 },
|
|
|
|
{ 0, 204, 153 },
|
|
|
|
{ 102, 204, 178 },
|
|
|
|
{ 0, 153, 114 },
|
|
|
|
{ 76, 153, 133 }, // 125
|
|
|
|
{ 0, 127, 95 },
|
|
|
|
{ 63, 127, 111 },
|
|
|
|
{ 0, 76, 57 },
|
|
|
|
{ 38, 76, 66 },
|
|
|
|
{ 0, 255, 255 }, // 130
|
|
|
|
{ 127, 255, 255 },
|
|
|
|
{ 0, 204, 204 },
|
|
|
|
{ 102, 204, 204 },
|
|
|
|
{ 0, 153, 153 },
|
|
|
|
{ 76, 153, 153 }, // 135
|
|
|
|
{ 0, 127, 127 },
|
|
|
|
{ 63, 127, 127 },
|
|
|
|
{ 0, 76, 76 },
|
|
|
|
{ 38, 76, 76 },
|
|
|
|
{ 0, 191, 255 }, // 140
|
|
|
|
{ 127, 223, 255 },
|
|
|
|
{ 0, 153, 204 },
|
|
|
|
{ 102, 178, 204 },
|
|
|
|
{ 0, 114, 153 },
|
|
|
|
{ 76, 133, 153 }, // 145
|
|
|
|
{ 0, 95, 127 },
|
|
|
|
{ 63, 111, 127 },
|
|
|
|
{ 0, 57, 76 },
|
|
|
|
{ 38, 66, 76 },
|
|
|
|
{ 0, 127, 255 }, // 150
|
|
|
|
{ 127, 191, 255 },
|
|
|
|
{ 0, 102, 204 },
|
|
|
|
{ 102, 153, 204 },
|
|
|
|
{ 0, 76, 153 },
|
|
|
|
{ 76, 114, 153 }, // 155
|
|
|
|
{ 0, 63, 127 },
|
|
|
|
{ 63, 95, 127 },
|
|
|
|
{ 0, 38, 76 },
|
|
|
|
{ 38, 57, 76 },
|
|
|
|
{ 0, 66, 255 }, // 160
|
|
|
|
{ 127, 159, 255 },
|
|
|
|
{ 0, 51, 204 },
|
|
|
|
{ 102, 127, 204 },
|
|
|
|
{ 0, 38, 153 },
|
|
|
|
{ 76, 95, 153 }, // 165
|
|
|
|
{ 0, 31, 127 },
|
|
|
|
{ 63, 79, 127 },
|
|
|
|
{ 0, 19, 76 },
|
|
|
|
{ 38, 47, 76 },
|
|
|
|
{ 0, 0, 255 }, // 170
|
|
|
|
{ 127, 127, 255 },
|
|
|
|
{ 0, 0, 204 },
|
|
|
|
{ 102, 102, 204 },
|
|
|
|
{ 0, 0, 153 },
|
|
|
|
{ 76, 76, 153 }, // 175
|
|
|
|
{ 0, 0, 127 },
|
|
|
|
{ 63, 63, 127 },
|
|
|
|
{ 0, 0, 76 },
|
|
|
|
{ 38, 38, 76 },
|
|
|
|
{ 63, 0, 255 }, // 180
|
|
|
|
{ 159, 127, 255 },
|
|
|
|
{ 50, 0, 204 },
|
|
|
|
{ 127, 102, 204 },
|
|
|
|
{ 38, 0, 153 },
|
|
|
|
{ 95, 76, 153 }, // 185
|
|
|
|
{ 31, 0, 127 },
|
|
|
|
{ 79, 63, 127 },
|
|
|
|
{ 19, 0, 76 },
|
|
|
|
{ 47, 38, 76 },
|
|
|
|
{ 127, 0, 255 }, // 190
|
|
|
|
{ 191, 127, 255 },
|
|
|
|
{ 102, 0, 204 },
|
|
|
|
{ 153, 102, 204 },
|
|
|
|
{ 76, 0, 153 },
|
|
|
|
{ 114, 76, 153 }, // 195
|
|
|
|
{ 63, 0, 127 },
|
|
|
|
{ 95, 63, 127 },
|
|
|
|
{ 38, 0, 76 },
|
|
|
|
{ 57, 38, 76 },
|
|
|
|
{ 191, 0, 255 }, // 200
|
|
|
|
{ 223, 127, 255 },
|
|
|
|
{ 153, 0, 204 },
|
|
|
|
{ 178, 102, 204 },
|
|
|
|
{ 114, 0, 153 },
|
|
|
|
{ 133, 76, 153 }, // 205
|
|
|
|
{ 95, 0, 127 },
|
|
|
|
{ 111, 63, 127 },
|
|
|
|
{ 57, 0, 76 },
|
|
|
|
{ 66, 38, 76 },
|
|
|
|
{ 255, 0, 255 }, // 210
|
|
|
|
{ 255, 127, 255 },
|
|
|
|
{ 204, 0, 204 },
|
|
|
|
{ 204, 102, 204 },
|
|
|
|
{ 153, 0, 153 },
|
|
|
|
{ 153, 76, 153 }, // 215
|
|
|
|
{ 127, 0, 127 },
|
|
|
|
{ 127, 63, 127 },
|
|
|
|
{ 76, 0, 76 },
|
|
|
|
{ 76, 38, 76 },
|
|
|
|
{ 255, 0, 191 }, // 220
|
|
|
|
{ 255, 127, 223 },
|
|
|
|
{ 204, 0, 153 },
|
|
|
|
{ 204, 102, 178 },
|
|
|
|
{ 153, 0, 114 },
|
|
|
|
{ 153, 76, 133 }, // 225
|
|
|
|
{ 127, 0, 95 },
|
|
|
|
{ 127, 63, 11 },
|
|
|
|
{ 76, 0, 57 },
|
|
|
|
{ 76, 38, 66 },
|
|
|
|
{ 255, 0, 127 }, // 230
|
|
|
|
{ 255, 127, 191 },
|
|
|
|
{ 204, 0, 102 },
|
|
|
|
{ 204, 102, 153 },
|
|
|
|
{ 153, 0, 76 },
|
|
|
|
{ 153, 76, 114 }, // 235
|
|
|
|
{ 127, 0, 63 },
|
|
|
|
{ 127, 63, 95 },
|
|
|
|
{ 76, 0, 38 },
|
|
|
|
{ 76, 38, 57 },
|
|
|
|
{ 255, 0, 63 }, // 240
|
|
|
|
{ 255, 127, 159 },
|
|
|
|
{ 204, 0, 51 },
|
|
|
|
{ 204, 102, 127 },
|
|
|
|
{ 153, 0, 38 },
|
|
|
|
{ 153, 76, 95 }, // 245
|
|
|
|
{ 127, 0, 31 },
|
|
|
|
{ 127, 63, 79 },
|
|
|
|
{ 76, 0, 19 },
|
|
|
|
{ 76, 38, 47 },
|
|
|
|
{ 51, 51, 51 }, // 250
|
|
|
|
{ 91, 91, 91 },
|
|
|
|
{ 132, 132, 132 },
|
|
|
|
{ 173, 173, 173 },
|
|
|
|
{ 214, 214, 214 },
|
|
|
|
{ 255, 255, 255 } // 255
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// EOF
|