|
732 | 732 | }; |
733 | 733 | return dispatch; |
734 | 734 | } |
| 735 | + d3.transform = function(string) { |
| 736 | + var g = document.createElementNS(d3.ns.prefix.svg, "g"); |
| 737 | + return (d3.transform = function(string) { |
| 738 | + g.setAttribute("transform", string); |
| 739 | + var t = g.transform.baseVal.consolidate(); |
| 740 | + return new d3_transform(t ? t.matrix : d3_transformIdentity); |
| 741 | + })(string); |
| 742 | + }; |
| 743 | + function d3_transform(m) { |
| 744 | + var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; |
| 745 | + if (r0[0] * r1[1] < r1[0] * r0[1]) { |
| 746 | + r0[0] *= -1; |
| 747 | + r0[1] *= -1; |
| 748 | + kx *= -1; |
| 749 | + kz *= -1; |
| 750 | + } |
| 751 | + this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees; |
| 752 | + this.translate = [ m.e, m.f ]; |
| 753 | + this.scale = [ kx, ky ]; |
| 754 | + this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0; |
| 755 | + } |
| 756 | + d3_transform.prototype.toString = function() { |
| 757 | + return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; |
| 758 | + }; |
| 759 | + function d3_transformDot(a, b) { |
| 760 | + return a[0] * b[0] + a[1] * b[1]; |
| 761 | + } |
| 762 | + function d3_transformNormalize(a) { |
| 763 | + var k = Math.sqrt(d3_transformDot(a, a)); |
| 764 | + if (k) { |
| 765 | + a[0] /= k; |
| 766 | + a[1] /= k; |
| 767 | + } |
| 768 | + return k; |
| 769 | + } |
| 770 | + function d3_transformCombine(a, b, k) { |
| 771 | + a[0] += k * b[0]; |
| 772 | + a[1] += k * b[1]; |
| 773 | + return a; |
| 774 | + } |
| 775 | + var d3_transformDegrees = 180 / Math.PI, d3_transformIdentity = { |
| 776 | + a: 1, |
| 777 | + b: 0, |
| 778 | + c: 0, |
| 779 | + d: 1, |
| 780 | + e: 0, |
| 781 | + f: 0 |
| 782 | + }; |
735 | 783 | d3.interpolate = function(a, b) { |
736 | 784 | var i = d3.interpolators.length, f; |
737 | 785 | while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; |
|
872 | 920 | gb.setAttribute("transform", b); |
873 | 921 | a = ga.transform.baseVal; |
874 | 922 | b = gb.transform.baseVal; |
875 | | - var sa = [], sb = [], i = -1, n = a.numberOfItems, ta, tb, type; |
876 | | - if (n !== b.numberOfItems) return; |
| 923 | + var sa = [], sb = [], i = -1, n = a.numberOfItems, m = b.numberOfItems, ta, tb, type; |
| 924 | + if (m !== n) { |
| 925 | + if (!m) b = d3_interpolateTransformIdentity(a); else if (!n) a = d3_interpolateTransformIdentity(b), n = m; else return; |
| 926 | + } else if (!m) return; |
877 | 927 | while (++i < n) { |
878 | 928 | ta = a.getItem(i); |
879 | 929 | tb = b.getItem(i); |
880 | | - if ((type = ta.type) !== tb.type || type <= 1) return; |
| 930 | + type = ta.type; |
| 931 | + if (type !== tb.type || !type) return; |
881 | 932 | switch (type) { |
| 933 | + case 1: |
| 934 | + { |
| 935 | + sa.push(new d3_transform(ta.matrix)); |
| 936 | + sb.push(new d3_transform(tb.matrix)); |
| 937 | + continue; |
| 938 | + } |
882 | 939 | case 2: |
883 | 940 | { |
884 | 941 | ra = ta.matrix.e + "," + ta.matrix.f; |
|
895 | 952 | { |
896 | 953 | ra = ta.angle; |
897 | 954 | rb = tb.angle; |
898 | | - break; |
899 | 955 | } |
900 | 956 | } |
901 | 957 | sa.push(type = d3_interpolateTransformTypes[type], "(", ra, ")"); |
|
904 | 960 | return d3.interpolateString(sa.join(""), sb.join("")); |
905 | 961 | })(a, b); |
906 | 962 | }; |
| 963 | + function d3_interpolateTransformIdentity(a) { |
| 964 | + return { |
| 965 | + getItem: function(i) { |
| 966 | + return { |
| 967 | + type: a.getItem(i).type, |
| 968 | + angle: 0, |
| 969 | + matrix: d3_transformIdentity |
| 970 | + }; |
| 971 | + } |
| 972 | + }; |
| 973 | + } |
907 | 974 | d3.interpolateRgb = function(a, b) { |
908 | 975 | a = d3.rgb(a); |
909 | 976 | b = d3.rgb(b); |
|
1990 | 2057 | var d3_timer_frame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { |
1991 | 2058 | setTimeout(callback, 17); |
1992 | 2059 | }; |
1993 | | - d3.transform = function(string) { |
1994 | | - var g = document.createElementNS(d3.ns.prefix.svg, "g"), identity = { |
1995 | | - a: 1, |
1996 | | - b: 0, |
1997 | | - c: 0, |
1998 | | - d: 1, |
1999 | | - e: 0, |
2000 | | - f: 0 |
2001 | | - }; |
2002 | | - return (d3.transform = function(string) { |
2003 | | - g.setAttribute("transform", string); |
2004 | | - var t = g.transform.baseVal.consolidate(); |
2005 | | - return new d3_transform(t ? t.matrix : identity); |
2006 | | - })(string); |
2007 | | - }; |
2008 | | - function d3_transform(m) { |
2009 | | - var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; |
2010 | | - if (r0[0] * r1[1] < r1[0] * r0[1]) { |
2011 | | - r0[0] *= -1; |
2012 | | - r0[1] *= -1; |
2013 | | - kx *= -1; |
2014 | | - kz *= -1; |
2015 | | - } |
2016 | | - this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees; |
2017 | | - this.translate = [ m.e, m.f ]; |
2018 | | - this.scale = [ kx, ky ]; |
2019 | | - this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0; |
2020 | | - } |
2021 | | - d3_transform.prototype.toString = function() { |
2022 | | - return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; |
2023 | | - }; |
2024 | | - function d3_transformDot(a, b) { |
2025 | | - return a[0] * b[0] + a[1] * b[1]; |
2026 | | - } |
2027 | | - function d3_transformNormalize(a) { |
2028 | | - var k = Math.sqrt(d3_transformDot(a, a)); |
2029 | | - if (k) { |
2030 | | - a[0] /= k; |
2031 | | - a[1] /= k; |
2032 | | - } |
2033 | | - return k; |
2034 | | - } |
2035 | | - function d3_transformCombine(a, b, k) { |
2036 | | - a[0] += k * b[0]; |
2037 | | - a[1] += k * b[1]; |
2038 | | - return a; |
2039 | | - } |
2040 | | - var d3_transformDegrees = 180 / Math.PI; |
2041 | 2060 | d3.mouse = function(container) { |
2042 | 2061 | return d3_mousePoint(container, d3_eventSource()); |
2043 | 2062 | }; |
|
0 commit comments