[vfrnav] work around API changes of polyclipping 5.1

sailer sailer at fedoraproject.org
Mon Mar 4 16:17:55 UTC 2013


commit 75613e73484fbb84ce64ea01ca4e5a5d8c69b6ec
Author: Thomas Sailer <t.sailer at alumni.ethz.ch>
Date:   Mon Mar 4 17:17:26 2013 +0100

    work around API changes of polyclipping 5.1

 vfrnav-clipper51.patch |   85 ++++++++++++++++++++++++++++++++++++++++++++++++
 vfrnav.spec            |    4 +-
 2 files changed, 87 insertions(+), 2 deletions(-)
---
diff --git a/vfrnav-clipper51.patch b/vfrnav-clipper51.patch
new file mode 100644
index 0000000..6944ae9
--- /dev/null
+++ b/vfrnav-clipper51.patch
@@ -0,0 +1,85 @@
+--- src/geomgeos.cc.clipper	2013-03-04 16:38:26.385181723 +0100
++++ src/geomgeos.cc	2013-03-04 17:11:36.433503798 +0100
+@@ -80,21 +80,37 @@
+ 	return p;
+ }
+ 
+-PolygonHole from_clipper(const ClipperLib::ExPolygon& cp, const Point& offs)
++void from_clipper(MultiPolygonHole& ph, const ClipperLib::PolyNode& cp, const Point& offs)
+ {
+-	PolygonHole p;
+-	p.set_exterior(from_clipper(cp.outer, offs));
+-	for (ClipperLib::Polygons::const_iterator i(cp.holes.begin()), e(cp.holes.end()); i != e; ++i)
+-		p.add_interior(from_clipper(*i, offs));
++	if (!cp.Contour.size())
++		return;
++	if (cp.IsHole())
++		throw std::runtime_error("from_clipper: outer polygon is a hole!");
++	ph.push_back(PolygonHole());
++	PolygonHole& p(ph.back());
++	p.set_exterior(from_clipper(cp.Contour, offs));
++	for (std::vector<ClipperLib::PolyNode *>::const_iterator chi(cp.Childs.begin()), che(cp.Childs.end()); chi != che; ++chi) {
++		const ClipperLib::PolyNode& cpc(**chi);
++		if (!cpc.IsHole())
++			throw std::runtime_error("from_clipper: outer polygon is a child of an outer polygon");
++		p.add_interior(from_clipper(cpc.Contour, offs));
++		for (std::vector<ClipperLib::PolyNode *>::const_iterator cchi(cpc.Childs.begin()), cche(cpc.Childs.end()); cchi != cche; ++cchi) {
++			const ClipperLib::PolyNode& cpcc(**cchi);
++			from_clipper(ph, cpcc, offs);
++		}
++	}
+ 	p.normalize();
+-	return p;
+ }
+ 
+-MultiPolygonHole from_clipper(const ClipperLib::ExPolygons& cp, const Point& offs)
++MultiPolygonHole from_clipper(const ClipperLib::PolyTree& cp, const Point& offs)
+ {
+ 	MultiPolygonHole p;
+-	for (ClipperLib::ExPolygons::const_iterator i(cp.begin()), e(cp.end()); i != e; ++i)
+-		p.push_back(from_clipper(*i, offs));
++	if (cp.Contour.size())
++		throw std::runtime_error("from_clipper: PolyTree has a contour!");
++	for (std::vector<ClipperLib::PolyNode *>::const_iterator chi(cp.Childs.begin()), che(cp.Childs.end()); chi != che; ++chi) {
++		const ClipperLib::PolyNode& cpc(**chi);
++		from_clipper(p, cpc, offs);
++	}
+ 	return p;
+ }
+ 
+@@ -113,7 +129,7 @@
+ 	offs.set_invalid();
+ 	ClipperLib::Clipper c;
+ 	c.AddPolygon(to_clipper(*this, offs), ClipperLib::ptSubject);
+-	ClipperLib::ExPolygons sol;
++	ClipperLib::PolyTree sol;
+ 	c.Execute(ClipperLib::ctUnion, sol, ClipperLib::pftNonZero, ClipperLib::pftNonZero); 
+ 	return from_clipper(sol, offs);
+ }
+@@ -151,7 +167,7 @@
+ 		to_clipper(cp, mp, offs);
+ 		c.AddPolygons(cp, ClipperLib::ptSubject);
+ 	}
+-	ClipperLib::ExPolygons sol;
++	ClipperLib::PolyTree sol;
+ 	c.Execute(ClipperLib::ctUnion, sol, ClipperLib::pftNonZero, ClipperLib::pftNonZero);
+ 	MultiPolygonHole mp(from_clipper(sol, offs));
+ 	swap(mp);
+@@ -176,7 +192,7 @@
+ 		to_clipper(cp, mp, offs);
+ 		c.AddPolygons(cp, ClipperLib::ptClip);
+ 	}
+-	ClipperLib::ExPolygons sol;
++	ClipperLib::PolyTree sol;
+ 	c.Execute(ClipperLib::ctDifference, sol, ClipperLib::pftNonZero, ClipperLib::pftNonZero); 
+ 	MultiPolygonHole mp(from_clipper(sol, offs));
+ 	swap(mp);
+@@ -201,7 +217,7 @@
+ 		to_clipper(cp, mp, offs);
+ 		c.AddPolygons(cp, ClipperLib::ptClip);
+ 	}
+-	ClipperLib::ExPolygons sol;
++	ClipperLib::PolyTree sol;
+ 	c.Execute(ClipperLib::ctIntersection, sol, ClipperLib::pftNonZero, ClipperLib::pftNonZero); 
+ 	MultiPolygonHole mp(from_clipper(sol, offs));
+ 	swap(mp);
diff --git a/vfrnav.spec b/vfrnav.spec
index 248b0fe..ce9dc2d 100644
--- a/vfrnav.spec
+++ b/vfrnav.spec
@@ -7,7 +7,7 @@ Group:          Applications/Productivity
 License:        GPLv2+
 URL:            http://www.baycom.org/~tom/vfrnav
 Source0:        http://download.gna.org/vfrnav/%{name}-%{version}.tar.gz
-Patch0:         vfrnav-svg.patch
+Patch0:         vfrnav-clipper51.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  gtkmm30-devel
@@ -74,7 +74,7 @@ for the VFR navigation application.
 
 %prep
 %setup -q
-%patch0 -p0 -b .svg
+%patch0 -p0 -b .clipper51
 autoheader
 aclocal -I m4
 autoconf


More information about the scm-commits mailing list