00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2007-12-18 16:04:12 +0100 (Di, 18 Dez 2007) $ 00006 Version: $Revision: 13252 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #include "mitkVtkWidgetRendering.h" 00019 00020 #include "mitkVtkLayerController.h" 00021 00022 #include <mitkConfig.h> 00023 #include <itkObject.h> 00024 #include <itkMacro.h> 00025 #include <itksys/SystemTools.hxx> 00026 00027 #include <vtkRenderer.h> 00028 #include <vtkRenderWindow.h> 00029 #include <vtkObjectFactory.h> 00030 #include <vtkRendererCollection.h> 00031 00032 #include <vtkInteractorObserver.h> 00033 00034 #include <algorithm> 00035 00036 00037 mitk::VtkWidgetRendering::VtkWidgetRendering() 00038 : m_RenderWindow( NULL ), 00039 m_VtkWidget( NULL ), 00040 m_IsEnabled( false ) 00041 { 00042 m_Renderer = vtkRenderer::New(); 00043 } 00044 00045 00046 mitk::VtkWidgetRendering::~VtkWidgetRendering() 00047 { 00048 if ( m_RenderWindow != NULL ) 00049 if ( this->IsEnabled() ) 00050 this->Disable(); 00051 00052 if ( m_Renderer != NULL ) 00053 m_Renderer->Delete(); 00054 } 00055 00061 void mitk::VtkWidgetRendering::SetRenderWindow( vtkRenderWindow* renderWindow ) 00062 { 00063 m_RenderWindow = renderWindow; 00064 } 00065 00070 vtkRenderWindow* mitk::VtkWidgetRendering::GetRenderWindow() 00071 { 00072 return m_RenderWindow; 00073 } 00074 00080 vtkRenderer* mitk::VtkWidgetRendering::GetVtkRenderer() 00081 { 00082 return m_Renderer; 00083 } 00084 00089 void mitk::VtkWidgetRendering::Enable() 00090 { 00091 if(m_IsEnabled) 00092 return; 00093 00094 if(m_RenderWindow != NULL) 00095 { 00096 vtkRenderWindowInteractor *interactor = m_RenderWindow->GetInteractor(); 00097 00098 if ( m_VtkWidget != NULL ) 00099 { 00100 m_VtkWidget->SetInteractor( interactor ); 00101 00102 mitk::VtkLayerController *layerController = 00103 mitk::VtkLayerController::GetInstance(m_RenderWindow); 00104 00105 if ( layerController ) 00106 { 00107 layerController->InsertForegroundRenderer(m_Renderer,false); 00108 } 00109 00110 m_IsEnabled = true; 00111 } 00112 } 00113 } 00114 00115 00120 void mitk::VtkWidgetRendering::Disable() 00121 { 00122 if ( this->IsEnabled() ) 00123 { 00124 mitk::VtkLayerController *layerController = 00125 mitk::VtkLayerController::GetInstance(m_RenderWindow); 00126 00127 if ( layerController ) 00128 { 00129 layerController->RemoveRenderer(m_Renderer); 00130 } 00131 00132 m_IsEnabled = false; 00133 } 00134 } 00135 00140 bool mitk::VtkWidgetRendering::IsEnabled() 00141 { 00142 return m_IsEnabled; 00143 } 00144 00145 00146 void mitk::VtkWidgetRendering::SetRequestedRegionToLargestPossibleRegion() 00147 { 00148 //nothing to do 00149 } 00150 00151 bool mitk::VtkWidgetRendering::RequestedRegionIsOutsideOfTheBufferedRegion() 00152 { 00153 return false; 00154 } 00155 00156 bool mitk::VtkWidgetRendering::VerifyRequestedRegion() 00157 { 00158 return true; 00159 } 00160 00161 void mitk::VtkWidgetRendering::SetRequestedRegion(itk::DataObject*) 00162 { 00163 //nothing to do 00164 } 00165 00166 void mitk::VtkWidgetRendering::SetVtkWidget( vtkInteractorObserver *widget ) 00167 { 00168 m_VtkWidget = widget; 00169 } 00170 00171 vtkInteractorObserver *mitk::VtkWidgetRendering::GetVtkWidget() const 00172 { 00173 return m_VtkWidget; 00174 }