chunk-FC47MSTP.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
  1. import {
  2. BE_ORDINAL,
  3. CoordinateSystem_default,
  4. CtorInt32Array,
  5. DISPLAY_STATES,
  6. Polyline_default,
  7. SINGLE_REFERRING,
  8. SOURCE_FORMAT_ORIGINAL,
  9. SPECIAL_STATES,
  10. SeriesDataSchema,
  11. SeriesData_default,
  12. SeriesDimensionDefine_default,
  13. VISUAL_DIMENSIONS,
  14. createDimNameMap,
  15. createSourceFromSeriesDataOption,
  16. enableDataStack,
  17. ensureSourceDimNameMap,
  18. getDataItemValue,
  19. getDimensionTypeByAxis,
  20. guessOrdinal,
  21. isSourceInstance,
  22. makeSeriesEncodeForAxisCoordSys,
  23. normalizeToArray,
  24. shouldOmitUnusedDimensions
  25. } from "./chunk-4Z63X5VE.js";
  26. import {
  27. PathProxy_default,
  28. Path_default,
  29. Point_default,
  30. createHashMap,
  31. cubicProjectPoint,
  32. curry,
  33. defaults,
  34. dist,
  35. each,
  36. extend,
  37. invert,
  38. isArray,
  39. isFunction,
  40. isObject,
  41. isString,
  42. lerp,
  43. map,
  44. normalizeRadian,
  45. quadraticProjectPoint,
  46. retrieve,
  47. retrieve2
  48. } from "./chunk-NFL6MJ5K.js";
  49. import {
  50. init_define_APP_INFO
  51. } from "./chunk-XY75H3MP.js";
  52. // node_modules/echarts/lib/data/helper/createDimensions.js
  53. init_define_APP_INFO();
  54. function createDimensions(source, opt) {
  55. return prepareSeriesDataSchema(source, opt).dimensions;
  56. }
  57. function prepareSeriesDataSchema(source, opt) {
  58. if (!isSourceInstance(source)) {
  59. source = createSourceFromSeriesDataOption(source);
  60. }
  61. opt = opt || {};
  62. var sysDims = opt.coordDimensions || [];
  63. var dimsDef = opt.dimensionsDefine || source.dimensionsDefine || [];
  64. var coordDimNameMap = createHashMap();
  65. var resultList = [];
  66. var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount);
  67. var omitUnusedDimensions = opt.canOmitUnusedDimensions && shouldOmitUnusedDimensions(dimCount);
  68. var isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine;
  69. var dataDimNameMap = isUsingSourceDimensionsDef ? ensureSourceDimNameMap(source) : createDimNameMap(dimsDef);
  70. var encodeDef = opt.encodeDefine;
  71. if (!encodeDef && opt.encodeDefaulter) {
  72. encodeDef = opt.encodeDefaulter(source, dimCount);
  73. }
  74. var encodeDefMap = createHashMap(encodeDef);
  75. var indicesMap = new CtorInt32Array(dimCount);
  76. for (var i = 0; i < indicesMap.length; i++) {
  77. indicesMap[i] = -1;
  78. }
  79. function getResultItem(dimIdx) {
  80. var idx = indicesMap[dimIdx];
  81. if (idx < 0) {
  82. var dimDefItemRaw = dimsDef[dimIdx];
  83. var dimDefItem = isObject(dimDefItemRaw) ? dimDefItemRaw : {
  84. name: dimDefItemRaw
  85. };
  86. var resultItem2 = new SeriesDimensionDefine_default();
  87. var userDimName = dimDefItem.name;
  88. if (userDimName != null && dataDimNameMap.get(userDimName) != null) {
  89. resultItem2.name = resultItem2.displayName = userDimName;
  90. }
  91. dimDefItem.type != null && (resultItem2.type = dimDefItem.type);
  92. dimDefItem.displayName != null && (resultItem2.displayName = dimDefItem.displayName);
  93. var newIdx = resultList.length;
  94. indicesMap[dimIdx] = newIdx;
  95. resultItem2.storeDimIndex = dimIdx;
  96. resultList.push(resultItem2);
  97. return resultItem2;
  98. }
  99. return resultList[idx];
  100. }
  101. if (!omitUnusedDimensions) {
  102. for (var i = 0; i < dimCount; i++) {
  103. getResultItem(i);
  104. }
  105. }
  106. encodeDefMap.each(function(dataDimsRaw, coordDim2) {
  107. var dataDims = normalizeToArray(dataDimsRaw).slice();
  108. if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) {
  109. encodeDefMap.set(coordDim2, false);
  110. return;
  111. }
  112. var validDataDims = encodeDefMap.set(coordDim2, []);
  113. each(dataDims, function(resultDimIdxOrName, idx) {
  114. var resultDimIdx2 = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName;
  115. if (resultDimIdx2 != null && resultDimIdx2 < dimCount) {
  116. validDataDims[idx] = resultDimIdx2;
  117. applyDim(getResultItem(resultDimIdx2), coordDim2, idx);
  118. }
  119. });
  120. });
  121. var availDimIdx = 0;
  122. each(sysDims, function(sysDimItemRaw) {
  123. var coordDim2;
  124. var sysDimItemDimsDef;
  125. var sysDimItemOtherDims;
  126. var sysDimItem;
  127. if (isString(sysDimItemRaw)) {
  128. coordDim2 = sysDimItemRaw;
  129. sysDimItem = {};
  130. } else {
  131. sysDimItem = sysDimItemRaw;
  132. coordDim2 = sysDimItem.name;
  133. var ordinalMeta = sysDimItem.ordinalMeta;
  134. sysDimItem.ordinalMeta = null;
  135. sysDimItem = extend({}, sysDimItem);
  136. sysDimItem.ordinalMeta = ordinalMeta;
  137. sysDimItemDimsDef = sysDimItem.dimsDef;
  138. sysDimItemOtherDims = sysDimItem.otherDims;
  139. sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null;
  140. }
  141. var dataDims = encodeDefMap.get(coordDim2);
  142. if (dataDims === false) {
  143. return;
  144. }
  145. dataDims = normalizeToArray(dataDims);
  146. if (!dataDims.length) {
  147. for (var i2 = 0; i2 < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i2++) {
  148. while (availDimIdx < dimCount && getResultItem(availDimIdx).coordDim != null) {
  149. availDimIdx++;
  150. }
  151. availDimIdx < dimCount && dataDims.push(availDimIdx++);
  152. }
  153. }
  154. each(dataDims, function(resultDimIdx2, coordDimIndex) {
  155. var resultItem2 = getResultItem(resultDimIdx2);
  156. if (isUsingSourceDimensionsDef && sysDimItem.type != null) {
  157. resultItem2.type = sysDimItem.type;
  158. }
  159. applyDim(defaults(resultItem2, sysDimItem), coordDim2, coordDimIndex);
  160. if (resultItem2.name == null && sysDimItemDimsDef) {
  161. var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];
  162. !isObject(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {
  163. name: sysDimItemDimsDefItem
  164. });
  165. resultItem2.name = resultItem2.displayName = sysDimItemDimsDefItem.name;
  166. resultItem2.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;
  167. }
  168. sysDimItemOtherDims && defaults(resultItem2.otherDims, sysDimItemOtherDims);
  169. });
  170. });
  171. function applyDim(resultItem2, coordDim2, coordDimIndex) {
  172. if (VISUAL_DIMENSIONS.get(coordDim2) != null) {
  173. resultItem2.otherDims[coordDim2] = coordDimIndex;
  174. } else {
  175. resultItem2.coordDim = coordDim2;
  176. resultItem2.coordDimIndex = coordDimIndex;
  177. coordDimNameMap.set(coordDim2, true);
  178. }
  179. }
  180. var generateCoord = opt.generateCoord;
  181. var generateCoordCount = opt.generateCoordCount;
  182. var fromZero = generateCoordCount != null;
  183. generateCoordCount = generateCoord ? generateCoordCount || 1 : 0;
  184. var extra = generateCoord || "value";
  185. function ifNoNameFillWithCoordName(resultItem2) {
  186. if (resultItem2.name == null) {
  187. resultItem2.name = resultItem2.coordDim;
  188. }
  189. }
  190. if (!omitUnusedDimensions) {
  191. for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {
  192. var resultItem = getResultItem(resultDimIdx);
  193. var coordDim = resultItem.coordDim;
  194. if (coordDim == null) {
  195. resultItem.coordDim = genCoordDimName(extra, coordDimNameMap, fromZero);
  196. resultItem.coordDimIndex = 0;
  197. if (!generateCoord || generateCoordCount <= 0) {
  198. resultItem.isExtraCoord = true;
  199. }
  200. generateCoordCount--;
  201. }
  202. ifNoNameFillWithCoordName(resultItem);
  203. if (resultItem.type == null && (guessOrdinal(source, resultDimIdx) === BE_ORDINAL.Must || resultItem.isExtraCoord && (resultItem.otherDims.itemName != null || resultItem.otherDims.seriesName != null))) {
  204. resultItem.type = "ordinal";
  205. }
  206. }
  207. } else {
  208. each(resultList, function(resultItem2) {
  209. ifNoNameFillWithCoordName(resultItem2);
  210. });
  211. resultList.sort(function(item0, item1) {
  212. return item0.storeDimIndex - item1.storeDimIndex;
  213. });
  214. }
  215. removeDuplication(resultList);
  216. return new SeriesDataSchema({
  217. source,
  218. dimensions: resultList,
  219. fullDimensionCount: dimCount,
  220. dimensionOmitted: omitUnusedDimensions
  221. });
  222. }
  223. function removeDuplication(result) {
  224. var duplicationMap = createHashMap();
  225. for (var i = 0; i < result.length; i++) {
  226. var dim = result[i];
  227. var dimOriginalName = dim.name;
  228. var count = duplicationMap.get(dimOriginalName) || 0;
  229. if (count > 0) {
  230. dim.name = dimOriginalName + (count - 1);
  231. }
  232. count++;
  233. duplicationMap.set(dimOriginalName, count);
  234. }
  235. }
  236. function getDimCount(source, sysDims, dimsDef, optDimCount) {
  237. var dimCount = Math.max(source.dimensionsDetectedCount || 1, sysDims.length, dimsDef.length, optDimCount || 0);
  238. each(sysDims, function(sysDimItem) {
  239. var sysDimItemDimsDef;
  240. if (isObject(sysDimItem) && (sysDimItemDimsDef = sysDimItem.dimsDef)) {
  241. dimCount = Math.max(dimCount, sysDimItemDimsDef.length);
  242. }
  243. });
  244. return dimCount;
  245. }
  246. function genCoordDimName(name, map2, fromZero) {
  247. var mapData = map2.data;
  248. if (fromZero || mapData.hasOwnProperty(name)) {
  249. var i = 0;
  250. while (mapData.hasOwnProperty(name + i)) {
  251. i++;
  252. }
  253. name += i;
  254. }
  255. map2.set(name, true);
  256. return name;
  257. }
  258. // node_modules/echarts/lib/chart/helper/createSeriesData.js
  259. init_define_APP_INFO();
  260. // node_modules/echarts/lib/model/referHelper.js
  261. init_define_APP_INFO();
  262. var CoordSysInfo = function() {
  263. function CoordSysInfo2(coordSysName) {
  264. this.coordSysDims = [];
  265. this.axisMap = createHashMap();
  266. this.categoryAxisMap = createHashMap();
  267. this.coordSysName = coordSysName;
  268. }
  269. return CoordSysInfo2;
  270. }();
  271. function getCoordSysInfoBySeries(seriesModel) {
  272. var coordSysName = seriesModel.get("coordinateSystem");
  273. var result = new CoordSysInfo(coordSysName);
  274. var fetch = fetchers[coordSysName];
  275. if (fetch) {
  276. fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);
  277. return result;
  278. }
  279. }
  280. var fetchers = {
  281. cartesian2d: function(seriesModel, result, axisMap, categoryAxisMap) {
  282. var xAxisModel = seriesModel.getReferringComponents("xAxis", SINGLE_REFERRING).models[0];
  283. var yAxisModel = seriesModel.getReferringComponents("yAxis", SINGLE_REFERRING).models[0];
  284. if (true) {
  285. if (!xAxisModel) {
  286. throw new Error('xAxis "' + retrieve(seriesModel.get("xAxisIndex"), seriesModel.get("xAxisId"), 0) + '" not found');
  287. }
  288. if (!yAxisModel) {
  289. throw new Error('yAxis "' + retrieve(seriesModel.get("xAxisIndex"), seriesModel.get("yAxisId"), 0) + '" not found');
  290. }
  291. }
  292. result.coordSysDims = ["x", "y"];
  293. axisMap.set("x", xAxisModel);
  294. axisMap.set("y", yAxisModel);
  295. if (isCategory(xAxisModel)) {
  296. categoryAxisMap.set("x", xAxisModel);
  297. result.firstCategoryDimIndex = 0;
  298. }
  299. if (isCategory(yAxisModel)) {
  300. categoryAxisMap.set("y", yAxisModel);
  301. result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);
  302. }
  303. },
  304. singleAxis: function(seriesModel, result, axisMap, categoryAxisMap) {
  305. var singleAxisModel = seriesModel.getReferringComponents("singleAxis", SINGLE_REFERRING).models[0];
  306. if (true) {
  307. if (!singleAxisModel) {
  308. throw new Error("singleAxis should be specified.");
  309. }
  310. }
  311. result.coordSysDims = ["single"];
  312. axisMap.set("single", singleAxisModel);
  313. if (isCategory(singleAxisModel)) {
  314. categoryAxisMap.set("single", singleAxisModel);
  315. result.firstCategoryDimIndex = 0;
  316. }
  317. },
  318. polar: function(seriesModel, result, axisMap, categoryAxisMap) {
  319. var polarModel = seriesModel.getReferringComponents("polar", SINGLE_REFERRING).models[0];
  320. var radiusAxisModel = polarModel.findAxisModel("radiusAxis");
  321. var angleAxisModel = polarModel.findAxisModel("angleAxis");
  322. if (true) {
  323. if (!angleAxisModel) {
  324. throw new Error("angleAxis option not found");
  325. }
  326. if (!radiusAxisModel) {
  327. throw new Error("radiusAxis option not found");
  328. }
  329. }
  330. result.coordSysDims = ["radius", "angle"];
  331. axisMap.set("radius", radiusAxisModel);
  332. axisMap.set("angle", angleAxisModel);
  333. if (isCategory(radiusAxisModel)) {
  334. categoryAxisMap.set("radius", radiusAxisModel);
  335. result.firstCategoryDimIndex = 0;
  336. }
  337. if (isCategory(angleAxisModel)) {
  338. categoryAxisMap.set("angle", angleAxisModel);
  339. result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);
  340. }
  341. },
  342. geo: function(seriesModel, result, axisMap, categoryAxisMap) {
  343. result.coordSysDims = ["lng", "lat"];
  344. },
  345. parallel: function(seriesModel, result, axisMap, categoryAxisMap) {
  346. var ecModel = seriesModel.ecModel;
  347. var parallelModel = ecModel.getComponent("parallel", seriesModel.get("parallelIndex"));
  348. var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();
  349. each(parallelModel.parallelAxisIndex, function(axisIndex, index) {
  350. var axisModel = ecModel.getComponent("parallelAxis", axisIndex);
  351. var axisDim = coordSysDims[index];
  352. axisMap.set(axisDim, axisModel);
  353. if (isCategory(axisModel)) {
  354. categoryAxisMap.set(axisDim, axisModel);
  355. if (result.firstCategoryDimIndex == null) {
  356. result.firstCategoryDimIndex = index;
  357. }
  358. }
  359. });
  360. }
  361. };
  362. function isCategory(axisModel) {
  363. return axisModel.get("type") === "category";
  364. }
  365. // node_modules/echarts/lib/chart/helper/createSeriesData.js
  366. function getCoordSysDimDefs(seriesModel, coordSysInfo) {
  367. var coordSysName = seriesModel.get("coordinateSystem");
  368. var registeredCoordSys = CoordinateSystem_default.get(coordSysName);
  369. var coordSysDimDefs;
  370. if (coordSysInfo && coordSysInfo.coordSysDims) {
  371. coordSysDimDefs = map(coordSysInfo.coordSysDims, function(dim) {
  372. var dimInfo = {
  373. name: dim
  374. };
  375. var axisModel = coordSysInfo.axisMap.get(dim);
  376. if (axisModel) {
  377. var axisType = axisModel.get("type");
  378. dimInfo.type = getDimensionTypeByAxis(axisType);
  379. }
  380. return dimInfo;
  381. });
  382. }
  383. if (!coordSysDimDefs) {
  384. coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ["x", "y"];
  385. }
  386. return coordSysDimDefs;
  387. }
  388. function injectOrdinalMeta(dimInfoList, createInvertedIndices, coordSysInfo) {
  389. var firstCategoryDimIndex;
  390. var hasNameEncode;
  391. coordSysInfo && each(dimInfoList, function(dimInfo, dimIndex) {
  392. var coordDim = dimInfo.coordDim;
  393. var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);
  394. if (categoryAxisModel) {
  395. if (firstCategoryDimIndex == null) {
  396. firstCategoryDimIndex = dimIndex;
  397. }
  398. dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();
  399. if (createInvertedIndices) {
  400. dimInfo.createInvertedIndices = true;
  401. }
  402. }
  403. if (dimInfo.otherDims.itemName != null) {
  404. hasNameEncode = true;
  405. }
  406. });
  407. if (!hasNameEncode && firstCategoryDimIndex != null) {
  408. dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;
  409. }
  410. return firstCategoryDimIndex;
  411. }
  412. function createSeriesData(sourceRaw, seriesModel, opt) {
  413. opt = opt || {};
  414. var sourceManager = seriesModel.getSourceManager();
  415. var source;
  416. var isOriginalSource = false;
  417. if (sourceRaw) {
  418. isOriginalSource = true;
  419. source = createSourceFromSeriesDataOption(sourceRaw);
  420. } else {
  421. source = sourceManager.getSource();
  422. isOriginalSource = source.sourceFormat === SOURCE_FORMAT_ORIGINAL;
  423. }
  424. var coordSysInfo = getCoordSysInfoBySeries(seriesModel);
  425. var coordSysDimDefs = getCoordSysDimDefs(seriesModel, coordSysInfo);
  426. var useEncodeDefaulter = opt.useEncodeDefaulter;
  427. var encodeDefaulter = isFunction(useEncodeDefaulter) ? useEncodeDefaulter : useEncodeDefaulter ? curry(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null;
  428. var createDimensionOptions = {
  429. coordDimensions: coordSysDimDefs,
  430. generateCoord: opt.generateCoord,
  431. encodeDefine: seriesModel.getEncode(),
  432. encodeDefaulter,
  433. canOmitUnusedDimensions: !isOriginalSource
  434. };
  435. var schema = prepareSeriesDataSchema(source, createDimensionOptions);
  436. var firstCategoryDimIndex = injectOrdinalMeta(schema.dimensions, opt.createInvertedIndices, coordSysInfo);
  437. var store = !isOriginalSource ? sourceManager.getSharedDataStore(schema) : null;
  438. var stackCalculationInfo = enableDataStack(seriesModel, {
  439. schema,
  440. store
  441. });
  442. var data = new SeriesData_default(schema, seriesModel);
  443. data.setCalculationInfo(stackCalculationInfo);
  444. var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function(itemOpt, dimName, dataIndex, dimIndex) {
  445. return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);
  446. } : null;
  447. data.hasItemOption = false;
  448. data.initData(
  449. isOriginalSource ? source : store,
  450. null,
  451. dimValueGetter
  452. );
  453. return data;
  454. }
  455. function isNeedCompleteOrdinalData(source) {
  456. if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {
  457. var sampleItem = firstDataNotNull(source.data || []);
  458. return !isArray(getDataItemValue(sampleItem));
  459. }
  460. }
  461. function firstDataNotNull(arr) {
  462. var i = 0;
  463. while (i < arr.length && arr[i] == null) {
  464. i++;
  465. }
  466. return arr[i];
  467. }
  468. var createSeriesData_default = createSeriesData;
  469. // node_modules/echarts/lib/label/labelGuideHelper.js
  470. init_define_APP_INFO();
  471. var PI2 = Math.PI * 2;
  472. var CMD = PathProxy_default.CMD;
  473. var DEFAULT_SEARCH_SPACE = ["top", "right", "bottom", "left"];
  474. function getCandidateAnchor(pos, distance, rect, outPt, outDir) {
  475. var width = rect.width;
  476. var height = rect.height;
  477. switch (pos) {
  478. case "top":
  479. outPt.set(rect.x + width / 2, rect.y - distance);
  480. outDir.set(0, -1);
  481. break;
  482. case "bottom":
  483. outPt.set(rect.x + width / 2, rect.y + height + distance);
  484. outDir.set(0, 1);
  485. break;
  486. case "left":
  487. outPt.set(rect.x - distance, rect.y + height / 2);
  488. outDir.set(-1, 0);
  489. break;
  490. case "right":
  491. outPt.set(rect.x + width + distance, rect.y + height / 2);
  492. outDir.set(1, 0);
  493. break;
  494. }
  495. }
  496. function projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {
  497. x -= cx;
  498. y -= cy;
  499. var d = Math.sqrt(x * x + y * y);
  500. x /= d;
  501. y /= d;
  502. var ox = x * r + cx;
  503. var oy = y * r + cy;
  504. if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {
  505. out[0] = ox;
  506. out[1] = oy;
  507. return d - r;
  508. }
  509. if (anticlockwise) {
  510. var tmp = startAngle;
  511. startAngle = normalizeRadian(endAngle);
  512. endAngle = normalizeRadian(tmp);
  513. } else {
  514. startAngle = normalizeRadian(startAngle);
  515. endAngle = normalizeRadian(endAngle);
  516. }
  517. if (startAngle > endAngle) {
  518. endAngle += PI2;
  519. }
  520. var angle = Math.atan2(y, x);
  521. if (angle < 0) {
  522. angle += PI2;
  523. }
  524. if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {
  525. out[0] = ox;
  526. out[1] = oy;
  527. return d - r;
  528. }
  529. var x1 = r * Math.cos(startAngle) + cx;
  530. var y1 = r * Math.sin(startAngle) + cy;
  531. var x2 = r * Math.cos(endAngle) + cx;
  532. var y2 = r * Math.sin(endAngle) + cy;
  533. var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);
  534. var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);
  535. if (d1 < d2) {
  536. out[0] = x1;
  537. out[1] = y1;
  538. return Math.sqrt(d1);
  539. } else {
  540. out[0] = x2;
  541. out[1] = y2;
  542. return Math.sqrt(d2);
  543. }
  544. }
  545. function projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {
  546. var dx = x - x1;
  547. var dy = y - y1;
  548. var dx1 = x2 - x1;
  549. var dy1 = y2 - y1;
  550. var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);
  551. dx1 /= lineLen;
  552. dy1 /= lineLen;
  553. var projectedLen = dx * dx1 + dy * dy1;
  554. var t = projectedLen / lineLen;
  555. if (limitToEnds) {
  556. t = Math.min(Math.max(t, 0), 1);
  557. }
  558. t *= lineLen;
  559. var ox = out[0] = x1 + t * dx1;
  560. var oy = out[1] = y1 + t * dy1;
  561. return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));
  562. }
  563. function projectPointToRect(x1, y1, width, height, x, y, out) {
  564. if (width < 0) {
  565. x1 = x1 + width;
  566. width = -width;
  567. }
  568. if (height < 0) {
  569. y1 = y1 + height;
  570. height = -height;
  571. }
  572. var x2 = x1 + width;
  573. var y2 = y1 + height;
  574. var ox = out[0] = Math.min(Math.max(x, x1), x2);
  575. var oy = out[1] = Math.min(Math.max(y, y1), y2);
  576. return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));
  577. }
  578. var tmpPt = [];
  579. function nearestPointOnRect(pt, rect, out) {
  580. var dist2 = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);
  581. out.set(tmpPt[0], tmpPt[1]);
  582. return dist2;
  583. }
  584. function nearestPointOnPath(pt, path, out) {
  585. var xi = 0;
  586. var yi = 0;
  587. var x0 = 0;
  588. var y0 = 0;
  589. var x1;
  590. var y1;
  591. var minDist = Infinity;
  592. var data = path.data;
  593. var x = pt.x;
  594. var y = pt.y;
  595. for (var i = 0; i < data.length; ) {
  596. var cmd = data[i++];
  597. if (i === 1) {
  598. xi = data[i];
  599. yi = data[i + 1];
  600. x0 = xi;
  601. y0 = yi;
  602. }
  603. var d = minDist;
  604. switch (cmd) {
  605. case CMD.M:
  606. x0 = data[i++];
  607. y0 = data[i++];
  608. xi = x0;
  609. yi = y0;
  610. break;
  611. case CMD.L:
  612. d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);
  613. xi = data[i++];
  614. yi = data[i++];
  615. break;
  616. case CMD.C:
  617. d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);
  618. xi = data[i++];
  619. yi = data[i++];
  620. break;
  621. case CMD.Q:
  622. d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);
  623. xi = data[i++];
  624. yi = data[i++];
  625. break;
  626. case CMD.A:
  627. var cx = data[i++];
  628. var cy = data[i++];
  629. var rx = data[i++];
  630. var ry = data[i++];
  631. var theta = data[i++];
  632. var dTheta = data[i++];
  633. i += 1;
  634. var anticlockwise = !!(1 - data[i++]);
  635. x1 = Math.cos(theta) * rx + cx;
  636. y1 = Math.sin(theta) * ry + cy;
  637. if (i <= 1) {
  638. x0 = x1;
  639. y0 = y1;
  640. }
  641. var _x = (x - cx) * ry / rx + cx;
  642. d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);
  643. xi = Math.cos(theta + dTheta) * rx + cx;
  644. yi = Math.sin(theta + dTheta) * ry + cy;
  645. break;
  646. case CMD.R:
  647. x0 = xi = data[i++];
  648. y0 = yi = data[i++];
  649. var width = data[i++];
  650. var height = data[i++];
  651. d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);
  652. break;
  653. case CMD.Z:
  654. d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);
  655. xi = x0;
  656. yi = y0;
  657. break;
  658. }
  659. if (d < minDist) {
  660. minDist = d;
  661. out.set(tmpPt[0], tmpPt[1]);
  662. }
  663. }
  664. return minDist;
  665. }
  666. var pt0 = new Point_default();
  667. var pt1 = new Point_default();
  668. var pt2 = new Point_default();
  669. var dir = new Point_default();
  670. var dir2 = new Point_default();
  671. function updateLabelLinePoints(target, labelLineModel) {
  672. if (!target) {
  673. return;
  674. }
  675. var labelLine = target.getTextGuideLine();
  676. var label = target.getTextContent();
  677. if (!(label && labelLine)) {
  678. return;
  679. }
  680. var labelGuideConfig = target.textGuideLineConfig || {};
  681. var points = [[0, 0], [0, 0], [0, 0]];
  682. var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;
  683. var labelRect = label.getBoundingRect().clone();
  684. labelRect.applyTransform(label.getComputedTransform());
  685. var minDist = Infinity;
  686. var anchorPoint = labelGuideConfig.anchor;
  687. var targetTransform = target.getComputedTransform();
  688. var targetInversedTransform = targetTransform && invert([], targetTransform);
  689. var len = labelLineModel.get("length2") || 0;
  690. if (anchorPoint) {
  691. pt2.copy(anchorPoint);
  692. }
  693. for (var i = 0; i < searchSpace.length; i++) {
  694. var candidate = searchSpace[i];
  695. getCandidateAnchor(candidate, 0, labelRect, pt0, dir);
  696. Point_default.scaleAndAdd(pt1, pt0, dir, len);
  697. pt1.transform(targetInversedTransform);
  698. var boundingRect = target.getBoundingRect();
  699. var dist2 = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path_default ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2);
  700. if (dist2 < minDist) {
  701. minDist = dist2;
  702. pt1.transform(targetTransform);
  703. pt2.transform(targetTransform);
  704. pt2.toArray(points[0]);
  705. pt1.toArray(points[1]);
  706. pt0.toArray(points[2]);
  707. }
  708. }
  709. limitTurnAngle(points, labelLineModel.get("minTurnAngle"));
  710. labelLine.setShape({
  711. points
  712. });
  713. }
  714. var tmpArr = [];
  715. var tmpProjPoint = new Point_default();
  716. function limitTurnAngle(linePoints, minTurnAngle) {
  717. if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {
  718. return;
  719. }
  720. minTurnAngle = minTurnAngle / 180 * Math.PI;
  721. pt0.fromArray(linePoints[0]);
  722. pt1.fromArray(linePoints[1]);
  723. pt2.fromArray(linePoints[2]);
  724. Point_default.sub(dir, pt0, pt1);
  725. Point_default.sub(dir2, pt2, pt1);
  726. var len1 = dir.len();
  727. var len2 = dir2.len();
  728. if (len1 < 1e-3 || len2 < 1e-3) {
  729. return;
  730. }
  731. dir.scale(1 / len1);
  732. dir2.scale(1 / len2);
  733. var angleCos = dir.dot(dir2);
  734. var minTurnAngleCos = Math.cos(minTurnAngle);
  735. if (minTurnAngleCos < angleCos) {
  736. var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);
  737. tmpProjPoint.fromArray(tmpArr);
  738. tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle));
  739. var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);
  740. if (isNaN(t)) {
  741. return;
  742. }
  743. if (t < 0) {
  744. Point_default.copy(tmpProjPoint, pt1);
  745. } else if (t > 1) {
  746. Point_default.copy(tmpProjPoint, pt2);
  747. }
  748. tmpProjPoint.toArray(linePoints[1]);
  749. }
  750. }
  751. function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {
  752. if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {
  753. return;
  754. }
  755. maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;
  756. pt0.fromArray(linePoints[0]);
  757. pt1.fromArray(linePoints[1]);
  758. pt2.fromArray(linePoints[2]);
  759. Point_default.sub(dir, pt1, pt0);
  760. Point_default.sub(dir2, pt2, pt1);
  761. var len1 = dir.len();
  762. var len2 = dir2.len();
  763. if (len1 < 1e-3 || len2 < 1e-3) {
  764. return;
  765. }
  766. dir.scale(1 / len1);
  767. dir2.scale(1 / len2);
  768. var angleCos = dir.dot(surfaceNormal);
  769. var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);
  770. if (angleCos < maxSurfaceAngleCos) {
  771. var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);
  772. tmpProjPoint.fromArray(tmpArr);
  773. var HALF_PI = Math.PI / 2;
  774. var angle2 = Math.acos(dir2.dot(surfaceNormal));
  775. var newAngle = HALF_PI + angle2 - maxSurfaceAngle;
  776. if (newAngle >= HALF_PI) {
  777. Point_default.copy(tmpProjPoint, pt2);
  778. } else {
  779. tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle));
  780. var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);
  781. if (isNaN(t)) {
  782. return;
  783. }
  784. if (t < 0) {
  785. Point_default.copy(tmpProjPoint, pt1);
  786. } else if (t > 1) {
  787. Point_default.copy(tmpProjPoint, pt2);
  788. }
  789. }
  790. tmpProjPoint.toArray(linePoints[1]);
  791. }
  792. }
  793. function setLabelLineState(labelLine, ignore, stateName, stateModel) {
  794. var isNormal = stateName === "normal";
  795. var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName);
  796. stateObj.ignore = ignore;
  797. var smooth = stateModel.get("smooth");
  798. if (smooth && smooth === true) {
  799. smooth = 0.3;
  800. }
  801. stateObj.shape = stateObj.shape || {};
  802. if (smooth > 0) {
  803. stateObj.shape.smooth = smooth;
  804. }
  805. var styleObj = stateModel.getModel("lineStyle").getLineStyle();
  806. isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;
  807. }
  808. function buildLabelLinePath(path, shape) {
  809. var smooth = shape.smooth;
  810. var points = shape.points;
  811. if (!points) {
  812. return;
  813. }
  814. path.moveTo(points[0][0], points[0][1]);
  815. if (smooth > 0 && points.length >= 3) {
  816. var len1 = dist(points[0], points[1]);
  817. var len2 = dist(points[1], points[2]);
  818. if (!len1 || !len2) {
  819. path.lineTo(points[1][0], points[1][1]);
  820. path.lineTo(points[2][0], points[2][1]);
  821. return;
  822. }
  823. var moveLen = Math.min(len1, len2) * smooth;
  824. var midPoint0 = lerp([], points[1], points[0], moveLen / len1);
  825. var midPoint2 = lerp([], points[1], points[2], moveLen / len2);
  826. var midPoint1 = lerp([], midPoint0, midPoint2, 0.5);
  827. path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);
  828. path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);
  829. } else {
  830. for (var i = 1; i < points.length; i++) {
  831. path.lineTo(points[i][0], points[i][1]);
  832. }
  833. }
  834. }
  835. function setLabelLineStyle(targetEl, statesModels, defaultStyle) {
  836. var labelLine = targetEl.getTextGuideLine();
  837. var label = targetEl.getTextContent();
  838. if (!label) {
  839. if (labelLine) {
  840. targetEl.removeTextGuideLine();
  841. }
  842. return;
  843. }
  844. var normalModel = statesModels.normal;
  845. var showNormal = normalModel.get("show");
  846. var labelIgnoreNormal = label.ignore;
  847. for (var i = 0; i < DISPLAY_STATES.length; i++) {
  848. var stateName = DISPLAY_STATES[i];
  849. var stateModel = statesModels[stateName];
  850. var isNormal = stateName === "normal";
  851. if (stateModel) {
  852. var stateShow = stateModel.get("show");
  853. var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);
  854. if (isLabelIgnored || !retrieve2(stateShow, showNormal)) {
  855. var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName];
  856. if (stateObj) {
  857. stateObj.ignore = true;
  858. }
  859. continue;
  860. }
  861. if (!labelLine) {
  862. labelLine = new Polyline_default();
  863. targetEl.setTextGuideLine(labelLine);
  864. if (!isNormal && (labelIgnoreNormal || !showNormal)) {
  865. setLabelLineState(labelLine, true, "normal", statesModels.normal);
  866. }
  867. if (targetEl.stateProxy) {
  868. labelLine.stateProxy = targetEl.stateProxy;
  869. }
  870. }
  871. setLabelLineState(labelLine, false, stateName, stateModel);
  872. }
  873. }
  874. if (labelLine) {
  875. defaults(labelLine.style, defaultStyle);
  876. labelLine.style.fill = null;
  877. var showAbove = normalModel.get("showAbove");
  878. var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};
  879. labelLineConfig.showAbove = showAbove || false;
  880. labelLine.buildPath = buildLabelLinePath;
  881. }
  882. }
  883. function getLabelLineStatesModels(itemModel, labelLineName) {
  884. labelLineName = labelLineName || "labelLine";
  885. var statesModels = {
  886. normal: itemModel.getModel(labelLineName)
  887. };
  888. for (var i = 0; i < SPECIAL_STATES.length; i++) {
  889. var stateName = SPECIAL_STATES[i];
  890. statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);
  891. }
  892. return statesModels;
  893. }
  894. export {
  895. createDimensions,
  896. prepareSeriesDataSchema,
  897. createSeriesData_default,
  898. updateLabelLinePoints,
  899. limitTurnAngle,
  900. limitSurfaceAngle,
  901. setLabelLineStyle,
  902. getLabelLineStatesModels
  903. };
  904. //# sourceMappingURL=chunk-FC47MSTP.js.map