diff options
author | Marius Kintel <marius@kintel.net> | 2013-03-12 05:14:58 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2013-03-12 05:14:58 (GMT) |
commit | dccc039211eebe3f69c935557bd56abae323c26f (patch) | |
tree | fb39b939619db2bb258de78cf38012919762fbbc /src | |
parent | 6b8a5e266ca1725e35e76aef0caa639fe77fdc48 (diff) |
Got rid of remaining Qt dependencies. The test framework should now be Qt-free
Diffstat (limited to 'src')
-rw-r--r-- | src/boost-utils.cc | 42 | ||||
-rw-r--r-- | src/boost-utils.h | 8 | ||||
-rw-r--r-- | src/dxfdata.cc | 7 | ||||
-rw-r--r-- | src/dxftess-glu.cc | 66 | ||||
-rw-r--r-- | src/parsersettings.cc | 3 | ||||
-rw-r--r-- | src/value.cc | 6 |
6 files changed, 92 insertions, 40 deletions
diff --git a/src/boost-utils.cc b/src/boost-utils.cc new file mode 100644 index 0000000..f81917a --- /dev/null +++ b/src/boost-utils.cc @@ -0,0 +1,42 @@ +#include "boost-utils.h" +#include <stdio.h> +#include <iostream> + +fs::path relativePath(const fs::path &path, const fs::path &relative_to) +{ + // create absolute paths + fs::path p = fs::absolute(path); + fs::path r = fs::absolute(relative_to); + + // if root paths are different, return absolute path + if (p.root_path() != r.root_path()) + return p; + + // initialize relative path + fs::path result; + + // find out where the two paths diverge + fs::path::const_iterator itr_path = p.begin(); + fs::path::const_iterator itr_relative_to = r.begin(); + while (*itr_path == *itr_relative_to && itr_path != p.end() && itr_relative_to != r.end()) { + ++itr_path; + ++itr_relative_to; + } + + // add "../" for each remaining token in relative_to + if (itr_relative_to != r.end()) { + ++itr_relative_to; + while (itr_relative_to != r.end()) { + result /= ".."; + ++itr_relative_to; + } + } + + // add remaining path + while (itr_path != p.end()) { + result /= *itr_path; + ++itr_path; + } + + return result; +} diff --git a/src/boost-utils.h b/src/boost-utils.h new file mode 100644 index 0000000..c431857 --- /dev/null +++ b/src/boost-utils.h @@ -0,0 +1,8 @@ +#ifndef BOOST_UTILS_H_ +#define BOOST_UTILS_H_ + +#include <boost/filesystem.hpp> +namespace fs = boost::filesystem; +fs::path relativePath(const fs::path &path, const fs::path &relative_to); + +#endif diff --git a/src/dxfdata.cc b/src/dxfdata.cc index f34af51..be982ff 100644 --- a/src/dxfdata.cc +++ b/src/dxfdata.cc @@ -41,8 +41,9 @@ #include <sstream> #include <map> -#include <QDir> #include "value.h" +#include "boost-utils.h" +#include "boosty.h" /*! \class DxfData @@ -389,10 +390,10 @@ DxfData::DxfData(double fn, double fs, double fa, BOOST_FOREACH(const EntityList::value_type &i, unsupported_entities_list) { if (layername.empty()) { PRINTB("WARNING: Unsupported DXF Entity '%s' (%x) in %s.", - i.first % i.second % QuotedString(QDir::current().relativeFilePath(QString::fromLocal8Bit(filename.c_str())).toLocal8Bit().constData())); + i.first % i.second % QuotedString(boosty::stringy(relativePath(filename, fs::current_path())))); } else { PRINTB("WARNING: Unsupported DXF Entity '%s' (%x) in layer '%s' of %s.", - i.first % i.second % layername % QuotedString(QDir::current().relativeFilePath(QString::fromLocal8Bit(filename.c_str())).toLocal8Bit().constData())); + i.first % i.second % layername % QuotedString(boosty::stringy(relativePath(filename, fs::current_path())))); } } diff --git a/src/dxftess-glu.cc b/src/dxftess-glu.cc index 1a8bfa5..941dbed 100644 --- a/src/dxftess-glu.cc +++ b/src/dxftess-glu.cc @@ -3,14 +3,11 @@ #include "polyset.h" #include "grid.h" #include <stdio.h> +#include <boost/foreach.hpp> #include "system-gl.h" #include "mathc99.h" -#include <QVector> -#include <QPair> -#include <QHash> - #ifdef WIN32 # define STDCALL __stdcall #else @@ -31,7 +28,7 @@ struct tess_triangle { static GLenum tess_type; static int tess_count; -static QVector<tess_triangle> tess_tri; +static std::vector<tess_triangle> tess_tri; static GLdouble *tess_p1, *tess_p2; static void STDCALL tess_vertex(void *vertex_data) @@ -48,7 +45,7 @@ static void STDCALL tess_vertex(void *vertex_data) tess_p2 = p; } if (tess_count > 1) { - tess_tri.append(tess_triangle(tess_p1, tess_p2, p)); + tess_tri.push_back(tess_triangle(tess_p1, tess_p2, p)); tess_p2 = p; } } @@ -61,9 +58,9 @@ static void STDCALL tess_vertex(void *vertex_data) } if (tess_count > 1) { if (tess_count % 2 == 1) { - tess_tri.append(tess_triangle(tess_p2, tess_p1, p)); + tess_tri.push_back(tess_triangle(tess_p2, tess_p1, p)); } else { - tess_tri.append(tess_triangle(tess_p1, tess_p2, p)); + tess_tri.push_back(tess_triangle(tess_p1, tess_p2, p)); } tess_p1 = tess_p2; tess_p2 = p; @@ -77,7 +74,7 @@ static void STDCALL tess_vertex(void *vertex_data) tess_p2 = p; } if (tess_count == 2) { - tess_tri.append(tess_triangle(tess_p1, tess_p2, p)); + tess_tri.push_back(tess_triangle(tess_p1, tess_p2, p)); tess_count = -1; } } @@ -214,7 +211,7 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian tess_tri.clear(); - QList<tess_vdata> vl; + std::list<tess_vdata> vl; gluTessBeginPolygon(tobj, NULL); @@ -225,7 +222,7 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian gluTessNormal(tobj, 0, 0, +1); } - Grid3d< QPair<int,int> > point_to_path(GRID_COARSE); + Grid3d< std::pair<int,int> > point_to_path(GRID_COARSE); for (int i = 0; i < dxf.paths.size(); i++) { if (!dxf.paths[i].is_closed) @@ -234,12 +231,12 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian for (int j = 1; j < dxf.paths[i].indices.size(); j++) { point_to_path.data(dxf.points[dxf.paths[i].indices[j]][0], dxf.points[dxf.paths[i].indices[j]][1], - h) = QPair<int,int>(i, j); - vl.append(tess_vdata()); - vl.last().v[0] = dxf.points[dxf.paths[i].indices[j]][0]; - vl.last().v[1] = dxf.points[dxf.paths[i].indices[j]][1]; - vl.last().v[2] = h; - gluTessVertex(tobj, vl.last().v, vl.last().v); + h) = std::pair<int,int>(i, j); + vl.push_back(tess_vdata()); + vl.back().v[0] = dxf.points[dxf.paths[i].indices[j]][0]; + vl.back().v[1] = dxf.points[dxf.paths[i].indices[j]][1]; + vl.back().v[2] = h; + gluTessVertex(tobj, vl.back().v, vl.back().v); } gluTessEndContour(tobj); } @@ -263,7 +260,7 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian point_on_line(tess_tri[i].p[1], tess_tri[i].p[2], tess_tri[i].p[0]) || point_on_line(tess_tri[i].p[2], tess_tri[i].p[0], tess_tri[i].p[1])) { // printf("DEBUG: Removed triangle\n"); - tess_tri.remove(i--); + tess_tri.erase(tess_tri.begin() + i--); } } @@ -277,13 +274,13 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian if (do_triangle_splitting) { bool added_triangles = true; - typedef QPair<int,int> QPair_ii; - QHash<int, QPair_ii> tri_by_atan2; + typedef std::pair<int,int> pair_ii; + boost::unordered_multimap<int, pair_ii> tri_by_atan2; for (int i = 0; i < tess_tri.size(); i++) for (int j = 0; j < 3; j++) { int ai = (int)round(atan2(fabs(tess_tri[i].p[(j+1)%3][0] - tess_tri[i].p[j][0]), fabs(tess_tri[i].p[(j+1)%3][1] - tess_tri[i].p[j][1])) / 0.001); - tri_by_atan2.insertMulti(ai, QPair<int,int>(i, j)); + tri_by_atan2.emplace(ai, std::pair<int,int>(i, j)); } while (added_triangles) { @@ -294,20 +291,23 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian for (int i = 0; i < tess_tri.size(); i++) for (int k = 0; k < 3; k++) { - QHash<QPair_ii, QPair_ii> possible_neigh; + boost::unordered_map<pair_ii, pair_ii> possible_neigh; int ai = (int)floor(atan2(fabs(tess_tri[i].p[(k+1)%3][0] - tess_tri[i].p[k][0]), fabs(tess_tri[i].p[(k+1)%3][1] - tess_tri[i].p[k][1])) / 0.001 - 0.5); for (int j = 0; j < 2; j++) { - foreach (const QPair_ii &jl, tri_by_atan2.values(ai+j)) - if (i != jl.first) - possible_neigh[jl] = jl; + for (boost::unordered_multimap<int, pair_ii>::iterator it = tri_by_atan2.find(ai+j); + it != tri_by_atan2.end(); + it++) { + if (i != it->first) possible_neigh[it->second] = it->second; + } } #ifdef DEBUG_TRIANGLE_SPLITTING printf("%d/%d: %d\n", i, k, possible_neigh.size()); #endif - foreach (const QPair_ii &jl, possible_neigh) { - int j = jl.first; - for (int l = jl.second; l != (jl.second + 2) % 3; l = (l + 1) % 3) + typedef std::pair<pair_ii,pair_ii> ElemPair; + BOOST_FOREACH (const ElemPair &elem, possible_neigh) { + int j = elem.first.first; + for (int l = elem.first.second; l != (elem.first.second + 2) % 3; l = (l + 1) % 3) if (point_on_line(tess_tri[i].p[k], tess_tri[j].p[l], tess_tri[i].p[(k+1)%3])) { #ifdef DEBUG_TRIANGLE_SPLITTING printf("%% %f %f %f %f %f %f [%d %d]\n", @@ -316,18 +316,18 @@ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_trian tess_tri[i].p[(k+1)%3][0], tess_tri[i].p[(k+1)%3][1], i, j); #endif - tess_tri.append(tess_triangle(tess_tri[j].p[l], + tess_tri.push_back(tess_triangle(tess_tri[j].p[l], tess_tri[i].p[(k+1)%3], tess_tri[i].p[(k+2)%3])); for (int m = 0; m < 2; m++) { - int ai = (int)round(atan2(fabs(tess_tri.last().p[(m+1)%3][0] - tess_tri.last().p[m][0]), - fabs(tess_tri.last().p[(m+1)%3][1] - tess_tri.last().p[m][1])) / 0.001 ); - tri_by_atan2.insertMulti(ai, QPair<int,int>(tess_tri.size()-1, m)); + int ai = (int)round(atan2(fabs(tess_tri.back().p[(m+1)%3][0] - tess_tri.back().p[m][0]), + fabs(tess_tri.back().p[(m+1)%3][1] - tess_tri.back().p[m][1])) / 0.001 ); + tri_by_atan2.emplace(ai, std::pair<int,int>(tess_tri.size()-1, m)); } tess_tri[i].p[(k+1)%3] = tess_tri[j].p[l]; for (int m = 0; m < 2; m++) { int ai = (int)round(atan2(fabs(tess_tri[i].p[(m+1)%3][0] - tess_tri[i].p[m][0]), fabs(tess_tri[i].p[(m+1)%3][1] - tess_tri[i].p[m][1])) / 0.001 ); - tri_by_atan2.insertMulti(ai, QPair<int,int>(i, m)); + tri_by_atan2.emplace(ai, std::pair<int,int>(i, m)); } added_triangles = true; } diff --git a/src/parsersettings.cc b/src/parsersettings.cc index a757ba1..8d82744 100644 --- a/src/parsersettings.cc +++ b/src/parsersettings.cc @@ -3,8 +3,9 @@ #include <boost/foreach.hpp> #include "boosty.h" #include <boost/algorithm/string.hpp> -#include <qglobal.h> // Needed for Q_ defines - move the offending code somewhere else +#ifdef __APPLE__ #include "CocoaUtils.h" +#endif namespace fs = boost::filesystem; diff --git a/src/value.cc b/src/value.cc index f14f826..bec803a 100644 --- a/src/value.cc +++ b/src/value.cc @@ -34,12 +34,12 @@ #include <boost/variant/apply_visitor.hpp> #include <boost/variant/static_visitor.hpp> #include <boost/format.hpp> - -#include <QtCore/QDir> +#include "boost-utils.h" +#include "boosty.h" std::ostream &operator<<(std::ostream &stream, const Filename &filename) { - stream << QuotedString(QDir::current().relativeFilePath(QString::fromLocal8Bit(filename.c_str())).toLocal8Bit().constData()); + stream << QuotedString(boosty::stringy(relativePath(filename, fs::current_path()))); return stream; } |