You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							162 lines
						
					
					
						
							5.3 KiB
						
					
					
				
			
		
		
	
	
							162 lines
						
					
					
						
							5.3 KiB
						
					
					
				
 | 
						|
/* | 
						|
* 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. | 
						|
*/ | 
						|
 | 
						|
var _config = require("../config"); | 
						|
 | 
						|
var __DEV__ = _config.__DEV__; | 
						|
 | 
						|
var _util = require("zrender/lib/core/util"); | 
						|
 | 
						|
var createHashMap = _util.createHashMap; | 
						|
var retrieve = _util.retrieve; | 
						|
var each = _util.each; | 
						|
 | 
						|
/* | 
						|
* 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. | 
						|
*/ | 
						|
 | 
						|
/** | 
						|
 * Helper for model references. | 
						|
 * There are many manners to refer axis/coordSys. | 
						|
 */ | 
						|
// TODO | 
						|
// merge relevant logic to this file? | 
						|
// check: "modelHelper" of tooltip and "BrushTargetManager". | 
						|
 | 
						|
/** | 
						|
 * @return {Object} For example: | 
						|
 * { | 
						|
 *     coordSysName: 'cartesian2d', | 
						|
 *     coordSysDims: ['x', 'y', ...], | 
						|
 *     axisMap: HashMap({ | 
						|
 *         x: xAxisModel, | 
						|
 *         y: yAxisModel | 
						|
 *     }), | 
						|
 *     categoryAxisMap: HashMap({ | 
						|
 *         x: xAxisModel, | 
						|
 *         y: undefined | 
						|
 *     }), | 
						|
 *     // It also indicate that whether there is category axis. | 
						|
 *     firstCategoryDimIndex: 1, | 
						|
 *     // To replace user specified encode. | 
						|
 * } | 
						|
 */ | 
						|
function getCoordSysDefineBySeries(seriesModel) { | 
						|
  var coordSysName = seriesModel.get('coordinateSystem'); | 
						|
  var result = { | 
						|
    coordSysName: coordSysName, | 
						|
    coordSysDims: [], | 
						|
    axisMap: createHashMap(), | 
						|
    categoryAxisMap: createHashMap() | 
						|
  }; | 
						|
  var fetch = fetchers[coordSysName]; | 
						|
 | 
						|
  if (fetch) { | 
						|
    fetch(seriesModel, result, result.axisMap, result.categoryAxisMap); | 
						|
    return result; | 
						|
  } | 
						|
} | 
						|
 | 
						|
var fetchers = { | 
						|
  cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) { | 
						|
    var xAxisModel = seriesModel.getReferringComponents('xAxis')[0]; | 
						|
    var yAxisModel = seriesModel.getReferringComponents('yAxis')[0]; | 
						|
    result.coordSysDims = ['x', 'y']; | 
						|
    axisMap.set('x', xAxisModel); | 
						|
    axisMap.set('y', yAxisModel); | 
						|
 | 
						|
    if (isCategory(xAxisModel)) { | 
						|
      categoryAxisMap.set('x', xAxisModel); | 
						|
      result.firstCategoryDimIndex = 0; | 
						|
    } | 
						|
 | 
						|
    if (isCategory(yAxisModel)) { | 
						|
      categoryAxisMap.set('y', yAxisModel); | 
						|
      result.firstCategoryDimIndex = 1; | 
						|
    } | 
						|
  }, | 
						|
  singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) { | 
						|
    var singleAxisModel = seriesModel.getReferringComponents('singleAxis')[0]; | 
						|
    result.coordSysDims = ['single']; | 
						|
    axisMap.set('single', singleAxisModel); | 
						|
 | 
						|
    if (isCategory(singleAxisModel)) { | 
						|
      categoryAxisMap.set('single', singleAxisModel); | 
						|
      result.firstCategoryDimIndex = 0; | 
						|
    } | 
						|
  }, | 
						|
  polar: function (seriesModel, result, axisMap, categoryAxisMap) { | 
						|
    var polarModel = seriesModel.getReferringComponents('polar')[0]; | 
						|
    var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); | 
						|
    var angleAxisModel = polarModel.findAxisModel('angleAxis'); | 
						|
    result.coordSysDims = ['radius', 'angle']; | 
						|
    axisMap.set('radius', radiusAxisModel); | 
						|
    axisMap.set('angle', angleAxisModel); | 
						|
 | 
						|
    if (isCategory(radiusAxisModel)) { | 
						|
      categoryAxisMap.set('radius', radiusAxisModel); | 
						|
      result.firstCategoryDimIndex = 0; | 
						|
    } | 
						|
 | 
						|
    if (isCategory(angleAxisModel)) { | 
						|
      categoryAxisMap.set('angle', angleAxisModel); | 
						|
      result.firstCategoryDimIndex = 1; | 
						|
    } | 
						|
  }, | 
						|
  geo: function (seriesModel, result, axisMap, categoryAxisMap) { | 
						|
    result.coordSysDims = ['lng', 'lat']; | 
						|
  }, | 
						|
  parallel: function (seriesModel, result, axisMap, categoryAxisMap) { | 
						|
    var ecModel = seriesModel.ecModel; | 
						|
    var parallelModel = ecModel.getComponent('parallel', seriesModel.get('parallelIndex')); | 
						|
    var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice(); | 
						|
    each(parallelModel.parallelAxisIndex, function (axisIndex, index) { | 
						|
      var axisModel = ecModel.getComponent('parallelAxis', axisIndex); | 
						|
      var axisDim = coordSysDims[index]; | 
						|
      axisMap.set(axisDim, axisModel); | 
						|
 | 
						|
      if (isCategory(axisModel) && result.firstCategoryDimIndex == null) { | 
						|
        categoryAxisMap.set(axisDim, axisModel); | 
						|
        result.firstCategoryDimIndex = index; | 
						|
      } | 
						|
    }); | 
						|
  } | 
						|
}; | 
						|
 | 
						|
function isCategory(axisModel) { | 
						|
  return axisModel.get('type') === 'category'; | 
						|
} | 
						|
 | 
						|
exports.getCoordSysDefineBySeries = getCoordSysDefineBySeries; |