X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Feature.h;h=6d7955f4b1dee713b9149faa581656770c1f5155;hb=7f5d3b6de3d879b6a11389c06a6f183b2fa5a1b2;hp=a33d05084ea4c88675d15d9b6a653e2ebf9eecdd;hpb=24fd5aa4e000a03e484c5d4c544e5e08b08a747f;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Feature.h b/src/ModelAPI/ModelAPI_Feature.h index a33d05084..6d7955f4b 100644 --- a/src/ModelAPI/ModelAPI_Feature.h +++ b/src/ModelAPI/ModelAPI_Feature.h @@ -6,33 +6,62 @@ #define ModelAPI_Feature_HeaderFile #include "ModelAPI.h" +#include "ModelAPI_PluginManager.h" + #include -#include +#include -class ModelAPI_Object; +class ModelAPI_Data; +class ModelAPI_Document; /**\class ModelAPI_Feature * \ingroup DataModel * \brief Functionality of the model object: to update result, * to initialize attributes, etc. */ - -class MODELAPI_EXPORT ModelAPI_Feature +class ModelAPI_Feature { - std::shared_ptr myData; ///< manager of the data model of a feature + boost::shared_ptr myData; ///< manager of the data model of a feature + boost::shared_ptr myDoc; ///< document this feature belongs to public: /// Returns the kind of a feature (like "Point") - virtual std::string getKind() = 0; + MODELAPI_EXPORT virtual const std::string& getKind() = 0; + + /// Returns to which group in the document must be added feature + MODELAPI_EXPORT virtual const std::string& getGroup() = 0; /// Request for initialization of data model of the feature: adding all attributes - virtual void initAttributes() = 0; + MODELAPI_EXPORT virtual void initAttributes() = 0; /// Computes or recomputes the result - virtual void execute() = 0; + MODELAPI_EXPORT virtual void execute() = 0; + + /// Returns true if this feature must be displayed in the history (top level of Part tree) + MODELAPI_EXPORT virtual bool isInHistory() {return true;} + + /// Returns true if this feature must not be created: this is just an action + /// that is not stored in the features history (like delete part). + MODELAPI_EXPORT virtual bool isAction() {return false;} /// Returns the data manager of this feature - std::shared_ptr data() {return myData;} + MODELAPI_EXPORT virtual boost::shared_ptr data() {return myData;} + + /// Must return document where the new feature must be added to + /// By default it is current document + MODELAPI_EXPORT virtual boost::shared_ptr documentToAdd() + {return ModelAPI_PluginManager::get()->currentDocument();} + + /// Returns document this feature belongs to + MODELAPI_EXPORT virtual boost::shared_ptr document() + {return myDoc;} + + /// Returns true if feature refers to the same model data instance + MODELAPI_EXPORT virtual bool isSame(const boost::shared_ptr& theFeature) + {return theFeature.get() == this;} + + /// To virtually destroy the fields of successors + virtual ~ModelAPI_Feature() {} protected: /// Use plugin manager for features creation: this method is @@ -41,8 +70,16 @@ protected: {} /// Sets the data manager of an object (document does) - void setData(std::shared_ptr theData) {myData = theData;} + MODELAPI_EXPORT virtual void setData(boost::shared_ptr theData) + {myData = theData;} + /// Sets the data manager of an object (document does) + MODELAPI_EXPORT void setDoc(boost::shared_ptr theDoc) {myDoc = theDoc;} + friend class Model_Document; }; +//! Pointer on feature object +typedef boost::shared_ptr FeaturePtr; + + #endif