X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Filter.h;h=cfd0dc6c6544f256a3392909101eabd8137c8d92;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=758ece6485101a22d416b265328ac73b4ce58b03;hpb=2272de4179731e4841f6d6ca8b7f33ec67bd0d4e;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Filter.h b/src/ModelAPI/ModelAPI_Filter.h index 758ece648..cfd0dc6c6 100644 --- a/src/ModelAPI/ModelAPI_Filter.h +++ b/src/ModelAPI/ModelAPI_Filter.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -20,82 +20,11 @@ #ifndef ModelAPI_Filter_H_ #define ModelAPI_Filter_H_ -#include "ModelAPI.h" -#include "ModelAPI_Attribute.h" -#include "ModelAPI_Feature.h" - -#include "ModelAPI_Data.h" +#include "ModelAPI_FiltersArgs.h" +#include "ModelAPI_ResultBody.h" #include -#include - -/// separator between the filter name and the filter attribute ID -static const std::string kFilterSeparator = "__"; - -/**\class ModelAPI_FiltersFeature -* \ingroup DataModel -* \brief An interface for working with filters in the feature. A filters feature must inherit it -* in order to allow management of filters in the feature data structure. -*/ -class ModelAPI_FiltersFeature: public ModelAPI_Feature -{ -public: - /// Adds a filter to the feature. Also initializes arguments of this filter. - virtual void addFilter(const std::string theFilterID) = 0; - - /// Removes an existing filter from the feature. - virtual void removeFilter(const std::string theFilterID) = 0; - - /// Returns the list of existing filters in the feature. - virtual std::list filters() const = 0; - - /// Stores the reversed flag for the filter. - virtual void setReversed(const std::string theFilterID, const bool theReversed) = 0; - - /// Returns the reversed flag value for the filter. - virtual bool isReversed(const std::string theFilterID) = 0; - - /// Returns the ordered list of attributes related to the filter. - virtual std::list filterArgs(const std::string theFilterID) const = 0; -}; - -typedef std::shared_ptr FiltersFeaturePtr; - - -/// definition of arguments of filters: id of the argument to attributes -class ModelAPI_FiltersArgs { - /// a map from the FilterID+AttributeID -> attribute - std::map myMap; - std::string myCurrentFilter; ///< ID of the filter that will take attributes now - FiltersFeaturePtr myFeature; ///< the feature is stored to minimize initAttribute interface -public: - ModelAPI_FiltersArgs() {} - - /// Sets the current filter ID - void setFilter(const std::string& theFilterID) { - myCurrentFilter = theFilterID; - } - - /// Sets the current feature - void setFeature(const FiltersFeaturePtr theFeature) { - myFeature = theFeature; - } - /// Appends an argument of a filter - void add(AttributePtr theAttribute) { - myMap[theAttribute->id()] = theAttribute; - } - - /// returns the argument of the current filter by the argument id - AttributePtr argument(const std::string& theID) { - return myMap.find(myCurrentFilter + kFilterSeparator + theID)->second; - } - /// adds an attribute of the filter - std::shared_ptr initAttribute( - const std::string& theID, const std::string theAttrType) { - return myFeature->data()->addFloatingAttribute(theID, theAttrType, myCurrentFilter); - } -}; /**\class ModelAPI_ViewFilter * \ingroup DataModel @@ -104,6 +33,8 @@ public: class ModelAPI_Filter { public: + virtual ~ModelAPI_Filter() {} + /// Returns name of the filter to represent it in GUI virtual const std::string& name() const = 0; @@ -113,7 +44,14 @@ public: /// This method should contain the filter logic. It returns true if the given shape /// is accepted by the filter. /// \param theShape the given shape - virtual bool isOk(const GeomShapePtr& theShape, const ModelAPI_FiltersArgs& theArgs) const = 0; + /// \param theResult parent result of the shape to be checked + /// \param theArgs arguments of the filter + virtual bool isOk(const GeomShapePtr& theShape, + const ResultPtr& theResult, + const ModelAPI_FiltersArgs& theArgs) const = 0; + + /// Returns True if the filter can be used several times within one filtering + virtual bool isMultiple() const { return false; } /// Returns XML string which represents GUI of the filter /// By default it returns nothing (no GUI) @@ -121,7 +59,11 @@ public: /// Initializes arguments of a filter. If a filter has no arguments, this method may be /// not redefined. - virtual void initAttributes(ModelAPI_FiltersArgs& theArguments) {} + virtual void initAttributes(ModelAPI_FiltersArgs& /*theArguments*/) {} + + /// Returns XML string which represents GUI of the filter + /// by reading corresponding XML file. + MODELAPI_EXPORT virtual std::string xmlFromFile(const std::string& theConfigFile) const; private: bool myIsReverse; @@ -129,37 +71,4 @@ private: typedef std::shared_ptr FilterPtr; - -/**\class ModelAPI_FiltersFactory -* \ingroup DataModel -* \brief Manages registering of filters -*/ -class ModelAPI_FiltersFactory -{ -public: - /// Register an instance of a filter - /// \param theID unique identifier of the filter, not necessary equal to the name of filter - /// \param theFilter the filter's instance - virtual void registerFilter(const std::string& theID, ModelAPI_Filter* theFilter) = 0; - - /// Returns true if all filters of the Filters feature are ok for the Shape (taking into account - /// the Reversed states). - /// \param theFiltersFeature feature that contains all information about the filters - /// \param theShape the checked shape - virtual bool isValid(FeaturePtr theFiltersFeature, GeomShapePtr theShape) = 0; - - /// Returns the filters that support the given shape type - virtual std::list filters(GeomAPI_Shape::ShapeType theType) = 0; - - /// Returns a filter by ID - virtual FilterPtr filter(std::string theID) = 0; - - /// Returns a filter ID by the filter pointer - virtual std::string id(FilterPtr theFilter) = 0; - -protected: - /// Get instance from Session - ModelAPI_FiltersFactory() {} -}; - #endif \ No newline at end of file