00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2007-08-17 16:41:18 +0200 (Fr, 17 Aug 2007) $ 00006 Version: $Revision: 11618 $ 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 "vtkMitkRenderProp.h" 00019 00020 #include <vtkObjectFactory.h> 00021 #include <vtkLODProp3D.h> 00022 #include <vtkPropAssembly.h> 00023 00024 #if ( ( VTK_MAJOR_VERSION >= 5 ) && ( VTK_MINOR_VERSION>=2) ) 00025 #include "mitkVtkMapper3D.h" 00026 #endif 00027 00028 vtkStandardNewMacro(vtkMitkRenderProp); 00029 00030 vtkMitkRenderProp::vtkMitkRenderProp() 00031 { 00032 } 00033 vtkMitkRenderProp::~vtkMitkRenderProp() 00034 { 00035 } 00036 00037 double *vtkMitkRenderProp::GetBounds() 00038 { 00039 return const_cast<double*>(m_VtkPropRenderer->GetBounds()); 00040 } 00041 00042 void vtkMitkRenderProp::SetPropRenderer(mitk::VtkPropRenderer::Pointer propRenderer) 00043 { 00044 this->m_VtkPropRenderer = propRenderer; 00045 } 00046 00047 int vtkMitkRenderProp::RenderOpaqueGeometry(vtkViewport* /*viewport*/) 00048 { 00049 return m_VtkPropRenderer->Render(mitk::VtkPropRenderer::Opaque); 00050 } 00051 00052 int vtkMitkRenderProp::RenderOverlay(vtkViewport* /*viewport*/) 00053 { 00054 return m_VtkPropRenderer->Render(mitk::VtkPropRenderer::Overlay); 00055 } 00056 00057 void vtkMitkRenderProp::ReleaseGraphicsResources(vtkWindow* window) 00058 { 00059 m_VtkPropRenderer->ReleaseGraphicsResources(window); 00060 } 00061 00062 void vtkMitkRenderProp::InitPathTraversal() 00063 { 00064 m_VtkPropRenderer->InitPathTraversal(); 00065 } 00066 00067 vtkAssemblyPath* vtkMitkRenderProp::GetNextPath() 00068 { 00069 return m_VtkPropRenderer->GetNextPath(); 00070 } 00071 //BUG (#1551) added method depth peeling 00072 #if ( ( VTK_MAJOR_VERSION >= 5 ) && ( VTK_MINOR_VERSION>=2) ) 00073 int vtkMitkRenderProp::HasTranslucentPolygonalGeometry() 00074 { 00075 typedef std::map<int,mitk::Mapper*> MappersMapType; 00076 MappersMapType mappersMap = m_VtkPropRenderer->GetMappersMap(); 00077 for(MappersMapType::iterator it = mappersMap.begin(); it != mappersMap.end(); it++) 00078 { 00079 mitk::Mapper * mapper = (*it).second; 00080 mitk::VtkMapper3D::Pointer vtkMapper = dynamic_cast<mitk::VtkMapper3D*>(mapper); 00081 if(vtkMapper) 00082 { 00083 // Due to VTK 5.2 bug, we need to initialize the Paths object in vtkPropAssembly 00084 // manually (see issue #8186 committed to VTK's Mantis issue tracker) 00085 // --> VTK bug resolved on 2008-12-01 00086 vtkPropAssembly *propAssembly = dynamic_cast< vtkPropAssembly * >( 00087 vtkMapper->GetVtkProp(m_VtkPropRenderer) ); 00088 if ( propAssembly ) 00089 { 00090 propAssembly->InitPathTraversal(); 00091 } 00092 00093 if (vtkMapper->GetVtkProp(m_VtkPropRenderer)->HasTranslucentPolygonalGeometry()==1) 00094 return 1; 00095 } 00096 00097 } 00098 return 0; 00099 } 00100 00101 int vtkMitkRenderProp::RenderTranslucentPolygonalGeometry( vtkViewport * ) 00102 { 00103 return m_VtkPropRenderer->Render(mitk::VtkPropRenderer::Translucent); 00104 } 00105 int vtkMitkRenderProp::RenderVolumetricGeometry( vtkViewport * ) 00106 { 00107 return m_VtkPropRenderer->Render(mitk::VtkPropRenderer::Volumetric); 00108 } 00109 #else 00110 int vtkMitkRenderProp::RenderTranslucentGeometry(vtkViewport* /*viewport*/) 00111 { 00112 return m_VtkPropRenderer->Render(mitk::VtkPropRenderer::Translucent); 00113 } 00114 00115 00116 #endif