path-2-curve.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var path_2_absolute_1 = require("./path-2-absolute");
  4. var segment_2_cubic_1 = require("./process/segment-2-cubic");
  5. function pathToCurve(path, needZCommandIndexes) {
  6. if (needZCommandIndexes === void 0) { needZCommandIndexes = false; }
  7. var pathArray = path_2_absolute_1.default(path);
  8. var params = {
  9. x1: 0, y1: 0, x2: 0, y2: 0, x: 0, y: 0, qx: null, qy: null,
  10. };
  11. var allPathCommands = [];
  12. var pathCommand = '';
  13. var ii = pathArray.length;
  14. var segment;
  15. var seglen;
  16. var zCommandIndexes = [];
  17. for (var i = 0; i < ii; i += 1) {
  18. if (pathArray[i])
  19. pathCommand = pathArray[i][0];
  20. allPathCommands[i] = pathCommand;
  21. pathArray[i] = segment_2_cubic_1.segmentToCubic(pathArray[i], params);
  22. fixArc(pathArray, allPathCommands, i);
  23. ii = pathArray.length; // solves curveArrays ending in Z
  24. // keep Z command account for lineJoin
  25. // @see https://github.com/antvis/util/issues/68
  26. if (pathCommand === 'Z') {
  27. zCommandIndexes.push(i);
  28. }
  29. segment = pathArray[i];
  30. seglen = segment.length;
  31. params.x1 = +segment[seglen - 2];
  32. params.y1 = +segment[seglen - 1];
  33. params.x2 = +(segment[seglen - 4]) || params.x1;
  34. params.y2 = +(segment[seglen - 3]) || params.y1;
  35. }
  36. if (needZCommandIndexes) {
  37. return [pathArray, zCommandIndexes];
  38. }
  39. else {
  40. return pathArray;
  41. }
  42. }
  43. exports.default = pathToCurve;
  44. function fixArc(pathArray, allPathCommands, i) {
  45. if (pathArray[i].length > 7) {
  46. pathArray[i].shift();
  47. var pi = pathArray[i];
  48. // const ni = i + 1;
  49. var ni = i;
  50. while (pi.length) {
  51. // if created multiple C:s, their original seg is saved
  52. allPathCommands[i] = 'A';
  53. // @ts-ignore
  54. pathArray.splice(ni += 1, 0, ['C'].concat(pi.splice(0, 6)));
  55. }
  56. pathArray.splice(i, 1);
  57. }
  58. }
  59. //# sourceMappingURL=path-2-curve.js.map