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
			| 
								 
											4 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								* 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;
							 |