summaryrefslogtreecommitdiffstats
path: root/src/conn-avoid-ref.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2013-10-24 14:21:44 +0000
committerJohan B. C. Engelen <j.b.c.engelen@alumnus.utwente.nl>2013-10-24 14:21:44 +0000
commitfadaf147c5add875593a8fbf4933e890c0d4ed83 (patch)
treebb80372d7fdfb4bd7f7634941d5eddd9bcdf84bf /src/conn-avoid-ref.cpp
parentFix for Bug #1200399 (xcf export fails if file or layer names contain non-ASC... (diff)
downloadinkscape-fadaf147c5add875593a8fbf4933e890c0d4ed83.tar.gz
inkscape-fadaf147c5add875593a8fbf4933e890c0d4ed83.zip
fix crash bug 1237676
Fixed bugs: - https://launchpad.net/bugs/1237676 (bzr r12716)
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;
}