8000 support setting size of circle marker using range coordinates · hcrocker-ansys/plotly.js@39ded84 · GitHub
[go: up one dir, main page]

Skip to content

Commit 39ded84

Browse files
support setting size of circle marker using range coordinates
1 parent 40f2221 commit 39ded84

File tree

8 files changed

+218
-123
lines changed

8 files changed

+218
-123
lines changed

src/components/drawing/index.js

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ drawing.setRect = function(s, x, y, w, h) {
103103
drawing.translatePoint = function(d, sel, xa, ya) {
104104
var x = xa.c2p(d.x);
105105
var y = ya.c2p(d.y);
106+
if (isNumeric(d.x1)) {
107+
x = (xa.c2p(d.x1) + x) / 2;
108+
}
109+
if (isNumeric(d.y1)) {
110+
y = (ya.c2p(d.y1) + y) / 2;
111+
}
112+
113+
// Store middle point for use on hover
114+
d.xc = x;
115+
d.yc = y;
106116

107117
if(isNumeric(x) && isNumeric(y) && sel.node()) {
108118
// for multiline text this works better
@@ -377,9 +387,9 @@ drawing.symbolNumber = function(v) {
377387
0 : Math.floor(Math.max(v, 0));
378388
};
379389

380-
function makePointPath(symbolNumber, r, t, s) {
390+
function makePointPath(symbolNumber, rx, ry, t, s) {
381391
var base = symbolNumber % 100;
382-
return drawing.symbolFuncs[base](r, t, s) + (symbolNumber >= 200 ? DOTPATH : '');
392+
return drawing.symbolFuncs[base](rx, ry, t, s) + (symbolNumber >= 200 ? DOTPATH : '');
383393
}
384394

385395
var stopFormatter = numberFormat('~f');
@@ -754,10 +764,10 @@ drawing.getPatternAttr = function(mp, i, dflt) {
754764
return mp;
755765
};
756766

757-
drawing.pointStyle = function(s, trace, gd, pt) {
767+
drawing.pointStyle = function(s, trace, xa, ya, gd, pt) {
758768
if(!s.size()) return;
759769

760-
var fns = drawing.makePointStyleFns(trace);
770+
var fns = drawing.makePointStyleFns(trace, xa, ya);
761771

762772
s.each(function(d) {
763773
drawing.singlePointStyle(d, d3.select(this), trace, fns, gd, pt);
@@ -775,21 +785,27 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {
775785
(d.mo === undefined ? marker.opacity : d.mo)
776786
);
777787

778-
if(fns.ms2mrc) {
779-
var r;
788+
if(fns.ms2mrx && fns.ms2mry) {
789+
var rx, ry;
780790

781791
// handle multi-trace graph edit case
782792
if(d.ms === 'various' || marker.size === 'various') {
783-
r = 3;
793+
rx = ry = 3;
784794
} else {
785-
r = fns.ms2mrc(d.ms);
795+
rx = fns.ms2mrx(d);
796+
ry = fns.ms2mry(d);
786797
}
787798

788799
// store the calculated size so hover can use it
789-
d.mrc = r;
800+
d.mrxc = rx;
801+
d.mryc = ry;
802+
803+
// TODO: Can we remove mrc?
804+
d.mrc = Math.max(rx, ry);
790805

806+
// TODO: Update selected size to handle ranges
791807
if(fns.selectedSizeFn) {
792-
r = d.mrc = fns.selectedSizeFn(d);
808+
d.mrc = fns.selectedSizeFn(d);
793809
}
794810

795811
// turn the symbol into a sanitized number
@@ -802,7 +818,7 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {
802818
var angle = getMarkerAngle(d, trace);
803819
var standoff = getMarkerStandoff(d, trace);
804820

805-
sel.attr('d', makePointPath(x, r, angle, standoff));
821+
sel.attr('d', makePointPath(x, rx, ry, angle, standoff));
806822
}
807823

808824
var perPointGradient = false;
@@ -920,7 +936,7 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {
920936
}
921937
};
922938

923-
drawing.makePointStyleFns = function(trace) {
939+
drawing.makePointStyleFns = function(trace, xa, ya) {
924940
var out = {};
925941
var marker = trace.marker;
926942

@@ -930,9 +946,28 @@ drawing.makePointStyleFns = function(trace) {
930946
out.lineScale = drawing.tryColorscale(marker, 'line');
931947

932948
if(Registry.traceIs(trace, 'symbols')) {
933-
out.ms2mrc = subTypes.isBubble(trace) ?
934-
makeBubbleSizeFn(trace) :
935-
function() { return (marker.size || 6) / 2; };
949+
const ms2mrc = subTypes.isBubble(trace)
950+
? makeBubbleSizeFn(trace)
951+
: function() { return (marker.size || 6) / 2; };
952+
953+
out.ms2mrx = function (trace) {
954+
var mr = ms2mrc(trace.ms);
955+
if (trace.x1 == null) {
956+
return mr;
957+
}
958+
var x = xa.c2p(trace.x);
959+
var x1 = xa.c2p(trace.x1);
960+
return Math.max(Math.abs(x1 - x) / 2, mr);
961+
}
962+
out.ms2mry = function(trace) {
963+
var mr = ms2mrc(trace.ms)
964+
if (trace.y1 == null) {
965+
return mr;
966+
}
967+
var y = ya.c2p(trace.y);
968+
var y1 = ya.c2p(trace.y1);
969+
return Math.max(Math.abs(y1 - y) / 2, mr);
970+
}
936971
}
937972

938973
if(trace.selectedpoints) {
@@ -1059,7 +1094,7 @@ drawing.selectedPointStyle = function(s, trace) {
10591094
var mx = d.mx || marker.symbol || 0;
10601095
var mrc2 = fns.selectedSizeFn(d);
10611096

1062-
pt.attr('d', makePointPath(drawing.symbolNumber(mx), mrc2, getMarkerAngle(d, trace), getMarkerStandoff(d, trace)));
1097+
pt.attr('d', makePointPath(drawing.symbolNumber(mx), mrc2, mrc2, getMarkerAngle(d, trace), getMarkerStandoff(d, trace)));
10631098

10641099
// save for Drawing.selectedTextStyle
10651100
d.mrc2 = mrc2;

0 commit comments

Comments
 (0)
0