diff Framework/Radiography/RadiographyWidget.h @ 1200:54cbffabdc45 broker

integration mainline->broker
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 29 Nov 2019 11:03:41 +0100
parents 1a73f852810a 922d2e61aa5d
children 37bc7f115f81
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyWidget.h	Thu Nov 28 17:13:33 2019 +0100
+++ b/Framework/Radiography/RadiographyWidget.h	Fri Nov 29 11:03:41 2019 +0100
@@ -71,16 +71,14 @@
 
     void SetScene(boost::shared_ptr<RadiographyScene> scene);
 
+    void Select(size_t layer);
+
     void Unselect()
     {
       hasSelection_ = false;
     }
 
-    void Select(size_t layer);
-
-    void ClearSelectedLayer();
-
-    bool SelectMaskLayer(size_t index = 0);
+    template<typename LayerType> bool SelectLayerByType(size_t index = 0);
 
     bool LookupSelectedLayer(size_t& layer);
 
@@ -106,4 +104,27 @@
       return interpolation_;
     }
   };
+
+  template<typename LayerType> bool RadiographyWidget::SelectLayerByType(size_t index)
+  {
+    std::vector<size_t> layerIndexes;
+    size_t count = 0;
+    scene_->GetLayersIndexes(layerIndexes);
+
+    for (size_t i = 0; i < layerIndexes.size(); ++i)
+    {
+      const LayerType* typedLayer = dynamic_cast<const LayerType*>(&(scene_->GetLayer(layerIndexes[i])));
+      if (typedLayer != NULL)
+      {
+        if (count == index)
+        {
+          Select(layerIndexes[i]);
+          return true;
+        }
+        count++;
+      }
+    }
+
+    return false;
+  }
 }