-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2020 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <Selector_NameGenerator.h>
#include <Selector_NExplode.h>
+#include <Locale_Convert.h>
+
#include <TNaming_Tool.hxx>
#include <TNaming_SameShapeIterator.hxx>
#include <TNaming_Iterator.hxx>
#include <TDataStd_Integer.hxx>
-Selector_WeakName::Selector_WeakName() : Selector_Algo()
+Selector_WeakName::Selector_WeakName() : Selector_Algo(), myRecomputeWeakIndex(false)
{
}
TDF_Label Selector_WeakName::restoreByName(std::wstring theName,
const TopAbs_ShapeEnum theShapeType, Selector_NameGenerator* theNameGenerator)
{
- std::wstring aWeakIndex = theName.substr(pureWeakNameID().size());
+ size_t aFoundWeak = theName.find(oldPureWeakNameID());
+ std::wstring aWeakIndex = theName.substr(aFoundWeak + oldPureWeakNameID().size());
std::size_t aContextPosition = aWeakIndex.find(L"_");
- myWeakIndex = std::stoi(aWeakIndex.c_str());
+ myWeakIndex = atoi(Locale::Convert::toString(aWeakIndex).c_str());
+ myRecomputeWeakIndex = aFoundWeak == 0;
myShapeType = theShapeType;
TDF_Label aContext;
if (aContextPosition != std::wstring::npos) { // context is also defined
}
}
if (!aContext.IsNull()) {
- Selector_NExplode aNexp(aContext, myShapeType);
+ Selector_NExplode aNexp(aContext, myShapeType, myRecomputeWeakIndex);
TopoDS_Shape aResult = aNexp.shape(myWeakIndex);
+ myRecomputeWeakIndex = false;
if (!aResult.IsNull()) {
Selector_Algo::store(aResult);
return true;