Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions packages/vt/src/layer/vector/Vector3DLayerRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,14 @@ const prefix = (SYMBOL_PREFIX + '').trim();
const KEY_IDX_NAME = (KEY_IDX + '').trim();
let EMPTY_POSITION = new Float32Array(1);
const EMPTY_ARRAY = [];
const TEMP_ARRAY = [];

class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
constructor(...args) {
super(...args);
this.features = {};
this.featuresArray = [];
this.featuresChanged = false;
this._geometries = {};
this._counter = 0;
this._allFeatures = {};
Expand Down Expand Up @@ -100,15 +103,23 @@ class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
}

_checkFeaturesVisibleChange() {
const features = this.features;
if (!features) {
if (this.featuresChanged) {
this.featuresArray = Object.values(this.features);
this.featuresChanged = false;
}
const featuresArray = this.featuresArray;
if (!featuresArray) {
return this;
}
//实时检测feature的visible变化
for (const id in features) {
let feats = features[id] || [];
for (let m = 0, len = featuresArray.length; m < len; m++) {
let feats = featuresArray[m];
if (!feats) {
continue;
}
if (!Array.isArray(feats)) {
feats = [feats];
TEMP_ARRAY[0] = feats;
feats = TEMP_ARRAY;
}
if (!feats.length) {
continue;
Expand Down Expand Up @@ -1082,6 +1093,7 @@ class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
this._removeFeatures(uid);
}
this.features[uid] = convertToFeature(geo, this._kidGen, this.features[uid]);
this.featuresChanged = true;
const feas = this.features[uid];
this._refreshFeatures(feas, uid);
this._geometries[uid] = geo;
Expand Down Expand Up @@ -1271,6 +1283,7 @@ class Vector3DLayerRenderer extends CanvasCompatible(LayerAbstractRenderer) {
delete this._geometries[uid];
this._removeFeatures(uid);
delete this.features[uid];
this.featuresChanged = true;
}
}
this.markRebuild();
Expand Down
14 changes: 12 additions & 2 deletions packages/vt/src/layer/vector/util/convert_to_feature.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { extend, hasOwn } from '../../../common/Util';
import { extend, hasOwn, isNil } from '../../../common/Util';
import * as maptalks from 'maptalks';
import { KEY_IDX } from '../../../common/Constant';
import { LINE_GRADIENT_PROP_KEY } from './symbols';
Expand All @@ -12,9 +12,19 @@ const GRADIENT_PROP_KEY = (LINE_GRADIENT_PROP_KEY + '').trim();

function watchGeoVisible(featue, symbol, geo) {
//geo 的visible受options.visible 和style控制
const styleFn = maptalks.MapboxUtil.loadGeoSymbol(symbol, geo);
//symbol里是否有visible和opacity
let hasVisibleProp = !isNil(symbol.visible), hasOpacityProp = !isNil(symbol.opacity);
let styleFn = symbol;
if (hasVisibleProp || hasOpacityProp) {
styleFn = maptalks.MapboxUtil.loadGeoSymbol(symbol, geo);
}
Object.defineProperty(featue, 'getVisible', {
get: function () {
//样式里没有visible和opacity
if (!hasVisibleProp && (!hasOpacityProp)) {
const visible = geo.options.visible;
return visible;
}
//实时检测geo的可见性,feature上的值是静态值,不应该检测其值
const isVisible = geo.isVisible();
if (!isVisible) {
Expand Down