X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Feature.h;h=2305044edd546e0905e5e07d2d6b8daff88dba3f;hb=c57e24940c832457343b4fa2b36e0aee85e2238b;hp=1b166b600c1dfaa4116612b4904a832821435078;hpb=216e7d842a717b21a3ccc721a3ddb94f9cc9180b;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Feature.h b/src/ModelAPI/ModelAPI_Feature.h index 1b166b600..2305044ed 100644 --- a/src/ModelAPI/ModelAPI_Feature.h +++ b/src/ModelAPI/ModelAPI_Feature.h @@ -5,54 +5,63 @@ #ifndef ModelAPI_Feature_HeaderFile #define ModelAPI_Feature_HeaderFile -#include "ModelAPI.h" +#include "ModelAPI_Object.h" #include "ModelAPI_PluginManager.h" #include -#include +#include +#include -class ModelAPI_Object; +class ModelAPI_Data; class ModelAPI_Document; +class ModelAPI_Result; /**\class ModelAPI_Feature * \ingroup DataModel - * \brief Functionality of the model object: to update result, - * to initialize attributes, etc. + * \brief Feature function that represents the particular functionality + * of this operation. Produces results by the arguments. */ -class ModelAPI_Feature +class ModelAPI_Feature : public ModelAPI_Object { - std::shared_ptr myData; ///< manager of the data model of a feature - + ///< list of current results of this feature + std::list > myResults; public: - /// Returns the kind of a feature (like "Point") - MODELAPI_EXPORT virtual const std::string& getKind() = 0; + /// Returns the unique kind of a feature (like "Point") + virtual const std::string& getKind() = 0; + + /// Returns the group identifier of all features + static std::string group() + {static std::string MY_GROUP = "Features"; return MY_GROUP;} - /// Returns to which group in the document must be added feature - MODELAPI_EXPORT virtual const std::string& getGroup() = 0; + /// Returns the group identifier of this result + virtual std::string groupName() { return group(); } /// Request for initialization of data model of the feature: adding all attributes - MODELAPI_EXPORT virtual void initAttributes() = 0; + virtual void initAttributes() = 0; + + /// Computes or recomputes the results + virtual void execute() = 0; - /// Computes or recomputes the result - MODELAPI_EXPORT virtual void execute() = 0; + /// returns the current results of the feature + MODELAPI_EXPORT const std::list >& results(); + /// returns the first result in the list or NULL reference + MODELAPI_EXPORT boost::shared_ptr firstResult(); + /// sets the alone result + MODELAPI_EXPORT void setResult(const boost::shared_ptr& theResult); - /// Returns the data manager of this feature - MODELAPI_EXPORT virtual std::shared_ptr data() {return myData;} + /// Returns true if this feature must not be created: this is just an action + /// that is not stored in the features history and data model (like "delete part"). + virtual bool isAction() {return false;} /// Must return document where the new feature must be added to /// By default it is current document - MODELAPI_EXPORT virtual std::shared_ptr documentToAdd() - {return ModelAPI_PluginManager::get()->currentDocument();} - -protected: - /// Use plugin manager for features creation: this method is - /// defined here only for SWIG-wrapping - ModelAPI_Feature() - {} - - /// Sets the data manager of an object (document does) - MODELAPI_EXPORT void setData(std::shared_ptr theData) {myData = theData;} - friend class Model_Document; + MODELAPI_EXPORT virtual boost::shared_ptr documentToAdd(); + + /// To virtually destroy the fields of successors + MODELAPI_EXPORT virtual ~ModelAPI_Feature(); }; +//! Pointer on feature object +typedef boost::shared_ptr FeaturePtr; + #endif