| 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
  
 | 
  
 | 
/** 
 | 
 * AUTO-GENERATED FILE. DO NOT MODIFY. 
 | 
 */ 
 | 
  
 | 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
import * as graphic from '../../util/graphic.js'; 
 | 
import SymbolClz from './Symbol.js'; 
 | 
import { isObject } from 'zrender/lib/core/util.js'; 
 | 
import { getLabelStatesModels } from '../../label/labelStyle.js'; 
 | 
function symbolNeedsDraw(data, point, idx, opt) { 
 | 
  return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt.isIgnore && opt.isIgnore(idx)) 
 | 
  // We do not set clipShape on group, because it will cut part of 
 | 
  // the symbol element shape. We use the same clip shape here as 
 | 
  // the line clip. 
 | 
  && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, 'symbol') !== 'none'; 
 | 
} 
 | 
function normalizeUpdateOpt(opt) { 
 | 
  if (opt != null && !isObject(opt)) { 
 | 
    opt = { 
 | 
      isIgnore: opt 
 | 
    }; 
 | 
  } 
 | 
  return opt || {}; 
 | 
} 
 | 
function makeSeriesScope(data) { 
 | 
  var seriesModel = data.hostModel; 
 | 
  var emphasisModel = seriesModel.getModel('emphasis'); 
 | 
  return { 
 | 
    emphasisItemStyle: emphasisModel.getModel('itemStyle').getItemStyle(), 
 | 
    blurItemStyle: seriesModel.getModel(['blur', 'itemStyle']).getItemStyle(), 
 | 
    selectItemStyle: seriesModel.getModel(['select', 'itemStyle']).getItemStyle(), 
 | 
    focus: emphasisModel.get('focus'), 
 | 
    blurScope: emphasisModel.get('blurScope'), 
 | 
    emphasisDisabled: emphasisModel.get('disabled'), 
 | 
    hoverScale: emphasisModel.get('scale'), 
 | 
    labelStatesModels: getLabelStatesModels(seriesModel), 
 | 
    cursorStyle: seriesModel.get('cursor') 
 | 
  }; 
 | 
} 
 | 
var SymbolDraw = /** @class */function () { 
 | 
  function SymbolDraw(SymbolCtor) { 
 | 
    this.group = new graphic.Group(); 
 | 
    this._SymbolCtor = SymbolCtor || SymbolClz; 
 | 
  } 
 | 
  /** 
 | 
   * Update symbols draw by new data 
 | 
   */ 
 | 
  SymbolDraw.prototype.updateData = function (data, opt) { 
 | 
    // Remove progressive els. 
 | 
    this._progressiveEls = null; 
 | 
    opt = normalizeUpdateOpt(opt); 
 | 
    var group = this.group; 
 | 
    var seriesModel = data.hostModel; 
 | 
    var oldData = this._data; 
 | 
    var SymbolCtor = this._SymbolCtor; 
 | 
    var disableAnimation = opt.disableAnimation; 
 | 
    var seriesScope = makeSeriesScope(data); 
 | 
    var symbolUpdateOpt = { 
 | 
      disableAnimation: disableAnimation 
 | 
    }; 
 | 
    var getSymbolPoint = opt.getSymbolPoint || function (idx) { 
 | 
      return data.getItemLayout(idx); 
 | 
    }; 
 | 
    // There is no oldLineData only when first rendering or switching from 
 | 
    // stream mode to normal mode, where previous elements should be removed. 
 | 
    if (!oldData) { 
 | 
      group.removeAll(); 
 | 
    } 
 | 
    data.diff(oldData).add(function (newIdx) { 
 | 
      var point = getSymbolPoint(newIdx); 
 | 
      if (symbolNeedsDraw(data, point, newIdx, opt)) { 
 | 
        var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); 
 | 
        symbolEl.setPosition(point); 
 | 
        data.setItemGraphicEl(newIdx, symbolEl); 
 | 
        group.add(symbolEl); 
 | 
      } 
 | 
    }).update(function (newIdx, oldIdx) { 
 | 
      var symbolEl = oldData.getItemGraphicEl(oldIdx); 
 | 
      var point = getSymbolPoint(newIdx); 
 | 
      if (!symbolNeedsDraw(data, point, newIdx, opt)) { 
 | 
        group.remove(symbolEl); 
 | 
        return; 
 | 
      } 
 | 
      var newSymbolType = data.getItemVisual(newIdx, 'symbol') || 'circle'; 
 | 
      var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType(); 
 | 
      if (!symbolEl 
 | 
      // Create a new if symbol type changed. 
 | 
      || oldSymbolType && oldSymbolType !== newSymbolType) { 
 | 
        group.remove(symbolEl); 
 | 
        symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); 
 | 
        symbolEl.setPosition(point); 
 | 
      } else { 
 | 
        symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt); 
 | 
        var target = { 
 | 
          x: point[0], 
 | 
          y: point[1] 
 | 
        }; 
 | 
        disableAnimation ? symbolEl.attr(target) : graphic.updateProps(symbolEl, target, seriesModel); 
 | 
      } 
 | 
      // Add back 
 | 
      group.add(symbolEl); 
 | 
      data.setItemGraphicEl(newIdx, symbolEl); 
 | 
    }).remove(function (oldIdx) { 
 | 
      var el = oldData.getItemGraphicEl(oldIdx); 
 | 
      el && el.fadeOut(function () { 
 | 
        group.remove(el); 
 | 
      }, seriesModel); 
 | 
    }).execute(); 
 | 
    this._getSymbolPoint = getSymbolPoint; 
 | 
    this._data = data; 
 | 
  }; 
 | 
  ; 
 | 
  SymbolDraw.prototype.updateLayout = function () { 
 | 
    var _this = this; 
 | 
    var data = this._data; 
 | 
    if (data) { 
 | 
      // Not use animation 
 | 
      data.eachItemGraphicEl(function (el, idx) { 
 | 
        var point = _this._getSymbolPoint(idx); 
 | 
        el.setPosition(point); 
 | 
        el.markRedraw(); 
 | 
      }); 
 | 
    } 
 | 
  }; 
 | 
  ; 
 | 
  SymbolDraw.prototype.incrementalPrepareUpdate = function (data) { 
 | 
    this._seriesScope = makeSeriesScope(data); 
 | 
    this._data = null; 
 | 
    this.group.removeAll(); 
 | 
  }; 
 | 
  ; 
 | 
  /** 
 | 
   * Update symbols draw by new data 
 | 
   */ 
 | 
  SymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) { 
 | 
    // Clear 
 | 
    this._progressiveEls = []; 
 | 
    opt = normalizeUpdateOpt(opt); 
 | 
    function updateIncrementalAndHover(el) { 
 | 
      if (!el.isGroup) { 
 | 
        el.incremental = true; 
 | 
        el.ensureState('emphasis').hoverLayer = true; 
 | 
      } 
 | 
    } 
 | 
    for (var idx = taskParams.start; idx < taskParams.end; idx++) { 
 | 
      var point = data.getItemLayout(idx); 
 | 
      if (symbolNeedsDraw(data, point, idx, opt)) { 
 | 
        var el = new this._SymbolCtor(data, idx, this._seriesScope); 
 | 
        el.traverse(updateIncrementalAndHover); 
 | 
        el.setPosition(point); 
 | 
        this.group.add(el); 
 | 
        data.setItemGraphicEl(idx, el); 
 | 
        this._progressiveEls.push(el); 
 | 
      } 
 | 
    } 
 | 
  }; 
 | 
  ; 
 | 
  SymbolDraw.prototype.eachRendered = function (cb) { 
 | 
    graphic.traverseElements(this._progressiveEls || this.group, cb); 
 | 
  }; 
 | 
  SymbolDraw.prototype.remove = function (enableAnimation) { 
 | 
    var group = this.group; 
 | 
    var data = this._data; 
 | 
    // Incremental model do not have this._data. 
 | 
    if (data && enableAnimation) { 
 | 
      data.eachItemGraphicEl(function (el) { 
 | 
        el.fadeOut(function () { 
 | 
          group.remove(el); 
 | 
        }, data.hostModel); 
 | 
      }); 
 | 
    } else { 
 | 
      group.removeAll(); 
 | 
    } 
 | 
  }; 
 | 
  ; 
 | 
  return SymbolDraw; 
 | 
}(); 
 | 
export default SymbolDraw; 
 |