コード例 #1
0
ファイル: view.cpp プロジェクト: IbisNeuronav/Ibis
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();
        }
    }
}