|
649 | 649 | x = this._wrapX(x);
|
650 | 650 | y = this._wrapY(y);
|
651 | 651 |
|
| 652 | + //TODO angles and radius need to be transformed |
652 | 653 | var xpt = this._matrix_map_point(this.ctx._transform, [x, y]);
|
653 | 654 | x = xpt[0];
|
654 | 655 | y = xpt[1];
|
|
1491 | 1492 | */
|
1492 | 1493 |
|
1493 | 1494 | c2d.internal.createArc = function (radius, startAngle, endAngle, anticlockwise) {
|
1494 |
| - |
1495 | 1495 | var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below
|
1496 |
| - |
1497 |
| - // normalize startAngle, endAngle to [-2PI, 2PI] |
1498 | 1496 | var twoPI = Math.PI * 2;
|
| 1497 | + var piOverTwo = Math.PI / 2.0; |
| 1498 | + |
| 1499 | + // normalize startAngle, endAngle to [0, 2PI] |
1499 | 1500 | var startAngleN = startAngle;
|
1500 | 1501 | if (startAngleN < twoPI || startAngleN > twoPI) {
|
1501 | 1502 | startAngleN = startAngleN % twoPI;
|
1502 | 1503 | }
|
| 1504 | + if (startAngleN < 0) { |
| 1505 | + startAngleN = twoPI + startAngleN; |
| 1506 | + } |
1503 | 1507 | var endAngleN = endAngle;
|
1504 | 1508 | if (endAngleN < twoPI || endAngleN > twoPI) {
|
1505 | 1509 | endAngleN = endAngleN % twoPI;
|
1506 | 1510 | }
|
| 1511 | + if (endAngleN < 0) { |
| 1512 | + endAngleN = twoPI + endAngleN; |
| 1513 | + } |
| 1514 | + |
| 1515 | + // Total arc angle is less than or equal to 2PI. |
| 1516 | + var totalAngle = Math.abs(endAngleN - startAngleN); |
| 1517 | + if (totalAngle < twoPI) { |
| 1518 | + if (totalAngle < twoPI) { |
| 1519 | + if (anticlockwise) { |
| 1520 | + if (startAngle < endAngle) { |
| 1521 | + totalAngle = twoPI - totalAngle; |
| 1522 | + } |
| 1523 | + } |
| 1524 | + else { |
| 1525 | + if (startAngle > endAngle) { |
| 1526 | + totalAngle = twoPI - totalAngle; |
| 1527 | + } |
| 1528 | + } |
| 1529 | + } |
| 1530 | + } |
1507 | 1531 |
|
1508 | 1532 | // Compute the sequence of arc curves, up to PI/2 at a time.
|
1509 |
| - // Total arc angle is less than 2PI. |
1510 | 1533 | var curves = [];
|
1511 |
| - var piOverTwo = Math.PI / 2.0; |
1512 |
| - // var sgn = (startAngle < endAngle) ? +1 : -1; // clockwise or counterclockwise |
1513 | 1534 | var sgn = anticlockwise ? -1 : +1;
|
1514 | 1535 |
|
1515 |
| - var a1 = startAngle; |
1516 |
| - for (var totalAngle = Math.min(twoPI, Math.abs(endAngleN - startAngleN)); totalAngle > EPSILON;) { |
1517 |
| - var a2 = a1 + sgn * Math.min(totalAngle, piOverTwo); |
| 1536 | + var a1 = startAngleN; |
| 1537 | + for (; totalAngle > EPSILON;) { |
| 1538 | + var remain = sgn * Math.min(totalAngle, piOverTwo); |
| 1539 | + var a2 = a1 + remain; |
1518 | 1540 | curves.push(this.createSmallArc(radius, a1, a2));
|
1519 | 1541 | totalAngle -= Math.abs(a2 - a1);
|
1520 | 1542 | a1 = a2;
|
|
1523 | 1545 | return curves;
|
1524 | 1546 | };
|
1525 | 1547 |
|
| 1548 | + |
1526 | 1549 | c2d.internal.getCurrentPage = function () {
|
1527 | 1550 | return this.pdf.internal.pages[this.pdf.internal.getCurrentPageInfo().pageNumber];
|
1528 | 1551 | };
|
|
0 commit comments