| 219 | |
| 220 | // slice path generation fn |
| 221 | var pathDescendant = function(d) { |
| 222 | var _x0 = viewMapX(d.x0); |
| 223 | var _x1 = viewMapX(d.x1); |
| 224 | var _y0 = viewMapY(d.y0); |
| 225 | var _y1 = viewMapY(d.y1); |
| 226 | |
| 227 | var dx = _x1 - _x0; |
| 228 | var dy = _y1 - _y0; |
| 229 | if(!dx || !dy) return ''; |
| 230 | |
| 231 | var cornerradius = trace.marker.cornerradius || 0; |
| 232 | var r = Math.min(cornerradius, dx / 2, dy / 2); |
| 233 | if( |
| 234 | r && |
| 235 | d.data && |
| 236 | d.data.data && |
| 237 | d.data.data.label |
| 238 | ) { |
| 239 | if(hasTop) r = Math.min(r, pad.t); |
| 240 | if(hasLeft) r = Math.min(r, pad.l); |
| 241 | if(hasRight) r = Math.min(r, pad.r); |
| 242 | if(hasBottom) r = Math.min(r, pad.b); |
| 243 | } |
| 244 | |
| 245 | var arc = function(rx, ry) { return r ? 'a' + pos(r, r) + ' 0 0 1 ' + pos(rx, ry) : ''; }; |
| 246 | |
| 247 | return ( |
| 248 | 'M' + pos(_x0, _y0 + r) + |
| 249 | arc(r, -r) + |
| 250 | 'L' + pos(_x1 - r, _y0) + |
| 251 | arc(r, r) + |
| 252 | 'L' + pos(_x1, _y1 - r) + |
| 253 | arc(-r, r) + |
| 254 | 'L' + pos(_x0 + r, _y1) + |
| 255 | arc(-r, -r) + 'Z' |
| 256 | ); |
| 257 | }; |
| 258 | |
| 259 | var toMoveInsideSlice = function(pt, opts) { |
| 260 | var x0 = pt.x0; |