| 
/* 
 | 
* 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 { __extends } from "tslib"; 
 | 
import BoundingRect from 'zrender/lib/core/BoundingRect.js'; 
 | 
import Cartesian from './Cartesian.js'; 
 | 
import { invert } from 'zrender/lib/core/matrix.js'; 
 | 
import { applyTransform } from 'zrender/lib/core/vector.js'; 
 | 
export var cartesian2DDimensions = ['x', 'y']; 
 | 
function canCalculateAffineTransform(scale) { 
 | 
  return scale.type === 'interval' || scale.type === 'time'; 
 | 
} 
 | 
var Cartesian2D = /** @class */function (_super) { 
 | 
  __extends(Cartesian2D, _super); 
 | 
  function Cartesian2D() { 
 | 
    var _this = _super !== null && _super.apply(this, arguments) || this; 
 | 
    _this.type = 'cartesian2d'; 
 | 
    _this.dimensions = cartesian2DDimensions; 
 | 
    return _this; 
 | 
  } 
 | 
  /** 
 | 
   * Calculate an affine transform matrix if two axes are time or value. 
 | 
   * It's mainly for accelartion on the large time series data. 
 | 
   */ 
 | 
  Cartesian2D.prototype.calcAffineTransform = function () { 
 | 
    this._transform = this._invTransform = null; 
 | 
    var xAxisScale = this.getAxis('x').scale; 
 | 
    var yAxisScale = this.getAxis('y').scale; 
 | 
    if (!canCalculateAffineTransform(xAxisScale) || !canCalculateAffineTransform(yAxisScale)) { 
 | 
      return; 
 | 
    } 
 | 
    var xScaleExtent = xAxisScale.getExtent(); 
 | 
    var yScaleExtent = yAxisScale.getExtent(); 
 | 
    var start = this.dataToPoint([xScaleExtent[0], yScaleExtent[0]]); 
 | 
    var end = this.dataToPoint([xScaleExtent[1], yScaleExtent[1]]); 
 | 
    var xScaleSpan = xScaleExtent[1] - xScaleExtent[0]; 
 | 
    var yScaleSpan = yScaleExtent[1] - yScaleExtent[0]; 
 | 
    if (!xScaleSpan || !yScaleSpan) { 
 | 
      return; 
 | 
    } 
 | 
    // Accelerate data to point calculation on the special large time series data. 
 | 
    var scaleX = (end[0] - start[0]) / xScaleSpan; 
 | 
    var scaleY = (end[1] - start[1]) / yScaleSpan; 
 | 
    var translateX = start[0] - xScaleExtent[0] * scaleX; 
 | 
    var translateY = start[1] - yScaleExtent[0] * scaleY; 
 | 
    var m = this._transform = [scaleX, 0, 0, scaleY, translateX, translateY]; 
 | 
    this._invTransform = invert([], m); 
 | 
  }; 
 | 
  /** 
 | 
   * Base axis will be used on stacking. 
 | 
   */ 
 | 
  Cartesian2D.prototype.getBaseAxis = function () { 
 | 
    return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAxis('x'); 
 | 
  }; 
 | 
  Cartesian2D.prototype.containPoint = function (point) { 
 | 
    var axisX = this.getAxis('x'); 
 | 
    var axisY = this.getAxis('y'); 
 | 
    return axisX.contain(axisX.toLocalCoord(point[0])) && axisY.contain(axisY.toLocalCoord(point[1])); 
 | 
  }; 
 | 
  Cartesian2D.prototype.containData = function (data) { 
 | 
    return this.getAxis('x').containData(data[0]) && this.getAxis('y').containData(data[1]); 
 | 
  }; 
 | 
  Cartesian2D.prototype.containZone = function (data1, data2) { 
 | 
    var zoneDiag1 = this.dataToPoint(data1); 
 | 
    var zoneDiag2 = this.dataToPoint(data2); 
 | 
    var area = this.getArea(); 
 | 
    var zone = new BoundingRect(zoneDiag1[0], zoneDiag1[1], zoneDiag2[0] - zoneDiag1[0], zoneDiag2[1] - zoneDiag1[1]); 
 | 
    return area.intersect(zone); 
 | 
  }; 
 | 
  Cartesian2D.prototype.dataToPoint = function (data, clamp, out) { 
 | 
    out = out || []; 
 | 
    var xVal = data[0]; 
 | 
    var yVal = data[1]; 
 | 
    // Fast path 
 | 
    if (this._transform 
 | 
    // It's supported that if data is like `[Inifity, 123]`, where only Y pixel calculated. 
 | 
    && xVal != null && isFinite(xVal) && yVal != null && isFinite(yVal)) { 
 | 
      return applyTransform(out, data, this._transform); 
 | 
    } 
 | 
    var xAxis = this.getAxis('x'); 
 | 
    var yAxis = this.getAxis('y'); 
 | 
    out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(xVal, clamp)); 
 | 
    out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(yVal, clamp)); 
 | 
    return out; 
 | 
  }; 
 | 
  Cartesian2D.prototype.clampData = function (data, out) { 
 | 
    var xScale = this.getAxis('x').scale; 
 | 
    var yScale = this.getAxis('y').scale; 
 | 
    var xAxisExtent = xScale.getExtent(); 
 | 
    var yAxisExtent = yScale.getExtent(); 
 | 
    var x = xScale.parse(data[0]); 
 | 
    var y = yScale.parse(data[1]); 
 | 
    out = out || []; 
 | 
    out[0] = Math.min(Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), Math.max(xAxisExtent[0], xAxisExtent[1])); 
 | 
    out[1] = Math.min(Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), Math.max(yAxisExtent[0], yAxisExtent[1])); 
 | 
    return out; 
 | 
  }; 
 | 
  Cartesian2D.prototype.pointToData = function (point, clamp) { 
 | 
    var out = []; 
 | 
    if (this._invTransform) { 
 | 
      return applyTransform(out, point, this._invTransform); 
 | 
    } 
 | 
    var xAxis = this.getAxis('x'); 
 | 
    var yAxis = this.getAxis('y'); 
 | 
    out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp); 
 | 
    out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp); 
 | 
    return out; 
 | 
  }; 
 | 
  Cartesian2D.prototype.getOtherAxis = function (axis) { 
 | 
    return this.getAxis(axis.dim === 'x' ? 'y' : 'x'); 
 | 
  }; 
 | 
  /** 
 | 
   * Get rect area of cartesian. 
 | 
   * Area will have a contain function to determine if a point is in the coordinate system. 
 | 
   */ 
 | 
  Cartesian2D.prototype.getArea = function (tolerance) { 
 | 
    tolerance = tolerance || 0; 
 | 
    var xExtent = this.getAxis('x').getGlobalExtent(); 
 | 
    var yExtent = this.getAxis('y').getGlobalExtent(); 
 | 
    var x = Math.min(xExtent[0], xExtent[1]) - tolerance; 
 | 
    var y = Math.min(yExtent[0], yExtent[1]) - tolerance; 
 | 
    var width = Math.max(xExtent[0], xExtent[1]) - x + tolerance; 
 | 
    var height = Math.max(yExtent[0], yExtent[1]) - y + tolerance; 
 | 
    return new BoundingRect(x, y, width, height); 
 | 
  }; 
 | 
  return Cartesian2D; 
 | 
}(Cartesian); 
 | 
; 
 | 
export default Cartesian2D; 
 |