summaryrefslogtreecommitdiffstats
path: root/src/conn-avoid-ref.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2013-10-26 12:33:17 +0000
committerJabiertxof <jtx@jtx.marker.es>2013-10-26 12:33:17 +0000
commit7caf32d2b22680c603e4e88c76739c758630412c (patch)
treedaaf4e77d712bd802076980d7a077dc6562f3df7 /src/conn-avoid-ref.cpp
parentRemoved BSpline from tell by su_v (diff)
parentFix memleak in reference counting introduced in r12532. (diff)
downloadinkscape-7caf32d2b22680c603e4e88c76739c758630412c.tar.gz
inkscape-7caf32d2b22680c603e4e88c76739c758630412c.zip
Update to trunk
(bzr r12588.1.24)
Diffstat (limited to 'src/conn-avoid-ref.cpp')
-rw-r--r--src/conn-avoid-ref.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp
index c0d05e3c4..cb72f65dc 100644
--- a/src/conn-avoid-ref.cpp
+++ b/src/conn-avoid-ref.cpp
@@ -303,23 +303,29 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item)
Geom::Line parallel_hull_edge;
parallel_hull_edge.setOrigin(hull_edge.origin()+hull_edge.versor().ccw()*spacing);
parallel_hull_edge.setVersor(hull_edge.versor());
-
+
// determine the intersection point
-
- Geom::OptCrossing int_pt = Geom::intersection(parallel_hull_edge, prev_parallel_hull_edge);
- if (int_pt)
- {
- Avoid::Point avoid_pt((parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::X],
- (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::Y]);
- poly.ps.push_back(avoid_pt);
+ try {
+ Geom::OptCrossing int_pt = Geom::intersection(parallel_hull_edge, prev_parallel_hull_edge);
+ if (int_pt)
+ {
+ Avoid::Point avoid_pt((parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::X],
+ (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::Y]);
+ poly.ps.push_back(avoid_pt);
+ }
+ else
+ {
+ // something went wrong...
+ std::cout<<"conn-avoid-ref.cpp: avoid_item_poly: Geom:intersection failed."<<std::endl;
+ }
}
- else
- {
- // something went wrong...
- std::cout<<"conn-avoid-ref.cpp: avoid_item_poly: Geom:intersection failed."<<std::endl;
+ catch (Geom::InfiniteSolutions const &e) {
+ // the parallel_hull_edge and prev_parallel_hull_edge lie on top of each other, hence infinite crossings
+ g_message("conn-avoid-ref.cpp: trying to get crossings of identical lines");
}
prev_parallel_hull_edge = parallel_hull_edge;
}
+
return poly;
}