Fix WebGL PolygonReplay#bridgeHole_
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user