@@ -222,7 +222,6 @@ function initializeGLPlot(scene, fullLayout, canvas, gl) {
222
222
223
223
var update = { } ;
224
224
update [ scene . id + '.camera' ] = getLayoutCamera ( scene . camera ) ;
225
- Registry . call ( '_storeDirectGUIEdit' , gd . layout , gd . _fullLayout . _preGUI , update ) ;
226
225
scene . saveCamera ( gd . layout ) ;
227
226
scene . graphDiv . emit ( 'plotly_relayout' , update ) ;
228
227
} ;
@@ -702,10 +701,10 @@ proto.setCamera = function setCamera(cameraData) {
702
701
703
702
// save camera to user layout (i.e. gd.layout)
704
703
proto . saveCamera = function saveCamera ( layout ) {
705
- var cameraData = this . getCamera ( ) ,
706
- cameraNestedProp = Lib . nestedProperty ( layout , this . id + '.camera' ) ,
707
- cameraDataLastSave = cameraNestedProp . get ( ) ,
708
- hasChanged = false ;
704
+ var cameraData = this . getCamera ( ) ;
705
+ var cameraNestedProp = Lib . nestedProperty ( layout , this . id + '.camera' ) ;
706
+ var cameraDataLastSave = cameraNestedProp . get ( ) ;
707
+ var hasChanged = false ;
709
708
710
709
function same ( x , y , i , j ) {
711
710
var vectors = [ 'up' , 'center' , 'eye' ] ,
@@ -725,7 +724,14 @@ proto.saveCamera = function saveCamera(layout) {
725
724
}
726
725
}
727
726
728
- if ( hasChanged ) cameraNestedProp . set ( cameraData ) ;
727
+ if ( hasChanged ) {
728
+ cameraNestedProp . set ( cameraData ) ;
729
+
730
+ var fullLayout = this . fullLayout ;
731
+ var cameraFullNP = Lib . nestedProperty ( fullLayout , this . id + '.camera' ) ;
732
+ cameraFullNP . set ( cameraData ) ;
733
+ Registry . call ( '_storeDirectGUIEdit' , layout , fullLayout . _preGUI , cameraData ) ;
734
+ }
729
735
730
736
return hasChanged ;
731
737
} ;
@@ -744,6 +750,19 @@ proto.updateFx = function(dragmode, hovermode) {
744
750
camera . mode = 'turntable' ;
745
751
camera . keyBindingMode = 'rotate' ;
746
752
753
+ // The setter for camera.mode animates the transition to z-up,
754
+ // but only if we *don't* explicitly set z-up earlier via the
755
+ // relayout. So push `up` back to layout & fullLayout manually now.
756
+ var gd = this . graphDiv ;
757
+ var layout = gd . layout ;
758
+ var fullLayout = gd . _fullLayout ;
759
+ var attr = this . id + '.camera.up' ;
760
+ var edits = { } ;
761
+ var zUp = { x : 0 , y : 0 , z : 1 } ;
762
+ edits [ attr ] = zUp ;
763
+ Registry . call ( '_storeDirectGUIEdit' , layout , fullLayout . _preGUI , edits ) ;
764
+ this . fullSceneLayout . camera . up = zUp ;
765
+ Lib . nestedProperty ( gd . layout , attr ) . set ( zUp ) ;
747
766
} else {
748
767
749
768
// none rotation modes [pan or zoom]
0 commit comments