#include <TDocStd_Document.hxx>
#include <NCollection_DataMap.hxx>
#include <TDF_Label.hxx>
+#include <TDF_LabelList.hxx>
#include <map>
#include <set>
#include <vector>
//! \param theFeature a removed feature
void removeFeature(FeaturePtr theFeature);
+ //! Moves the feature to make it after the given one in the history.
+ void moveFeature(FeaturePtr theMoved, FeaturePtr theAfterThis);
+
//! Returns the existing feature by the label
//! \param theLabel base label of the feature
FeaturePtr feature(TDF_Label theLabel) const;
const std::string& theGroupID, const std::string& theName);
//! Returns the result by the result name
- ResultPtr Model_Objects::findByName(const std::string theName);
+ ResultPtr findByName(const std::string theName);
//! Returns the object index in the group. Object must be visible. Otherwise returns -1.
///! Returns all (and disabled) results of the given type. Not fast method (iterates all features).
void allResults(const std::string& theGroupID, std::list<ResultPtr>& theResults);
- /// Creates a construction cresults
+ //! Returns the number of all features: in the history or not
+ int numInternalFeatures();
+ //! Returns the feature by zero-based index: features in the history or not
+ std::shared_ptr<ModelAPI_Feature> internalFeature(const int theIndex);
+
+ //! Returns feature by the id of the feature (produced by the Data "featureId" method)
+ std::shared_ptr<ModelAPI_Feature> featureById(const int theId);
+
+
+ /// Creates a construction result
std::shared_ptr<ModelAPI_ResultConstruction> createConstruction(
const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
- /// Creates a body results
+ /// Creates a body result
std::shared_ptr<ModelAPI_ResultBody> createBody(
const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
- /// Creates a part results
+ /// Creates a part result
std::shared_ptr<ModelAPI_ResultPart> createPart(
const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
- /// Creates a group results
+ /// Copies a part result, keeping the reference to origin
+ std::shared_ptr<ModelAPI_ResultPart> copyPart(
+ const std::shared_ptr<ModelAPI_ResultPart>& theOrigin,
+ const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
+ /// Creates a group result
std::shared_ptr<ModelAPI_ResultGroup> createGroup(
const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
-
+ /// Creates a parameter result
std::shared_ptr<ModelAPI_ResultParameter> createParameter(
const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
void setUniqueName(FeaturePtr theFeature);
//! Synchronizes myFeatures list with the updated document
- //! \param theMarkUpdated causes the "update" event for all features
+ //! \param theUpdated list of labels that are marked as modified, so featrues must be also
//! \param theUpdateReferences causes the update of back-references
//! \param theFlush makes flush all events in the end of all modifications of this method
- void synchronizeFeatures(const bool theMarkUpdated, const bool theUpdateReferences,
+ void synchronizeFeatures(const TDF_LabelList& theUpdated, const bool theUpdateReferences,
const bool theFlush);
//! Synchronizes the BackReferences list in Data of Features and Results
void synchronizeBackRefs();
/// Creates the history: up to date with the current state
void createHistory(const std::string& theGroupID);
- /// Returns to the next (from the history point of view) feature, any: invisible or disabled
+ /// 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);
/// 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
FeaturePtr lastFeature();
+ /// Returns true if theLater is in history of features creation later than theCurrent
+ bool isLater(FeaturePtr theLater, FeaturePtr theCurrent) const;
+
+ /// Returns the result group identifier of the given feature (for this at least one result must
+ /// be created before)
+ std::string featureResultGroup(FeaturePtr theFeature);
+
+ //! Returns all features of the document including the hidden features which are not in
+ //! history. Not very fast method, for calling once, not in big cycles.
+ std::list<std::shared_ptr<ModelAPI_Feature> > allFeatures();
+
+ //! synchronises back references for the given object basing on the collected data
+ void synchronizeBackRefsForObject(
+ const std::set<std::shared_ptr<ModelAPI_Attribute>>& theNewRefs, ObjectPtr theObject);
private:
TDF_Label myMain; ///< main label of the data storage