Fix WebGL PolygonReplay#bridgeHole_

This commit is contained in:
GaborFarkas
2016-10-12 11:00:08 +02:00
parent a002474761
commit 5fb0a84579

View File

@@ -211,6 +211,7 @@ ol.render.webgl.PolygonReplay.prototype.classifyPoints_ = function(list, rtree,
*/ */
ol.render.webgl.PolygonReplay.prototype.bridgeHole_ = function(hole, holeMaxX, ol.render.webgl.PolygonReplay.prototype.bridgeHole_ = function(hole, holeMaxX,
list, listMaxX, rtree) { list, listMaxX, rtree) {
this.classifyPoints_(hole, rtree, true);
var seg = hole.firstItem(); var seg = hole.firstItem();
while (seg.p1.x !== holeMaxX) { while (seg.p1.x !== holeMaxX) {
seg = hole.nextItem(); seg = hole.nextItem();
@@ -227,7 +228,7 @@ ol.render.webgl.PolygonReplay.prototype.bridgeHole_ = function(hole, holeMaxX,
var intersectingSegments = this.getIntersections_({p0: p1, p1: p2}, rtree, true); var intersectingSegments = this.getIntersections_({p0: p1, p1: p2}, rtree, true);
for (i = 0, ii = intersectingSegments.length; i < ii; ++i) { for (i = 0, ii = intersectingSegments.length; i < ii; ++i) {
var currSeg = intersectingSegments[i]; var currSeg = intersectingSegments[i];
if (currSeg.p0 !== p1 && currSeg.p1 !== p1) { if (currSeg.p0.reflex === undefined) {
var intersection = this.calculateIntersection_(p1, p2, currSeg.p0, var intersection = this.calculateIntersection_(p1, p2, currSeg.p0,
currSeg.p1, true); currSeg.p1, true);
var dist = Math.abs(p1.x - intersection[0]); var dist = Math.abs(p1.x - intersection[0]);
@@ -238,17 +239,22 @@ ol.render.webgl.PolygonReplay.prototype.bridgeHole_ = function(hole, holeMaxX,
} }
} }
} }
if (minDist === Infinity) {
return;
}
bestPoint = seg.p1; bestPoint = seg.p1;
var pointsInTriangle = this.getPointsInTriangle_(p1, p5, seg.p1, rtree); if (minDist > 0) {
if (pointsInTriangle.length) { var pointsInTriangle = this.getPointsInTriangle_(p1, p5, seg.p1, rtree);
var theta = Infinity; if (pointsInTriangle.length) {
for (i = 0, ii = pointsInTriangle.length; i < ii; ++i) { var theta = Infinity;
var currPoint = pointsInTriangle[i]; for (i = 0, ii = pointsInTriangle.length; i < ii; ++i) {
var currTheta = Math.atan2(p1.y - currPoint.y, p2.x - currPoint.x); var currPoint = pointsInTriangle[i];
if (currTheta < theta || (currTheta === theta && currPoint.x < bestPoint.x)) { var currTheta = Math.atan2(p1.y - currPoint.y, p2.x - currPoint.x);
theta = currTheta; if (currTheta < theta || (currTheta === theta && currPoint.x < bestPoint.x)) {
bestPoint = currPoint; theta = currTheta;
bestPoint = currPoint;
}
} }
} }
} }