From f31aed1c40c433fb6f803900c473004a92792d75 Mon Sep 17 00:00:00 2001 From: DeepSOIC Date: Tue, 12 May 2015 03:33:09 +0300 Subject: [PATCH] Sketcher: Fix duplicate external avoidance false positives Attempting to link to Edge1 of one object failed when there was already an Edge1 linked from another object. --- src/Mod/Sketcher/App/SketchObject.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index d156b8032..3a52ac93e 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -2760,12 +2760,18 @@ int SketchObject::addExternal(App::DocumentObject *Obj, const char* SubName) const std::vector originalObjects = Objects; const std::vector originalSubElements = SubElements; - std::vector::iterator it; - it = std::find(SubElements.begin(), SubElements.end(), SubName); - - // avoid duplicates - if (it != SubElements.end()) + if (Objects.size() != SubElements.size()) { + assert(0 /*counts of objects and subelements in external geometry links do not match*/); + Base::Console().Error("Internal error: counts of objects and subelements in external geometry links do not match\n"); return -1; + } + for (int i = 0 ; i < Objects.size() ; i++){ + if (Objects[i] == Obj && std::string(SubName) == SubElements[i]){ + Base::Console().Error("Link to %s already exists in this sketch.\n",SubName); + return -1; + } + } + // add the new ones Objects.push_back(Obj);