[repsnapper/f18] Added the old-clipper patch
Miro Hrončok
churchyard at fedoraproject.org
Thu May 9 18:41:02 UTC 2013
commit a047c321ef3da8ffdf807d1995c063ff0a4eaea0
Author: Miro Hrončok <miro at hroncok.cz>
Date: Thu May 9 20:40:38 2013 +0200
Added the old-clipper patch
repsnapper-old-clipper.patch | 278 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 278 insertions(+), 0 deletions(-)
---
diff --git a/repsnapper-old-clipper.patch b/repsnapper-old-clipper.patch
new file mode 100644
index 0000000..b4a49c9
--- /dev/null
+++ b/repsnapper-old-clipper.patch
@@ -0,0 +1,278 @@
+diff --git a/src/slicer/clipping.cpp b/src/slicer/clipping.cpp
+index 2abbb22..131aac4 100644
+--- a/src/slicer/clipping.cpp
++++ b/src/slicer/clipping.cpp
+@@ -20,41 +20,6 @@
+
+ #include "clipping.h"
+
+-//////////////////////////////////////////////////////////////////////////////////////////
+-//
+-// old API compatibility
+-// polytree to expolygons
+-// http://www.angusj.com/delphi/clipper/documentation/Docs/Overview/Compatibility%20with%20Prior%20Versions.htm
+-
+-void Clipping::AddOuterPolyNodeToExPolygons(const CL::PolyNode * polynode,
+- ExPolygons& expolygons)
+-{
+- size_t cnt = expolygons.size();
+- expolygons.resize(cnt + 1);
+- expolygons[cnt].outer = polynode->Contour;
+- expolygons[cnt].holes.resize(polynode->ChildCount());
+- for (int i = 0; i < polynode->ChildCount(); ++i)
+- {
+- expolygons[cnt].holes[i] = polynode->Childs[i]->Contour;
+- //Add outer polygons contained by (nested within) holes ...
+- for (int j = 0; j < polynode->Childs[i]->ChildCount(); ++j)
+- AddOuterPolyNodeToExPolygons(polynode->Childs[i]->Childs[j], expolygons);
+- }
+-}
+-
+-void Clipping::PolyTreeToExPolygons(const CL::PolyTree * polytree, ExPolygons& expolygons)
+-{
+- expolygons.clear();
+- for (int i = 0; i < polytree->ChildCount(); ++i)
+- AddOuterPolyNodeToExPolygons(polytree->Childs[i], expolygons);
+-}
+-
+-//
+-//////////////////////////////////////////////////////////////////////////////////////////
+-
+-
+-
+-
+ //CL::Clipper Clipping::clpr; // not static
+
+ void printCLpolygons(vector<CL::Polygons> &p) {
+@@ -126,23 +91,16 @@ CL::Polygons Clipping::getClipperPolygons(const ExPoly &expoly)
+ return getClipperPolygons(getPolys(expoly));
+ }
+
+-/* // not used
+-CL::PolyTree Clipping::getClipperTree(const vector<ExPoly> &expolys)
++CL::ExPolygons Clipping::getClipperPolygons(const vector<ExPoly> &expolys)
+ {
+- CL::PolyTree polytree;
+- // for (uint i=0; i<expolys.size(); i++) {
+- // CL::PolyNode expoly;
+- // polytree[i].Contour = getClipperPolygon(expolys[i].outer);
+- // for (uint h=0; h<expolys[i].holes.size(); h++) {
+- // CL::PolyNode hole;
+- // hole.Contour = getClipperPolygon(expolys[i].holes[h]);
+- // hole.Parent = &polytrees[i];
+- // polytrees[i].Childs.push_back(&hole);
+- // }
+- // }
+- return polytree;
++ ClipperLib::ExPolygons excpolys(expolys.size());
++ for (uint i=0; i<expolys.size(); i++) {
++ excpolys[i].outer = getClipperPolygon(expolys[i].outer);
++ for (uint h=0; h<expolys.size(); h++)
++ excpolys[i].holes[h] = getClipperPolygon(expolys[i].holes[h]);
++ }
++ return excpolys;
+ }
+-*/
+
+ CL::JoinType Clipping::CLType(JoinType type)
+ {
+@@ -237,7 +195,7 @@ vector<Poly> Clipping::intersect(CL::PolyFillType sft,
+ vector<ExPoly> Clipping::ext_intersect(CL::PolyFillType sft,
+ CL::PolyFillType cft)
+ {
+- CL::PolyTree inter;
++ CL::ExPolygons inter;
+ clpr.Execute(CL::ctIntersection, inter, sft, cft);
+ return getExPolys(inter, lastZ, lastExtrF);
+ }
+@@ -253,7 +211,7 @@ vector<Poly> Clipping::unite(CL::PolyFillType sft,
+ vector<ExPoly> Clipping::ext_unite(CL::PolyFillType sft,
+ CL::PolyFillType cft)
+ {
+- CL::PolyTree inter;
++ CL::ExPolygons inter;
+ clpr.Execute(CL::ctUnion, inter, sft, cft);
+ return getExPolys(inter, lastZ, lastExtrF);
+ }
+@@ -270,24 +228,25 @@ vector<Poly> Clipping::subtract(CL::PolyFillType sft,
+ vector<ExPoly> Clipping::ext_subtract(CL::PolyFillType sft,
+ CL::PolyFillType cft)
+ {
+- CL::PolyTree diff;
+- // if (debug) {
+- // try {
+- // clpr.Execute(CL::ctDifference, diff, sft, cft);
+- // } catch (int e){
+- // cerr << lastZ<<" - " << lastExtrF<< endl;
+- // if (e == 22){
+- // cout << "Subject" << endl;
+- // printCLpolygons(subjpolygons);
+- // cout << "Clip" << endl;
+- // printCLpolygons(clippolygons);
+- // // vector<ExPoly> empty;
+- // // return empty;
+- // }
+- // }
+- // }
+- // else
+- clpr.Execute(CL::ctDifference, diff, sft, cft);//CL::pftEvenOdd, CL::pftEvenOdd);
++ CL::ExPolygons diff;
++ if (debug) {
++ try {
++ clpr.Execute(CL::ctDifference, diff, sft, cft);
++ } catch (int e){
++ cerr << lastZ<<" - " << lastExtrF<< endl;
++ if (e == 22){
++ cout << "Subject" << endl;
++ printCLpolygons(subjpolygons);
++ cout << "Clip" << endl;
++ printCLpolygons(clippolygons);
++ // vector<ExPoly> empty;
++ // return empty;
++ }
++ }
++ }
++ else
++ clpr.Execute(CL::ctDifference, diff,
++ CL::pftEvenOdd, CL::pftEvenOdd);
+ return getExPolys(diff, lastZ, lastExtrF);
+ }
+ vector<Poly> Clipping::subtractMerged(double dist,
+@@ -445,19 +404,16 @@ vector<Poly> Clipping::getPolys(const CL::Polygons &cpolys, double z, double ext
+ polys[i] = getPoly(cpolys[i], z, extrusionfactor);
+ return polys;
+ }
+-
+-vector<ExPoly> Clipping::getExPolys(const CL::PolyTree &ctree, double z,
++vector<ExPoly> Clipping::getExPolys(const CL::ExPolygons &excpolys, double z,
+ double extrusionfactor)
+ {
+- ExPolygons cexpolys;
+- PolyTreeToExPolygons(&ctree, cexpolys);
+- vector<ExPoly> expolys(cexpolys.size());
+- for (uint j = 0 ; j < cexpolys.size(); j++) {
+- expolys[j].outer = getPoly(cexpolys[0].outer, z, extrusionfactor);
+- for (uint i = 0 ; i < cexpolys[j].holes.size(); i++)
+- expolys[j].holes.push_back(getPoly(cexpolys[j].holes[i], z, extrusionfactor));
++ uint count = excpolys.size();
++ vector<ExPoly> polys(count);
++ for (uint i = 0 ; i < count; i++) {
++ polys[i].outer = getPoly(excpolys[i].outer, z, extrusionfactor);
++ polys[i].holes = getPolys(excpolys[i].holes, z, extrusionfactor);
+ }
+- return expolys;
++ return polys;
+ }
+ vector<Poly> Clipping::getPolys(const ExPoly &expoly)
+ {
+@@ -479,10 +435,8 @@ vector<Poly> Clipping::getPolys(const vector<ExPoly> &expolys)
+
+ vector<ExPoly> Clipping::getExPolys(const vector<Poly> &polys)
+ {
+- /*
+- CL::PolyTree tree = getClipperTree(polys);
+- return getExPolys(tree, polys.back().getZ(), polys.back().getExtrusionFactor());
+- */
++ // return getExPolys(getExClipperPolygons(polys),
++ // polys.back().getZ(),polys.back().getExtrusionFactor());
+ vector<ExPoly> expolys;
+ vector<Poly> holes;
+ for (uint i = 0; i<polys.size(); i++) {
+@@ -494,10 +448,11 @@ vector<ExPoly> Clipping::getExPolys(const vector<Poly> &polys)
+ expolys.push_back(expoly);
+ }
+ }
+- for (uint i = 0; i<holes.size(); i++)
+- for (uint j = 0; j<expolys.size(); j++)
++ for (uint j = 0; j<expolys.size(); j++)
++ for (uint i = 0; i<holes.size(); i++)
++ // just test one point
+ if (holes[i].size()>0)
+- if (expolys[j].outer.vertexInside(holes[i].vertices[0])) // just test one point
++ if (expolys[j].outer.vertexInside(holes[i].vertices[0]))
+ //if (holes[i].isInside(expolys[j].outer)) // test all
+ expolys[j].holes.push_back(holes[i]);
+ return expolys;
+@@ -513,15 +468,27 @@ vector<ExPoly> Clipping::getExPolys(const vector<Poly> &polys,
+ }
+ return getExPolys(ppolys);
+ }
++// CL::ExPolygons excpolys = getExClipperPolygons(polys);
++// uint count = excpolys.size();
++// vector<ExPoly> expolys(count);
++// for (uint i = 0 ; i < count; i++) {
++// expolys[i].outer = getPoly(excpolys[i].outer, z, extrusionfactor);
++// expolys[i].holes.resize(excpolys[i].holes.size());
++// for (uint j = 0 ; j < excpolys[i].holes.size(); i++) {
++// expolys[i].holes[j] = getPoly(excpolys[i].holes[j], z, extrusionfactor);
++// }
++// }
++// return expolys;
++// }
+
+-CL::PolyTree Clipping::getClipperTree(const vector<Poly> &polys)
++CL::ExPolygons Clipping::getExClipperPolygons(const vector<Poly> &polys)
+ {
+ CL::Polygons cpolys = getClipperPolygons(polys);
+ CL::Clipper clpr;
+ clpr.AddPolygons(cpolys, CL::ptSubject);
+- CL::PolyTree ctree;
+- clpr.Execute(CL::ctUnion, ctree, CL::pftEvenOdd, CL::pftEvenOdd);
+- return ctree;
++ CL::ExPolygons cexpolys;
++ clpr.Execute(CL::ctUnion, cexpolys, CL::pftEvenOdd, CL::pftEvenOdd);
++ return cexpolys;
+ }
+
+ double Clipping::Area(const Poly &poly){
+@@ -553,7 +520,3 @@ void Clipping::ReversePoints(vector<Poly> &polys) {
+ for (uint i=0; i<polys.size(); i++)
+ polys[i].reverse();
+ }
+-
+-
+-
+-
+diff --git a/src/slicer/clipping.h b/src/slicer/clipping.h
+index dfaf33b..8beabc2 100644
+--- a/src/slicer/clipping.h
++++ b/src/slicer/clipping.h
+@@ -121,18 +121,18 @@ public:
+ static vector<Poly> getPolys(const ExPoly &expoly);
+ static vector<Poly> getPolys(const vector<ExPoly> &expolys);
+ static vector<Poly> getPolys(const CL::Polygons &cpoly, double z, double extrusionfactor);
+- static vector<ExPoly> getExPolys(const CL::PolyTree &ctree, double z,
++ static vector<ExPoly> getExPolys(const CL::ExPolygons &excpolys, double z,
+ double extrusionfactor);
+
+ static vector<ExPoly> getExPolys(const vector<Poly> &polys,
+ double z, double extrusionfactor);
+ static vector<ExPoly> getExPolys(const vector<Poly> &polys);
+- static CL::PolyTree getClipperTree(const vector<Poly> &polys);
++ static CL::ExPolygons getExClipperPolygons(const vector<Poly> &polys);
+
+ static CL::Polygon getClipperPolygon (const Poly &poly);
+ static CL::Polygons getClipperPolygons(const vector<Poly> &polys);
+ static CL::Polygons getClipperPolygons(const ExPoly &expoly);
+- //static CL::PolyTree getClipperTree(const vector<ExPoly> &expolys);
++ static CL::ExPolygons getClipperPolygons(const vector<ExPoly> &expolys);
+
+ static double Area(const Poly &poly);
+ static double Area(const vector<Poly> &polys);
+@@ -141,16 +141,4 @@ public:
+
+ static void ReversePoints(vector<Poly> &polys);
+
+- protected:
+- // old API compatibility
+- // polytree to expolygons
+- struct ExPolygon {
+- CL::Polygon outer;
+- CL::Polygons holes;
+- };
+- typedef std::vector< ExPolygon > ExPolygons;
+- static void AddOuterPolyNodeToExPolygons(const CL::PolyNode *polynode,
+- ExPolygons& expolygons);
+- static void PolyTreeToExPolygons(const CL::PolyTree * polytree, ExPolygons& expolygons);
+-
+ };
More information about the scm-commits
mailing list