|   | 
| /* | 
| * 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; |