chunk-F35ET5C4.js 30 KB

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