# Synchronize display scale across slice viewers

**URL:** https://discourse.slicer.org/t/synchronize-display-scale-across-slice-viewers/4547
**Category:** Support
**Created:** [October 26, 2018, 5:59pm UTC](https://discourse.slicer.org/t/synchronize-display-scale-across-slice-viewers/4547 "2018-10-26T17:59:47Z")
**Posts on this page:** 1
**Showing post:** 5

<div class="post-metadata">

### Author: ![stephan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/stephan/32/2444_2.png) [@stephan](https://discourse.slicer.org/u/stephan)
#### Post date: [November 1, 2018, 2:24pm UTC](https://discourse.slicer.org/t/synchronize-display-scale-across-slice-viewers/4547/5 "2018-11-01T14:24:49Z")

</div>

Great, thank you @lassoan . That’s exactly what I was looking for.

I just added a tiny bit of additional functionality, namely to toggle zoomSync on and off.

```
slicer.updatingSliceNodes = False
slicer.zoomSync = False

slicer.sliceNodes = [slicer.app.layoutManager().sliceWidget(viewName).mrmlSliceNode()
    for viewName in slicer.app.layoutManager().sliceViewNames()]

def sliceModified(caller, event):
    if slicer.updatingSliceNodes:
        # prevent infinite loop of slice node updates triggering slice node updates
        return
    slicer.updatingSliceNodes = True
    fov = caller.GetFieldOfView()
    for sliceNode in slicer.sliceNodes:
        if sliceNode != caller:
            sliceNode.SetFieldOfView(*fov)
    slicer.updatingSliceNodes = False

def toggleZoomSync():
    if slicer.zoomSync: 
        # zoom sync is on already, therefore observer function is alread hooked, should be unhooked
        for sliceNode in slicer.sliceNodes:
            sliceNode.RemoveObserver(sliceNode.zoomChangeObserverTag)
        slicer.zoomSync = False
    else: 
        # zoom sync is off --> toogle to on (register observer function)
        for sliceNode in slicer.sliceNodes:
            sliceNode.zoomChangeObserverTag = sliceNode.AddObserver(vtk.vtkCommand.ModifiedEvent, sliceModified)
        slicer.zoomSync = True

toggleZoomSync()

```

After running this code snippet once, calls to

`toggleZoomSync()`

toggle slice zoom synchronization on/off.

---

_[View the full topic](https://discourse.slicer.org/t/synchronize-display-scale-across-slice-viewers/4547)._
