| 
/* 
 | 
* 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 RadiusAxis from './RadiusAxis.js'; 
 | 
import AngleAxis from './AngleAxis.js'; 
 | 
export var polarDimensions = ['radius', 'angle']; 
 | 
var Polar = /** @class */function () { 
 | 
  function Polar(name) { 
 | 
    this.dimensions = polarDimensions; 
 | 
    this.type = 'polar'; 
 | 
    /** 
 | 
     * x of polar center 
 | 
     */ 
 | 
    this.cx = 0; 
 | 
    /** 
 | 
     * y of polar center 
 | 
     */ 
 | 
    this.cy = 0; 
 | 
    this._radiusAxis = new RadiusAxis(); 
 | 
    this._angleAxis = new AngleAxis(); 
 | 
    this.axisPointerEnabled = true; 
 | 
    this.name = name || ''; 
 | 
    this._radiusAxis.polar = this._angleAxis.polar = this; 
 | 
  } 
 | 
  /** 
 | 
   * If contain coord 
 | 
   */ 
 | 
  Polar.prototype.containPoint = function (point) { 
 | 
    var coord = this.pointToCoord(point); 
 | 
    return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]); 
 | 
  }; 
 | 
  /** 
 | 
   * If contain data 
 | 
   */ 
 | 
  Polar.prototype.containData = function (data) { 
 | 
    return this._radiusAxis.containData(data[0]) && this._angleAxis.containData(data[1]); 
 | 
  }; 
 | 
  Polar.prototype.getAxis = function (dim) { 
 | 
    var key = '_' + dim + 'Axis'; 
 | 
    return this[key]; 
 | 
  }; 
 | 
  Polar.prototype.getAxes = function () { 
 | 
    return [this._radiusAxis, this._angleAxis]; 
 | 
  }; 
 | 
  /** 
 | 
   * Get axes by type of scale 
 | 
   */ 
 | 
  Polar.prototype.getAxesByScale = function (scaleType) { 
 | 
    var axes = []; 
 | 
    var angleAxis = this._angleAxis; 
 | 
    var radiusAxis = this._radiusAxis; 
 | 
    angleAxis.scale.type === scaleType && axes.push(angleAxis); 
 | 
    radiusAxis.scale.type === scaleType && axes.push(radiusAxis); 
 | 
    return axes; 
 | 
  }; 
 | 
  Polar.prototype.getAngleAxis = function () { 
 | 
    return this._angleAxis; 
 | 
  }; 
 | 
  Polar.prototype.getRadiusAxis = function () { 
 | 
    return this._radiusAxis; 
 | 
  }; 
 | 
  Polar.prototype.getOtherAxis = function (axis) { 
 | 
    var angleAxis = this._angleAxis; 
 | 
    return axis === angleAxis ? this._radiusAxis : angleAxis; 
 | 
  }; 
 | 
  /** 
 | 
   * Base axis will be used on stacking. 
 | 
   * 
 | 
   */ 
 | 
  Polar.prototype.getBaseAxis = function () { 
 | 
    return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAngleAxis(); 
 | 
  }; 
 | 
  Polar.prototype.getTooltipAxes = function (dim) { 
 | 
    var baseAxis = dim != null && dim !== 'auto' ? this.getAxis(dim) : this.getBaseAxis(); 
 | 
    return { 
 | 
      baseAxes: [baseAxis], 
 | 
      otherAxes: [this.getOtherAxis(baseAxis)] 
 | 
    }; 
 | 
  }; 
 | 
  /** 
 | 
   * Convert a single data item to (x, y) point. 
 | 
   * Parameter data is an array which the first element is radius and the second is angle 
 | 
   */ 
 | 
  Polar.prototype.dataToPoint = function (data, clamp) { 
 | 
    return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp), this._angleAxis.dataToAngle(data[1], clamp)]); 
 | 
  }; 
 | 
  /** 
 | 
   * Convert a (x, y) point to data 
 | 
   */ 
 | 
  Polar.prototype.pointToData = function (point, clamp) { 
 | 
    var coord = this.pointToCoord(point); 
 | 
    return [this._radiusAxis.radiusToData(coord[0], clamp), this._angleAxis.angleToData(coord[1], clamp)]; 
 | 
  }; 
 | 
  /** 
 | 
   * Convert a (x, y) point to (radius, angle) coord 
 | 
   */ 
 | 
  Polar.prototype.pointToCoord = function (point) { 
 | 
    var dx = point[0] - this.cx; 
 | 
    var dy = point[1] - this.cy; 
 | 
    var angleAxis = this.getAngleAxis(); 
 | 
    var extent = angleAxis.getExtent(); 
 | 
    var minAngle = Math.min(extent[0], extent[1]); 
 | 
    var maxAngle = Math.max(extent[0], extent[1]); 
 | 
    // Fix fixed extent in polarCreator 
 | 
    // FIXME 
 | 
    angleAxis.inverse ? minAngle = maxAngle - 360 : maxAngle = minAngle + 360; 
 | 
    var radius = Math.sqrt(dx * dx + dy * dy); 
 | 
    dx /= radius; 
 | 
    dy /= radius; 
 | 
    var radian = Math.atan2(-dy, dx) / Math.PI * 180; 
 | 
    // move to angleExtent 
 | 
    var dir = radian < minAngle ? 1 : -1; 
 | 
    while (radian < minAngle || radian > maxAngle) { 
 | 
      radian += dir * 360; 
 | 
    } 
 | 
    return [radius, radian]; 
 | 
  }; 
 | 
  /** 
 | 
   * Convert a (radius, angle) coord to (x, y) point 
 | 
   */ 
 | 
  Polar.prototype.coordToPoint = function (coord) { 
 | 
    var radius = coord[0]; 
 | 
    var radian = coord[1] / 180 * Math.PI; 
 | 
    var x = Math.cos(radian) * radius + this.cx; 
 | 
    // Inverse the y 
 | 
    var y = -Math.sin(radian) * radius + this.cy; 
 | 
    return [x, y]; 
 | 
  }; 
 | 
  /** 
 | 
   * Get ring area of cartesian. 
 | 
   * Area will have a contain function to determine if a point is in the coordinate system. 
 | 
   */ 
 | 
  Polar.prototype.getArea = function () { 
 | 
    var angleAxis = this.getAngleAxis(); 
 | 
    var radiusAxis = this.getRadiusAxis(); 
 | 
    var radiusExtent = radiusAxis.getExtent().slice(); 
 | 
    radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse(); 
 | 
    var angleExtent = angleAxis.getExtent(); 
 | 
    var RADIAN = Math.PI / 180; 
 | 
    var EPSILON = 1e-4; 
 | 
    return { 
 | 
      cx: this.cx, 
 | 
      cy: this.cy, 
 | 
      r0: radiusExtent[0], 
 | 
      r: radiusExtent[1], 
 | 
      startAngle: -angleExtent[0] * RADIAN, 
 | 
      endAngle: -angleExtent[1] * RADIAN, 
 | 
      clockwise: angleAxis.inverse, 
 | 
      contain: function (x, y) { 
 | 
        // It's a ring shape. 
 | 
        // Start angle and end angle don't matter 
 | 
        var dx = x - this.cx; 
 | 
        var dy = y - this.cy; 
 | 
        var d2 = dx * dx + dy * dy; 
 | 
        var r = this.r; 
 | 
        var r0 = this.r0; 
 | 
        // minus a tiny value 1e-4 in double side to avoid being clipped unexpectedly 
 | 
        // r == r0 contain nothing 
 | 
        return r !== r0 && d2 - EPSILON <= r * r && d2 + EPSILON >= r0 * r0; 
 | 
      } 
 | 
    }; 
 | 
  }; 
 | 
  Polar.prototype.convertToPixel = function (ecModel, finder, value) { 
 | 
    var coordSys = getCoordSys(finder); 
 | 
    return coordSys === this ? this.dataToPoint(value) : null; 
 | 
  }; 
 | 
  Polar.prototype.convertFromPixel = function (ecModel, finder, pixel) { 
 | 
    var coordSys = getCoordSys(finder); 
 | 
    return coordSys === this ? this.pointToData(pixel) : null; 
 | 
  }; 
 | 
  return Polar; 
 | 
}(); 
 | 
function getCoordSys(finder) { 
 | 
  var seriesModel = finder.seriesModel; 
 | 
  var polarModel = finder.polarModel; 
 | 
  return polarModel && polarModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem; 
 | 
} 
 | 
export default Polar; 
 |