Fix for nearly whole d3.svg.arc's.

It's surprisingly difficult to render a circle in SVG.
This commit is contained in:
Michael Bostock 2011-01-05 15:38:38 -08:00
Родитель 888ee9dcfb
Коммит f0bf36690c
4 изменённых файлов: 13 добавлений и 11 удалений

7
d3.js поставляемый
Просмотреть файл

@ -1,4 +1,4 @@
(function(){d3 = {version: "0.28.7"}; // semver
(function(){d3 = {version: "0.28.8"}; // semver
if (!Date.now) Date.now = function() {
return +new Date();
};
@ -1981,7 +1981,7 @@ d3.svg.arc = function() {
s0 = Math.sin(a0),
c1 = Math.cos(a1),
s1 = Math.sin(a1);
return da >= 2 * Math.PI
return da >= d3_svg_arcMax
? (r0
? "M0," + r1
+ "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
@ -2033,7 +2033,8 @@ d3.svg.arc = function() {
return arc;
};
var d3_svg_arcOffset = -Math.PI / 2;
var d3_svg_arcOffset = -Math.PI / 2,
d3_svg_arcMax = 2 * Math.PI - 1e-6;
function d3_svg_arcInnerRadius(d) {
return d.innerRadius;

10
d3.min.js поставляемый
Просмотреть файл

@ -21,7 +21,7 @@ m:q;return c};c.attr=function(k,n){return c.attrTween(k,da(n))};c.styleTween=fun
n=-1;k.delay(function(q,m){return j[m?n:++n]});n=-1;k.duration(function(q,m){return l[m?n:++n]});return k};c.remove=function(){h=true;return c};c.each=function(k,n){g[k].add(n);return c};c.call=$;return c.delay(0).duration(250)}function Aa(a,b){var c=Date.now(),f=false,d=c+b,e=D;if(isFinite(b)){for(;e;){if(e.callback==a){e.then=c;e.delay=b;f=true}else{var h=e.then+e.delay;if(h<d)d=h}e=e.next}f||(D={callback:a,then:c,delay:b,next:D});if(!H){clearTimeout(T);T=setTimeout(Ba,Math.max(24,d-c))}}}function Ba(){H=
setInterval(Ca,24);T=0}function Ca(){for(var a,b=Date.now(),c=D;c;){a=b-c.then;if(a>c.delay)c.flush=c.callback(a);c=c.next}a=null;for(b=D;b;)b=b.flush?a?a.next=b.next:D=b.next:(a=b).next;a||(H=clearInterval(H))}function da(a){return typeof a=="function"?function(b,c,f){return d3.interpolate(f,a.call(this,b,c))}:function(b,c,f){return d3.interpolate(f,a)}}function Da(a){return a.innerRadius}function Ea(a){return a.outerRadius}function ea(a){return a.startAngle}function fa(a){return a.endAngle}function U(a,
b,c,f){var d=[],e=-1,h=b.length,g=typeof c=="function",i=typeof f=="function",j;if(g&&i)for(;++e<h;)d.push([c.call(a,j=b[e],e),f.call(a,j,e)]);else if(g)for(;++e<h;)d.push([c.call(a,b[e],e),f]);else if(i)for(;++e<h;)d.push([c,f.call(a,b[e],e)]);else for(;++e<h;)d.push([c,f]);return d}function ga(a){return a.x}function ha(a){return a.y}function ia(a){if(a.length<1)return null;var b=[],c=0,f=a.length,d=a[0];for(b.push(d[0],",",d[1]);++c<f;)b.push("L",(d=a[c])[0],",",d[1]);return b.join("")}function E(a,
b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function V(a,b,c){a.push("C",E(ja,b),",",E(ja,c),",",E(ka,b),",",E(ka,c),",",E(la,b),",",E(la,c))}function Fa(){return 0}function Ga(a){return a.source}function Ha(a){return a.target}function Ia(a){return a.radius}d3={version:"0.28.7"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,b){return b<
b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function V(a,b,c){a.push("C",E(ja,b),",",E(ja,c),",",E(ka,b),",",E(ka,c),",",E(la,b),",",E(la,c))}function Fa(){return 0}function Ga(a){return a.source}function Ha(a){return a.target}function Ia(a){return a.radius}d3={version:"0.28.8"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,b){return b<
a?-1:b>a?1:0};d3.merge=function(a){return Array.prototype.concat.apply([],a)};d3.split=function(a,b){var c=[],f=[],d,e=-1,h=a.length;if(arguments.length<2)b=ma;for(;++e<h;)if(b.call(f,d=a[e],e)){c.push(f);f=[]}else f.push(d);c.push(f);return c};d3.range=function(a,b,c){if(arguments.length==1){b=a;a=0}if(c==null)c=1;if((b-a)/c==Infinity)throw Error("infinite range");var f=[],d=-1,e;if(c<0)for(;(e=a+c*++d)>b;)f.push(e);else for(;(e=a+c*++d)<b;)f.push(e);return f};d3.requote=function(a){return a.replace(Ja,
"\\$&")};var Ja=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,c){var f=new XMLHttpRequest;if(arguments.length<3)c=b;else b&&f.overrideMimeType(b);f.open("GET",a,true);f.onreadystatechange=function(){if(f.readyState==4)c(f.status<300?f:null)};f.send(null)};d3.text=function(a,b,c){if(arguments.length<3){c=b;b=null}d3.xhr(a,b,function(f){c(f&&f.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(c){b(c?JSON.parse(c):null)})};d3.html=function(a,b){d3.text(a,"text/html",
function(c){if(c!=null){var f=document.createRange();f.selectNode(document.body);c=f.createContextualFragment(c)}b(c)})};d3.xml=function(a,b,c){if(arguments.length<3){c=b;b=null}d3.xhr(a,b,function(f){c(f&&f.responseXML)})};d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,
@ -47,10 +47,10 @@ b=e;c={};for(var h=-1,g=-1,i=b.length;++h<i;){e=b[h];e in c||(c[e]=++g)}return a
function(){return d3.scale.ordinal().range(Qa)};d3.scale.category20=function(){return d3.scale.ordinal().range(Ra)};d3.scale.category20b=function(){return d3.scale.ordinal().range(Sa)};d3.scale.category20c=function(){return d3.scale.ordinal().range(Ta)};var Qa=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Ra=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2",
"#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Sa=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Ta=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function a(){for(var h=
-1,g=e.length=d.length,i=f.length/g;++h<g;)e[h]=f[~~(h*i)]}function b(h){if(isNaN(h=+h))return NaN;for(var g=0,i=e.length-1;g<=i;){var j=g+i>>1,l=e[j];if(l<h)g=j+1;else if(l>h)i=j-1;else return j}return i<0?0:i}function c(h){return d[b(h)]}var f=[],d=[],e=[];c.domain=function(h){if(!arguments.length)return f;f=h.filter(function(g){return!isNaN(g)}).sort(d3.ascending);a();return c};c.range=function(h){if(!arguments.length)return d;d=h;a();return c};c.quantiles=function(){return e};return c};d3.svg=
{};d3.svg.arc=function(){function a(e,h){var g=b.call(this,e,h),i=c.call(this,e,h),j=f.call(this,e,h)+J,l=d.call(this,e,h)+J,o=l-j,p=o<Math.PI?"0":"1",k=Math.cos(j);j=Math.sin(j);var n=Math.cos(l);l=Math.sin(l);return o>=2*Math.PI?g?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+g+"A"+g+","+g+" 0 1,1 0,"+-g+"A"+g+","+g+" 0 1,1 0,"+g+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":g?"M"+i*k+","+i*j+"A"+i+","+i+" 0 "+p+",1 "+i*n+","+i*l+"L"+g*n+","+g*l+"A"+g+
","+g+" 0 "+p+",0 "+g*k+","+g*j+"Z":"M"+i*k+","+i*j+"A"+i+","+i+" 0 "+p+",1 "+i*n+","+i*l+"L0,0Z"}var b=Da,c=Ea,f=ea,d=fa;a.innerRadius=function(e){if(!arguments.length)return b;b=w(e);return a};a.outerRadius=function(e){if(!arguments.length)return c;c=w(e);return a};a.startAngle=function(e){if(!arguments.length)return f;f=w(e);return a};a.endAngle=function(e){if(!arguments.length)return d;d=w(e);return a};return a};var J=-Math.PI/2;d3.svg.line=function(){function a(e){return e.length<1?null:"M"+
d(U(this,e,b,c))}var b=ga,c=ha,f="linear",d=K[f];a.x=function(e){if(!arguments.length)return b;b=e;return a};a.y=function(e){if(!arguments.length)return c;c=e;return a};a.interpolate=function(e){if(!arguments.length)return f;d=K[f=e];return a};return a};var K={linear:ia,basis:function(a){if(a.length<3)return ia(a);var b=[],c=1,f=a.length,d=a[0],e=d[0],h=d[1],g=[e,e,e,(d=a[1])[0]],i=[h,h,h,d[1]];b.push(e,",",h);for(V(b,g,i);++c<f;){d=a[c];g.shift();g.push(d[0]);i.shift();i.push(d[1]);V(b,g,i)}for(c=
-1;++c<2;){g.shift();g.push(d[0]);i.shift();i.push(d[1]);V(b,g,i)}return b.join("")}},ja=[0,2/3,1/3,0],ka=[0,1/3,2/3,0],la=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(h){return h.length<1?null:"M"+e(U(this,h,b,f))+"L"+e(U(this,h,b,c).reverse())+"Z"}var b=ga,c=Fa,f=ha,d="linear",e=K[d];a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y0=function(h){if(!arguments.length)return c;c=h;return a};a.y1=function(h){if(!arguments.length)return f;f=h;return a};a.interpolate=function(h){if(!arguments.length)return d;
{};d3.svg.arc=function(){function a(e,h){var g=b.call(this,e,h),i=c.call(this,e,h),j=f.call(this,e,h)+J,l=d.call(this,e,h)+J,o=l-j,p=o<Math.PI?"0":"1",k=Math.cos(j);j=Math.sin(j);var n=Math.cos(l);l=Math.sin(l);return o>=Ua?g?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+g+"A"+g+","+g+" 0 1,1 0,"+-g+"A"+g+","+g+" 0 1,1 0,"+g+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":g?"M"+i*k+","+i*j+"A"+i+","+i+" 0 "+p+",1 "+i*n+","+i*l+"L"+g*n+","+g*l+"A"+g+","+g+
" 0 "+p+",0 "+g*k+","+g*j+"Z":"M"+i*k+","+i*j+"A"+i+","+i+" 0 "+p+",1 "+i*n+","+i*l+"L0,0Z"}var b=Da,c=Ea,f=ea,d=fa;a.innerRadius=function(e){if(!arguments.length)return b;b=w(e);return a};a.outerRadius=function(e){if(!arguments.length)return c;c=w(e);return a};a.startAngle=function(e){if(!arguments.length)return f;f=w(e);return a};a.endAngle=function(e){if(!arguments.length)return d;d=w(e);return a};return a};var J=-Math.PI/2,Ua=2*Math.PI-1.0E-6;d3.svg.line=function(){function a(e){return e.length<
1?null:"M"+d(U(this,e,b,c))}var b=ga,c=ha,f="linear",d=K[f];a.x=function(e){if(!arguments.length)return b;b=e;return a};a.y=function(e){if(!arguments.length)return c;c=e;return a};a.interpolate=function(e){if(!arguments.length)return f;d=K[f=e];return a};return a};var K={linear:ia,basis:function(a){if(a.length<3)return ia(a);var b=[],c=1,f=a.length,d=a[0],e=d[0],h=d[1],g=[e,e,e,(d=a[1])[0]],i=[h,h,h,d[1]];b.push(e,",",h);for(V(b,g,i);++c<f;){d=a[c];g.shift();g.push(d[0]);i.shift();i.push(d[1]);V(b,
g,i)}for(c=-1;++c<2;){g.shift();g.push(d[0]);i.shift();i.push(d[1]);V(b,g,i)}return b.join("")}},ja=[0,2/3,1/3,0],ka=[0,1/3,2/3,0],la=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(h){return h.length<1?null:"M"+e(U(this,h,b,f))+"L"+e(U(this,h,b,c).reverse())+"Z"}var b=ga,c=Fa,f=ha,d="linear",e=K[d];a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y0=function(h){if(!arguments.length)return c;c=h;return a};a.y1=function(h){if(!arguments.length)return f;f=h;return a};a.interpolate=function(h){if(!arguments.length)return d;
e=K[d=h];return a};return a};d3.svg.chord=function(){function a(g,i){var j=b(this,c,g,i),l=b(this,f,g,i);return"M"+j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+(j.a0==l.a0&&j.a1==l.a1?"Q 0,0 "+j.p0:"Q 0,0 "+l.p0+("A"+l.r+","+l.r+" 0 0,1 "+l.p1)+("Q 0,0 "+j.p0))+"Z"}function b(g,i,j,l){var o=i.call(g,j,l);i=d.call(g,o,l);j=e.call(g,o,l)+J;g=h.call(g,o,l)+J;return{r:i,a0:j,a1:g,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(g),i*Math.sin(g)]}}var c=Ga,f=Ha,d=Ia,e=ea,h=fa;a.radius=function(g){if(!arguments.length)return d;
d=w(g);return a};a.source=function(g){if(!arguments.length)return c;c=w(g);return a};a.target=function(g){if(!arguments.length)return f;f=w(g);return a};a.startAngle=function(g){if(!arguments.length)return e;e=w(g);return a};a.endAngle=function(g){if(!arguments.length)return h;h=w(g);return a};return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||a).createSVGPoint();if(Y<0&&(window.scrollX||window.scrollY)){var c=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",
0).style("left",0),f=c[0][0].getScreenCTM();Y=!(f.f||f.e);c.remove()}if(Y){b.x=d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());return[b.x,b.y]};var Y=/WebKit/.test(navigator.userAgent)?-1:0})();

Просмотреть файл

@ -1 +1 @@
d3 = {version: "0.28.7"}; // semver
d3 = {version: "0.28.8"}; // semver

Просмотреть файл

@ -15,7 +15,7 @@ d3.svg.arc = function() {
s0 = Math.sin(a0),
c1 = Math.cos(a1),
s1 = Math.sin(a1);
return da >= 2 * Math.PI
return da >= d3_svg_arcMax
? (r0
? "M0," + r1
+ "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
@ -67,7 +67,8 @@ d3.svg.arc = function() {
return arc;
};
var d3_svg_arcOffset = -Math.PI / 2;
var d3_svg_arcOffset = -Math.PI / 2,
d3_svg_arcMax = 2 * Math.PI - 1e-6;
function d3_svg_arcInnerRadius(d) {
return d.innerRadius;