X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Document.h;h=41f7d51f6a54bbdd828176d9d49d3a0e3b3902dd;hb=4ee6972a725f02500c2c543abeef2909180e09c1;hp=b314d9dc896c1bd9ca4f5081dd3008a3c32fa58e;hpb=2af52b19b485181c61d1065fa45ec24b94cb1449;p=modules%2Fshaper.git diff --git a/src/Model/Model_Document.h b/src/Model/Model_Document.h index b314d9dc8..41f7d51f6 100644 --- a/src/Model/Model_Document.h +++ b/src/Model/Model_Document.h @@ -63,6 +63,9 @@ public: //! \param creates feature and puts it in the document MODEL_EXPORT virtual boost::shared_ptr addFeature(std::string theID); + //! Removes the feature from the document + MODEL_EXPORT virtual void removeFeature(boost::shared_ptr theFeature); + //! Returns the existing feature by the label //! \param theLabel base label of the feature MODEL_EXPORT virtual boost::shared_ptr feature(TDF_Label& theLabel); @@ -74,19 +77,15 @@ public: MODEL_EXPORT virtual const std::string& id() const {return myID;} //! Returns the feature in the group by the index (started from zero) + //! \param theGroupID group that contains a feature + //! \param theIndex zero-based index of feature in the group + //! \param isOperation if it is true, returns feature (not Object) MODEL_EXPORT virtual boost::shared_ptr - feature(const std::string& theGroupID, const int theIndex); + feature(const std::string& theGroupID, const int theIndex, const bool isOperation = false); //! Returns the number of features in the group MODEL_EXPORT virtual int size(const std::string& theGroupID); - ///! Returns the vector of groups already added to the document - MODEL_EXPORT virtual const std::vector& getGroups() const; - - //! Returns the index of feature in the group (zero based) - //! \retruns -1 if not found - MODEL_EXPORT virtual int featureIndex(boost::shared_ptr theFeature); - protected: //! Returns (creates if needed) the group label @@ -99,29 +98,38 @@ protected: //! Adds to the document the new feature void addFeature(const boost::shared_ptr theFeature); - //! Synchronizes myGroups, myGroupsNames, myFeatures and mySubs list with the updated document - void synchronizeFeatures(); + //! Returns the object by the feature + boost::shared_ptr objectByFeature( + const boost::shared_ptr theFeature); + + //! Synchronizes myFeatures list with the updated document + void synchronizeFeatures(const bool theMarkUpdated = false); //! Creates new document with binary file format Model_Document(const std::string theID); + Handle_TDocStd_Document document() {return myDoc;} + + //! performas compactification of all nested operations into one + void compactNested(); + friend class Model_Application; + friend class Model_PluginManager; private: std::string myID; ///< identifier of the document in the application Handle_TDocStd_Document myDoc; ///< OCAF document /// number of transactions after the last "save" call, used for "IsModified" method int myTransactionsAfterSave; - /// root labels of the features groups identified by names - std::map myGroups; - std::vector myGroupsNames; ///< names of added groups to the document - /// Features managed by this document: by group name - std::map > > myFeatures; - std::set mySubs; ///< set of identifiers of sub-documents of this document + /// number of nested transactions performed (or -1 if not nested) + int myNestedNum; + /// All features managed by this document (not only in history of OB) + std::vector > myFeatures; + + ///< set of identifiers of sub-documents of this document + std::set mySubs; /// transaction indexes (related to myTransactionsAfterSave) which were empty in this doc std::map myIsEmptyTr; - /// true if the current operation is nested - bool myIsNested; }; #endif