void View::ReferenceTransformChanged() { // We update transform only if it is a 2D view or if Manager says we follow 3D views as well if( this->Manager && ( this->GetType() != THREED_VIEW_TYPE || this->Manager->Is3DViewFollowingReferenceVolume() ) ) { ImageObject * obj = this->Manager->GetReferenceDataObject(); vtkSmartPointer<vtkTransform> t = vtkSmartPointer<vtkTransform>::New(); vtkCamera * cam = this->Renderer->GetActiveCamera(); if( obj && this->Renderer ) { vtkTransform * refTransform = obj->GetWorldTransform(); t->SetInput( refTransform ); t->Concatenate( this->PrevViewingTransform ); cam->ApplyTransform( t ); // backup inverted current transform this->PrevViewingTransform->DeepCopy( refTransform->GetMatrix() ); this->PrevViewingTransform->Invert(); NotifyNeedRender(); } else { t->Identity(); t->Concatenate( this->PrevViewingTransform ); cam->ApplyTransform( t ); // backup inverted current transform this->PrevViewingTransform->Identity(); } } }