Synchronising multiple cameras

I have multiple cameras on multiple renderers. I have layered the RenderWindow to have one layer for each renderer. Then I have changed the centre for each camera (SetWindowCenter) so that the objects are not overlapping one another.

Is there a way that I can synchronise all the cameras so that when you change position on the one the others will also change by similar increments? This means that the positions of each camera will not always be the same as I want to sometimes changes them independently and then lock the cameras again so that when I change one the others will also change.

Manage to figure out my own solution. There might be better ways out there but I am unaware of them at this stage.

This is what I have done:

I have a renderer for each actor. I then set the window centre for each renderer so that they do not overlap one another.

e.g. vtkRenderer->GetActiveCamera()->SetWindowCenter(0.5, 0);

Then I added an vtkCommand::InteractionEvent observer to vtkInteractorStyleTrackballCamera.

The callback method of the observer:

void TrackballRotateEvent(vtkObject* obj, unsigned long eid, void* clientdata, void* calldata)
{
if ((m_ViewMode != E3DVIEWMODE::CAMERA_SYNC)|| (m_pvtkTrackballInteractorStyle->GetState() != VTKIS_ROTATE))
	return;

vtkSmartPointer < vtkRenderer > curRenderer = m_pvtkTrackballInteractorStyle->GetCurrentRenderer();

for (size_t i = 0; i < m_3DImageVec.size(); ++i) {
	//Rotate all other renderers
	if (m_3DImageVec[i].m_pvtkRenderer != curRenderer) {
		m_pvtkTrackballInteractorStyle->SetDefaultRenderer(m_3DImageVec[i].m_pvtkRenderer); //must set the default renderer before setting
		m_pvtkTrackballInteractorStyle->SetCurrentRenderer(m_3DImageVec[i].m_pvtkRenderer); //the current renderer otherwise it will have no affect
		m_pvtkTrackballInteractorStyle->Rotate(); //This is basically what is used to rotate the object according to the mouse move event
	}
}
//set back to original renderer
m_pvtkTrackballInteractorStyle->SetDefaultRenderer(curRenderer);
m_pvtkTrackballInteractorStyle->SetCurrentRenderer(curRenderer);
}

As you can see that I then simply call Rotate on the Style after swapping out renderers. This allows all actors to rotate synchronously. Note: I have complete access to the main object within the callback method above.

The advantage here is that I can simply change the view mode and it is then possible to rotate only the selected actor.