@@ -50,9 +50,9 @@ function convertStyle(gd, trace) {
50
50
}
51
51
52
52
if ( subTypes . hasMarkers ( trace ) ) {
53
- opts . marker = convertMarkerStyle ( trace ) ;
54
- opts . markerSel = convertMarkerSelection ( trace , trace . selected ) ;
55
- opts . markerUnsel = convertMarkerSelection ( trace , trace . unselected ) ;
53
+ opts . marker = convertMarkerStyle ( gd , trace ) ;
54
+ opts . markerSel = convertMarkerSelection ( gd , trace , trace . selected ) ;
55
+ opts . markerUnsel = convertMarkerSelection ( gd , trace , trace . unselected ) ;
56
56
57
57
if ( ! trace . unselected && Lib . isArrayOrTypedArray ( trace . marker . opacity ) ) {
58
58
var mo = trace . marker . opacity ;
@@ -207,13 +207,14 @@ function convertTextStyle(gd, trace) {
207
207
}
208
208
209
209
210
- function convertMarkerStyle ( trace ) {
210
+ function convertMarkerStyle ( gd , trace ) {
211
211
var count = trace . _length ;
212
212
var optsIn = trace . marker ;
213
213
var optsOut = { } ;
214
214
var i ;
215
215
216
216
var multiSymbol = Lib . isArrayOrTypedArray ( optsIn . symbol ) ;
217
+ var multiAngle = Lib . isArrayOrTypedArray ( optsIn . angle ) ;
217
218
var multiColor = Lib . isArrayOrTypedArray ( optsIn . color ) ;
218
219
var multiLineColor = Lib . isArrayOrTypedArray ( optsIn . line . color ) ;
219
220
var multiOpacity = Lib . isArrayOrTypedArray ( optsIn . opacity ) ;
@@ -224,10 +225,14 @@ function convertMarkerStyle(trace) {
224
225
if ( ! multiSymbol ) isOpen = helpers . isOpenSymbol ( optsIn . symbol ) ;
225
226
226
227
// prepare colors
227
- if ( multiSymbol || multiColor || multiLineColor || multiOpacity ) {
228
+ if ( multiSymbol || multiColor || multiLineColor || multiOpacity || multiAngle ) {
229
+ optsOut . symbols = new Array ( count ) ;
230
+ optsOut . angles = new Array ( count ) ;
228
231
optsOut . colors = new Array ( count ) ;
229
232
optsOut . borderColors = new Array ( count ) ;
230
233
234
+ var symbols = optsIn . symbol ;
235
+ var angles = optsIn . angle ;
231
236
var colors = formatColor ( optsIn , optsIn . opacity , count ) ;
232
237
var borderColors = formatColor ( optsIn . line , optsIn . opacity , count ) ;
233
238
@@ -245,14 +250,29 @@ function convertMarkerStyle(trace) {
245
250
colors [ i ] = color ;
246
251
}
247
252
}
253
+ if ( ! Array . isArray ( symbols ) ) {
254
+ var symbol = symbols ;
255
+ symbols = Array ( count ) ;
256
+ for ( i = 0 ; i < count ; i ++ ) {
257
+ symbols [ i ] = symbol ;
258
+ }
259
+ }
260
+ if ( ! Array . isArray ( angles ) ) {
261
+ var angle = angles ;
262
+ angles = Array ( count ) ;
263
+ for ( i = 0 ; i < count ; i ++ ) {
264
+ angles [ i ] = angle ;
265
+ }
266
+ }
248
267
268
+ optsOut . symbols = symbols ;
269
+ optsOut . angles = angles ;
249
270
optsOut . colors = colors ;
250
271
optsOut . borderColors = borderColors ;
251
272
252
273
for ( i = 0 ; i < count ; i ++ ) {
253
274
if ( multiSymbol ) {
254
- var symbol = optsIn . symbol [ i ] ;
255
- isOpen = helpers . isOpenSymbol ( symbol ) ;
275
+ isOpen = helpers . isOpenSymbol ( optsIn . symbol [ i ] ) ;
256
276
}
257
277
if ( isOpen ) {
258
278
borderColors [ i ] = colors [ i ] . slice ( ) ;
@@ -262,6 +282,14 @@ function convertMarkerStyle(trace) {
262
282
}
263
283
264
284
optsOut . opacity = trace . opacity ;
285
+
286
+ optsOut . markers = new Array ( count ) ;
287
+ for ( i = 0 ; i < count ; i ++ ) {
288
+ optsOut . markers [ i ] = getSymbolSdf ( {
289
+ mx : optsOut . symbols [ i ] ,
290
+ ma : optsOut . angles [ i ]
291
+ } , trace ) ;
292
+ }
265
293
} else {
266
294
if ( isOpen ) {
267
295
optsOut . color = rgba ( optsIn . color , 'uint8' ) ;
@@ -273,16 +301,11 @@ function convertMarkerStyle(trace) {
273
301
}
274
302
275
303
optsOut . opacity = trace . opacity * optsIn . opacity ;
276
- }
277
304
278
- // prepare symbols
279
- if ( multiSymbol ) {
280
- optsOut . markers = new Array ( count ) ;
281
- for ( i = 0 ; i < count ; i ++ ) {
282
- optsOut . markers [ i ] = getSymbolSdf ( optsIn . symbol [ i ] ) ;
283
- }
284
- } else {
285
- optsOut . marker = getSymbolSdf ( optsIn . symbol ) ;
305
+ optsOut . marker = getSymbolSdf ( {
306
+ mx : optsIn . symbol ,
307
+ ma : optsIn . angle
308
+ } , trace ) ;
286
309
}
287
310
288
311
// prepare sizes
@@ -330,14 +353,14 @@ function convertMarkerStyle(trace) {
330
353
return optsOut ;
331
354
}
332
355
333
- function convertMarkerSelection ( trace , target ) {
356
+ function convertMarkerSelection ( gd , trace , target ) {
334
357
var optsIn = trace . marker ;
335
358
var optsOut = { } ;
336
359
337
360
if ( ! target ) return optsOut ;
338
361
339
362
if ( target . marker && target . marker . symbol ) {
340
- optsOut = convertMarkerStyle ( Lib . extendFlat ( { } , optsIn , target . marker ) ) ;
363
+ optsOut = convertMarkerStyle ( gd , Lib . extendFlat ( { } , optsIn , target . marker ) ) ;
341
364
} else if ( target . marker ) {
342
365
if ( target . marker . size ) optsOut . size = target . marker . size ;
343
366
if ( target . marker . color ) optsOut . colors = target . marker . color ;
@@ -389,7 +412,8 @@ var SYMBOL_STROKE = constants.SYMBOL_STROKE;
389
412
var SYMBOL_SDF = { } ;
390
413
var SYMBOL_SVG_CIRCLE = Drawing . symbolFuncs [ 0 ] ( SYMBOL_SIZE * 0.05 ) ;
391
414
392
- function getSymbolSdf ( symbol ) {
415
+ function getSymbolSdf ( d , trace ) {
416
+ var symbol = d . mx ;
393
417
if ( symbol === 'circle' ) return null ;
394
418
395
419
var symbolPath , symbolSdf ;
@@ -400,13 +424,17 @@ function getSymbolSdf(symbol) {
400
424
401
425
var isDot = helpers . isDotSymbol ( symbol ) ;
402
426
427
+ // until we may handle angles in shader?
428
+ if ( d . ma ) symbol += '_' + d . ma ;
429
+
403
430
// get symbol sdf from cache or generate it
404
431
if ( SYMBOL_SDF [ symbol ] ) return SYMBOL_SDF [ symbol ] ;
405
432
433
+ var angle = Drawing . getMarkerAngle ( d , trace ) ;
406
434
if ( isDot && ! symbolNoDot ) {
407
- symbolPath = symbolFunc ( SYMBOL_SIZE * 1.1 ) + SYMBOL_SVG_CIRCLE ;
435
+ symbolPath = symbolFunc ( SYMBOL_SIZE * 1.1 , angle ) + SYMBOL_SVG_CIRCLE ;
408
436
} else {
409
- symbolPath = symbolFunc ( SYMBOL_SIZE ) ;
437
+ symbolPath = symbolFunc ( SYMBOL_SIZE , angle ) ;
410
438
}
411
439
412
440
symbolSdf = svgSdf ( symbolPath , {
@@ -415,6 +443,7 @@ function getSymbolSdf(symbol) {
415
443
viewBox : [ - SYMBOL_SIZE , - SYMBOL_SIZE , SYMBOL_SIZE , SYMBOL_SIZE ] ,
416
444
stroke : symbolNoFill ? SYMBOL_STROKE : - SYMBOL_STROKE
417
445
} ) ;
446
+
418
447
SYMBOL_SDF [ symbol ] = symbolSdf ;
419
448
420
449
return symbolSdf || null ;
@@ -545,8 +574,8 @@ function convertLinePositions(gd, trace, positions) {
545
574
546
575
function convertErrorBarPositions ( gd , trace , positions , x , y ) {
547
576
var makeComputeError = Registry . getComponentMethod ( 'errorbars' , 'makeComputeError' ) ;
548
- var xa = AxisIDs . getFromId ( gd , trace . xaxis ) ;
549
- var ya = AxisIDs . getFromId ( gd , trace . yaxis ) ;
577
+ var xa = AxisIDs . getFromId ( gd , trace . xaxis , 'x' ) ;
578
+ var ya = AxisIDs . getFromId ( gd , trace . yaxis , 'y' ) ;
550
579
var count = positions . length / 2 ;
551
580
var out = { } ;
552
581
0 commit comments