X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFiltersPlugin%2FFiltersPlugin_Selection.cpp;h=64a804d20d4e51ed2aa0edf04ffb79af8a3a113f;hb=745c72679f6346375d5e886b25cc3865f3c4daae;hp=fde5dda2903d91fc21f514193a4e61054edbb096;hpb=4c74e5b864eef28128e27b3ece944990ca8f3fbe;p=modules%2Fshaper.git diff --git a/src/FiltersPlugin/FiltersPlugin_Selection.cpp b/src/FiltersPlugin/FiltersPlugin_Selection.cpp index fde5dda29..64a804d20 100644 --- a/src/FiltersPlugin/FiltersPlugin_Selection.cpp +++ b/src/FiltersPlugin/FiltersPlugin_Selection.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2021 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 @@ -23,25 +23,48 @@ #include #include #include +#include // identifier of the reverse flag of a filter static const std::string kReverseAttrID(""); -void FiltersPlugin_Selection::addFilter(const std::string theFilterID) +std::string FiltersPlugin_Selection::addFilter(const std::string theFilterID) { ModelAPI_FiltersFactory* aFactory = ModelAPI_Session::get()->filters(); FilterPtr aFilter = aFactory->filter(theFilterID); + + std::string aFilterID = theFilterID; + if (aFilter->isMultiple()) { // check that there is already such filter, so, increment ID + std::list aFilters; + data()->allGroups(aFilters); + for(int anID = 0; true; anID++) { + if (anID != 0) { + std::ostringstream aStream; + aStream<<"_"<::iterator aFiltersIDs = aFilters.begin(); + for(; aFiltersIDs != aFilters.end(); aFiltersIDs++) { + if (*aFiltersIDs == aFilterID) + break; + } + if (aFiltersIDs == aFilters.end()) + break; + } + } + if (aFilter.get()) { std::shared_ptr aBool = std::dynamic_pointer_cast(data()->addFloatingAttribute( - kReverseAttrID, ModelAPI_AttributeBoolean::typeId(), theFilterID)); + kReverseAttrID, ModelAPI_AttributeBoolean::typeId(), aFilterID)); aBool->setValue(false); // not reversed by default // to add attributes related to the filter ModelAPI_FiltersArgs anArgs; anArgs.setFeature(std::dynamic_pointer_cast(data()->owner())); - anArgs.setFilter(theFilterID); + anArgs.setFilter(aFilterID); aFilter->initAttributes(anArgs); } + return aFilterID; } void FiltersPlugin_Selection::removeFilter(const std::string theFilterID) @@ -123,7 +146,8 @@ void FiltersPlugin_Selection::initAttributes() std::shared_ptr aBool = std::dynamic_pointer_cast(data()->addFloatingAttribute( kReverseAttrID, ModelAPI_AttributeBoolean::typeId(), *aFIt)); - aBool->setValue(false); // not reversed by default + if (!aBool->isInitialized()) + aBool->setValue(false); // not reversed by default ModelAPI_FiltersArgs anArgs; anArgs.setFeature(std::dynamic_pointer_cast(data()->owner())); anArgs.setFilter(*aFIt);