Merged changed from SolveSpace's independent fork of libdxfrw.
--HG-- branch : feature
This commit is contained in:
parent
3f570fc52e
commit
388bad3535
|
@ -165,10 +165,12 @@ enum TransparencyCodes {
|
||||||
*/
|
*/
|
||||||
class DRW_Coord {
|
class DRW_Coord {
|
||||||
public:
|
public:
|
||||||
DRW_Coord():x(0), y(0),z(0) {}
|
DRW_Coord() { x = 0; y = 0; z = 0; }
|
||||||
DRW_Coord(double ix, double iy, double iz): x(ix), y(iy),z(iz){}
|
DRW_Coord(double ix, double iy, double iz) {
|
||||||
|
x = ix; y = iy; z = iz;
|
||||||
|
}
|
||||||
|
|
||||||
DRW_Coord& operator = (const DRW_Coord& data) {
|
DRW_Coord operator = (const DRW_Coord& data) {
|
||||||
x = data.x; y = data.y; z = data.z;
|
x = data.x; y = data.y; z = data.z;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -197,9 +199,16 @@ public:
|
||||||
*/
|
*/
|
||||||
class DRW_Vertex2D {
|
class DRW_Vertex2D {
|
||||||
public:
|
public:
|
||||||
DRW_Vertex2D(): x(0), y(0), stawidth(0), endwidth(0), bulge(0){}
|
DRW_Vertex2D() {
|
||||||
|
// eType = DRW::LWPOLYLINE;
|
||||||
DRW_Vertex2D(double sx, double sy, double b): x(sx), y(sy), stawidth(0), endwidth(0), bulge(b) {}
|
stawidth = endwidth = bulge = 0;
|
||||||
|
}
|
||||||
|
DRW_Vertex2D(double sx, double sy, double b) {
|
||||||
|
stawidth = endwidth = 0;
|
||||||
|
x = sx;
|
||||||
|
y =sy;
|
||||||
|
bulge = b;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
double x; /*!< x coordinate, code 10 */
|
double x; /*!< x coordinate, code 10 */
|
||||||
|
@ -225,61 +234,68 @@ public:
|
||||||
INVALID
|
INVALID
|
||||||
};
|
};
|
||||||
//TODO: add INT64 support
|
//TODO: add INT64 support
|
||||||
DRW_Variant(): sdata(std::string()), vdata(), content(0), vType(INVALID), vCode(0) {}
|
DRW_Variant() {
|
||||||
|
type = INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
DRW_Variant(int c, dint32 i): sdata(std::string()), vdata(), content(i), vType(INTEGER), vCode(c){}
|
DRW_Variant(int c, dint32 i) {
|
||||||
|
code = c; addInt(i);
|
||||||
DRW_Variant(int c, duint32 i): sdata(std::string()), vdata(), content(static_cast<dint32>(i)), vType(INTEGER), vCode(c) {}
|
}
|
||||||
|
DRW_Variant(int c, duint32 i) {
|
||||||
DRW_Variant(int c, double d): sdata(std::string()), vdata(), content(d), vType(DOUBLE), vCode(c) {}
|
code = c; addInt(static_cast<dint32>(i));//RLZ: verify if worrk with big numbers
|
||||||
|
}
|
||||||
DRW_Variant(int c, UTF8STRING s): sdata(s), vdata(), content(&sdata), vType(STRING), vCode(c) {}
|
DRW_Variant(int c, double d) {
|
||||||
|
code = c; addDouble(d);
|
||||||
DRW_Variant(int c, DRW_Coord crd): sdata(std::string()), vdata(crd), content(&vdata), vType(COORD), vCode(c) {}
|
}
|
||||||
|
DRW_Variant(int c, UTF8STRING s) {
|
||||||
DRW_Variant(const DRW_Variant& d): sdata(d.sdata), vdata(d.vdata), content(d.content), vType(d.vType), vCode(d.vCode) {
|
code = c; addString(s);
|
||||||
if (d.vType == COORD)
|
}
|
||||||
|
DRW_Variant(int c, DRW_Coord crd) {
|
||||||
|
code = c; addCoord(crd);
|
||||||
|
}
|
||||||
|
DRW_Variant(const DRW_Variant& d) {
|
||||||
|
code = d.code;
|
||||||
|
type = d.type;
|
||||||
|
content = d.content;
|
||||||
|
if (d.type == COORD) {
|
||||||
|
vdata = d.vdata;
|
||||||
content.v = &vdata;
|
content.v = &vdata;
|
||||||
if (d.vType == STRING)
|
}
|
||||||
|
if (d.type == STRING) {
|
||||||
|
sdata = d.sdata;
|
||||||
content.s = &sdata;
|
content.s = &sdata;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
~DRW_Variant() {
|
~DRW_Variant() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void addString(int c, UTF8STRING s) {vType = STRING; sdata = s; content.s = &sdata; vCode=c;}
|
void addString(UTF8STRING s) {setType(STRING); sdata = s; content.s = &sdata;}
|
||||||
void addInt(int c, int i) {vType = INTEGER; content.i = i; vCode=c;}
|
void addInt(int i) {setType(INTEGER); content.i = i;}
|
||||||
void addDouble(int c, double d) {vType = DOUBLE; content.d = d; vCode=c;}
|
void addDouble(double d) {setType(DOUBLE); content.d = d;}
|
||||||
void addCoord(int c, DRW_Coord v) {vType = COORD; vdata = v; content.v = &vdata; vCode=c;}
|
void addCoord() {setType(COORD); vdata.x=0.0; vdata.y=0.0; vdata.z=0.0; content.v = &vdata;}
|
||||||
void setCoordX(double d) { if (vType == COORD) vdata.x = d;}
|
void addCoord(DRW_Coord v) {setType(COORD); vdata = v; content.v = &vdata;}
|
||||||
void setCoordY(double d) { if (vType == COORD) vdata.y = d;}
|
void setType(enum TYPE t) { type = t;}
|
||||||
void setCoordZ(double d) { if (vType == COORD) vdata.z = d;}
|
void setCoordX(double d) { if (type == COORD) vdata.x = d;}
|
||||||
enum TYPE type() { return vType;}
|
void setCoordY(double d) { if (type == COORD) vdata.y = d;}
|
||||||
int code() { return vCode;} /*!< returns dxf code of this value*/
|
void setCoordZ(double d) { if (type == COORD) vdata.z = d;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string sdata;
|
typedef union {
|
||||||
DRW_Coord vdata;
|
|
||||||
|
|
||||||
private:
|
|
||||||
union DRW_VarContent{
|
|
||||||
UTF8STRING *s;
|
UTF8STRING *s;
|
||||||
dint32 i;
|
dint32 i;
|
||||||
double d;
|
double d;
|
||||||
DRW_Coord *v;
|
DRW_Coord *v;
|
||||||
|
} DRW_VarContent;
|
||||||
DRW_VarContent(UTF8STRING *sd):s(sd){}
|
|
||||||
DRW_VarContent(dint32 id):i(id){}
|
|
||||||
DRW_VarContent(double dd):d(dd){}
|
|
||||||
DRW_VarContent(DRW_Coord *vd):v(vd){}
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DRW_VarContent content;
|
DRW_VarContent content;
|
||||||
private:
|
enum TYPE type;
|
||||||
enum TYPE vType;
|
int code; /*!< dxf code of this value*/
|
||||||
int vCode; /*!< dxf code of this value*/
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string sdata;
|
||||||
|
DRW_Coord vdata;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Class to handle dwg handles
|
//! Class to handle dwg handles
|
||||||
|
@ -289,8 +305,11 @@ private:
|
||||||
*/
|
*/
|
||||||
class dwgHandle{
|
class dwgHandle{
|
||||||
public:
|
public:
|
||||||
dwgHandle(): code(0), size(0), ref(0){}
|
dwgHandle(){
|
||||||
|
code=0;
|
||||||
|
size=0;
|
||||||
|
ref=0;
|
||||||
|
}
|
||||||
~dwgHandle(){}
|
~dwgHandle(){}
|
||||||
duint8 code;
|
duint8 code;
|
||||||
duint8 size;
|
duint8 size;
|
||||||
|
@ -475,4 +494,3 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
||||||
|
|
|
@ -56,4 +56,3 @@ public: //only for read dwg
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,10 @@ bool DRW_Entity::parseCode(int code, dxfReader *reader){
|
||||||
case 1011:
|
case 1011:
|
||||||
case 1012:
|
case 1012:
|
||||||
case 1013:
|
case 1013:
|
||||||
curr = new DRW_Variant(code, DRW_Coord(reader->getDouble(), 0.0, 0.0));
|
curr = new DRW_Variant();
|
||||||
|
curr->addCoord();
|
||||||
|
curr->setCoordX(reader->getDouble());
|
||||||
|
curr->code = code;
|
||||||
extData.push_back(curr);
|
extData.push_back(curr);
|
||||||
break;
|
break;
|
||||||
case 1020:
|
case 1020:
|
||||||
|
@ -156,28 +159,28 @@ bool DRW_Entity::parseDxfGroups(int code, dxfReader *reader){
|
||||||
int nc;
|
int nc;
|
||||||
std::string appName= reader->getString();
|
std::string appName= reader->getString();
|
||||||
if (!appName.empty() && appName.at(0)== '{'){
|
if (!appName.empty() && appName.at(0)== '{'){
|
||||||
curr.addString(code, appName.substr(1, (int) appName.size()-1));
|
curr.addString(appName.substr(1, (int) appName.size()-1));
|
||||||
|
curr.code = code;
|
||||||
ls.push_back(curr);
|
ls.push_back(curr);
|
||||||
while (code !=102 && appName.at(0)== '}'){
|
while (code !=102 && appName.at(0)== '}'){
|
||||||
reader->readRec(&nc);//RLZ curr.code = code or nc?
|
reader->readRec(&nc);
|
||||||
// curr.code = code;
|
curr.code = code;
|
||||||
//RLZ code == 330 || code == 360 OR nc == 330 || nc == 360 ?
|
|
||||||
if (code == 330 || code == 360)
|
if (code == 330 || code == 360)
|
||||||
curr.addInt(code, reader->getHandleString());//RLZ code or nc
|
curr.addInt(reader->getHandleString());
|
||||||
else {
|
else {
|
||||||
switch (reader->type) {
|
switch (reader->type) {
|
||||||
case dxfReader::STRING:
|
case dxfReader::STRING:
|
||||||
curr.addString(code, reader->getString());//RLZ code or nc
|
curr.addString(reader->getString());
|
||||||
break;
|
break;
|
||||||
case dxfReader::INT32:
|
case dxfReader::INT32:
|
||||||
case dxfReader::INT64:
|
case dxfReader::INT64:
|
||||||
curr.addInt(code, reader->getInt32());//RLZ code or nc
|
curr.addInt(reader->getInt32());
|
||||||
break;
|
break;
|
||||||
case dxfReader::DOUBLE:
|
case dxfReader::DOUBLE:
|
||||||
curr.addDouble(code, reader->getDouble());//RLZ code or nc
|
curr.addDouble(reader->getDouble());
|
||||||
break;
|
break;
|
||||||
case dxfReader::BOOL:
|
case dxfReader::BOOL:
|
||||||
curr.addInt(code, reader->getInt32());//RLZ code or nc
|
curr.addInt(reader->getInt32());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -1427,6 +1430,59 @@ void DRW_MText::parseCode(int code, dxfReader *reader){
|
||||||
case 44:
|
case 44:
|
||||||
interlin = reader->getDouble();
|
interlin = reader->getDouble();
|
||||||
break;
|
break;
|
||||||
|
case 71: {
|
||||||
|
// Attachment point
|
||||||
|
Attach a = (Attach)reader->getInt32();
|
||||||
|
|
||||||
|
switch(a) {
|
||||||
|
case TopLeft:
|
||||||
|
alignV = VTop;
|
||||||
|
alignH = HLeft;
|
||||||
|
break;
|
||||||
|
case TopCenter:
|
||||||
|
alignV = VTop;
|
||||||
|
alignH = HCenter;
|
||||||
|
break;
|
||||||
|
case TopRight:
|
||||||
|
alignV = VTop;
|
||||||
|
alignH = HRight;
|
||||||
|
break;
|
||||||
|
case MiddleLeft:
|
||||||
|
alignV = VMiddle;
|
||||||
|
alignH = HLeft;
|
||||||
|
break;
|
||||||
|
case MiddleCenter:
|
||||||
|
alignV = VMiddle;
|
||||||
|
alignH = HCenter;
|
||||||
|
break;
|
||||||
|
case MiddleRight:
|
||||||
|
alignV = VMiddle;
|
||||||
|
alignH = HRight;
|
||||||
|
break;
|
||||||
|
case BottomLeft:
|
||||||
|
alignV = VBottom;
|
||||||
|
alignH = HLeft;
|
||||||
|
break;
|
||||||
|
case BottomCenter:
|
||||||
|
alignV = VBottom;
|
||||||
|
alignH = HCenter;
|
||||||
|
break;
|
||||||
|
case BottomRight:
|
||||||
|
alignV = VBottom;
|
||||||
|
alignH = HRight;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case 72:
|
||||||
|
// To prevent redirection to DRW_Text::parseCode.
|
||||||
|
// This code meaning is different for MTEXT.
|
||||||
|
// Actually: Drawing direction
|
||||||
|
break;
|
||||||
|
case 73:
|
||||||
|
// To prevent redirection to DRW_Text::parseCode.
|
||||||
|
// This code meaning is different for MTEXT.
|
||||||
|
// Actually: Mtext line spacing style
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DRW_Text::parseCode(code, reader);
|
DRW_Text::parseCode(code, reader);
|
||||||
break;
|
break;
|
||||||
|
@ -1906,7 +1962,6 @@ bool DRW_Hatch::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){
|
||||||
spline->controllist.reserve(spline->ncontrol);
|
spline->controllist.reserve(spline->ncontrol);
|
||||||
for (dint32 j = 0; j < spline->ncontrol;++j){
|
for (dint32 j = 0; j < spline->ncontrol;++j){
|
||||||
DRW_Coord* crd = new DRW_Coord(buf->get3BitDouble());
|
DRW_Coord* crd = new DRW_Coord(buf->get3BitDouble());
|
||||||
spline->controllist.push_back(crd);
|
|
||||||
if(isRational)
|
if(isRational)
|
||||||
crd->z = buf->getBitDouble(); //RLZ: investigate how store weight
|
crd->z = buf->getBitDouble(); //RLZ: investigate how store weight
|
||||||
spline->controllist.push_back(crd);
|
spline->controllist.push_back(crd);
|
||||||
|
@ -2080,8 +2135,9 @@ void DRW_Spline::parseCode(int code, dxfReader *reader){
|
||||||
case 40:
|
case 40:
|
||||||
knotslist.push_back(reader->getDouble());
|
knotslist.push_back(reader->getDouble());
|
||||||
break;
|
break;
|
||||||
// case 41:
|
case 41:
|
||||||
// break;
|
weightlist.push_back(reader->getDouble());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DRW_Entity::parseCode(code, reader);
|
DRW_Entity::parseCode(code, reader);
|
||||||
break;
|
break;
|
||||||
|
@ -2238,14 +2294,14 @@ bool DRW_Image::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){
|
||||||
sizev = buf->getRawDouble();
|
sizev = buf->getRawDouble();
|
||||||
DRW_DBG("\nsize U: "); DRW_DBG(sizeu); DRW_DBG("\nsize V: "); DRW_DBG(sizev);
|
DRW_DBG("\nsize U: "); DRW_DBG(sizeu); DRW_DBG("\nsize V: "); DRW_DBG(sizev);
|
||||||
duint16 displayProps = buf->getBitShort();
|
duint16 displayProps = buf->getBitShort();
|
||||||
DRW_UNUSED(displayProps);//RLZ: temporary, complete API
|
(void)displayProps;
|
||||||
clip = buf->getBit();
|
clip = buf->getBit();
|
||||||
brightness = buf->getRawChar8();
|
brightness = buf->getRawChar8();
|
||||||
contrast = buf->getRawChar8();
|
contrast = buf->getRawChar8();
|
||||||
fade = buf->getRawChar8();
|
fade = buf->getRawChar8();
|
||||||
if (version > DRW::AC1021){ //2010+
|
if (version > DRW::AC1021){ //2010+
|
||||||
bool clipMode = buf->getBit();
|
bool clipMode = buf->getBit();
|
||||||
DRW_UNUSED(clipMode);//RLZ: temporary, complete API
|
(void)clipMode;
|
||||||
}
|
}
|
||||||
duint16 clipType = buf->getBitShort();
|
duint16 clipType = buf->getBitShort();
|
||||||
if (clipType == 1){
|
if (clipType == 1){
|
||||||
|
@ -2358,6 +2414,10 @@ void DRW_Dimension::parseCode(int code, dxfReader *reader){
|
||||||
case 41:
|
case 41:
|
||||||
linefactor = reader->getDouble();
|
linefactor = reader->getDouble();
|
||||||
break;
|
break;
|
||||||
|
case 42:
|
||||||
|
actual = reader->getDouble();
|
||||||
|
hasActual = (actual != 0.0);
|
||||||
|
break;
|
||||||
case 53:
|
case 53:
|
||||||
rot = reader->getDouble();
|
rot = reader->getDouble();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -99,17 +99,28 @@ class DRW_Entity {
|
||||||
SETENTFRIENDS
|
SETENTFRIENDS
|
||||||
public:
|
public:
|
||||||
//initializes default values
|
//initializes default values
|
||||||
//handles: default no handle (0), color: default BYLAYER (256), 24 bits color: default -1 (not set)
|
DRW_Entity() {
|
||||||
//line weight: default BYLAYER (dxf -1, dwg 29), space: default ModelSpace (0)
|
eType = DRW::UNKNOWN;
|
||||||
DRW_Entity(): eType(DRW::UNKNOWN), handle(DRW::NoHandle), parentHandle(DRW::NoHandle), appData(0),
|
handle = parentHandle = DRW::NoHandle; //no handle (0)
|
||||||
space(DRW::ModelSpace), layer("0"), lineType("BYLAYER"), material(DRW::MaterialByLayer),
|
lineType = "BYLAYER";
|
||||||
color(DRW::ColorByLayer), lWeight(DRW_LW_Conv::widthByLayer), ltypeScale(1.0), visible(true),
|
color = DRW::ColorByLayer; // default BYLAYER (256)
|
||||||
numProxyGraph(0), proxyGraphics(std::string()), color24(-1), colorName(std::string()),
|
ltypeScale = 1.0;
|
||||||
transparency(DRW::Opaque), plotStyle(DRW::DefaultPlotStyle), shadow(DRW::CastAndReceieveShadows),
|
visible = true;
|
||||||
haveExtrusion(false), extData(), haveNextLinks(0),plotFlags(0), ltFlags(0),materialFlag(0),
|
layer = "0";
|
||||||
shadowFlag(0), lTypeH(dwgHandle()), layerH(dwgHandle()), nextEntLink(0), prevEntLink(0),
|
lWeight = DRW_LW_Conv::widthByLayer; // default BYLAYER (dxf -1, dwg 29)
|
||||||
ownerHandle(false), xDictFlag(0), numReactors(0), objSize(0), oType(0), extAxisX(DRW_Coord()),
|
space = DRW::ModelSpace; // default ModelSpace (0)
|
||||||
extAxisY(DRW_Coord()), curr(NULL) {}
|
haveExtrusion = false;
|
||||||
|
color24 = -1; //default -1 not set
|
||||||
|
numProxyGraph = 0;
|
||||||
|
shadow = DRW::CastAndReceieveShadows;
|
||||||
|
material = DRW::MaterialByLayer;
|
||||||
|
plotStyle = DRW::DefaultPlotStyle;
|
||||||
|
transparency = DRW::Opaque;
|
||||||
|
nextEntLink = prevEntLink = 0;
|
||||||
|
numReactors = xDictFlag = 0;
|
||||||
|
curr = NULL;
|
||||||
|
ownerHandle= false;
|
||||||
|
}
|
||||||
|
|
||||||
DRW_Entity(const DRW_Entity& e) {
|
DRW_Entity(const DRW_Entity& e) {
|
||||||
eType = e.eType;
|
eType = e.eType;
|
||||||
|
@ -135,6 +146,7 @@ public:
|
||||||
xDictFlag = e.xDictFlag;
|
xDictFlag = e.xDictFlag;
|
||||||
curr = NULL;
|
curr = NULL;
|
||||||
ownerHandle= false;
|
ownerHandle= false;
|
||||||
|
// curr = e.curr;
|
||||||
for (std::vector<DRW_Variant*>::const_iterator it=e.extData.begin(); it!=e.extData.end(); ++it){
|
for (std::vector<DRW_Variant*>::const_iterator it=e.extData.begin(); it!=e.extData.end(); ++it){
|
||||||
extData.push_back(new DRW_Variant(*(*it)));
|
extData.push_back(new DRW_Variant(*(*it)));
|
||||||
}
|
}
|
||||||
|
@ -155,6 +167,15 @@ public:
|
||||||
|
|
||||||
virtual void applyExtrusion() = 0;
|
virtual void applyExtrusion() = 0;
|
||||||
|
|
||||||
|
void setWidthMm(double millimeters) {
|
||||||
|
if(millimeters < 0.0) {
|
||||||
|
lWeight = DRW_LW_Conv::widthByLayer;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(millimeters > 2.11) millimeters = 2.11;
|
||||||
|
lWeight = DRW_LW_Conv::dxfInt2lineWidth(int(floor(millimeters * 100.0)));
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//parses dxf pair to read entity
|
//parses dxf pair to read entity
|
||||||
bool parseCode(int code, dxfReader *reader);
|
bool parseCode(int code, dxfReader *reader);
|
||||||
|
@ -174,8 +195,8 @@ protected:
|
||||||
public:
|
public:
|
||||||
enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */
|
enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */
|
||||||
duint32 handle; /*!< entity identifier, code 5 */
|
duint32 handle; /*!< entity identifier, code 5 */
|
||||||
duint32 parentHandle; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */
|
|
||||||
std::list<std::list<DRW_Variant> > appData; /*!< list of application data, code 102 */
|
std::list<std::list<DRW_Variant> > appData; /*!< list of application data, code 102 */
|
||||||
|
duint32 parentHandle; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */
|
||||||
DRW::Space space; /*!< space indicator, code 67*/
|
DRW::Space space; /*!< space indicator, code 67*/
|
||||||
UTF8STRING layer; /*!< layer name, code 8 */
|
UTF8STRING layer; /*!< layer name, code 8 */
|
||||||
UTF8STRING lineType; /*!< line type, code 6 */
|
UTF8STRING lineType; /*!< line type, code 6 */
|
||||||
|
@ -603,9 +624,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~DRW_LWPolyline() {
|
~DRW_LWPolyline() {
|
||||||
while (!vertlist.empty()) {
|
for(DRW_Vertex2D *item : vertlist) delete item;
|
||||||
vertlist.pop_back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
virtual void applyExtrusion();
|
virtual void applyExtrusion();
|
||||||
void addVertex (DRW_Vertex2D v) {
|
void addVertex (DRW_Vertex2D v) {
|
||||||
|
@ -796,10 +815,22 @@ public:
|
||||||
flags = vertexcount = facecount = 0;
|
flags = vertexcount = facecount = 0;
|
||||||
smoothM = smoothN = curvetype = 0;
|
smoothM = smoothN = curvetype = 0;
|
||||||
}
|
}
|
||||||
~DRW_Polyline() {
|
|
||||||
while (!vertlist.empty()) {
|
DRW_Polyline(const DRW_Polyline& p) : DRW_Point(p) {
|
||||||
vertlist.pop_back();
|
flags = p.flags ;
|
||||||
|
defstawidth = p.defstawidth;
|
||||||
|
defendwidth = p.defendwidth;
|
||||||
|
vertexcount = p.vertexcount;
|
||||||
|
facecount = p.facecount ;
|
||||||
|
smoothM = p.smoothM ;
|
||||||
|
smoothN = p.smoothN ;
|
||||||
|
curvetype = p.curvetype ;
|
||||||
|
for (unsigned i=0; i<p.vertlist.size(); i++)// RLZ ok or new
|
||||||
|
this->vertlist.push_back( new DRW_Vertex( *(p.vertlist.at(i)) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~DRW_Polyline() {
|
||||||
|
for(DRW_Vertex *item : vertlist) delete item;
|
||||||
}
|
}
|
||||||
void addVertex (DRW_Vertex v) {
|
void addVertex (DRW_Vertex v) {
|
||||||
DRW_Vertex *vert = new DRW_Vertex();
|
DRW_Vertex *vert = new DRW_Vertex();
|
||||||
|
@ -853,13 +884,30 @@ public:
|
||||||
tolknot = tolcontrol = tolfit = 0.0000001;
|
tolknot = tolcontrol = tolfit = 0.0000001;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DRW_Spline(const DRW_Spline& p):DRW_Entity(p){
|
||||||
|
eType = DRW::SPLINE;
|
||||||
|
normalVec = p.normalVec ;
|
||||||
|
tgStart = p.tgStart ;
|
||||||
|
tgEnd = p.tgEnd ;
|
||||||
|
flags = p.flags ;
|
||||||
|
degree = p.degree ;
|
||||||
|
nknots = p.nknots ;
|
||||||
|
ncontrol = p.ncontrol ;
|
||||||
|
nfit = p.nfit ;
|
||||||
|
tolknot = p.tolknot ;
|
||||||
|
tolcontrol = p.tolcontrol;
|
||||||
|
tolfit = p.tolfit ;
|
||||||
|
|
||||||
|
for(double v : p.knotslist) knotslist.push_back(v);
|
||||||
|
for(double v : p.weightlist) weightlist.push_back(v);
|
||||||
|
for(DRW_Coord *v : p.controllist) controllist.push_back(new DRW_Coord(*v));
|
||||||
|
for(DRW_Coord *v : p.fitlist) fitlist.push_back(new DRW_Coord(*v));
|
||||||
|
}
|
||||||
|
|
||||||
~DRW_Spline() {
|
~DRW_Spline() {
|
||||||
while (!controllist.empty()) {
|
for(DRW_Coord *item : controllist) delete item;
|
||||||
controllist.pop_back();
|
for(DRW_Coord *item : fitlist) delete item;
|
||||||
}
|
|
||||||
while (!fitlist.empty()) {
|
|
||||||
fitlist.pop_back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
virtual void applyExtrusion(){}
|
virtual void applyExtrusion(){}
|
||||||
|
|
||||||
|
@ -890,6 +938,7 @@ public:
|
||||||
double tolfit; /*!< fit point tolerance, code 44, default 0.0000001 */
|
double tolfit; /*!< fit point tolerance, code 44, default 0.0000001 */
|
||||||
|
|
||||||
std::vector<double> knotslist; /*!< knots list, code 40 */
|
std::vector<double> knotslist; /*!< knots list, code 40 */
|
||||||
|
std::vector<double> weightlist; /*!< weight list, code 41 */
|
||||||
std::vector<DRW_Coord *> controllist; /*!< control points list, code 10, 20 & 30 */
|
std::vector<DRW_Coord *> controllist; /*!< control points list, code 10, 20 & 30 */
|
||||||
std::vector<DRW_Coord *> fitlist; /*!< fit points list, code 11, 21 & 31 */
|
std::vector<DRW_Coord *> fitlist; /*!< fit points list, code 11, 21 & 31 */
|
||||||
|
|
||||||
|
@ -911,16 +960,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~DRW_HatchLoop() {
|
~DRW_HatchLoop() {
|
||||||
/* while (!pollist.empty()) {
|
// for(DRW_LWPolyline *item : pollist) delete item;
|
||||||
pollist.pop_back();
|
for(DRW_Entity *item : objlist) delete item;
|
||||||
}*/
|
|
||||||
while (!objlist.empty()) {
|
|
||||||
objlist.pop_back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void update() {
|
void update() {
|
||||||
numedges = objlist.size();
|
numedges = (int)objlist.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -952,9 +997,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~DRW_Hatch() {
|
~DRW_Hatch() {
|
||||||
while (!looplist.empty()) {
|
for(DRW_HatchLoop *item : looplist) delete item;
|
||||||
looplist.pop_back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void appendLoop (DRW_HatchLoop *v) {
|
void appendLoop (DRW_HatchLoop *v) {
|
||||||
|
@ -1089,6 +1132,9 @@ public:
|
||||||
defPoint.z = extPoint.x = extPoint.y = 0;
|
defPoint.z = extPoint.x = extPoint.y = 0;
|
||||||
textPoint.z = rot = 0;
|
textPoint.z = rot = 0;
|
||||||
clonePoint.x = clonePoint.y = clonePoint.z = 0;
|
clonePoint.x = clonePoint.y = clonePoint.z = 0;
|
||||||
|
length = 0.0;
|
||||||
|
hasActual = false;
|
||||||
|
actual = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DRW_Dimension(const DRW_Dimension& d): DRW_Entity(d) {
|
DRW_Dimension(const DRW_Dimension& d): DRW_Entity(d) {
|
||||||
|
@ -1112,6 +1158,8 @@ public:
|
||||||
arcPoint = d.arcPoint;
|
arcPoint = d.arcPoint;
|
||||||
circlePoint = d.circlePoint;
|
circlePoint = d.circlePoint;
|
||||||
length = d.length;
|
length = d.length;
|
||||||
|
hasActual = d.hasActual;
|
||||||
|
actual = d.actual;
|
||||||
//RLZ needed a def value for this: hdir = ???
|
//RLZ needed a def value for this: hdir = ???
|
||||||
}
|
}
|
||||||
virtual ~DRW_Dimension() {}
|
virtual ~DRW_Dimension() {}
|
||||||
|
@ -1147,6 +1195,9 @@ public:
|
||||||
std::string getName(){return name;} /*!< Name of the block that contains the entities, code 2 */
|
std::string getName(){return name;} /*!< Name of the block that contains the entities, code 2 */
|
||||||
void setName(const std::string s) {name = s;}
|
void setName(const std::string s) {name = s;}
|
||||||
// int getType(){ return type;} /*!< Dimension type, code 70 */
|
// int getType(){ return type;} /*!< Dimension type, code 70 */
|
||||||
|
bool hasActualMeasurement() const { return hasActual; }
|
||||||
|
void setActualMeasurement(double value) { hasActual = true; actual = value; }
|
||||||
|
double getActualMeasurement() const { return actual; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DRW_Coord getPt2() const {return clonePoint;}
|
DRW_Coord getPt2() const {return clonePoint;}
|
||||||
|
@ -1189,6 +1240,8 @@ private:
|
||||||
DRW_Coord circlePoint; /*!< Definition point for diameter, radius & angular dims code 15, 25 & 35 (WCS) */
|
DRW_Coord circlePoint; /*!< Definition point for diameter, radius & angular dims code 15, 25 & 35 (WCS) */
|
||||||
DRW_Coord arcPoint; /*!< Point defining dimension arc, x coordinate, code 16, 26 & 36 (OCS) */
|
DRW_Coord arcPoint; /*!< Point defining dimension arc, x coordinate, code 16, 26 & 36 (OCS) */
|
||||||
double length; /*!< Leader length, code 40 */
|
double length; /*!< Leader length, code 40 */
|
||||||
|
bool hasActual; /*!< Actual measurement has been read, code 42 */
|
||||||
|
double actual; /*!< Actual measurement (optional; read-only value), code 42 */
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
dwgHandle dimStyleH;
|
dwgHandle dimStyleH;
|
||||||
|
@ -1206,6 +1259,7 @@ class DRW_DimAligned : public DRW_Dimension {
|
||||||
public:
|
public:
|
||||||
DRW_DimAligned(){
|
DRW_DimAligned(){
|
||||||
eType = DRW::DIMALIGNED;
|
eType = DRW::DIMALIGNED;
|
||||||
|
type = 1;
|
||||||
}
|
}
|
||||||
DRW_DimAligned(const DRW_Dimension& d): DRW_Dimension(d) {
|
DRW_DimAligned(const DRW_Dimension& d): DRW_Dimension(d) {
|
||||||
eType = DRW::DIMALIGNED;
|
eType = DRW::DIMALIGNED;
|
||||||
|
@ -1234,6 +1288,7 @@ class DRW_DimLinear : public DRW_DimAligned {
|
||||||
public:
|
public:
|
||||||
DRW_DimLinear() {
|
DRW_DimLinear() {
|
||||||
eType = DRW::DIMLINEAR;
|
eType = DRW::DIMLINEAR;
|
||||||
|
type = 0;
|
||||||
}
|
}
|
||||||
DRW_DimLinear(const DRW_Dimension& d): DRW_DimAligned(d) {
|
DRW_DimLinear(const DRW_Dimension& d): DRW_DimAligned(d) {
|
||||||
eType = DRW::DIMLINEAR;
|
eType = DRW::DIMLINEAR;
|
||||||
|
@ -1255,6 +1310,7 @@ class DRW_DimRadial : public DRW_Dimension {
|
||||||
public:
|
public:
|
||||||
DRW_DimRadial() {
|
DRW_DimRadial() {
|
||||||
eType = DRW::DIMRADIAL;
|
eType = DRW::DIMRADIAL;
|
||||||
|
type = 4;
|
||||||
}
|
}
|
||||||
DRW_DimRadial(const DRW_Dimension& d): DRW_Dimension(d) {
|
DRW_DimRadial(const DRW_Dimension& d): DRW_Dimension(d) {
|
||||||
eType = DRW::DIMRADIAL;
|
eType = DRW::DIMRADIAL;
|
||||||
|
@ -1281,6 +1337,7 @@ class DRW_DimDiametric : public DRW_Dimension {
|
||||||
public:
|
public:
|
||||||
DRW_DimDiametric() {
|
DRW_DimDiametric() {
|
||||||
eType = DRW::DIMDIAMETRIC;
|
eType = DRW::DIMDIAMETRIC;
|
||||||
|
type = 3;
|
||||||
}
|
}
|
||||||
DRW_DimDiametric(const DRW_Dimension& d): DRW_Dimension(d) {
|
DRW_DimDiametric(const DRW_Dimension& d): DRW_Dimension(d) {
|
||||||
eType = DRW::DIMDIAMETRIC;
|
eType = DRW::DIMDIAMETRIC;
|
||||||
|
@ -1307,6 +1364,7 @@ class DRW_DimAngular : public DRW_Dimension {
|
||||||
public:
|
public:
|
||||||
DRW_DimAngular() {
|
DRW_DimAngular() {
|
||||||
eType = DRW::DIMANGULAR;
|
eType = DRW::DIMANGULAR;
|
||||||
|
type = 2;
|
||||||
}
|
}
|
||||||
DRW_DimAngular(const DRW_Dimension& d): DRW_Dimension(d) {
|
DRW_DimAngular(const DRW_Dimension& d): DRW_Dimension(d) {
|
||||||
eType = DRW::DIMANGULAR;
|
eType = DRW::DIMANGULAR;
|
||||||
|
@ -1338,6 +1396,7 @@ class DRW_DimAngular3p : public DRW_Dimension {
|
||||||
public:
|
public:
|
||||||
DRW_DimAngular3p() {
|
DRW_DimAngular3p() {
|
||||||
eType = DRW::DIMANGULAR3P;
|
eType = DRW::DIMANGULAR3P;
|
||||||
|
type = 5;
|
||||||
}
|
}
|
||||||
DRW_DimAngular3p(const DRW_Dimension& d): DRW_Dimension(d) {
|
DRW_DimAngular3p(const DRW_Dimension& d): DRW_Dimension(d) {
|
||||||
eType = DRW::DIMANGULAR3P;
|
eType = DRW::DIMANGULAR3P;
|
||||||
|
@ -1366,6 +1425,7 @@ class DRW_DimOrdinate : public DRW_Dimension {
|
||||||
public:
|
public:
|
||||||
DRW_DimOrdinate() {
|
DRW_DimOrdinate() {
|
||||||
eType = DRW::DIMORDINATE;
|
eType = DRW::DIMORDINATE;
|
||||||
|
type = 6;
|
||||||
}
|
}
|
||||||
DRW_DimOrdinate(const DRW_Dimension& d): DRW_Dimension(d) {
|
DRW_DimOrdinate(const DRW_Dimension& d): DRW_Dimension(d) {
|
||||||
eType = DRW::DIMORDINATE;
|
eType = DRW::DIMORDINATE;
|
||||||
|
@ -1400,9 +1460,7 @@ public:
|
||||||
extrusionPoint.z = 1.0;
|
extrusionPoint.z = 1.0;
|
||||||
}
|
}
|
||||||
~DRW_Leader() {
|
~DRW_Leader() {
|
||||||
while (!vertexlist.empty()) {
|
for(DRW_Coord *item : vertexlist) delete item;
|
||||||
vertexlist.pop_back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void applyExtrusion(){}
|
virtual void applyExtrusion(){}
|
||||||
|
@ -1512,4 +1570,3 @@ private:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
||||||
|
|
|
@ -105,4 +105,3 @@ private:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
||||||
|
|
|
@ -28,25 +28,25 @@
|
||||||
*/
|
*/
|
||||||
class DRW_Interface {
|
class DRW_Interface {
|
||||||
public:
|
public:
|
||||||
DRW_Interface()
|
DRW_Interface() {
|
||||||
{}
|
}
|
||||||
virtual ~DRW_Interface() = default;
|
virtual ~DRW_Interface() = default;
|
||||||
|
|
||||||
/** Called when header is parsed. */
|
/** Called when header is parsed. */
|
||||||
virtual void addHeader(const DRW_Header* data) = 0;
|
virtual void addHeader(const DRW_Header *) { }
|
||||||
|
|
||||||
/** Called for every line Type. */
|
/** Called for every line Type. */
|
||||||
virtual void addLType(const DRW_LType& data) = 0;
|
virtual void addLType(const DRW_LType &) { }
|
||||||
/** Called for every layer. */
|
/** Called for every layer. */
|
||||||
virtual void addLayer(const DRW_Layer& data) = 0;
|
virtual void addLayer(const DRW_Layer &) { }
|
||||||
/** Called for every dim style. */
|
/** Called for every dim style. */
|
||||||
virtual void addDimStyle(const DRW_Dimstyle& data) = 0;
|
virtual void addDimStyle(const DRW_Dimstyle &) { }
|
||||||
/** Called for every VPORT table. */
|
/** Called for every VPORT table. */
|
||||||
virtual void addVport(const DRW_Vport& data) = 0;
|
virtual void addVport(const DRW_Vport &) { }
|
||||||
/** Called for every text style. */
|
/** Called for every text style. */
|
||||||
virtual void addTextStyle(const DRW_Textstyle& data) = 0;
|
virtual void addTextStyle(const DRW_Textstyle &) { }
|
||||||
/** Called for every AppId entry. */
|
/** Called for every AppId entry. */
|
||||||
virtual void addAppId(const DRW_AppId& data) = 0;
|
virtual void addAppId(const DRW_AppId &) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every block. Note: all entities added after this
|
* Called for every block. Note: all entities added after this
|
||||||
|
@ -54,146 +54,137 @@ public:
|
||||||
*
|
*
|
||||||
* @see endBlock()
|
* @see endBlock()
|
||||||
*/
|
*/
|
||||||
virtual void addBlock(const DRW_Block& data) = 0;
|
virtual void addBlock(const DRW_Block &) { }
|
||||||
|
|
||||||
/**
|
|
||||||
* In DWG called when the following entities corresponding to a
|
|
||||||
* block different from the current. Note: all entities added after this
|
|
||||||
* command go into this block until setBlock() is called already.
|
|
||||||
*
|
|
||||||
* int handle are the value of DRW_Block::handleBlock added with addBlock()
|
|
||||||
*/
|
|
||||||
virtual void setBlock(const int handle) = 0;
|
|
||||||
|
|
||||||
/** Called to end the current block */
|
/** Called to end the current block */
|
||||||
virtual void endBlock() = 0;
|
virtual void endBlock() { }
|
||||||
|
|
||||||
/** Called for every point */
|
/** Called for every point */
|
||||||
virtual void addPoint(const DRW_Point& data) = 0;
|
virtual void addPoint(const DRW_Point &) { }
|
||||||
|
|
||||||
/** Called for every line */
|
/** Called for every line */
|
||||||
virtual void addLine(const DRW_Line& data) = 0;
|
virtual void addLine(const DRW_Line &) { }
|
||||||
|
|
||||||
/** Called for every ray */
|
/** Called for every ray */
|
||||||
virtual void addRay(const DRW_Ray& data) = 0;
|
virtual void addRay(const DRW_Ray &) { }
|
||||||
|
|
||||||
/** Called for every xline */
|
/** Called for every xline */
|
||||||
virtual void addXline(const DRW_Xline& data) = 0;
|
virtual void addXline(const DRW_Xline &) { }
|
||||||
|
|
||||||
/** Called for every arc */
|
/** Called for every arc */
|
||||||
virtual void addArc(const DRW_Arc& data) = 0;
|
virtual void addArc(const DRW_Arc &) { }
|
||||||
|
|
||||||
/** Called for every circle */
|
/** Called for every circle */
|
||||||
virtual void addCircle(const DRW_Circle& data) = 0;
|
virtual void addCircle(const DRW_Circle &) { }
|
||||||
|
|
||||||
/** Called for every ellipse */
|
/** Called for every ellipse */
|
||||||
virtual void addEllipse(const DRW_Ellipse& data) = 0;
|
virtual void addEllipse(const DRW_Ellipse &) { }
|
||||||
|
|
||||||
/** Called for every lwpolyline */
|
/** Called for every lwpolyline */
|
||||||
virtual void addLWPolyline(const DRW_LWPolyline& data) = 0;
|
virtual void addLWPolyline(const DRW_LWPolyline &) { }
|
||||||
|
|
||||||
/** Called for every polyline start */
|
/** Called for every polyline start */
|
||||||
virtual void addPolyline(const DRW_Polyline& data) = 0;
|
virtual void addPolyline(const DRW_Polyline &) { }
|
||||||
|
|
||||||
/** Called for every spline */
|
/** Called for every spline */
|
||||||
virtual void addSpline(const DRW_Spline* data) = 0;
|
virtual void addSpline(const DRW_Spline *) { }
|
||||||
|
|
||||||
/** Called for every spline knot value */
|
/** Called for every spline knot value */
|
||||||
virtual void addKnot(const DRW_Entity& data) = 0;
|
virtual void addKnot(const DRW_Entity &) { }
|
||||||
|
|
||||||
/** Called for every insert. */
|
/** Called for every insert. */
|
||||||
virtual void addInsert(const DRW_Insert& data) = 0;
|
virtual void addInsert(const DRW_Insert &) { }
|
||||||
|
|
||||||
/** Called for every trace start */
|
/** Called for every trace start */
|
||||||
virtual void addTrace(const DRW_Trace& data) = 0;
|
virtual void addTrace(const DRW_Trace &) { }
|
||||||
|
|
||||||
/** Called for every 3dface start */
|
/** Called for every 3dface start */
|
||||||
virtual void add3dFace(const DRW_3Dface& data) = 0;
|
virtual void add3dFace(const DRW_3Dface &) { }
|
||||||
|
|
||||||
/** Called for every solid start */
|
/** Called for every solid start */
|
||||||
virtual void addSolid(const DRW_Solid& data) = 0;
|
virtual void addSolid(const DRW_Solid &) { }
|
||||||
|
|
||||||
|
|
||||||
/** Called for every Multi Text entity. */
|
/** Called for every Multi Text entity. */
|
||||||
virtual void addMText(const DRW_MText& data) = 0;
|
virtual void addMText(const DRW_MText &) { }
|
||||||
|
|
||||||
/** Called for every Text entity. */
|
/** Called for every Text entity. */
|
||||||
virtual void addText(const DRW_Text& data) = 0;
|
virtual void addText(const DRW_Text &) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every aligned dimension entity.
|
* Called for every aligned dimension entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimAlign(const DRW_DimAligned *data) = 0;
|
virtual void addDimAlign(const DRW_DimAligned *) { }
|
||||||
/**
|
/**
|
||||||
* Called for every linear or rotated dimension entity.
|
* Called for every linear or rotated dimension entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimLinear(const DRW_DimLinear *data) = 0;
|
virtual void addDimLinear(const DRW_DimLinear *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every radial dimension entity.
|
* Called for every radial dimension entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimRadial(const DRW_DimRadial *data) = 0;
|
virtual void addDimRadial(const DRW_DimRadial *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every diametric dimension entity.
|
* Called for every diametric dimension entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimDiametric(const DRW_DimDiametric *data) = 0;
|
virtual void addDimDiametric(const DRW_DimDiametric *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every angular dimension (2 lines version) entity.
|
* Called for every angular dimension (2 lines version) entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimAngular(const DRW_DimAngular *data) = 0;
|
virtual void addDimAngular(const DRW_DimAngular *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every angular dimension (3 points version) entity.
|
* Called for every angular dimension (3 points version) entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimAngular3P(const DRW_DimAngular3p *data) = 0;
|
virtual void addDimAngular3P(const DRW_DimAngular3p *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every ordinate dimension entity.
|
* Called for every ordinate dimension entity.
|
||||||
*/
|
*/
|
||||||
virtual void addDimOrdinate(const DRW_DimOrdinate *data) = 0;
|
virtual void addDimOrdinate(const DRW_DimOrdinate *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every leader start.
|
* Called for every leader start.
|
||||||
*/
|
*/
|
||||||
virtual void addLeader(const DRW_Leader *data) = 0;
|
virtual void addLeader(const DRW_Leader *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every hatch entity.
|
* Called for every hatch entity.
|
||||||
*/
|
*/
|
||||||
virtual void addHatch(const DRW_Hatch *data) = 0;
|
virtual void addHatch(const DRW_Hatch *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every viewport entity.
|
* Called for every viewport entity.
|
||||||
*/
|
*/
|
||||||
virtual void addViewport(const DRW_Viewport& data) = 0;
|
virtual void addViewport(const DRW_Viewport &) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every image entity.
|
* Called for every image entity.
|
||||||
*/
|
*/
|
||||||
virtual void addImage(const DRW_Image *data) = 0;
|
virtual void addImage(const DRW_Image *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every image definition.
|
* Called for every image definition.
|
||||||
*/
|
*/
|
||||||
virtual void linkImage(const DRW_ImageDef *data) = 0;
|
virtual void linkImage(const DRW_ImageDef *) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called for every comment in the DXF file (code 999).
|
* Called for every comment in the DXF file (code 999).
|
||||||
*/
|
*/
|
||||||
virtual void addComment(const char* comment) = 0;
|
virtual void addComment(const char *) { }
|
||||||
|
|
||||||
virtual void writeHeader(DRW_Header& data) = 0;
|
virtual void writeHeader(DRW_Header &) { }
|
||||||
virtual void writeBlocks() = 0;
|
virtual void writeBlocks() { }
|
||||||
virtual void writeBlockRecords() = 0;
|
virtual void writeBlockRecords() { }
|
||||||
virtual void writeEntities() = 0;
|
virtual void writeEntities() { }
|
||||||
virtual void writeLTypes() = 0;
|
virtual void writeLTypes() { }
|
||||||
virtual void writeLayers() = 0;
|
virtual void writeLayers() { }
|
||||||
virtual void writeTextstyles() = 0;
|
virtual void writeTextstyles() { }
|
||||||
virtual void writeVports() = 0;
|
virtual void writeVports() { }
|
||||||
virtual void writeDimstyles() = 0;
|
virtual void writeDimstyles() { }
|
||||||
virtual void writeAppId() = 0;
|
virtual void writeAppId() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,7 +50,10 @@ void DRW_TableEntry::parseCode(int code, dxfReader *reader){
|
||||||
case 1011:
|
case 1011:
|
||||||
case 1012:
|
case 1012:
|
||||||
case 1013:
|
case 1013:
|
||||||
curr = new DRW_Variant(code, DRW_Coord(reader->getDouble(), 0.0, 0.0));
|
curr = new DRW_Variant();
|
||||||
|
curr->addCoord();
|
||||||
|
curr->setCoordX(reader->getDouble());
|
||||||
|
curr->code = code;
|
||||||
extData.push_back(curr);
|
extData.push_back(curr);
|
||||||
break;
|
break;
|
||||||
case 1020:
|
case 1020:
|
||||||
|
@ -455,7 +458,7 @@ void DRW_LType::parseCode(int code, dxfReader *reader){
|
||||||
/*TODO: control max length permited */
|
/*TODO: control max length permited */
|
||||||
void DRW_LType::update(){
|
void DRW_LType::update(){
|
||||||
double d =0;
|
double d =0;
|
||||||
size = path.size();
|
size = (int)path.size();
|
||||||
for (int i = 0; i< size; i++){
|
for (int i = 0; i< size; i++){
|
||||||
d += fabs(path.at(i));
|
d += fabs(path.at(i));
|
||||||
}
|
}
|
||||||
|
@ -1168,7 +1171,7 @@ bool DRW_ImageDef::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){
|
||||||
dint32 imgVersion = buf->getBitLong();
|
dint32 imgVersion = buf->getBitLong();
|
||||||
DRW_DBG("class Version: "); DRW_DBG(imgVersion);
|
DRW_DBG("class Version: "); DRW_DBG(imgVersion);
|
||||||
DRW_Coord size = buf->get2RawDouble();
|
DRW_Coord size = buf->get2RawDouble();
|
||||||
DRW_UNUSED(size);//RLZ: temporary, complete API
|
(void)size;
|
||||||
name = sBuf->getVariableText(version, false);
|
name = sBuf->getVariableText(version, false);
|
||||||
DRW_DBG("appId name: "); DRW_DBG(name.c_str()); DRW_DBG("\n");
|
DRW_DBG("appId name: "); DRW_DBG(name.c_str()); DRW_DBG("\n");
|
||||||
loaded = buf->getBit();
|
loaded = buf->getBit();
|
||||||
|
|
|
@ -128,25 +128,30 @@ public:
|
||||||
|
|
||||||
void reset(){
|
void reset(){
|
||||||
tType = DRW::DIMSTYLE;
|
tType = DRW::DIMSTYLE;
|
||||||
dimasz = dimtxt = dimexe = 0.18;
|
dimasz = dimtxt = dimcen = 2.5;
|
||||||
dimexo = 0.0625;
|
dimexe = 1.25;
|
||||||
dimgap = dimcen = 0.09;
|
dimexo = dimgap = 0.625;
|
||||||
dimtxsty = "Standard";
|
dimtxsty = "";
|
||||||
dimscale = dimlfac = dimtfac = dimfxl = 1.0;
|
dimscale = dimlfac = dimtfac = dimfxl = 1.0;
|
||||||
dimdli = 0.38;
|
dimdli = 3.75;
|
||||||
dimrnd = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0;
|
dimrnd = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0;
|
||||||
dimaltf = 25.4;
|
dimaltf = 1.0 / 25.4;
|
||||||
dimtol = dimlim = dimse1 = dimse2 = dimtad = dimzin = 0;
|
dimtol = dimlim = dimse1 = dimse2 = 0;
|
||||||
dimtoh = dimtolj = 1;
|
dimtad = 1;
|
||||||
dimalt = dimtofl = dimsah = dimtix = dimsoxd = dimfxlon = 0;
|
dimzin = 8;
|
||||||
dimaltd = dimunit = dimaltu = dimalttd = dimlunit = 2;
|
dimtoh = dimtolj = 0;
|
||||||
|
dimalt = dimsah = dimtix = dimsoxd = dimfxlon = 0;
|
||||||
|
dimtofl = 1;
|
||||||
|
dimunit = dimaltu = dimlunit = 2;
|
||||||
|
dimaltd = dimalttd = 3;
|
||||||
dimclrd = dimclre = dimclrt = dimjust = dimupt = 0;
|
dimclrd = dimclre = dimclrt = dimjust = dimupt = 0;
|
||||||
dimazin = dimaltz = dimaltttz = dimtzin = dimfrac = 0;
|
dimtzin = 8;
|
||||||
|
dimazin = dimaltz = dimaltttz = dimfrac = 0;
|
||||||
dimtih = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0;
|
dimtih = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0;
|
||||||
dimaltrnd = 0.0;
|
dimaltrnd = 0.0;
|
||||||
dimdec = dimtdec = 4;
|
dimdec = dimtdec = 2;
|
||||||
dimfit = dimatfit = 3;
|
dimfit = dimatfit = 3;
|
||||||
dimdsep = '.';
|
dimdsep = ',';
|
||||||
dimlwd = dimlwe = -2;
|
dimlwd = dimlwe = -2;
|
||||||
DRW_TableEntry::reset();
|
DRW_TableEntry::reset();
|
||||||
}
|
}
|
||||||
|
@ -771,4 +776,3 @@ const unsigned char dxfColors[][3] = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstring>
|
|
||||||
#include <iconv.h>
|
|
||||||
#include "../drw_base.h"
|
#include "../drw_base.h"
|
||||||
#include "drw_cptables.h"
|
#include "drw_cptables.h"
|
||||||
#include "drw_cptable932.h"
|
#include "drw_cptable932.h"
|
||||||
|
@ -54,9 +52,6 @@ void DRW_TextCodec::setVersion(std::string *v, bool dxfFormat){
|
||||||
}
|
}
|
||||||
|
|
||||||
void DRW_TextCodec::setCodePage(std::string *c, bool dxfFormat){
|
void DRW_TextCodec::setCodePage(std::string *c, bool dxfFormat){
|
||||||
static int min_ver = 10;
|
|
||||||
min_ver = std::min(min_ver, version);
|
|
||||||
|
|
||||||
cp = correctCodePage(*c);
|
cp = correctCodePage(*c);
|
||||||
delete conv;
|
delete conv;
|
||||||
if (version == DRW::AC1009 || version == DRW::AC1015) {
|
if (version == DRW::AC1009 || version == DRW::AC1015) {
|
||||||
|
@ -92,13 +87,9 @@ void DRW_TextCodec::setCodePage(std::string *c, bool dxfFormat){
|
||||||
conv = new DRW_ConvTable(DRW_Table1258, CPLENGHTCOMMON);
|
conv = new DRW_ConvTable(DRW_Table1258, CPLENGHTCOMMON);
|
||||||
else if (cp == "UTF-8") { //DXF older than 2007 are write in win codepages
|
else if (cp == "UTF-8") { //DXF older than 2007 are write in win codepages
|
||||||
cp = "ANSI_1252";
|
cp = "ANSI_1252";
|
||||||
conv = new DRW_ExtConverter("SJIS");
|
conv = new DRW_Converter(NULL, 0);
|
||||||
} else {
|
} else
|
||||||
conv = new DRW_ExtConverter("SJIS");
|
conv = new DRW_ConvTable(DRW_Table1252, CPLENGHTCOMMON);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (min_ver <= DRW::AC1018) {
|
|
||||||
conv = new DRW_ExtConverter("SJIS");
|
|
||||||
} else {
|
} else {
|
||||||
if (dxfFormat)
|
if (dxfFormat)
|
||||||
conv = new DRW_Converter(NULL, 0);//utf16 to utf8
|
conv = new DRW_Converter(NULL, 0);//utf16 to utf8
|
||||||
|
@ -106,7 +97,6 @@ void DRW_TextCodec::setCodePage(std::string *c, bool dxfFormat){
|
||||||
conv = new DRW_ConvUTF16();//utf16 to utf8
|
conv = new DRW_ConvUTF16();//utf16 to utf8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
std::string DRW_TextCodec::toUtf8(std::string s) {
|
std::string DRW_TextCodec::toUtf8(std::string s) {
|
||||||
return conv->toUtf8(&s);
|
return conv->toUtf8(&s);
|
||||||
|
@ -470,32 +460,6 @@ std::string DRW_ConvUTF16::toUtf8(std::string *s){//RLZ: pending to write
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string DRW_ExtConverter::convertByiconv(const char *in_encode,
|
|
||||||
const char *out_encode,
|
|
||||||
const std::string *s) {
|
|
||||||
const int BUF_SIZE = 1000;
|
|
||||||
static char in_buf[BUF_SIZE], out_buf[BUF_SIZE];
|
|
||||||
|
|
||||||
char *in_ptr = in_buf, *out_ptr = out_buf;
|
|
||||||
strncpy(in_buf, s->c_str(), BUF_SIZE);
|
|
||||||
|
|
||||||
iconv_t ic;
|
|
||||||
ic = iconv_open(out_encode, in_encode);
|
|
||||||
size_t il = BUF_SIZE-1, ol = BUF_SIZE-1;
|
|
||||||
iconv(ic , &in_ptr, &il, &out_ptr, &ol);
|
|
||||||
iconv_close(ic);
|
|
||||||
|
|
||||||
return std::string(out_buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DRW_ExtConverter::fromUtf8(std::string *s){
|
|
||||||
return convertByiconv("UTF8", this->encoding, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DRW_ExtConverter::toUtf8(std::string *s){
|
|
||||||
return convertByiconv(this->encoding, "UTF8", s);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DRW_TextCodec::correctCodePage(const std::string& s) {
|
std::string DRW_TextCodec::correctCodePage(const std::string& s) {
|
||||||
//stringstream cause crash in OS/X, bug#3597944
|
//stringstream cause crash in OS/X, bug#3597944
|
||||||
std::string cp=s;
|
std::string cp=s;
|
||||||
|
|
|
@ -88,18 +88,4 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class DRW_ExtConverter : public DRW_Converter {
|
|
||||||
public:
|
|
||||||
DRW_ExtConverter(const char *enc):DRW_Converter(NULL, 0) {
|
|
||||||
encoding = enc;
|
|
||||||
}
|
|
||||||
virtual std::string fromUtf8(std::string *s);
|
|
||||||
virtual std::string toUtf8(std::string *s);
|
|
||||||
private:
|
|
||||||
const char *encoding;
|
|
||||||
std::string convertByiconv(const char *in_encode,
|
|
||||||
const char *out_encode,
|
|
||||||
const std::string *s);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // DRW_TEXTCODEC_H
|
#endif // DRW_TEXTCODEC_H
|
||||||
|
|
|
@ -151,7 +151,7 @@ dwgBuffer::dwgBuffer(duint8 *buf, int size, DRW_TextCodec *dc){
|
||||||
bitPos = 0;
|
bitPos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dwgBuffer::dwgBuffer(std::ifstream *stream, DRW_TextCodec *dc){
|
dwgBuffer::dwgBuffer(std::istream *stream, DRW_TextCodec *dc){
|
||||||
filestr = new dwgFileStream(stream);
|
filestr = new dwgFileStream(stream);
|
||||||
decoder = dc;
|
decoder = dc;
|
||||||
maxSize = filestr->size();
|
maxSize = filestr->size();
|
||||||
|
@ -921,4 +921,3 @@ duint32 dwgBuffer::crc32(duint32 seed,dint32 start,dint32 end){
|
||||||
return st;
|
return st;
|
||||||
// return std::string(buffer);
|
// return std::string(buffer);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
|
|
||||||
class dwgFileStream: public dwgBasicStream{
|
class dwgFileStream: public dwgBasicStream{
|
||||||
public:
|
public:
|
||||||
dwgFileStream(std::ifstream *s){
|
dwgFileStream(std::istream *s){
|
||||||
stream =s;
|
stream =s;
|
||||||
stream->seekg (0, std::ios::end);
|
stream->seekg (0, std::ios::end);
|
||||||
sz = stream->tellg();
|
sz = stream->tellg();
|
||||||
|
@ -49,7 +49,7 @@ public:
|
||||||
virtual bool good(){return stream->good();}
|
virtual bool good(){return stream->good();}
|
||||||
virtual dwgBasicStream* clone(){return new dwgFileStream(stream);}
|
virtual dwgBasicStream* clone(){return new dwgFileStream(stream);}
|
||||||
private:
|
private:
|
||||||
std::ifstream *stream;
|
std::istream *stream;
|
||||||
duint64 sz;
|
duint64 sz;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ private:
|
||||||
|
|
||||||
class dwgBuffer {
|
class dwgBuffer {
|
||||||
public:
|
public:
|
||||||
dwgBuffer(std::ifstream *stream, DRW_TextCodec *decoder = NULL);
|
dwgBuffer(std::istream *stream, DRW_TextCodec *decoder = NULL);
|
||||||
dwgBuffer(duint8 *buf, int size, DRW_TextCodec *decoder= NULL);
|
dwgBuffer(duint8 *buf, int size, DRW_TextCodec *decoder= NULL);
|
||||||
dwgBuffer( const dwgBuffer& org );
|
dwgBuffer( const dwgBuffer& org );
|
||||||
dwgBuffer& operator=( const dwgBuffer& org );
|
dwgBuffer& operator=( const dwgBuffer& org );
|
||||||
|
|
|
@ -1292,4 +1292,3 @@ int unkData=0;
|
||||||
}
|
}
|
||||||
return buf->isGood();
|
return buf->isGood();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ public:
|
||||||
class dwgReader {
|
class dwgReader {
|
||||||
friend class dwgR;
|
friend class dwgR;
|
||||||
public:
|
public:
|
||||||
dwgReader(std::ifstream *stream, dwgR *p){
|
dwgReader(std::istream *stream, dwgR *p){
|
||||||
fileBuf = new dwgBuffer(stream);
|
fileBuf = new dwgBuffer(stream);
|
||||||
parent = p;
|
parent = p;
|
||||||
decoder.setVersion(DRW::AC1021, false);//default 2007 in utf8(no convert)
|
decoder.setVersion(DRW::AC1021, false);//default 2007 in utf8(no convert)
|
||||||
|
|
|
@ -196,4 +196,3 @@ bool dwgReader15::readDwgBlocks(DRW_Interface& intfa) {
|
||||||
ret = dwgReader::readDwgBlocks(intfa, fileBuf);
|
ret = dwgReader::readDwgBlocks(intfa, fileBuf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
class dwgReader15 : public dwgReader {
|
class dwgReader15 : public dwgReader {
|
||||||
public:
|
public:
|
||||||
dwgReader15(std::ifstream *stream, dwgR *p):dwgReader(stream, p){ }
|
dwgReader15(std::istream *stream, dwgR *p):dwgReader(stream, p){ }
|
||||||
virtual ~dwgReader15() {}
|
virtual ~dwgReader15() {}
|
||||||
bool readMetaData();
|
bool readMetaData();
|
||||||
bool readFileHeader();
|
bool readFileHeader();
|
||||||
|
|
|
@ -592,5 +592,3 @@ bool dwgReader18::readDwgTables(DRW_Header& hdr) {
|
||||||
//Do not delete objData in this point, needed in the remaining code
|
//Do not delete objData in this point, needed in the remaining code
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ static const int DRW_magicNumEnd18[] = {
|
||||||
|
|
||||||
class dwgReader18 : public dwgReader {
|
class dwgReader18 : public dwgReader {
|
||||||
public:
|
public:
|
||||||
dwgReader18(std::ifstream *stream, dwgR *p):dwgReader(stream, p){
|
dwgReader18(std::istream *stream, dwgR *p):dwgReader(stream, p){
|
||||||
objData = NULL;
|
objData = NULL;
|
||||||
}
|
}
|
||||||
virtual ~dwgReader18(){
|
virtual ~dwgReader18(){
|
||||||
|
|
|
@ -485,5 +485,3 @@ bool dwgReader21::readDwgBlocks(DRW_Interface& intfa){
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
//reader for AC1021 aka v2007, chapter 5
|
//reader for AC1021 aka v2007, chapter 5
|
||||||
class dwgReader21 : public dwgReader {
|
class dwgReader21 : public dwgReader {
|
||||||
public:
|
public:
|
||||||
dwgReader21(std::ifstream *stream, dwgR *p):dwgReader(stream, p){
|
dwgReader21(std::istream *stream, dwgR *p):dwgReader(stream, p){
|
||||||
objData = NULL;
|
objData = NULL;
|
||||||
dataSize = 0;
|
dataSize = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
class dwgReader24 : public dwgReader18 {
|
class dwgReader24 : public dwgReader18 {
|
||||||
public:
|
public:
|
||||||
dwgReader24(std::ifstream *stream, dwgR *p):dwgReader18(stream, p){ }
|
dwgReader24(std::istream *stream, dwgR *p):dwgReader18(stream, p){ }
|
||||||
virtual ~dwgReader24(){}
|
virtual ~dwgReader24(){}
|
||||||
bool readFileHeader();
|
bool readFileHeader();
|
||||||
bool readDwgHeader(DRW_Header& hdr);
|
bool readDwgHeader(DRW_Header& hdr);
|
||||||
|
|
|
@ -41,4 +41,3 @@ bool dwgReader27::readDwgClasses(){
|
||||||
DRW_DBG("\ndwgReader27::readDwgClasses END\n");
|
DRW_DBG("\ndwgReader27::readDwgClasses END\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
class dwgReader27 : public dwgReader18 {
|
class dwgReader27 : public dwgReader18 {
|
||||||
public:
|
public:
|
||||||
dwgReader27(std::ifstream *stream, dwgR *p):dwgReader18(stream, p){ }
|
dwgReader27(std::istream *stream, dwgR *p):dwgReader18(stream, p){ }
|
||||||
virtual ~dwgReader27(){}
|
virtual ~dwgReader27(){}
|
||||||
bool readFileHeader();
|
bool readFileHeader();
|
||||||
bool readDwgHeader(DRW_Header& hdr);
|
bool readDwgHeader(DRW_Header& hdr);
|
||||||
|
|
|
@ -261,4 +261,3 @@ bool dxfReaderAscii::readBool() {
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
};
|
};
|
||||||
enum TYPE type;
|
enum TYPE type;
|
||||||
public:
|
public:
|
||||||
dxfReader(std::ifstream *stream){
|
dxfReader(std::istream *stream){
|
||||||
filestr = stream;
|
filestr = stream;
|
||||||
type = INVALID;
|
type = INVALID;
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ protected:
|
||||||
virtual bool readBool() = 0;
|
virtual bool readBool() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::ifstream *filestr;
|
std::istream *filestr;
|
||||||
std::string strData;
|
std::string strData;
|
||||||
double doubleData;
|
double doubleData;
|
||||||
signed int intData; //32 bits integer
|
signed int intData; //32 bits integer
|
||||||
|
@ -70,7 +70,7 @@ private:
|
||||||
|
|
||||||
class dxfReaderBinary : public dxfReader {
|
class dxfReaderBinary : public dxfReader {
|
||||||
public:
|
public:
|
||||||
dxfReaderBinary(std::ifstream *stream):dxfReader(stream){skip = false; }
|
dxfReaderBinary(std::istream *stream):dxfReader(stream){skip = false; }
|
||||||
virtual ~dxfReaderBinary() {}
|
virtual ~dxfReaderBinary() {}
|
||||||
virtual bool readCode(int *code);
|
virtual bool readCode(int *code);
|
||||||
virtual bool readString(std::string *text);
|
virtual bool readString(std::string *text);
|
||||||
|
@ -84,7 +84,7 @@ public:
|
||||||
|
|
||||||
class dxfReaderAscii : public dxfReader {
|
class dxfReaderAscii : public dxfReader {
|
||||||
public:
|
public:
|
||||||
dxfReaderAscii(std::ifstream *stream):dxfReader(stream){skip = true; }
|
dxfReaderAscii(std::istream *stream):dxfReader(stream){skip = true; }
|
||||||
virtual ~dxfReaderAscii(){}
|
virtual ~dxfReaderAscii(){}
|
||||||
virtual bool readCode(int *code);
|
virtual bool readCode(int *code);
|
||||||
virtual bool readString(std::string *text);
|
virtual bool readString(std::string *text);
|
||||||
|
|
|
@ -35,9 +35,8 @@
|
||||||
secObjects
|
secObjects
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
dwgR::dwgR(const char* name){
|
dwgR::dwgR(){
|
||||||
DRW_DBGSL(DRW_dbg::NONE);
|
DRW_DBGSL(DRW_dbg::NONE);
|
||||||
fileName = name;
|
|
||||||
reader = NULL;
|
reader = NULL;
|
||||||
// writer = NULL;
|
// writer = NULL;
|
||||||
applyExt = false;
|
applyExt = false;
|
||||||
|
@ -62,11 +61,10 @@ void dwgR::setDebug(DRW::DBG_LEVEL lvl){
|
||||||
}
|
}
|
||||||
|
|
||||||
/*reads metadata and loads image preview*/
|
/*reads metadata and loads image preview*/
|
||||||
bool dwgR::getPreview(){
|
bool dwgR::getPreview(std::istream &stream){
|
||||||
bool isOk = false;
|
bool isOk = false;
|
||||||
|
|
||||||
std::ifstream filestr;
|
isOk = open(&stream);
|
||||||
isOk = openFile(&filestr);
|
|
||||||
if (!isOk)
|
if (!isOk)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -76,7 +74,6 @@ bool dwgR::getPreview(){
|
||||||
} else
|
} else
|
||||||
error = DRW::BAD_READ_METADATA;
|
error = DRW::BAD_READ_METADATA;
|
||||||
|
|
||||||
filestr.close();
|
|
||||||
if (reader != NULL) {
|
if (reader != NULL) {
|
||||||
delete reader;
|
delete reader;
|
||||||
reader = NULL;
|
reader = NULL;
|
||||||
|
@ -84,70 +81,13 @@ bool dwgR::getPreview(){
|
||||||
return isOk;
|
return isOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dwgR::testReader(){
|
bool dwgR::read(std::istream &stream, DRW_Interface *interface_, bool ext){
|
||||||
bool isOk = false;
|
|
||||||
|
|
||||||
std::ifstream filestr;
|
|
||||||
filestr.open (fileName.c_str(), std::ios_base::in | std::ios::binary);
|
|
||||||
if (!filestr.is_open() || !filestr.good() ){
|
|
||||||
error = DRW::BAD_OPEN;
|
|
||||||
return isOk;
|
|
||||||
}
|
|
||||||
|
|
||||||
dwgBuffer fileBuf(&filestr);
|
|
||||||
duint8 *tmpStrData = new duint8[fileBuf.size()];
|
|
||||||
fileBuf.getBytes(tmpStrData, fileBuf.size());
|
|
||||||
dwgBuffer dataBuf(tmpStrData, fileBuf.size());
|
|
||||||
fileBuf.setPosition(0);
|
|
||||||
DRW_DBG("\ndwgR::testReader filebuf size: ");DRW_DBG(fileBuf.size());
|
|
||||||
DRW_DBG("\ndwgR::testReader dataBuf size: ");DRW_DBG(dataBuf.size());
|
|
||||||
DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition());
|
|
||||||
DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition());
|
|
||||||
DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos());
|
|
||||||
DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos());
|
|
||||||
DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8());
|
|
||||||
DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8());
|
|
||||||
fileBuf.setBitPos(4);
|
|
||||||
dataBuf.setBitPos(4);
|
|
||||||
DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8());
|
|
||||||
DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8());
|
|
||||||
DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition());
|
|
||||||
DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition());
|
|
||||||
DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos());
|
|
||||||
DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos());
|
|
||||||
fileBuf.setBitPos(6);
|
|
||||||
dataBuf.setBitPos(6);
|
|
||||||
DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition());
|
|
||||||
DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition());
|
|
||||||
DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos());
|
|
||||||
DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos());
|
|
||||||
DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8());
|
|
||||||
DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8());
|
|
||||||
fileBuf.setBitPos(0);
|
|
||||||
dataBuf.setBitPos(0);
|
|
||||||
DRW_DBG("\n filebuf first byte : ");DRW_DBGH(fileBuf.getRawChar8());
|
|
||||||
DRW_DBG("\n dataBuf first byte : ");DRW_DBGH(dataBuf.getRawChar8());
|
|
||||||
DRW_DBG("\n filebuf pos: ");DRW_DBG(fileBuf.getPosition());
|
|
||||||
DRW_DBG("\n dataBuf pos: ");DRW_DBG(dataBuf.getPosition());
|
|
||||||
DRW_DBG("\n filebuf bitpos: ");DRW_DBG(fileBuf.getBitPos());
|
|
||||||
DRW_DBG("\n dataBuf bitpos: ");DRW_DBG(dataBuf.getBitPos());
|
|
||||||
|
|
||||||
delete[]tmpStrData;
|
|
||||||
filestr.close();
|
|
||||||
DRW_DBG("\n\n");
|
|
||||||
return isOk;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*start reading dwg file header and, if can read it, continue reading all*/
|
|
||||||
bool dwgR::read(DRW_Interface *interface_, bool ext){
|
|
||||||
bool isOk = false;
|
|
||||||
applyExt = ext;
|
applyExt = ext;
|
||||||
iface = interface_;
|
iface = interface_;
|
||||||
|
|
||||||
//testReader();return false;
|
bool isOk = false;
|
||||||
|
|
||||||
std::ifstream filestr;
|
isOk = open(&stream);
|
||||||
isOk = openFile(&filestr);
|
|
||||||
if (!isOk)
|
if (!isOk)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -161,7 +101,6 @@ bool dwgR::read(DRW_Interface *interface_, bool ext){
|
||||||
} else
|
} else
|
||||||
error = DRW::BAD_READ_METADATA;
|
error = DRW::BAD_READ_METADATA;
|
||||||
|
|
||||||
filestr.close();
|
|
||||||
if (reader != NULL) {
|
if (reader != NULL) {
|
||||||
delete reader;
|
delete reader;
|
||||||
reader = NULL;
|
reader = NULL;
|
||||||
|
@ -170,23 +109,9 @@ bool dwgR::read(DRW_Interface *interface_, bool ext){
|
||||||
return isOk;
|
return isOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open the file and stores it in filestr, install the correct reader version.
|
bool dwgR::open(std::istream *stream){
|
||||||
* If fail opening file, error are set as DRW::BAD_OPEN
|
|
||||||
* If not are DWG or are unsupported version, error are set as DRW::BAD_VERSION
|
|
||||||
* and closes filestr.
|
|
||||||
* Return true on succeed or false on fail
|
|
||||||
*/
|
|
||||||
bool dwgR::openFile(std::ifstream *filestr){
|
|
||||||
bool isOk = false;
|
|
||||||
DRW_DBG("dwgR::read 1\n");
|
|
||||||
filestr->open (fileName.c_str(), std::ios_base::in | std::ios::binary);
|
|
||||||
if (!filestr->is_open() || !filestr->good() ){
|
|
||||||
error = DRW::BAD_OPEN;
|
|
||||||
return isOk;
|
|
||||||
}
|
|
||||||
|
|
||||||
char line[7];
|
char line[7];
|
||||||
filestr->read (line, 6);
|
stream->read (line, 6);
|
||||||
line[6]='\0';
|
line[6]='\0';
|
||||||
DRW_DBG("dwgR::read 2\n");
|
DRW_DBG("dwgR::read 2\n");
|
||||||
DRW_DBG("dwgR::read line version: ");
|
DRW_DBG("dwgR::read line version: ");
|
||||||
|
@ -200,35 +125,33 @@ bool dwgR::openFile(std::ifstream *filestr){
|
||||||
// reader = new dwgReader09(&filestr, this);
|
// reader = new dwgReader09(&filestr, this);
|
||||||
}else if (strcmp(line, "AC1012") == 0){
|
}else if (strcmp(line, "AC1012") == 0){
|
||||||
version = DRW::AC1012;
|
version = DRW::AC1012;
|
||||||
reader = new dwgReader15(filestr, this);
|
reader = new dwgReader15(stream, this);
|
||||||
} else if (strcmp(line, "AC1014") == 0) {
|
} else if (strcmp(line, "AC1014") == 0) {
|
||||||
version = DRW::AC1014;
|
version = DRW::AC1014;
|
||||||
reader = new dwgReader15(filestr, this);
|
reader = new dwgReader15(stream, this);
|
||||||
} else if (strcmp(line, "AC1015") == 0) {
|
} else if (strcmp(line, "AC1015") == 0) {
|
||||||
version = DRW::AC1015;
|
version = DRW::AC1015;
|
||||||
reader = new dwgReader15(filestr, this);
|
reader = new dwgReader15(stream, this);
|
||||||
} else if (strcmp(line, "AC1018") == 0){
|
} else if (strcmp(line, "AC1018") == 0){
|
||||||
version = DRW::AC1018;
|
version = DRW::AC1018;
|
||||||
reader = new dwgReader18(filestr, this);
|
reader = new dwgReader18(stream, this);
|
||||||
} else if (strcmp(line, "AC1021") == 0) {
|
} else if (strcmp(line, "AC1021") == 0) {
|
||||||
version = DRW::AC1021;
|
version = DRW::AC1021;
|
||||||
reader = new dwgReader21(filestr, this);
|
reader = new dwgReader21(stream, this);
|
||||||
} else if (strcmp(line, "AC1024") == 0) {
|
} else if (strcmp(line, "AC1024") == 0) {
|
||||||
version = DRW::AC1024;
|
version = DRW::AC1024;
|
||||||
reader = new dwgReader24(filestr, this);
|
reader = new dwgReader24(stream, this);
|
||||||
} else if (strcmp(line, "AC1027") == 0) {
|
} else if (strcmp(line, "AC1027") == 0) {
|
||||||
version = DRW::AC1027;
|
version = DRW::AC1027;
|
||||||
reader = new dwgReader27(filestr, this);
|
reader = new dwgReader27(stream, this);
|
||||||
} else
|
} else
|
||||||
version = DRW::UNKNOWNV;
|
version = DRW::UNKNOWNV;
|
||||||
|
|
||||||
if (reader == NULL) {
|
if (reader == NULL) {
|
||||||
error = DRW::BAD_VERSION;
|
error = DRW::BAD_VERSION;
|
||||||
filestr->close();
|
return false;
|
||||||
} else
|
}
|
||||||
isOk = true;
|
return true;
|
||||||
|
|
||||||
return isOk;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/********* Reader Process *********/
|
/********* Reader Process *********/
|
||||||
|
|
|
@ -24,18 +24,17 @@ class dwgReader;
|
||||||
|
|
||||||
class dwgR {
|
class dwgR {
|
||||||
public:
|
public:
|
||||||
dwgR(const char* name);
|
dwgR();
|
||||||
~dwgR();
|
~dwgR();
|
||||||
//read: return true if all ok
|
//read: return true if all ok
|
||||||
bool read(DRW_Interface *interface_, bool ext);
|
bool read(std::istream &stream, DRW_Interface *interface_, bool ext);
|
||||||
bool getPreview();
|
bool getPreview(std::istream &stream);
|
||||||
DRW::Version getVersion(){return version;}
|
DRW::Version getVersion(){return version;}
|
||||||
DRW::error getError(){return error;}
|
DRW::error getError(){return error;}
|
||||||
bool testReader();
|
|
||||||
void setDebug(DRW::DBG_LEVEL lvl);
|
void setDebug(DRW::DBG_LEVEL lvl);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool openFile(std::ifstream *filestr);
|
bool open(std::istream *stream);
|
||||||
bool processDwg();
|
bool processDwg();
|
||||||
private:
|
private:
|
||||||
DRW::Version version;
|
DRW::Version version;
|
||||||
|
|
|
@ -423,8 +423,6 @@ bool dxfRW::writeDimstyle(DRW_Dimstyle *ent){
|
||||||
writer->writeDouble(46, ent->dimdle);
|
writer->writeDouble(46, ent->dimdle);
|
||||||
writer->writeDouble(47, ent->dimtp);
|
writer->writeDouble(47, ent->dimtp);
|
||||||
writer->writeDouble(48, ent->dimtm);
|
writer->writeDouble(48, ent->dimtm);
|
||||||
if ( version > DRW::AC1018 || ent->dimfxl !=0 )
|
|
||||||
writer->writeDouble(49, ent->dimfxl);
|
|
||||||
writer->writeDouble(140, ent->dimtxt);
|
writer->writeDouble(140, ent->dimtxt);
|
||||||
writer->writeDouble(141, ent->dimcen);
|
writer->writeDouble(141, ent->dimcen);
|
||||||
writer->writeDouble(142, ent->dimtsz);
|
writer->writeDouble(142, ent->dimtsz);
|
||||||
|
@ -489,9 +487,7 @@ bool dxfRW::writeDimstyle(DRW_Dimstyle *ent){
|
||||||
if (version > DRW::AC1014) {
|
if (version > DRW::AC1014) {
|
||||||
writer->writeInt16(289, ent->dimatfit);
|
writer->writeInt16(289, ent->dimatfit);
|
||||||
}
|
}
|
||||||
if ( version > DRW::AC1018 && ent->dimfxlon !=0 )
|
if (version > DRW::AC1009 && !ent->dimtxsty.empty()) {
|
||||||
writer->writeInt16(290, ent->dimfxlon);
|
|
||||||
if (version > DRW::AC1009) {
|
|
||||||
writer->writeUtf8String(340, ent->dimtxsty);
|
writer->writeUtf8String(340, ent->dimtxsty);
|
||||||
}
|
}
|
||||||
if (version > DRW::AC1014) {
|
if (version > DRW::AC1014) {
|
||||||
|
@ -735,7 +731,7 @@ bool dxfRW::writeLWPolyline(DRW_LWPolyline *ent){
|
||||||
if (version > DRW::AC1009) {
|
if (version > DRW::AC1009) {
|
||||||
writer->writeString(100, "AcDbPolyline");
|
writer->writeString(100, "AcDbPolyline");
|
||||||
}
|
}
|
||||||
ent->vertexnum = ent->vertlist.size();
|
ent->vertexnum = (int)ent->vertlist.size();
|
||||||
writer->writeInt32(90, ent->vertexnum);
|
writer->writeInt32(90, ent->vertexnum);
|
||||||
writer->writeInt16(70, ent->flags);
|
writer->writeInt16(70, ent->flags);
|
||||||
writer->writeDouble(43, ent->width);
|
writer->writeDouble(43, ent->width);
|
||||||
|
@ -763,11 +759,14 @@ bool dxfRW::writeLWPolyline(DRW_LWPolyline *ent){
|
||||||
bool dxfRW::writePolyline(DRW_Polyline *ent) {
|
bool dxfRW::writePolyline(DRW_Polyline *ent) {
|
||||||
writer->writeString(0, "POLYLINE");
|
writer->writeString(0, "POLYLINE");
|
||||||
writeEntity(ent);
|
writeEntity(ent);
|
||||||
|
bool is3d = false;
|
||||||
if (version > DRW::AC1009) {
|
if (version > DRW::AC1009) {
|
||||||
if (ent->flags & 8 || ent->flags & 16)
|
if (ent->flags & 8 || ent->flags & 16) {
|
||||||
writer->writeString(100, "AcDb2dPolyline");
|
|
||||||
else
|
|
||||||
writer->writeString(100, "AcDb3dPolyline");
|
writer->writeString(100, "AcDb3dPolyline");
|
||||||
|
is3d = true;
|
||||||
|
} else {
|
||||||
|
writer->writeString(100, "AcDb2dPolyline");
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
writer->writeInt16(66, 1);
|
writer->writeInt16(66, 1);
|
||||||
writer->writeDouble(10, 0.0);
|
writer->writeDouble(10, 0.0);
|
||||||
|
@ -803,13 +802,18 @@ bool dxfRW::writePolyline(DRW_Polyline *ent) {
|
||||||
writer->writeDouble(230, crd.z);
|
writer->writeDouble(230, crd.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
int vertexnum = ent->vertlist.size();
|
size_t vertexnum = ent->vertlist.size();
|
||||||
for (int i = 0; i< vertexnum; i++){
|
for (size_t i = 0; i < vertexnum; i++) {
|
||||||
DRW_Vertex *v = ent->vertlist.at(i);
|
DRW_Vertex *v = ent->vertlist.at(i);
|
||||||
writer->writeString(0, "VERTEX");
|
writer->writeString(0, "VERTEX");
|
||||||
writeEntity(ent);
|
writeEntity(ent);
|
||||||
if (version > DRW::AC1009)
|
if (version > DRW::AC1009)
|
||||||
writer->writeString(100, "AcDbVertex");
|
writer->writeString(100, "AcDbVertex");
|
||||||
|
if(is3d) {
|
||||||
|
writer->writeString(100, "AcDb3dPolylineVertex");
|
||||||
|
} else {
|
||||||
|
writer->writeString(100, "AcDb2dVertex");
|
||||||
|
}
|
||||||
if ( (v->flags & 128) && !(v->flags & 64) ) {
|
if ( (v->flags & 128) && !(v->flags & 64) ) {
|
||||||
writer->writeDouble(10, 0);
|
writer->writeDouble(10, 0);
|
||||||
writer->writeDouble(20, 0);
|
writer->writeDouble(20, 0);
|
||||||
|
@ -875,6 +879,9 @@ bool dxfRW::writeSpline(DRW_Spline *ent){
|
||||||
for (int i = 0; i< ent->nknots; i++){
|
for (int i = 0; i< ent->nknots; i++){
|
||||||
writer->writeDouble(40, ent->knotslist.at(i));
|
writer->writeDouble(40, ent->knotslist.at(i));
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i< (int)ent->weightlist.size(); i++) {
|
||||||
|
writer->writeDouble(41, ent->weightlist.at(i));
|
||||||
|
}
|
||||||
for (int i = 0; i< ent->ncontrol; i++){
|
for (int i = 0; i< ent->ncontrol; i++){
|
||||||
DRW_Coord *crd = ent->controllist.at(i);
|
DRW_Coord *crd = ent->controllist.at(i);
|
||||||
writer->writeDouble(10, crd->x);
|
writer->writeDouble(10, crd->x);
|
||||||
|
@ -901,7 +908,7 @@ bool dxfRW::writeHatch(DRW_Hatch *ent){
|
||||||
writer->writeString(2, ent->name);
|
writer->writeString(2, ent->name);
|
||||||
writer->writeInt16(70, ent->solid);
|
writer->writeInt16(70, ent->solid);
|
||||||
writer->writeInt16(71, ent->associative);
|
writer->writeInt16(71, ent->associative);
|
||||||
ent->loopsnum = ent->looplist.size();
|
ent->loopsnum = (int)ent->looplist.size();
|
||||||
writer->writeInt16(91, ent->loopsnum);
|
writer->writeInt16(91, ent->loopsnum);
|
||||||
//write paths data
|
//write paths data
|
||||||
for (int i = 0; i< ent->loopsnum; i++){
|
for (int i = 0; i< ent->loopsnum; i++){
|
||||||
|
@ -1031,6 +1038,8 @@ bool dxfRW::writeDimension(DRW_Dimension *ent) {
|
||||||
writer->writeDouble(210, ent->getExtrusion().x);
|
writer->writeDouble(210, ent->getExtrusion().x);
|
||||||
writer->writeDouble(220, ent->getExtrusion().y);
|
writer->writeDouble(220, ent->getExtrusion().y);
|
||||||
writer->writeDouble(230, ent->getExtrusion().z);
|
writer->writeDouble(230, ent->getExtrusion().z);
|
||||||
|
if ( ent->hasActualMeasurement())
|
||||||
|
writer->writeDouble(42, ent->getActualMeasurement());
|
||||||
|
|
||||||
switch (ent->eType) {
|
switch (ent->eType) {
|
||||||
case DRW::DIMALIGNED:
|
case DRW::DIMALIGNED:
|
||||||
|
@ -1765,15 +1774,15 @@ bool dxfRW::writeObjects() {
|
||||||
|
|
||||||
bool dxfRW::writeExtData(const std::vector<DRW_Variant*> &ed){
|
bool dxfRW::writeExtData(const std::vector<DRW_Variant*> &ed){
|
||||||
for (std::vector<DRW_Variant*>::const_iterator it=ed.begin(); it!=ed.end(); ++it){
|
for (std::vector<DRW_Variant*>::const_iterator it=ed.begin(); it!=ed.end(); ++it){
|
||||||
switch ((*it)->code()) {
|
switch ((*it)->code) {
|
||||||
case 1000:
|
case 1000:
|
||||||
case 1001:
|
case 1001:
|
||||||
case 1002:
|
case 1002:
|
||||||
case 1003:
|
case 1003:
|
||||||
case 1004:
|
case 1004:
|
||||||
case 1005:
|
case 1005:
|
||||||
{int cc = (*it)->code();
|
{int cc = (*it)->code;
|
||||||
if ((*it)->type() == DRW_Variant::STRING)
|
if ((*it)->type == DRW_Variant::STRING)
|
||||||
writer->writeUtf8String(cc, *(*it)->content.s);
|
writer->writeUtf8String(cc, *(*it)->content.s);
|
||||||
// writer->writeUtf8String((*it)->code, (*it)->content.s);
|
// writer->writeUtf8String((*it)->code, (*it)->content.s);
|
||||||
break;}
|
break;}
|
||||||
|
@ -1781,25 +1790,25 @@ bool dxfRW::writeExtData(const std::vector<DRW_Variant*> &ed){
|
||||||
case 1011:
|
case 1011:
|
||||||
case 1012:
|
case 1012:
|
||||||
case 1013:
|
case 1013:
|
||||||
if ((*it)->type() == DRW_Variant::COORD) {
|
if ((*it)->type == DRW_Variant::COORD) {
|
||||||
writer->writeDouble((*it)->code(), (*it)->content.v->x);
|
writer->writeDouble((*it)->code, (*it)->content.v->x);
|
||||||
writer->writeDouble((*it)->code()+10 , (*it)->content.v->y);
|
writer->writeDouble((*it)->code+10 , (*it)->content.v->y);
|
||||||
writer->writeDouble((*it)->code()+20 , (*it)->content.v->z);
|
writer->writeDouble((*it)->code+20 , (*it)->content.v->z);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1040:
|
case 1040:
|
||||||
case 1041:
|
case 1041:
|
||||||
case 1042:
|
case 1042:
|
||||||
if ((*it)->type() == DRW_Variant::DOUBLE)
|
if ((*it)->type == DRW_Variant::DOUBLE)
|
||||||
writer->writeDouble((*it)->code(), (*it)->content.d);
|
writer->writeDouble((*it)->code, (*it)->content.d);
|
||||||
break;
|
break;
|
||||||
case 1070:
|
case 1070:
|
||||||
if ((*it)->type() == DRW_Variant::INTEGER)
|
if ((*it)->type == DRW_Variant::INTEGER)
|
||||||
writer->writeInt16((*it)->code(), (*it)->content.i);
|
writer->writeInt16((*it)->code, (*it)->content.i);
|
||||||
break;
|
break;
|
||||||
case 1071:
|
case 1071:
|
||||||
if ((*it)->type() == DRW_Variant::INTEGER)
|
if ((*it)->type == DRW_Variant::INTEGER)
|
||||||
writer->writeInt32((*it)->code(), (*it)->content.i);
|
writer->writeInt32((*it)->code, (*it)->content.i);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user