Index: mitk/Applications/Tutorial/Step7.cpp =================================================================== --- mitk/Applications/Tutorial/Step7.cpp (revision 22409) +++ mitk/Applications/Tutorial/Step7.cpp (working copy) @@ -61,6 +61,7 @@ mitk::RenderingManager::GetInstance()->RequestUpdateAll(); std::cout << "8"; + surfaceCreator->Delete(); } std::cout << "9"; Index: mitk/Core/Code/Controllers/mitkRenderingManager.cpp =================================================================== --- mitk/Core/Code/Controllers/mitkRenderingManager.cpp (revision 22409) +++ mitk/Core/Code/Controllers/mitkRenderingManager.cpp (working copy) @@ -191,6 +191,9 @@ renderWindow->RemoveObserver(callbacks_it->second.commands[0u]); renderWindow->RemoveObserver(callbacks_it->second.commands[1u]); renderWindow->RemoveObserver(callbacks_it->second.commands[2u]); + callbacks_it->second.commands[0u]->Delete(); + callbacks_it->second.commands[1u]->Delete(); + callbacks_it->second.commands[2u]->Delete(); this->m_RenderWindowCallbacksList.erase(callbacks_it); RenderWindowVector::iterator rw_it = std::find( m_AllRenderWindows.begin(), m_AllRenderWindows.end(), renderWindow ); Index: mitk/Core/Code/Rendering/mitkGeometry2DDataMapper2D.h =================================================================== --- mitk/Core/Code/Rendering/mitkGeometry2DDataMapper2D.h (revision 22409) +++ mitk/Core/Code/Rendering/mitkGeometry2DDataMapper2D.h (working copy) @@ -24,6 +24,7 @@ #include "mitkSurfaceMapper2D.h" #include "mitkDataStorage.h" #include "mitkDataNode.h" +#include "mitkWeakPointer.h" namespace mitk { @@ -82,7 +83,7 @@ SurfaceMapper2D::Pointer m_SurfaceMapper; - DataStorage::Pointer m_DataStorage; ///< DataStorage that will be searched for sub nodes + mitk::WeakPointer m_DataStorage; ///< DataStorage that will be searched for sub nodes DataNode::Pointer m_ParentNode; ///< parent node that will be used to search for sub nodes typedef std::vector NodesVectorType; Index: mitk/Core/Code/Rendering/mitkGeometry2DDataVtkMapper3D.h =================================================================== --- mitk/Core/Code/Rendering/mitkGeometry2DDataVtkMapper3D.h (revision 22409) +++ mitk/Core/Code/Rendering/mitkGeometry2DDataVtkMapper3D.h (working copy) @@ -23,6 +23,7 @@ #include "mitkBaseVtkMapper3D.h" #include "mitkDataStorage.h" #include "mitkGeometry2DDataToSurfaceFilter.h" +#include "mitkWeakPointer.h" #include #include @@ -202,7 +203,7 @@ bool m_NormalsActorAdded; /** \brief The DataStorage defines which part of the data tree is traversed for renderering. */ - mitk::DataStorage::Pointer m_DataStorage; + mitk::WeakPointer m_DataStorage; /** A default grayscale lookup-table, used for reference */ vtkLookupTable *m_DefaultLookupTable; Index: mitk/Core/Code/Rendering/mitkSurfaceMapper2D.cpp =================================================================== --- mitk/Core/Code/Rendering/mitkSurfaceMapper2D.cpp (revision 22409) +++ mitk/Core/Code/Rendering/mitkSurfaceMapper2D.cpp (working copy) @@ -86,6 +86,7 @@ m_Cutter->Delete(); m_LUT->Delete(); m_PointLocator->Delete(); + m_Stripper->Delete(); } const mitk::Surface *mitk::SurfaceMapper2D::GetInput(void) Index: mitk/Core/Code/Testing/mitkFocusManagerTest.cpp =================================================================== --- mitk/Core/Code/Testing/mitkFocusManagerTest.cpp (revision 22409) +++ mitk/Core/Code/Testing/mitkFocusManagerTest.cpp (working copy) @@ -79,7 +79,9 @@ MITK_TEST_CONDITION_REQUIRED(!focusManager->RemoveElement(element2), "Testing removing from empty list with different object"); MITK_TEST_CONDITION_REQUIRED(!focusManager->RemoveElement(element1), "Testing removing from empty list with different object again"); - focusManager = NULL; + //focusManager = NULL; + focusManager->Delete(); + //TODO: test IsLast() IsFirst() GetFirst() GetLast() GoToNext() GetIter() SetLoop(bool loop) MITK_TEST_END(); Index: mitk/CoreUI/Qmitk/QmitkStdMultiWidget.cpp =================================================================== --- mitk/CoreUI/Qmitk/QmitkStdMultiWidget.cpp (revision 22409) +++ mitk/CoreUI/Qmitk/QmitkStdMultiWidget.cpp (working copy) @@ -38,8 +38,6 @@ #include "mitkInteractionConst.h" #include "mitkDataStorage.h" -#include "vtkTextProperty.h" -#include "vtkCornerAnnotation.h" #include "mitkVtkLayerController.h" QmitkStdMultiWidget::QmitkStdMultiWidget(QWidget* parent, Qt::WindowFlags f) @@ -254,42 +252,39 @@ //if( view >= 0 && view < 4 ) // //write LayoutName --> Viewer 3D shoudn't write the layoutName. - vtkCornerAnnotation *cornerText; - vtkTextProperty *textProp; - vtkRenderer *ren; - //Render Window 1 == transversal - cornerText = vtkCornerAnnotation::New(); - cornerText->SetText(0, "Transversal"); - cornerText->SetMaximumFontSize(12); - textProp = vtkTextProperty::New(); - textProp->SetColor( 1.0, 0.0, 0.0 ); - cornerText->SetTextProperty( textProp ); - ren = vtkRenderer::New(); - ren->AddActor(cornerText); - mitk::VtkLayerController::GetInstance(this->GetRenderWindow1()->GetRenderWindow())->InsertForegroundRenderer(ren,true); - + m_CornerAnnotaions[0].cornerText = vtkCornerAnnotation::New(); + m_CornerAnnotaions[0].cornerText->SetText(0, "Transversal"); + m_CornerAnnotaions[0].cornerText->SetMaximumFontSize(12); + m_CornerAnnotaions[0].textProp = vtkTextProperty::New(); + m_CornerAnnotaions[0].textProp->SetColor( 1.0, 0.0, 0.0 ); + m_CornerAnnotaions[0].cornerText->SetTextProperty( m_CornerAnnotaions[0].textProp ); + m_CornerAnnotaions[0].ren = vtkRenderer::New(); + m_CornerAnnotaions[0].ren->AddActor(m_CornerAnnotaions[0].cornerText); + mitk::VtkLayerController::GetInstance(this->GetRenderWindow1()->GetRenderWindow())->InsertForegroundRenderer(m_CornerAnnotaions[0].ren,true); + //Render Window 2 == sagittal - cornerText = vtkCornerAnnotation::New(); - cornerText->SetText(0, "Sagittal"); - cornerText->SetMaximumFontSize(12); - textProp = vtkTextProperty::New(); - textProp->SetColor( 0.0, 1.0, 0.0 ); - cornerText->SetTextProperty( textProp ); - ren = vtkRenderer::New(); - ren->AddActor(cornerText); - mitk::VtkLayerController::GetInstance(this->GetRenderWindow2()->GetRenderWindow())->InsertForegroundRenderer(ren,true); - + m_CornerAnnotaions[1].cornerText = vtkCornerAnnotation::New(); + m_CornerAnnotaions[1].cornerText->SetText(0, "Sagittal"); + m_CornerAnnotaions[1].cornerText->SetMaximumFontSize(12); + m_CornerAnnotaions[1].textProp = vtkTextProperty::New(); + m_CornerAnnotaions[1].textProp->SetColor( 0.0, 1.0, 0.0 ); + m_CornerAnnotaions[1].cornerText->SetTextProperty( m_CornerAnnotaions[1].textProp ); + m_CornerAnnotaions[1].ren = vtkRenderer::New(); + m_CornerAnnotaions[1].ren->AddActor(m_CornerAnnotaions[1].cornerText); + mitk::VtkLayerController::GetInstance(this->GetRenderWindow2()->GetRenderWindow())->InsertForegroundRenderer(m_CornerAnnotaions[1].ren,true); + //Render Window 3 == coronal - cornerText = vtkCornerAnnotation::New(); - cornerText->SetText(0, "Coronal"); - cornerText->SetMaximumFontSize(12); - textProp = vtkTextProperty::New(); - textProp->SetColor( 0.295, 0.295, 1.0 ); - cornerText->SetTextProperty( textProp ); - ren = vtkRenderer::New(); - ren->AddActor(cornerText); - mitk::VtkLayerController::GetInstance(this->GetRenderWindow3()->GetRenderWindow())->InsertForegroundRenderer(ren,true); + m_CornerAnnotaions[2].cornerText = vtkCornerAnnotation::New(); + m_CornerAnnotaions[2].cornerText->SetText(0, "Coronal"); + m_CornerAnnotaions[2].cornerText->SetMaximumFontSize(12); + m_CornerAnnotaions[2].textProp = vtkTextProperty::New(); + m_CornerAnnotaions[2].textProp->SetColor( 0.295, 0.295, 1.0 ); + m_CornerAnnotaions[2].cornerText->SetTextProperty( m_CornerAnnotaions[2].textProp ); + m_CornerAnnotaions[2].ren = vtkRenderer::New(); + m_CornerAnnotaions[2].ren->AddActor(m_CornerAnnotaions[2].cornerText); + mitk::VtkLayerController::GetInstance(this->GetRenderWindow3()->GetRenderWindow())->InsertForegroundRenderer(m_CornerAnnotaions[2].ren,true); + /*************************************************/ @@ -419,6 +414,23 @@ { DisablePositionTracking(); DisableNavigationControllerEventListening(); + + mitk::VtkLayerController::GetInstance(this->GetRenderWindow1()->GetRenderWindow())->RemoveRenderer( m_CornerAnnotaions[0].ren ); + mitk::VtkLayerController::GetInstance(this->GetRenderWindow2()->GetRenderWindow())->RemoveRenderer( m_CornerAnnotaions[1].ren ); + mitk::VtkLayerController::GetInstance(this->GetRenderWindow3()->GetRenderWindow())->RemoveRenderer( m_CornerAnnotaions[2].ren ); + + //Delete CornerAnnotation + m_CornerAnnotaions[0].cornerText->Delete(); + m_CornerAnnotaions[0].textProp->Delete(); + m_CornerAnnotaions[0].ren->Delete(); + + m_CornerAnnotaions[1].cornerText->Delete(); + m_CornerAnnotaions[1].textProp->Delete(); + m_CornerAnnotaions[1].ren->Delete(); + + m_CornerAnnotaions[2].cornerText->Delete(); + m_CornerAnnotaions[2].textProp->Delete(); + m_CornerAnnotaions[2].ren->Delete(); } void QmitkStdMultiWidget::RemovePlanesFromDataStorage() Index: mitk/CoreUI/Qmitk/QmitkStdMultiWidget.h =================================================================== --- mitk/CoreUI/Qmitk/QmitkStdMultiWidget.h (revision 22409) +++ mitk/CoreUI/Qmitk/QmitkStdMultiWidget.h (working copy) @@ -35,6 +35,9 @@ #include #include +#include "vtkTextProperty.h" +#include "vtkCornerAnnotation.h" + class QHBoxLayout; class QVBoxLayout; class QGridLayout; @@ -280,6 +283,14 @@ QWidget *mitkWidget2Container; QWidget *mitkWidget3Container; QWidget *mitkWidget4Container; + + struct + { + vtkCornerAnnotation *cornerText; + vtkTextProperty *textProp; + vtkRenderer *ren; + } m_CornerAnnotaions[3]; + }; Index: mitk/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerView.cpp =================================================================== --- mitk/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerView.cpp (revision 22409) +++ mitk/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerView.cpp (working copy) @@ -107,6 +107,7 @@ //# GUI m_NodeTreeModel = new QmitkDataStorageTreeModel(this->GetDataStorage()); + m_NodeTreeModel->setParent( parent ); //# Tree View (experimental) m_NodeTreeView = new QTreeView;