Salome HOME
updated copyright message
[modules/shaper.git] / src / FiltersAPI / FiltersAPI_Filter.cpp
index 668a89f7b81f65e8f6440d6b1fb59cfefc741436..f98e9efcb4e0d9d13c3cbaeefcb0e9761fe3f046 100644 (file)
@@ -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
 
 #include <ModelAPI_Attribute.h>
 #include <ModelAPI_AttributeBoolean.h>
+#include <ModelAPI_AttributeDouble.h>
 #include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_AttributeString.h>
 
 #include <ModelHighAPI_Dumper.h>
 
 FiltersAPI_Filter::FiltersAPI_Filter(
     const std::string& theName,
     const bool theRevertFilter,
-    const std::list<ModelHighAPI_Selection>& theArguments)
+    const std::list<FiltersAPI_Argument>& theArguments)
   : myName(theName), myReversed(theRevertFilter), myFilterArguments(theArguments)
 {
 }
@@ -37,23 +39,50 @@ FiltersAPI_Filter::FiltersAPI_Filter(const std::string& theName,
                                      const std::list<AttributePtr>& theArguments)
   : myName(theName)
 {
-  for (std::list<AttributePtr>::const_iterator anArgIt = theArguments.begin();
-       anArgIt != theArguments.end(); ++anArgIt) {
-    AttributeBooleanPtr aBoolAttr =
+  std::list<AttributePtr>::const_iterator anArgIt = theArguments.begin();
+  // first attribute is usually for reversing the filter
+  AttributeBooleanPtr aBoolAttr =
       std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(*anArgIt);
-    if (aBoolAttr)
-      myReversed = aBoolAttr->value();
-    else {
-      AttributeSelectionListPtr aSelList =
-          std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(*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<ModelAPI_AttributeSelectionList>(*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<ModelAPI_AttributeSelection>(*anArgIt);
+    if (aSelection) {
+      myFilterArguments.push_back(FiltersAPI_Argument(aSelection));
+      continue;
+    }
+
+    AttributeStringPtr aString = std::dynamic_pointer_cast<ModelAPI_AttributeString>(*anArgIt);
+    if (aString) {
+      myFilterArguments.push_back(FiltersAPI_Argument(aString->value()));
+      continue;
+    }
+
+    AttributeDoublePtr aDouble = std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(*anArgIt);
+    if (aDouble) {
+      myFilterArguments.push_back(FiltersAPI_Argument(aDouble->value()));
+      continue;
+    }
+
+    AttributeBooleanPtr aBoolean = std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(*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<FiltersAPI_Argument>::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<ModelHighAPI_Selection>& args)
+                       const std::list<FiltersAPI_Argument>& args)
 {
   return FilterAPIPtr(new FiltersAPI_Filter(name, exclude, args));
 }