From b6b897c0bfbc5328e128a49a474b4b2b1a4492f6 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Wed, 1 Mar 2023 14:05:07 +0100 Subject: [PATCH] Utils: getGeoIdsOfEdgesFromNames --- src/Mod/Sketcher/Gui/Utils.cpp | 26 ++++++++++++++++++++++++++ src/Mod/Sketcher/Gui/Utils.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/src/Mod/Sketcher/Gui/Utils.cpp b/src/Mod/Sketcher/Gui/Utils.cpp index 5a72bbb10d..d4d92316da 100644 --- a/src/Mod/Sketcher/Gui/Utils.cpp +++ b/src/Mod/Sketcher/Gui/Utils.cpp @@ -146,6 +146,32 @@ void SketcherGui::getIdsFromName(const std::string& name, const Sketcher::Sketch } } +std::vector SketcherGui::getGeoIdsOfEdgesFromNames(const Sketcher::SketchObject* Obj, const std::vector & names) +{ + std::vector geoids; + + for(const auto & name : names) { + if (name.size() > 4 && name.substr(0, 4) == "Edge") { + geoids.push_back(std::atoi(name.substr(4, 4000).c_str()) - 1); + } + else if (name.size() > 12 && name.substr(0, 12) == "ExternalEdge") { + geoids.push_back(Sketcher::GeoEnum::RefExt + 1 - std::atoi(name.substr(12, 4000).c_str())); + } + else if (name.size() > 6 && name.substr(0, 6) == "Vertex") { + int VtId = std::atoi(name.substr(6, 4000).c_str()) - 1; + int GeoId; + Sketcher::PointPos PosId; + Obj->getGeoVertexIndex(VtId, GeoId, PosId); + const Part::Geometry* geo = Obj->getGeometry(GeoId); + if (geo->getTypeId() == Part::GeomPoint::getClassTypeId()){ + geoids.push_back(GeoId); + } + } + } + + return geoids; +} + bool SketcherGui::checkBothExternal(int GeoId1, int GeoId2) { if (GeoId1 == GeoEnum::GeoUndef || GeoId2 == GeoEnum::GeoUndef) diff --git a/src/Mod/Sketcher/Gui/Utils.h b/src/Mod/Sketcher/Gui/Utils.h index 6e3ae1d83d..60cef10b6d 100644 --- a/src/Mod/Sketcher/Gui/Utils.h +++ b/src/Mod/Sketcher/Gui/Utils.h @@ -72,6 +72,9 @@ std::string getStrippedPythonExceptionString(const Base::Exception&); void getIdsFromName(const std::string &name, const Sketcher::SketchObject* Obj, int &GeoId, Sketcher::PointPos &PosId); +/// Returns ONLY the geometry elements when the "Edge" is selected (including GeomPoints) +std::vector getGeoIdsOfEdgesFromNames(const Sketcher::SketchObject* Obj, const std::vector & names); + bool checkBothExternal(int GeoId1, int GeoId2); bool isPointOrSegmentFixed(const Sketcher::SketchObject* Obj, int GeoId);