Skip to content

Commit 689414c

Browse files
committed
add radial axis drag interactions
- that update `polar.radialaxis.position`
1 parent 122dd0b commit 689414c

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

src/plots/polar/polar.js

+53
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ proto.updateAngularAxis = function(fullLayout, polarLayout) {
452452
proto.updateFx = function(fullLayout, polarLayout) {
453453
if(!this.gd._context.staticPlot) {
454454
this.updateMainDrag(fullLayout, polarLayout);
455+
this.updateRadialDrag(fullLayout, polarLayout);
455456
}
456457
};
457458

@@ -630,6 +631,58 @@ proto.updateMainDrag = function(fullLayout) {
630631
dragElement.init(dragOpts);
631632
};
632633

634+
proto.updateRadialDrag = function(fullLayout, polarLayout) {
635+
var _this = this;
636+
var gd = _this.gd;
637+
var layers = _this.layers;
638+
var radius = _this.radius;
639+
var cx = _this.cx;
640+
var cy = _this.cy;
641+
var angle0 = deg2rad(polarLayout.radialaxis.position);
642+
var bl = 50;
643+
var bl2 = bl / 2;
644+
var radialDrag = dragBox.makeDragger(layers, 'radialdrag', 'move', -bl2, -bl2, bl, bl);
645+
var radialDrag3 = d3.select(radialDrag);
646+
var dragOpts = {element: radialDrag, gd: gd};
647+
648+
radialDrag3.attr('transform', strTranslate(
649+
cx + (radius + bl2) * Math.cos(angle0),
650+
cy - (radius + bl2) * Math.sin(angle0)
651+
));
652+
653+
var x0, y0, angle1;
654+
655+
function rotatePrep(evt, startX, startY) {
656+
x0 = startX;
657+
y0 = startY;
658+
}
659+
660+
function rotateMove(dx, dy) {
661+
var x1 = x0 + dx;
662+
var y1 = y0 + dy;
663+
var ax = x1 - cx - bl;
664+
var ay = cy - y1 + bl;
665+
666+
angle1 = rad2deg(Math.atan2(ay, ax));
667+
668+
var transform = strTranslate(cx, cy) + strRotate(-angle1);
669+
layers.radialaxis.attr('transform', transform);
670+
layers.radialline.attr('transform', transform);
671+
}
672+
673+
function rotateDone() {
674+
Plotly.relayout(gd, _this.id + '.radialaxis.position', angle1);
675+
}
676+
677+
dragOpts.prepFn = function(evt, startX, startY) {
678+
rotatePrep(evt, startX, startY);
679+
dragOpts.moveFn = rotateMove;
680+
dragOpts.doneFn = rotateDone;
681+
};
682+
683+
dragElement.init(dragOpts);
684+
};
685+
633686
proto.isPtWithinSector = function() {
634687
var sector = this.sector;
635688

0 commit comments

Comments
 (0)