path-2-curve.js 1.9 KB

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