Skip to content

Commit 7c353e7

Browse files
authored
fix MultiPolygon as mask, close #1215 (#1216)
1 parent 07cc056 commit 7c353e7

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

src/geometry/Geometry.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,7 @@ class Geometry extends JSONAble(Eventable(Handlerable(Class))) {
988988
if (this._maskPainter) {
989989
return this._maskPainter;
990990
}
991-
this._maskPainter = this.getGeometries && this.getGeometries() ? new CollectionPainter(this) : new Painter(this);
991+
this._maskPainter = this.getGeometries && this.getGeometries() ? new CollectionPainter(this, true) : new Painter(this);
992992
return this._maskPainter;
993993
}
994994

src/renderer/geometry/CollectionPainter.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ export default class CollectionPainter extends Class {
1313
/**
1414
* @param {GeometryCollection} geometry - geometry to paint
1515
*/
16-
constructor(geometry) {
16+
constructor(geometry, isMask) {
1717
super();
1818
this.geometry = geometry;
19+
this.isMask = isMask;
1920
}
2021

2122
_eachPainter(fn) {
2223
const geometries = this.geometry.getGeometries();
2324
let painter;
2425
for (let i = 0, len = geometries.length; i < len; i++) {
25-
painter = geometries[i]._getPainter();
26+
painter = this.isMask ? geometries[i]._getMaskPainter() : geometries[i]._getPainter();
2627
if (!painter) {
2728
continue;
2829
}

test/layer/MaskSpec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,20 @@ describe('Spec of Masks', function () {
206206
});
207207
});
208208

209+
it('mask can return extent', function () {
210+
var mask = new maptalks.MultiPolygon([
211+
new maptalks.Circle(map.getCenter(), 5).getShell(),
212+
new maptalks.Circle(map.locate(map.getCenter(), 10, 0), 5).getShell()
213+
]);
214+
var tileLayer = new maptalks.TileLayer('tile', {
215+
urlTemplate : TILE_IMAGE,
216+
renderer:'canvas'
217+
});
218+
tileLayer.setMask(mask);
219+
map.addLayer(tileLayer);
220+
var extent = mask._getMaskPainter().get2DExtent();
221+
expect(extent.xmin).to.be.ok();
222+
expect(extent.ymin).to.be.ok();
223+
});
224+
209225
});

0 commit comments

Comments
 (0)