diff --git a/src/Mod/Sketcher/Gui/Utils.h b/src/Mod/Sketcher/Gui/Utils.h index 3544af19a6..6e3ae1d83d 100644 --- a/src/Mod/Sketcher/Gui/Utils.h +++ b/src/Mod/Sketcher/Gui/Utils.h @@ -29,6 +29,7 @@ #include #include "AutoConstraint.h" +#include "ViewProviderSketchGeometryExtension.h" namespace App { @@ -156,5 +157,23 @@ auto toPointerVector(const std::vector> & vector) { return vp; } +/** returns the visual layer id (not the one of the GeometryFacade, but the index to PropertyVisualLayerList) from a geometry or GeometryFacade. + * NOTE: If the geometry or geometryfacade does not have a corresponding ViewProviderSketchGeometryExtension, the default layer (layer 0) is returned. + * */ +template +auto getSafeGeomLayerId(T geom) +{ + int layerId = 0; + + if(geom->hasExtension(SketcherGui::ViewProviderSketchGeometryExtension::getClassTypeId())) { + auto vpext = std::static_pointer_cast( + geom->getExtension(SketcherGui::ViewProviderSketchGeometryExtension::getClassTypeId()).lock()); + + layerId = vpext->getVisualLayerId(); + } + + return layerId; +} + #endif // SKETCHERGUI_Recompute_H