X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Objects.h;h=627d3900ee668405a94754a3d260cccf74c7f66b;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=5e1f0b350b438a3fa786f82c1dcd8e8f3d32d01e;hpb=d73d0ed51652cce2355ac6f0106f2d16c71d9d0f;p=modules%2Fshaper.git diff --git a/src/Model/Model_Objects.h b/src/Model/Model_Objects.h index 5e1f0b350..627d3900e 100644 --- a/src/Model/Model_Objects.h +++ b/src/Model/Model_Objects.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,10 +12,9 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #ifndef Model_Objects_H_ @@ -28,7 +27,6 @@ #include #include -#include #include #include #include @@ -36,9 +34,7 @@ #include #include -// 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); +extern int kUNDEFINED_FEATURE_INDEX; /**\class Model_Objects * \ingroup DataModel @@ -49,7 +45,7 @@ static Standard_Boolean IsEqual(const TDF_Label& theLab1, const TDF_Label& theLa class Model_Objects { public: - //! Registers the fieature in the data structure + //! Registers the feature in the data structure //! \param theFeature feature that must be added to the data structure //! \param theAfterThis the feature will be added after this feature; //! if it is null, the added feature will be the first @@ -83,10 +79,10 @@ class Model_Objects //! \param theName name of the object to search //! \returns null if such object is not found std::shared_ptr objectByName( - const std::string& theGroupID, const std::string& theName); + const std::string& theGroupID, const std::wstring& theName); //! Returns the result by the result name - ResultPtr findByName(const std::string theName); + ResultPtr findByName(const std::wstring theName); //! Returns the object index in the group. Object must be visible. Otherwise returns -1. @@ -109,6 +105,10 @@ class Model_Objects //! \param theAllowFolder take into account grouping feature by folders int size(const std::string& theGroupID, const bool theAllowFolder = false); + //! Returns the parent object of this child. This may be result or feature, parent of a + //! top result. Fast method, that uses internal data structure specifics. + std::shared_ptr parent(const std::shared_ptr theChild); + //! Returns all (and disabled) results of the given type. //! Not fast method (iterates all features). void allResults(const std::string& theGroupID, std::list& theResults); @@ -118,16 +118,13 @@ class Model_Objects //! Returns the feature by zero-based index: features in the history or not std::shared_ptr internalFeature(const int theIndex); - //! Returns feature by the id of the feature (produced by the Data "featureId" method) - std::shared_ptr featureById(const int theId); - - /// Creates a construction result std::shared_ptr createConstruction( const std::shared_ptr& theFeatureData, const int theIndex = 0); /// Creates a body result std::shared_ptr createBody( - const std::shared_ptr& theFeatureData, const int theIndex = 0); + const std::shared_ptr& theFeatureData, const int theIndex = 0, + const std::wstring& theNameShape = L""); /// Creates a part result std::shared_ptr createPart( const std::shared_ptr& theFeatureData, const int theIndex = 0); @@ -162,14 +159,27 @@ class Model_Objects std::shared_ptr findFolder( const std::list >& theFeatures, const bool theBelow); + //! Search a folder containing the given feature. + //! Additionally calculates a zero-based index of the feature in this folder. + //! \param theFeature feature to search + //! \param theIndexInFolder zero-based index in the folder or -1 if the feature is top-level. + //! \return the folder containing the feature or empty pointer if the feature is top-level. + std::shared_ptr findContainingFolder( + const std::shared_ptr& theFeature, + int& theIndexInFolder); //! Add a list of features to the folder. The correctness of the adding is not performed //! (such checks have been done in corresponding find.. method). - //! \return \c true if the movement is successfull + //! \return \c true if the movement is successful bool moveToFolder(const std::list >& theFeatures, const std::shared_ptr& theFolder); //! Remove features from the folder + //! \param theFeatures list of features to be removed + //! \param theBefore extract features before the folder (this parameter is applicable only + //! when all features in the folder are taking out, + //! in other cases the direction is taken automatically) //! \return \c true if the features have been moved out - bool removeFromFolder(const std::list >& theFeatures); + bool removeFromFolder(const std::list >& theFeatures, + const bool theBefore = true); //! Sets the owner of this manager void setOwner(DocumentPtr theDoc); @@ -177,8 +187,8 @@ class Model_Objects //! Returns the owner of this manager DocumentPtr owner() {return myDoc;} - //! Deletes all managed features wit hemmitting of corresponded signal - ~Model_Objects(); + //! Deletes all managed features with emitting of corresponded signal + virtual ~Model_Objects(); protected: @@ -189,15 +199,15 @@ class Model_Objects //! feature type + "_" + index void setUniqueName(FeaturePtr theFeature); - //! Initializes the foldet with an unique name ("Folder_" + index) + //! Initializes the folder with an unique name ("Folder_" + index) void setUniqueName(FolderPtr theFolder); //! Synchronizes myFeatures list with the updated document - //! \param theUpdated list of labels that are marked as modified, so featrues must be also + //! \param theUpdated list of labels that are marked as modified, so features must be also //! \param theUpdateReferences causes the update of back-references //! \param theExecuteFeatures requires re-execute modified persistent features //! (not needed on undo/redo/abort/open) - //! \param theOpen - on open nothing must be reexecuted, except not persistent results + //! \param theOpen - on open nothing must be re-executed, except not persistent results //! \param theFlush makes flush all events in the end of all modifications of this method void synchronizeFeatures(const TDF_LabelList& theUpdated, const bool theUpdateReferences, const bool theOpen, const bool theExecuteFeatures, const bool theFlush); @@ -214,7 +224,8 @@ class Model_Objects //! (attaches 'data' of result to tree) void storeResult(std::shared_ptr theFeatureData, std::shared_ptr theResult, - const int theResultIndex = 0); + const int theResultIndex = 0, + const std::wstring& theNameShape = L""); //! returns the label of result by index; creates this label if it was not created before TDF_Label resultLabel(const std::shared_ptr& theFeatureData, @@ -238,8 +249,9 @@ class Model_Objects /// Returns the next (from the history point of view) feature, any: invisible or disabled /// \param theCurrent previous to the resulting feature - /// \param theReverse if it is true, iterates in reverced order (next becomes previous) - FeaturePtr nextFeature(FeaturePtr theCurrent, const bool theReverse = false); + /// \param theReverse if it is true, iterates in reversed order (next becomes previous) + /// \param theIndex may be used for optimization: index of theCurrent in references array + FeaturePtr nextFeature(FeaturePtr theCurrent, int& theIndex, const bool theReverse = false); /// Returns to the first (from the history point of view) feature, any: invisible or disabled FeaturePtr firstFeature(); /// Returns to the last (from the history point of view) feature, any: invisible or disabled @@ -249,8 +261,8 @@ class Model_Objects /// Returns the next or previous label /// \param theCurrent given label - /// \param theReverse if it is true, iterates in reverced order (next becomes previous) - TDF_Label nextLabel(TDF_Label theCurrent, const bool theReverse = false); + /// \param theReverse if it is true, iterates in reversed order (next becomes previous) + TDF_Label nextLabel(TDF_Label theCurrent, int& theIndex, const bool theReverse = false); /// Returns the result group identifier of the given feature (for this at least one result must /// be created before) @@ -264,27 +276,27 @@ class Model_Objects //! history. Not very fast method, for calling once, not in big cycles. std::list > allObjects(); - //! synchronises back references for the given object basing on the collected data + //! synchronizes back references for the given object basing on the collected data void synchronizeBackRefsForObject( const std::set>& theNewRefs, ObjectPtr theObject); /// Just removes all features without touching the document data (to be able undo) virtual void eraseAllFeatures(); - // Check whether the pre-image of the result had user-defined name. + // Check whether the predefined-image of the result had user-defined name. // If yes, return this name. bool hasCustomName(DataPtr theFeatureData, ResultPtr theResult, int theResultIndex, - std::string& theParentName) const; + std::wstring& theParentName) const; /// Return object representing a folder or empty pointer - ObjectPtr folder(TDF_Label theLabel) const; + const ObjectPtr& folder(TDF_Label theLabel) const; private: TDF_Label myMain; ///< main label of the data storage - DocumentPtr myDoc; ///< doc,ument, owner of this objects manager: needed for events creation + DocumentPtr myDoc; ///< document, owner of this objects manager: needed for events creation /// All managed features (not only in history of OB) /// For optimization mapped by labels @@ -294,7 +306,7 @@ class Model_Objects NCollection_DataMap myFolders; /// Map from group id to the array that contains all objects located in history. - /// Each array is updated by demand from scratch, by browing all the features in the history. + /// Each array is updated by demand from scratch, by browsing all the features in the history. std::map > myHistory; friend class Model_Document;