Import 2017-06-07 23:51:09: master ff4a605e

Author Committer Branch Timestamp Parent
lassoan lassoan master 2017-05-30 14:39:17 master 8bfbfc58
Changeset

BUG: Removed all iteratorless traverse of shared collections

Collections have convenience functions for traversing it without the need for creating an iterator,
using InitTraversal() and GetNextItemAsObject(). These functions use an internal iterator stored in the collection.

Problem:

When a collection is traversed using the internal iterator by multiple functions at the same time, the behavior will be incorrect.

For collections that can be accessed by multiple objects, it is almost impossible to make sure that only one function will use
the internal iterator at a time. Therefore, shared collections must be traversed using external iterators.

For example, this error caused a bug in View Controllers module: it only showed the first slice view controller (while there were three). The problem was that View Controllers module iterated through the nodes using the internal iterator and internally a method was called that asked for a list of nodes by classname, which used the same internal iterator.

Solution:

  • Replaced all instances of shared collection traversal with internal iterator.
  • Made vtkMRMLScene's InitTraversal, GetNextNode, and GetNextNodeByClass methods deprecated (they are still functional,
    but log a warning when they are called).
  • Added vtkMRMLScene::GetFirstNodeByClass convenience function and modified functions that used InitTraversal/GetNextNodeByClass
    or GetNthNodeByClass(0, ...) to use this function.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@26059 3bd1e089-480b-0410-8dfb-8563597acbee

mod - Applications/SlicerApp/Testing/Python/SlicerRestoreSceneViewCrashIssue3445.py Diff File
mod - Base/QTCore/qSlicerSlicer2SceneReader.cxx Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLDisplayableHierarchyNodeDisplayPropertiesTest.cxx Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLSceneAddSingletonTest.cxx Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLSceneTest2.cxx Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLSceneViewNodeImportSceneTest.cxx Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLTransformableNodeOnNodeReferenceAddTest.cxx Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLTransformableNodeReferenceSaveImportTest.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLCameraNode.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLScene.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLScene.h Diff File
mod - Libs/MRML/Core/vtkMRMLSubjectHierarchyNode.cxx Diff File
mod - Libs/MRML/DisplayableManager/vtkMRMLCameraDisplayableManager.cxx Diff File
mod - Libs/MRML/DisplayableManager/vtkMRMLModelDisplayableManager.cxx Diff File
mod - Libs/MRML/Logic/Testing/Cxx/vtkMRMLColorLogicTest1.cxx Diff File
mod - Libs/MRML/Logic/vtkMRMLLayoutLogic.cxx Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLChartViewTest.py Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLSliceWidgetTest1.cxx Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLVolumeThresholdWidgetEventTranslatorPlayerTest1.cxx Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLVolumeThresholdWidgetTest1.cxx Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLVolumeThresholdWidgetTest2.cxx Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLWindowLevelWidgetEventTranslatorPlayerTest1.cxx Diff File
mod - Libs/MRML/Widgets/Testing/qMRMLWindowLevelWidgetTest1.cxx Diff File
mod - Modules/Loadable/Annotations/GUI/qSlicerAnnotationModuleReportDialog.cxx Diff File
mod - Modules/Loadable/Annotations/MRMLDM/vtkMRMLAnnotationDisplayableManager.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/qMRMLSceneAnnotationModelAndAnnotationTreeWidgetTest1.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/vtkMRMLAnnotationAngleNodeTest1.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/vtkMRMLAnnotationControlPointsNodeTest1.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/vtkMRMLAnnotationFiducialNodeTest1.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/vtkMRMLAnnotationLinesNodeTest1.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/vtkMRMLAnnotationNodeTest1.cxx Diff File
mod - Modules/Loadable/Annotations/Testing/Cxx/vtkMRMLAnnotationRulerNodeTest1.cxx Diff File
mod - Modules/Loadable/Cameras/Testing/Cxx/vtkSlicerCamerasModuleLogicCopyImportedCamerasTest.cxx Diff File
mod - Modules/Loadable/Colors/Testing/Cxx/qSlicerColorsModuleWidgetTest1.cxx Diff File
mod - Modules/Loadable/CropVolume/qSlicerCropVolumeModuleWidget.cxx Diff File
mod - Modules/Loadable/Markups/MRMLDM/vtkMRMLMarkupsDisplayableManager2D.cxx Diff File
mod - Modules/Loadable/Markups/MRMLDM/vtkMRMLMarkupsDisplayableManager3D.cxx Diff File
mod - Modules/Loadable/Models/Logic/vtkSlicerModelsLogic.cxx Diff File
mod - Modules/Loadable/Models/Testing/Cxx/qSlicerModelsModuleWidgetTestScene.cxx Diff File
mod - Modules/Loadable/Models/Widgets/Testing/Cxx/qMRMLModelDisplayNodeWidgetTest2.cxx Diff File
mod - Modules/Loadable/Reformat/qSlicerReformatModuleWidget.cxx Diff File
mod - Modules/Loadable/SubjectHierarchy/Widgets/qSlicerSubjectHierarchyChartsPlugin.cxx Diff File
mod - Modules/Loadable/Tables/SubjectHierarchyPlugins/qSlicerSubjectHierarchyTablesPlugin.cxx Diff File
mod - Modules/Loadable/Transforms/Widgets/qMRMLTransformInfoWidget.cxx Diff File
mod - Modules/Loadable/ViewControllers/qSlicerViewControllersModuleWidget.cxx Diff File
mod - Modules/Loadable/VolumeRendering/MRMLDM/vtkMRMLVolumeRenderingDisplayableManager.cxx Diff File
mod - Modules/Loadable/VolumeRendering/Testing/Cxx/vtkMRMLVolumePropertyNodeTest1.cxx Diff File
mod - Modules/Scripted/DataProbe/DataProbe.py Diff File
mod - Modules/Scripted/EditorLib/LabelStructureListWidget.py Diff File
mod - Modules/Scripted/LabelStatistics/LabelStatistics.py Diff File
mod - Modules/Scripted/PerformanceTests/PerformanceTests.py Diff File