@@ -385,7 +385,8 @@ function getSymbolSdf(symbol) {
385
385
}
386
386
387
387
function convertLinePositions ( gd , trace , positions ) {
388
- var count = positions . length / 2 ;
388
+ var len = positions . length ;
389
+ var count = len / 2 ;
389
390
var linePositions ;
390
391
var i ;
391
392
@@ -394,38 +395,81 @@ function convertLinePositions(gd, trace, positions) {
394
395
linePositions = [ ] ;
395
396
for ( i = 0 ; i < count - 1 ; i ++ ) {
396
397
if ( isNaN ( positions [ i * 2 ] ) || isNaN ( positions [ i * 2 + 1 ] ) ) {
397
- linePositions . push ( NaN ) ;
398
- linePositions . push ( NaN ) ;
399
- linePositions . push ( NaN ) ;
400
- linePositions . push ( NaN ) ;
398
+ linePositions . push ( NaN , NaN , NaN , NaN ) ;
399
+ } else {
400
+ linePositions . push ( positions [ i * 2 ] , positions [ i * 2 + 1 ] ) ;
401
+ if ( ! isNaN ( positions [ i * 2 + 2 ] ) && ! isNaN ( positions [ i * 2 + 3 ] ) ) {
402
+ linePositions . push ( positions [ i * 2 + 2 ] , positions [ i * 2 + 1 ] ) ;
403
+ } else {
404
+ linePositions . push ( NaN , NaN ) ;
405
+ }
406
+ }
407
+ }
408
+ linePositions . push ( positions [ len - 2 ] , positions [ len - 1 ] ) ;
409
+ } else if ( trace . line . shape === 'hvh' ) {
410
+ linePositions = [ ] ;
411
+ for ( i = 0 ; i < count - 1 ; i ++ ) {
412
+ if ( isNaN ( positions [ i * 2 ] ) || isNaN ( positions [ i * 2 + 1 ] ) || isNaN ( positions [ i * 2 + 2 ] ) || isNaN ( positions [ i * 2 + 3 ] ) ) {
413
+ if ( ! isNaN ( positions [ i * 2 ] ) && ! isNaN ( positions [ i * 2 + 1 ] ) ) {
414
+ linePositions . push ( positions [ i * 2 ] , positions [ i * 2 + 1 ] ) ;
415
+ } else {
416
+ linePositions . push ( NaN , NaN ) ;
417
+ }
418
+ linePositions . push ( NaN , NaN ) ;
401
419
}
402
420
else {
403
- linePositions . push ( positions [ i * 2 ] ) ;
404
- linePositions . push ( positions [ i * 2 + 1 ] ) ;
405
- linePositions . push ( positions [ i * 2 + 2 ] ) ;
406
- linePositions . push ( positions [ i * 2 + 1 ] ) ;
421
+ var midPtX = ( positions [ i * 2 ] + positions [ i * 2 + 2 ] ) / 2 ;
422
+ linePositions . push (
423
+ positions [ i * 2 ] ,
424
+ positions [ i * 2 + 1 ] ,
425
+ midPtX ,
426
+ positions [ i * 2 + 1 ] ,
427
+ midPtX ,
428
+ positions [ i * 2 + 3 ]
429
+ ) ;
407
430
}
408
431
}
409
- linePositions . push ( positions [ positions . length - 2 ] ) ;
410
- linePositions . push ( positions [ positions . length - 1 ] ) ;
432
+ linePositions . push ( positions [ len - 2 ] , positions [ len - 1 ] ) ;
433
+ } else if ( trace . line . shape === 'vhv' ) {
434
+ linePositions = [ ] ;
435
+ for ( i = 0 ; i < count - 1 ; i ++ ) {
436
+ if ( isNaN ( positions [ i * 2 ] ) || isNaN ( positions [ i * 2 + 1 ] ) || isNaN ( positions [ i * 2 + 2 ] ) || isNaN ( positions [ i * 2 + 3 ] ) ) {
437
+ if ( ! isNaN ( positions [ i * 2 ] ) && ! isNaN ( positions [ i * 2 + 1 ] ) ) {
438
+ linePositions . push ( positions [ i * 2 ] , positions [ i * 2 + 1 ] ) ;
439
+ } else {
440
+ linePositions . push ( NaN , NaN ) ;
441
+ }
442
+ linePositions . push ( NaN , NaN ) ;
443
+ }
444
+ else {
445
+ var midPtY = ( positions [ i * 2 + 1 ] + positions [ i * 2 + 3 ] ) / 2 ;
446
+ linePositions . push (
447
+ positions [ i * 2 ] ,
448
+ positions [ i * 2 + 1 ] ,
449
+ positions [ i * 2 ] ,
450
+ midPtY ,
451
+ positions [ i * 2 + 2 ] ,
452
+ midPtY
453
+ ) ;
454
+ }
455
+ }
456
+ linePositions . push ( positions [ len - 2 ] , positions [ len - 1 ] ) ;
411
457
} else if ( trace . line . shape === 'vh' ) {
412
458
linePositions = [ ] ;
413
459
for ( i = 0 ; i < count - 1 ; i ++ ) {
414
460
if ( isNaN ( positions [ i * 2 ] ) || isNaN ( positions [ i * 2 + 1 ] ) ) {
415
- linePositions . push ( NaN ) ;
416
- linePositions . push ( NaN ) ;
417
- linePositions . push ( NaN ) ;
418
- linePositions . push ( NaN ) ;
461
+ linePositions . push ( NaN , NaN , NaN , NaN ) ;
419
462
}
420
463
else {
421
- linePositions . push ( positions [ i * 2 ] ) ;
422
- linePositions . push ( positions [ i * 2 + 1 ] ) ;
423
- linePositions . push ( positions [ i * 2 ] ) ;
424
- linePositions . push ( positions [ i * 2 + 3 ] ) ;
464
+ linePositions . push ( positions [ i * 2 ] , positions [ i * 2 + 1 ] ) ;
465
+ if ( ! isNaN ( positions [ i * 2 + 2 ] ) && ! isNaN ( positions [ i * 2 + 3 ] ) ) {
466
+ linePositions . push ( positions [ i * 2 ] , positions [ i * 2 + 3 ] ) ;
467
+ } else {
468
+ linePositions . push ( NaN , NaN ) ;
469
+ }
425
470
}
426
471
}
427
- linePositions . push ( positions [ positions . length - 2 ] ) ;
428
- linePositions . push ( positions [ positions . length - 1 ] ) ;
472
+ linePositions . push ( positions [ len - 2 ] , positions [ len - 1 ] ) ;
429
473
} else {
430
474
linePositions = positions ;
431
475
}
0 commit comments