[libdxfrw/f19] apply fixes from librecad 2.0.0beta5
Tom Callaway
spot at fedoraproject.org
Tue Apr 30 15:55:37 UTC 2013
commit 6771a1af259e71dd152f38947b2d0d2fdbd9c1c1
Author: Tom Callaway <spot at fedoraproject.org>
Date: Tue Apr 30 11:55:03 2013 -0400
apply fixes from librecad 2.0.0beta5
libdxfrw-0.5.7-librecad-2.0.0beta5-fixes.patch | 1253 ++++++++++++++++++++++++
libdxfrw.spec | 7 +-
2 files changed, 1259 insertions(+), 1 deletions(-)
---
diff --git a/libdxfrw-0.5.7-librecad-2.0.0beta5-fixes.patch b/libdxfrw-0.5.7-librecad-2.0.0beta5-fixes.patch
new file mode 100644
index 0000000..a63d756
--- /dev/null
+++ b/libdxfrw-0.5.7-librecad-2.0.0beta5-fixes.patch
@@ -0,0 +1,1253 @@
+diff -urp libdxfrw-0.5.7/src/drw_base.h libdxfrw-0.5.7.new/src/drw_base.h
+--- libdxfrw-0.5.7/src/drw_base.h 2012-09-03 11:01:23.000000000 -0400
++++ libdxfrw-0.5.7.new/src/drw_base.h 2013-04-14 16:37:18.000000000 -0400
+@@ -13,6 +13,7 @@
+ #ifndef DRW_BASE_H
+ #define DRW_BASE_H
+
++#define DRW_VERSION "0.5.7"
+
+ #include <string>
+ #include <cmath>
+@@ -20,6 +21,7 @@
+ using std::string;
+
+ #define UTF8STRING std::string
++#define DRW_UNUSED(x) (void)x
+
+ #if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
+ # define DRW_WIN
+@@ -31,9 +33,19 @@ using std::string;
+ # define DRW_POSIX
+ #endif
+
++#ifndef M_PI
++ #define M_PI 3.141592653589793238462643
++#endif
++#ifndef M_PI_2
++ #define M_PI_2 1.57079632679489661923
++#endif
++#define M_PIx2 6.283185307179586 // 2*PI
++#define ARAD 57.29577951308232
++
+ namespace DRW {
+ //! Version numbers for the DXF Format.
+ enum Version {
++ UNKNOWNV, /*!< UNKNOWN VERSION. */
+ AC1006, /*!< R10. */
+ AC1009, /*!< R11 & R12. */
+ AC1012, /*!< R13. */
+@@ -44,6 +56,19 @@ enum Version {
+ AC1024 /*!< ACAD 2010. */
+ };
+
++enum error {
++BAD_NONE, /*!< No error. */
++BAD_UNKNOWN, /*!< UNKNOWN. */
++BAD_OPEN, /*!< error opening file. */
++BAD_VERSION, /*!< unsupported version. */
++BAD_READ_FILE_HEADER, /*!< error in file header read process. */
++BAD_READ_HEADER, /*!< error in header vars read process. */
++BAD_READ_OFFSETS, /*!< error in object map read process. */
++BAD_READ_CLASSES, /*!< error in classes read process. */
++BAD_READ_TABLES, /*!< error in tables read process. */
++BAD_READ_ENTITIES /*!< error in entities read process. */
++};
++
+ }
+
+ //! Class to handle 3D coordinate point
+@@ -161,6 +186,118 @@ private:
+ };
+
+
++//! Class to convert between line width and integer
++/*!
++* Class to convert between line width and integer
++* verifing valid values, if value is not valid
++* returns widthDefault.
++* @author Rallaz
++*/
++class DRW_LW_Conv{
++public:
++ enum lineWidth {
++ width00 = 0, /*!< 0.00mm */
++ width01 = 1, /*!< 0.05mm */
++ width02 = 2, /*!< 0.09mm */
++ width03 = 3, /*!< 0.13mm */
++ width04 = 4, /*!< 0.15mm */
++ width05 = 5, /*!< 0.18mm */
++ width06 = 6, /*!< 0.20mm */
++ width07 = 7, /*!< 0.25mm */
++ width08 = 8, /*!< 0.30mm */
++ width09 = 9, /*!< 0.35mm */
++ width10 = 10, /*!< 0.40mm */
++ width11 = 11, /*!< 0.50mm */
++ width12 = 12, /*!< 0.53mm */
++ width13 = 13, /*!< 0.60mm */
++ width14 = 14, /*!< 0.70mm */
++ width15 = 15, /*!< 0.80mm */
++ width16 = 16, /*!< 0.90mm */
++ width17 = 17, /*!< 1.00mm */
++ width18 = 18, /*!< 1.06mm */
++ width19 = 19, /*!< 1.20mm */
++ width20 = 20, /*!< 1.40mm */
++ width21 = 21, /*!< 1.58mm */
++ width22 = 22, /*!< 2.00mm */
++ width23 = 23, /*!< 2.11mm */
++ widthByLayer = 29, /*!< by layer (dxf -1) */
++ widthByBlock = 30, /*!< by block (dxf -2) */
++ widthDefault = 31 /*!< by default (dxf -3) */
++ };
++
++ static int lineWidth2int(enum lineWidth lw){
++ return static_cast<int> (lw);
++ }
++
++ static enum lineWidth dxfInt2lineWidth(int i){
++ if (i<0) {
++ if (i==-1)
++ return widthByLayer;
++ else if (i==-2)
++ return widthByBlock;
++ else if (i==-3)
++ return widthDefault;
++ } else if (i<3) {
++ return width00;
++ } else if (i<7) {
++ return width01;
++ } else if (i<11) {
++ return width02;
++ } else if (i<14) {
++ return width03;
++ } else if (i<16) {
++ return width04;
++ } else if (i<19) {
++ return width05;
++ } else if (i<22) {
++ return width06;
++ } else if (i<27) {
++ return width07;
++ } else if (i<32) {
++ return width08;
++ } else if (i<37) {
++ return width09;
++ } else if (i<45) {
++ return width10;
++ } else if (i<52) {
++ return width11;
++ } else if (i<57) {
++ return width12;
++ } else if (i<65) {
++ return width13;
++ } else if (i<75) {
++ return width14;
++ } else if (i<85) {
++ return width15;
++ } else if (i<95) {
++ return width16;
++ } else if (i<103) {
++ return width17;
++ } else if (i<112) {
++ return width18;
++ } else if (i<130) {
++ return width19;
++ } else if (i<149) {
++ return width20;
++ } else if (i<180) {
++ return width21;
++ } else if (i<205) {
++ return width22;
++ } else {
++ return width23;
++ }
++ //default by default
++ return widthDefault;
++ }
++
++ static enum lineWidth dwgInt2lineWidth(int i){
++ if ( (i>-1 && i<24) || (i>28 && i<32) ) {
++ return static_cast<lineWidth> (i);
++ }
++ //default by default
++ return widthDefault;
++ }
++};
+
+ #endif
+
+diff -urp libdxfrw-0.5.7/src/drw_entities.cpp libdxfrw-0.5.7.new/src/drw_entities.cpp
+--- libdxfrw-0.5.7/src/drw_entities.cpp 2013-02-19 10:36:29.000000000 -0500
++++ libdxfrw-0.5.7.new/src/drw_entities.cpp 2013-04-14 16:37:18.000000000 -0400
+@@ -17,7 +17,7 @@
+
+ //! Calculate arbitary axis
+ /*!
+-* Calculate arbitary axis for aplly extrusions
++* Calculate arbitary axis for apply extrusions
+ * @author Rallaz
+ */
+ void DRW_Entity::calculateAxis(DRW_Coord extPoint){
+@@ -70,9 +70,7 @@ void DRW_Entity::parseCode(int code, dxf
+ color = reader->getInt32();
+ break;
+ case 370:
+-// lWeight = (DRW::LWEIGHT)reader->getInt32();
+-//RLZ: TODO as integer or enum??
+- lWeight = reader->getInt32();
++ lWeight = DRW_LW_Conv::dxfInt2lineWidth(reader->getInt32());
+ break;
+ case 48:
+ ltypeScale = reader->getDouble();
+@@ -162,10 +160,10 @@ void DRW_Circle::parseCode(int code, dxf
+ void DRW_Arc::parseCode(int code, dxfReader *reader){
+ switch (code) {
+ case 50:
+- staangle = reader->getDouble();
++ staangle = reader->getDouble()/ ARAD;
+ break;
+ case 51:
+- endangle = reader->getDouble();
++ endangle = reader->getDouble()/ ARAD;
+ break;
+ default:
+ DRW_Circle::parseCode(code, reader);
+@@ -190,6 +188,32 @@ void DRW_Ellipse::parseCode(int code, dx
+ }
+ }
+
++//if ratio > 1 minor axis are greather than major axis, correct it
++void DRW_Ellipse::correctAxis(){
++ bool complete = false;
++ if (staparam == endparam) {
++ staparam = 0.0;
++ endparam = M_PIx2; //2*M_PI;
++ complete = true;
++ }
++ if (ratio > 1){
++ if ( fabs(endparam - staparam - M_PIx2) < 1.0e-10)
++ complete = true;
++ double incX = secPoint.x;
++ secPoint.x = -(secPoint.y * ratio);
++ secPoint.y = incX*ratio;
++ ratio = 1/ratio;
++ if (!complete){
++ if (staparam < M_PI_2)
++ staparam += M_PI *2;
++ if (endparam < M_PI_2)
++ endparam += M_PI *2;
++ endparam -= M_PI_2;
++ staparam -= M_PI_2;
++ }
++ }
++}
++
+ void DRW_Ellipse::toPolyline(DRW_Polyline *pol){
+ double radMajor, radMinor, cosRot, sinRot, incAngle, curAngle;
+ double cosCurr, sinCurr;
+@@ -213,7 +237,7 @@ void DRW_Ellipse::toPolyline(DRW_Polylin
+ pol->addVertex( DRW_Vertex(x, y, 0.0, 0.0));
+ curAngle = (++i)*incAngle;
+ } while (i<128);
+- if ( fabs(endparam - 6.28318530718) < 1.0e-10){
++ if ( fabs(endparam - staparam - M_PIx2) < 1.0e-10){
+ pol->flags = 1;
+ }
+ pol->layer = this->layer;
+@@ -361,6 +385,9 @@ void DRW_LWPolyline::parseCode(int code,
+ case 38:
+ elevation = reader->getDouble();
+ break;
++ case 39:
++ thickness = reader->getDouble();
++ break;
+ case 43:
+ width = reader->getDouble();
+ break;
+@@ -574,12 +601,12 @@ void DRW_Hatch::parseCode(int code, dxfR
+ if (plvert) plvert ->bulge = reader->getDouble();
+ break;
+ case 50:
+- if (arc) arc->staangle = reader->getDouble();
+- else if (ellipse) ellipse->staparam = reader->getDouble();
++ if (arc) arc->staangle = reader->getDouble()/ARAD;
++ else if (ellipse) ellipse->staparam = reader->getDouble()/ARAD;
+ break;
+ case 51:
+- if (arc) arc->endangle = reader->getDouble();
+- else if (ellipse) ellipse->endparam = reader->getDouble();
++ if (arc) arc->endangle = reader->getDouble()/ARAD;
++ else if (ellipse) ellipse->endparam = reader->getDouble()/ARAD;
+ break;
+ case 52:
+ angle = reader->getDouble();
+diff -urp libdxfrw-0.5.7/src/drw_entities.h libdxfrw-0.5.7.new/src/drw_entities.h
+--- libdxfrw-0.5.7/src/drw_entities.h 2013-02-19 10:36:29.000000000 -0500
++++ libdxfrw-0.5.7.new/src/drw_entities.h 2013-04-14 16:37:18.000000000 -0400
+@@ -62,17 +62,6 @@ namespace DRW {
+ UNKNOWN
+ };
+
+- enum LWEIGHT {
+- L0=0,
+- L1,
+- L2,
+- L3,
+- L4,
+- L5,
+- L6,
+- L7
+- };
+-
+ }
+
+ //! Base class for entities
+@@ -90,10 +79,12 @@ public:
+ ltypeScale = 1.0;
+ visible = true;
+ layer = "0";
+- lWeight = -1; // default BYLAYER (-1)
+- space = 0; // default ModelSpace (0)
++ lWeight = DRW_LW_Conv::widthByLayer; // default BYLAYER (dxf -1, dwg 29)
++ handleBlock = space = 0; // default ModelSpace (0) & handleBlock = no handle (0)
+ haveExtrusion = false;
++ color24 = -1; //default -1 not set
+ }
++ virtual~DRW_Entity() {}
+
+ DRW_Entity(const DRW_Entity& d) {
+ eType = d.eType;
+@@ -124,14 +115,12 @@ public:
+ UTF8STRING layer; /*!< layer name, code 8 */
+ UTF8STRING lineType; /*!< line type, code 6 */
+ int color; /*!< entity color, code 62 */
+- //RLZ: TODO as integer or enum??
+- int lWeight; /*!< entity lineweight, code 370 */
+-// enum DRW::LWEIGHT lWeight; /*!< entity lineweight, code 370 */
++ enum DRW_LW_Conv::lineWidth lWeight; /*!< entity lineweight, code 370 */
+ double ltypeScale; /*!< linetype scale, code 48 */
+ bool visible; /*!< entity visibility, code 60 */
+ int color24; /*!< 24-bit color, code 420 */
+ string colorName; /*!< color name, code 430 */
+- int space; /*!< space indicator 0 = model, 1 paper , code 67*/
++ int space; /*!< space indicator 0 = model, 1 paper, code 67*/
+ bool haveExtrusion; /*!< set to true if the entity have extrusion*/
+ private:
+ DRW_Coord extAxisX;
+@@ -240,8 +229,8 @@ public:
+ void parseCode(int code, dxfReader *reader);
+
+ public:
+- double staangle; /*!< x coordinate, code 50 */
+- double endangle; /*!< x coordinate, code 51 */
++ double staangle; /*!< start angle, code 50 in radians*/
++ double endangle; /*!< end angle, code 51 in radians */
+ int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */
+ };
+
+@@ -261,6 +250,7 @@ public:
+
+ void parseCode(int code, dxfReader *reader);
+ void toPolyline(DRW_Polyline *pol);
++ void correctAxis();
+ public:
+ double ratio; /*!< ratio, code 40 */
+ double staparam; /*!< start parameter, code 41, 0.0 for full ellipse*/
+@@ -369,7 +359,7 @@ public:
+ void parseCode(int code, dxfReader *reader);
+
+ public:
+- UTF8STRING name; /*!< block name, code 2 */
++ UTF8STRING name; /*!< block name, code 2 */
+ double xscale; /*!< x scale factor, code 41 */
+ double yscale; /*!< y scale factor, code 42 */
+ double zscale; /*!< z scale factor, code 43 */
+@@ -389,8 +379,8 @@ class DRW_LWPolyline : public DRW_Entity
+ public:
+ DRW_LWPolyline() {
+ eType = DRW::LWPOLYLINE;
+- width = 0;
+- elevation = flags = 0;
++ elevation = thickness = width = 0.0;
++ flags = 0;
+ extPoint.x = extPoint.y = 0;
+ extPoint.z = 1;
+ vertex = NULL;
+@@ -426,6 +416,7 @@ public:
+ int flags; /*!< polyline flag, code 70, default 0 */
+ double width; /*!< constant width, code 43 */
+ double elevation; /*!< elevation, code 38 */
++ double thickness; /*!< thickness, code 39 */
+ DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */
+ DRW_Vertex2D *vertex; /*!< current vertex to add data */
+ std::vector<DRW_Vertex2D *> vertlist; /*!< vertex list */
+@@ -476,7 +467,7 @@ public:
+ double angle; /*!< rotation angle in degrees (360), code 50 */
+ double widthscale; /*!< width factor, code 41 */
+ double oblique; /*!< oblique angle, code 51 */
+- UTF8STRING style; /*!< stile name, code 7 */
++ UTF8STRING style; /*!< style name, code 7 */
+ int textgen; /*!< text generation, code 71 */
+ enum HAlign alignH; /*!< horizontal align, code 72 */
+ enum VAlign alignV; /*!< vertical align, code 73 */
+diff -urp libdxfrw-0.5.7/src/drw_interface.h libdxfrw-0.5.7.new/src/drw_interface.h
+--- libdxfrw-0.5.7/src/drw_interface.h 2012-09-03 11:01:23.000000000 -0400
++++ libdxfrw-0.5.7.new/src/drw_interface.h 2013-04-14 16:37:18.000000000 -0400
+@@ -52,11 +52,20 @@ public:
+ /**
+ * Called for every block. Note: all entities added after this
+ * command go into this block until endBlock() is called.
+- *
++ *
+ * @see endBlock()
+ */
+ virtual void addBlock(const DRW_Block& data) = 0;
+
++ /**
++ * 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 */
+ virtual void endBlock() = 0;
+
+diff -urp libdxfrw-0.5.7/src/drw_objects.cpp libdxfrw-0.5.7.new/src/drw_objects.cpp
+--- libdxfrw-0.5.7/src/drw_objects.cpp 2013-02-19 10:36:29.000000000 -0500
++++ libdxfrw-0.5.7.new/src/drw_objects.cpp 2013-04-14 16:37:18.000000000 -0400
+@@ -319,7 +319,7 @@ void DRW_Layer::parseCode(int code, dxfR
+ plotF = reader->getBool();
+ break;
+ case 370:
+- lWeight = reader->getInt32();
++ lWeight = DRW_LW_Conv::dxfInt2lineWidth(reader->getInt32());
+ break;
+ case 390:
+ handlePlotS = reader->getString();
+@@ -327,6 +327,9 @@ void DRW_Layer::parseCode(int code, dxfR
+ case 347:
+ handlePlotM = reader->getString();
+ break;
++ case 420:
++ color24 = reader->getInt32();
++ break;
+ default:
+ DRW_TableEntry::parseCode(code, reader);
+ break;
+diff -urp libdxfrw-0.5.7/src/drw_objects.h libdxfrw-0.5.7.new/src/drw_objects.h
+--- libdxfrw-0.5.7/src/drw_objects.h 2013-02-19 10:36:29.000000000 -0500
++++ libdxfrw-0.5.7.new/src/drw_objects.h 2013-04-14 16:37:18.000000000 -0400
+@@ -52,6 +52,7 @@ public:
+ tType = DRW::UNKNOWNT;
+ flags = 0;
+ }
++ virtual~DRW_TableEntry() {}
+
+ protected:
+ void parseCode(int code, dxfReader *reader);
+@@ -223,7 +224,8 @@ public:
+ lineType = "CONTINUOUS";
+ color = 7; // default BYLAYER (256)
+ plotF = true; // default TRUE (plot yes)
+- lWeight = -3; // default BYDEFAULT (-3)
++ lWeight = DRW_LW_Conv::widthDefault; // default BYDEFAULT (dxf -3, dwg 31)
++ color24 = -1; //default -1 not set
+ }
+
+ void parseCode(int code, dxfReader *reader);
+@@ -231,8 +233,9 @@ public:
+ public:
+ 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 */
+- int lWeight; /*!< layer lineweight, code 370 */
++ enum DRW_LW_Conv::lineWidth lWeight; /*!< layer lineweight, code 370 */
+ string handlePlotS; /*!< Hard-pointer ID/handle of plotstyle, code 390 */
+ string handlePlotM; /*!< Hard-pointer ID/handle of materialstyle, code 347 */
+ };
+@@ -396,264 +399,265 @@ namespace DRW {
+ // Extended color palette:
+ // The first entry is only for direct indexing starting with [1]
+ // Color 1 is red (1,0,0)
+-const double dxfColors[][3] = {
+- {0,0,0}, // unused
+- {1,0,0}, // 1 red
+- {1,1,0}, // 2 yellow
+- {0,1,0}, // 3 green
+- {0,1,1},
+- {0,0,1},
+- {1,0,1},
+- {1,1,1}, // black or white
+- {0.5,0.5,0.5},
+- {0.75,0.75,0.75},
+- {1,0,0}, // 10
+- {1,0.5,0.5},
+- {0.65,0,0},
+- {0.65,0.325,0.325},
+- {0.5,0,0},
+- {0.5,0.25,0.25},
+- {0.3,0,0},
+- {0.3,0.15,0.15},
+- {0.15,0,0},
+- {0.15,0.075,0.075},
+- {1,0.25,0}, // 20
+- {1,0.625,0.5},
+- {0.65,0.1625,0},
+- {0.65,0.4063,0.325},
+- {0.5,0.125,0},
+- {0.5,0.3125,0.25},
+- {0.3,0.075,0},
+- {0.3,0.1875,0.15},
+- {0.15,0.0375,0},
+- {0.15,0.0938,0.075},
+- {1,0.5,0}, // 30
+- {1,0.75,0.5},
+- {0.65,0.325,0},
+- {0.65,0.4875,0.325},
+- {0.5,0.25,0},
+- {0.5,0.375,0.25},
+- {0.3,0.15,0},
+- {0.3,0.225,0.15},
+- {0.15,0.075,0},
+- {0.15,0.1125,0.075},
+- {1,0.75,0}, // 40
+- {1,0.875,0.5},
+- {0.65,0.4875,0},
+- {0.65,0.5688,0.325},
+- {0.5,0.375,0},
+- {0.5,0.4375,0.25},
+- {0.3,0.225,0},
+- {0.3,0.2625,0.15},
+- {0.15,0.1125,0},
+- {0.15,0.1313,0.075},
+- {1,1,0}, // 50
+- {1,1,0.5},
+- {0.65,0.65,0},
+- {0.65,0.65,0.325},
+- {0.5,0.5,0},
+- {0.5,0.5,0.25},
+- {0.3,0.3,0},
+- {0.3,0.3,0.15},
+- {0.15,0.15,0},
+- {0.15,0.15,0.075},
+- {0.75,1,0}, // 60
+- {0.875,1,0.5},
+- {0.4875,0.65,0},
+- {0.5688,0.65,0.325},
+- {0.375,0.5,0},
+- {0.4375,0.5,0.25},
+- {0.225,0.3,0},
+- {0.2625,0.3,0.15},
+- {0.1125,0.15,0},
+- {0.1313,0.15,0.075},
+- {0.5,1,0}, // 70
+- {0.75,1,0.5},
+- {0.325,0.65,0},
+- {0.4875,0.65,0.325},
+- {0.25,0.5,0},
+- {0.375,0.5,0.25},
+- {0.15,0.3,0},
+- {0.225,0.3,0.15},
+- {0.075,0.15,0},
+- {0.1125,0.15,0.075},
+- {0.25,1,0}, // 80
+- {0.625,1,0.5},
+- {0.1625,0.65,0},
+- {0.4063,0.65,0.325},
+- {0.125,0.5,0},
+- {0.3125,0.5,0.25},
+- {0.075,0.3,0},
+- {0.1875,0.3,0.15},
+- {0.0375,0.15,0},
+- {0.0938,0.15,0.075},
+- {0,1,0}, // 90
+- {0.5,1,0.5},
+- {0,0.65,0},
+- {0.325,0.65,0.325},
+- {0,0.5,0},
+- {0.25,0.5,0.25},
+- {0,0.3,0},
+- {0.15,0.3,0.15},
+- {0,0.15,0},
+- {0.075,0.15,0.075},
+- {0,1,0.25}, // 100
+- {0.5,1,0.625},
+- {0,0.65,0.1625},
+- {0.325,0.65,0.4063},
+- {0,0.5,0.125},
+- {0.25,0.5,0.3125},
+- {0,0.3,0.075},
+- {0.15,0.3,0.1875},
+- {0,0.15,0.0375},
+- {0.075,0.15,0.0938},
+- {0,1,0.5}, // 110
+- {0.5,1,0.75},
+- {0,0.65,0.325},
+- {0.325,0.65,0.4875},
+- {0,0.5,0.25},
+- {0.25,0.5,0.375},
+- {0,0.3,0.15},
+- {0.15,0.3,0.225},
+- {0,0.15,0.075},
+- {0.075,0.15,0.1125},
+- {0,1,0.75}, // 120
+- {0.5,1,0.875},
+- {0,0.65,0.4875},
+- {0.325,0.65,0.5688},
+- {0,0.5,0.375},
+- {0.25,0.5,0.4375},
+- {0,0.3,0.225},
+- {0.15,0.3,0.2625},
+- {0,0.15,0.1125},
+- {0.075,0.15,0.1313},
+- {0,1,1}, // 130
+- {0.5,1,1},
+- {0,0.65,0.65},
+- {0.325,0.65,0.65},
+- {0,0.5,0.5},
+- {0.25,0.5,0.5},
+- {0,0.3,0.3},
+- {0.15,0.3,0.3},
+- {0,0.15,0.15},
+- {0.075,0.15,0.15},
+- {0,0.75,1}, // 140
+- {0.5,0.875,1},
+- {0,0.4875,0.65},
+- {0.325,0.5688,0.65},
+- {0,0.375,0.5},
+- {0.25,0.4375,0.5},
+- {0,0.225,0.3},
+- {0.15,0.2625,0.3},
+- {0,0.1125,0.15},
+- {0.075,0.1313,0.15},
+- {0,0.5,1}, // 150
+- {0.5,0.75,1},
+- {0,0.325,0.65},
+- {0.325,0.4875,0.65},
+- {0,0.25,0.5},
+- {0.25,0.375,0.5},
+- {0,0.15,0.3},
+- {0.15,0.225,0.3},
+- {0,0.075,0.15},
+- {0.075,0.1125,0.15},
+- {0,0.25,1}, // 160
+- {0.5,0.625,1},
+- {0,0.1625,0.65},
+- {0.325,0.4063,0.65},
+- {0,0.125,0.5},
+- {0.25,0.3125,0.5},
+- {0,0.075,0.3},
+- {0.15,0.1875,0.3},
+- {0,0.0375,0.15},
+- {0.075,0.0938,0.15},
+- {0,0,1}, // 170
+- {0.5,0.5,1},
+- {0,0,0.65},
+- {0.325,0.325,0.65},
+- {0,0,0.5},
+- {0.25,0.25,0.5},
+- {0,0,0.3},
+- {0.15,0.15,0.3},
+- {0,0,0.15},
+- {0.075,0.075,0.15},
+- {0.25,0,1}, // 180
+- {0.625,0.5,1},
+- {0.1625,0,0.65},
+- {0.4063,0.325,0.65},
+- {0.125,0,0.5},
+- {0.3125,0.25,0.5},
+- {0.075,0,0.3},
+- {0.1875,0.15,0.3},
+- {0.0375,0,0.15},
+- {0.0938,0.075,0.15},
+- {0.5,0,1}, // 190
+- {0.75,0.5,1},
+- {0.325,0,0.65},
+- {0.4875,0.325,0.65},
+- {0.25,0,0.5},
+- {0.375,0.25,0.5},
+- {0.15,0,0.3},
+- {0.225,0.15,0.3},
+- {0.075,0,0.15},
+- {0.1125,0.075,0.15},
+- {0.75,0,1}, // 200
+- {0.875,0.5,1},
+- {0.4875,0,0.65},
+- {0.5688,0.325,0.65},
+- {0.375,0,0.5},
+- {0.4375,0.25,0.5},
+- {0.225,0,0.3},
+- {0.2625,0.15,0.3},
+- {0.1125,0,0.15},
+- {0.1313,0.075,0.15},
+- {1,0,1}, // 210
+- {1,0.5,1},
+- {0.65,0,0.65},
+- {0.65,0.325,0.65},
+- {0.5,0,0.5},
+- {0.5,0.25,0.5},
+- {0.3,0,0.3},
+- {0.3,0.15,0.3},
+- {0.15,0,0.15},
+- {0.15,0.075,0.15},
+- {1,0,0.75}, // 220
+- {1,0.5,0.875},
+- {0.65,0,0.4875},
+- {0.65,0.325,0.5688},
+- {0.5,0,0.375},
+- {0.5,0.25,0.4375},
+- {0.3,0,0.225},
+- {0.3,0.15,0.2625},
+- {0.15,0,0.1125},
+- {0.15,0.075,0.1313},
+- {1,0,0.5}, // 230
+- {1,0.5,0.75},
+- {0.65,0,0.325},
+- {0.65,0.325,0.4875},
+- {0.5,0,0.25},
+- {0.5,0.25,0.375},
+- {0.3,0,0.15},
+- {0.3,0.15,0.225},
+- {0.15,0,0.075},
+- {0.15,0.075,0.1125},
+- {1,0,0.25}, // 240
+- {1,0.5,0.625},
+- {0.65,0,0.1625},
+- {0.65,0.325,0.4063},
+- {0.5,0,0.125},
+- {0.5,0.25,0.3125},
+- {0.3,0,0.075},
+- {0.3,0.15,0.1875},
+- {0.15,0,0.0375},
+- {0.15,0.075,0.0938},
+- {0.33,0.33,0.33}, // 250
+- {0.464,0.464,0.464},
+- {0.598,0.598,0.598},
+- {0.732,0.732,0.732},
+- {0.866,0.866,0.866},
+- {1,1,1} // 255
+- } ;
++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
+diff -urp libdxfrw-0.5.7/src/drw_textcodec.cpp libdxfrw-0.5.7.new/src/drw_textcodec.cpp
+--- libdxfrw-0.5.7/src/drw_textcodec.cpp 2013-02-18 14:51:41.000000000 -0500
++++ libdxfrw-0.5.7.new/src/drw_textcodec.cpp 2013-04-14 16:37:18.000000000 -0400
+@@ -181,9 +181,15 @@ std::string DRW_Converter::encodeText(st
+ std::string DRW_Converter::decodeText(int c){
+ std::string res = "\\U+";
+ std::string num;
++#if defined(__APPLE__)
++ char str [16];
++ sprintf ( str, "%04X", c );
++ num = str;
++#else
+ std::stringstream ss;
+ ss << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << c;
+ ss >> num;
++#endif
+ res += num;
+ return res;
+ }
+diff -urp libdxfrw-0.5.7/src/drw_textcodec.h libdxfrw-0.5.7.new/src/drw_textcodec.h
+--- libdxfrw-0.5.7/src/drw_textcodec.h 2013-02-18 14:51:41.000000000 -0500
++++ libdxfrw-0.5.7.new/src/drw_textcodec.h 2013-04-14 16:37:18.000000000 -0400
+@@ -14,7 +14,9 @@ public:
+ std::string toUtf8(std::string s);
+ int getVersion(){return version;}
+ void setVersion(std::string *v);
++ void setVersion(int v){version = v;}
+ void setCodePage(std::string *c);
++ void setCodePage(std::string c){setCodePage(&c);}
+ std::string getCodePage(){return cp;}
+
+ private:
+diff -urp libdxfrw-0.5.7/src/libdxfrw.cpp libdxfrw-0.5.7.new/src/libdxfrw.cpp
+--- libdxfrw-0.5.7/src/libdxfrw.cpp 2013-02-19 10:36:29.000000000 -0500
++++ libdxfrw-0.5.7.new/src/libdxfrw.cpp 2013-04-14 16:37:18.000000000 -0400
+@@ -18,9 +18,7 @@
+ #include "drw_textcodec.h"
+ #include "dxfreader.h"
+ #include "dxfwriter.h"
+-
+-
+-using namespace std;
++#include <assert.h>
+
+ #ifdef DRW_DBG
+ #include <iostream> //for debug
+@@ -53,11 +51,14 @@ dxfRW::~dxfRW(){
+ }
+
+ bool dxfRW::read(DRW_Interface *interface_, bool ext){
++ assert(fileName.empty() == false);
+ bool isOk = false;
+ applyExt = ext;
+- ifstream filestr;
++ std::ifstream filestr;
++ if ( interface_ == NULL )
++ return isOk;
+ DBG("dxfRW::read 1def\n");
+- filestr.open (fileName.c_str(), ios_base::in | ios::binary);
++ filestr.open (fileName.c_str(), std::ios_base::in | std::ios::binary);
+ if (!filestr.is_open())
+ return isOk;
+ if (!filestr.good())
+@@ -72,15 +73,15 @@ bool dxfRW::read(DRW_Interface *interfac
+ iface = interface_;
+ DBG("dxfRW::read 2\n");
+ if (strcmp(line, line2) == 0) {
+- filestr.open (fileName.c_str(), ios_base::in | ios::binary);
++ filestr.open (fileName.c_str(), std::ios_base::in | std::ios::binary);
+ binary = true;
+ //skip sentinel
+- filestr.seekg (22, ios::beg);
++ filestr.seekg (22, std::ios::beg);
+ reader = new dxfReaderBinary(&filestr);
+ DBG("dxfRW::read binary file\n");
+ } else {
+ binary = false;
+- filestr.open (fileName.c_str(), ios_base::in);
++ filestr.open (fileName.c_str(), std::ios_base::in);
+ reader = new dxfReaderAscii(&filestr);
+ }
+
+@@ -93,18 +94,18 @@ bool dxfRW::read(DRW_Interface *interfac
+
+ bool dxfRW::write(DRW_Interface *interface_, DRW::Version ver, bool bin){
+ bool isOk = false;
+- ofstream filestr;
++ std::ofstream filestr;
+ version = ver;
+ binary = bin;
+ iface = interface_;
+ if (binary) {
+- filestr.open (fileName.c_str(), ios_base::out | ios::binary | ios::trunc);
++ filestr.open (fileName.c_str(), std::ios_base::out | std::ios::binary | std::ios::trunc);
+ //write sentinel
+ filestr << "AutoCAD Binary DXF\r\n" << (char)26 << '\0';
+ writer = new dxfWriterBinary(&filestr);
+ DBG("dxfRW::read binary file\n");
+ } else {
+- filestr.open (fileName.c_str(), ios_base::out | ios::trunc);
++ filestr.open (fileName.c_str(), std::ios_base::out | std::ios::trunc);
+ writer = new dxfWriterAscii(&filestr);
+ std::string comm = std::string("dxfrw ") + std::string(DRW_VERSION);
+ writer->writeString(999, comm);
+@@ -163,6 +164,9 @@ bool dxfRW::writeEntity(DRW_Entity *ent)
+ writer->writeUtf8Caps(6, ent->lineType);
+ }
+ writer->writeInt16(62, ent->color);
++ if (version > DRW::AC1015 && ent->color24 >= 0) {
++ writer->writeInt32(420, ent->color24);
++ }
+ if (version > DRW::AC1014) {
+ writer->writeInt16(370, ent->lWeight);
+ }
+@@ -228,6 +232,9 @@ bool dxfRW::writeLayer(DRW_Layer *ent){
+ }
+ writer->writeInt16(70, ent->flags);
+ writer->writeInt16(62, ent->color);
++ if (version > DRW::AC1015 && ent->color24 >= 0) {
++ writer->writeInt32(420, ent->color24);
++ }
+ if (version > DRW::AC1009) {
+ writer->writeUtf8String(6, ent->lineType);
+ if (! ent->plotF)
+@@ -243,10 +250,9 @@ bool dxfRW::writeLayer(DRW_Layer *ent){
+ bool dxfRW::writeTextstyle(DRW_Textstyle *ent){
+ writer->writeString(0, "STYLE");
+ if (!dimstyleStd) {
+- std::string name;
+- std::stringstream ss;
+- ss << std::uppercase << ent->name;
+- ss >> name;
++ //stringstream cause crash in OS/X, bug#3597944
++ std::string name=ent->name;
++ transform(name.begin(), name.end(), name.begin(), toupper);
+ if (name == "STANDARD")
+ dimstyleStd = true;
+ }
+@@ -584,14 +590,14 @@ bool dxfRW::writeArc(DRW_Arc *ent) {
+ if (version > DRW::AC1009) {
+ writer->writeString(100, "AcDbArc");
+ }
+- writer->writeDouble(50, ent->staangle);
+- writer->writeDouble(51, ent->endangle);
++ writer->writeDouble(50, ent->staangle*ARAD);
++ writer->writeDouble(51, ent->endangle*ARAD);
+ return true;
+ }
+
+ bool dxfRW::writeEllipse(DRW_Ellipse *ent){
+- if (ent->staparam == ent->endparam)
+- ent->endparam = 6.28318530718; //2*M_PI;
++ //verify axis/ratio and params for full ellipse
++ ent->correctAxis();
+ if (version > DRW::AC1009) {
+ writer->writeString(0, "ELLIPSE");
+ writeEntity(ent);
+@@ -691,6 +697,10 @@ bool dxfRW::writeLWPolyline(DRW_LWPolyli
+ writer->writeInt32(90, ent->vertexnum);
+ writer->writeInt16(70, ent->flags);
+ writer->writeDouble(43, ent->width);
++ if (ent->elevation != 0)
++ writer->writeDouble(38, ent->elevation);
++ if (ent->thickness != 0)
++ writer->writeDouble(39, ent->thickness);
+ for (int i = 0; i< ent->vertexnum; i++){
+ DRW_Vertex2D *v = ent->vertlist.at(i);
+ writer->writeDouble(10, v->x);
+@@ -877,20 +887,21 @@ bool dxfRW::writeHatch(DRW_Hatch *ent){
+ writer->writeDouble(10, a->basePoint.x);
+ writer->writeDouble(20, a->basePoint.y);
+ writer->writeDouble(40, a->radious);
+- writer->writeDouble(50, a->staangle);
+- writer->writeDouble(51, a->endangle);
++ writer->writeDouble(50, a->staangle*ARAD);
++ writer->writeDouble(51, a->endangle*ARAD);
+ writer->writeInt16(73, a->isccw);
+ break; }
+ case DRW::ELLIPSE: {
+ writer->writeInt16(72, 3);
+ DRW_Ellipse* a = (DRW_Ellipse*)loop->objlist.at(j);
++ a->correctAxis();
+ writer->writeDouble(10, a->basePoint.x);
+ writer->writeDouble(20, a->basePoint.y);
+ writer->writeDouble(11, a->secPoint.x);
+ writer->writeDouble(21, a->secPoint.y);
+ writer->writeDouble(40, a->ratio);
+- writer->writeDouble(50, a->staparam);
+- writer->writeDouble(51, a->endparam);
++ writer->writeDouble(50, a->staparam*ARAD);
++ writer->writeDouble(51, a->endparam*ARAD);
+ writer->writeInt16(73, a->isccw);
+ break; }
+ case DRW::SPLINE:
+@@ -1646,7 +1657,7 @@ bool dxfRW::writeObjects() {
+ //write IMAGEDEF_REACTOR
+ for (unsigned int i=0; i<imageDef.size(); i++) {
+ DRW_ImageDef *id = imageDef.at(i);
+- map<string, string>::iterator it;
++ std::map<string, string>::iterator it;
+ for ( it=id->reactors.begin() ; it != id->reactors.end(); it++ ) {
+ writer->writeString(0, "IMAGEDEF_REACTOR");
+ writer->writeString(5, (*it).first);
+@@ -1679,7 +1690,7 @@ bool dxfRW::writeObjects() {
+ // writer->writeString(330, "0"); handle to DICTIONARY
+ }
+ writer->writeString(102, "{ACAD_REACTORS");
+- map<string, string>::iterator it;
++ std::map<string, string>::iterator it;
+ for ( it=id->reactors.begin() ; it != id->reactors.end(); it++ ) {
+ writer->writeString(330, (*it).first);
+ }
+@@ -2644,8 +2655,8 @@ std::string dxfRW::toHexStr(int n){
+ sprintf(buffer, "%X", n);
+ return std::string(buffer);
+ #else
+- ostringstream Convert;
+- Convert << uppercase << hex << n;
++ std::ostringstream Convert;
++ Convert << std::uppercase << std::hex << n;
+ return Convert.str();
+ #endif
+ }
+diff -urp libdxfrw-0.5.7/src/libdxfrw.h libdxfrw-0.5.7.new/src/libdxfrw.h
+--- libdxfrw-0.5.7/src/libdxfrw.h 2013-02-19 10:36:29.000000000 -0500
++++ libdxfrw-0.5.7.new/src/libdxfrw.h 2013-04-14 16:37:18.000000000 -0400
+@@ -18,7 +18,6 @@
+ #include "drw_objects.h"
+ #include "drw_interface.h"
+
+-#define DRW_VERSION "0.5.7"
+
+ class dxfReader;
+ class dxfWriter;
+@@ -27,7 +26,14 @@ class dxfRW {
+ public:
+ dxfRW(const char* name);
+ ~dxfRW();
+- //read: return 0 if all ok
++ /// reads the file specified in constructor
++ /*!
++ * An interface must be provided. It is used by the class to signal various
++ * components being added.
++ * @param interface_ the interface to use
++ * @param ext should the extrusion be applied to convert in 2D?
++ * @return true for success
++ */
+ bool read(DRW_Interface *interface_, bool ext);
+ void setBinary(bool b) {binary = b;}
+
+@@ -62,6 +68,7 @@ public:
+ bool writeDimension(DRW_Dimension *ent);
+
+ private:
++ /// used by read() to parse the content of the file
+ bool processDxf();
+ bool processHeader();
+ bool processTables();
diff --git a/libdxfrw.spec b/libdxfrw.spec
index 343fdd3..6cd4b72 100644
--- a/libdxfrw.spec
+++ b/libdxfrw.spec
@@ -1,10 +1,11 @@
Name: libdxfrw
Version: 0.5.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Library to read/write DXF files
License: GPLv2+
URL: http://sourceforge.net/p/libdxfrw/home/Home/
Source0: http://downloads.sourceforge.net/project/libdxfrw/%{name}-%{version}.tar.bz2
+Patch0: libdxfrw-0.5.7-librecad-2.0.0beta5-fixes.patch
%description
libdxfrw is a free C++ library to read and write DXF files in both formats,
@@ -19,6 +20,7 @@ Development files for libdxfrw.
%prep
%setup -q
+%patch0 -p1 -b .librecad-2.0.0beta5
%build
%configure --disable-static
@@ -42,6 +44,9 @@ rm -rf %{buildroot}%{_libdir}/*.la
%{_libdir}/pkgconfig/libdxfrw0.pc
%changelog
+* Tue Apr 30 2013 Tom Callaway <spot at fedoraproject.org> - 0.5.7-3
+- apply fixes from librecad 2.0.0beta5
+
* Wed Apr 24 2013 Tom Callaway <spot at fedoraproject.org> - 0.5.7-2
- drop empty NEWS and TODO files
- force INSTALL to use -p to preseve timestamps
More information about the scm-commits
mailing list