(originalData, guideData)
| 762 | } |
| 763 | |
| 764 | function convertToPathData(originalData, guideData) { |
| 765 | if (originalData.tag == 'polygon') { |
| 766 | var newData = shallowCopyObject(originalData); |
| 767 | newData.tag = 'path'; |
| 768 | var originalAttributes = originalData.attributes; |
| 769 | var newAttributes = shallowCopyObject(originalAttributes); |
| 770 | var newPointsString = originalAttributes.points; |
| 771 | if (guideData.tag == 'polygon') { |
| 772 | var bbox = originalData.bbox; |
| 773 | bbox.cx = bbox.x + bbox.width / 2; |
| 774 | bbox.cy = bbox.y + bbox.height / 2; |
| 775 | var pointsString = originalAttributes.points; |
| 776 | var pointStrings = pointsString.split(' '); |
| 777 | var normPoints = pointStrings.map(function (p) { |
| 778 | var xy = p.split(','); |
| 779 | return [xy[0] - bbox.cx, xy[1] - bbox.cy]; |
| 780 | }); |
| 781 | var x0 = normPoints[normPoints.length - 1][0]; |
| 782 | var y0 = normPoints[normPoints.length - 1][1]; |
| 783 | for (var i = 0; i < normPoints.length; i++, x0 = x1, y0 = y1) { |
| 784 | var x1 = normPoints[i][0]; |
| 785 | var y1 = normPoints[i][1]; |
| 786 | var dx = x1 - x0; |
| 787 | var dy = y1 - y0; |
| 788 | if (dy == 0) { |
| 789 | continue; |
| 790 | } else { |
| 791 | var x2 = x0 - y0 * dx / dy; |
| 792 | } |
| 793 | if (0 <= x2 && x2 < Infinity && (x0 <= x2 && x2 <= x1 || x1 <= x2 && x2 <= x0)) { |
| 794 | break; |
| 795 | } |
| 796 | } |
| 797 | var newPointStrings = [[bbox.cx + x2, bbox.cy + 0].join(',')]; |
| 798 | newPointStrings = newPointStrings.concat(pointStrings.slice(i)); |
| 799 | newPointStrings = newPointStrings.concat(pointStrings.slice(0, i)); |
| 800 | newPointsString = newPointStrings.join(' '); |
| 801 | } |
| 802 | newAttributes['d'] = 'M' + newPointsString + 'z'; |
| 803 | delete newAttributes.points; |
| 804 | newData.attributes = newAttributes; |
| 805 | } else /* if (originalData.tag == 'ellipse') */{ |
| 806 | var newData = shallowCopyObject(originalData); |
| 807 | newData.tag = 'path'; |
| 808 | var originalAttributes = originalData.attributes; |
| 809 | var newAttributes = shallowCopyObject(originalAttributes); |
| 810 | var cx = originalAttributes.cx; |
| 811 | var cy = originalAttributes.cy; |
| 812 | var rx = originalAttributes.rx; |
| 813 | var ry = originalAttributes.ry; |
| 814 | if (guideData.tag == 'polygon') { |
| 815 | var bbox = guideData.bbox; |
| 816 | bbox.cx = bbox.x + bbox.width / 2; |
| 817 | bbox.cy = bbox.y + bbox.height / 2; |
| 818 | var p = guideData.attributes.points.split(' ')[0].split(','); |
| 819 | var sx = p[0]; |
| 820 | var sy = p[1]; |
| 821 | var dx = sx - bbox.cx; |
no test coverage detected