X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFiltersAPI%2FFiltersAPI_Filter.cpp;h=f98e9efcb4e0d9d13c3cbaeefcb0e9761fe3f046;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=668a89f7b81f65e8f6440d6b1fb59cfefc741436;hpb=86f8397a0cc86e83d5f963aaadffb3d765fc836a;p=modules%2Fshaper.git diff --git a/src/FiltersAPI/FiltersAPI_Filter.cpp b/src/FiltersAPI/FiltersAPI_Filter.cpp index 668a89f7b..f98e9efcb 100644 --- a/src/FiltersAPI/FiltersAPI_Filter.cpp +++ b/src/FiltersAPI/FiltersAPI_Filter.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 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 @@ -21,14 +21,16 @@ #include #include +#include #include +#include #include FiltersAPI_Filter::FiltersAPI_Filter( const std::string& theName, const bool theRevertFilter, - const std::list& theArguments) + const std::list& theArguments) : myName(theName), myReversed(theRevertFilter), myFilterArguments(theArguments) { } @@ -37,23 +39,50 @@ FiltersAPI_Filter::FiltersAPI_Filter(const std::string& theName, const std::list& theArguments) : myName(theName) { - for (std::list::const_iterator anArgIt = theArguments.begin(); - anArgIt != theArguments.end(); ++anArgIt) { - AttributeBooleanPtr aBoolAttr = + std::list::const_iterator anArgIt = theArguments.begin(); + // first attribute is usually for reversing the filter + AttributeBooleanPtr aBoolAttr = std::dynamic_pointer_cast(*anArgIt); - if (aBoolAttr) - myReversed = aBoolAttr->value(); - else { - AttributeSelectionListPtr aSelList = - std::dynamic_pointer_cast(*anArgIt); - if (aSelList) { - int aSize = aSelList->size(); - for (int i = 0; i < aSize; ++i) { - AttributeSelectionPtr aSelection = aSelList->value(i); - myFilterArguments.push_back( - ModelHighAPI_Selection(aSelection->context(), aSelection->value())); - } + if (aBoolAttr) { + myReversed = aBoolAttr->value(); + ++anArgIt; + } + + for (; anArgIt != theArguments.end(); ++anArgIt) { + AttributeSelectionListPtr aSelList = + std::dynamic_pointer_cast(*anArgIt); + if (aSelList) { + int aSize = aSelList->size(); + for (int i = 0; i < aSize; ++i) { + AttributeSelectionPtr aSelection = aSelList->value(i); + myFilterArguments.push_back(FiltersAPI_Argument(aSelection)); } + continue; + } + + AttributeSelectionPtr aSelection = + std::dynamic_pointer_cast(*anArgIt); + if (aSelection) { + myFilterArguments.push_back(FiltersAPI_Argument(aSelection)); + continue; + } + + AttributeStringPtr aString = std::dynamic_pointer_cast(*anArgIt); + if (aString) { + myFilterArguments.push_back(FiltersAPI_Argument(aString->value())); + continue; + } + + AttributeDoublePtr aDouble = std::dynamic_pointer_cast(*anArgIt); + if (aDouble) { + myFilterArguments.push_back(FiltersAPI_Argument(aDouble->value())); + continue; + } + + AttributeBooleanPtr aBoolean = std::dynamic_pointer_cast(*anArgIt); + if (aBoolean) { + myFilterArguments.push_back(FiltersAPI_Argument(aBoolean->value())); + continue; } } } @@ -67,15 +96,26 @@ void FiltersAPI_Filter::dump(ModelHighAPI_Dumper& theDumper) const theDumper << "model.addFilter(name = \"" << myName << "\""; if (myReversed) theDumper << ", exclude = " << myReversed; - if (!myFilterArguments.empty()) - theDumper << ", args = []"; + if (!myFilterArguments.empty()) { + theDumper << ", args = ["; + bool isFirstArg = true; + for (std::list::const_iterator anIt = myFilterArguments.begin(); + anIt != myFilterArguments.end(); ++anIt) { + if (isFirstArg) + isFirstArg = false; + else + theDumper << ", "; + anIt->dump(theDumper); + } + theDumper << "]"; + } theDumper << ")"; } // ================================================================================================ FilterAPIPtr addFilter(const std::string& name, const bool exclude, - const std::list& args) + const std::list& args) { return FilterAPIPtr(new FiltersAPI_Filter(name, exclude, args)); }