X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Feature.h;h=c266b505ea1a194910a7ab7a020a72b448717532;hb=94ba553e7b92f11a936e027b49bbd1d501eeee44;hp=59c0e453743776ac0ad624b931c5e9211cb4866c;hpb=329d73a7dbce38e38063ff41186be492e3529ab5;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Feature.h b/src/ModelAPI/ModelAPI_Feature.h index 59c0e4537..c266b505e 100644 --- a/src/ModelAPI/ModelAPI_Feature.h +++ b/src/ModelAPI/ModelAPI_Feature.h @@ -2,16 +2,30 @@ // Created: 21 Mar 2014 // Author: Mikhail PONIKAROV -#ifndef ModelAPI_Feature_HeaderFile -#define ModelAPI_Feature_HeaderFile +#ifndef ModelAPI_Feature_H_ +#define ModelAPI_Feature_H_ -#include "ModelAPI_Object.h" -#include "ModelAPI_PluginManager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include -#include #include +#include +#include + class ModelAPI_Data; class ModelAPI_Document; class ModelAPI_Result; @@ -25,16 +39,28 @@ class ModelAPI_Feature : public ModelAPI_Object { ///< list of current results of this feature std::list > myResults; -public: + public: /// 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;} + { + static std::string MY_GROUP = "Features"; + return MY_GROUP; + } + + /// Returns document this feature belongs to + virtual boost::shared_ptr document() const + { + return ModelAPI_Object::document(); + } /// Returns the group identifier of this result - virtual std::string groupName() { return group(); } + virtual std::string groupName() + { + return group(); + } /// Request for initialization of data model of the feature: adding all attributes virtual void initAttributes() = 0; @@ -43,28 +69,110 @@ public: virtual void execute() = 0; /// returns the current results of the feature - std::list >& results() {return myResults;} + MODELAPI_EXPORT const std::list >& results(); /// returns the first result in the list or NULL reference - boost::shared_ptr firstResult() - {return myResults.size() ? *(myResults.begin()) : boost::shared_ptr();} + MODELAPI_EXPORT boost::shared_ptr firstResult(); + /// returns the last result in the list or NULL reference + MODELAPI_EXPORT boost::shared_ptr lastResult(); /// sets the alone result - void setResult(const boost::shared_ptr& theResult) - {myResults.clear(); myResults.push_back(theResult);} + MODELAPI_EXPORT void setResult(const boost::shared_ptr& theResult); + /// sets the result by index (zero based), results before this must be set before + MODELAPI_EXPORT void setResult(const boost::shared_ptr& theResult, + const int theIndex); + /// removes the result from the feature + MODELAPI_EXPORT void removeResult(const boost::shared_ptr& theResult); + /// removes all results from the feature + MODELAPI_EXPORT void eraseResults(); + /// removes all fields from this feature: results, data, etc + MODELAPI_EXPORT virtual void erase(); + + /// Returns true if result is persistent (stored in document) and on undo-redo, save-open + /// it is not needed to recompute it. + virtual bool isPersistentResult() {return true;} /// 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;} + virtual bool isAction() + { + return false; + } /// Must return document where the new feature must be added to /// By default it is current document - virtual boost::shared_ptr documentToAdd() - {return ModelAPI_PluginManager::get()->currentDocument();} + MODELAPI_EXPORT virtual boost::shared_ptr documentToAdd(); /// To virtually destroy the fields of successors - virtual ~ModelAPI_Feature() {} + MODELAPI_EXPORT virtual ~ModelAPI_Feature(); + + MODELAPI_EXPORT static boost::shared_ptr feature(ObjectPtr theObject); + + // + // Helper methods, aliases for data()->method() + // ----------------------------------------------------------------------------------------------- + inline std::string name() + { + return data()->name(); + } + + inline boost::shared_ptr boolean(const std::string& theID) + { + return data()->boolean(theID); + } + + inline boost::shared_ptr document(const std::string& theID) + { + return data()->document(theID); + } + + inline boost::shared_ptr real(const std::string& theID) + { + return data()->real(theID); + } + + inline boost::shared_ptr integer(const std::string& theID) + { + return data()->integer(theID); + } + + inline boost::shared_ptr refattr(const std::string& theID) + { + return data()->refattr(theID); + } + + inline boost::shared_ptr reference(const std::string& theID) + { + return data()->reference(theID); + } + + inline boost::shared_ptr reflist(const std::string& theID) + { + return data()->reflist(theID); + } + + inline boost::shared_ptr selection(const std::string& theID) + { + return data()->selection(theID); + } + + inline boost::shared_ptr selectionList(const std::string& theID) + { + return data()->selectionList(theID); + } + + inline boost::shared_ptr string(const std::string& theID) + { + return data()->string(theID); + } + + inline boost::shared_ptr attribute(const std::string& theID) + { + return data()->attribute(theID); + } + // ----------------------------------------------------------------------------------------------- }; //! Pointer on feature object typedef boost::shared_ptr FeaturePtr; #endif +