1 line
20 KiB
JSON
1 line
20 KiB
JSON
{"ast":null,"code":"/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parsePercent, linearMap } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nexport function getBasicPieLayout(seriesModel, api) {\n var viewRect = getViewRect(seriesModel, api); // center can be string or number when coordinateSystem is specified\n\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\n var width = parsePercent(viewRect.width, api.getWidth());\n var height = parsePercent(viewRect.height, api.getHeight());\n var size = Math.min(width, height);\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var cx;\n var cy;\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys) {\n // percentage is not allowed when coordinate system is specified\n var point = coordSys.dataToPoint(center);\n cx = point[0] || 0;\n cy = point[1] || 0;\n } else {\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n cx = parsePercent(center[0], width) + viewRect.x;\n cy = parsePercent(center[1], height) + viewRect.y;\n }\n\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r\n };\n}\nexport default function pieLayout(seriesType, ecModel, api) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var viewRect = getViewRect(seriesModel, api);\n\n var _a = getBasicPieLayout(seriesModel, api),\n cx = _a.cx,\n cy = _a.cy,\n r = _a.r,\n r0 = _a.r0;\n\n var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var validDataCount = 0;\n data.each(valueDim, function (value) {\n !isNaN(value) && validDataCount++;\n });\n var sum = data.getSum(valueDim); // Sum may be 0\n\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var clockwise = seriesModel.get('clockwise');\n var roseType = seriesModel.get('roseType');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // [0...max]\n\n var extent = data.getDataExtent(valueDim);\n extent[0] = 0; // In the case some sector angle is smaller than minAngle\n\n var restAngle = PI2;\n var valueSumLargerThanMinAngle = 0;\n var currentAngle = startAngle;\n var dir = clockwise ? 1 : -1;\n data.setLayout({\n viewRect: viewRect,\n r: r\n });\n data.each(valueDim, function (value, idx) {\n var angle;\n\n if (isNaN(value)) {\n data.setItemLayout(idx, {\n angle: NaN,\n startAngle: NaN,\n endAngle: NaN,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? NaN : r\n });\n return;\n } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?\n\n\n if (roseType !== 'area') {\n angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n } else {\n angle = PI2 / validDataCount;\n }\n\n if (angle < minAngle) {\n angle = minAngle;\n restAngle -= minAngle;\n } else {\n valueSumLargerThanMinAngle += value;\n }\n\n var endAngle = currentAngle + dir * angle;\n data.setItemLayout(idx, {\n angle: angle,\n startAngle: currentAngle,\n endAngle: endAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? linearMap(value, extent, [r0, r]) : r\n });\n currentAngle = endAngle;\n }); // Some sector is constrained by minAngle\n // Rest sectors needs recalculate angle\n\n if (restAngle < PI2 && validDataCount) {\n // Average the angle if rest angle is not enough after all angles is\n // Constrained by minAngle\n if (restAngle <= 1e-3) {\n var angle_1 = PI2 / validDataCount;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_1 = data.getItemLayout(idx);\n layout_1.angle = angle_1;\n layout_1.startAngle = startAngle + dir * idx * angle_1;\n layout_1.endAngle = startAngle + dir * (idx + 1) * angle_1;\n }\n });\n } else {\n unitRadian = restAngle / valueSumLargerThanMinAngle;\n currentAngle = startAngle;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_2 = data.getItemLayout(idx);\n var angle = layout_2.angle === minAngle ? minAngle : value * unitRadian;\n layout_2.startAngle = currentAngle;\n layout_2.endAngle = currentAngle + dir * angle;\n currentAngle += dir * angle;\n }\n });\n }\n }\n });\n}","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/ElectronicMallVue/node_modules/echarts/lib/chart/pie/pieLayout.js"],"names":["parsePercent","linearMap","layout","zrUtil","PI2","Math","PI","RADIAN","getViewRect","seriesModel","api","getLayoutRect","getBoxLayoutParams","width","getWidth","height","getHeight","getBasicPieLayout","viewRect","center","get","radius","isArray","size","min","r0","r","cx","cy","coordSys","coordinateSystem","point","dataToPoint","x","y","pieLayout","seriesType","ecModel","eachSeriesByType","data","getData","valueDim","mapDimension","_a","startAngle","minAngle","validDataCount","each","value","isNaN","sum","getSum","unitRadian","clockwise","roseType","stillShowZeroSum","extent","getDataExtent","restAngle","valueSumLargerThanMinAngle","currentAngle","dir","setLayout","idx","angle","setItemLayout","NaN","endAngle","angle_1","layout_1","getItemLayout","layout_2"],"mappings":"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","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parsePercent, linearMap } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nexport function getBasicPieLayout(seriesModel, api) {\n var viewRect = getViewRect(seriesModel, api); // center can be string or number when coordinateSystem is specified\n\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\n var width = parsePercent(viewRect.width, api.getWidth());\n var height = parsePercent(viewRect.height, api.getHeight());\n var size = Math.min(width, height);\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var cx;\n var cy;\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys) {\n // percentage is not allowed when coordinate system is specified\n var point = coordSys.dataToPoint(center);\n cx = point[0] || 0;\n cy = point[1] || 0;\n } else {\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n cx = parsePercent(center[0], width) + viewRect.x;\n cy = parsePercent(center[1], height) + viewRect.y;\n }\n\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r\n };\n}\nexport default function pieLayout(seriesType, ecModel, api) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var viewRect = getViewRect(seriesModel, api);\n\n var _a = getBasicPieLayout(seriesModel, api),\n cx = _a.cx,\n cy = _a.cy,\n r = _a.r,\n r0 = _a.r0;\n\n var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var validDataCount = 0;\n data.each(valueDim, function (value) {\n !isNaN(value) && validDataCount++;\n });\n var sum = data.getSum(valueDim); // Sum may be 0\n\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var clockwise = seriesModel.get('clockwise');\n var roseType = seriesModel.get('roseType');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // [0...max]\n\n var extent = data.getDataExtent(valueDim);\n extent[0] = 0; // In the case some sector angle is smaller than minAngle\n\n var restAngle = PI2;\n var valueSumLargerThanMinAngle = 0;\n var currentAngle = startAngle;\n var dir = clockwise ? 1 : -1;\n data.setLayout({\n viewRect: viewRect,\n r: r\n });\n data.each(valueDim, function (value, idx) {\n var angle;\n\n if (isNaN(value)) {\n data.setItemLayout(idx, {\n angle: NaN,\n startAngle: NaN,\n endAngle: NaN,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? NaN : r\n });\n return;\n } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?\n\n\n if (roseType !== 'area') {\n angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n } else {\n angle = PI2 / validDataCount;\n }\n\n if (angle < minAngle) {\n angle = minAngle;\n restAngle -= minAngle;\n } else {\n valueSumLargerThanMinAngle += value;\n }\n\n var endAngle = currentAngle + dir * angle;\n data.setItemLayout(idx, {\n angle: angle,\n startAngle: currentAngle,\n endAngle: endAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? linearMap(value, extent, [r0, r]) : r\n });\n currentAngle = endAngle;\n }); // Some sector is constrained by minAngle\n // Rest sectors needs recalculate angle\n\n if (restAngle < PI2 && validDataCount) {\n // Average the angle if rest angle is not enough after all angles is\n // Constrained by minAngle\n if (restAngle <= 1e-3) {\n var angle_1 = PI2 / validDataCount;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_1 = data.getItemLayout(idx);\n layout_1.angle = angle_1;\n layout_1.startAngle = startAngle + dir * idx * angle_1;\n layout_1.endAngle = startAngle + dir * (idx + 1) * angle_1;\n }\n });\n } else {\n unitRadian = restAngle / valueSumLargerThanMinAngle;\n currentAngle = startAngle;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_2 = data.getItemLayout(idx);\n var angle = layout_2.angle === minAngle ? minAngle : value * unitRadian;\n layout_2.startAngle = currentAngle;\n layout_2.endAngle = currentAngle + dir * angle;\n currentAngle += dir * angle;\n }\n });\n }\n }\n });\n}"]},"metadata":{},"sourceType":"module"} |