@@ -13,6 +13,7 @@ var d3 = require('d3');
13
13
var isNumeric = require ( 'fast-isnumeric' ) ;
14
14
15
15
var Plotly = require ( '../plotly' ) ;
16
+ var PlotSchema = require ( '../plot_api/plot_schema' ) ;
16
17
var Registry = require ( '../registry' ) ;
17
18
var Lib = require ( '../lib' ) ;
18
19
var Color = require ( '../components/color' ) ;
@@ -505,12 +506,38 @@ plots.supplyDefaults = function(gd) {
505
506
// update object references in calcdata
506
507
if ( ( gd . calcdata || [ ] ) . length === newFullData . length ) {
507
508
for ( i = 0 ; i < newFullData . length ; i ++ ) {
508
- var trace = newFullData [ i ] ;
509
- ( gd . calcdata [ i ] [ 0 ] || { } ) . trace = trace ;
509
+ var newTrace = newFullData [ i ] ;
510
+ var cd0 = gd . calcdata [ i ] [ 0 ] ;
511
+ if ( cd0 && cd0 . trace ) {
512
+ if ( cd0 . trace . _hasCalcTransform ) {
513
+ remapTransformedArrays ( cd0 , newTrace ) ;
514
+ } else {
515
+ cd0 . trace = newTrace ;
516
+ }
517
+ }
510
518
}
511
519
}
512
520
} ;
513
521
522
+ function remapTransformedArrays ( cd0 , newTrace ) {
523
+ var oldTrace = cd0 . trace ;
524
+ var arrayAttrs = PlotSchema . findArrayAttributes ( oldTrace ) ;
525
+ var transformedArrayHash = { } ;
526
+ var i , astr ;
527
+
528
+ for ( i = 0 ; i < arrayAttrs . length ; i ++ ) {
529
+ astr = arrayAttrs [ i ] ;
530
+ transformedArrayHash [ astr ] = Lib . nestedProperty ( oldTrace , astr ) . get ( ) . slice ( ) ;
531
+ }
532
+
533
+ cd0 . trace = newTrace ;
534
+
535
+ for ( i = 0 ; i < arrayAttrs . length ; i ++ ) {
536
+ astr = arrayAttrs [ i ] ;
537
+ Lib . nestedProperty ( cd0 . trace , astr ) . set ( transformedArrayHash [ astr ] ) ;
538
+ }
539
+ }
540
+
514
541
// Create storage for all of the data related to frames and transitions:
515
542
plots . createTransitionData = function ( gd ) {
516
543
// Set up the default keyframe if it doesn't exist:
@@ -2022,6 +2049,7 @@ plots.doCalcdata = function(gd, traces) {
2022
2049
2023
2050
_module = transformsRegistry [ transform . type ] ;
2024
2051
if ( _module && _module . calcTransform ) {
2052
+ trace . _hasCalcTransform = true ;
2025
2053
hasCalcTransform = true ;
2026
2054
_module . calcTransform ( gd , trace , transform ) ;
2027
2055
}
0 commit comments