From 819ae560f1eb4b771a4848950771508f70d9c909 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Thu, 1 Aug 2024 15:50:10 +0200 Subject: [PATCH 1/2] Sketcher/Toponaming: import code for SketchObject::checkSubName() from LS3 * import code * add modified_item assignment in TaskSketcherElements::onSelectionChanged() like for non ExternalEdge --- src/Mod/Sketcher/App/SketchObject.cpp | 84 +++++++++++++++---- src/Mod/Sketcher/Gui/TaskSketcherElements.cpp | 1 + 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 177a73aa5e..1fd24adc10 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -11350,26 +11350,74 @@ Data::IndexedName SketchObject::checkSubName(const char *subname) const{ bio::stream iss(mappedSubname+1, std::strlen(mappedSubname+1)); int id = -1; - switch(mappedSubname[0]) { - case '\0': // check length != 0 + bool valid = false; + switch (mappedSubname[0]) { + case '\0': // check length != 0 + break; + + case 'g': // = geometry + case 'e': // = external geometry + if (iss >> id) { + valid = true; + } + break; + + // for RootPoint, H_Axis, V_Axis + default: { + const char* dot = strchr(mappedSubname, '.'); + if (dot) { + mappedSubname = dot + 1; + } + return Data::IndexedName(mappedSubname, types, false); + } + } + + if (!valid) { FC_ERR("invalid subname " << subname); - break; + // return sub; + return Data::IndexedName(); + } - case 'g': // = geometry - case 'e': // = external geometry - if(!(iss>>id)) - FC_ERR("invalid subname " << subname); - break; - - // for RootPoint, H_Axis, V_Axis - default: { - const char *dot = strchr(mappedSubname,'.'); - if(dot) - mappedSubname = dot+1; - return Data::IndexedName(mappedSubname, types, false); - }} - - // TNP July '24: omitted code related to external and internal sketcher stuff implemented in LS3 + int geoId; + const Part::Geometry* geo = 0; + switch (mappedSubname[0]) { + case 'g': { + auto it = geoMap.find(id); + if (it != geoMap.end()) { + geoId = it->second; + geo = getGeometry(geoId); + } + break; + } + case 'e': { + auto it = externalGeoMap.find(id); + if (it != externalGeoMap.end()) { + geoId = -it->second - 1; + geo = getGeometry(geoId); + } + break; + } + } + if (geo && GeometryFacade::getId(geo) == id) { + char sep; + int posId = static_cast(PointPos::none); + if ((iss >> sep >> posId) && sep == 'v') { + int idx = getVertexIndexGeoPos(geoId, static_cast(posId)); + if (idx < 0) { + FC_ERR("invalid subname " << subname); + // return sub; + return Data::IndexedName(); + } + return Data::IndexedName::fromConst("Vertex", idx + 1); + } + else if (geoId >= 0) { + return Data::IndexedName::fromConst("Edge", geoId + 1); + } + else { + return Data::IndexedName::fromConst("ExternalEdge", -geoId - 2); + } + } + FC_ERR("cannot find subname " << subname); return Data::IndexedName(); } diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp index 95d88cf886..c062242de9 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp @@ -1452,6 +1452,7 @@ void TaskSketcherElements::onSelectionChanged(const Gui::SelectionChanges& msg) static_cast(ui->listWidgetElements->item(i)); if (item->ElementNbr == ElementId) { item->isLineSelected = select; + modified_item = item; break; } } From 62f9d10321509d18c3d8d3811103c4af66a064d2 Mon Sep 17 00:00:00 2001 From: CalligaroV Date: Sun, 8 Sep 2024 10:39:54 +0200 Subject: [PATCH 2/2] Sketcher/Toponaming: import code for SketchObject::checkSubName() from LS3 * applied review hints Signed-off-by: CalligaroV --- src/Mod/Sketcher/App/SketchObject.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 1fd24adc10..7c1e146aa5 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -11374,7 +11374,6 @@ Data::IndexedName SketchObject::checkSubName(const char *subname) const{ if (!valid) { FC_ERR("invalid subname " << subname); - // return sub; return Data::IndexedName(); } @@ -11405,7 +11404,6 @@ Data::IndexedName SketchObject::checkSubName(const char *subname) const{ int idx = getVertexIndexGeoPos(geoId, static_cast(posId)); if (idx < 0) { FC_ERR("invalid subname " << subname); - // return sub; return Data::IndexedName(); } return Data::IndexedName::fromConst("Vertex", idx + 1);