@@ -348,6 +348,124 @@ proto.doAutoRange = function(fullLayout, polarLayout) {
348
348
} ;
349
349
350
350
proto . updateRadialAxis = function ( fullLayout , polarLayout ) {
351
+ var _this = this ;
352
+ var gd = _this . gd ;
353
+ var layers = _this . layers ;
354
+ var radius = _this . radius ;
355
+ var innerRadius = _this . innerRadius ;
356
+ var cx = _this . cx ;
357
+ var cy = _this . cy ;
358
+ var radialLayout = polarLayout . radialaxis ;
359
+ var a0 = mod ( polarLayout . sector [ 0 ] , 360 ) ;
360
+ var ax = _this . radialAxis ;
361
+ var hasRoomForIt = true ;
362
+
363
+ _this . fillViewInitialKey ( 'radialaxis.angle' , radialLayout . angle ) ;
364
+ _this . fillViewInitialKey ( 'radialaxis.range' , ax . range . slice ( ) ) ;
365
+
366
+ ax . setGeometry ( ) ;
367
+
368
+ // rotate auto tick labels by 180 if in quadrant II and III to make them
369
+ // readable from left-to-right
370
+ //
371
+ // TODO try moving deeper in Axes.drawLabels for better results?
372
+ if ( ax . tickangle === 'auto' && ( a0 > 90 && a0 <= 270 ) ) {
373
+ ax . tickangle = 180 ;
374
+ }
375
+
376
+ // easier to set rotate angle with custom translate function
377
+ var transFn = function ( d ) {
378
+ return strTranslate ( ax . l2p ( d . x ) + innerRadius , 0 ) ;
379
+ } ;
380
+
381
+ // set special grid path function
382
+ var gridPathFn = function ( d ) {
383
+ var sq = function ( x ) { return x * x ; } ;
384
+ var gammaX = function ( re ) {
385
+ var denom = sq ( re + 1.0 ) ;
386
+ var result = ( sq ( re ) - 1.0 ) / denom ;
387
+ return result ;
388
+ }
389
+ var gamma_x = gammaX ( d . x ) ;
390
+
391
+ var gridRadius = 0.5 * ( _this . radius - ax . r2p ( gamma_x ) ) ;
392
+ var gridCenter = gridRadius + ax . r2p ( gamma_x ) ;
393
+ return Lib . pathArc ( gridRadius , 0 , 2 * Math . PI , gridCenter , 0 ) ;
394
+ } ;
395
+
396
+ var newTickLayout = strTickLayout ( radialLayout ) ;
397
+ if ( _this . radialTickLayout !== newTickLayout ) {
398
+ layers [ 'radial-axis' ] . selectAll ( '.xtick' ) . remove ( ) ;
399
+ _this . radialTickLayout = newTickLayout ;
400
+ }
401
+
402
+ if ( hasRoomForIt ) {
403
+ ax . setScale ( ) ;
404
+
405
+ var vals = Axes . calcTicks ( ax ) ;
406
+ var valsClipped = Axes . clipEnds ( ax , vals ) ;
407
+ var tickSign = Axes . getTickSigns ( ax ) [ 2 ] ;
408
+
409
+ Axes . drawTicks ( gd , ax , {
410
+ vals : vals ,
411
+ layer : layers [ 'radial-axis' ] ,
412
+ path : Axes . makeTickPath ( ax , 0 , tickSign ) ,
413
+ transFn : transFn ,
414
+ crisp : false
415
+ } ) ;
416
+
417
+ Axes . drawGrid ( gd , ax , {
418
+ vals : valsClipped ,
419
+ layer : layers [ 'radial-grid' ] ,
420
+ path : gridPathFn ,
421
+ transFn : Lib . noop ,
422
+ crisp : false
423
+ } ) ;
424
+
425
+ Axes . drawLabels ( gd , ax , {
426
+ vals : vals ,
427
+ layer : layers [ 'radial-axis' ] ,
428
+ transFn : transFn ,
429
+ labelFns : Axes . makeLabelFns ( ax , 0 )
430
+ } ) ;
431
+ }
432
+
433
+ // stash 'actual' radial axis angle for drag handlers (in degrees)
434
+ var angle = _this . radialAxisAngle = _this . vangles ?
435
+ rad2deg ( snapToVertexAngle ( deg2rad ( radialLayout . angle ) , _this . vangles ) ) :
436
+ radialLayout . angle ;
437
+
438
+ var tLayer = strTranslate ( cx , cy ) ;
439
+ var tLayer2 = tLayer + strRotate ( - angle ) ;
440
+
441
+ updateElement (
442
+ layers [ 'radial-axis' ] ,
443
+ hasRoomForIt && ( radialLayout . showticklabels || radialLayout . ticks ) ,
444
+ { transform : tLayer2 }
445
+ ) ;
446
+
447
+ updateElement (
448
+ layers [ 'radial-grid' ] ,
449
+ hasRoomForIt && radialLayout . showgrid ,
450
+ { transform : tLayer }
451
+ ) ;
452
+
453
+ updateElement (
454
+ layers [ 'radial-line' ] . select ( 'line' ) ,
455
+ hasRoomForIt && radialLayout . showline ,
456
+ {
457
+ x1 : innerRadius ,
458
+ y1 : 0 ,
459
+ x2 : radius ,
460
+ y2 : 0 ,
461
+ transform : tLayer2
462
+ }
463
+ )
464
+ . attr ( 'stroke-width' , radialLayout . linewidth )
465
+ . call ( Color . stroke , radialLayout . linecolor ) ;
466
+ }
467
+
468
+ proto . _updateRadialAxis = function ( fullLayout , polarLayout ) {
351
469
var _this = this ;
352
470
var gd = _this . gd ;
353
471
var layers = _this . layers ;
0 commit comments