X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Document.h;h=598c3b633f674c283e69f89c7b1edaff4f75341b;hb=7b76b534d04e5d50f1ad319e58e0e22c6bb742a3;hp=340ecd4ccf9d662be95224b9c883686c01a1ac99;hpb=db1bdf5481826c868b2c92c6cbc9afe8c5ad337c;p=modules%2Fshaper.git diff --git a/src/Model/Model_Document.h b/src/Model/Model_Document.h index 340ecd4cc..598c3b633 100644 --- a/src/Model/Model_Document.h +++ b/src/Model/Model_Document.h @@ -2,8 +2,8 @@ // Created: 28 Feb 2014 // Author: Mikhail PONIKAROV -#ifndef Model_Document_HeaderFile -#define Model_Document_HeaderFile +#ifndef Model_Document_H_ +#define Model_Document_H_ #include #include @@ -19,8 +19,8 @@ class Handle_Model_Document; // for TDF_Label map usage -static Standard_Integer HashCode(const TDF_Label& theLab,const Standard_Integer theUpper); -static Standard_Boolean IsEqual(const TDF_Label& theLab1,const TDF_Label& theLab2); +static Standard_Integer HashCode(const TDF_Label& theLab, const Standard_Integer theUpper); +static Standard_Boolean IsEqual(const TDF_Label& theLab1, const TDF_Label& theLab2); /**\class Model_Document * \ingroup DataModel @@ -28,9 +28,9 @@ static Standard_Boolean IsEqual(const TDF_Label& theLab1,const TDF_Label& theLa * Document contains all data that must be stored/retrived in the file. * Also it provides acces to this data: open/save, transactions management etc. */ -class Model_Document: public ModelAPI_Document +class Model_Document : public ModelAPI_Document { -public: + public: //! Loads the OCAF document from the file. //! \param theFileName full name of the file to load @@ -40,8 +40,9 @@ public: //! Saves the OCAF document to the file. //! \param theFileName full name of the file to store + //! \param theResults the result full file names that were stored by "save" //! \returns true if file was stored successfully - MODEL_EXPORT virtual bool save(const char* theFileName); + MODEL_EXPORT virtual bool save(const char* theFileName, std::list& theResults); //! Removes document data MODEL_EXPORT virtual void close(); @@ -85,34 +86,46 @@ public: //! Adds a new sub-document by the identifier, or returns existing one if it is already exist MODEL_EXPORT virtual boost::shared_ptr subDocument(std::string theDocID); + //! Internal sub-document by ID + MODEL_EXPORT virtual boost::shared_ptr subDoc(std::string theDocID); + ///! Returns the id of hte document - MODEL_EXPORT virtual const std::string& id() const {return myID;} + 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 ObjectPtr object(const std::string& theGroupID, const int theIndex); + //! \param theHidden if it is true, it counts also the features that are not in tree + MODEL_EXPORT virtual ObjectPtr object(const std::string& theGroupID, const int theIndex, + const bool theHidden = false); //! Returns the number of features in the group - MODEL_EXPORT virtual int size(const std::string& theGroupID); + //! If theHidden is true, it counts also the features that are not in tree + MODEL_EXPORT virtual int size(const std::string& theGroupID, const bool theHidden = false); /// Creates a construction cresults MODEL_EXPORT virtual boost::shared_ptr createConstruction( - const boost::shared_ptr& theFeatureData, const int theIndex = 0); + const boost::shared_ptr& theFeatureData, const int theIndex = 0); /// Creates a body results MODEL_EXPORT virtual boost::shared_ptr createBody( - const boost::shared_ptr& theFeatureData, const int theIndex = 0); + const boost::shared_ptr& theFeatureData, const int theIndex = 0); /// Creates a part results MODEL_EXPORT virtual boost::shared_ptr createPart( - const boost::shared_ptr& theFeatureData, const int theIndex = 0); + const boost::shared_ptr& theFeatureData, const int theIndex = 0); //! Returns a feature by result (owner of result) - MODEL_EXPORT virtual boost::shared_ptr + MODEL_EXPORT virtual boost::shared_ptr feature(const boost::shared_ptr& theResult); + ///! Returns true if parametric updater need to execute feature on recomputartion + ///! On abort, undo or redo it is not necessary: results in document are updated automatically + bool executeFeatures() {return myExecuteFeatures;} -protected: + protected: //! Returns (creates if needed) the features label TDF_Label featuresLabel(); @@ -127,7 +140,10 @@ protected: //! Creates new document with binary file format Model_Document(const std::string theID); - Handle_TDocStd_Document document() {return myDoc;} + Handle_TDocStd_Document document() + { + return myDoc; + } //! performas compactification of all nested operations into one void compactNested(); @@ -137,16 +153,22 @@ protected: //! Allows to store the result in the data tree of the document (attaches 'data' of result to tree) MODEL_EXPORT virtual void storeResult(boost::shared_ptr theFeatureData, - boost::shared_ptr theResult, const int theResultIndex = 0); + boost::shared_ptr theResult, + const int theResultIndex = 0); + + //! returns the label of result by index; creates this label if it was not created before + TDF_Label resultLabel(const boost::shared_ptr& theFeatureData, const int theResultIndex); + //! Updates the results list of the feature basing on the current data tree + void updateResults(FeaturePtr theFeature); friend class Model_Application; - friend class Model_PluginManager; + friend class Model_Session; friend class DFBrowser; -private: - std::string myID; ///< identifier of the document in the application - Handle_TDocStd_Document myDoc; ///< OCAF document + 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; /// number of nested transactions performed (or -1 if not nested) @@ -159,6 +181,8 @@ private: std::set mySubs; /// transaction indexes (related to myTransactionsAfterSave) which were empty in this doc std::map myIsEmptyTr; + /// If it is true, features are not executed on update (on abort, undo, redo) + bool myExecuteFeatures; }; #endif